gs-bim-air 2.0.0-beta.16 → 2.0.0-beta.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -0
- package/lib/BimAir.common-report.html +2 -2
- package/lib/BimAir.common.js +2 -2
- package/lib/BimAir.css +129 -129
- package/lib/BimAir.umd-report.html +2 -2
- package/lib/BimAir.umd.js +2 -2
- package/lib/BimAir.umd.min-report.html +2 -2
- package/lib/BimAir.umd.min.js +2 -2
- package/lib/undefined.gzundefined +0 -0
- package/package.json +1 -1
package/lib/BimAir.umd.js
CHANGED
|
@@ -3794,7 +3794,7 @@ eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;!(__WEBPAC
|
|
|
3794
3794
|
\**************************************************************/
|
|
3795
3795
|
/***/ (function(module, exports, __webpack_require__) {
|
|
3796
3796
|
|
|
3797
|
-
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;__webpack_require__(/*! core-js/modules/es.function.name.js */ \"./node_modules/core-js/modules/es.function.name.js\");\n__webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n__webpack_require__(/*! core-js/modules/es.array.iterator.js */ \"./node_modules/core-js/modules/es.array.iterator.js\");\n__webpack_require__(/*! core-js/modules/es.array-buffer.slice.js */ \"./node_modules/core-js/modules/es.array-buffer.slice.js\");\n__webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.float32-array.js */ \"./node_modules/core-js/modules/es.typed-array.float32-array.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.at.js */ \"./node_modules/core-js/modules/es.typed-array.at.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.copy-within.js */ \"./node_modules/core-js/modules/es.typed-array.copy-within.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.every.js */ \"./node_modules/core-js/modules/es.typed-array.every.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.fill.js */ \"./node_modules/core-js/modules/es.typed-array.fill.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.filter.js */ \"./node_modules/core-js/modules/es.typed-array.filter.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.find.js */ \"./node_modules/core-js/modules/es.typed-array.find.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.find-index.js */ \"./node_modules/core-js/modules/es.typed-array.find-index.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.find-last.js */ \"./node_modules/core-js/modules/es.typed-array.find-last.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.find-last-index.js */ \"./node_modules/core-js/modules/es.typed-array.find-last-index.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.for-each.js */ \"./node_modules/core-js/modules/es.typed-array.for-each.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.includes.js */ \"./node_modules/core-js/modules/es.typed-array.includes.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.index-of.js */ \"./node_modules/core-js/modules/es.typed-array.index-of.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.iterator.js */ \"./node_modules/core-js/modules/es.typed-array.iterator.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.join.js */ \"./node_modules/core-js/modules/es.typed-array.join.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.last-index-of.js */ \"./node_modules/core-js/modules/es.typed-array.last-index-of.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.map.js */ \"./node_modules/core-js/modules/es.typed-array.map.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.reduce.js */ \"./node_modules/core-js/modules/es.typed-array.reduce.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.reduce-right.js */ \"./node_modules/core-js/modules/es.typed-array.reduce-right.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.reverse.js */ \"./node_modules/core-js/modules/es.typed-array.reverse.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.set.js */ \"./node_modules/core-js/modules/es.typed-array.set.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.slice.js */ \"./node_modules/core-js/modules/es.typed-array.slice.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.some.js */ \"./node_modules/core-js/modules/es.typed-array.some.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.sort.js */ \"./node_modules/core-js/modules/es.typed-array.sort.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.subarray.js */ \"./node_modules/core-js/modules/es.typed-array.subarray.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.to-locale-string.js */ \"./node_modules/core-js/modules/es.typed-array.to-locale-string.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.to-string.js */ \"./node_modules/core-js/modules/es.typed-array.to-string.js\");\n__webpack_require__(/*! core-js/modules/esnext.typed-array.to-reversed.js */ \"./node_modules/core-js/modules/esnext.typed-array.to-reversed.js\");\n__webpack_require__(/*! core-js/modules/esnext.typed-array.to-sorted.js */ \"./node_modules/core-js/modules/esnext.typed-array.to-sorted.js\");\n__webpack_require__(/*! core-js/modules/esnext.typed-array.with.js */ \"./node_modules/core-js/modules/esnext.typed-array.with.js\");\n__webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ \"./node_modules/core-js/modules/es.regexp.to-string.js\");\n__webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ \"./node_modules/core-js/modules/web.dom-collections.for-each.js\");\n__webpack_require__(/*! core-js/modules/es.array.concat.js */ \"./node_modules/core-js/modules/es.array.concat.js\");\n__webpack_require__(/*! core-js/modules/es.array.includes.js */ \"./node_modules/core-js/modules/es.array.includes.js\");\n__webpack_require__(/*! core-js/modules/es.string.includes.js */ \"./node_modules/core-js/modules/es.string.includes.js\");\n__webpack_require__(/*! core-js/modules/es.array.splice.js */ \"./node_modules/core-js/modules/es.array.splice.js\");\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! gs-longan */ \"./packages/longan/src/index.ts\"), __webpack_require__(/*! gs-longan */ \"./packages/longan/src/index.ts\"), __webpack_require__(/*! ./material */ \"./packages/bimAir/src/gsDevFx/objects/material.ts\"), __webpack_require__(/*! ./cuttingOptions */ \"./packages/bimAir/src/gsDevFx/objects/cuttingOptions.ts\"), __webpack_require__(/*! gs-longan/longan/gs.viewer */ \"./packages/longan/src/longan/gs.viewer.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, Longan, gs_longan_1, material_1, cuttingOptions_1, gs_viewer_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", ({\n value: true\n }));\n exports.SegmentObject = void 0;\n Longan = tslib_1.__importStar(Longan);\n var SegmentObject = function () {\n function SegmentObject(viewer, segment) {\n this._viewer = null;\n this.matrixList = [];\n this._segment = segment;\n this._viewer = viewer;\n }\n Object.defineProperty(SegmentObject.prototype, \"treeNodeOject\", {\n get: function get() {\n if (!this._treeNodeObject) {\n this._treeNodeObject = this._viewer.structureTreeManager.getTreeNodeObjectByNodeKey(this.segment.key);\n }\n return this._treeNodeObject;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"viewer\", {\n get: function get() {\n return this._viewer;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"model\", {\n get: function get() {\n if (this.treeNodeOject) {\n return this.treeNodeOject.model;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"modelId\", {\n get: function get() {\n if (this.treeNodeOject) {\n return this.treeNodeOject.modelId;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"version\", {\n get: function get() {\n if (this.treeNodeOject && this.treeNodeOject.model) {\n return this.treeNodeOject.model.renderObject.version;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"componentId\", {\n get: function get() {\n if (this.treeNodeOject) {\n return this.treeNodeOject.componentId;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"materials\", {\n get: function get() {\n var materials = [];\n for (var i = 0; i < this._segment.styles.count(); i++) {\n var styleSegment = this._segment.styles.items[i].segment;\n if (this.viewer.styleSegment.subsegmentExists(styleSegment.name)) {\n materials.push(new material_1.Material(this.viewer, styleSegment.name, styleSegment.renderingOptions.lockFaceColor));\n }\n }\n return materials;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"name\", {\n get: function get() {\n return this._segment.name;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"key\", {\n get: function get() {\n return this.segment.key;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"localPosition\", {\n get: function get() {\n if (this.segment.modellingMatrix.matrix) {\n return Longan.Matrix4.getTranslate(new Float32Array(this.segment.modellingMatrix.matrix));\n } else {\n return [0, 0, 0];\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"worldPosition\", {\n get: function get() {\n var process = this.viewer.process;\n if (process) {\n var viewer = process.activeViewer;\n if (viewer) {\n var pathKeys = [];\n var treeNode = viewer.structureTreeManager.getTreeNodeObjectByNodeKey(this.nodeKey);\n while (treeNode) {\n if (treeNode.obj) {\n pathKeys.push(treeNode.obj.segment.key);\n } else {\n pathKeys.push(treeNode.key);\n }\n treeNode = treeNode.parent;\n }\n var matrix = (0, gs_viewer_1.JS_Show_Path_ModellingMatrix)(pathKeys);\n return Longan.Matrix4.getTranslate(new Float32Array(matrix));\n }\n }\n return null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"nodeKey\", {\n get: function get() {\n return this.key === undefined ? \"\" : this.key.toString();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"segment\", {\n get: function get() {\n return this._segment;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"size\", {\n get: function get() {\n var geometries = new Longan.List();\n this.traverseSegment(this.segment, geometries);\n var result = {\n pos: 0,\n face: 0,\n geo: geometries.count()\n };\n geometries.forEach(function (geo) {\n result.pos = result.pos + geo.shellSize.pos;\n result.face = result.face + geo.shellSize.face;\n });\n return result;\n },\n enumerable: false,\n configurable: true\n });\n SegmentObject.prototype.traverseSegment = function (segment, geometries) {\n if (segment) {\n geometries.items = geometries.items.concat(segment.geometries.items);\n if (segment.includes) {\n for (var i = 0; i < segment.includes.items.length; i++) {\n var item = segment.includes.items[i].segment;\n this.traverseSegment(item, geometries);\n }\n }\n if (segment.subsegments) {\n for (var i = 0; i < segment.subsegments.items.length; i++) {\n var item = segment.subsegments.items[i];\n this.traverseSegment(item, geometries);\n }\n }\n }\n return geometries;\n };\n SegmentObject.prototype.delete = function () {\n this.segment.delete();\n };\n SegmentObject.prototype.rename = function (name) {\n this.segment.rename(name);\n };\n SegmentObject.prototype.setMaterial = function (material) {\n var components = [];\n this.viewer.structureTreeManager.getComponents(this.treeNodeOject, components);\n if (material) {\n this.viewer.materialManager.override(components, material);\n } else {\n this.viewer.materialManager.clearOverride(components);\n }\n };\n SegmentObject.prototype.setHighlight = function (isHighlight) {\n if (isHighlight) {\n this.viewer.highlightManager.highlight([this]);\n } else {\n this.viewer.highlightManager.clearHighlight([this]);\n }\n };\n SegmentObject.prototype.setVisible = function (visible) {\n if (visible) {\n this.viewer.invisibleManager.clearInvisible([this]);\n } else {\n this.viewer.invisibleManager.invisible([this]);\n }\n };\n SegmentObject.prototype.setIsolation = function (isIsolation) {\n if (isIsolation) {\n this.viewer.isolationManager.isolation([this]);\n } else {\n this.viewer.isolationManager.clearIsolation([this]);\n }\n };\n SegmentObject.prototype.setCutting = function (cuttingOptions) {\n var bb = this.viewer.computeViewBoundingBox(this._segment);\n if (bb) {\n if (cuttingOptions.type == cuttingOptions_1.CuttingCreateType.BoundingBoxX) {\n cuttingOptions.origin = Longan.Vector.divide(Longan.Point.add(new Float32Array([bb[0], bb[1], bb[2]]), new Float32Array([bb[0], bb[4], bb[5]])), 2);\n cuttingOptions.direct = new Float32Array([1, 0, 0]);\n cuttingOptions.length = bb[3] - bb[0];\n } else if (cuttingOptions.type == cuttingOptions_1.CuttingCreateType.BoundingBoxY) {\n cuttingOptions.origin = Longan.Vector.divide(Longan.Point.add(new Float32Array([bb[0], bb[1], bb[2]]), new Float32Array([bb[3], bb[1], bb[5]])), 2);\n cuttingOptions.direct = new Float32Array([0, 1, 0]);\n cuttingOptions.length = bb[4] - bb[1];\n } else if (cuttingOptions.type == cuttingOptions_1.CuttingCreateType.BoundingBoxZ) {\n cuttingOptions.origin = Longan.Vector.divide(Longan.Point.add(new Float32Array([bb[0], bb[1], bb[2]]), new Float32Array([bb[3], bb[4], bb[2]])), 2);\n cuttingOptions.direct = new Float32Array([0, 0, 1]);\n cuttingOptions.length = bb[5] - bb[2];\n }\n cuttingOptions._bb = bb;\n }\n Longan.Vector.normalize(cuttingOptions._direct);\n var xAxis = new Float32Array([1, 0, 0]);\n if (Longan.GeometryOperators.isParallel(cuttingOptions._direct, xAxis)) {\n xAxis = new Float32Array([0, 1, 0]);\n }\n var yAxis = Longan.Vector.cross(cuttingOptions._direct, xAxis);\n Longan.Vector.normalize(yAxis);\n xAxis = Longan.Vector.cross(yAxis, cuttingOptions._direct);\n var origin = Longan.GeometryOperators.distancePoint(cuttingOptions._origin, cuttingOptions._direct, cuttingOptions._length * cuttingOptions._ratio);\n var bbLength = Longan.GeometryOperators.distance(new Float32Array([bb[0], bb[1], bb[2]]), new Float32Array([bb[3], bb[4], bb[5]]));\n var xPoint = Longan.GeometryOperators.distancePoint(origin, xAxis, bbLength);\n Longan.Vector.reverse(xAxis);\n var negXPoint = Longan.GeometryOperators.distancePoint(origin, xAxis, bbLength);\n var p1 = Longan.GeometryOperators.distancePoint(xPoint, yAxis, bbLength);\n var p2 = Longan.GeometryOperators.distancePoint(negXPoint, yAxis, bbLength);\n Longan.Vector.reverse(yAxis);\n var p3 = Longan.GeometryOperators.distancePoint(negXPoint, yAxis, bbLength);\n var p4 = Longan.GeometryOperators.distancePoint(xPoint, yAxis, bbLength);\n cuttingOptions._cuttingPlanes = this._segment.insertCuttingPlanes([p1[0], p1[1], p1[2], p2[0], p2[1], p2[2], p3[0], p3[1], p3[2], p4[0], p4[1], p4[2]]);\n this._segment.visibility.setCuttingPlane(true);\n this._segment.color.setCuttingFace(cuttingOptions.color);\n };\n SegmentObject.prototype.editCutting = function (cuttingOptions) {\n var bb = cuttingOptions.bb;\n if (!bb) {\n bb = this.viewer.computeViewBoundingBox(this._segment);\n cuttingOptions._bb = bb;\n }\n if (bb) {\n if (cuttingOptions.type == cuttingOptions_1.CuttingCreateType.BoundingBoxX) {\n cuttingOptions.origin = Longan.Vector.divide(Longan.Point.add(new Float32Array([bb[0], bb[1], bb[2]]), new Float32Array([bb[0], bb[4], bb[5]])), 2);\n cuttingOptions.direct = new Float32Array([1, 0, 0]);\n cuttingOptions.length = bb[3] - bb[0];\n } else if (cuttingOptions.type == cuttingOptions_1.CuttingCreateType.BoundingBoxY) {\n cuttingOptions.origin = Longan.Vector.divide(Longan.Point.add(new Float32Array([bb[0], bb[1], bb[2]]), new Float32Array([bb[3], bb[1], bb[5]])), 2);\n cuttingOptions.direct = new Float32Array([0, 1, 0]);\n cuttingOptions.length = bb[4] - bb[1];\n } else if (cuttingOptions.type == cuttingOptions_1.CuttingCreateType.BoundingBoxZ) {\n cuttingOptions.origin = Longan.Vector.divide(Longan.Point.add(new Float32Array([bb[0], bb[1], bb[2]]), new Float32Array([bb[3], bb[4], bb[2]])), 2);\n cuttingOptions.direct = new Float32Array([0, 0, 1]);\n cuttingOptions.length = bb[5] - bb[2];\n }\n }\n Longan.Vector.normalize(cuttingOptions._direct);\n var xAxis = new Float32Array([1, 0, 0]);\n if (Longan.GeometryOperators.isParallel(cuttingOptions._direct, xAxis)) {\n xAxis = new Float32Array([0, 1, 0]);\n }\n var yAxis = Longan.Vector.cross(cuttingOptions._direct, xAxis);\n Longan.Vector.normalize(yAxis);\n xAxis = Longan.Vector.cross(yAxis, cuttingOptions._direct);\n var origin = Longan.GeometryOperators.distancePoint(cuttingOptions._origin, cuttingOptions._direct, cuttingOptions._length * cuttingOptions._ratio);\n var bbLength = Longan.GeometryOperators.distance(new Float32Array([bb[0], bb[1], bb[2]]), new Float32Array([bb[3], bb[4], bb[5]]));\n var xPoint = Longan.GeometryOperators.distancePoint(origin, xAxis, bbLength);\n Longan.Vector.reverse(xAxis);\n var negXPoint = Longan.GeometryOperators.distancePoint(origin, xAxis, bbLength);\n var p1 = Longan.GeometryOperators.distancePoint(xPoint, yAxis, bbLength);\n var p2 = Longan.GeometryOperators.distancePoint(negXPoint, yAxis, bbLength);\n Longan.Vector.reverse(yAxis);\n var p3 = Longan.GeometryOperators.distancePoint(negXPoint, yAxis, bbLength);\n var p4 = Longan.GeometryOperators.distancePoint(xPoint, yAxis, bbLength);\n if (cuttingOptions.cuttingPlanes) {\n cuttingOptions.cuttingPlanes.edit([p1[0], p1[1], p1[2], p2[0], p2[1], p2[2], p3[0], p3[1], p3[2], p4[0], p4[1], p4[2]]);\n } else {\n cuttingOptions._cuttingPlanes = this._segment.insertCuttingPlanes([p1[0], p1[1], p1[2], p2[0], p2[1], p2[2], p3[0], p3[1], p3[2], p4[0], p4[1], p4[2]]);\n this._segment.visibility.setCuttingPlane(true);\n this._segment.color.setCuttingFace(cuttingOptions.color);\n }\n };\n SegmentObject.prototype.unsetCutting = function () {\n var cuttingPlanes = this._segment.findGeometry(\"CuttingPlanes\");\n if (cuttingPlanes) {\n cuttingPlanes.delete();\n }\n this._segment.visibility.unsetCuttingPlane();\n this.segment.color.unsetCuttingFace();\n };\n SegmentObject.prototype.equals = function (obj) {\n if (this.nodeKey == obj.nodeKey) {\n return true;\n } else {\n return false;\n }\n };\n SegmentObject.subtraction = function (arr, arr1) {\n var subtraction = [];\n for (var i = 0; i < arr.length; i++) {\n var exist = false;\n for (var j = 0; j < arr1.length; j++) {\n if (arr[i].equals(arr1[j])) {\n exist = true;\n break;\n }\n }\n if (!exist) {\n subtraction.push(arr[i]);\n }\n }\n return subtraction;\n };\n SegmentObject.convertToTreeNodeObjects = function (viewer, segmentObjects) {\n var treeNodeObjects = [];\n for (var i = 0; i < segmentObjects.length; i++) {\n var value = viewer.structureTreeManager.getTreeNodeObjectByNodeKey(segmentObjects[i].nodeKey);\n if (value) {\n treeNodeObjects.push(value);\n }\n }\n return treeNodeObjects;\n };\n SegmentObject.prototype.copy = function () {\n return this.viewer.temporaryObjectManager.copy(this);\n };\n SegmentObject.prototype.translate = function (x, y, z) {\n this.matrixList.push(this.segment.modellingMatrix.matrix);\n var matrix = gs_longan_1.Matrix4.identity();\n gs_longan_1.Matrix4.translate(matrix, x, y, z);\n this.segment.modellingMatrix.append(matrix);\n };\n SegmentObject.prototype.scale = function (x, y, z, origin) {\n this.matrixList.push(this.segment.modellingMatrix.matrix);\n var center;\n if (origin) {\n center = origin;\n } else {\n var bb = this.segment.boundingbox;\n center = [(bb[0] + bb[3]) / 2, (bb[1] + bb[4]) / 2, (bb[2] + bb[5]) / 2];\n }\n var matrix = gs_longan_1.Matrix4.identity();\n gs_longan_1.Matrix4.translate(matrix, -center[0], -center[1], -center[2]);\n gs_longan_1.Matrix4.scale(matrix, x, y, z);\n this.segment.modellingMatrix.append(matrix);\n };\n SegmentObject.prototype.rotate = function (origin, axis, alpha) {\n this.matrixList.push(this.segment.modellingMatrix.matrix);\n var matrix = gs_longan_1.Matrix4.rotateByAxis(new Float32Array(origin), new Float32Array(axis), alpha);\n this.segment.modellingMatrix.append(matrix);\n };\n SegmentObject.prototype.rotateByAxis = function (origin, axis, alpha) {\n this.matrixList.push(this.segment.modellingMatrix.matrix);\n var matrix = gs_longan_1.Matrix4.rotateByAxis(new Float32Array(origin), new Float32Array(axis), alpha);\n this.segment.modellingMatrix.append(matrix);\n };\n SegmentObject.prototype.unsetMatrix = function () {\n if (this.matrixList.length > 0) {\n this.segment.modellingMatrix.set(this.matrixList[0]);\n console.log(\"this.segment.modellingMatrix.matrix\", this.matrixList);\n }\n };\n SegmentObject.prototype.undoMatrix = function () {\n if (this.matrixList.length > 0) {\n this.segment.modellingMatrix.set(this.matrixList[this.matrixList.length - 1]);\n this.matrixList.splice(this.matrixList.length - 1, 1);\n }\n };\n return SegmentObject;\n }();\n exports.SegmentObject = SegmentObject;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9iaW1BaXIvc3JjL2dzRGV2Rngvb2JqZWN0cy9zZWdtZW50T2JqZWN0LnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQTtBQU1BO0FBTEE7QUFHQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBOztBQUtBO0FBQ0E7Ozs7QUFFQTtBQUFBO0FBQ0E7QUFDQTs7OztBQUVBO0FBQUE7QUFDQTtBQUNBOztBQUVBOzs7O0FBRUE7QUFBQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7QUFFQTtBQUFBO0FBQ0E7QUFDQTs7QUFNQTs7OztBQUVBO0FBQUE7QUFDQTtBQUNBOztBQUVBOzs7O0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQVVBO0FBQ0E7Ozs7QUFFQTtBQUFBO0FBQ0E7QUFDQTs7OztBQUVBO0FBQUE7QUFDQTtBQUNBOzs7O0FBS0E7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBOztBQUVBOzs7O0FBS0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBR0E7QUFDQTs7O0FBSUE7QUFDQTs7OztBQUVBO0FBQUE7QUFDQTtBQUVBOzs7O0FBRUE7QUFBQTtBQUNBO0FBQ0E7Ozs7QUFLQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFFQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7O0FBR0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFNQTtBQUlBO0FBS0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQWNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7OztBQUlBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBTUE7QUFJQTtBQUtBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQWNBO0FBQ0E7QUFjQTtBQUNBOztBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUVBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUlBO0FBQ0E7OztBQUlBO0FBQ0E7QUFRQTtBQUlBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7OztBQUdBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7QUFTQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFRQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBT0E7QUFDQTtBQUVBO0FBS0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBS0E7QUFDQTtBQUNBO0FBR0E7O0FBRUE7QUFDQTtBQUFBO0FBbG1CQSIsInNvdXJjZXMiOlsid2VicGFjazovL2JpbWxpZ2h0LXBsYXRmb3JtLy4vcGFja2FnZXMvYmltQWlyL3NyYy9nc0RldkZ4L29iamVjdHMvc2VnbWVudE9iamVjdC50cz9mOWNiIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIExvbmdhbiBmcm9tIFwiZ3MtbG9uZ2FuXCI7XHJcbmltcG9ydCB7IE1hdHJpeDQsIFNlZ21lbnQgfSBmcm9tIFwiZ3MtbG9uZ2FuXCI7XHJcbmltcG9ydCB7IE1hdGVyaWFsIH0gZnJvbSBcIi4vbWF0ZXJpYWxcIjtcclxuaW1wb3J0IHsgQ3V0dGluZ0NyZWF0ZVR5cGUsIEN1dHRpbmdPcHRpb25zIH0gZnJvbSBcIi4vY3V0dGluZ09wdGlvbnNcIjtcclxuaW1wb3J0IHsgVmlld2VyIH0gZnJvbSBcIi4uL3ZpZXdlclwiO1xyXG5pbXBvcnQgeyBUcmVlTm9kZU9iamVjdCB9IGZyb20gXCIuL3RyZWVOb2RlT2JqZWN0XCI7XHJcbmltcG9ydCB7IEpTX1Nob3dfUGF0aF9Nb2RlbGxpbmdNYXRyaXggfSBmcm9tIFwiZ3MtbG9uZ2FuL2xvbmdhbi9ncy52aWV3ZXJcIjtcclxuaW1wb3J0IHsgSW5zdGFuY2VMaWdodE1vZGVsIH0gZnJvbSBcIi4vaW5zdGFuY2VzT2JqZWN0cy9pbnN0YW5jZUxpZ2h0TW9kZWxcIjtcclxuaW1wb3J0IHsgTGlnaHRNb2RlbCB9IGZyb20gXCIuL2xpZ2h0TW9kZWxcIjtcclxuaW1wb3J0IHsgUmVmZXJlbmNlTGlnaHRNb2RlbCB9IGZyb20gXCIuL3JlZmVyZW5jZUxpZ2h0TW9kZWxcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTZWdtZW50T2JqZWN0IHtcclxuICBwcml2YXRlIF92aWV3ZXI6IFZpZXdlciA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfc2VnbWVudDogU2VnbWVudDtcclxuICBwcml2YXRlIF90cmVlTm9kZU9iamVjdDogVHJlZU5vZGVPYmplY3Q7XHJcbiAgcHJpdmF0ZSBtYXRyaXhMaXN0ID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKHZpZXdlcjogVmlld2VyLCBzZWdtZW50OiBTZWdtZW50KSB7XHJcbiAgICB0aGlzLl9zZWdtZW50ID0gc2VnbWVudDtcclxuICAgIHRoaXMuX3ZpZXdlciA9IHZpZXdlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdHJlZU5vZGVPamVjdCgpIHtcclxuICAgIGlmICghdGhpcy5fdHJlZU5vZGVPYmplY3QpIHtcclxuICAgICAgdGhpcy5fdHJlZU5vZGVPYmplY3QgPVxyXG4gICAgICAgIHRoaXMuX3ZpZXdlci5zdHJ1Y3R1cmVUcmVlTWFuYWdlci5nZXRUcmVlTm9kZU9iamVjdEJ5Tm9kZUtleShcclxuICAgICAgICAgIHRoaXMuc2VnbWVudC5rZXlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX3RyZWVOb2RlT2JqZWN0O1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB2aWV3ZXIoKTogVmlld2VyIHtcclxuICAgIHJldHVybiB0aGlzLl92aWV3ZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG1vZGVsKCkge1xyXG4gICAgaWYgKHRoaXMudHJlZU5vZGVPamVjdCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50cmVlTm9kZU9qZWN0Lm1vZGVsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBtb2RlbElkKCkge1xyXG4gICAgaWYgKHRoaXMudHJlZU5vZGVPamVjdCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50cmVlTm9kZU9qZWN0Lm1vZGVsSWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHZlcnNpb24oKSB7XHJcbiAgICBpZiAodGhpcy50cmVlTm9kZU9qZWN0ICYmIHRoaXMudHJlZU5vZGVPamVjdC5tb2RlbCkge1xyXG4gICAgICByZXR1cm4gKFxyXG4gICAgICAgIHRoaXMudHJlZU5vZGVPamVjdC5tb2RlbC5yZW5kZXJPYmplY3QgYXNcclxuICAgICAgICAgIHwgTGlnaHRNb2RlbFxyXG4gICAgICAgICAgfCBSZWZlcmVuY2VMaWdodE1vZGVsXHJcbiAgICAgICkudmVyc2lvbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgY29tcG9uZW50SWQoKSB7XHJcbiAgICBpZiAodGhpcy50cmVlTm9kZU9qZWN0KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlT2plY3QuY29tcG9uZW50SWQ7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG1hdGVyaWFscygpOiBNYXRlcmlhbFtdIHtcclxuICAgIGxldCBtYXRlcmlhbHMgPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fc2VnbWVudC5zdHlsZXMuY291bnQoKTsgaSsrKSB7XHJcbiAgICAgIGxldCBzdHlsZVNlZ21lbnQgPSB0aGlzLl9zZWdtZW50LnN0eWxlcy5pdGVtc1tpXS5zZWdtZW50O1xyXG4gICAgICBpZiAodGhpcy52aWV3ZXIuc3R5bGVTZWdtZW50LnN1YnNlZ21lbnRFeGlzdHMoc3R5bGVTZWdtZW50Lm5hbWUpKSB7XHJcbiAgICAgICAgbWF0ZXJpYWxzLnB1c2goXHJcbiAgICAgICAgICBuZXcgTWF0ZXJpYWwoXHJcbiAgICAgICAgICAgIHRoaXMudmlld2VyLFxyXG4gICAgICAgICAgICBzdHlsZVNlZ21lbnQubmFtZSxcclxuICAgICAgICAgICAgc3R5bGVTZWdtZW50LnJlbmRlcmluZ09wdGlvbnMubG9ja0ZhY2VDb2xvclxyXG4gICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWF0ZXJpYWxzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VnbWVudC5uYW1lO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBrZXkoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLnNlZ21lbnQua2V5O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I635Y+W5bGA6YOo5Z2Q5qCHXHJcbiAgICovXHJcbiAgZ2V0IGxvY2FsUG9zaXRpb24oKSB7XHJcbiAgICBpZiAodGhpcy5zZWdtZW50Lm1vZGVsbGluZ01hdHJpeC5tYXRyaXgpIHtcclxuICAgICAgcmV0dXJuIExvbmdhbi5NYXRyaXg0LmdldFRyYW5zbGF0ZShcclxuICAgICAgICBuZXcgRmxvYXQzMkFycmF5KHRoaXMuc2VnbWVudC5tb2RlbGxpbmdNYXRyaXgubWF0cml4KVxyXG4gICAgICApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIFswLCAwLCAwXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiOt+WPluS4lueVjOWdkOagh1xyXG4gICAqL1xyXG4gIGdldCB3b3JsZFBvc2l0aW9uKCkge1xyXG4gICAgbGV0IHByb2Nlc3MgPSB0aGlzLnZpZXdlci5wcm9jZXNzO1xyXG4gICAgaWYgKHByb2Nlc3MpIHtcclxuICAgICAgbGV0IHZpZXdlciA9IHByb2Nlc3MuYWN0aXZlVmlld2VyIGFzIFZpZXdlcjtcclxuICAgICAgaWYgKHZpZXdlcikge1xyXG4gICAgICAgIGxldCBwYXRoS2V5cyA9IFtdO1xyXG4gICAgICAgIGxldCB0cmVlTm9kZSA9IHZpZXdlci5zdHJ1Y3R1cmVUcmVlTWFuYWdlci5nZXRUcmVlTm9kZU9iamVjdEJ5Tm9kZUtleShcclxuICAgICAgICAgIHRoaXMubm9kZUtleVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgd2hpbGUgKHRyZWVOb2RlKSB7XHJcbiAgICAgICAgICBpZiAodHJlZU5vZGUub2JqKSB7XHJcbiAgICAgICAgICAgIHBhdGhLZXlzLnB1c2godHJlZU5vZGUub2JqLnNlZ21lbnQua2V5KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHBhdGhLZXlzLnB1c2godHJlZU5vZGUua2V5KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRyZWVOb2RlID0gdHJlZU5vZGUucGFyZW50O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IG1hdHJpeCA9IEpTX1Nob3dfUGF0aF9Nb2RlbGxpbmdNYXRyaXgocGF0aEtleXMpO1xyXG4gICAgICAgIHJldHVybiBMb25nYW4uTWF0cml4NC5nZXRUcmFuc2xhdGUobmV3IEZsb2F0MzJBcnJheShtYXRyaXgpKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBub2RlS2V5KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5rZXkgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiB0aGlzLmtleS50b1N0cmluZygpO1xyXG4gICAgLy8gcmV0dXJuIHRoaXMua2V5LnRvU3RyaW5nKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2VnbWVudCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWdtZW50O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5p6E5Lu255qE5bC65a+477yM5YyF5ZCr54K55pWw6YeP44CB6Z2i5pWw6YeP44CB5Yeg5L2V5pWw6YePXHJcbiAgICovXHJcbiAgZ2V0IHNpemUoKSB7XHJcbiAgICBsZXQgZ2VvbWV0cmllczogTG9uZ2FuLkxpc3Q8TG9uZ2FuLkdlb21ldHJ5PiA9IG5ldyBMb25nYW4uTGlzdCgpO1xyXG4gICAgdGhpcy50cmF2ZXJzZVNlZ21lbnQodGhpcy5zZWdtZW50LCBnZW9tZXRyaWVzKTtcclxuXHJcbiAgICBsZXQgcmVzdWx0ID0ge1xyXG4gICAgICBwb3M6IDAsXHJcbiAgICAgIGZhY2U6IDAsXHJcbiAgICAgIGdlbzogZ2VvbWV0cmllcy5jb3VudCgpLFxyXG4gICAgfTtcclxuICAgIGdlb21ldHJpZXMuZm9yRWFjaCgoZ2VvKSA9PiB7XHJcbiAgICAgIHJlc3VsdC5wb3MgPSByZXN1bHQucG9zICsgZ2VvLnNoZWxsU2l6ZS5wb3M7XHJcbiAgICAgIHJlc3VsdC5mYWNlID0gcmVzdWx0LmZhY2UgKyBnZW8uc2hlbGxTaXplLmZhY2U7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICB0cmF2ZXJzZVNlZ21lbnQoXHJcbiAgICBzZWdtZW50OiBMb25nYW4uU2VnbWVudCxcclxuICAgIGdlb21ldHJpZXM6IExvbmdhbi5MaXN0PExvbmdhbi5HZW9tZXRyeT5cclxuICApIHtcclxuICAgIGlmIChzZWdtZW50KSB7XHJcbiAgICAgIGdlb21ldHJpZXMuaXRlbXMgPSBnZW9tZXRyaWVzLml0ZW1zLmNvbmNhdChzZWdtZW50Lmdlb21ldHJpZXMuaXRlbXMpO1xyXG5cclxuICAgICAgaWYgKHNlZ21lbnQuaW5jbHVkZXMpIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlZ21lbnQuaW5jbHVkZXMuaXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBzZWdtZW50LmluY2x1ZGVzLml0ZW1zW2ldLnNlZ21lbnQ7XHJcbiAgICAgICAgICB0aGlzLnRyYXZlcnNlU2VnbWVudChpdGVtLCBnZW9tZXRyaWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzZWdtZW50LnN1YnNlZ21lbnRzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdtZW50LnN1YnNlZ21lbnRzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gc2VnbWVudC5zdWJzZWdtZW50cy5pdGVtc1tpXTtcclxuICAgICAgICAgIHRoaXMudHJhdmVyc2VTZWdtZW50KGl0ZW0sIGdlb21ldHJpZXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGdlb21ldHJpZXM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZGVsZXRlKCkge1xyXG4gICAgdGhpcy5zZWdtZW50LmRlbGV0ZSgpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmFtZShuYW1lKSB7XHJcbiAgICB0aGlzLnNlZ21lbnQucmVuYW1lKG5hbWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6K6+572u5p2Q6LSo77yM6Iul5LiN5Lyg5Y+C5pWw5YiZ5riF6Zmk5p6E5Lu25LiK55qE5p2Q6LSoXHJcbiAgICogQHBhcmFtIG1hdGVyaWFsXHJcbiAgICovXHJcbiAgcHVibGljIHNldE1hdGVyaWFsKG1hdGVyaWFsPzogTWF0ZXJpYWwpIHtcclxuICAgIGxldCBjb21wb25lbnRzID0gW107XHJcbiAgICB0aGlzLnZpZXdlci5zdHJ1Y3R1cmVUcmVlTWFuYWdlci5nZXRDb21wb25lbnRzKFxyXG4gICAgICB0aGlzLnRyZWVOb2RlT2plY3QsXHJcbiAgICAgIGNvbXBvbmVudHNcclxuICAgICk7XHJcblxyXG4gICAgaWYgKG1hdGVyaWFsKSB7XHJcbiAgICAgIHRoaXMudmlld2VyLm1hdGVyaWFsTWFuYWdlci5vdmVycmlkZShjb21wb25lbnRzLCBtYXRlcmlhbCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnZpZXdlci5tYXRlcmlhbE1hbmFnZXIuY2xlYXJPdmVycmlkZShjb21wb25lbnRzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiuvue9ruaehOS7tueahOmrmOS6rlxyXG4gICAqIEBwYXJhbSBpc0hpZ2hsaWdodCDmmK/lkKbpq5jkuq5cclxuICAgKi9cclxuICBwdWJsaWMgc2V0SGlnaGxpZ2h0KGlzSGlnaGxpZ2h0OiBib29sZWFuKSB7XHJcbiAgICBpZiAoaXNIaWdobGlnaHQpIHtcclxuICAgICAgdGhpcy52aWV3ZXIuaGlnaGxpZ2h0TWFuYWdlci5oaWdobGlnaHQoW3RoaXNdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmlld2VyLmhpZ2hsaWdodE1hbmFnZXIuY2xlYXJIaWdobGlnaHQoW3RoaXNdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiuvue9ruaehOS7tueahOWPr+ingVxyXG4gICAqIEBwYXJhbSB2aXNpYmxlIOaYr+WQpuWPr+ingVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRWaXNpYmxlKHZpc2libGU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2aXNpYmxlKSB7XHJcbiAgICAgIHRoaXMudmlld2VyLmludmlzaWJsZU1hbmFnZXIuY2xlYXJJbnZpc2libGUoW3RoaXNdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmlld2VyLmludmlzaWJsZU1hbmFnZXIuaW52aXNpYmxlKFt0aGlzXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDorr7nva7mnoTku7bnmoTpmpTnprtcclxuICAgKiBAcGFyYW0gaXNJc29sYXRpb24g5piv5ZCm6ZqU56a7XHJcbiAgICovXHJcbiAgcHVibGljIHNldElzb2xhdGlvbihpc0lzb2xhdGlvbjogYm9vbGVhbikge1xyXG4gICAgaWYgKGlzSXNvbGF0aW9uKSB7XHJcbiAgICAgIHRoaXMudmlld2VyLmlzb2xhdGlvbk1hbmFnZXIuaXNvbGF0aW9uKFt0aGlzXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnZpZXdlci5pc29sYXRpb25NYW5hZ2VyLmNsZWFySXNvbGF0aW9uKFt0aGlzXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDliJvlu7rliZbliIfvvIzpgJrov4fliZbliIfpgInpobnliJvlu7rliZbliIdcclxuICAgKiBAcGFyYW0gY3V0dGluZ09wdGlvbnMg5YmW5YiH6YCJ6aG5XHJcbiAgICovXHJcbiAgcHVibGljIHNldEN1dHRpbmcoY3V0dGluZ09wdGlvbnM6IEN1dHRpbmdPcHRpb25zKSB7XHJcbiAgICBsZXQgYmIgPSB0aGlzLnZpZXdlci5jb21wdXRlVmlld0JvdW5kaW5nQm94KHRoaXMuX3NlZ21lbnQpO1xyXG4gICAgaWYgKGJiKSB7XHJcbiAgICAgIGlmIChjdXR0aW5nT3B0aW9ucy50eXBlID09IEN1dHRpbmdDcmVhdGVUeXBlLkJvdW5kaW5nQm94WCkge1xyXG4gICAgICAgIGN1dHRpbmdPcHRpb25zLm9yaWdpbiA9IExvbmdhbi5WZWN0b3IuZGl2aWRlKFxyXG4gICAgICAgICAgTG9uZ2FuLlBvaW50LmFkZChcclxuICAgICAgICAgICAgbmV3IEZsb2F0MzJBcnJheShbYmJbMF0sIGJiWzFdLCBiYlsyXV0pLFxyXG4gICAgICAgICAgICBuZXcgRmxvYXQzMkFycmF5KFtiYlswXSwgYmJbNF0sIGJiWzVdXSlcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICAyXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjdXR0aW5nT3B0aW9ucy5kaXJlY3QgPSBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwXSk7XHJcbiAgICAgICAgY3V0dGluZ09wdGlvbnMubGVuZ3RoID0gYmJbM10gLSBiYlswXTtcclxuICAgICAgfSBlbHNlIGlmIChjdXR0aW5nT3B0aW9ucy50eXBlID09IEN1dHRpbmdDcmVhdGVUeXBlLkJvdW5kaW5nQm94WSkge1xyXG4gICAgICAgIGN1dHRpbmdPcHRpb25zLm9yaWdpbiA9IExvbmdhbi5WZWN0b3IuZGl2aWRlKFxyXG4gICAgICAgICAgTG9uZ2FuLlBvaW50LmFkZChcclxuICAgICAgICAgICAgbmV3IEZsb2F0MzJBcnJheShbYmJbMF0sIGJiWzFdLCBiYlsyXV0pLFxyXG4gICAgICAgICAgICBuZXcgRmxvYXQzMkFycmF5KFtiYlszXSwgYmJbMV0sIGJiWzVdXSlcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICAyXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjdXR0aW5nT3B0aW9ucy5kaXJlY3QgPSBuZXcgRmxvYXQzMkFycmF5KFswLCAxLCAwXSk7XHJcbiAgICAgICAgY3V0dGluZ09wdGlvbnMubGVuZ3RoID0gYmJbNF0gLSBiYlsxXTtcclxuICAgICAgfSBlbHNlIGlmIChjdXR0aW5nT3B0aW9ucy50eXBlID09IEN1dHRpbmdDcmVhdGVUeXBlLkJvdW5kaW5nQm94Wikge1xyXG4gICAgICAgIGN1dHRpbmdPcHRpb25zLm9yaWdpbiA9IExvbmdhbi5WZWN0b3IuZGl2aWRlKFxyXG4gICAgICAgICAgTG9uZ2FuLlBvaW50LmFkZChcclxuICAgICAgICAgICAgbmV3IEZsb2F0MzJBcnJheShbYmJbMF0sIGJiWzFdLCBiYlsyXV0pLFxyXG4gICAgICAgICAgICBuZXcgRmxvYXQzMkFycmF5KFtiYlszXSwgYmJbNF0sIGJiWzJdXSlcclxuICAgICAgICAgICksXHJcbiAgICAgICAgICAyXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjdXR0aW5nT3B0aW9ucy5kaXJlY3QgPSBuZXcgRmxvYXQzMkFycmF5KFswLCAwLCAxXSk7XHJcbiAgICAgICAgY3V0dGluZ09wdGlvbnMubGVuZ3RoID0gYmJbNV0gLSBiYlsyXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY3V0dGluZ09wdGlvbnMuX2JiID0gYmI7XHJcbiAgICB9XHJcblxyXG4gICAgTG9uZ2FuLlZlY3Rvci5ub3JtYWxpemUoY3V0dGluZ09wdGlvbnMuX2RpcmVjdCk7XHJcbiAgICBsZXQgeEF4aXMgPSBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwXSk7XHJcbiAgICBpZiAoTG9uZ2FuLkdlb21ldHJ5T3BlcmF0b3JzLmlzUGFyYWxsZWwoY3V0dGluZ09wdGlvbnMuX2RpcmVjdCwgeEF4aXMpKSB7XHJcbiAgICAgIHhBeGlzID0gbmV3IEZsb2F0MzJBcnJheShbMCwgMSwgMF0pO1xyXG4gICAgfVxyXG4gICAgbGV0IHlBeGlzID0gTG9uZ2FuLlZlY3Rvci5jcm9zcyhjdXR0aW5nT3B0aW9ucy5fZGlyZWN0LCB4QXhpcyk7XHJcbiAgICBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZSh5QXhpcyk7XHJcbiAgICB4QXhpcyA9IExvbmdhbi5WZWN0b3IuY3Jvc3MoeUF4aXMsIGN1dHRpbmdPcHRpb25zLl9kaXJlY3QpO1xyXG5cclxuICAgIGxldCBvcmlnaW4gPSBMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMuZGlzdGFuY2VQb2ludChcclxuICAgICAgY3V0dGluZ09wdGlvbnMuX29yaWdpbixcclxuICAgICAgY3V0dGluZ09wdGlvbnMuX2RpcmVjdCxcclxuICAgICAgY3V0dGluZ09wdGlvbnMuX2xlbmd0aCAqIGN1dHRpbmdPcHRpb25zLl9yYXRpb1xyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgYmJMZW5ndGggPSBMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMuZGlzdGFuY2UoXHJcbiAgICAgIG5ldyBGbG9hdDMyQXJyYXkoW2JiWzBdLCBiYlsxXSwgYmJbMl1dKSxcclxuICAgICAgbmV3IEZsb2F0MzJBcnJheShbYmJbM10sIGJiWzRdLCBiYls1XV0pXHJcbiAgICApO1xyXG4gICAgbGV0IHhQb2ludCA9IExvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5kaXN0YW5jZVBvaW50KFxyXG4gICAgICBvcmlnaW4sXHJcbiAgICAgIHhBeGlzLFxyXG4gICAgICBiYkxlbmd0aFxyXG4gICAgKTtcclxuICAgIExvbmdhbi5WZWN0b3IucmV2ZXJzZSh4QXhpcyk7XHJcbiAgICBsZXQgbmVnWFBvaW50ID0gTG9uZ2FuLkdlb21ldHJ5T3BlcmF0b3JzLmRpc3RhbmNlUG9pbnQoXHJcbiAgICAgIG9yaWdpbixcclxuICAgICAgeEF4aXMsXHJcbiAgICAgIGJiTGVuZ3RoXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBwMSA9IExvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5kaXN0YW5jZVBvaW50KHhQb2ludCwgeUF4aXMsIGJiTGVuZ3RoKTtcclxuICAgIGxldCBwMiA9IExvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5kaXN0YW5jZVBvaW50KG5lZ1hQb2ludCwgeUF4aXMsIGJiTGVuZ3RoKTtcclxuICAgIExvbmdhbi5WZWN0b3IucmV2ZXJzZSh5QXhpcyk7XHJcbiAgICBsZXQgcDMgPSBMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMuZGlzdGFuY2VQb2ludChuZWdYUG9pbnQsIHlBeGlzLCBiYkxlbmd0aCk7XHJcbiAgICBsZXQgcDQgPSBMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMuZGlzdGFuY2VQb2ludCh4UG9pbnQsIHlBeGlzLCBiYkxlbmd0aCk7XHJcblxyXG4gICAgY3V0dGluZ09wdGlvbnMuX2N1dHRpbmdQbGFuZXMgPSB0aGlzLl9zZWdtZW50Lmluc2VydEN1dHRpbmdQbGFuZXMoW1xyXG4gICAgICBwMVswXSxcclxuICAgICAgcDFbMV0sXHJcbiAgICAgIHAxWzJdLFxyXG4gICAgICBwMlswXSxcclxuICAgICAgcDJbMV0sXHJcbiAgICAgIHAyWzJdLFxyXG4gICAgICBwM1swXSxcclxuICAgICAgcDNbMV0sXHJcbiAgICAgIHAzWzJdLFxyXG4gICAgICBwNFswXSxcclxuICAgICAgcDRbMV0sXHJcbiAgICAgIHA0WzJdLFxyXG4gICAgXSk7XHJcbiAgICB0aGlzLl9zZWdtZW50LnZpc2liaWxpdHkuc2V0Q3V0dGluZ1BsYW5lKHRydWUpO1xyXG4gICAgdGhpcy5fc2VnbWVudC5jb2xvci5zZXRDdXR0aW5nRmFjZShjdXR0aW5nT3B0aW9ucy5jb2xvcik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZWRpdEN1dHRpbmcoY3V0dGluZ09wdGlvbnM6IEN1dHRpbmdPcHRpb25zKSB7XHJcbiAgICBsZXQgYmIgPSBjdXR0aW5nT3B0aW9ucy5iYjtcclxuICAgIGlmICghYmIpIHtcclxuICAgICAgYmIgPSB0aGlzLnZpZXdlci5jb21wdXRlVmlld0JvdW5kaW5nQm94KHRoaXMuX3NlZ21lbnQpO1xyXG4gICAgICBjdXR0aW5nT3B0aW9ucy5fYmIgPSBiYjtcclxuICAgIH1cclxuICAgIGlmIChiYikge1xyXG4gICAgICBpZiAoY3V0dGluZ09wdGlvbnMudHlwZSA9PSBDdXR0aW5nQ3JlYXRlVHlwZS5Cb3VuZGluZ0JveFgpIHtcclxuICAgICAgICBjdXR0aW5nT3B0aW9ucy5vcmlnaW4gPSBMb25nYW4uVmVjdG9yLmRpdmlkZShcclxuICAgICAgICAgIExvbmdhbi5Qb2ludC5hZGQoXHJcbiAgICAgICAgICAgIG5ldyBGbG9hdDMyQXJyYXkoW2JiWzBdLCBiYlsxXSwgYmJbMl1dKSxcclxuICAgICAgICAgICAgbmV3IEZsb2F0MzJBcnJheShbYmJbMF0sIGJiWzRdLCBiYls1XV0pXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgMlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3V0dGluZ09wdGlvbnMuZGlyZWN0ID0gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMF0pO1xyXG4gICAgICAgIGN1dHRpbmdPcHRpb25zLmxlbmd0aCA9IGJiWzNdIC0gYmJbMF07XHJcbiAgICAgIH0gZWxzZSBpZiAoY3V0dGluZ09wdGlvbnMudHlwZSA9PSBDdXR0aW5nQ3JlYXRlVHlwZS5Cb3VuZGluZ0JveFkpIHtcclxuICAgICAgICBjdXR0aW5nT3B0aW9ucy5vcmlnaW4gPSBMb25nYW4uVmVjdG9yLmRpdmlkZShcclxuICAgICAgICAgIExvbmdhbi5Qb2ludC5hZGQoXHJcbiAgICAgICAgICAgIG5ldyBGbG9hdDMyQXJyYXkoW2JiWzBdLCBiYlsxXSwgYmJbMl1dKSxcclxuICAgICAgICAgICAgbmV3IEZsb2F0MzJBcnJheShbYmJbM10sIGJiWzFdLCBiYls1XV0pXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgMlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3V0dGluZ09wdGlvbnMuZGlyZWN0ID0gbmV3IEZsb2F0MzJBcnJheShbMCwgMSwgMF0pO1xyXG4gICAgICAgIGN1dHRpbmdPcHRpb25zLmxlbmd0aCA9IGJiWzRdIC0gYmJbMV07XHJcbiAgICAgIH0gZWxzZSBpZiAoY3V0dGluZ09wdGlvbnMudHlwZSA9PSBDdXR0aW5nQ3JlYXRlVHlwZS5Cb3VuZGluZ0JveFopIHtcclxuICAgICAgICBjdXR0aW5nT3B0aW9ucy5vcmlnaW4gPSBMb25nYW4uVmVjdG9yLmRpdmlkZShcclxuICAgICAgICAgIExvbmdhbi5Qb2ludC5hZGQoXHJcbiAgICAgICAgICAgIG5ldyBGbG9hdDMyQXJyYXkoW2JiWzBdLCBiYlsxXSwgYmJbMl1dKSxcclxuICAgICAgICAgICAgbmV3IEZsb2F0MzJBcnJheShbYmJbM10sIGJiWzRdLCBiYlsyXV0pXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgMlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3V0dGluZ09wdGlvbnMuZGlyZWN0ID0gbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMV0pO1xyXG4gICAgICAgIGN1dHRpbmdPcHRpb25zLmxlbmd0aCA9IGJiWzVdIC0gYmJbMl07XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZShjdXR0aW5nT3B0aW9ucy5fZGlyZWN0KTtcclxuICAgIGxldCB4QXhpcyA9IG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBdKTtcclxuICAgIGlmIChMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMuaXNQYXJhbGxlbChjdXR0aW5nT3B0aW9ucy5fZGlyZWN0LCB4QXhpcykpIHtcclxuICAgICAgeEF4aXMgPSBuZXcgRmxvYXQzMkFycmF5KFswLCAxLCAwXSk7XHJcbiAgICB9XHJcbiAgICBsZXQgeUF4aXMgPSBMb25nYW4uVmVjdG9yLmNyb3NzKGN1dHRpbmdPcHRpb25zLl9kaXJlY3QsIHhBeGlzKTtcclxuICAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKHlBeGlzKTtcclxuICAgIHhBeGlzID0gTG9uZ2FuLlZlY3Rvci5jcm9zcyh5QXhpcywgY3V0dGluZ09wdGlvbnMuX2RpcmVjdCk7XHJcblxyXG4gICAgbGV0IG9yaWdpbiA9IExvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5kaXN0YW5jZVBvaW50KFxyXG4gICAgICBjdXR0aW5nT3B0aW9ucy5fb3JpZ2luLFxyXG4gICAgICBjdXR0aW5nT3B0aW9ucy5fZGlyZWN0LFxyXG4gICAgICBjdXR0aW5nT3B0aW9ucy5fbGVuZ3RoICogY3V0dGluZ09wdGlvbnMuX3JhdGlvXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBiYkxlbmd0aCA9IExvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5kaXN0YW5jZShcclxuICAgICAgbmV3IEZsb2F0MzJBcnJheShbYmJbMF0sIGJiWzFdLCBiYlsyXV0pLFxyXG4gICAgICBuZXcgRmxvYXQzMkFycmF5KFtiYlszXSwgYmJbNF0sIGJiWzVdXSlcclxuICAgICk7XHJcbiAgICBsZXQgeFBvaW50ID0gTG9uZ2FuLkdlb21ldHJ5T3BlcmF0b3JzLmRpc3RhbmNlUG9pbnQoXHJcbiAgICAgIG9yaWdpbixcclxuICAgICAgeEF4aXMsXHJcbiAgICAgIGJiTGVuZ3RoXHJcbiAgICApO1xyXG4gICAgTG9uZ2FuLlZlY3Rvci5yZXZlcnNlKHhBeGlzKTtcclxuICAgIGxldCBuZWdYUG9pbnQgPSBMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMuZGlzdGFuY2VQb2ludChcclxuICAgICAgb3JpZ2luLFxyXG4gICAgICB4QXhpcyxcclxuICAgICAgYmJMZW5ndGhcclxuICAgICk7XHJcblxyXG4gICAgbGV0IHAxID0gTG9uZ2FuLkdlb21ldHJ5T3BlcmF0b3JzLmRpc3RhbmNlUG9pbnQoeFBvaW50LCB5QXhpcywgYmJMZW5ndGgpO1xyXG4gICAgbGV0IHAyID0gTG9uZ2FuLkdlb21ldHJ5T3BlcmF0b3JzLmRpc3RhbmNlUG9pbnQobmVnWFBvaW50LCB5QXhpcywgYmJMZW5ndGgpO1xyXG4gICAgTG9uZ2FuLlZlY3Rvci5yZXZlcnNlKHlBeGlzKTtcclxuICAgIGxldCBwMyA9IExvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5kaXN0YW5jZVBvaW50KG5lZ1hQb2ludCwgeUF4aXMsIGJiTGVuZ3RoKTtcclxuICAgIGxldCBwNCA9IExvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5kaXN0YW5jZVBvaW50KHhQb2ludCwgeUF4aXMsIGJiTGVuZ3RoKTtcclxuXHJcbiAgICBpZiAoY3V0dGluZ09wdGlvbnMuY3V0dGluZ1BsYW5lcykge1xyXG4gICAgICBjdXR0aW5nT3B0aW9ucy5jdXR0aW5nUGxhbmVzLmVkaXQoW1xyXG4gICAgICAgIHAxWzBdLFxyXG4gICAgICAgIHAxWzFdLFxyXG4gICAgICAgIHAxWzJdLFxyXG4gICAgICAgIHAyWzBdLFxyXG4gICAgICAgIHAyWzFdLFxyXG4gICAgICAgIHAyWzJdLFxyXG4gICAgICAgIHAzWzBdLFxyXG4gICAgICAgIHAzWzFdLFxyXG4gICAgICAgIHAzWzJdLFxyXG4gICAgICAgIHA0WzBdLFxyXG4gICAgICAgIHA0WzFdLFxyXG4gICAgICAgIHA0WzJdLFxyXG4gICAgICBdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGN1dHRpbmdPcHRpb25zLl9jdXR0aW5nUGxhbmVzID0gdGhpcy5fc2VnbWVudC5pbnNlcnRDdXR0aW5nUGxhbmVzKFtcclxuICAgICAgICBwMVswXSxcclxuICAgICAgICBwMVsxXSxcclxuICAgICAgICBwMVsyXSxcclxuICAgICAgICBwMlswXSxcclxuICAgICAgICBwMlsxXSxcclxuICAgICAgICBwMlsyXSxcclxuICAgICAgICBwM1swXSxcclxuICAgICAgICBwM1sxXSxcclxuICAgICAgICBwM1syXSxcclxuICAgICAgICBwNFswXSxcclxuICAgICAgICBwNFsxXSxcclxuICAgICAgICBwNFsyXSxcclxuICAgICAgXSk7XHJcbiAgICAgIHRoaXMuX3NlZ21lbnQudmlzaWJpbGl0eS5zZXRDdXR0aW5nUGxhbmUodHJ1ZSk7XHJcbiAgICAgIHRoaXMuX3NlZ21lbnQuY29sb3Iuc2V0Q3V0dGluZ0ZhY2UoY3V0dGluZ09wdGlvbnMuY29sb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVuc2V0Q3V0dGluZygpIHtcclxuICAgIGxldCBjdXR0aW5nUGxhbmVzID0gdGhpcy5fc2VnbWVudC5maW5kR2VvbWV0cnkoXCJDdXR0aW5nUGxhbmVzXCIpO1xyXG4gICAgaWYgKGN1dHRpbmdQbGFuZXMpIHtcclxuICAgICAgY3V0dGluZ1BsYW5lcy5kZWxldGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl9zZWdtZW50LnZpc2liaWxpdHkudW5zZXRDdXR0aW5nUGxhbmUoKTtcclxuICAgIHRoaXMuc2VnbWVudC5jb2xvci51bnNldEN1dHRpbmdGYWNlKCk7XHJcbiAgfVxyXG5cclxuICBlcXVhbHMob2JqOiBTZWdtZW50T2JqZWN0KTogYm9vbGVhbiB7XHJcbiAgICBpZiAodGhpcy5ub2RlS2V5ID09IG9iai5ub2RlS2V5KSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBzdWJ0cmFjdGlvbihcclxuICAgIGFycjogU2VnbWVudE9iamVjdFtdLFxyXG4gICAgYXJyMTogU2VnbWVudE9iamVjdFtdXHJcbiAgKTogU2VnbWVudE9iamVjdFtdIHtcclxuICAgIGxldCBzdWJ0cmFjdGlvbiA9IFtdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGV4aXN0ID0gZmFsc2U7XHJcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYXJyMS5sZW5ndGg7IGorKykge1xyXG4gICAgICAgIGlmIChhcnJbaV0uZXF1YWxzKGFycjFbal0pKSB7XHJcbiAgICAgICAgICBleGlzdCA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghZXhpc3QpIHtcclxuICAgICAgICBzdWJ0cmFjdGlvbi5wdXNoKGFycltpXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3VidHJhY3Rpb247XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWdtZW50T2JqZWN0IOi9rOaIkCBUcmVlTm9kZU9iamVjdFxyXG4gICAqIEBwYXJhbSB2aWV3ZXJcclxuICAgKiBAcGFyYW0gc2VnbWVudE9iamVjdHNcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBzdGF0aWMgY29udmVydFRvVHJlZU5vZGVPYmplY3RzKFxyXG4gICAgdmlld2VyLFxyXG4gICAgc2VnbWVudE9iamVjdHM6IFNlZ21lbnRPYmplY3RbXVxyXG4gICk6IFRyZWVOb2RlT2JqZWN0W10ge1xyXG4gICAgbGV0IHRyZWVOb2RlT2JqZWN0cyA9IFtdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdtZW50T2JqZWN0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBsZXQgdmFsdWUgPSB2aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXIuZ2V0VHJlZU5vZGVPYmplY3RCeU5vZGVLZXkoXHJcbiAgICAgICAgc2VnbWVudE9iamVjdHNbaV0ubm9kZUtleVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICB0cmVlTm9kZU9iamVjdHMucHVzaCh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0cmVlTm9kZU9iamVjdHM7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmnoTku7blpI3liLZcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIHB1YmxpYyBjb3B5KCk6IFNlZ21lbnRPYmplY3Qge1xyXG4gICAgcmV0dXJuIHRoaXMudmlld2VyLnRlbXBvcmFyeU9iamVjdE1hbmFnZXIuY29weSh0aGlzKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaehOS7tuW5s+enu1xyXG4gICAqIEBwYXJhbSB4XHJcbiAgICogQHBhcmFtIHlcclxuICAgKiBAcGFyYW0gelxyXG4gICAqL1xyXG4gIHRyYW5zbGF0ZSh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm1hdHJpeExpc3QucHVzaCh0aGlzLnNlZ21lbnQubW9kZWxsaW5nTWF0cml4Lm1hdHJpeCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcclxuICAgIC8vICAgXCJ0aGlzLnNlZ21lbnQubW9kZWxsaW5nTWF0cml4Lm1hdHJpeFwiLFxyXG4gICAgLy8gICB0aGlzLnNlZ21lbnQubW9kZWxsaW5nTWF0cml4Lm1hdHJpeFxyXG4gICAgLy8gKTtcclxuICAgIGxldCBtYXRyaXggPSBNYXRyaXg0LmlkZW50aXR5KCk7XHJcbiAgICBNYXRyaXg0LnRyYW5zbGF0ZShtYXRyaXgsIHgsIHksIHopO1xyXG4gICAgdGhpcy5zZWdtZW50Lm1vZGVsbGluZ01hdHJpeC5hcHBlbmQobWF0cml4KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaehOS7tuaUvue8qVxyXG4gICAqIEBwYXJhbSB4XHJcbiAgICogQHBhcmFtIHlcclxuICAgKiBAcGFyYW0gelxyXG4gICAqIEBwYXJhbSBvcmlnaW4g5pS+57yp5Y6f54K577yM6buY6K6k5piv5YyF5Zu055uS5Lit5b+DXHJcbiAgICovXHJcbiAgc2NhbGUoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciwgb3JpZ2luPzogbnVtYmVyW10pIHtcclxuICAgIHRoaXMubWF0cml4TGlzdC5wdXNoKHRoaXMuc2VnbWVudC5tb2RlbGxpbmdNYXRyaXgubWF0cml4KTtcclxuXHJcbiAgICBsZXQgY2VudGVyOiBudW1iZXJbXTtcclxuICAgIGlmIChvcmlnaW4pIHtcclxuICAgICAgY2VudGVyID0gb3JpZ2luO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgbGV0IGJiID0gdGhpcy5zZWdtZW50LmJvdW5kaW5nYm94O1xyXG4gICAgICBjZW50ZXIgPSBbKGJiWzBdICsgYmJbM10pIC8gMiwgKGJiWzFdICsgYmJbNF0pIC8gMiwgKGJiWzJdICsgYmJbNV0pIC8gMl07XHJcbiAgICB9XHJcbiAgICBsZXQgbWF0cml4ID0gTWF0cml4NC5pZGVudGl0eSgpO1xyXG4gICAgTWF0cml4NC50cmFuc2xhdGUobWF0cml4LCAtY2VudGVyWzBdLCAtY2VudGVyWzFdLCAtY2VudGVyWzJdKTtcclxuICAgIC8vIHRoaXMuc2VnbWVudC5tb2RlbGxpbmdNYXRyaXguYXBwZW5kKG1hdHJpeCk7XHJcblxyXG4gICAgTWF0cml4NC5zY2FsZShtYXRyaXgsIHgsIHksIHopO1xyXG4gICAgdGhpcy5zZWdtZW50Lm1vZGVsbGluZ01hdHJpeC5hcHBlbmQobWF0cml4KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOaehOS7tuaXi+i9rFxyXG4gICAqIEBwYXJhbSBvcmlnaW4g5peL6L2s5Y6f54K5XHJcbiAgICogQHBhcmFtIGF4aXMg5peL6L2s6L20XHJcbiAgICogQHBhcmFtIGFscGhhIOW8p+W6plxyXG4gICAqL1xyXG4gIHJvdGF0ZShvcmlnaW46IG51bWJlcltdLCBheGlzOiBudW1iZXJbXSwgYWxwaGE6IG51bWJlcikge1xyXG4gICAgdGhpcy5tYXRyaXhMaXN0LnB1c2godGhpcy5zZWdtZW50Lm1vZGVsbGluZ01hdHJpeC5tYXRyaXgpO1xyXG5cclxuICAgIGxldCBtYXRyaXggPSBNYXRyaXg0LnJvdGF0ZUJ5QXhpcyhcclxuICAgICAgbmV3IEZsb2F0MzJBcnJheShvcmlnaW4pLFxyXG4gICAgICBuZXcgRmxvYXQzMkFycmF5KGF4aXMpLFxyXG4gICAgICBhbHBoYVxyXG4gICAgKTtcclxuICAgIHRoaXMuc2VnbWVudC5tb2RlbGxpbmdNYXRyaXguYXBwZW5kKG1hdHJpeCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmnoTku7bml4vovaxcclxuICAgKiBAcGFyYW0gYXhpcyDml4vovazovbRcclxuICAgKiBAcGFyYW0gYWxwaGEg5byn5bqmXHJcbiAgICovXHJcbiAgcm90YXRlQnlBeGlzKG9yaWdpbjogbnVtYmVyW10sIGF4aXM6IG51bWJlcltdLCBhbHBoYTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLm1hdHJpeExpc3QucHVzaCh0aGlzLnNlZ21lbnQubW9kZWxsaW5nTWF0cml4Lm1hdHJpeCk7XHJcblxyXG4gICAgbGV0IG1hdHJpeCA9IE1hdHJpeDQucm90YXRlQnlBeGlzKFxyXG4gICAgICBuZXcgRmxvYXQzMkFycmF5KG9yaWdpbiksXHJcbiAgICAgIG5ldyBGbG9hdDMyQXJyYXkoYXhpcyksXHJcbiAgICAgIGFscGhhXHJcbiAgICApO1xyXG4gICAgdGhpcy5zZWdtZW50Lm1vZGVsbGluZ01hdHJpeC5hcHBlbmQobWF0cml4KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOWPlua2iOaehOS7tuWPmOaNolxyXG4gICAqL1xyXG4gIHVuc2V0TWF0cml4KCkge1xyXG4gICAgaWYgKHRoaXMubWF0cml4TGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VnbWVudC5tb2RlbGxpbmdNYXRyaXguc2V0KHRoaXMubWF0cml4TGlzdFswXSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwidGhpcy5zZWdtZW50Lm1vZGVsbGluZ01hdHJpeC5tYXRyaXhcIiwgdGhpcy5tYXRyaXhMaXN0KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOi/lOWbnuS4iuS4gOS4quaehOS7tuWPmOaNolxyXG4gICAqL1xyXG4gIHVuZG9NYXRyaXgoKSB7XHJcbiAgICBpZiAodGhpcy5tYXRyaXhMaXN0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy5zZWdtZW50Lm1vZGVsbGluZ01hdHJpeC5zZXQoXHJcbiAgICAgICAgdGhpcy5tYXRyaXhMaXN0W3RoaXMubWF0cml4TGlzdC5sZW5ndGggLSAxXVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLm1hdHJpeExpc3Quc3BsaWNlKHRoaXMubWF0cml4TGlzdC5sZW5ndGggLSAxLCAxKTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./packages/bimAir/src/gsDevFx/objects/segmentObject.ts\n");
|
|
3797
|
+
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;__webpack_require__(/*! core-js/modules/es.function.name.js */ \"./node_modules/core-js/modules/es.function.name.js\");\n__webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n__webpack_require__(/*! core-js/modules/es.array.iterator.js */ \"./node_modules/core-js/modules/es.array.iterator.js\");\n__webpack_require__(/*! core-js/modules/es.array-buffer.slice.js */ \"./node_modules/core-js/modules/es.array-buffer.slice.js\");\n__webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.float32-array.js */ \"./node_modules/core-js/modules/es.typed-array.float32-array.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.at.js */ \"./node_modules/core-js/modules/es.typed-array.at.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.copy-within.js */ \"./node_modules/core-js/modules/es.typed-array.copy-within.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.every.js */ \"./node_modules/core-js/modules/es.typed-array.every.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.fill.js */ \"./node_modules/core-js/modules/es.typed-array.fill.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.filter.js */ \"./node_modules/core-js/modules/es.typed-array.filter.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.find.js */ \"./node_modules/core-js/modules/es.typed-array.find.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.find-index.js */ \"./node_modules/core-js/modules/es.typed-array.find-index.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.find-last.js */ \"./node_modules/core-js/modules/es.typed-array.find-last.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.find-last-index.js */ \"./node_modules/core-js/modules/es.typed-array.find-last-index.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.for-each.js */ \"./node_modules/core-js/modules/es.typed-array.for-each.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.includes.js */ \"./node_modules/core-js/modules/es.typed-array.includes.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.index-of.js */ \"./node_modules/core-js/modules/es.typed-array.index-of.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.iterator.js */ \"./node_modules/core-js/modules/es.typed-array.iterator.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.join.js */ \"./node_modules/core-js/modules/es.typed-array.join.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.last-index-of.js */ \"./node_modules/core-js/modules/es.typed-array.last-index-of.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.map.js */ \"./node_modules/core-js/modules/es.typed-array.map.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.reduce.js */ \"./node_modules/core-js/modules/es.typed-array.reduce.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.reduce-right.js */ \"./node_modules/core-js/modules/es.typed-array.reduce-right.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.reverse.js */ \"./node_modules/core-js/modules/es.typed-array.reverse.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.set.js */ \"./node_modules/core-js/modules/es.typed-array.set.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.slice.js */ \"./node_modules/core-js/modules/es.typed-array.slice.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.some.js */ \"./node_modules/core-js/modules/es.typed-array.some.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.sort.js */ \"./node_modules/core-js/modules/es.typed-array.sort.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.subarray.js */ \"./node_modules/core-js/modules/es.typed-array.subarray.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.to-locale-string.js */ \"./node_modules/core-js/modules/es.typed-array.to-locale-string.js\");\n__webpack_require__(/*! core-js/modules/es.typed-array.to-string.js */ \"./node_modules/core-js/modules/es.typed-array.to-string.js\");\n__webpack_require__(/*! core-js/modules/esnext.typed-array.to-reversed.js */ \"./node_modules/core-js/modules/esnext.typed-array.to-reversed.js\");\n__webpack_require__(/*! core-js/modules/esnext.typed-array.to-sorted.js */ \"./node_modules/core-js/modules/esnext.typed-array.to-sorted.js\");\n__webpack_require__(/*! core-js/modules/esnext.typed-array.with.js */ \"./node_modules/core-js/modules/esnext.typed-array.with.js\");\n__webpack_require__(/*! core-js/modules/es.regexp.to-string.js */ \"./node_modules/core-js/modules/es.regexp.to-string.js\");\n__webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ \"./node_modules/core-js/modules/web.dom-collections.for-each.js\");\n__webpack_require__(/*! core-js/modules/es.array.concat.js */ \"./node_modules/core-js/modules/es.array.concat.js\");\n__webpack_require__(/*! core-js/modules/es.array.includes.js */ \"./node_modules/core-js/modules/es.array.includes.js\");\n__webpack_require__(/*! core-js/modules/es.string.includes.js */ \"./node_modules/core-js/modules/es.string.includes.js\");\n__webpack_require__(/*! core-js/modules/es.array.splice.js */ \"./node_modules/core-js/modules/es.array.splice.js\");\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! gs-longan */ \"./packages/longan/src/index.ts\"), __webpack_require__(/*! gs-longan */ \"./packages/longan/src/index.ts\"), __webpack_require__(/*! ./material */ \"./packages/bimAir/src/gsDevFx/objects/material.ts\"), __webpack_require__(/*! ./cuttingOptions */ \"./packages/bimAir/src/gsDevFx/objects/cuttingOptions.ts\"), __webpack_require__(/*! gs-longan/longan/gs.viewer */ \"./packages/longan/src/longan/gs.viewer.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, Longan, gs_longan_1, material_1, cuttingOptions_1, gs_viewer_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", ({\n value: true\n }));\n exports.SegmentObject = void 0;\n Longan = tslib_1.__importStar(Longan);\n var SegmentObject = function () {\n function SegmentObject(viewer, segment) {\n this._viewer = null;\n this.matrixList = [];\n this._segment = segment;\n this._viewer = viewer;\n }\n Object.defineProperty(SegmentObject.prototype, \"treeNodeOject\", {\n get: function get() {\n if (!this._treeNodeObject) {\n this._treeNodeObject = this._viewer.structureTreeManager.getTreeNodeObjectByNodeKey(this.segment.key);\n }\n return this._treeNodeObject;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"viewer\", {\n get: function get() {\n return this._viewer;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"model\", {\n get: function get() {\n if (this.treeNodeOject) {\n return this.treeNodeOject.model;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"modelId\", {\n get: function get() {\n if (this.treeNodeOject) {\n return this.treeNodeOject.modelId;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"version\", {\n get: function get() {\n if (this.treeNodeOject && this.treeNodeOject.model) {\n return this.treeNodeOject.model.renderObject.version;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"componentId\", {\n get: function get() {\n if (this.treeNodeOject) {\n return this.treeNodeOject.componentId;\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"materials\", {\n get: function get() {\n var materials = [];\n for (var i = 0; i < this._segment.styles.count(); i++) {\n var styleSegment = this._segment.styles.items[i].segment;\n if (this.viewer.styleSegment.subsegmentExists(styleSegment.name)) {\n materials.push(new material_1.Material(this.viewer, styleSegment.name, styleSegment.renderingOptions.lockFaceColor));\n }\n }\n return materials;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"name\", {\n get: function get() {\n return this._segment.name;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"key\", {\n get: function get() {\n return this.segment.key;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"localPosition\", {\n get: function get() {\n if (this.segment.modellingMatrix.matrix) {\n return Longan.Matrix4.getTranslate(new Float32Array(this.segment.modellingMatrix.matrix));\n } else {\n return [0, 0, 0];\n }\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"worldPosition\", {\n get: function get() {\n var process = this.viewer.process;\n if (process) {\n var viewer = process.activeViewer;\n if (viewer) {\n var pathKeys = [];\n var treeNode = viewer.structureTreeManager.getTreeNodeObjectByNodeKey(this.nodeKey);\n while (treeNode) {\n if (treeNode.obj) {\n pathKeys.push(treeNode.obj.segment.key);\n } else {\n pathKeys.push(treeNode.key);\n }\n treeNode = treeNode.parent;\n }\n var matrix = (0, gs_viewer_1.JS_Show_Path_ModellingMatrix)(pathKeys);\n return Longan.Matrix4.getTranslate(new Float32Array(matrix));\n }\n }\n return null;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"nodeKey\", {\n get: function get() {\n return this.key === undefined ? \"\" : this.key.toString();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"segment\", {\n get: function get() {\n return this._segment;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(SegmentObject.prototype, \"size\", {\n get: function get() {\n if (this.segment) {\n var geometries = new Longan.List();\n this.traverseSegment(this.segment, geometries);\n var result_1 = {\n pos: 0,\n face: 0,\n geo: geometries.count()\n };\n geometries.forEach(function (geo) {\n result_1.pos = result_1.pos + geo.shellSize.pos;\n result_1.face = result_1.face + geo.shellSize.face;\n });\n return result_1;\n }\n return null;\n },\n enumerable: false,\n configurable: true\n });\n SegmentObject.prototype.traverseSegment = function (segment, geometries) {\n if (segment) {\n geometries.items = geometries.items.concat(segment.geometries.items);\n if (segment.includes) {\n for (var i = 0; i < segment.includes.items.length; i++) {\n var item = segment.includes.items[i].segment;\n this.traverseSegment(item, geometries);\n }\n }\n if (segment.subsegments) {\n for (var i = 0; i < segment.subsegments.items.length; i++) {\n var item = segment.subsegments.items[i];\n this.traverseSegment(item, geometries);\n }\n }\n }\n return geometries;\n };\n SegmentObject.prototype.delete = function () {\n this.segment.delete();\n };\n SegmentObject.prototype.rename = function (name) {\n this.segment.rename(name);\n };\n SegmentObject.prototype.setMaterial = function (material) {\n var components = [];\n this.viewer.structureTreeManager.getComponents(this.treeNodeOject, components);\n if (material) {\n this.viewer.materialManager.override(components, material);\n } else {\n this.viewer.materialManager.clearOverride(components);\n }\n };\n SegmentObject.prototype.setHighlight = function (isHighlight) {\n if (isHighlight) {\n this.viewer.highlightManager.highlight([this]);\n } else {\n this.viewer.highlightManager.clearHighlight([this]);\n }\n };\n SegmentObject.prototype.setVisible = function (visible) {\n if (visible) {\n this.viewer.invisibleManager.clearInvisible([this]);\n } else {\n this.viewer.invisibleManager.invisible([this]);\n }\n };\n SegmentObject.prototype.setIsolation = function (isIsolation) {\n if (isIsolation) {\n this.viewer.isolationManager.isolation([this]);\n } else {\n this.viewer.isolationManager.clearIsolation([this]);\n }\n };\n SegmentObject.prototype.setCutting = function (cuttingOptions) {\n var bb = this.viewer.computeViewBoundingBox(this._segment);\n if (bb) {\n if (cuttingOptions.type == cuttingOptions_1.CuttingCreateType.BoundingBoxX) {\n cuttingOptions.origin = Longan.Vector.divide(Longan.Point.add(new Float32Array([bb[0], bb[1], bb[2]]), new Float32Array([bb[0], bb[4], bb[5]])), 2);\n cuttingOptions.direct = new Float32Array([1, 0, 0]);\n cuttingOptions.length = bb[3] - bb[0];\n } else if (cuttingOptions.type == cuttingOptions_1.CuttingCreateType.BoundingBoxY) {\n cuttingOptions.origin = Longan.Vector.divide(Longan.Point.add(new Float32Array([bb[0], bb[1], bb[2]]), new Float32Array([bb[3], bb[1], bb[5]])), 2);\n cuttingOptions.direct = new Float32Array([0, 1, 0]);\n cuttingOptions.length = bb[4] - bb[1];\n } else if (cuttingOptions.type == cuttingOptions_1.CuttingCreateType.BoundingBoxZ) {\n cuttingOptions.origin = Longan.Vector.divide(Longan.Point.add(new Float32Array([bb[0], bb[1], bb[2]]), new Float32Array([bb[3], bb[4], bb[2]])), 2);\n cuttingOptions.direct = new Float32Array([0, 0, 1]);\n cuttingOptions.length = bb[5] - bb[2];\n }\n cuttingOptions._bb = bb;\n }\n Longan.Vector.normalize(cuttingOptions._direct);\n var xAxis = new Float32Array([1, 0, 0]);\n if (Longan.GeometryOperators.isParallel(cuttingOptions._direct, xAxis)) {\n xAxis = new Float32Array([0, 1, 0]);\n }\n var yAxis = Longan.Vector.cross(cuttingOptions._direct, xAxis);\n Longan.Vector.normalize(yAxis);\n xAxis = Longan.Vector.cross(yAxis, cuttingOptions._direct);\n var origin = Longan.GeometryOperators.distancePoint(cuttingOptions._origin, cuttingOptions._direct, cuttingOptions._length * cuttingOptions._ratio);\n var bbLength = Longan.GeometryOperators.distance(new Float32Array([bb[0], bb[1], bb[2]]), new Float32Array([bb[3], bb[4], bb[5]]));\n var xPoint = Longan.GeometryOperators.distancePoint(origin, xAxis, bbLength);\n Longan.Vector.reverse(xAxis);\n var negXPoint = Longan.GeometryOperators.distancePoint(origin, xAxis, bbLength);\n var p1 = Longan.GeometryOperators.distancePoint(xPoint, yAxis, bbLength);\n var p2 = Longan.GeometryOperators.distancePoint(negXPoint, yAxis, bbLength);\n Longan.Vector.reverse(yAxis);\n var p3 = Longan.GeometryOperators.distancePoint(negXPoint, yAxis, bbLength);\n var p4 = Longan.GeometryOperators.distancePoint(xPoint, yAxis, bbLength);\n cuttingOptions._cuttingPlanes = this._segment.insertCuttingPlanes([p1[0], p1[1], p1[2], p2[0], p2[1], p2[2], p3[0], p3[1], p3[2], p4[0], p4[1], p4[2]]);\n this._segment.visibility.setCuttingPlane(true);\n this._segment.color.setCuttingFace(cuttingOptions.color);\n };\n SegmentObject.prototype.editCutting = function (cuttingOptions) {\n var bb = cuttingOptions.bb;\n if (!bb) {\n bb = this.viewer.computeViewBoundingBox(this._segment);\n cuttingOptions._bb = bb;\n }\n if (bb) {\n if (cuttingOptions.type == cuttingOptions_1.CuttingCreateType.BoundingBoxX) {\n cuttingOptions.origin = Longan.Vector.divide(Longan.Point.add(new Float32Array([bb[0], bb[1], bb[2]]), new Float32Array([bb[0], bb[4], bb[5]])), 2);\n cuttingOptions.direct = new Float32Array([1, 0, 0]);\n cuttingOptions.length = bb[3] - bb[0];\n } else if (cuttingOptions.type == cuttingOptions_1.CuttingCreateType.BoundingBoxY) {\n cuttingOptions.origin = Longan.Vector.divide(Longan.Point.add(new Float32Array([bb[0], bb[1], bb[2]]), new Float32Array([bb[3], bb[1], bb[5]])), 2);\n cuttingOptions.direct = new Float32Array([0, 1, 0]);\n cuttingOptions.length = bb[4] - bb[1];\n } else if (cuttingOptions.type == cuttingOptions_1.CuttingCreateType.BoundingBoxZ) {\n cuttingOptions.origin = Longan.Vector.divide(Longan.Point.add(new Float32Array([bb[0], bb[1], bb[2]]), new Float32Array([bb[3], bb[4], bb[2]])), 2);\n cuttingOptions.direct = new Float32Array([0, 0, 1]);\n cuttingOptions.length = bb[5] - bb[2];\n }\n }\n Longan.Vector.normalize(cuttingOptions._direct);\n var xAxis = new Float32Array([1, 0, 0]);\n if (Longan.GeometryOperators.isParallel(cuttingOptions._direct, xAxis)) {\n xAxis = new Float32Array([0, 1, 0]);\n }\n var yAxis = Longan.Vector.cross(cuttingOptions._direct, xAxis);\n Longan.Vector.normalize(yAxis);\n xAxis = Longan.Vector.cross(yAxis, cuttingOptions._direct);\n var origin = Longan.GeometryOperators.distancePoint(cuttingOptions._origin, cuttingOptions._direct, cuttingOptions._length * cuttingOptions._ratio);\n var bbLength = Longan.GeometryOperators.distance(new Float32Array([bb[0], bb[1], bb[2]]), new Float32Array([bb[3], bb[4], bb[5]]));\n var xPoint = Longan.GeometryOperators.distancePoint(origin, xAxis, bbLength);\n Longan.Vector.reverse(xAxis);\n var negXPoint = Longan.GeometryOperators.distancePoint(origin, xAxis, bbLength);\n var p1 = Longan.GeometryOperators.distancePoint(xPoint, yAxis, bbLength);\n var p2 = Longan.GeometryOperators.distancePoint(negXPoint, yAxis, bbLength);\n Longan.Vector.reverse(yAxis);\n var p3 = Longan.GeometryOperators.distancePoint(negXPoint, yAxis, bbLength);\n var p4 = Longan.GeometryOperators.distancePoint(xPoint, yAxis, bbLength);\n if (cuttingOptions.cuttingPlanes) {\n cuttingOptions.cuttingPlanes.edit([p1[0], p1[1], p1[2], p2[0], p2[1], p2[2], p3[0], p3[1], p3[2], p4[0], p4[1], p4[2]]);\n } else {\n cuttingOptions._cuttingPlanes = this._segment.insertCuttingPlanes([p1[0], p1[1], p1[2], p2[0], p2[1], p2[2], p3[0], p3[1], p3[2], p4[0], p4[1], p4[2]]);\n this._segment.visibility.setCuttingPlane(true);\n this._segment.color.setCuttingFace(cuttingOptions.color);\n }\n };\n SegmentObject.prototype.unsetCutting = function () {\n var cuttingPlanes = this._segment.findGeometry(\"CuttingPlanes\");\n if (cuttingPlanes) {\n cuttingPlanes.delete();\n }\n this._segment.visibility.unsetCuttingPlane();\n this.segment.color.unsetCuttingFace();\n };\n SegmentObject.prototype.equals = function (obj) {\n if (this.nodeKey == obj.nodeKey) {\n return true;\n } else {\n return false;\n }\n };\n SegmentObject.subtraction = function (arr, arr1) {\n var subtraction = [];\n for (var i = 0; i < arr.length; i++) {\n var exist = false;\n for (var j = 0; j < arr1.length; j++) {\n if (arr[i].equals(arr1[j])) {\n exist = true;\n break;\n }\n }\n if (!exist) {\n subtraction.push(arr[i]);\n }\n }\n return subtraction;\n };\n SegmentObject.convertToTreeNodeObjects = function (viewer, segmentObjects) {\n var treeNodeObjects = [];\n for (var i = 0; i < segmentObjects.length; i++) {\n var value = viewer.structureTreeManager.getTreeNodeObjectByNodeKey(segmentObjects[i].nodeKey);\n if (value) {\n treeNodeObjects.push(value);\n }\n }\n return treeNodeObjects;\n };\n SegmentObject.prototype.copy = function () {\n return this.viewer.temporaryObjectManager.copy(this);\n };\n SegmentObject.prototype.translate = function (x, y, z) {\n this.matrixList.push(this.segment.modellingMatrix.matrix);\n var matrix = gs_longan_1.Matrix4.identity();\n gs_longan_1.Matrix4.translate(matrix, x, y, z);\n this.segment.modellingMatrix.append(matrix);\n };\n SegmentObject.prototype.scale = function (x, y, z, origin) {\n this.matrixList.push(this.segment.modellingMatrix.matrix);\n var center;\n if (origin) {\n center = origin;\n } else {\n var bb = this.segment.boundingbox;\n center = [(bb[0] + bb[3]) / 2, (bb[1] + bb[4]) / 2, (bb[2] + bb[5]) / 2];\n }\n var matrix = gs_longan_1.Matrix4.identity();\n gs_longan_1.Matrix4.translate(matrix, -center[0], -center[1], -center[2]);\n gs_longan_1.Matrix4.scale(matrix, x, y, z);\n this.segment.modellingMatrix.append(matrix);\n };\n SegmentObject.prototype.rotate = function (origin, axis, alpha) {\n this.matrixList.push(this.segment.modellingMatrix.matrix);\n var matrix = gs_longan_1.Matrix4.rotateByAxis(new Float32Array(origin), new Float32Array(axis), alpha);\n this.segment.modellingMatrix.append(matrix);\n };\n SegmentObject.prototype.rotateByAxis = function (origin, axis, alpha) {\n this.matrixList.push(this.segment.modellingMatrix.matrix);\n var matrix = gs_longan_1.Matrix4.rotateByAxis(new Float32Array(origin), new Float32Array(axis), alpha);\n this.segment.modellingMatrix.append(matrix);\n };\n SegmentObject.prototype.unsetMatrix = function () {\n if (this.matrixList.length > 0) {\n this.segment.modellingMatrix.set(this.matrixList[0]);\n console.log(\"this.segment.modellingMatrix.matrix\", this.matrixList);\n }\n };\n SegmentObject.prototype.undoMatrix = function () {\n if (this.matrixList.length > 0) {\n this.segment.modellingMatrix.set(this.matrixList[this.matrixList.length - 1]);\n this.matrixList.splice(this.matrixList.length - 1, 1);\n }\n };\n return SegmentObject;\n }();\n exports.SegmentObject = SegmentObject;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9wYWNrYWdlcy9iaW1BaXIvc3JjL2dzRGV2Rngvb2JqZWN0cy9zZWdtZW50T2JqZWN0LnRzLmpzIiwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFXQTtBQU1BO0FBTEE7QUFHQTtBQUdBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBOztBQUtBO0FBQ0E7Ozs7QUFFQTtBQUFBO0FBQ0E7QUFDQTs7OztBQUVBO0FBQUE7QUFDQTtBQUNBOztBQUVBOzs7O0FBRUE7QUFBQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7QUFFQTtBQUFBO0FBQ0E7QUFDQTs7QUFNQTs7OztBQUVBO0FBQUE7QUFDQTtBQUNBOztBQUVBOzs7O0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQVVBO0FBQ0E7Ozs7QUFFQTtBQUFBO0FBQ0E7QUFDQTs7OztBQUVBO0FBQUE7QUFDQTtBQUNBOzs7O0FBS0E7QUFBQTtBQUNBO0FBQ0E7QUFHQTtBQUNBOztBQUVBOzs7O0FBS0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBR0E7QUFDQTs7O0FBSUE7QUFDQTs7OztBQUVBO0FBQUE7QUFDQTtBQUVBOzs7O0FBRUE7QUFBQTtBQUNBO0FBQ0E7Ozs7QUFLQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7OztBQUVBO0FBSUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFJQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTs7QUFHQTs7QUFHQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQU1BO0FBSUE7QUFLQTtBQUNBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBY0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTs7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFNQTtBQUlBO0FBS0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBY0E7QUFDQTtBQWNBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBRUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBSUE7QUFDQTs7O0FBSUE7QUFDQTtBQVFBO0FBSUE7QUFDQTtBQUNBO0FBR0E7QUFDQTs7O0FBR0E7QUFDQTtBQU1BO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQVNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQVFBO0FBQ0E7QUFFQTtBQUtBO0FBQ0E7QUFPQTtBQUNBO0FBRUE7QUFLQTtBQUNBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFLQTtBQUNBO0FBQ0E7QUFHQTs7QUFFQTtBQUNBO0FBQUE7QUFybUJBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmltbGlnaHQtcGxhdGZvcm0vLi9wYWNrYWdlcy9iaW1BaXIvc3JjL2dzRGV2Rngvb2JqZWN0cy9zZWdtZW50T2JqZWN0LnRzP2Y5Y2IiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgTG9uZ2FuIGZyb20gXCJncy1sb25nYW5cIjtcclxuaW1wb3J0IHsgTWF0cml4NCwgU2VnbWVudCB9IGZyb20gXCJncy1sb25nYW5cIjtcclxuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tIFwiLi9tYXRlcmlhbFwiO1xyXG5pbXBvcnQgeyBDdXR0aW5nQ3JlYXRlVHlwZSwgQ3V0dGluZ09wdGlvbnMgfSBmcm9tIFwiLi9jdXR0aW5nT3B0aW9uc1wiO1xyXG5pbXBvcnQgeyBWaWV3ZXIgfSBmcm9tIFwiLi4vdmlld2VyXCI7XHJcbmltcG9ydCB7IFRyZWVOb2RlT2JqZWN0IH0gZnJvbSBcIi4vdHJlZU5vZGVPYmplY3RcIjtcclxuaW1wb3J0IHsgSlNfU2hvd19QYXRoX01vZGVsbGluZ01hdHJpeCB9IGZyb20gXCJncy1sb25nYW4vbG9uZ2FuL2dzLnZpZXdlclwiO1xyXG5pbXBvcnQgeyBJbnN0YW5jZUxpZ2h0TW9kZWwgfSBmcm9tIFwiLi9pbnN0YW5jZXNPYmplY3RzL2luc3RhbmNlTGlnaHRNb2RlbFwiO1xyXG5pbXBvcnQgeyBMaWdodE1vZGVsIH0gZnJvbSBcIi4vbGlnaHRNb2RlbFwiO1xyXG5pbXBvcnQgeyBSZWZlcmVuY2VMaWdodE1vZGVsIH0gZnJvbSBcIi4vcmVmZXJlbmNlTGlnaHRNb2RlbFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNlZ21lbnRPYmplY3Qge1xyXG4gIHByaXZhdGUgX3ZpZXdlcjogVmlld2VyID0gbnVsbDtcclxuICBwcml2YXRlIF9zZWdtZW50OiBTZWdtZW50O1xyXG4gIHByaXZhdGUgX3RyZWVOb2RlT2JqZWN0OiBUcmVlTm9kZU9iamVjdDtcclxuICBwcml2YXRlIG1hdHJpeExpc3QgPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3Iodmlld2VyOiBWaWV3ZXIsIHNlZ21lbnQ6IFNlZ21lbnQpIHtcclxuICAgIHRoaXMuX3NlZ21lbnQgPSBzZWdtZW50O1xyXG4gICAgdGhpcy5fdmlld2VyID0gdmlld2VyO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCB0cmVlTm9kZU9qZWN0KCkge1xyXG4gICAgaWYgKCF0aGlzLl90cmVlTm9kZU9iamVjdCkge1xyXG4gICAgICB0aGlzLl90cmVlTm9kZU9iamVjdCA9XHJcbiAgICAgICAgdGhpcy5fdmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLmdldFRyZWVOb2RlT2JqZWN0QnlOb2RlS2V5KFxyXG4gICAgICAgICAgdGhpcy5zZWdtZW50LmtleVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5fdHJlZU5vZGVPYmplY3Q7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IHZpZXdlcigpOiBWaWV3ZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3ZpZXdlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbW9kZWwoKSB7XHJcbiAgICBpZiAodGhpcy50cmVlTm9kZU9qZWN0KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlT2plY3QubW9kZWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG1vZGVsSWQoKSB7XHJcbiAgICBpZiAodGhpcy50cmVlTm9kZU9qZWN0KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnRyZWVOb2RlT2plY3QubW9kZWxJZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgdmVyc2lvbigpIHtcclxuICAgIGlmICh0aGlzLnRyZWVOb2RlT2plY3QgJiYgdGhpcy50cmVlTm9kZU9qZWN0Lm1vZGVsKSB7XHJcbiAgICAgIHJldHVybiAoXHJcbiAgICAgICAgdGhpcy50cmVlTm9kZU9qZWN0Lm1vZGVsLnJlbmRlck9iamVjdCBhc1xyXG4gICAgICAgICAgfCBMaWdodE1vZGVsXHJcbiAgICAgICAgICB8IFJlZmVyZW5jZUxpZ2h0TW9kZWxcclxuICAgICAgKS52ZXJzaW9uO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBjb21wb25lbnRJZCgpIHtcclxuICAgIGlmICh0aGlzLnRyZWVOb2RlT2plY3QpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudHJlZU5vZGVPamVjdC5jb21wb25lbnRJZDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbWF0ZXJpYWxzKCk6IE1hdGVyaWFsW10ge1xyXG4gICAgbGV0IG1hdGVyaWFscyA9IFtdO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9zZWdtZW50LnN0eWxlcy5jb3VudCgpOyBpKyspIHtcclxuICAgICAgbGV0IHN0eWxlU2VnbWVudCA9IHRoaXMuX3NlZ21lbnQuc3R5bGVzLml0ZW1zW2ldLnNlZ21lbnQ7XHJcbiAgICAgIGlmICh0aGlzLnZpZXdlci5zdHlsZVNlZ21lbnQuc3Vic2VnbWVudEV4aXN0cyhzdHlsZVNlZ21lbnQubmFtZSkpIHtcclxuICAgICAgICBtYXRlcmlhbHMucHVzaChcclxuICAgICAgICAgIG5ldyBNYXRlcmlhbChcclxuICAgICAgICAgICAgdGhpcy52aWV3ZXIsXHJcbiAgICAgICAgICAgIHN0eWxlU2VnbWVudC5uYW1lLFxyXG4gICAgICAgICAgICBzdHlsZVNlZ21lbnQucmVuZGVyaW5nT3B0aW9ucy5sb2NrRmFjZUNvbG9yXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtYXRlcmlhbHM7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWdtZW50Lm5hbWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IGtleSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuc2VnbWVudC5rZXk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDojrflj5blsYDpg6jlnZDmoIdcclxuICAgKi9cclxuICBnZXQgbG9jYWxQb3NpdGlvbigpIHtcclxuICAgIGlmICh0aGlzLnNlZ21lbnQubW9kZWxsaW5nTWF0cml4Lm1hdHJpeCkge1xyXG4gICAgICByZXR1cm4gTG9uZ2FuLk1hdHJpeDQuZ2V0VHJhbnNsYXRlKFxyXG4gICAgICAgIG5ldyBGbG9hdDMyQXJyYXkodGhpcy5zZWdtZW50Lm1vZGVsbGluZ01hdHJpeC5tYXRyaXgpXHJcbiAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gWzAsIDAsIDBdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6I635Y+W5LiW55WM5Z2Q5qCHXHJcbiAgICovXHJcbiAgZ2V0IHdvcmxkUG9zaXRpb24oKSB7XHJcbiAgICBsZXQgcHJvY2VzcyA9IHRoaXMudmlld2VyLnByb2Nlc3M7XHJcbiAgICBpZiAocHJvY2Vzcykge1xyXG4gICAgICBsZXQgdmlld2VyID0gcHJvY2Vzcy5hY3RpdmVWaWV3ZXIgYXMgVmlld2VyO1xyXG4gICAgICBpZiAodmlld2VyKSB7XHJcbiAgICAgICAgbGV0IHBhdGhLZXlzID0gW107XHJcbiAgICAgICAgbGV0IHRyZWVOb2RlID0gdmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLmdldFRyZWVOb2RlT2JqZWN0QnlOb2RlS2V5KFxyXG4gICAgICAgICAgdGhpcy5ub2RlS2V5XHJcbiAgICAgICAgKTtcclxuICAgICAgICB3aGlsZSAodHJlZU5vZGUpIHtcclxuICAgICAgICAgIGlmICh0cmVlTm9kZS5vYmopIHtcclxuICAgICAgICAgICAgcGF0aEtleXMucHVzaCh0cmVlTm9kZS5vYmouc2VnbWVudC5rZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcGF0aEtleXMucHVzaCh0cmVlTm9kZS5rZXkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdHJlZU5vZGUgPSB0cmVlTm9kZS5wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbWF0cml4ID0gSlNfU2hvd19QYXRoX01vZGVsbGluZ01hdHJpeChwYXRoS2V5cyk7XHJcbiAgICAgICAgcmV0dXJuIExvbmdhbi5NYXRyaXg0LmdldFRyYW5zbGF0ZShuZXcgRmxvYXQzMkFycmF5KG1hdHJpeCkpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0IG5vZGVLZXkoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLmtleSA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IHRoaXMua2V5LnRvU3RyaW5nKCk7XHJcbiAgICAvLyByZXR1cm4gdGhpcy5rZXkudG9TdHJpbmcoKTtcclxuICB9XHJcblxyXG4gIGdldCBzZWdtZW50KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlZ21lbnQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmnoTku7bnmoTlsLrlr7jvvIzljIXlkKvngrnmlbDph4/jgIHpnaLmlbDph4/jgIHlh6DkvZXmlbDph49cclxuICAgKi9cclxuICBnZXQgc2l6ZSgpIHtcclxuICAgIGlmICh0aGlzLnNlZ21lbnQpIHtcclxuICAgICAgbGV0IGdlb21ldHJpZXM6IExvbmdhbi5MaXN0PExvbmdhbi5HZW9tZXRyeT4gPSBuZXcgTG9uZ2FuLkxpc3QoKTtcclxuICAgICAgdGhpcy50cmF2ZXJzZVNlZ21lbnQodGhpcy5zZWdtZW50LCBnZW9tZXRyaWVzKTtcclxuXHJcbiAgICAgIGxldCByZXN1bHQgPSB7XHJcbiAgICAgICAgcG9zOiAwLFxyXG4gICAgICAgIGZhY2U6IDAsXHJcbiAgICAgICAgZ2VvOiBnZW9tZXRyaWVzLmNvdW50KCksXHJcbiAgICAgIH07XHJcbiAgICAgIGdlb21ldHJpZXMuZm9yRWFjaCgoZ2VvKSA9PiB7XHJcbiAgICAgICAgcmVzdWx0LnBvcyA9IHJlc3VsdC5wb3MgKyBnZW8uc2hlbGxTaXplLnBvcztcclxuICAgICAgICByZXN1bHQuZmFjZSA9IHJlc3VsdC5mYWNlICsgZ2VvLnNoZWxsU2l6ZS5mYWNlO1xyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgdHJhdmVyc2VTZWdtZW50KFxyXG4gICAgc2VnbWVudDogTG9uZ2FuLlNlZ21lbnQsXHJcbiAgICBnZW9tZXRyaWVzOiBMb25nYW4uTGlzdDxMb25nYW4uR2VvbWV0cnk+XHJcbiAgKSB7XHJcbiAgICBpZiAoc2VnbWVudCkge1xyXG4gICAgICBnZW9tZXRyaWVzLml0ZW1zID0gZ2VvbWV0cmllcy5pdGVtcy5jb25jYXQoc2VnbWVudC5nZW9tZXRyaWVzLml0ZW1zKTtcclxuXHJcbiAgICAgIGlmIChzZWdtZW50LmluY2x1ZGVzKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZWdtZW50LmluY2x1ZGVzLml0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gc2VnbWVudC5pbmNsdWRlcy5pdGVtc1tpXS5zZWdtZW50O1xyXG4gICAgICAgICAgdGhpcy50cmF2ZXJzZVNlZ21lbnQoaXRlbSwgZ2VvbWV0cmllcyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc2VnbWVudC5zdWJzZWdtZW50cykge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudC5zdWJzZWdtZW50cy5pdGVtcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29uc3QgaXRlbSA9IHNlZ21lbnQuc3Vic2VnbWVudHMuaXRlbXNbaV07XHJcbiAgICAgICAgICB0aGlzLnRyYXZlcnNlU2VnbWVudChpdGVtLCBnZW9tZXRyaWVzKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBnZW9tZXRyaWVzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZSgpIHtcclxuICAgIHRoaXMuc2VnbWVudC5kZWxldGUoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5hbWUobmFtZSkge1xyXG4gICAgdGhpcy5zZWdtZW50LnJlbmFtZShuYW1lKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOiuvue9ruadkOi0qO+8jOiLpeS4jeS8oOWPguaVsOWImea4hemZpOaehOS7tuS4iueahOadkOi0qFxyXG4gICAqIEBwYXJhbSBtYXRlcmlhbFxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRNYXRlcmlhbChtYXRlcmlhbD86IE1hdGVyaWFsKSB7XHJcbiAgICBsZXQgY29tcG9uZW50cyA9IFtdO1xyXG4gICAgdGhpcy52aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXIuZ2V0Q29tcG9uZW50cyhcclxuICAgICAgdGhpcy50cmVlTm9kZU9qZWN0LFxyXG4gICAgICBjb21wb25lbnRzXHJcbiAgICApO1xyXG5cclxuICAgIGlmIChtYXRlcmlhbCkge1xyXG4gICAgICB0aGlzLnZpZXdlci5tYXRlcmlhbE1hbmFnZXIub3ZlcnJpZGUoY29tcG9uZW50cywgbWF0ZXJpYWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52aWV3ZXIubWF0ZXJpYWxNYW5hZ2VyLmNsZWFyT3ZlcnJpZGUoY29tcG9uZW50cyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDorr7nva7mnoTku7bnmoTpq5jkuq5cclxuICAgKiBAcGFyYW0gaXNIaWdobGlnaHQg5piv5ZCm6auY5LquXHJcbiAgICovXHJcbiAgcHVibGljIHNldEhpZ2hsaWdodChpc0hpZ2hsaWdodDogYm9vbGVhbikge1xyXG4gICAgaWYgKGlzSGlnaGxpZ2h0KSB7XHJcbiAgICAgIHRoaXMudmlld2VyLmhpZ2hsaWdodE1hbmFnZXIuaGlnaGxpZ2h0KFt0aGlzXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnZpZXdlci5oaWdobGlnaHRNYW5hZ2VyLmNsZWFySGlnaGxpZ2h0KFt0aGlzXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDorr7nva7mnoTku7bnmoTlj6/op4FcclxuICAgKiBAcGFyYW0gdmlzaWJsZSDmmK/lkKblj6/op4FcclxuICAgKi9cclxuICBwdWJsaWMgc2V0VmlzaWJsZSh2aXNpYmxlOiBib29sZWFuKSB7XHJcbiAgICBpZiAodmlzaWJsZSkge1xyXG4gICAgICB0aGlzLnZpZXdlci5pbnZpc2libGVNYW5hZ2VyLmNsZWFySW52aXNpYmxlKFt0aGlzXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnZpZXdlci5pbnZpc2libGVNYW5hZ2VyLmludmlzaWJsZShbdGhpc10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog6K6+572u5p6E5Lu255qE6ZqU56a7XHJcbiAgICogQHBhcmFtIGlzSXNvbGF0aW9uIOaYr+WQpumalOemu1xyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRJc29sYXRpb24oaXNJc29sYXRpb246IGJvb2xlYW4pIHtcclxuICAgIGlmIChpc0lzb2xhdGlvbikge1xyXG4gICAgICB0aGlzLnZpZXdlci5pc29sYXRpb25NYW5hZ2VyLmlzb2xhdGlvbihbdGhpc10pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52aWV3ZXIuaXNvbGF0aW9uTWFuYWdlci5jbGVhcklzb2xhdGlvbihbdGhpc10pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5Yib5bu65YmW5YiH77yM6YCa6L+H5YmW5YiH6YCJ6aG55Yib5bu65YmW5YiHXHJcbiAgICogQHBhcmFtIGN1dHRpbmdPcHRpb25zIOWJluWIh+mAiemhuVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRDdXR0aW5nKGN1dHRpbmdPcHRpb25zOiBDdXR0aW5nT3B0aW9ucykge1xyXG4gICAgbGV0IGJiID0gdGhpcy52aWV3ZXIuY29tcHV0ZVZpZXdCb3VuZGluZ0JveCh0aGlzLl9zZWdtZW50KTtcclxuICAgIGlmIChiYikge1xyXG4gICAgICBpZiAoY3V0dGluZ09wdGlvbnMudHlwZSA9PSBDdXR0aW5nQ3JlYXRlVHlwZS5Cb3VuZGluZ0JveFgpIHtcclxuICAgICAgICBjdXR0aW5nT3B0aW9ucy5vcmlnaW4gPSBMb25nYW4uVmVjdG9yLmRpdmlkZShcclxuICAgICAgICAgIExvbmdhbi5Qb2ludC5hZGQoXHJcbiAgICAgICAgICAgIG5ldyBGbG9hdDMyQXJyYXkoW2JiWzBdLCBiYlsxXSwgYmJbMl1dKSxcclxuICAgICAgICAgICAgbmV3IEZsb2F0MzJBcnJheShbYmJbMF0sIGJiWzRdLCBiYls1XV0pXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgMlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3V0dGluZ09wdGlvbnMuZGlyZWN0ID0gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMF0pO1xyXG4gICAgICAgIGN1dHRpbmdPcHRpb25zLmxlbmd0aCA9IGJiWzNdIC0gYmJbMF07XHJcbiAgICAgIH0gZWxzZSBpZiAoY3V0dGluZ09wdGlvbnMudHlwZSA9PSBDdXR0aW5nQ3JlYXRlVHlwZS5Cb3VuZGluZ0JveFkpIHtcclxuICAgICAgICBjdXR0aW5nT3B0aW9ucy5vcmlnaW4gPSBMb25nYW4uVmVjdG9yLmRpdmlkZShcclxuICAgICAgICAgIExvbmdhbi5Qb2ludC5hZGQoXHJcbiAgICAgICAgICAgIG5ldyBGbG9hdDMyQXJyYXkoW2JiWzBdLCBiYlsxXSwgYmJbMl1dKSxcclxuICAgICAgICAgICAgbmV3IEZsb2F0MzJBcnJheShbYmJbM10sIGJiWzFdLCBiYls1XV0pXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgMlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3V0dGluZ09wdGlvbnMuZGlyZWN0ID0gbmV3IEZsb2F0MzJBcnJheShbMCwgMSwgMF0pO1xyXG4gICAgICAgIGN1dHRpbmdPcHRpb25zLmxlbmd0aCA9IGJiWzRdIC0gYmJbMV07XHJcbiAgICAgIH0gZWxzZSBpZiAoY3V0dGluZ09wdGlvbnMudHlwZSA9PSBDdXR0aW5nQ3JlYXRlVHlwZS5Cb3VuZGluZ0JveFopIHtcclxuICAgICAgICBjdXR0aW5nT3B0aW9ucy5vcmlnaW4gPSBMb25nYW4uVmVjdG9yLmRpdmlkZShcclxuICAgICAgICAgIExvbmdhbi5Qb2ludC5hZGQoXHJcbiAgICAgICAgICAgIG5ldyBGbG9hdDMyQXJyYXkoW2JiWzBdLCBiYlsxXSwgYmJbMl1dKSxcclxuICAgICAgICAgICAgbmV3IEZsb2F0MzJBcnJheShbYmJbM10sIGJiWzRdLCBiYlsyXV0pXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgMlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY3V0dGluZ09wdGlvbnMuZGlyZWN0ID0gbmV3IEZsb2F0MzJBcnJheShbMCwgMCwgMV0pO1xyXG4gICAgICAgIGN1dHRpbmdPcHRpb25zLmxlbmd0aCA9IGJiWzVdIC0gYmJbMl07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGN1dHRpbmdPcHRpb25zLl9iYiA9IGJiO1xyXG4gICAgfVxyXG5cclxuICAgIExvbmdhbi5WZWN0b3Iubm9ybWFsaXplKGN1dHRpbmdPcHRpb25zLl9kaXJlY3QpO1xyXG4gICAgbGV0IHhBeGlzID0gbmV3IEZsb2F0MzJBcnJheShbMSwgMCwgMF0pO1xyXG4gICAgaWYgKExvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5pc1BhcmFsbGVsKGN1dHRpbmdPcHRpb25zLl9kaXJlY3QsIHhBeGlzKSkge1xyXG4gICAgICB4QXhpcyA9IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDEsIDBdKTtcclxuICAgIH1cclxuICAgIGxldCB5QXhpcyA9IExvbmdhbi5WZWN0b3IuY3Jvc3MoY3V0dGluZ09wdGlvbnMuX2RpcmVjdCwgeEF4aXMpO1xyXG4gICAgTG9uZ2FuLlZlY3Rvci5ub3JtYWxpemUoeUF4aXMpO1xyXG4gICAgeEF4aXMgPSBMb25nYW4uVmVjdG9yLmNyb3NzKHlBeGlzLCBjdXR0aW5nT3B0aW9ucy5fZGlyZWN0KTtcclxuXHJcbiAgICBsZXQgb3JpZ2luID0gTG9uZ2FuLkdlb21ldHJ5T3BlcmF0b3JzLmRpc3RhbmNlUG9pbnQoXHJcbiAgICAgIGN1dHRpbmdPcHRpb25zLl9vcmlnaW4sXHJcbiAgICAgIGN1dHRpbmdPcHRpb25zLl9kaXJlY3QsXHJcbiAgICAgIGN1dHRpbmdPcHRpb25zLl9sZW5ndGggKiBjdXR0aW5nT3B0aW9ucy5fcmF0aW9cclxuICAgICk7XHJcblxyXG4gICAgbGV0IGJiTGVuZ3RoID0gTG9uZ2FuLkdlb21ldHJ5T3BlcmF0b3JzLmRpc3RhbmNlKFxyXG4gICAgICBuZXcgRmxvYXQzMkFycmF5KFtiYlswXSwgYmJbMV0sIGJiWzJdXSksXHJcbiAgICAgIG5ldyBGbG9hdDMyQXJyYXkoW2JiWzNdLCBiYls0XSwgYmJbNV1dKVxyXG4gICAgKTtcclxuICAgIGxldCB4UG9pbnQgPSBMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMuZGlzdGFuY2VQb2ludChcclxuICAgICAgb3JpZ2luLFxyXG4gICAgICB4QXhpcyxcclxuICAgICAgYmJMZW5ndGhcclxuICAgICk7XHJcbiAgICBMb25nYW4uVmVjdG9yLnJldmVyc2UoeEF4aXMpO1xyXG4gICAgbGV0IG5lZ1hQb2ludCA9IExvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5kaXN0YW5jZVBvaW50KFxyXG4gICAgICBvcmlnaW4sXHJcbiAgICAgIHhBeGlzLFxyXG4gICAgICBiYkxlbmd0aFxyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgcDEgPSBMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMuZGlzdGFuY2VQb2ludCh4UG9pbnQsIHlBeGlzLCBiYkxlbmd0aCk7XHJcbiAgICBsZXQgcDIgPSBMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMuZGlzdGFuY2VQb2ludChuZWdYUG9pbnQsIHlBeGlzLCBiYkxlbmd0aCk7XHJcbiAgICBMb25nYW4uVmVjdG9yLnJldmVyc2UoeUF4aXMpO1xyXG4gICAgbGV0IHAzID0gTG9uZ2FuLkdlb21ldHJ5T3BlcmF0b3JzLmRpc3RhbmNlUG9pbnQobmVnWFBvaW50LCB5QXhpcywgYmJMZW5ndGgpO1xyXG4gICAgbGV0IHA0ID0gTG9uZ2FuLkdlb21ldHJ5T3BlcmF0b3JzLmRpc3RhbmNlUG9pbnQoeFBvaW50LCB5QXhpcywgYmJMZW5ndGgpO1xyXG5cclxuICAgIGN1dHRpbmdPcHRpb25zLl9jdXR0aW5nUGxhbmVzID0gdGhpcy5fc2VnbWVudC5pbnNlcnRDdXR0aW5nUGxhbmVzKFtcclxuICAgICAgcDFbMF0sXHJcbiAgICAgIHAxWzFdLFxyXG4gICAgICBwMVsyXSxcclxuICAgICAgcDJbMF0sXHJcbiAgICAgIHAyWzFdLFxyXG4gICAgICBwMlsyXSxcclxuICAgICAgcDNbMF0sXHJcbiAgICAgIHAzWzFdLFxyXG4gICAgICBwM1syXSxcclxuICAgICAgcDRbMF0sXHJcbiAgICAgIHA0WzFdLFxyXG4gICAgICBwNFsyXSxcclxuICAgIF0pO1xyXG4gICAgdGhpcy5fc2VnbWVudC52aXNpYmlsaXR5LnNldEN1dHRpbmdQbGFuZSh0cnVlKTtcclxuICAgIHRoaXMuX3NlZ21lbnQuY29sb3Iuc2V0Q3V0dGluZ0ZhY2UoY3V0dGluZ09wdGlvbnMuY29sb3IpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGVkaXRDdXR0aW5nKGN1dHRpbmdPcHRpb25zOiBDdXR0aW5nT3B0aW9ucykge1xyXG4gICAgbGV0IGJiID0gY3V0dGluZ09wdGlvbnMuYmI7XHJcbiAgICBpZiAoIWJiKSB7XHJcbiAgICAgIGJiID0gdGhpcy52aWV3ZXIuY29tcHV0ZVZpZXdCb3VuZGluZ0JveCh0aGlzLl9zZWdtZW50KTtcclxuICAgICAgY3V0dGluZ09wdGlvbnMuX2JiID0gYmI7XHJcbiAgICB9XHJcbiAgICBpZiAoYmIpIHtcclxuICAgICAgaWYgKGN1dHRpbmdPcHRpb25zLnR5cGUgPT0gQ3V0dGluZ0NyZWF0ZVR5cGUuQm91bmRpbmdCb3hYKSB7XHJcbiAgICAgICAgY3V0dGluZ09wdGlvbnMub3JpZ2luID0gTG9uZ2FuLlZlY3Rvci5kaXZpZGUoXHJcbiAgICAgICAgICBMb25nYW4uUG9pbnQuYWRkKFxyXG4gICAgICAgICAgICBuZXcgRmxvYXQzMkFycmF5KFtiYlswXSwgYmJbMV0sIGJiWzJdXSksXHJcbiAgICAgICAgICAgIG5ldyBGbG9hdDMyQXJyYXkoW2JiWzBdLCBiYls0XSwgYmJbNV1dKVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIDJcclxuICAgICAgICApO1xyXG4gICAgICAgIGN1dHRpbmdPcHRpb25zLmRpcmVjdCA9IG5ldyBGbG9hdDMyQXJyYXkoWzEsIDAsIDBdKTtcclxuICAgICAgICBjdXR0aW5nT3B0aW9ucy5sZW5ndGggPSBiYlszXSAtIGJiWzBdO1xyXG4gICAgICB9IGVsc2UgaWYgKGN1dHRpbmdPcHRpb25zLnR5cGUgPT0gQ3V0dGluZ0NyZWF0ZVR5cGUuQm91bmRpbmdCb3hZKSB7XHJcbiAgICAgICAgY3V0dGluZ09wdGlvbnMub3JpZ2luID0gTG9uZ2FuLlZlY3Rvci5kaXZpZGUoXHJcbiAgICAgICAgICBMb25nYW4uUG9pbnQuYWRkKFxyXG4gICAgICAgICAgICBuZXcgRmxvYXQzMkFycmF5KFtiYlswXSwgYmJbMV0sIGJiWzJdXSksXHJcbiAgICAgICAgICAgIG5ldyBGbG9hdDMyQXJyYXkoW2JiWzNdLCBiYlsxXSwgYmJbNV1dKVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIDJcclxuICAgICAgICApO1xyXG4gICAgICAgIGN1dHRpbmdPcHRpb25zLmRpcmVjdCA9IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDEsIDBdKTtcclxuICAgICAgICBjdXR0aW5nT3B0aW9ucy5sZW5ndGggPSBiYls0XSAtIGJiWzFdO1xyXG4gICAgICB9IGVsc2UgaWYgKGN1dHRpbmdPcHRpb25zLnR5cGUgPT0gQ3V0dGluZ0NyZWF0ZVR5cGUuQm91bmRpbmdCb3haKSB7XHJcbiAgICAgICAgY3V0dGluZ09wdGlvbnMub3JpZ2luID0gTG9uZ2FuLlZlY3Rvci5kaXZpZGUoXHJcbiAgICAgICAgICBMb25nYW4uUG9pbnQuYWRkKFxyXG4gICAgICAgICAgICBuZXcgRmxvYXQzMkFycmF5KFtiYlswXSwgYmJbMV0sIGJiWzJdXSksXHJcbiAgICAgICAgICAgIG5ldyBGbG9hdDMyQXJyYXkoW2JiWzNdLCBiYls0XSwgYmJbMl1dKVxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIDJcclxuICAgICAgICApO1xyXG4gICAgICAgIGN1dHRpbmdPcHRpb25zLmRpcmVjdCA9IG5ldyBGbG9hdDMyQXJyYXkoWzAsIDAsIDFdKTtcclxuICAgICAgICBjdXR0aW5nT3B0aW9ucy5sZW5ndGggPSBiYls1XSAtIGJiWzJdO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgTG9uZ2FuLlZlY3Rvci5ub3JtYWxpemUoY3V0dGluZ09wdGlvbnMuX2RpcmVjdCk7XHJcbiAgICBsZXQgeEF4aXMgPSBuZXcgRmxvYXQzMkFycmF5KFsxLCAwLCAwXSk7XHJcbiAgICBpZiAoTG9uZ2FuLkdlb21ldHJ5T3BlcmF0b3JzLmlzUGFyYWxsZWwoY3V0dGluZ09wdGlvbnMuX2RpcmVjdCwgeEF4aXMpKSB7XHJcbiAgICAgIHhBeGlzID0gbmV3IEZsb2F0MzJBcnJheShbMCwgMSwgMF0pO1xyXG4gICAgfVxyXG4gICAgbGV0IHlBeGlzID0gTG9uZ2FuLlZlY3Rvci5jcm9zcyhjdXR0aW5nT3B0aW9ucy5fZGlyZWN0LCB4QXhpcyk7XHJcbiAgICBMb25nYW4uVmVjdG9yLm5vcm1hbGl6ZSh5QXhpcyk7XHJcbiAgICB4QXhpcyA9IExvbmdhbi5WZWN0b3IuY3Jvc3MoeUF4aXMsIGN1dHRpbmdPcHRpb25zLl9kaXJlY3QpO1xyXG5cclxuICAgIGxldCBvcmlnaW4gPSBMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMuZGlzdGFuY2VQb2ludChcclxuICAgICAgY3V0dGluZ09wdGlvbnMuX29yaWdpbixcclxuICAgICAgY3V0dGluZ09wdGlvbnMuX2RpcmVjdCxcclxuICAgICAgY3V0dGluZ09wdGlvbnMuX2xlbmd0aCAqIGN1dHRpbmdPcHRpb25zLl9yYXRpb1xyXG4gICAgKTtcclxuXHJcbiAgICBsZXQgYmJMZW5ndGggPSBMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMuZGlzdGFuY2UoXHJcbiAgICAgIG5ldyBGbG9hdDMyQXJyYXkoW2JiWzBdLCBiYlsxXSwgYmJbMl1dKSxcclxuICAgICAgbmV3IEZsb2F0MzJBcnJheShbYmJbM10sIGJiWzRdLCBiYls1XV0pXHJcbiAgICApO1xyXG4gICAgbGV0IHhQb2ludCA9IExvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5kaXN0YW5jZVBvaW50KFxyXG4gICAgICBvcmlnaW4sXHJcbiAgICAgIHhBeGlzLFxyXG4gICAgICBiYkxlbmd0aFxyXG4gICAgKTtcclxuICAgIExvbmdhbi5WZWN0b3IucmV2ZXJzZSh4QXhpcyk7XHJcbiAgICBsZXQgbmVnWFBvaW50ID0gTG9uZ2FuLkdlb21ldHJ5T3BlcmF0b3JzLmRpc3RhbmNlUG9pbnQoXHJcbiAgICAgIG9yaWdpbixcclxuICAgICAgeEF4aXMsXHJcbiAgICAgIGJiTGVuZ3RoXHJcbiAgICApO1xyXG5cclxuICAgIGxldCBwMSA9IExvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5kaXN0YW5jZVBvaW50KHhQb2ludCwgeUF4aXMsIGJiTGVuZ3RoKTtcclxuICAgIGxldCBwMiA9IExvbmdhbi5HZW9tZXRyeU9wZXJhdG9ycy5kaXN0YW5jZVBvaW50KG5lZ1hQb2ludCwgeUF4aXMsIGJiTGVuZ3RoKTtcclxuICAgIExvbmdhbi5WZWN0b3IucmV2ZXJzZSh5QXhpcyk7XHJcbiAgICBsZXQgcDMgPSBMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMuZGlzdGFuY2VQb2ludChuZWdYUG9pbnQsIHlBeGlzLCBiYkxlbmd0aCk7XHJcbiAgICBsZXQgcDQgPSBMb25nYW4uR2VvbWV0cnlPcGVyYXRvcnMuZGlzdGFuY2VQb2ludCh4UG9pbnQsIHlBeGlzLCBiYkxlbmd0aCk7XHJcblxyXG4gICAgaWYgKGN1dHRpbmdPcHRpb25zLmN1dHRpbmdQbGFuZXMpIHtcclxuICAgICAgY3V0dGluZ09wdGlvbnMuY3V0dGluZ1BsYW5lcy5lZGl0KFtcclxuICAgICAgICBwMVswXSxcclxuICAgICAgICBwMVsxXSxcclxuICAgICAgICBwMVsyXSxcclxuICAgICAgICBwMlswXSxcclxuICAgICAgICBwMlsxXSxcclxuICAgICAgICBwMlsyXSxcclxuICAgICAgICBwM1swXSxcclxuICAgICAgICBwM1sxXSxcclxuICAgICAgICBwM1syXSxcclxuICAgICAgICBwNFswXSxcclxuICAgICAgICBwNFsxXSxcclxuICAgICAgICBwNFsyXSxcclxuICAgICAgXSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjdXR0aW5nT3B0aW9ucy5fY3V0dGluZ1BsYW5lcyA9IHRoaXMuX3NlZ21lbnQuaW5zZXJ0Q3V0dGluZ1BsYW5lcyhbXHJcbiAgICAgICAgcDFbMF0sXHJcbiAgICAgICAgcDFbMV0sXHJcbiAgICAgICAgcDFbMl0sXHJcbiAgICAgICAgcDJbMF0sXHJcbiAgICAgICAgcDJbMV0sXHJcbiAgICAgICAgcDJbMl0sXHJcbiAgICAgICAgcDNbMF0sXHJcbiAgICAgICAgcDNbMV0sXHJcbiAgICAgICAgcDNbMl0sXHJcbiAgICAgICAgcDRbMF0sXHJcbiAgICAgICAgcDRbMV0sXHJcbiAgICAgICAgcDRbMl0sXHJcbiAgICAgIF0pO1xyXG4gICAgICB0aGlzLl9zZWdtZW50LnZpc2liaWxpdHkuc2V0Q3V0dGluZ1BsYW5lKHRydWUpO1xyXG4gICAgICB0aGlzLl9zZWdtZW50LmNvbG9yLnNldEN1dHRpbmdGYWNlKGN1dHRpbmdPcHRpb25zLmNvbG9yKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB1bnNldEN1dHRpbmcoKSB7XHJcbiAgICBsZXQgY3V0dGluZ1BsYW5lcyA9IHRoaXMuX3NlZ21lbnQuZmluZEdlb21ldHJ5KFwiQ3V0dGluZ1BsYW5lc1wiKTtcclxuICAgIGlmIChjdXR0aW5nUGxhbmVzKSB7XHJcbiAgICAgIGN1dHRpbmdQbGFuZXMuZGVsZXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fc2VnbWVudC52aXNpYmlsaXR5LnVuc2V0Q3V0dGluZ1BsYW5lKCk7XHJcbiAgICB0aGlzLnNlZ21lbnQuY29sb3IudW5zZXRDdXR0aW5nRmFjZSgpO1xyXG4gIH1cclxuXHJcbiAgZXF1YWxzKG9iajogU2VnbWVudE9iamVjdCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMubm9kZUtleSA9PSBvYmoubm9kZUtleSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgc3VidHJhY3Rpb24oXHJcbiAgICBhcnI6IFNlZ21lbnRPYmplY3RbXSxcclxuICAgIGFycjE6IFNlZ21lbnRPYmplY3RbXVxyXG4gICk6IFNlZ21lbnRPYmplY3RbXSB7XHJcbiAgICBsZXQgc3VidHJhY3Rpb24gPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBleGlzdCA9IGZhbHNlO1xyXG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGFycjEubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICBpZiAoYXJyW2ldLmVxdWFscyhhcnIxW2pdKSkge1xyXG4gICAgICAgICAgZXhpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoIWV4aXN0KSB7XHJcbiAgICAgICAgc3VidHJhY3Rpb24ucHVzaChhcnJbaV0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHN1YnRyYWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2VnbWVudE9iamVjdCDovazmiJAgVHJlZU5vZGVPYmplY3RcclxuICAgKiBAcGFyYW0gdmlld2VyXHJcbiAgICogQHBhcmFtIHNlZ21lbnRPYmplY3RzXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBwdWJsaWMgc3RhdGljIGNvbnZlcnRUb1RyZWVOb2RlT2JqZWN0cyhcclxuICAgIHZpZXdlcixcclxuICAgIHNlZ21lbnRPYmplY3RzOiBTZWdtZW50T2JqZWN0W11cclxuICApOiBUcmVlTm9kZU9iamVjdFtdIHtcclxuICAgIGxldCB0cmVlTm9kZU9iamVjdHMgPSBbXTtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2VnbWVudE9iamVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IHZhbHVlID0gdmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLmdldFRyZWVOb2RlT2JqZWN0QnlOb2RlS2V5KFxyXG4gICAgICAgIHNlZ21lbnRPYmplY3RzW2ldLm5vZGVLZXlcclxuICAgICAgKTtcclxuICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgdHJlZU5vZGVPYmplY3RzLnB1c2godmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJlZU5vZGVPYmplY3RzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5p6E5Lu25aSN5Yi2XHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBwdWJsaWMgY29weSgpOiBTZWdtZW50T2JqZWN0IHtcclxuICAgIHJldHVybiB0aGlzLnZpZXdlci50ZW1wb3JhcnlPYmplY3RNYW5hZ2VyLmNvcHkodGhpcyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmnoTku7blubPnp7tcclxuICAgKiBAcGFyYW0geFxyXG4gICAqIEBwYXJhbSB5XHJcbiAgICogQHBhcmFtIHpcclxuICAgKi9cclxuICB0cmFuc2xhdGUoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcikge1xyXG4gICAgdGhpcy5tYXRyaXhMaXN0LnB1c2godGhpcy5zZWdtZW50Lm1vZGVsbGluZ01hdHJpeC5tYXRyaXgpO1xyXG4gICAgLy8gY29uc29sZS5sb2coXHJcbiAgICAvLyAgIFwidGhpcy5zZWdtZW50Lm1vZGVsbGluZ01hdHJpeC5tYXRyaXhcIixcclxuICAgIC8vICAgdGhpcy5zZWdtZW50Lm1vZGVsbGluZ01hdHJpeC5tYXRyaXhcclxuICAgIC8vICk7XHJcbiAgICBsZXQgbWF0cml4ID0gTWF0cml4NC5pZGVudGl0eSgpO1xyXG4gICAgTWF0cml4NC50cmFuc2xhdGUobWF0cml4LCB4LCB5LCB6KTtcclxuICAgIHRoaXMuc2VnbWVudC5tb2RlbGxpbmdNYXRyaXguYXBwZW5kKG1hdHJpeCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmnoTku7bmlL7nvKlcclxuICAgKiBAcGFyYW0geFxyXG4gICAqIEBwYXJhbSB5XHJcbiAgICogQHBhcmFtIHpcclxuICAgKiBAcGFyYW0gb3JpZ2luIOaUvue8qeWOn+eCue+8jOm7mOiupOaYr+WMheWbtOebkuS4reW/g1xyXG4gICAqL1xyXG4gIHNjYWxlKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIsIG9yaWdpbj86IG51bWJlcltdKSB7XHJcbiAgICB0aGlzLm1hdHJpeExpc3QucHVzaCh0aGlzLnNlZ21lbnQubW9kZWxsaW5nTWF0cml4Lm1hdHJpeCk7XHJcblxyXG4gICAgbGV0IGNlbnRlcjogbnVtYmVyW107XHJcbiAgICBpZiAob3JpZ2luKSB7XHJcbiAgICAgIGNlbnRlciA9IG9yaWdpbjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGxldCBiYiA9IHRoaXMuc2VnbWVudC5ib3VuZGluZ2JveDtcclxuICAgICAgY2VudGVyID0gWyhiYlswXSArIGJiWzNdKSAvIDIsIChiYlsxXSArIGJiWzRdKSAvIDIsIChiYlsyXSArIGJiWzVdKSAvIDJdO1xyXG4gICAgfVxyXG4gICAgbGV0IG1hdHJpeCA9IE1hdHJpeDQuaWRlbnRpdHkoKTtcclxuICAgIE1hdHJpeDQudHJhbnNsYXRlKG1hdHJpeCwgLWNlbnRlclswXSwgLWNlbnRlclsxXSwgLWNlbnRlclsyXSk7XHJcbiAgICAvLyB0aGlzLnNlZ21lbnQubW9kZWxsaW5nTWF0cml4LmFwcGVuZChtYXRyaXgpO1xyXG5cclxuICAgIE1hdHJpeDQuc2NhbGUobWF0cml4LCB4LCB5LCB6KTtcclxuICAgIHRoaXMuc2VnbWVudC5tb2RlbGxpbmdNYXRyaXguYXBwZW5kKG1hdHJpeCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmnoTku7bml4vovaxcclxuICAgKiBAcGFyYW0gb3JpZ2luIOaXi+i9rOWOn+eCuVxyXG4gICAqIEBwYXJhbSBheGlzIOaXi+i9rOi9tFxyXG4gICAqIEBwYXJhbSBhbHBoYSDlvKfluqZcclxuICAgKi9cclxuICByb3RhdGUob3JpZ2luOiBudW1iZXJbXSwgYXhpczogbnVtYmVyW10sIGFscGhhOiBudW1iZXIpIHtcclxuICAgIHRoaXMubWF0cml4TGlzdC5wdXNoKHRoaXMuc2VnbWVudC5tb2RlbGxpbmdNYXRyaXgubWF0cml4KTtcclxuXHJcbiAgICBsZXQgbWF0cml4ID0gTWF0cml4NC5yb3RhdGVCeUF4aXMoXHJcbiAgICAgIG5ldyBGbG9hdDMyQXJyYXkob3JpZ2luKSxcclxuICAgICAgbmV3IEZsb2F0MzJBcnJheShheGlzKSxcclxuICAgICAgYWxwaGFcclxuICAgICk7XHJcbiAgICB0aGlzLnNlZ21lbnQubW9kZWxsaW5nTWF0cml4LmFwcGVuZChtYXRyaXgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5p6E5Lu25peL6L2sXHJcbiAgICogQHBhcmFtIGF4aXMg5peL6L2s6L20XHJcbiAgICogQHBhcmFtIGFscGhhIOW8p+W6plxyXG4gICAqL1xyXG4gIHJvdGF0ZUJ5QXhpcyhvcmlnaW46IG51bWJlcltdLCBheGlzOiBudW1iZXJbXSwgYWxwaGE6IG51bWJlcikge1xyXG4gICAgdGhpcy5tYXRyaXhMaXN0LnB1c2godGhpcy5zZWdtZW50Lm1vZGVsbGluZ01hdHJpeC5tYXRyaXgpO1xyXG5cclxuICAgIGxldCBtYXRyaXggPSBNYXRyaXg0LnJvdGF0ZUJ5QXhpcyhcclxuICAgICAgbmV3IEZsb2F0MzJBcnJheShvcmlnaW4pLFxyXG4gICAgICBuZXcgRmxvYXQzMkFycmF5KGF4aXMpLFxyXG4gICAgICBhbHBoYVxyXG4gICAgKTtcclxuICAgIHRoaXMuc2VnbWVudC5tb2RlbGxpbmdNYXRyaXguYXBwZW5kKG1hdHJpeCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDlj5bmtojmnoTku7blj5jmjaJcclxuICAgKi9cclxuICB1bnNldE1hdHJpeCgpIHtcclxuICAgIGlmICh0aGlzLm1hdHJpeExpc3QubGVuZ3RoID4gMCkge1xyXG4gICAgICB0aGlzLnNlZ21lbnQubW9kZWxsaW5nTWF0cml4LnNldCh0aGlzLm1hdHJpeExpc3RbMF0pO1xyXG4gICAgICBjb25zb2xlLmxvZyhcInRoaXMuc2VnbWVudC5tb2RlbGxpbmdNYXRyaXgubWF0cml4XCIsIHRoaXMubWF0cml4TGlzdCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDov5Tlm57kuIrkuIDkuKrmnoTku7blj5jmjaJcclxuICAgKi9cclxuICB1bmRvTWF0cml4KCkge1xyXG4gICAgaWYgKHRoaXMubWF0cml4TGlzdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuc2VnbWVudC5tb2RlbGxpbmdNYXRyaXguc2V0KFxyXG4gICAgICAgIHRoaXMubWF0cml4TGlzdFt0aGlzLm1hdHJpeExpc3QubGVuZ3RoIC0gMV1cclxuICAgICAgKTtcclxuICAgICAgdGhpcy5tYXRyaXhMaXN0LnNwbGljZSh0aGlzLm1hdHJpeExpc3QubGVuZ3RoIC0gMSwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./packages/bimAir/src/gsDevFx/objects/segmentObject.ts\n");
|
|
3798
3798
|
|
|
3799
3799
|
/***/ }),
|
|
3800
3800
|
|
|
@@ -7402,7 +7402,7 @@ eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;__webpack_
|
|
|
7402
7402
|
\*******************************************************************************************************************************************************************************************************************************************************************************************************************************/
|
|
7403
7403
|
/***/ (function(module, exports, __webpack_require__) {
|
|
7404
7404
|
|
|
7405
|
-
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;__webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n__webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ \"./node_modules/core-js/modules/web.dom-collections.for-each.js\");\n__webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n__webpack_require__(/*! core-js/modules/es.function.name.js */ \"./node_modules/core-js/modules/es.function.name.js\");\n__webpack_require__(/*! core-js/modules/es.array.filter.js */ \"./node_modules/core-js/modules/es.array.filter.js\");\n__webpack_require__(/*! core-js/modules/es.array.map.js */ \"./node_modules/core-js/modules/es.array.map.js\");\n__webpack_require__(/*! core-js/modules/es.array.splice.js */ \"./node_modules/core-js/modules/es.array.splice.js\");\n__webpack_require__(/*! core-js/modules/es.array.concat.js */ \"./node_modules/core-js/modules/es.array.concat.js\");\n__webpack_require__(/*! core-js/modules/es.array.find-index.js */ \"./node_modules/core-js/modules/es.array.find-index.js\");\n__webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n__webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ \"./node_modules/core-js/modules/web.dom-collections.for-each.js\");\n__webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n__webpack_require__(/*! core-js/modules/es.function.name.js */ \"./node_modules/core-js/modules/es.function.name.js\");\n__webpack_require__(/*! core-js/modules/es.array.filter.js */ \"./node_modules/core-js/modules/es.array.filter.js\");\n__webpack_require__(/*! core-js/modules/es.array.map.js */ \"./node_modules/core-js/modules/es.array.map.js\");\n__webpack_require__(/*! core-js/modules/es.array.splice.js */ \"./node_modules/core-js/modules/es.array.splice.js\");\n__webpack_require__(/*! core-js/modules/es.array.concat.js */ \"./node_modules/core-js/modules/es.array.concat.js\");\n__webpack_require__(/*! core-js/modules/es.array.find-index.js */ \"./node_modules/core-js/modules/es.array.find-index.js\");\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/vue-property-decorator.js\"), __webpack_require__(/*! gs-longan */ \"./packages/longan/src/index.ts\"), __webpack_require__(/*! ../../../../gsDevFx/api */ \"./packages/bimAir/src/gsDevFx/api/index.ts\"), __webpack_require__(/*! ../../../../components/gs/gsDivider/gs-divider.vue */ \"./packages/bimAir/src/components/gs/gsDivider/gs-divider.vue\"), __webpack_require__(/*! ../../../../components/el/tree */ \"./packages/bimAir/src/components/el/tree/index.js\"), __webpack_require__(/*! element-ui */ \"./node_modules/element-ui/lib/element-ui.common.js\"), __webpack_require__(/*! ../../../module/createMenu */ \"./packages/bimAir/src/viewerWrapper/module/createMenu.tsx\"), __webpack_require__(/*! ../../../../store/structureTree */ \"./packages/bimAir/src/store/structureTree.ts\"), __webpack_require__(/*! gs-longan/longan/idb */ \"./packages/longan/src/longan/idb.ts\"), __webpack_require__(/*! ../structureTreeBus */ \"./packages/bimAir/src/viewerWrapper/panels/structureTree/structureTreeBus.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, vue_property_decorator_1, Longan, LonganApi, gs_divider_vue_1, tree_1, element_ui_1, createMenu_1, structureTree_1, idb_1, structureTreeBus_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", ({\n value: true\n }));\n Longan = tslib_1.__importStar(Longan);\n LonganApi = tslib_1.__importStar(LonganApi);\n gs_divider_vue_1 = tslib_1.__importDefault(gs_divider_vue_1);\n tree_1 = tslib_1.__importDefault(tree_1);\n structureTree_1 = tslib_1.__importDefault(structureTree_1);\n idb_1 = tslib_1.__importDefault(idb_1);\n structureTreeBus_1 = tslib_1.__importDefault(structureTreeBus_1);\n vue_property_decorator_1.Vue.use(tree_1.default);\n vue_property_decorator_1.Vue.use(element_ui_1.Button);\n vue_property_decorator_1.Vue.use(element_ui_1.Input);\n vue_property_decorator_1.Vue.use(element_ui_1.Form);\n vue_property_decorator_1.Vue.use(element_ui_1.FormItem);\n var InterfaceStructureTree = function (_super) {\n tslib_1.__extends(InterfaceStructureTree, _super);\n function InterfaceStructureTree() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.searchValue = \"\";\n _this.treeProps = {\n label: \"name\",\n children: \"childNodes\",\n isLeaf: \"isLeaf\",\n expaned: \"expaned\"\n };\n _this.treeCheckedNos = [];\n _this.treeExpandAll = true;\n _this.draggingNode = null;\n _this.treeModelStructure = null;\n _this.selectedKey = -1;\n _this.selectedPath = \"\";\n _this.checkKeys = [];\n _this.invisibleKeys = [];\n _this.expandedKeys = [];\n _this.currentTreeKey = null;\n _this.isEditingKey = null;\n _this.nameValue = \"\";\n _this.modelObjectsClone = [];\n _this.parentSegmentKey = null;\n _this.treeNodeHoverKey = null;\n _this.isTreeEditing = false;\n _this.operatorList = [];\n _this.isolationIds = [];\n _this.levelOneData = [];\n _this.loopFlag = false;\n _this.selectedGslNode = null;\n _this.nodePath = [];\n _this.chooseNode = null;\n _this.rootNode = null;\n _this.lastNoCheckedRootNodes = [];\n _this.count = 0;\n _this.end = false;\n _this.isolationKeys = [];\n _this.isTreeLocate = localStorage.getItem(\"isTreeLocate\") !== \"false\";\n _this.checkStrictly = false;\n _this.draggingNodeChecked = true;\n _this.buttonList = [{\n name: \"编辑\",\n children: [{\n name: \"添加\",\n clickFun: function clickFun() {\n _this.addRenderObjectClick();\n }\n }, {\n name: \"重命名\",\n clickFun: function clickFun() {\n _this.renameRenderObjectClick();\n }\n }, {\n name: \"删除\",\n clickFun: function clickFun() {\n _this.deleteRenderObjectClick();\n }\n }]\n }, {\n name: \"隐藏\",\n children: [{\n name: \"隐藏选中对象\",\n clickFun: function clickFun() {\n _this.hideObject();\n }\n }, {\n name: \"隐藏其他对象\",\n clickFun: function clickFun() {\n _this.reHideObject();\n }\n }, {\n name: \"显示全部对象\",\n clickFun: function clickFun() {\n _this.clearHideObject();\n }\n }]\n }, {\n name: \"隔离\",\n children: [{\n name: \"隔离选中对象\",\n clickFun: function clickFun() {\n _this.isolateObject();\n }\n }, {\n name: \"隔离其他对象\",\n clickFun: function clickFun() {\n _this.isolateOtherObjects();\n }\n }, {\n name: \"取消隔离\",\n clickFun: function clickFun() {\n _this.clearIsolateObjects();\n }\n }]\n }, {\n name: \"展开\",\n children: [{\n name: \"展开一层\",\n clickFun: function clickFun() {\n _this.showLevel(1);\n }\n }, {\n name: \"展开二层\",\n clickFun: function clickFun() {\n _this.showLevel(2);\n }\n }, {\n name: \"展开三层\",\n clickFun: function clickFun() {\n _this.showLevel(3);\n }\n }, {\n name: \"全部收起\",\n clickFun: function clickFun() {\n _this.setAllExpand(false);\n }\n }]\n }];\n _this.structureTree = structureTree_1.default;\n _this.heighLight = function () {\n var segObj = _this.viewer.selectionManager.segmentObject;\n console.log(\"选中的对象:\", segObj, segObj.size);\n if (segObj) {\n var treeNodeObject = _this.viewer.structureTreeManager.treeNodes[segObj.nodeKey];\n var pathKeys = new Longan.List();\n if (treeNodeObject) {\n _this.getPathKeys(treeNodeObject, pathKeys);\n }\n var tree_2 = _this.$refs.structureTree;\n pathKeys.items.reverse().forEach(function (nodeKey) {\n setTimeout(function () {\n var node = tree_2.getNode(nodeKey);\n if (node) {\n node.expand();\n }\n }, 0);\n });\n setTimeout(function () {\n _this.locateCurrentNode(segObj.nodeKey);\n tree_2.setCurrentKey(segObj.nodeKey);\n }, 10);\n }\n };\n return _this;\n }\n Object.defineProperty(InterfaceStructureTree.prototype, \"viewer\", {\n get: function get() {\n return this.getViewer();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(InterfaceStructureTree.prototype, \"tabs\", {\n get: function get() {\n var tabs = this.viewer.options.components.property.tabs;\n return tabs;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(InterfaceStructureTree.prototype, \"viewerType\", {\n get: function get() {\n return this.viewer.options.viewerType;\n },\n enumerable: false,\n configurable: true\n });\n InterfaceStructureTree.prototype.loadNode = function (node, resolve) {\n var _this = this;\n var _a, _b;\n if (!this.viewer) {\n resolve([]);\n }\n this.checkStrictly = true;\n if ((_b = (_a = this.viewer) === null || _a === void 0 ? void 0 : _a.structureTreeManager) === null || _b === void 0 ? void 0 : _b.rootNode) {\n this.$nextTick(function () {\n var _a;\n _this.currentNode = node;\n _this.currentNodeResolve = resolve;\n if (node.level === 0) {\n var result = void 0;\n _this.level0Node = node;\n _this.level0NodeResolve = resolve;\n if (_this.viewer.renderObject && _this.viewer.renderObject.showTreeNode) {\n result = _this.getNodes([_this.viewer.structureTreeManager.rootNode]);\n if (_this.invisibleKeys.indexOf(result[0].nodeKey) === -1) {\n _this.checkKeys.push(result[0].nodeKey);\n }\n } else {\n result = _this.getNodes(_this.viewer.structureTreeManager.rootNode.childNodes);\n result.forEach(function (item) {\n if (_this.invisibleKeys.indexOf(item.nodeKey) === -1) {\n _this.checkKeys.push(item.nodeKey);\n }\n });\n }\n resolve(result);\n } else {\n var treeNode = (_a = _this.viewer.structureTreeManager) === null || _a === void 0 ? void 0 : _a.treeNodes[node.data.nodeKey];\n if (treeNode) {\n var childNodes = treeNode.childNodes;\n var result = _this.getNodes(childNodes);\n result.forEach(function (item) {\n if (_this.invisibleKeys.indexOf(item.nodeKey) === -1) {\n _this.checkKeys.push(item.nodeKey);\n }\n });\n return resolve(result);\n } else {\n return resolve([]);\n }\n }\n });\n setTimeout(function () {\n _this.checkStrictly = false;\n }, 20);\n }\n };\n InterfaceStructureTree.prototype.getNodes = function (treeNodeObjects) {\n var _this = this;\n var result = [];\n treeNodeObjects.forEach(function (item) {\n result.push({\n name: item.name,\n nodeKey: item.nodeKey,\n isShow: item.isShow,\n isLeaf: item.childNodes.length === 0,\n expaned: _this.expandedKeys.indexOf(item.nodeKey) !== -1\n });\n });\n return result;\n };\n InterfaceStructureTree.prototype.isTreeLocateChange = function (val) {\n localStorage.setItem(\"isTreeLocate\", val);\n this.isTreeLocate = val;\n };\n InterfaceStructureTree.prototype.locateCurrentNode = function (nodeKey) {\n if (!this.isTreeLocate) {\n return;\n }\n this.count = 0;\n this.end = false;\n var tree = document.getElementById(\"structureTree\");\n var node = this.$refs.structureTree.store.root;\n this.countExpandNode(node, nodeKey);\n var count = this.count;\n var parentElement = tree.parentElement;\n parentElement.scrollTo(0, count * 26 - 60);\n };\n InterfaceStructureTree.prototype.countExpandNode = function (node, nodeKey) {\n if (!this.end) {\n if (node.expanded || this.count === 0 || node.data.nodeKey === nodeKey) {\n this.count += 1;\n if (node.data && node.data.nodeKey === nodeKey) {\n this.end = true;\n return this.count;\n }\n if (node.childNodes) {\n for (var i = 0, len = node.childNodes.length; i < len; i++) {\n this.countExpandNode(node.childNodes[i], nodeKey);\n }\n }\n } else {\n this.count += 1;\n }\n }\n };\n InterfaceStructureTree.prototype.findRoVisible = function (insObj, checkedNos) {\n if (insObj.renderObject.visible) {\n checkedNos.push(insObj.no);\n }\n for (var i = 0; i < insObj.childObjects.length; i++) {\n this.findRoVisible(insObj.childObjects[i], checkedNos);\n }\n };\n InterfaceStructureTree.prototype.getModelObjects = function () {\n var viewer = this.viewer;\n if (viewer && viewer.instanceObject) {\n var insObj = viewer.instanceObject;\n var treeCheckedNos = [];\n this.findRoVisible(insObj, treeCheckedNos);\n this.treeCheckedNos = treeCheckedNos;\n var rootNode = this.componentData && this.componentData.structureTree ? this.componentData.structureTree[0] : this.viewer.structureTreeManager.rootNode;\n if (this.viewer.renderObject.showTreeNode) {\n this.currentTreeNodeData = rootNode;\n } else {\n this.currentTreeNodeData = rootNode.childNodes[0];\n }\n this.showLevel(1);\n } else {\n this.treeCheckedNos = [];\n }\n };\n InterfaceStructureTree.prototype.searchValueChange = function (val) {\n if (val) {\n var treeNodes = this.viewer.structureTreeManager.treeNodes;\n var tree_3 = this.$refs.structureTree;\n for (var key in treeNodes) {\n if (treeNodes[key].name.indexOf(this.searchValue) !== -1) {\n var treeNodeObject = treeNodes[key];\n var pathKeys = new Longan.List();\n if (treeNodeObject) {\n this.getPathKeys(treeNodeObject, pathKeys);\n }\n pathKeys.items.reverse().forEach(function (nodeKey) {\n var node = tree_3.getNode(nodeKey);\n if (node) {\n node.expand();\n }\n });\n }\n }\n }\n this.$refs.structureTree.filter(this.searchValue);\n };\n InterfaceStructureTree.prototype.filterNode = function (value, data) {\n if (!value) {\n return true;\n }\n return data.name.indexOf(value) !== -1;\n };\n InterfaceStructureTree.prototype.treeCheck = function (data, _a) {\n var checkedNodes = _a.checkedNodes,\n checkedKeys = _a.checkedKeys,\n halfCheckedNodes = _a.halfCheckedNodes,\n halfCheckedKeys = _a.halfCheckedKeys;\n var treeNodeObject = this.viewer.structureTreeManager.treeNodes[data.nodeKey];\n if (checkedNodes.map(function (item) {\n return item.nodeKey;\n }).indexOf(treeNodeObject.nodeKey) === -1) {\n this.viewer.invisibleManager.invisible([treeNodeObject]);\n this.invisibleKeys.push(treeNodeObject.nodeKey);\n console.log(\"隐藏节点keys\", this.invisibleKeys);\n } else {\n this.viewer.invisibleManager.clearInvisible([treeNodeObject]);\n var index = this.invisibleKeys.indexOf(treeNodeObject.nodeKey);\n if (index !== -1) {\n this.invisibleKeys.splice(index, 1);\n }\n }\n this.viewer.updateDisplay();\n if (this.viewer.options.components.structureTree.defaultTab.checkFun) {\n this.viewer.options.components.structureTree.defaultTab.checkFun(treeNodeObject, {\n checkedNodes: checkedNodes,\n checkedKeys: checkedKeys,\n halfCheckedNodes: halfCheckedNodes,\n halfCheckedKeys: halfCheckedKeys\n });\n }\n };\n InterfaceStructureTree.prototype.findInvisibleRootNodes = function (rootNode, halfCheckedNodes, invisibleRootNodes) {\n if (rootNode.checked === false) {\n if (halfCheckedNodes.indexOf(rootNode.data) === -1) {\n invisibleRootNodes.push(rootNode.data);\n } else {\n var childNodes = rootNode.childNodes;\n for (var i = 0; i < childNodes.length; i++) {\n this.findInvisibleRootNodes(childNodes[i], halfCheckedNodes, invisibleRootNodes);\n }\n }\n }\n };\n InterfaceStructureTree.prototype.treeNodeClick = function (data, node) {\n var treeNode = this.viewer.structureTreeManager.treeNodes[data.nodeKey];\n console.log(\"treeNodeClick\", node, treeNode);\n this.currentTreeNodeData = treeNode;\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.selectionManager.selectAndHighlight([treeNode]);\n this.viewer.locateObject(treeNode);\n this.viewer.panelManager.propertyPanel.getProperty(treeNode.segmentObject);\n if (this.viewer.options.components.structureTree.clickFun) {\n this.viewer.options.components.structureTree.clickFun(treeNode);\n }\n if (this.viewer.options.components.structureTree.defaultTab.clickFun) {\n this.viewer.options.components.structureTree.defaultTab.clickFun(treeNode);\n }\n this.viewer.updateDisplay();\n };\n InterfaceStructureTree.prototype.createTree = function (newTree, node) {\n var newNode = null;\n if (node.data) {\n newNode = {\n key: node.data.key,\n name: node.data.name,\n items: []\n };\n if (newTree.items) {\n newTree.items.push(newNode);\n } else {\n newTree.push(newNode);\n }\n }\n if (!newNode) {\n newNode = newTree;\n }\n for (var i = 0; i < node.childNodes.length; i++) {\n this.createTree(newNode, node.childNodes[i]);\n }\n };\n InterfaceStructureTree.prototype.getProperties = function (key) {\n var segment = new Longan.Segment(key);\n var jsonString = segment.property.showString(\"Properties\");\n var showParentProperty = segment.property.showBoolean(\"showParentProperties\");\n if (showParentProperty) {\n var key_1 = segment.owner.key;\n jsonString = this.getParentProperties(key_1);\n }\n return JSON.parse(jsonString);\n };\n InterfaceStructureTree.prototype.getParentProperties = function (key) {\n var segment = new Longan.Segment(key);\n var properties = segment.property.showString(\"Properties\");\n if (properties) {\n return properties;\n } else {\n return this.getParentProperties(segment.owner.key);\n }\n };\n InterfaceStructureTree.prototype.treeNodeDragStart = function (node, ev) {\n this.draggingNode = node;\n this.currentTreeNode = node;\n this.currentTreeNodeData = this.viewer.structureTreeManager.treeNodes[node.data.nodeKey];\n this.draggingNodeChecked = node.checked;\n console.log(\"this.draggingNodeChecked \", this.draggingNodeChecked);\n };\n InterfaceStructureTree.prototype.treeNodeDragEnter = function (draggingNode, overNode, ev) {\n console.log(\"this.treeNodeDragEnterTimer\");\n };\n InterfaceStructureTree.prototype.treeNodeDragEnd = function (draggingNode, dropNode, dropType) {};\n InterfaceStructureTree.prototype.treeNodeDrop = function (draggingNode, dropNode, dropType, ev) {\n var _this = this;\n console.log(\"dropNode.expend\", dropNode);\n this.$confirm(\"\\u662F\\u5426\\u5C06\\u8282\\u70B9\".concat(draggingNode.label, \"\\u79FB\\u52A8\\u5230\").concat(dropNode.label).concat(dropType == \"before\" ? \"之前\" : dropType == \"after\" ? \"之后\" : \"下\", \"?\"), \"提示\", {\n confirmButtonText: \"确定\",\n cancelButtonText: \"取消\",\n type: \"warning\"\n }).then(function () {\n _this.dropConfirm(draggingNode, dropNode, dropType).then(function () {\n _this.$message({\n type: \"success\",\n message: \"移动成功!\"\n });\n if (dropNode === \"inner\") {\n structureTreeBus_1.default.$emit(\"updateTree\", dropNode.key);\n } else {\n structureTreeBus_1.default.$emit(\"updateTree\", dropNode.parent.key);\n }\n });\n }).catch(function () {\n _this.$message({\n type: \"info\",\n message: \"取消移动\"\n });\n structureTreeBus_1.default.$emit(\"updateTree\", dropNode.parent.key);\n });\n };\n InterfaceStructureTree.prototype.dropConfirm = function (draggingNode, dropNode, dropType) {\n var _this = this;\n function getIndex(parent, child) {\n for (var i = 0, len = parent.childNodes.length; i < len; i++) {\n var item = parent.childNodes[i];\n if (item.key === child.key) {\n return i;\n }\n }\n return -1;\n }\n var index = -1;\n var dropSegment;\n var draggingTreeNode = this.viewer.structureTreeManager.treeNodes[draggingNode.data.nodeKey];\n var dropTreeNode;\n var targetSegIndex;\n switch (dropType) {\n case \"inner\":\n dropTreeNode = this.viewer.structureTreeManager.treeNodes[dropNode.key];\n dropSegment = dropTreeNode.segment;\n targetSegIndex = dropTreeNode.childNodes.length;\n this.expandedKeys.push(dropNode.data.key);\n break;\n case \"before\":\n index = getIndex(dropNode.parent, dropNode);\n dropTreeNode = this.viewer.structureTreeManager.treeNodes[dropNode.parent.key];\n dropSegment = this.viewer.structureTreeManager.treeNodes[dropNode.key].segment.owner;\n targetSegIndex = index - 1;\n break;\n case \"after\":\n index = getIndex(dropNode.parent, dropNode);\n dropSegment = this.viewer.structureTreeManager.treeNodes[dropNode.key].segment.owner;\n dropTreeNode = this.viewer.structureTreeManager.treeNodes[dropNode.parent.key];\n targetSegIndex = index + 1;\n break;\n }\n var draggingNodeChecked = this.draggingNodeChecked;\n return draggingTreeNode.moveToIndexWithRequestApi(dropTreeNode, dropSegment, targetSegIndex).then(function () {\n console.log(\"this.$refs.structureTree \", _this.$refs.structureTree, draggingNode, draggingNode.key, draggingNodeChecked);\n _this.$refs.structureTree.setChecked(draggingNode.key, draggingNodeChecked, true);\n return _this.updateIndexedDB();\n });\n };\n InterfaceStructureTree.prototype.addRenderObjectClick = function () {\n var _this = this;\n var data = this.currentTreeNodeData;\n if (data.childNodes) {\n for (var i = 0; i < data.childNodes.length; i++) {\n if (data.childNodes[i].nodeKey === \"-1\") {\n return;\n }\n }\n }\n this.parentSegmentKey = data.key;\n this.nameValue = \"\";\n var parent = this.currentTreeNode;\n parent.expand();\n this.$refs.structureTree.append({\n name: \" \",\n nodeKey: \"-1\",\n isShow: true\n }, parent);\n this.isEditingKey = \"-1\";\n setTimeout(function () {\n _this.locateCurrentNode(\"-1\");\n var input = _this.$refs.editingTreeNodeInput;\n if (input) {\n input.focus();\n }\n }, 10);\n };\n InterfaceStructureTree.prototype.renameRenderObjectClick = function () {\n var _this = this;\n var data = this.currentTreeNodeData;\n this.isEditingKey = data.nodeKey;\n this.nameValue = data.name;\n setTimeout(function () {\n _this.$refs.editingTreeNodeInput.focus();\n }, 10);\n };\n InterfaceStructureTree.prototype.deleteRenderObjectClick = function () {\n var _this = this;\n var data = this.currentTreeNodeData;\n var node = this.currentTreeNode;\n element_ui_1.MessageBox.confirm(\"\\u786E\\u5B9A\\u5220\\u9664\".concat(data.name, \"\\u8282\\u70B9\\uFF1F\"), \"提示\", {\n confirmButtonText: \"确定\",\n cancelButtonText: \"取消\",\n type: \"warning\"\n }).then(function () {\n _this.updateIndexedDB();\n _this.currentTreeNodeData.deleteWithRequestApi(true).then(function () {\n var children = node.parent.childNodes;\n var index = children.findIndex(function (d) {\n return d.data.nodeKey === node.data.nodeKey;\n });\n if (index >= 0) {\n children.splice(index, 1);\n } else {\n _this.$message.warning(\"节点删除出错\");\n }\n });\n });\n };\n InterfaceStructureTree.prototype.editRenderObjectConfirm = function (node, data) {\n var _this = this;\n var treeNode = this.viewer.structureTreeManager.treeNodes[data.nodeKey];\n if (data.nodeKey === \"-1\") {\n var segment = new LonganApi.Segment(this.parentSegmentKey);\n if (!this.nameValue) {\n element_ui_1.Message.warning(\"节点名不能为空\");\n return;\n }\n if (segment.subsegmentExists(this.nameValue)) {\n element_ui_1.Message.warning(\"此节点已存在,请重命名\");\n } else {\n var parent_1 = node.parent;\n var children = parent_1.childNodes;\n var index = children.findIndex(function (d) {\n return d.nodeKey === data.nodeKey;\n });\n children.splice(index, 1);\n var parentTreeNode = this.viewer.structureTreeManager.treeNodes[parent_1.data.nodeKey];\n console.log(\"parentTreeNode\", parentTreeNode);\n if (parentTreeNode) {\n parentTreeNode.addWithRequestApi(this.nameValue, true).then(function (treeNodeObject) {\n data.nodeKey = treeNodeObject.nodeKey;\n data.name = treeNodeObject.name;\n _this.isEditingKey = null;\n _this.nameValue = \"\";\n _this.$refs.structureTree.append({\n name: treeNodeObject.name,\n nodeKey: treeNodeObject.nodeKey,\n isShow: true\n }, parent_1);\n _this.$refs.structureTree.setChecked(data.nodeKey, true, true);\n _this.$refs.structureTree.setChecked(treeNodeObject.nodeKey, true, true);\n _this.updateIndexedDB();\n });\n }\n }\n } else {\n if (this.nameValue) {\n this.currentTreeNodeData.renameWithRequestApi(this.nameValue).then(function () {\n _this.updateIndexedDB();\n });\n data.name = this.nameValue;\n this.isEditingKey = null;\n this.nameValue = \"\";\n } else {\n element_ui_1.Message.warning(\"名字不能为空\");\n }\n }\n };\n InterfaceStructureTree.prototype.editRenderObjectCancel = function (node, data) {\n if (data.nodeKey === \"-1\") {\n var parent = node.parent;\n var children = parent.childNodes;\n var index = children.findIndex(function (d) {\n return d.nodeKey === data.nodeKey;\n });\n children.splice(index, 1);\n } else {\n this.isEditingKey = null;\n }\n };\n InterfaceStructureTree.prototype.updateIndexedDB = function () {\n var treeNode = this.currentTreeNodeData;\n idb_1.default.getInstance(treeNode.modelId).del(treeNode.modelId + \"?v=\" + treeNode.model.renderObject.version);\n };\n InterfaceStructureTree.prototype.treeNodeMouseOver = function (data) {\n this.treeNodeHoverKey = data.key;\n };\n InterfaceStructureTree.prototype.treeNodeMouseLeave = function (data) {\n this.treeNodeHoverKey = null;\n };\n InterfaceStructureTree.prototype.isBindModelExist = function (modelId) {\n return false;\n };\n InterfaceStructureTree.prototype.treeNodeContextMenuClick = function (e, data, node, nodeElement) {\n var treeNodeObject = this.viewer.structureTreeManager.treeNodes[data.nodeKey];\n console.log(\"treeNodeContextMenuClick\", e);\n this.currentTreeNodeData = treeNodeObject;\n this.currentTreeNode = node;\n (0, createMenu_1.createMenu)(e.pageX, e.pageY, this.buttonList);\n };\n InterfaceStructureTree.prototype.treeNodeExpand = function (data, node, e) {\n console.log(data, node, e);\n this.expandedKeys.push(data.nodeKey);\n };\n InterfaceStructureTree.prototype.treeNodeCollapse = function (data, node, e) {\n var index = this.expandedKeys.indexOf(data.nodeKey);\n if (index !== -1) {\n this.expandedKeys.splice(index, 1);\n }\n };\n InterfaceStructureTree.prototype.showLevel = function (level) {\n var _this = this;\n setTimeout(function () {\n var node = _this.currentTreeNodeData;\n _this.expandLevel(node, level);\n }, 10);\n };\n InterfaceStructureTree.prototype.expandLevel = function (node, level) {\n var _this = this;\n var _a;\n if (node) {\n node.loaded = false;\n var nodeDom = (_a = this.$refs.structureTree) === null || _a === void 0 ? void 0 : _a.getNode(node.nodeKey);\n if (nodeDom) {\n nodeDom.expand();\n }\n }\n setTimeout(function () {\n var currentLevel = level - 1;\n if (currentLevel > 0) {\n for (var i = 0; i < node.childNodes.length; i++) {\n var item = node.childNodes[i];\n if (item.childNodes && item.childNodes.length > 0) {\n _this.expandLevel(item, currentLevel);\n }\n }\n }\n }, 10);\n };\n InterfaceStructureTree.prototype.setAllExpand = function (state) {\n var nodes = this.$refs.structureTree.store.root;\n this.expandNode(nodes, state);\n };\n InterfaceStructureTree.prototype.expandNode = function (node, state) {\n node.expanded = state;\n for (var i = 0, len = node.childNodes.length; i < len; i++) {\n if (node.childNodes[i].childNodes.length > 0) {\n this.expandNode(node.childNodes[i], state);\n }\n }\n };\n InterfaceStructureTree.prototype.hideObject = function () {\n console.log(\"hideObject\");\n this.$refs.structureTree.setChecked(this.currentTreeNodeData, false, true);\n var viewer = this.viewer;\n viewer.invisibleManager.invisible([this.currentTreeNodeData]);\n viewer.updateDisplay();\n };\n InterfaceStructureTree.prototype.reHideObject = function () {\n var _this = this;\n var root = this.$refs.structureTree.root;\n console.log(\"root-------------\", root);\n root.childNodes.forEach(function (item) {\n _this.$refs.structureTree.setChecked(item.data.nodeKey, false, true);\n });\n this.$refs.structureTree.setChecked(this.currentTreeNodeData, true, true);\n var viewer = this.viewer;\n this.viewer.invisibleManager.invisibleInvert([this.currentTreeNodeData]);\n viewer.updateDisplay();\n };\n InterfaceStructureTree.prototype.clearHideObject = function () {\n var _this = this;\n var root = this.$refs.structureTree.root;\n root.childNodes.forEach(function (item) {\n _this.$refs.structureTree.setChecked(item.data.nodeKey, true, true);\n });\n var viewer = this.viewer;\n viewer.invisibleManager.clearAllInvisible();\n viewer.updateDisplay();\n };\n InterfaceStructureTree.prototype.checkChange = function (data) {\n var checkedNodes;\n var checkedKeys = this.$refs.structureTree.getCheckedKeys();\n var halfCheckedNodes = this.$refs.structureTree.getHalfCheckedNodes();\n var halfCheckedKeys;\n this.treeCheck(data, {\n checkedNodes: checkedNodes,\n checkedKeys: checkedKeys,\n halfCheckedNodes: halfCheckedNodes,\n halfCheckedKeys: halfCheckedKeys\n });\n };\n InterfaceStructureTree.prototype.isolateObject = function () {\n this.viewer.isolationManager.isolation([this.currentTreeNodeData.segmentObject]);\n this.viewer.updateDisplay();\n };\n InterfaceStructureTree.prototype.isolateOtherObjects = function () {\n var viewer = this.viewer;\n viewer.isolationManager.isolationInvert([this.currentTreeNodeData]);\n viewer.updateDisplay();\n };\n InterfaceStructureTree.prototype.clearIsolateObjects = function () {\n this.viewer.isolationManager.clearAllIsolation();\n this.viewer.updateDisplay();\n };\n InterfaceStructureTree.prototype.openEditAllRenderObjectClick = function (node, data) {};\n InterfaceStructureTree.prototype.editAllRenderObjectConfirm = function (data) {\n this.isTreeEditing = false;\n this.treeNodeHoverKey = null;\n };\n InterfaceStructureTree.prototype.editAllRenderObjectCancel = function (data) {};\n InterfaceStructureTree.prototype.setData = function () {\n this.$emit(\"setData\", {\n title: \"模型结构树\",\n top: \"20px\",\n left: \"20px\",\n height: \"600px\",\n width: \"300px\"\n });\n };\n InterfaceStructureTree.prototype.findTreeNodePath = function (node, targetKey, nodePath) {\n if (!this.loopFlag) {\n return;\n }\n var childNodes = node.childNodes;\n for (var i = 0; i < childNodes.length; i++) {\n var childNode = childNodes[i];\n var data = childNode.data;\n var deepCloneNodePath = tslib_1.__spreadArray([], tslib_1.__read(nodePath), false);\n deepCloneNodePath.push(childNode);\n if (data.key !== targetKey) {\n this.findTreeNodePath(childNode, targetKey, deepCloneNodePath);\n } else {\n this.nodePath.push(this.rootNode);\n for (var j = 0; j < deepCloneNodePath.length; j++) {\n this.nodePath.push(deepCloneNodePath[j]);\n }\n this.selectedGslNode = childNode;\n this.loopFlag = false;\n return deepCloneNodePath;\n }\n }\n };\n InterfaceStructureTree.prototype.getPathKeys = function (treeNodeObject, pathKeys) {\n if (treeNodeObject.nodeKey) {\n pathKeys.add(treeNodeObject.nodeKey);\n }\n if (treeNodeObject.parent) {\n this.getPathKeys(treeNodeObject.parent, pathKeys);\n }\n };\n InterfaceStructureTree.prototype.updateNode = function (treeNodeObject) {\n var _this = this;\n var pathKeys = new Longan.List();\n if (treeNodeObject) {\n this.getPathKeys(treeNodeObject, pathKeys);\n }\n pathKeys.items.reverse().forEach(function (nodeKey) {\n if (nodeKey === _this.level0Node.key) {\n _this.loadNode(_this.level0Node, _this.level0NodeResolve);\n } else {\n _this.loadNode(_this.currentNode, _this.currentNodeResolve);\n }\n });\n };\n InterfaceStructureTree.prototype.mounted = function () {\n var _this = this;\n this.setData();\n console.time(\"interfaceStructureTree getModelObjects\");\n this.getModelObjects();\n console.timeEnd(\"interfaceStructureTree getModelObjects\");\n structureTreeBus_1.default.$on(\"updateTree\", function (key) {\n var _a;\n console.log(\"structureTreeBus\");\n var tree = _this.$refs.structureTree;\n if (tree) {\n var keys = tree.getCheckedKeys();\n var expandedKeys = tree.getCheckedKeys();\n if (key !== undefined) {\n var treeNode = (_a = _this.viewer.structureTreeManager) === null || _a === void 0 ? void 0 : _a.treeNodes[key];\n _this.updateNode(treeNode);\n } else {\n _this.level0Node.childNodes = [];\n _this.checkKeys = [];\n _this.loadNode(_this.level0Node, _this.level0NodeResolve);\n _this.showLevel(1);\n }\n tree.setCheckedKeys(expandedKeys);\n }\n });\n this.$nextTick(function () {\n _this.viewer.onLButtonUp.add(_this.heighLight);\n });\n };\n InterfaceStructureTree.prototype.beforeDestroy = function () {\n if (this.viewer) {\n this.viewer.onLButtonUp.remove(this.heighLight);\n }\n };\n tslib_1.__decorate([(0, vue_property_decorator_1.Prop)()], InterfaceStructureTree.prototype, \"componentData\", void 0);\n tslib_1.__decorate([(0, vue_property_decorator_1.Inject)()], InterfaceStructureTree.prototype, \"getViewer\", void 0);\n InterfaceStructureTree = tslib_1.__decorate([(0, vue_property_decorator_1.Component)({\n components: {\n GsDivider: gs_divider_vue_1.default\n }\n })], InterfaceStructureTree);\n return InterfaceStructureTree;\n }(vue_property_decorator_1.Vue);\n exports[\"default\"] = InterfaceStructureTree;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Ni51c2VbMF0hLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuL25vZGVfbW9kdWxlcy9AdnVlL2NsaS1wbHVnaW4tdHlwZXNjcmlwdC9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTg4LnVzZVsxXSEuL3BhY2thZ2VzL2JpbUFpci9zcmMvdmlld2VyV3JhcHBlci9wYW5lbHMvc3RydWN0dXJlVHJlZS9wYW5lcy9zdHJ1Y3R1cmVUcmVlLnRzeD92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFRQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFTQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBdzlCQTtBQXQ5QkE7QUFBQTtBQUNBO0FBQ0E7Ozs7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBRUE7QUFBQTtBQUNBO0FBQ0E7Ozs7QUFFQTtBQUFBOztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7O0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUVBO0FBQ0E7QUFFQTs7QUFFQTtBQUVBO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBRUE7OztBQUdBO0FBQ0E7OztBQUdBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFFQTtBQUVBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFJQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQVFBO0FBY0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFJQTtBQUNBOztBQUdBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFTQTtBQUVBO0FBUUE7QUFBQTtBQUNBO0FBRUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUdBO0FBUUE7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUtBO0FBQ0E7QUFhQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBS0E7QUFLQTtBQUNBOzs7QUFHQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQU1BO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFNQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBRUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBOztBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTs7O0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFTQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBV0E7O0FBS0E7O0FBRUE7QUFFQTtBQUdBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7QUFFQTtBQXJxQ0E7QUFDQTtBQUZBO0FBRkE7QUFBQTtBQUFBO0FBQ0E7QUF3cUNBO0FBQUE7QUF2cUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmltbGlnaHQtcGxhdGZvcm0vLi9wYWNrYWdlcy9iaW1BaXIvc3JjL3ZpZXdlcldyYXBwZXIvcGFuZWxzL3N0cnVjdHVyZVRyZWUvcGFuZXMvc3RydWN0dXJlVHJlZS50c3g/NmUxNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgUHJvcCwgVnVlLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XHJcbmltcG9ydCAqIGFzIExvbmdhbiBmcm9tIFwiZ3MtbG9uZ2FuXCI7XHJcbmltcG9ydCAqIGFzIExvbmdhbkFwaSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9hcGlcIjtcclxuaW1wb3J0IEdzRGl2aWRlciBmcm9tIFwiLi4vLi4vLi4vLi4vY29tcG9uZW50cy9ncy9nc0RpdmlkZXIvZ3MtZGl2aWRlci52dWVcIjtcclxuXHJcbmltcG9ydCBUcmVlIGZyb20gXCIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2VsL3RyZWVcIjtcclxuaW1wb3J0IHsgQnV0dG9uLCBJbnB1dCwgRm9ybSwgRm9ybUl0ZW0sIE1lc3NhZ2UsIE1lc3NhZ2VCb3ggfSBmcm9tIFwiZWxlbWVudC11aVwiO1xyXG5pbXBvcnQgeyBCdXR0b25Db25maWcsIGNyZWF0ZU1lbnUgfSBmcm9tIFwiLi4vLi4vLi4vbW9kdWxlL2NyZWF0ZU1lbnVcIjtcclxuaW1wb3J0IHN0cnVjdHVyZVRyZWUgZnJvbSBcIi4uLy4uLy4uLy4uL3N0b3JlL3N0cnVjdHVyZVRyZWVcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50U2VsZWN0b3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vcGVyYXRvcnMvY29tcG9uZW50U2VsZWN0b3JcIjtcclxuaW1wb3J0IHsgVHJlZU5vZGVPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL3RyZWVOb2RlT2JqZWN0XCI7XHJcbmltcG9ydCB7IFZpZXdlciB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L3ZpZXdlclwiO1xyXG5pbXBvcnQgSURCIGZyb20gXCJncy1sb25nYW4vbG9uZ2FuL2lkYlwiO1xyXG5pbXBvcnQgeyBMaWdodE1vZGVsIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9saWdodE1vZGVsXCI7XHJcbmltcG9ydCB7IFJlZmVyZW5jZUxpZ2h0TW9kZWwgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL3JlZmVyZW5jZUxpZ2h0TW9kZWxcIjtcclxuaW1wb3J0IHN0cnVjdHVyZVRyZWVCdXMgZnJvbSBcIi4uL3N0cnVjdHVyZVRyZWVCdXNcIjtcclxuXHJcblZ1ZS51c2UoVHJlZSk7XHJcblZ1ZS51c2UoQnV0dG9uKTtcclxuVnVlLnVzZShJbnB1dCk7XHJcblZ1ZS51c2UoRm9ybSk7XHJcblZ1ZS51c2UoRm9ybUl0ZW0pO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgY29tcG9uZW50czogeyBHc0RpdmlkZXIgfSxcclxufSlcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW50ZXJmYWNlU3RydWN0dXJlVHJlZSBleHRlbmRzIFZ1ZSB7XHJcbiAgQFByb3AoKSBjb21wb25lbnREYXRhO1xyXG4gIEBJbmplY3QoKSBnZXRWaWV3ZXI7XHJcbiAgc2VhcmNoVmFsdWUgPSBcIlwiO1xyXG4gIHRyZWVQcm9wcyA9IHtcclxuICAgIGxhYmVsOiBcIm5hbWVcIixcclxuICAgIGNoaWxkcmVuOiBcImNoaWxkTm9kZXNcIixcclxuICAgIGlzTGVhZjogXCJpc0xlYWZcIixcclxuICAgIGV4cGFuZWQ6IFwiZXhwYW5lZFwiLFxyXG4gIH07XHJcbiAgdHJlZUNoZWNrZWROb3MgPSBbXTtcclxuICB0cmVlRXhwYW5kQWxsID0gdHJ1ZTtcclxuICBkcmFnZ2luZ05vZGUgPSBudWxsO1xyXG5cclxuICB0cmVlTW9kZWxTdHJ1Y3R1cmUgPSBudWxsO1xyXG5cclxuICBzZWxlY3RlZEtleSA9IC0xO1xyXG4gIHNlbGVjdGVkUGF0aCA9IFwiXCI7XHJcbiAgLy8g5Yu+6YCJ55qEa2V5c1xyXG4gIGNoZWNrS2V5cyA9IFtdO1xyXG4gIC8vIOmakOiXj+eahGtleXNcclxuICBpbnZpc2libGVLZXlzID0gW107XHJcbiAgLy8g5bGV5byA55qEa2V5c1xyXG4gIGV4cGFuZGVkS2V5cyA9IFtdO1xyXG4gIGN1cnJlbnRUcmVlS2V5ID0gbnVsbDtcclxuICBpc0VkaXRpbmdLZXk6IHN0cmluZyA9IG51bGw7XHJcbiAgbmFtZVZhbHVlID0gXCJcIjtcclxuICAvLyBtb2RlbE9iamVjdHM6IFRyZWVOb2RlT2JqZWN0W10gPSBbXTtcclxuICBtb2RlbE9iamVjdHNDbG9uZSA9IFtdO1xyXG5cclxuICBwYXJlbnRTZWdtZW50S2V5OiBudW1iZXIgPSBudWxsO1xyXG4gIHRyZWVOb2RlSG92ZXJLZXkgPSBudWxsO1xyXG4gIGlzVHJlZUVkaXRpbmcgPSBmYWxzZTtcclxuICBvcGVyYXRvckxpc3QgPSBbXTtcclxuICBjb250ZXh0TWVudTtcclxuICBjdXJyZW50VHJlZU5vZGVEYXRhOiBUcmVlTm9kZU9iamVjdDtcclxuICBjdXJyZW50VHJlZU5vZGU7XHJcblxyXG4gIC8vIOmalOemu2lk5YiX6KGoXHJcbiAgaXNvbGF0aW9uSWRzID0gW107XHJcbiAgbGV2ZWxPbmVEYXRhID0gW107XHJcblxyXG4gIGxvb3BGbGFnID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRHc2xOb2RlID0gbnVsbDtcclxuICBub2RlUGF0aCA9IFtdO1xyXG4gIGNob29zZU5vZGUgPSBudWxsO1xyXG4gIHJvb3ROb2RlID0gbnVsbDtcclxuICBsYXN0Tm9DaGVja2VkUm9vdE5vZGVzID0gW107XHJcblxyXG4gIGNvdW50ID0gMDtcclxuICBlbmQgPSBmYWxzZTtcclxuICBpc29sYXRpb25LZXlzID0gW107XHJcblxyXG4gIGlzVHJlZUxvY2F0ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaXNUcmVlTG9jYXRlXCIpICE9PSBcImZhbHNlXCI7XHJcblxyXG4gIGxldmVsME5vZGU7XHJcbiAgbGV2ZWwwTm9kZVJlc29sdmU7XHJcblxyXG4gIGN1cnJlbnROb2RlO1xyXG4gIGN1cnJlbnROb2RlUmVzb2x2ZTtcclxuXHJcbiAgY2hlY2tTdHJpY3RseSA9IGZhbHNlO1xyXG4gIGRyYWdnaW5nTm9kZUNoZWNrZWQgPSB0cnVlO1xyXG5cclxuICBidXR0b25MaXN0OiBCdXR0b25Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogXCLnvJbovpFcIixcclxuICAgICAgY2hpbGRyZW46IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiBcIua3u+WKoFwiLFxyXG4gICAgICAgICAgY2xpY2tGdW46ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hZGRSZW5kZXJPYmplY3RDbGljaygpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6IFwi6YeN5ZG95ZCNXCIsXHJcbiAgICAgICAgICBjbGlja0Z1bjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmFtZVJlbmRlck9iamVjdENsaWNrKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogXCLliKDpmaRcIixcclxuICAgICAgICAgIGNsaWNrRnVuOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlUmVuZGVyT2JqZWN0Q2xpY2soKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICAvLyB7XHJcbiAgICAvLyAgIG5hbWU6IFwi6auY5Lqu6YCJ5Lit5a+56LGhXCIsXHJcbiAgICAvLyAgIGtleTogXCJoaWdobGlnaHRcIixcclxuICAgIC8vICAgY2xpY2tGdW46ICgpID0+IHtcclxuICAgIC8vICAgICAvL3RoaXMuY29tcG9uZW50U2VsZWN0QW5kSGVpZ2hsaWdodCgpO1xyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogXCLpmpDol49cIixcclxuICAgICAgY2hpbGRyZW46IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiBcIumakOiXj+mAieS4reWvueixoVwiLFxyXG4gICAgICAgICAgY2xpY2tGdW46ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oaWRlT2JqZWN0KCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogXCLpmpDol4/lhbbku5blr7nosaFcIixcclxuICAgICAgICAgIGNsaWNrRnVuOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVIaWRlT2JqZWN0KCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogXCLmmL7npLrlhajpg6jlr7nosaFcIixcclxuICAgICAgICAgIGNsaWNrRnVuOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJIaWRlT2JqZWN0KCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcIumalOemu1wiLFxyXG4gICAgICBjaGlsZHJlbjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6IFwi6ZqU56a76YCJ5Lit5a+56LGhXCIsXHJcbiAgICAgICAgICBjbGlja0Z1bjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzb2xhdGVPYmplY3QoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiBcIumalOemu+WFtuS7luWvueixoVwiLFxyXG4gICAgICAgICAgY2xpY2tGdW46ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc29sYXRlT3RoZXJPYmplY3RzKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogXCLlj5bmtojpmpTnprtcIixcclxuICAgICAgICAgIGNsaWNrRnVuOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJJc29sYXRlT2JqZWN0cygpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogXCLlsZXlvIBcIixcclxuICAgICAgY2hpbGRyZW46IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiBcIuWxleW8gOS4gOWxglwiLFxyXG4gICAgICAgICAgY2xpY2tGdW46ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zaG93TGV2ZWwoMSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogXCLlsZXlvIDkuozlsYJcIixcclxuICAgICAgICAgIGNsaWNrRnVuOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0xldmVsKDIpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6IFwi5bGV5byA5LiJ5bGCXCIsXHJcbiAgICAgICAgICBjbGlja0Z1bjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dMZXZlbCgzKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyB7XHJcbiAgICAgICAgLy8gICBuYW1lOiBcIuWFqOmDqOWxleW8gFwiLCBrZXk6IFwic2hvd0FsbFwiLCBjbGlja0Z1bjogKCkgPT4ge1xyXG4gICAgICAgIC8vICAgICB0aGlzLnNldEFsbEV4cGFuZCh0cnVlKVxyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogXCLlhajpg6jmlLbotbdcIixcclxuICAgICAgICAgIGNsaWNrRnVuOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QWxsRXhwYW5kKGZhbHNlKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgXTtcclxuXHJcbiAgc3RydWN0dXJlVHJlZSA9IHN0cnVjdHVyZVRyZWU7XHJcbiAgdHJlZU5vZGVEcmFnRW50ZXJUaW1lcjtcclxuXHJcbiAgaGVpZ2hMaWdodCA9ICgpID0+IHtcclxuICAgIGxldCBzZWdPYmogPSB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLnNlZ21lbnRPYmplY3Q7XHJcbiAgICBjb25zb2xlLmxvZyhcIumAieS4reeahOWvueixoe+8mlwiLCBzZWdPYmosIHNlZ09iai5zaXplKTtcclxuICAgIGlmIChzZWdPYmopIHtcclxuICAgICAgbGV0IHRyZWVOb2RlT2JqZWN0ID1cclxuICAgICAgICB0aGlzLnZpZXdlci5zdHJ1Y3R1cmVUcmVlTWFuYWdlci50cmVlTm9kZXNbc2VnT2JqLm5vZGVLZXldO1xyXG4gICAgICBsZXQgcGF0aEtleXM6IExvbmdhbi5MaXN0PHN0cmluZz4gPSBuZXcgTG9uZ2FuLkxpc3QoKTtcclxuICAgICAgaWYgKHRyZWVOb2RlT2JqZWN0KSB7XHJcbiAgICAgICAgdGhpcy5nZXRQYXRoS2V5cyh0cmVlTm9kZU9iamVjdCwgcGF0aEtleXMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgdHJlZSA9IHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnk7XHJcbiAgICAgIHBhdGhLZXlzLml0ZW1zLnJldmVyc2UoKS5mb3JFYWNoKChub2RlS2V5KSA9PiB7XHJcbiAgICAgICAgLy8g6IqC54K55Yqg6L295a6M5ZCO5YaN5bGV5byAXHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBsZXQgbm9kZSA9IHRyZWUuZ2V0Tm9kZShub2RlS2V5KTtcclxuICAgICAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgICAgIG5vZGUuZXhwYW5kKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSwgMCk7XHJcbiAgICAgIH0pO1xyXG4gICAgICAvLyB0aGlzLmV4cGFuZGVkS2V5cy5wdXNoKHNlZ09iai5ub2RlS2V5KTtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2NhdGVDdXJyZW50Tm9kZShzZWdPYmoubm9kZUtleSk7XHJcbiAgICAgICAgdHJlZS5zZXRDdXJyZW50S2V5KHNlZ09iai5ub2RlS2V5KTtcclxuICAgICAgfSwgMTApO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGdldCB2aWV3ZXIoKTogVmlld2VyIHtcclxuICAgIHJldHVybiB0aGlzLmdldFZpZXdlcigpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRhYnMoKSB7XHJcbiAgICBsZXQgdGFicyA9IHRoaXMudmlld2VyLm9wdGlvbnMuY29tcG9uZW50cy5wcm9wZXJ0eS50YWJzO1xyXG4gICAgcmV0dXJuIHRhYnM7XHJcbiAgfVxyXG5cclxuICBnZXQgdmlld2VyVHlwZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnZpZXdlci5vcHRpb25zLnZpZXdlclR5cGU7XHJcbiAgfVxyXG5cclxuICBsb2FkTm9kZShub2RlLCByZXNvbHZlKSB7XHJcbiAgICBpZiAoIXRoaXMudmlld2VyKSB7XHJcbiAgICAgIHJlc29sdmUoW10pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaGVja1N0cmljdGx5ID0gdHJ1ZTtcclxuICAgIGlmICh0aGlzLnZpZXdlcj8uc3RydWN0dXJlVHJlZU1hbmFnZXI/LnJvb3ROb2RlKSB7XHJcbiAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcclxuICAgICAgICB0aGlzLmN1cnJlbnROb2RlID0gbm9kZTtcclxuICAgICAgICB0aGlzLmN1cnJlbnROb2RlUmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgICAgICAgaWYgKG5vZGUubGV2ZWwgPT09IDApIHtcclxuICAgICAgICAgIGxldCByZXN1bHQ7XHJcbiAgICAgICAgICB0aGlzLmxldmVsME5vZGUgPSBub2RlOyAvL+i/memHjOaYr+WFs+mUru+8geWcqGRhdGHph4zpnaLlrprkuYnkuIDkuKrlj5jph4/vvIzlsIZub2RlLmxldmVsID09IDDnmoRub2Rl5a2Y6LW35p2lXHJcbiAgICAgICAgICB0aGlzLmxldmVsME5vZGVSZXNvbHZlID0gcmVzb2x2ZTsgLy/lkIxcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy52aWV3ZXIucmVuZGVyT2JqZWN0ICYmXHJcbiAgICAgICAgICAgIHRoaXMudmlld2VyLnJlbmRlck9iamVjdC5zaG93VHJlZU5vZGVcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmdldE5vZGVzKFt0aGlzLnZpZXdlci5zdHJ1Y3R1cmVUcmVlTWFuYWdlci5yb290Tm9kZV0pO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5pbnZpc2libGVLZXlzLmluZGV4T2YocmVzdWx0WzBdLm5vZGVLZXkpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuY2hlY2tLZXlzLnB1c2gocmVzdWx0WzBdLm5vZGVLZXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXN1bHQgPSB0aGlzLmdldE5vZGVzKFxyXG4gICAgICAgICAgICAgIHRoaXMudmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnJvb3ROb2RlLmNoaWxkTm9kZXNcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgcmVzdWx0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5pbnZpc2libGVLZXlzLmluZGV4T2YoaXRlbS5ub2RlS2V5KSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tLZXlzLnB1c2goaXRlbS5ub2RlS2V5KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGV0IHRyZWVOb2RlID1cclxuICAgICAgICAgICAgdGhpcy52aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXI/LnRyZWVOb2Rlc1tub2RlLmRhdGEubm9kZUtleV07XHJcbiAgICAgICAgICBpZiAodHJlZU5vZGUpIHtcclxuICAgICAgICAgICAgbGV0IGNoaWxkTm9kZXMgPSB0cmVlTm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcy5nZXROb2RlcyhjaGlsZE5vZGVzKTtcclxuICAgICAgICAgICAgcmVzdWx0LmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5pbnZpc2libGVLZXlzLmluZGV4T2YoaXRlbS5ub2RlS2V5KSA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tLZXlzLnB1c2goaXRlbS5ub2RlS2V5KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoW10pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmNoZWNrU3RyaWN0bHkgPSBmYWxzZTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIuagkee7k+aehOeItuWtkOiKgueCuemHjeaWsOWFs+iBlFwiKTtcclxuICAgICAgfSwgMjApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Tm9kZXModHJlZU5vZGVPYmplY3RzOiBUcmVlTm9kZU9iamVjdFtdKToge1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgbm9kZUtleTogc3RyaW5nO1xyXG4gICAgaXNTaG93OiBib29sZWFuO1xyXG4gICAgaXNMZWFmOiBib29sZWFuO1xyXG4gICAgZXhwYW5lZDogYm9vbGVhbjtcclxuICB9W10ge1xyXG4gICAgbGV0IHJlc3VsdCA9IFtdO1xyXG4gICAgdHJlZU5vZGVPYmplY3RzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgcmVzdWx0LnB1c2goe1xyXG4gICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgICBub2RlS2V5OiBpdGVtLm5vZGVLZXksXHJcbiAgICAgICAgaXNTaG93OiBpdGVtLmlzU2hvdyxcclxuICAgICAgICBpc0xlYWY6IGl0ZW0uY2hpbGROb2Rlcy5sZW5ndGggPT09IDAsXHJcbiAgICAgICAgZXhwYW5lZDogdGhpcy5leHBhbmRlZEtleXMuaW5kZXhPZihpdGVtLm5vZGVLZXkpICE9PSAtMSxcclxuICAgICAgfSk7XHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICBpc1RyZWVMb2NhdGVDaGFuZ2UodmFsKSB7XHJcbiAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShcImlzVHJlZUxvY2F0ZVwiLCB2YWwpO1xyXG4gICAgdGhpcy5pc1RyZWVMb2NhdGUgPSB2YWw7XHJcbiAgfVxyXG5cclxuICBsb2NhdGVDdXJyZW50Tm9kZShub2RlS2V5KSB7XHJcbiAgICBpZiAoIXRoaXMuaXNUcmVlTG9jYXRlKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuY291bnQgPSAwO1xyXG4gICAgdGhpcy5lbmQgPSBmYWxzZTtcclxuICAgIGxldCB0cmVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJzdHJ1Y3R1cmVUcmVlXCIpO1xyXG4gICAgbGV0IG5vZGUgPSAodGhpcy4kcmVmcy5zdHJ1Y3R1cmVUcmVlIGFzIGFueSkuc3RvcmUucm9vdDtcclxuXHJcbiAgICB0aGlzLmNvdW50RXhwYW5kTm9kZShub2RlLCBub2RlS2V5KTtcclxuICAgIGxldCBjb3VudCA9IHRoaXMuY291bnQ7XHJcbiAgICBsZXQgcGFyZW50RWxlbWVudCA9IHRyZWUucGFyZW50RWxlbWVudDtcclxuICAgIHBhcmVudEVsZW1lbnQuc2Nyb2xsVG8oMCwgY291bnQgKiAyNiAtIDYwKTtcclxuICB9XHJcblxyXG4gIC8vIFRPRE/vvJrpgJLlvZLlvoXkvJjljJbvvIzmib7liLDnm67moIfoioLngrnlupTor6XkuK3mlq3pgJLlvZJcclxuICBjb3VudEV4cGFuZE5vZGUobm9kZSwgbm9kZUtleSkge1xyXG4gICAgaWYgKCF0aGlzLmVuZCkge1xyXG4gICAgICBpZiAobm9kZS5leHBhbmRlZCB8fCB0aGlzLmNvdW50ID09PSAwIHx8IG5vZGUuZGF0YS5ub2RlS2V5ID09PSBub2RlS2V5KSB7XHJcbiAgICAgICAgdGhpcy5jb3VudCArPSAxO1xyXG4gICAgICAgIGlmIChub2RlLmRhdGEgJiYgbm9kZS5kYXRhLm5vZGVLZXkgPT09IG5vZGVLZXkpIHtcclxuICAgICAgICAgIHRoaXMuZW5kID0gdHJ1ZTtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNvdW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAobm9kZS5jaGlsZE5vZGVzKSB7XHJcbiAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIC8vIOmBjeWOhuWtkOiKgueCuVxyXG4gICAgICAgICAgICB0aGlzLmNvdW50RXhwYW5kTm9kZShub2RlLmNoaWxkTm9kZXNbaV0sIG5vZGVLZXkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmNvdW50ICs9IDE7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZpbmRSb1Zpc2libGUoaW5zT2JqOiBMb25nYW4uUmVuZGVySW5zdGFuY2VPYmplY3QsIGNoZWNrZWROb3M6IG51bWJlcltdKSB7XHJcbiAgICBpZiAoaW5zT2JqLnJlbmRlck9iamVjdC52aXNpYmxlKSB7XHJcbiAgICAgIGNoZWNrZWROb3MucHVzaChpbnNPYmoubm8pO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnNPYmouY2hpbGRPYmplY3RzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIHRoaXMuZmluZFJvVmlzaWJsZShpbnNPYmouY2hpbGRPYmplY3RzW2ldLCBjaGVja2VkTm9zKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldE1vZGVsT2JqZWN0cygpIHtcclxuICAgIGxldCB2aWV3ZXIgPSB0aGlzLnZpZXdlcjtcclxuICAgIGlmICh2aWV3ZXIgJiYgdmlld2VyLmluc3RhbmNlT2JqZWN0KSB7XHJcbiAgICAgIGxldCBpbnNPYmogPSB2aWV3ZXIuaW5zdGFuY2VPYmplY3Q7XHJcbiAgICAgIGxldCB0cmVlQ2hlY2tlZE5vcyA9IFtdO1xyXG4gICAgICB0aGlzLmZpbmRSb1Zpc2libGUoaW5zT2JqLCB0cmVlQ2hlY2tlZE5vcyk7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrZWROb3MgPSB0cmVlQ2hlY2tlZE5vcztcclxuXHJcbiAgICAgIGxldCByb290Tm9kZSA9XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnREYXRhICYmIHRoaXMuY29tcG9uZW50RGF0YS5zdHJ1Y3R1cmVUcmVlXHJcbiAgICAgICAgICA/IHRoaXMuY29tcG9uZW50RGF0YS5zdHJ1Y3R1cmVUcmVlWzBdXHJcbiAgICAgICAgICA6IHRoaXMudmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnJvb3ROb2RlO1xyXG5cclxuICAgICAgaWYgKHRoaXMudmlld2VyLnJlbmRlck9iamVjdC5zaG93VHJlZU5vZGUpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUcmVlTm9kZURhdGEgPSByb290Tm9kZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRUcmVlTm9kZURhdGEgPSByb290Tm9kZS5jaGlsZE5vZGVzWzBdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNob3dMZXZlbCgxKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudHJlZUNoZWNrZWROb3MgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHNlYXJjaFZhbHVlQ2hhbmdlKHZhbCkge1xyXG4gICAgaWYgKHZhbCkge1xyXG4gICAgICBsZXQgdHJlZU5vZGVzID0gdGhpcy52aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXIudHJlZU5vZGVzO1xyXG4gICAgICBsZXQgdHJlZSA9IHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnk7XHJcblxyXG4gICAgICBmb3IgKGxldCBrZXkgaW4gdHJlZU5vZGVzKSB7XHJcbiAgICAgICAgaWYgKHRyZWVOb2Rlc1trZXldLm5hbWUuaW5kZXhPZih0aGlzLnNlYXJjaFZhbHVlKSAhPT0gLTEpIHtcclxuICAgICAgICAgIGxldCB0cmVlTm9kZU9iamVjdCA9IHRyZWVOb2Rlc1trZXldO1xyXG4gICAgICAgICAgbGV0IHBhdGhLZXlzOiBMb25nYW4uTGlzdDxzdHJpbmc+ID0gbmV3IExvbmdhbi5MaXN0KCk7XHJcbiAgICAgICAgICBpZiAodHJlZU5vZGVPYmplY3QpIHtcclxuICAgICAgICAgICAgdGhpcy5nZXRQYXRoS2V5cyh0cmVlTm9kZU9iamVjdCwgcGF0aEtleXMpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHBhdGhLZXlzLml0ZW1zLnJldmVyc2UoKS5mb3JFYWNoKChub2RlS2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBub2RlID0gdHJlZS5nZXROb2RlKG5vZGVLZXkpO1xyXG4gICAgICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgICAgIG5vZGUuZXhwYW5kKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgICh0aGlzLiRyZWZzLnN0cnVjdHVyZVRyZWUgYXMgYW55KS5maWx0ZXIodGhpcy5zZWFyY2hWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBmaWx0ZXJOb2RlKHZhbHVlLCBkYXRhKTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIXZhbHVlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGRhdGEubmFtZS5pbmRleE9mKHZhbHVlKSAhPT0gLTE7XHJcbiAgfVxyXG5cclxuICB0cmVlQ2hlY2soXHJcbiAgICBkYXRhOiBUcmVlTm9kZU9iamVjdCxcclxuICAgIHsgY2hlY2tlZE5vZGVzLCBjaGVja2VkS2V5cywgaGFsZkNoZWNrZWROb2RlcywgaGFsZkNoZWNrZWRLZXlzIH1cclxuICApIHtcclxuICAgIC8vIHRoaXMuY2hlY2tLZXlzID0gY2hlY2tlZEtleXM7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInRoaXMuY2hlY2tLZXlzXCIsIHRoaXMuY2hlY2tLZXlzKTtcclxuICAgIGxldCB0cmVlTm9kZU9iamVjdCA9XHJcbiAgICAgIHRoaXMudmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnRyZWVOb2Rlc1tkYXRhLm5vZGVLZXldO1xyXG4gICAgaWYgKFxyXG4gICAgICBjaGVja2VkTm9kZXNcclxuICAgICAgICAubWFwKChpdGVtKSA9PiBpdGVtLm5vZGVLZXkpXHJcbiAgICAgICAgLmluZGV4T2YodHJlZU5vZGVPYmplY3Qubm9kZUtleSkgPT09IC0xXHJcbiAgICApIHtcclxuICAgICAgdGhpcy52aWV3ZXIuaW52aXNpYmxlTWFuYWdlci5pbnZpc2libGUoW3RyZWVOb2RlT2JqZWN0XSk7XHJcbiAgICAgIHRoaXMuaW52aXNpYmxlS2V5cy5wdXNoKHRyZWVOb2RlT2JqZWN0Lm5vZGVLZXkpO1xyXG4gICAgICBjb25zb2xlLmxvZyhcIumakOiXj+iKgueCuWtleXNcIiwgdGhpcy5pbnZpc2libGVLZXlzKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudmlld2VyLmludmlzaWJsZU1hbmFnZXIuY2xlYXJJbnZpc2libGUoW3RyZWVOb2RlT2JqZWN0XSk7XHJcbiAgICAgIGxldCBpbmRleCA9IHRoaXMuaW52aXNpYmxlS2V5cy5pbmRleE9mKHRyZWVOb2RlT2JqZWN0Lm5vZGVLZXkpO1xyXG4gICAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5pbnZpc2libGVLZXlzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcblxyXG4gICAgaWYgKHRoaXMudmlld2VyLm9wdGlvbnMuY29tcG9uZW50cy5zdHJ1Y3R1cmVUcmVlLmRlZmF1bHRUYWIuY2hlY2tGdW4pIHtcclxuICAgICAgdGhpcy52aWV3ZXIub3B0aW9ucy5jb21wb25lbnRzLnN0cnVjdHVyZVRyZWUuZGVmYXVsdFRhYi5jaGVja0Z1bihcclxuICAgICAgICB0cmVlTm9kZU9iamVjdCxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjaGVja2VkTm9kZXMsXHJcbiAgICAgICAgICBjaGVja2VkS2V5cyxcclxuICAgICAgICAgIGhhbGZDaGVja2VkTm9kZXMsXHJcbiAgICAgICAgICBoYWxmQ2hlY2tlZEtleXMsXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmluZEludmlzaWJsZVJvb3ROb2Rlcyhyb290Tm9kZSwgaGFsZkNoZWNrZWROb2RlcywgaW52aXNpYmxlUm9vdE5vZGVzKSB7XHJcbiAgICBpZiAocm9vdE5vZGUuY2hlY2tlZCA9PT0gZmFsc2UpIHtcclxuICAgICAgaWYgKGhhbGZDaGVja2VkTm9kZXMuaW5kZXhPZihyb290Tm9kZS5kYXRhKSA9PT0gLTEpIHtcclxuICAgICAgICBpbnZpc2libGVSb290Tm9kZXMucHVzaChyb290Tm9kZS5kYXRhKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgY2hpbGROb2RlcyA9IHJvb3ROb2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbmRJbnZpc2libGVSb290Tm9kZXMoXHJcbiAgICAgICAgICAgIGNoaWxkTm9kZXNbaV0sXHJcbiAgICAgICAgICAgIGhhbGZDaGVja2VkTm9kZXMsXHJcbiAgICAgICAgICAgIGludmlzaWJsZVJvb3ROb2Rlc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIGZpbmROb09ialRyZWVOb2RlT2JqZWN0KHRyZWVOb2RlT2JqZWN0OiBUcmVlTm9kZU9iamVjdCkge1xyXG4gIC8vICAgaWYgKHRyZWVOb2RlT2JqZWN0Lm9iaikge1xyXG4gIC8vICAgICBpZiAodHJlZU5vZGVPYmplY3QuY2hpbGROb2Rlcykge1xyXG4gIC8vICAgICAgIHJldHVybiB0aGlzLmZpbmROb09ialRyZWVOb2RlT2JqZWN0KHRyZWVOb2RlT2JqZWN0LmNoaWxkTm9kZXNbMF0pO1xyXG4gIC8vICAgICB9IGVsc2Uge1xyXG4gIC8vICAgICAgIHJldHVybiBudWxsO1xyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9IGVsc2Uge1xyXG4gIC8vICAgICByZXR1cm4gdHJlZU5vZGVPYmplY3Q7XHJcbiAgLy8gICB9XHJcbiAgLy8gfVxyXG5cclxuICB0cmVlTm9kZUNsaWNrKGRhdGEsIG5vZGUpIHtcclxuICAgIGxldCB0cmVlTm9kZSA9IHRoaXMudmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnRyZWVOb2Rlc1tkYXRhLm5vZGVLZXldO1xyXG5cclxuICAgIC8vIGxldCBub09ialRyZWVOb2RlT2JqZWN0ID0gdGhpcy5maW5kTm9PYmpUcmVlTm9kZU9iamVjdCh0cmVlTm9kZSk7XHJcbiAgICAvLyB0aGlzLnZpZXdlci5lbnN1cmVTZWdtZW50QXN5bkdlb21ldHJ5KG5vT2JqVHJlZU5vZGVPYmplY3Quc2VnbWVudC5rZXkpO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFwidHJlZU5vZGVDbGlja1wiLCBub2RlLCB0cmVlTm9kZSk7XHJcbiAgICB0aGlzLmN1cnJlbnRUcmVlTm9kZURhdGEgPSB0cmVlTm9kZTtcclxuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuY2xlYXJBbGxTZWxlY3Rpb25BbmRIaWdobGlnaHQoKTtcclxuICAgIHRoaXMudmlld2VyLnNlbGVjdGlvbk1hbmFnZXIuc2VsZWN0QW5kSGlnaGxpZ2h0KFt0cmVlTm9kZV0pO1xyXG4gICAgdGhpcy52aWV3ZXIubG9jYXRlT2JqZWN0KHRyZWVOb2RlKTtcclxuXHJcbiAgICB0aGlzLnZpZXdlci5wYW5lbE1hbmFnZXIucHJvcGVydHlQYW5lbC5nZXRQcm9wZXJ0eSh0cmVlTm9kZS5zZWdtZW50T2JqZWN0KTtcclxuXHJcbiAgICBpZiAodGhpcy52aWV3ZXIub3B0aW9ucy5jb21wb25lbnRzLnN0cnVjdHVyZVRyZWUuY2xpY2tGdW4pIHtcclxuICAgICAgdGhpcy52aWV3ZXIub3B0aW9ucy5jb21wb25lbnRzLnN0cnVjdHVyZVRyZWUuY2xpY2tGdW4odHJlZU5vZGUpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMudmlld2VyLm9wdGlvbnMuY29tcG9uZW50cy5zdHJ1Y3R1cmVUcmVlLmRlZmF1bHRUYWIuY2xpY2tGdW4pIHtcclxuICAgICAgdGhpcy52aWV3ZXIub3B0aW9ucy5jb21wb25lbnRzLnN0cnVjdHVyZVRyZWUuZGVmYXVsdFRhYi5jbGlja0Z1bihcclxuICAgICAgICB0cmVlTm9kZVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xyXG4gIH1cclxuXHJcbiAgY3JlYXRlVHJlZShuZXdUcmVlLCBub2RlKSB7XHJcbiAgICBsZXQgbmV3Tm9kZSA9IG51bGw7XHJcbiAgICBpZiAobm9kZS5kYXRhKSB7XHJcbiAgICAgIG5ld05vZGUgPSB7IGtleTogbm9kZS5kYXRhLmtleSwgbmFtZTogbm9kZS5kYXRhLm5hbWUsIGl0ZW1zOiBbXSB9O1xyXG4gICAgICBpZiAobmV3VHJlZS5pdGVtcykge1xyXG4gICAgICAgIG5ld1RyZWUuaXRlbXMucHVzaChuZXdOb2RlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBuZXdUcmVlLnB1c2gobmV3Tm9kZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIW5ld05vZGUpIHtcclxuICAgICAgbmV3Tm9kZSA9IG5ld1RyZWU7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5jcmVhdGVUcmVlKG5ld05vZGUsIG5vZGUuY2hpbGROb2Rlc1tpXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQcm9wZXJ0aWVzKGtleSkge1xyXG4gICAgbGV0IHNlZ21lbnQgPSBuZXcgTG9uZ2FuLlNlZ21lbnQoa2V5KTtcclxuICAgIGxldCBqc29uU3RyaW5nID0gc2VnbWVudC5wcm9wZXJ0eS5zaG93U3RyaW5nKFwiUHJvcGVydGllc1wiKTtcclxuXHJcbiAgICBsZXQgc2hvd1BhcmVudFByb3BlcnR5ID0gc2VnbWVudC5wcm9wZXJ0eS5zaG93Qm9vbGVhbihcclxuICAgICAgXCJzaG93UGFyZW50UHJvcGVydGllc1wiXHJcbiAgICApO1xyXG4gICAgaWYgKHNob3dQYXJlbnRQcm9wZXJ0eSkge1xyXG4gICAgICBsZXQga2V5ID0gc2VnbWVudC5vd25lci5rZXk7XHJcbiAgICAgIGpzb25TdHJpbmcgPSB0aGlzLmdldFBhcmVudFByb3BlcnRpZXMoa2V5KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcclxuICB9XHJcblxyXG4gIGdldFBhcmVudFByb3BlcnRpZXMoa2V5KSB7XHJcbiAgICBsZXQgc2VnbWVudCA9IG5ldyBMb25nYW4uU2VnbWVudChrZXkpO1xyXG4gICAgbGV0IHByb3BlcnRpZXMgPSBzZWdtZW50LnByb3BlcnR5LnNob3dTdHJpbmcoXCJQcm9wZXJ0aWVzXCIpO1xyXG4gICAgaWYgKHByb3BlcnRpZXMpIHtcclxuICAgICAgcmV0dXJuIHByb3BlcnRpZXM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5nZXRQYXJlbnRQcm9wZXJ0aWVzKHNlZ21lbnQub3duZXIua2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHRyZWVOb2RlRHJhZ1N0YXJ0KG5vZGUsIGV2KSB7XHJcbiAgICB0aGlzLmRyYWdnaW5nTm9kZSA9IG5vZGU7XHJcbiAgICB0aGlzLmN1cnJlbnRUcmVlTm9kZSA9IG5vZGU7XHJcbiAgICB0aGlzLmN1cnJlbnRUcmVlTm9kZURhdGEgPVxyXG4gICAgICB0aGlzLnZpZXdlci5zdHJ1Y3R1cmVUcmVlTWFuYWdlci50cmVlTm9kZXNbbm9kZS5kYXRhLm5vZGVLZXldO1xyXG4gICAgdGhpcy5kcmFnZ2luZ05vZGVDaGVja2VkID0gbm9kZS5jaGVja2VkO1xyXG5cclxuICAgIGNvbnNvbGUubG9nKFwidGhpcy5kcmFnZ2luZ05vZGVDaGVja2VkIFwiLCB0aGlzLmRyYWdnaW5nTm9kZUNoZWNrZWQpO1xyXG4gIH1cclxuXHJcbiAgdHJlZU5vZGVEcmFnRW50ZXIoZHJhZ2dpbmdOb2RlLCBvdmVyTm9kZSwgZXYpIHtcclxuICAgIC8vIHRoaXMubG9hZE5vZGUob3Zlck5vZGUsIHRoaXMubGV2ZWwwTm9kZVJlc29sdmUpO1xyXG4gICAgY29uc29sZS5sb2coXCJ0aGlzLnRyZWVOb2RlRHJhZ0VudGVyVGltZXJcIik7XHJcbiAgICAvLyBpZiAodGhpcy50cmVlTm9kZURyYWdFbnRlclRpbWVyKSB7XHJcbiAgICAvLyAgIGNsZWFyVGltZW91dCh0aGlzLnRyZWVOb2RlRHJhZ0VudGVyVGltZXIpO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gdGhpcy50cmVlTm9kZURyYWdFbnRlclRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgIHRoaXMuZXhwYW5kZWRLZXlzLnB1c2gob3Zlck5vZGUuZGF0YS5ub2RlS2V5KTtcclxuICAgIC8vICAgY2xlYXJUaW1lb3V0KHRoaXMudHJlZU5vZGVEcmFnRW50ZXJUaW1lcik7XHJcbiAgICAvLyAgIHRoaXMudHJlZU5vZGVEcmFnRW50ZXJUaW1lciA9IG51bGw7XHJcbiAgICAvLyB9LCA1MDApO1xyXG4gIH1cclxuXHJcbiAgdHJlZU5vZGVEcmFnRW5kKGRyYWdnaW5nTm9kZSwgZHJvcE5vZGUsIGRyb3BUeXBlKSB7XHJcbiAgICAvLyBpZiAoZHJvcFR5cGUgPT09IFwiaW5uZXJcIiAmJiAhZHJvcE5vZGUuZXhwYW5kZWQpIHtcclxuICAgIC8vICAgdGhpcy4kbWVzc2FnZS53YXJuaW5nKGRyb3BOb2RlLmxhYmVsICsgXCLoioLngrnmnKrlsZXlvIDvvIzml6Dms5Xnp7vlhaVcIik7XHJcbiAgICAvLyAgIHJldHVybiBmYWxzZTtcclxuICAgIC8vIH1cclxuICAgIC8vIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgdHJlZU5vZGVEcm9wKGRyYWdnaW5nTm9kZSwgZHJvcE5vZGUsIGRyb3BUeXBlLCBldikge1xyXG4gICAgY29uc29sZS5sb2coXCJkcm9wTm9kZS5leHBlbmRcIiwgZHJvcE5vZGUpO1xyXG5cclxuICAgIHRoaXMuJGNvbmZpcm0oXHJcbiAgICAgIGDmmK/lkKblsIboioLngrkke2RyYWdnaW5nTm9kZS5sYWJlbH3np7vliqjliLAke2Ryb3BOb2RlLmxhYmVsfSR7XHJcbiAgICAgICAgZHJvcFR5cGUgPT0gXCJiZWZvcmVcIiA/IFwi5LmL5YmNXCIgOiBkcm9wVHlwZSA9PSBcImFmdGVyXCIgPyBcIuS5i+WQjlwiIDogXCLkuItcIlxyXG4gICAgICB9P2AsXHJcbiAgICAgIFwi5o+Q56S6XCIsXHJcbiAgICAgIHtcclxuICAgICAgICBjb25maXJtQnV0dG9uVGV4dDogXCLnoa7lrppcIixcclxuICAgICAgICBjYW5jZWxCdXR0b25UZXh0OiBcIuWPlua2iFwiLFxyXG4gICAgICAgIHR5cGU6IFwid2FybmluZ1wiLFxyXG4gICAgICB9XHJcbiAgICApXHJcbiAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICB0aGlzLmRyb3BDb25maXJtKGRyYWdnaW5nTm9kZSwgZHJvcE5vZGUsIGRyb3BUeXBlKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICB0eXBlOiBcInN1Y2Nlc3NcIixcclxuICAgICAgICAgICAgbWVzc2FnZTogXCLnp7vliqjmiJDlip8hXCIsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICAgIC8vIHN0cnVjdHVyZVRyZWVCdXMuJGVtaXQoXCJ1cGRhdGVUcmVlXCIsIGRyYWdnaW5nTm9kZS5rZXkpO1xyXG4gICAgICAgICAgaWYgKGRyb3BOb2RlID09PSBcImlubmVyXCIpIHtcclxuICAgICAgICAgICAgc3RydWN0dXJlVHJlZUJ1cy4kZW1pdChcInVwZGF0ZVRyZWVcIiwgZHJvcE5vZGUua2V5KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHN0cnVjdHVyZVRyZWVCdXMuJGVtaXQoXCJ1cGRhdGVUcmVlXCIsIGRyb3BOb2RlLnBhcmVudC5rZXkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9KVxyXG4gICAgICAuY2F0Y2goKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuJG1lc3NhZ2Uoe1xyXG4gICAgICAgICAgdHlwZTogXCJpbmZvXCIsXHJcbiAgICAgICAgICBtZXNzYWdlOiBcIuWPlua2iOenu+WKqFwiLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIHN0cnVjdHVyZVRyZWVCdXMuJGVtaXQoXCJ1cGRhdGVUcmVlXCIsIGRyYWdnaW5nTm9kZS5wYXJlbnQua2V5KTtcclxuICAgICAgICBzdHJ1Y3R1cmVUcmVlQnVzLiRlbWl0KFwidXBkYXRlVHJlZVwiLCBkcm9wTm9kZS5wYXJlbnQua2V5KTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBkcm9wQ29uZmlybShkcmFnZ2luZ05vZGUsIGRyb3BOb2RlLCBkcm9wVHlwZSkge1xyXG4gICAgZnVuY3Rpb24gZ2V0SW5kZXgocGFyZW50LCBjaGlsZCkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gcGFyZW50LmNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICBjb25zdCBpdGVtID0gcGFyZW50LmNoaWxkTm9kZXNbaV07XHJcbiAgICAgICAgaWYgKGl0ZW0ua2V5ID09PSBjaGlsZC5rZXkpIHtcclxuICAgICAgICAgIHJldHVybiBpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gLTE7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGluZGV4ID0gLTE7XHJcbiAgICAvLyBsZXQgZHJhZ2dpbmdTZWdtZW50ID0gbmV3IExvbmdhbkFwaS5TZWdtZW50KGRyYWdnaW5nTm9kZS5rZXkpO1xyXG4gICAgbGV0IGRyb3BTZWdtZW50O1xyXG5cclxuICAgIGxldCBkcmFnZ2luZ1RyZWVOb2RlID1cclxuICAgICAgdGhpcy52aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXIudHJlZU5vZGVzW2RyYWdnaW5nTm9kZS5kYXRhLm5vZGVLZXldO1xyXG4gICAgbGV0IGRyb3BUcmVlTm9kZTtcclxuXHJcbiAgICBsZXQgdGFyZ2V0U2VnSW5kZXg7XHJcblxyXG4gICAgc3dpdGNoIChkcm9wVHlwZSkge1xyXG4gICAgICBjYXNlIFwiaW5uZXJcIjpcclxuICAgICAgICAvLyBkcm9wU2VnbWVudCA9IG5ldyBMb25nYW5BcGkuU2VnbWVudChkcm9wTm9kZS5rZXkpO1xyXG4gICAgICAgIGRyb3BUcmVlTm9kZSA9IHRoaXMudmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnRyZWVOb2Rlc1tkcm9wTm9kZS5rZXldO1xyXG4gICAgICAgIGRyb3BTZWdtZW50ID0gZHJvcFRyZWVOb2RlLnNlZ21lbnQ7XHJcbiAgICAgICAgdGFyZ2V0U2VnSW5kZXggPSBkcm9wVHJlZU5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5leHBhbmRlZEtleXMucHVzaChkcm9wTm9kZS5kYXRhLmtleSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJiZWZvcmVcIjpcclxuICAgICAgICBpbmRleCA9IGdldEluZGV4KGRyb3BOb2RlLnBhcmVudCwgZHJvcE5vZGUpO1xyXG4gICAgICAgIC8vIGRyb3BTZWdtZW50ID0gbmV3IExvbmdhbkFwaS5TZWdtZW50KGRyb3BOb2RlLnBhcmVudC5rZXkpO1xyXG4gICAgICAgIGRyb3BUcmVlTm9kZSA9XHJcbiAgICAgICAgICB0aGlzLnZpZXdlci5zdHJ1Y3R1cmVUcmVlTWFuYWdlci50cmVlTm9kZXNbZHJvcE5vZGUucGFyZW50LmtleV07XHJcbiAgICAgICAgZHJvcFNlZ21lbnQgPVxyXG4gICAgICAgICAgdGhpcy52aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXIudHJlZU5vZGVzW2Ryb3BOb2RlLmtleV0uc2VnbWVudFxyXG4gICAgICAgICAgICAub3duZXI7XHJcbiAgICAgICAgdGFyZ2V0U2VnSW5kZXggPSBpbmRleCAtIDE7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiYWZ0ZXJcIjpcclxuICAgICAgICBpbmRleCA9IGdldEluZGV4KGRyb3BOb2RlLnBhcmVudCwgZHJvcE5vZGUpO1xyXG4gICAgICAgIC8vIGRyb3BTZWdtZW50ID0gbmV3IExvbmdhbkFwaS5TZWdtZW50KGRyb3BOb2RlLnBhcmVudC5rZXkpO1xyXG4gICAgICAgIGRyb3BTZWdtZW50ID1cclxuICAgICAgICAgIHRoaXMudmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnRyZWVOb2Rlc1tkcm9wTm9kZS5rZXldLnNlZ21lbnRcclxuICAgICAgICAgICAgLm93bmVyO1xyXG5cclxuICAgICAgICBkcm9wVHJlZU5vZGUgPVxyXG4gICAgICAgICAgdGhpcy52aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXIudHJlZU5vZGVzW2Ryb3BOb2RlLnBhcmVudC5rZXldO1xyXG5cclxuICAgICAgICB0YXJnZXRTZWdJbmRleCA9IGluZGV4ICsgMTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICAgIC8vIGRyYWdnaW5nU2VnbWVudC5tb3ZlVG9JbmRleChkcm9wU2VnbWVudCwgdGFyZ2V0U2VnSW5kZXgpO1xyXG4gICAgbGV0IGRyYWdnaW5nTm9kZUNoZWNrZWQgPSB0aGlzLmRyYWdnaW5nTm9kZUNoZWNrZWQ7XHJcbiAgICByZXR1cm4gZHJhZ2dpbmdUcmVlTm9kZVxyXG4gICAgICAubW92ZVRvSW5kZXhXaXRoUmVxdWVzdEFwaShkcm9wVHJlZU5vZGUsIGRyb3BTZWdtZW50LCB0YXJnZXRTZWdJbmRleClcclxuICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgXCJ0aGlzLiRyZWZzLnN0cnVjdHVyZVRyZWUgXCIsXHJcbiAgICAgICAgICB0aGlzLiRyZWZzLnN0cnVjdHVyZVRyZWUsXHJcbiAgICAgICAgICBkcmFnZ2luZ05vZGUsXHJcbiAgICAgICAgICBkcmFnZ2luZ05vZGUua2V5LFxyXG4gICAgICAgICAgZHJhZ2dpbmdOb2RlQ2hlY2tlZFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgICh0aGlzLiRyZWZzLnN0cnVjdHVyZVRyZWUgYXMgYW55KS5zZXRDaGVja2VkKFxyXG4gICAgICAgICAgZHJhZ2dpbmdOb2RlLmtleSxcclxuICAgICAgICAgIGRyYWdnaW5nTm9kZUNoZWNrZWQsXHJcbiAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVJbmRleGVkREIoKTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBhZGRSZW5kZXJPYmplY3RDbGljaygpIHtcclxuICAgIGxldCBkYXRhID0gdGhpcy5jdXJyZW50VHJlZU5vZGVEYXRhO1xyXG4gICAgaWYgKGRhdGEuY2hpbGROb2Rlcykge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmIChkYXRhLmNoaWxkTm9kZXNbaV0ubm9kZUtleSA9PT0gXCItMVwiKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wYXJlbnRTZWdtZW50S2V5ID0gZGF0YS5rZXk7XHJcbiAgICB0aGlzLm5hbWVWYWx1ZSA9IFwiXCI7XHJcbiAgICAvLyBsZXQgbmV3Tm9kZURhdGE6IFRyZWVOb2RlT2JqZWN0ID0gbmV3IFRyZWVOb2RlT2JqZWN0KFxyXG4gICAgLy8gICB0aGlzLnZpZXdlcixcclxuICAgIC8vICAgXCIgXCIsXHJcbiAgICAvLyAgIG51bGwsXHJcbiAgICAvLyAgIFwiXCJcclxuICAgIC8vICk7XHJcblxyXG4gICAgLy8gaWYgKCFkYXRhLmNoaWxkTm9kZXMpIHtcclxuICAgIC8vICAgZGF0YS5jaGlsZE5vZGVzID0gW107XHJcbiAgICAvLyB9XHJcbiAgICAvLyBuZXdOb2RlRGF0YS5wYXJlbnQgPSBkYXRhO1xyXG4gICAgLy8gZGF0YS5jaGlsZE5vZGVzLnB1c2gobmV3Tm9kZURhdGEpO1xyXG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5jdXJyZW50VHJlZU5vZGU7XHJcbiAgICBwYXJlbnQuZXhwYW5kKCk7XHJcbiAgICAvLyB0aGlzLmV4cGFuZGVkS2V5cy5wdXNoKGRhdGEubm9kZUtleSk7XHJcbiAgICAvLyB0aGlzLmV4cGFuZGVkS2V5cy5wdXNoKFwiLTFcIik7XHJcbiAgICAodGhpcy4kcmVmcy5zdHJ1Y3R1cmVUcmVlIGFzIGFueSkuYXBwZW5kKFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogXCIgXCIsXHJcbiAgICAgICAgbm9kZUtleTogXCItMVwiLFxyXG4gICAgICAgIGlzU2hvdzogdHJ1ZSxcclxuICAgICAgfSxcclxuICAgICAgcGFyZW50XHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaXNFZGl0aW5nS2V5ID0gXCItMVwiO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMubG9jYXRlQ3VycmVudE5vZGUoXCItMVwiKTtcclxuICAgICAgbGV0IGlucHV0ID0gdGhpcy4kcmVmcy5lZGl0aW5nVHJlZU5vZGVJbnB1dCBhcyBhbnk7XHJcbiAgICAgIGlmIChpbnB1dCkge1xyXG4gICAgICAgIGlucHV0LmZvY3VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwKTtcclxuICB9XHJcblxyXG4gIHJlbmFtZVJlbmRlck9iamVjdENsaWNrKCkge1xyXG4gICAgbGV0IGRhdGEgPSB0aGlzLmN1cnJlbnRUcmVlTm9kZURhdGE7XHJcbiAgICB0aGlzLmlzRWRpdGluZ0tleSA9IGRhdGEubm9kZUtleTtcclxuICAgIHRoaXMubmFtZVZhbHVlID0gZGF0YS5uYW1lO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICh0aGlzLiRyZWZzLmVkaXRpbmdUcmVlTm9kZUlucHV0IGFzIGFueSkuZm9jdXMoKTtcclxuICAgIH0sIDEwKTtcclxuICB9XHJcblxyXG4gIGRlbGV0ZVJlbmRlck9iamVjdENsaWNrKCkge1xyXG4gICAgbGV0IGRhdGEgPSB0aGlzLmN1cnJlbnRUcmVlTm9kZURhdGE7XHJcbiAgICBsZXQgbm9kZSA9IHRoaXMuY3VycmVudFRyZWVOb2RlO1xyXG4gICAgTWVzc2FnZUJveC5jb25maXJtKGDnoa7lrprliKDpmaQke2RhdGEubmFtZX3oioLngrnvvJ9gLCBcIuaPkOekulwiLCB7XHJcbiAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIuehruWumlwiLFxyXG4gICAgICBjYW5jZWxCdXR0b25UZXh0OiBcIuWPlua2iFwiLFxyXG4gICAgICB0eXBlOiBcIndhcm5pbmdcIixcclxuICAgIH0pLnRoZW4oKCkgPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZUluZGV4ZWREQigpO1xyXG5cclxuICAgICAgdGhpcy5jdXJyZW50VHJlZU5vZGVEYXRhLmRlbGV0ZVdpdGhSZXF1ZXN0QXBpKHRydWUpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIGxldCBjaGlsZHJlbjogYW55W10gPSBub2RlLnBhcmVudC5jaGlsZE5vZGVzO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gY2hpbGRyZW4uZmluZEluZGV4KFxyXG4gICAgICAgICAgKGQpID0+IGQuZGF0YS5ub2RlS2V5ID09PSBub2RlLmRhdGEubm9kZUtleVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XHJcbiAgICAgICAgICBjaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoXCLoioLngrnliKDpmaTlh7rplJlcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZWRpdFJlbmRlck9iamVjdENvbmZpcm0obm9kZSwgZGF0YSkge1xyXG4gICAgbGV0IHRyZWVOb2RlID0gdGhpcy52aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXIudHJlZU5vZGVzW2RhdGEubm9kZUtleV07XHJcblxyXG4gICAgLy8g5re75YqgXHJcbiAgICBpZiAoZGF0YS5ub2RlS2V5ID09PSBcIi0xXCIpIHtcclxuICAgICAgbGV0IHNlZ21lbnQgPSBuZXcgTG9uZ2FuQXBpLlNlZ21lbnQodGhpcy5wYXJlbnRTZWdtZW50S2V5KTtcclxuICAgICAgaWYgKCF0aGlzLm5hbWVWYWx1ZSkge1xyXG4gICAgICAgIE1lc3NhZ2Uud2FybmluZyhcIuiKgueCueWQjeS4jeiDveS4uuepulwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHNlZ21lbnQuc3Vic2VnbWVudEV4aXN0cyh0aGlzLm5hbWVWYWx1ZSkpIHtcclxuICAgICAgICBNZXNzYWdlLndhcm5pbmcoXCLmraToioLngrnlt7LlrZjlnKjvvIzor7fph43lkb3lkI1cIik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gbGV0IHBhcmVudCA9IGRhdGEucGFyZW50O1xyXG4gICAgICAgIC8v5Yig6Zmk5Li05pe255qEXHJcbiAgICAgICAgLy8gcGFyZW50LnJlbW92ZUNoaWxkTm9kZSh0cmVlTm9kZSk7XHJcbiAgICAgICAgLy8gdHJlZU5vZGUuZGVsZXRlKCk7XHJcbiAgICAgICAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XHJcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBwYXJlbnQuY2hpbGROb2RlcztcclxuICAgICAgICBjb25zdCBpbmRleCA9IGNoaWxkcmVuLmZpbmRJbmRleCgoZCkgPT4gZC5ub2RlS2V5ID09PSBkYXRhLm5vZGVLZXkpO1xyXG4gICAgICAgIGNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XHJcblxyXG4gICAgICAgIGxldCBwYXJlbnRUcmVlTm9kZSA9XHJcbiAgICAgICAgICB0aGlzLnZpZXdlci5zdHJ1Y3R1cmVUcmVlTWFuYWdlci50cmVlTm9kZXNbcGFyZW50LmRhdGEubm9kZUtleV07XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJwYXJlbnRUcmVlTm9kZVwiLCBwYXJlbnRUcmVlTm9kZSk7XHJcbiAgICAgICAgaWYgKHBhcmVudFRyZWVOb2RlKSB7XHJcbiAgICAgICAgICBwYXJlbnRUcmVlTm9kZVxyXG4gICAgICAgICAgICAuYWRkV2l0aFJlcXVlc3RBcGkodGhpcy5uYW1lVmFsdWUsIHRydWUpXHJcbiAgICAgICAgICAgIC50aGVuKCh0cmVlTm9kZU9iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgIC8vIHRyZWVOb2RlID0gdHJlZU5vZGVPYmplY3Q7XHJcbiAgICAgICAgICAgICAgZGF0YS5ub2RlS2V5ID0gdHJlZU5vZGVPYmplY3Qubm9kZUtleTtcclxuICAgICAgICAgICAgICBkYXRhLm5hbWUgPSB0cmVlTm9kZU9iamVjdC5uYW1lO1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNFZGl0aW5nS2V5ID0gbnVsbDtcclxuICAgICAgICAgICAgICB0aGlzLm5hbWVWYWx1ZSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgKHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnkpLmFwcGVuZChcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgbmFtZTogdHJlZU5vZGVPYmplY3QubmFtZSxcclxuICAgICAgICAgICAgICAgICAgbm9kZUtleTogdHJlZU5vZGVPYmplY3Qubm9kZUtleSxcclxuICAgICAgICAgICAgICAgICAgaXNTaG93OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHBhcmVudFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgKHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnkpLnNldENoZWNrZWQoXHJcbiAgICAgICAgICAgICAgICBkYXRhLm5vZGVLZXksXHJcbiAgICAgICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgKHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnkpLnNldENoZWNrZWQoXHJcbiAgICAgICAgICAgICAgICB0cmVlTm9kZU9iamVjdC5ub2RlS2V5LFxyXG4gICAgICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMudXBkYXRlSW5kZXhlZERCKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g57yW6L6RXHJcbiAgICAgIGlmICh0aGlzLm5hbWVWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRyZWVOb2RlRGF0YVxyXG4gICAgICAgICAgLnJlbmFtZVdpdGhSZXF1ZXN0QXBpKHRoaXMubmFtZVZhbHVlKVxyXG4gICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUluZGV4ZWREQigpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGRhdGEubmFtZSA9IHRoaXMubmFtZVZhbHVlO1xyXG4gICAgICAgIHRoaXMuaXNFZGl0aW5nS2V5ID0gbnVsbDtcclxuICAgICAgICB0aGlzLm5hbWVWYWx1ZSA9IFwiXCI7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgTWVzc2FnZS53YXJuaW5nKFwi5ZCN5a2X5LiN6IO95Li656m6XCIpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBlZGl0UmVuZGVyT2JqZWN0Q2FuY2VsKG5vZGUsIGRhdGEpIHtcclxuICAgIC8vIOa3u+WKoFxyXG4gICAgaWYgKGRhdGEubm9kZUtleSA9PT0gXCItMVwiKSB7XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IG5vZGUucGFyZW50O1xyXG4gICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudC5jaGlsZE5vZGVzO1xyXG4gICAgICBjb25zdCBpbmRleCA9IGNoaWxkcmVuLmZpbmRJbmRleCgoZCkgPT4gZC5ub2RlS2V5ID09PSBkYXRhLm5vZGVLZXkpO1xyXG4gICAgICBjaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8g57yW6L6RXHJcbiAgICAgIHRoaXMuaXNFZGl0aW5nS2V5ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUluZGV4ZWREQigpIHtcclxuICAgIGxldCB0cmVlTm9kZSA9IHRoaXMuY3VycmVudFRyZWVOb2RlRGF0YTtcclxuICAgIElEQi5nZXRJbnN0YW5jZSh0cmVlTm9kZS5tb2RlbElkKS5kZWwoXHJcbiAgICAgIHRyZWVOb2RlLm1vZGVsSWQgK1xyXG4gICAgICAgIFwiP3Y9XCIgK1xyXG4gICAgICAgICh0cmVlTm9kZS5tb2RlbC5yZW5kZXJPYmplY3QgYXMgTGlnaHRNb2RlbCB8IFJlZmVyZW5jZUxpZ2h0TW9kZWwpXHJcbiAgICAgICAgICAudmVyc2lvblxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHRyZWVOb2RlTW91c2VPdmVyKGRhdGEpIHtcclxuICAgIC8vIGlmICh0aGlzLmlzVHJlZUVkaXRpbmcpIHtcclxuICAgIHRoaXMudHJlZU5vZGVIb3ZlcktleSA9IGRhdGEua2V5O1xyXG4gICAgLy8gfVxyXG4gIH1cclxuXHJcbiAgdHJlZU5vZGVNb3VzZUxlYXZlKGRhdGEpIHtcclxuICAgIC8vIGlmICh0aGlzLmlzVHJlZUVkaXRpbmcpIHtcclxuICAgIHRoaXMudHJlZU5vZGVIb3ZlcktleSA9IG51bGw7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICBpc0JpbmRNb2RlbEV4aXN0KG1vZGVsSWQpIHtcclxuICAgIC8vIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5tb2RlbExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgIC8vICAgICBpZiAodGhpcy5tb2RlbExpc3RbaV0ubGlnaHRNb2RlbElkID09PSBtb2RlbElkKSB7XHJcbiAgICAvLyAgICAgICAgIHJldHVybiB0cnVlXHJcbiAgICAvLyAgICAgfVxyXG4gICAgLy8gfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgdHJlZU5vZGVDb250ZXh0TWVudUNsaWNrKGUsIGRhdGEsIG5vZGUsIG5vZGVFbGVtZW50KSB7XHJcbiAgICBsZXQgdHJlZU5vZGVPYmplY3QgPVxyXG4gICAgICB0aGlzLnZpZXdlci5zdHJ1Y3R1cmVUcmVlTWFuYWdlci50cmVlTm9kZXNbZGF0YS5ub2RlS2V5XTtcclxuICAgIGNvbnNvbGUubG9nKFwidHJlZU5vZGVDb250ZXh0TWVudUNsaWNrXCIsIGUpO1xyXG4gICAgdGhpcy5jdXJyZW50VHJlZU5vZGVEYXRhID0gdHJlZU5vZGVPYmplY3Q7XHJcbiAgICB0aGlzLmN1cnJlbnRUcmVlTm9kZSA9IG5vZGU7XHJcbiAgICBjcmVhdGVNZW51KGUucGFnZVgsIGUucGFnZVksIHRoaXMuYnV0dG9uTGlzdCk7XHJcbiAgfVxyXG5cclxuICB0cmVlTm9kZUV4cGFuZChkYXRhLCBub2RlLCBlKSB7XHJcbiAgICBjb25zb2xlLmxvZyhkYXRhLCBub2RlLCBlKTtcclxuICAgIHRoaXMuZXhwYW5kZWRLZXlzLnB1c2goZGF0YS5ub2RlS2V5KTtcclxuICB9XHJcblxyXG4gIHRyZWVOb2RlQ29sbGFwc2UoZGF0YSwgbm9kZSwgZSkge1xyXG4gICAgbGV0IGluZGV4ID0gdGhpcy5leHBhbmRlZEtleXMuaW5kZXhPZihkYXRhLm5vZGVLZXkpO1xyXG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xyXG4gICAgICB0aGlzLmV4cGFuZGVkS2V5cy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2hvd0xldmVsKGxldmVsOiBudW1iZXIpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvLyB0aGlzLmV4cGFuZGVkS2V5cyA9IFtdO1xyXG4gICAgICBsZXQgbm9kZSA9IHRoaXMuY3VycmVudFRyZWVOb2RlRGF0YTtcclxuICAgICAgdGhpcy5leHBhbmRMZXZlbChub2RlLCBsZXZlbCk7XHJcbiAgICB9LCAxMCk7XHJcbiAgfVxyXG5cclxuICBleHBhbmRMZXZlbChub2RlLCBsZXZlbDogbnVtYmVyKSB7XHJcbiAgICAvLyBub2RlLmV4cGFuZGVkID0gdHJ1ZTtcclxuICAgIGlmIChub2RlKSB7XHJcbiAgICAgIG5vZGUubG9hZGVkID0gZmFsc2U7XHJcblxyXG4gICAgICBsZXQgbm9kZURvbSA9ICh0aGlzLiRyZWZzLnN0cnVjdHVyZVRyZWUgYXMgYW55KT8uZ2V0Tm9kZShub2RlLm5vZGVLZXkpO1xyXG4gICAgICBpZiAobm9kZURvbSkge1xyXG4gICAgICAgIG5vZGVEb20uZXhwYW5kKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBsZXQgY3VycmVudExldmVsID0gbGV2ZWwgLSAxO1xyXG4gICAgICBpZiAoY3VycmVudExldmVsID4gMCkge1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gbm9kZS5jaGlsZE5vZGVzW2ldO1xyXG4gICAgICAgICAgaWYgKGl0ZW0uY2hpbGROb2RlcyAmJiBpdGVtLmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmV4cGFuZExldmVsKGl0ZW0sIGN1cnJlbnRMZXZlbCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9LCAxMCk7XHJcbiAgICAvLyB0aGlzLmV4cGFuZGVkS2V5cy5wdXNoKG5vZGUua2V5KTtcclxuICB9XHJcblxyXG4gIHNldEFsbEV4cGFuZChzdGF0ZSkge1xyXG4gICAgbGV0IG5vZGVzID0gKHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnkpLnN0b3JlLnJvb3Q7XHJcbiAgICB0aGlzLmV4cGFuZE5vZGUobm9kZXMsIHN0YXRlKTtcclxuICB9XHJcblxyXG4gIGV4cGFuZE5vZGUobm9kZSwgc3RhdGUpIHtcclxuICAgIC8vIOaUueWPmOiKgueCueeahOiHqui6q2V4cGFuZGVk54q25oCBXHJcbiAgICBub2RlLmV4cGFuZGVkID0gc3RhdGU7XHJcbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gbm9kZS5jaGlsZE5vZGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIC8vIOmBjeWOhuWtkOiKgueCuVxyXG4gICAgICBpZiAobm9kZS5jaGlsZE5vZGVzW2ldLmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuZXhwYW5kTm9kZShub2RlLmNoaWxkTm9kZXNbaV0sIHN0YXRlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGlkZU9iamVjdCgpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiaGlkZU9iamVjdFwiKTtcclxuICAgICh0aGlzLiRyZWZzLnN0cnVjdHVyZVRyZWUgYXMgYW55KS5zZXRDaGVja2VkKFxyXG4gICAgICB0aGlzLmN1cnJlbnRUcmVlTm9kZURhdGEsXHJcbiAgICAgIGZhbHNlLFxyXG4gICAgICB0cnVlXHJcbiAgICApO1xyXG4gICAgbGV0IHZpZXdlciA9IHRoaXMudmlld2VyO1xyXG4gICAgdmlld2VyLmludmlzaWJsZU1hbmFnZXIuaW52aXNpYmxlKFt0aGlzLmN1cnJlbnRUcmVlTm9kZURhdGFdKTtcclxuICAgIHZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcbiAgfVxyXG5cclxuICByZUhpZGVPYmplY3QoKSB7XHJcbiAgICBsZXQgcm9vdCA9ICh0aGlzLiRyZWZzLnN0cnVjdHVyZVRyZWUgYXMgYW55KS5yb290O1xyXG4gICAgY29uc29sZS5sb2coXCJyb290LS0tLS0tLS0tLS0tLVwiLCByb290KTtcclxuICAgIHJvb3QuY2hpbGROb2Rlcy5mb3JFYWNoKChpdGVtKSA9PiB7XHJcbiAgICAgICh0aGlzLiRyZWZzLnN0cnVjdHVyZVRyZWUgYXMgYW55KS5zZXRDaGVja2VkKFxyXG4gICAgICAgIGl0ZW0uZGF0YS5ub2RlS2V5LFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIHRydWVcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgKHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnkpLnNldENoZWNrZWQoXHJcbiAgICAgIHRoaXMuY3VycmVudFRyZWVOb2RlRGF0YSxcclxuICAgICAgdHJ1ZSxcclxuICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGxldCB2aWV3ZXIgPSB0aGlzLnZpZXdlcjtcclxuICAgIHRoaXMudmlld2VyLmludmlzaWJsZU1hbmFnZXIuaW52aXNpYmxlSW52ZXJ0KFt0aGlzLmN1cnJlbnRUcmVlTm9kZURhdGFdKTtcclxuICAgIHZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcbiAgfVxyXG5cclxuICBjbGVhckhpZGVPYmplY3QoKSB7XHJcbiAgICBsZXQgcm9vdCA9ICh0aGlzLiRyZWZzLnN0cnVjdHVyZVRyZWUgYXMgYW55KS5yb290O1xyXG4gICAgcm9vdC5jaGlsZE5vZGVzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgKHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnkpLnNldENoZWNrZWQoXHJcbiAgICAgICAgaXRlbS5kYXRhLm5vZGVLZXksXHJcbiAgICAgICAgdHJ1ZSxcclxuICAgICAgICB0cnVlXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICAgIGxldCB2aWV3ZXIgPSB0aGlzLnZpZXdlcjtcclxuICAgIHZpZXdlci5pbnZpc2libGVNYW5hZ2VyLmNsZWFyQWxsSW52aXNpYmxlKCk7XHJcbiAgICB2aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xyXG4gIH1cclxuXHJcbiAgY2hlY2tDaGFuZ2UoZGF0YSkge1xyXG4gICAgbGV0IGNoZWNrZWROb2RlcztcclxuICAgIGxldCBjaGVja2VkS2V5cyA9ICh0aGlzLiRyZWZzLnN0cnVjdHVyZVRyZWUgYXMgYW55KS5nZXRDaGVja2VkS2V5cygpO1xyXG4gICAgbGV0IGhhbGZDaGVja2VkTm9kZXMgPSAoXHJcbiAgICAgIHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnlcclxuICAgICkuZ2V0SGFsZkNoZWNrZWROb2RlcygpO1xyXG4gICAgbGV0IGhhbGZDaGVja2VkS2V5cztcclxuICAgIHRoaXMudHJlZUNoZWNrKGRhdGEsIHtcclxuICAgICAgY2hlY2tlZE5vZGVzLFxyXG4gICAgICBjaGVja2VkS2V5cyxcclxuICAgICAgaGFsZkNoZWNrZWROb2RlcyxcclxuICAgICAgaGFsZkNoZWNrZWRLZXlzLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpc29sYXRlT2JqZWN0KCkge1xyXG4gICAgdGhpcy52aWV3ZXIuaXNvbGF0aW9uTWFuYWdlci5pc29sYXRpb24oW1xyXG4gICAgICB0aGlzLmN1cnJlbnRUcmVlTm9kZURhdGEuc2VnbWVudE9iamVjdCxcclxuICAgIF0pO1xyXG5cclxuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuICB9XHJcblxyXG4gIGlzb2xhdGVPdGhlck9iamVjdHMoKSB7XHJcbiAgICBsZXQgdmlld2VyID0gdGhpcy52aWV3ZXI7XHJcbiAgICB2aWV3ZXIuaXNvbGF0aW9uTWFuYWdlci5pc29sYXRpb25JbnZlcnQoW3RoaXMuY3VycmVudFRyZWVOb2RlRGF0YV0pO1xyXG4gICAgdmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFySXNvbGF0ZU9iamVjdHMoKSB7XHJcbiAgICB0aGlzLnZpZXdlci5pc29sYXRpb25NYW5hZ2VyLmNsZWFyQWxsSXNvbGF0aW9uKCk7XHJcbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcbiAgfVxyXG5cclxuICBvcGVuRWRpdEFsbFJlbmRlck9iamVjdENsaWNrKG5vZGUsIGRhdGEpIHtcclxuICAgIC8vIHRoaXMubW9kZWxPYmplY3RzQ2xvbmUgPSBbLi4udGhpcy5tb2RlbE9iamVjdHNdO1xyXG4gICAgLy8gdGhpcy5pc1RyZWVFZGl0aW5nID0gdHJ1ZTtcclxuICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgLy8gICB0aGlzLmV4cGFuZGVkS2V5cy5wdXNoKGRhdGEuY2hpbGROb2Rlc1swXS5rZXkpO1xyXG4gICAgLy8gICB0aGlzLnRyZWVOb2RlSG92ZXJLZXkgPSBkYXRhLmNoaWxkTm9kZXNbMF0ua2V5O1xyXG4gICAgLy8gfSwgMTAwKTtcclxuICB9XHJcblxyXG4gIGVkaXRBbGxSZW5kZXJPYmplY3RDb25maXJtKGRhdGEpIHtcclxuICAgIHRoaXMuaXNUcmVlRWRpdGluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy50cmVlTm9kZUhvdmVyS2V5ID0gbnVsbDtcclxuICB9XHJcblxyXG4gIGVkaXRBbGxSZW5kZXJPYmplY3RDYW5jZWwoZGF0YSkge1xyXG4gICAgLy8gdGhpcy5pc1RyZWVFZGl0aW5nID0gZmFsc2U7XHJcbiAgICAvLyB0aGlzLnRyZWVOb2RlSG92ZXJLZXkgPSBudWxsO1xyXG4gICAgLy8gdGhpcy5tb2RlbE9iamVjdHMgPSBbLi4udGhpcy5tb2RlbE9iamVjdHNDbG9uZV07XHJcbiAgICAvLyB0aGlzLmdldE1vZGVsT2JqZWN0cygpO1xyXG4gICAgLy8gdGhpcy5tb2RlbE9iamVjdHMgPSBbXTtcclxuICAgIC8vIHRoaXMuY3JlYXRlVHJlZSh0aGlzLm1vZGVsT2JqZWN0cywgKHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnkpLnJvb3QpO1xyXG4gIH1cclxuXHJcbiAgc2V0RGF0YSgpIHtcclxuICAgIHRoaXMuJGVtaXQoXCJzZXREYXRhXCIsIHtcclxuICAgICAgdGl0bGU6IFwi5qih5Z6L57uT5p6E5qCRXCIsXHJcbiAgICAgIHRvcDogXCIyMHB4XCIsXHJcbiAgICAgIGxlZnQ6IFwiMjBweFwiLFxyXG4gICAgICBoZWlnaHQ6IFwiNjAwcHhcIixcclxuICAgICAgd2lkdGg6IFwiMzAwcHhcIixcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZmluZFRyZWVOb2RlUGF0aChub2RlLCB0YXJnZXRLZXksIG5vZGVQYXRoOiBhbnlbXSkge1xyXG4gICAgaWYgKCF0aGlzLmxvb3BGbGFnKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBjaGlsZE5vZGVzID0gbm9kZS5jaGlsZE5vZGVzO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGxldCBjaGlsZE5vZGUgPSBjaGlsZE5vZGVzW2ldO1xyXG4gICAgICBsZXQgZGF0YSA9IGNoaWxkTm9kZS5kYXRhO1xyXG5cclxuICAgICAgbGV0IGRlZXBDbG9uZU5vZGVQYXRoID0gWy4uLm5vZGVQYXRoXTtcclxuXHJcbiAgICAgIGRlZXBDbG9uZU5vZGVQYXRoLnB1c2goY2hpbGROb2RlKTtcclxuICAgICAgaWYgKGRhdGEua2V5ICE9PSB0YXJnZXRLZXkpIHtcclxuICAgICAgICB0aGlzLmZpbmRUcmVlTm9kZVBhdGgoY2hpbGROb2RlLCB0YXJnZXRLZXksIGRlZXBDbG9uZU5vZGVQYXRoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm5vZGVQYXRoLnB1c2godGhpcy5yb290Tm9kZSk7XHJcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkZWVwQ2xvbmVOb2RlUGF0aC5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgdGhpcy5ub2RlUGF0aC5wdXNoKGRlZXBDbG9uZU5vZGVQYXRoW2pdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEdzbE5vZGUgPSBjaGlsZE5vZGU7XHJcbiAgICAgICAgdGhpcy5sb29wRmxhZyA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiBkZWVwQ2xvbmVOb2RlUGF0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0UGF0aEtleXModHJlZU5vZGVPYmplY3Q6IFRyZWVOb2RlT2JqZWN0LCBwYXRoS2V5czogTG9uZ2FuLkxpc3Q8c3RyaW5nPikge1xyXG4gICAgaWYgKHRyZWVOb2RlT2JqZWN0Lm5vZGVLZXkpIHtcclxuICAgICAgcGF0aEtleXMuYWRkKHRyZWVOb2RlT2JqZWN0Lm5vZGVLZXkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRyZWVOb2RlT2JqZWN0LnBhcmVudCkge1xyXG4gICAgICB0aGlzLmdldFBhdGhLZXlzKHRyZWVOb2RlT2JqZWN0LnBhcmVudCwgcGF0aEtleXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlTm9kZSh0cmVlTm9kZU9iamVjdDogVHJlZU5vZGVPYmplY3QpIHtcclxuICAgIGxldCBwYXRoS2V5czogTG9uZ2FuLkxpc3Q8c3RyaW5nPiA9IG5ldyBMb25nYW4uTGlzdCgpO1xyXG4gICAgaWYgKHRyZWVOb2RlT2JqZWN0KSB7XHJcbiAgICAgIHRoaXMuZ2V0UGF0aEtleXModHJlZU5vZGVPYmplY3QsIHBhdGhLZXlzKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBsZXQgdHJlZSA9IHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnk7XHJcbiAgICBwYXRoS2V5cy5pdGVtcy5yZXZlcnNlKCkuZm9yRWFjaCgobm9kZUtleSkgPT4ge1xyXG4gICAgICBpZiAobm9kZUtleSA9PT0gdGhpcy5sZXZlbDBOb2RlLmtleSkge1xyXG4gICAgICAgIHRoaXMubG9hZE5vZGUodGhpcy5sZXZlbDBOb2RlLCB0aGlzLmxldmVsME5vZGVSZXNvbHZlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxvYWROb2RlKHRoaXMuY3VycmVudE5vZGUsIHRoaXMuY3VycmVudE5vZGVSZXNvbHZlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBtb3VudGVkKCkge1xyXG4gICAgdGhpcy5zZXREYXRhKCk7XHJcbiAgICBjb25zb2xlLnRpbWUoXCJpbnRlcmZhY2VTdHJ1Y3R1cmVUcmVlIGdldE1vZGVsT2JqZWN0c1wiKTtcclxuICAgIHRoaXMuZ2V0TW9kZWxPYmplY3RzKCk7XHJcbiAgICBjb25zb2xlLnRpbWVFbmQoXCJpbnRlcmZhY2VTdHJ1Y3R1cmVUcmVlIGdldE1vZGVsT2JqZWN0c1wiKTtcclxuXHJcbiAgICBzdHJ1Y3R1cmVUcmVlQnVzLiRvbihcInVwZGF0ZVRyZWVcIiwgKGtleT8pID0+IHtcclxuICAgICAgY29uc29sZS5sb2coXCJzdHJ1Y3R1cmVUcmVlQnVzXCIpO1xyXG5cclxuICAgICAgbGV0IHRyZWU6IGFueSA9IHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZTtcclxuICAgICAgaWYgKHRyZWUpIHtcclxuICAgICAgICAvLyDojrflj5blvZPliY3pgInkuK3oioLngrnnmoRrZXnlgLxcclxuICAgICAgICBsZXQga2V5cyA9IHRyZWUuZ2V0Q2hlY2tlZEtleXMoKTtcclxuICAgICAgICAvLyDojrflj5blvZPliY3lsZXlvIDoioLngrnnmoRrZXnlgLxcclxuICAgICAgICBsZXQgZXhwYW5kZWRLZXlzID0gdHJlZS5nZXRDaGVja2VkS2V5cygpO1xyXG4gICAgICAgIC8vIOabtOaWsOaVsOaNrlxyXG4gICAgICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgbGV0IHRyZWVOb2RlID0gdGhpcy52aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXI/LnRyZWVOb2Rlc1trZXldO1xyXG5cclxuICAgICAgICAgIC8vIGlmICh0cmVlTm9kZSkge1xyXG4gICAgICAgICAgLy8gICBsZXQgZGF0YSA9IHRoaXMuZ2V0Tm9kZXMoW3RyZWVOb2RlXSlbMF07XHJcbiAgICAgICAgICAvLyAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgICAvLyAgICAgdHJlZS51cGRhdGVLZXlDaGlsZHJlbihrZXksIGRhdGEpO1xyXG4gICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAvLyB9XHJcblxyXG4gICAgICAgICAgdGhpcy51cGRhdGVOb2RlKHRyZWVOb2RlKTtcclxuXHJcbiAgICAgICAgICAvLyAvLyDojrflj5blvZPliY3oioLngrlcclxuICAgICAgICAgIC8vIGNvbnN0IG5vZGUgPSB0cmVlLmdldE5vZGUoa2V5KTtcclxuICAgICAgICAgIC8vIC8vIOabtOaWsOWtkOiKgueCueaVsOaNrlxyXG4gICAgICAgICAgLy8gbm9kZS5jaGlsZHJlbiA9IHRoaXMuZ2V0Tm9kZXModHJlZU5vZGUuY2hpbGROb2Rlcyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubGV2ZWwwTm9kZS5jaGlsZE5vZGVzID0gW107IC8v5oqK5a2Y6LW35p2l55qEbm9kZeeahOWtkOiKgueCuea4heepuu+8jOS4jeeEtuS8mueVjOmdouS8muWHuueOsOmHjeWkjeagke+8gVxyXG4gICAgICAgICAgdGhpcy5jaGVja0tleXMgPSBbXTtcclxuICAgICAgICAgIHRoaXMubG9hZE5vZGUodGhpcy5sZXZlbDBOb2RlLCB0aGlzLmxldmVsME5vZGVSZXNvbHZlKTtcclxuICAgICAgICAgIC8vIHRoaXMuY2hlY2tTdHJpY3RseSA9IHRydWU7XHJcbiAgICAgICAgICAvLyB0aGlzLmludmlzaWJsZUtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAvLyAgIGxldCBub2RlID0gKHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnkpLmdldE5vZGUoa2V5KTtcclxuICAgICAgICAgIC8vICAgbm9kZS5jaGVja2VkID0gbnVsbDtcclxuICAgICAgICAgIC8vICAgbm9kZS5wYXJlbnQuY2hlY2tlZCA9IG51bGw7XHJcbiAgICAgICAgICAvLyAgIC8vIG5vZGUucGFyZW50LmluZGV0ZXJtaW5hdGUgPSB0cnVlO1xyXG4gICAgICAgICAgLy8gICBjb25zb2xlLmxvZyhcIih0aGlzLiRyZWZzLnN0cnVjdHVyZVRyZWUgYXMgYW55KS5nZXROb2RlKGtleSlcIiwgbm9kZSk7XHJcbiAgICAgICAgICAvLyB9KTtcclxuICAgICAgICAgIC8vIHRoaXMuY2hlY2tTdHJpY3RseSA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIHRoaXMuc2hvd0xldmVsKDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyDph43mlrDli77pgInoioLngrlcclxuICAgICAgICAvLyB0cmVlLnNldENoZWNrZWRLZXlzKGtleXMpO1xyXG4gICAgICAgIC8vIOmHjeaWsOWxleW8gOiKgueCuVxyXG4gICAgICAgIHRyZWUuc2V0Q2hlY2tlZEtleXMoZXhwYW5kZWRLZXlzKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAvLyBsZXQgY29tcG9uZW50U2VsZWN0b3IgPSB0aGlzLnZpZXdlci5vcGVyYXRvck1hbmFnZXIuZmluZChcIkNvbXBvbmVudFNlbGVjdG9yXCIpIGFzIENvbXBvbmVudFNlbGVjdG9yO1xyXG4gICAgICAvLyBpZiAoY29tcG9uZW50U2VsZWN0b3IpIHtcclxuICAgICAgdGhpcy52aWV3ZXIub25MQnV0dG9uVXAuYWRkKHRoaXMuaGVpZ2hMaWdodCk7XHJcbiAgICAgIC8vIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYmVmb3JlRGVzdHJveSgpIHtcclxuICAgIGlmICh0aGlzLnZpZXdlcikge1xyXG4gICAgICAvLyBcdGxldCBjb21wb25lbnRTZWxlY3RvciA9IHRoaXMudmlld2VyLm9wZXJhdG9yTWFuYWdlci5maW5kKFwiQ29tcG9uZW50U2VsZWN0b3JcIikgYXMgQ29tcG9uZW50U2VsZWN0b3I7XHJcbiAgICAgIHRoaXMudmlld2VyLm9uTEJ1dHRvblVwLnJlbW92ZSh0aGlzLmhlaWdoTGlnaHQpO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-86.use[0]!./node_modules/babel-loader/lib/index.js!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-88.use[1]!./packages/bimAir/src/viewerWrapper/panels/structureTree/panes/structureTree.tsx?vue&type=script&lang=js&\n");
|
|
7405
|
+
eval("var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;__webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n__webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ \"./node_modules/core-js/modules/web.dom-collections.for-each.js\");\n__webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n__webpack_require__(/*! core-js/modules/es.function.name.js */ \"./node_modules/core-js/modules/es.function.name.js\");\n__webpack_require__(/*! core-js/modules/es.array.filter.js */ \"./node_modules/core-js/modules/es.array.filter.js\");\n__webpack_require__(/*! core-js/modules/es.array.map.js */ \"./node_modules/core-js/modules/es.array.map.js\");\n__webpack_require__(/*! core-js/modules/es.array.splice.js */ \"./node_modules/core-js/modules/es.array.splice.js\");\n__webpack_require__(/*! core-js/modules/es.array.concat.js */ \"./node_modules/core-js/modules/es.array.concat.js\");\n__webpack_require__(/*! core-js/modules/es.array.find-index.js */ \"./node_modules/core-js/modules/es.array.find-index.js\");\n__webpack_require__(/*! core-js/modules/es.object.to-string.js */ \"./node_modules/core-js/modules/es.object.to-string.js\");\n__webpack_require__(/*! core-js/modules/web.dom-collections.for-each.js */ \"./node_modules/core-js/modules/web.dom-collections.for-each.js\");\n__webpack_require__(/*! core-js/modules/es.array.push.js */ \"./node_modules/core-js/modules/es.array.push.js\");\n__webpack_require__(/*! core-js/modules/es.function.name.js */ \"./node_modules/core-js/modules/es.function.name.js\");\n__webpack_require__(/*! core-js/modules/es.array.filter.js */ \"./node_modules/core-js/modules/es.array.filter.js\");\n__webpack_require__(/*! core-js/modules/es.array.map.js */ \"./node_modules/core-js/modules/es.array.map.js\");\n__webpack_require__(/*! core-js/modules/es.array.splice.js */ \"./node_modules/core-js/modules/es.array.splice.js\");\n__webpack_require__(/*! core-js/modules/es.array.concat.js */ \"./node_modules/core-js/modules/es.array.concat.js\");\n__webpack_require__(/*! core-js/modules/es.array.find-index.js */ \"./node_modules/core-js/modules/es.array.find-index.js\");\n!(__WEBPACK_AMD_DEFINE_ARRAY__ = [__webpack_require__, exports, __webpack_require__(/*! tslib */ \"./node_modules/tslib/tslib.es6.js\"), __webpack_require__(/*! vue-property-decorator */ \"./node_modules/vue-property-decorator/lib/vue-property-decorator.js\"), __webpack_require__(/*! gs-longan */ \"./packages/longan/src/index.ts\"), __webpack_require__(/*! ../../../../gsDevFx/api */ \"./packages/bimAir/src/gsDevFx/api/index.ts\"), __webpack_require__(/*! ../../../../components/gs/gsDivider/gs-divider.vue */ \"./packages/bimAir/src/components/gs/gsDivider/gs-divider.vue\"), __webpack_require__(/*! ../../../../components/el/tree */ \"./packages/bimAir/src/components/el/tree/index.js\"), __webpack_require__(/*! element-ui */ \"./node_modules/element-ui/lib/element-ui.common.js\"), __webpack_require__(/*! ../../../module/createMenu */ \"./packages/bimAir/src/viewerWrapper/module/createMenu.tsx\"), __webpack_require__(/*! ../../../../store/structureTree */ \"./packages/bimAir/src/store/structureTree.ts\"), __webpack_require__(/*! gs-longan/longan/idb */ \"./packages/longan/src/longan/idb.ts\"), __webpack_require__(/*! ../structureTreeBus */ \"./packages/bimAir/src/viewerWrapper/panels/structureTree/structureTreeBus.ts\")], __WEBPACK_AMD_DEFINE_RESULT__ = (function (require, exports, tslib_1, vue_property_decorator_1, Longan, LonganApi, gs_divider_vue_1, tree_1, element_ui_1, createMenu_1, structureTree_1, idb_1, structureTreeBus_1) {\n \"use strict\";\n\n Object.defineProperty(exports, \"__esModule\", ({\n value: true\n }));\n Longan = tslib_1.__importStar(Longan);\n LonganApi = tslib_1.__importStar(LonganApi);\n gs_divider_vue_1 = tslib_1.__importDefault(gs_divider_vue_1);\n tree_1 = tslib_1.__importDefault(tree_1);\n structureTree_1 = tslib_1.__importDefault(structureTree_1);\n idb_1 = tslib_1.__importDefault(idb_1);\n structureTreeBus_1 = tslib_1.__importDefault(structureTreeBus_1);\n vue_property_decorator_1.Vue.use(tree_1.default);\n vue_property_decorator_1.Vue.use(element_ui_1.Button);\n vue_property_decorator_1.Vue.use(element_ui_1.Input);\n vue_property_decorator_1.Vue.use(element_ui_1.Form);\n vue_property_decorator_1.Vue.use(element_ui_1.FormItem);\n var InterfaceStructureTree = function (_super) {\n tslib_1.__extends(InterfaceStructureTree, _super);\n function InterfaceStructureTree() {\n var _this = _super !== null && _super.apply(this, arguments) || this;\n _this.searchValue = \"\";\n _this.treeProps = {\n label: \"name\",\n children: \"childNodes\",\n isLeaf: \"isLeaf\",\n expaned: \"expaned\"\n };\n _this.treeCheckedNos = [];\n _this.treeExpandAll = true;\n _this.draggingNode = null;\n _this.treeModelStructure = null;\n _this.selectedKey = -1;\n _this.selectedPath = \"\";\n _this.checkKeys = [];\n _this.invisibleKeys = [];\n _this.expandedKeys = [];\n _this.currentTreeKey = null;\n _this.isEditingKey = null;\n _this.nameValue = \"\";\n _this.modelObjectsClone = [];\n _this.parentSegmentKey = null;\n _this.treeNodeHoverKey = null;\n _this.isTreeEditing = false;\n _this.operatorList = [];\n _this.isolationIds = [];\n _this.levelOneData = [];\n _this.loopFlag = false;\n _this.selectedGslNode = null;\n _this.nodePath = [];\n _this.chooseNode = null;\n _this.rootNode = null;\n _this.lastNoCheckedRootNodes = [];\n _this.count = 0;\n _this.end = false;\n _this.isolationKeys = [];\n _this.isTreeLocate = localStorage.getItem(\"isTreeLocate\") !== \"false\";\n _this.checkStrictly = false;\n _this.draggingNodeChecked = true;\n _this.buttonList = [{\n name: \"编辑\",\n children: [{\n name: \"添加\",\n clickFun: function clickFun() {\n _this.addRenderObjectClick();\n }\n }, {\n name: \"重命名\",\n clickFun: function clickFun() {\n _this.renameRenderObjectClick();\n }\n }, {\n name: \"删除\",\n clickFun: function clickFun() {\n _this.deleteRenderObjectClick();\n }\n }]\n }, {\n name: \"隐藏\",\n children: [{\n name: \"隐藏选中对象\",\n clickFun: function clickFun() {\n _this.hideObject();\n }\n }, {\n name: \"隐藏其他对象\",\n clickFun: function clickFun() {\n _this.reHideObject();\n }\n }, {\n name: \"显示全部对象\",\n clickFun: function clickFun() {\n _this.clearHideObject();\n }\n }]\n }, {\n name: \"隔离\",\n children: [{\n name: \"隔离选中对象\",\n clickFun: function clickFun() {\n _this.isolateObject();\n }\n }, {\n name: \"隔离其他对象\",\n clickFun: function clickFun() {\n _this.isolateOtherObjects();\n }\n }, {\n name: \"取消隔离\",\n clickFun: function clickFun() {\n _this.clearIsolateObjects();\n }\n }]\n }, {\n name: \"展开\",\n children: [{\n name: \"展开一层\",\n clickFun: function clickFun() {\n _this.showLevel(1);\n }\n }, {\n name: \"展开二层\",\n clickFun: function clickFun() {\n _this.showLevel(2);\n }\n }, {\n name: \"展开三层\",\n clickFun: function clickFun() {\n _this.showLevel(3);\n }\n }, {\n name: \"全部收起\",\n clickFun: function clickFun() {\n _this.setAllExpand(false);\n }\n }]\n }];\n _this.structureTree = structureTree_1.default;\n _this.heighLight = function () {\n var segObj = _this.viewer.selectionManager.segmentObject;\n console.log(\"选中的对象:\", segObj);\n if (segObj) {\n var treeNodeObject = _this.viewer.structureTreeManager.treeNodes[segObj.nodeKey];\n var pathKeys = new Longan.List();\n if (treeNodeObject) {\n _this.getPathKeys(treeNodeObject, pathKeys);\n }\n var tree_2 = _this.$refs.structureTree;\n pathKeys.items.reverse().forEach(function (nodeKey) {\n setTimeout(function () {\n var node = tree_2.getNode(nodeKey);\n if (node) {\n node.expand();\n }\n }, 0);\n });\n setTimeout(function () {\n _this.locateCurrentNode(segObj.nodeKey);\n tree_2.setCurrentKey(segObj.nodeKey);\n }, 10);\n }\n };\n return _this;\n }\n Object.defineProperty(InterfaceStructureTree.prototype, \"viewer\", {\n get: function get() {\n return this.getViewer();\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(InterfaceStructureTree.prototype, \"tabs\", {\n get: function get() {\n var tabs = this.viewer.options.components.property.tabs;\n return tabs;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(InterfaceStructureTree.prototype, \"viewerType\", {\n get: function get() {\n return this.viewer.options.viewerType;\n },\n enumerable: false,\n configurable: true\n });\n InterfaceStructureTree.prototype.loadNode = function (node, resolve) {\n var _this = this;\n var _a, _b;\n if (!this.viewer) {\n resolve([]);\n }\n this.checkStrictly = true;\n if ((_b = (_a = this.viewer) === null || _a === void 0 ? void 0 : _a.structureTreeManager) === null || _b === void 0 ? void 0 : _b.rootNode) {\n this.$nextTick(function () {\n var _a;\n _this.currentNode = node;\n _this.currentNodeResolve = resolve;\n if (node.level === 0) {\n var result = void 0;\n _this.level0Node = node;\n _this.level0NodeResolve = resolve;\n if (_this.viewer.renderObject && _this.viewer.renderObject.showTreeNode) {\n result = _this.getNodes([_this.viewer.structureTreeManager.rootNode]);\n if (_this.invisibleKeys.indexOf(result[0].nodeKey) === -1) {\n _this.checkKeys.push(result[0].nodeKey);\n }\n } else {\n result = _this.getNodes(_this.viewer.structureTreeManager.rootNode.childNodes);\n result.forEach(function (item) {\n if (_this.invisibleKeys.indexOf(item.nodeKey) === -1) {\n _this.checkKeys.push(item.nodeKey);\n }\n });\n }\n resolve(result);\n } else {\n var treeNode = (_a = _this.viewer.structureTreeManager) === null || _a === void 0 ? void 0 : _a.treeNodes[node.data.nodeKey];\n if (treeNode) {\n var childNodes = treeNode.childNodes;\n var result = _this.getNodes(childNodes);\n result.forEach(function (item) {\n if (_this.invisibleKeys.indexOf(item.nodeKey) === -1) {\n _this.checkKeys.push(item.nodeKey);\n }\n });\n return resolve(result);\n } else {\n return resolve([]);\n }\n }\n });\n setTimeout(function () {\n _this.checkStrictly = false;\n }, 20);\n }\n };\n InterfaceStructureTree.prototype.getNodes = function (treeNodeObjects) {\n var _this = this;\n var result = [];\n treeNodeObjects.forEach(function (item) {\n result.push({\n name: item.name,\n nodeKey: item.nodeKey,\n isShow: item.isShow,\n isLeaf: item.childNodes.length === 0,\n expaned: _this.expandedKeys.indexOf(item.nodeKey) !== -1\n });\n });\n return result;\n };\n InterfaceStructureTree.prototype.isTreeLocateChange = function (val) {\n localStorage.setItem(\"isTreeLocate\", val);\n this.isTreeLocate = val;\n };\n InterfaceStructureTree.prototype.locateCurrentNode = function (nodeKey) {\n if (!this.isTreeLocate) {\n return;\n }\n this.count = 0;\n this.end = false;\n var tree = document.getElementById(\"structureTree\");\n var node = this.$refs.structureTree.store.root;\n this.countExpandNode(node, nodeKey);\n var count = this.count;\n var parentElement = tree.parentElement;\n parentElement.scrollTo(0, count * 26 - 60);\n };\n InterfaceStructureTree.prototype.countExpandNode = function (node, nodeKey) {\n if (!this.end) {\n if (node.expanded || this.count === 0 || node.data.nodeKey === nodeKey) {\n this.count += 1;\n if (node.data && node.data.nodeKey === nodeKey) {\n this.end = true;\n return this.count;\n }\n if (node.childNodes) {\n for (var i = 0, len = node.childNodes.length; i < len; i++) {\n this.countExpandNode(node.childNodes[i], nodeKey);\n }\n }\n } else {\n this.count += 1;\n }\n }\n };\n InterfaceStructureTree.prototype.findRoVisible = function (insObj, checkedNos) {\n if (insObj.renderObject.visible) {\n checkedNos.push(insObj.no);\n }\n for (var i = 0; i < insObj.childObjects.length; i++) {\n this.findRoVisible(insObj.childObjects[i], checkedNos);\n }\n };\n InterfaceStructureTree.prototype.getModelObjects = function () {\n var viewer = this.viewer;\n if (viewer && viewer.instanceObject) {\n var insObj = viewer.instanceObject;\n var treeCheckedNos = [];\n this.findRoVisible(insObj, treeCheckedNos);\n this.treeCheckedNos = treeCheckedNos;\n var rootNode = this.componentData && this.componentData.structureTree ? this.componentData.structureTree[0] : this.viewer.structureTreeManager.rootNode;\n if (this.viewer.renderObject.showTreeNode) {\n this.currentTreeNodeData = rootNode;\n } else {\n this.currentTreeNodeData = rootNode.childNodes[0];\n }\n this.showLevel(1);\n } else {\n this.treeCheckedNos = [];\n }\n };\n InterfaceStructureTree.prototype.searchValueChange = function (val) {\n if (val) {\n var treeNodes = this.viewer.structureTreeManager.treeNodes;\n var tree_3 = this.$refs.structureTree;\n for (var key in treeNodes) {\n if (treeNodes[key].name.indexOf(this.searchValue) !== -1) {\n var treeNodeObject = treeNodes[key];\n var pathKeys = new Longan.List();\n if (treeNodeObject) {\n this.getPathKeys(treeNodeObject, pathKeys);\n }\n pathKeys.items.reverse().forEach(function (nodeKey) {\n var node = tree_3.getNode(nodeKey);\n if (node) {\n node.expand();\n }\n });\n }\n }\n }\n this.$refs.structureTree.filter(this.searchValue);\n };\n InterfaceStructureTree.prototype.filterNode = function (value, data) {\n if (!value) {\n return true;\n }\n return data.name.indexOf(value) !== -1;\n };\n InterfaceStructureTree.prototype.treeCheck = function (data, _a) {\n var checkedNodes = _a.checkedNodes,\n checkedKeys = _a.checkedKeys,\n halfCheckedNodes = _a.halfCheckedNodes,\n halfCheckedKeys = _a.halfCheckedKeys;\n var treeNodeObject = this.viewer.structureTreeManager.treeNodes[data.nodeKey];\n if (checkedNodes.map(function (item) {\n return item.nodeKey;\n }).indexOf(treeNodeObject.nodeKey) === -1) {\n this.viewer.invisibleManager.invisible([treeNodeObject]);\n this.invisibleKeys.push(treeNodeObject.nodeKey);\n console.log(\"隐藏节点keys\", this.invisibleKeys);\n } else {\n this.viewer.invisibleManager.clearInvisible([treeNodeObject]);\n var index = this.invisibleKeys.indexOf(treeNodeObject.nodeKey);\n if (index !== -1) {\n this.invisibleKeys.splice(index, 1);\n }\n }\n this.viewer.updateDisplay();\n if (this.viewer.options.components.structureTree.defaultTab.checkFun) {\n this.viewer.options.components.structureTree.defaultTab.checkFun(treeNodeObject, {\n checkedNodes: checkedNodes,\n checkedKeys: checkedKeys,\n halfCheckedNodes: halfCheckedNodes,\n halfCheckedKeys: halfCheckedKeys\n });\n }\n };\n InterfaceStructureTree.prototype.findInvisibleRootNodes = function (rootNode, halfCheckedNodes, invisibleRootNodes) {\n if (rootNode.checked === false) {\n if (halfCheckedNodes.indexOf(rootNode.data) === -1) {\n invisibleRootNodes.push(rootNode.data);\n } else {\n var childNodes = rootNode.childNodes;\n for (var i = 0; i < childNodes.length; i++) {\n this.findInvisibleRootNodes(childNodes[i], halfCheckedNodes, invisibleRootNodes);\n }\n }\n }\n };\n InterfaceStructureTree.prototype.treeNodeClick = function (data, node) {\n var treeNode = this.viewer.structureTreeManager.treeNodes[data.nodeKey];\n console.log(\"treeNodeClick\", node, treeNode);\n this.currentTreeNodeData = treeNode;\n this.viewer.selectionManager.clearAllSelectionAndHighlight();\n this.viewer.selectionManager.selectAndHighlight([treeNode]);\n this.viewer.locateObject(treeNode);\n this.viewer.panelManager.propertyPanel.getProperty(treeNode.segmentObject);\n if (this.viewer.options.components.structureTree.clickFun) {\n this.viewer.options.components.structureTree.clickFun(treeNode);\n }\n if (this.viewer.options.components.structureTree.defaultTab.clickFun) {\n this.viewer.options.components.structureTree.defaultTab.clickFun(treeNode);\n }\n this.viewer.updateDisplay();\n };\n InterfaceStructureTree.prototype.createTree = function (newTree, node) {\n var newNode = null;\n if (node.data) {\n newNode = {\n key: node.data.key,\n name: node.data.name,\n items: []\n };\n if (newTree.items) {\n newTree.items.push(newNode);\n } else {\n newTree.push(newNode);\n }\n }\n if (!newNode) {\n newNode = newTree;\n }\n for (var i = 0; i < node.childNodes.length; i++) {\n this.createTree(newNode, node.childNodes[i]);\n }\n };\n InterfaceStructureTree.prototype.getProperties = function (key) {\n var segment = new Longan.Segment(key);\n var jsonString = segment.property.showString(\"Properties\");\n var showParentProperty = segment.property.showBoolean(\"showParentProperties\");\n if (showParentProperty) {\n var key_1 = segment.owner.key;\n jsonString = this.getParentProperties(key_1);\n }\n return JSON.parse(jsonString);\n };\n InterfaceStructureTree.prototype.getParentProperties = function (key) {\n var segment = new Longan.Segment(key);\n var properties = segment.property.showString(\"Properties\");\n if (properties) {\n return properties;\n } else {\n return this.getParentProperties(segment.owner.key);\n }\n };\n InterfaceStructureTree.prototype.treeNodeDragStart = function (node, ev) {\n this.draggingNode = node;\n this.currentTreeNode = node;\n this.currentTreeNodeData = this.viewer.structureTreeManager.treeNodes[node.data.nodeKey];\n this.draggingNodeChecked = node.checked;\n console.log(\"this.draggingNodeChecked \", this.draggingNodeChecked);\n };\n InterfaceStructureTree.prototype.treeNodeDragEnter = function (draggingNode, overNode, ev) {\n console.log(\"this.treeNodeDragEnterTimer\");\n };\n InterfaceStructureTree.prototype.treeNodeDragEnd = function (draggingNode, dropNode, dropType) {};\n InterfaceStructureTree.prototype.treeNodeDrop = function (draggingNode, dropNode, dropType, ev) {\n var _this = this;\n console.log(\"dropNode.expend\", dropNode);\n this.$confirm(\"\\u662F\\u5426\\u5C06\\u8282\\u70B9\".concat(draggingNode.label, \"\\u79FB\\u52A8\\u5230\").concat(dropNode.label).concat(dropType == \"before\" ? \"之前\" : dropType == \"after\" ? \"之后\" : \"下\", \"?\"), \"提示\", {\n confirmButtonText: \"确定\",\n cancelButtonText: \"取消\",\n type: \"warning\"\n }).then(function () {\n _this.dropConfirm(draggingNode, dropNode, dropType).then(function () {\n _this.$message({\n type: \"success\",\n message: \"移动成功!\"\n });\n if (dropNode === \"inner\") {\n structureTreeBus_1.default.$emit(\"updateTree\", dropNode.key);\n } else {\n structureTreeBus_1.default.$emit(\"updateTree\", dropNode.parent.key);\n }\n });\n }).catch(function () {\n _this.$message({\n type: \"info\",\n message: \"取消移动\"\n });\n structureTreeBus_1.default.$emit(\"updateTree\", dropNode.parent.key);\n });\n };\n InterfaceStructureTree.prototype.dropConfirm = function (draggingNode, dropNode, dropType) {\n var _this = this;\n function getIndex(parent, child) {\n for (var i = 0, len = parent.childNodes.length; i < len; i++) {\n var item = parent.childNodes[i];\n if (item.key === child.key) {\n return i;\n }\n }\n return -1;\n }\n var index = -1;\n var dropSegment;\n var draggingTreeNode = this.viewer.structureTreeManager.treeNodes[draggingNode.data.nodeKey];\n var dropTreeNode;\n var targetSegIndex;\n switch (dropType) {\n case \"inner\":\n dropTreeNode = this.viewer.structureTreeManager.treeNodes[dropNode.key];\n dropSegment = dropTreeNode.segment;\n targetSegIndex = dropTreeNode.childNodes.length;\n this.expandedKeys.push(dropNode.data.key);\n break;\n case \"before\":\n index = getIndex(dropNode.parent, dropNode);\n dropTreeNode = this.viewer.structureTreeManager.treeNodes[dropNode.parent.key];\n dropSegment = this.viewer.structureTreeManager.treeNodes[dropNode.key].segment.owner;\n targetSegIndex = index - 1;\n break;\n case \"after\":\n index = getIndex(dropNode.parent, dropNode);\n dropSegment = this.viewer.structureTreeManager.treeNodes[dropNode.key].segment.owner;\n dropTreeNode = this.viewer.structureTreeManager.treeNodes[dropNode.parent.key];\n targetSegIndex = index + 1;\n break;\n }\n var draggingNodeChecked = this.draggingNodeChecked;\n return draggingTreeNode.moveToIndexWithRequestApi(dropTreeNode, dropSegment, targetSegIndex).then(function () {\n console.log(\"this.$refs.structureTree \", _this.$refs.structureTree, draggingNode, draggingNode.key, draggingNodeChecked);\n _this.$refs.structureTree.setChecked(draggingNode.key, draggingNodeChecked, true);\n return _this.updateIndexedDB();\n });\n };\n InterfaceStructureTree.prototype.addRenderObjectClick = function () {\n var _this = this;\n var data = this.currentTreeNodeData;\n if (data.childNodes) {\n for (var i = 0; i < data.childNodes.length; i++) {\n if (data.childNodes[i].nodeKey === \"-1\") {\n return;\n }\n }\n }\n this.parentSegmentKey = data.key;\n this.nameValue = \"\";\n var parent = this.currentTreeNode;\n parent.expand();\n this.$refs.structureTree.append({\n name: \" \",\n nodeKey: \"-1\",\n isShow: true\n }, parent);\n this.isEditingKey = \"-1\";\n setTimeout(function () {\n _this.locateCurrentNode(\"-1\");\n var input = _this.$refs.editingTreeNodeInput;\n if (input) {\n input.focus();\n }\n }, 10);\n };\n InterfaceStructureTree.prototype.renameRenderObjectClick = function () {\n var _this = this;\n var data = this.currentTreeNodeData;\n this.isEditingKey = data.nodeKey;\n this.nameValue = data.name;\n setTimeout(function () {\n _this.$refs.editingTreeNodeInput.focus();\n }, 10);\n };\n InterfaceStructureTree.prototype.deleteRenderObjectClick = function () {\n var _this = this;\n var data = this.currentTreeNodeData;\n var node = this.currentTreeNode;\n element_ui_1.MessageBox.confirm(\"\\u786E\\u5B9A\\u5220\\u9664\".concat(data.name, \"\\u8282\\u70B9\\uFF1F\"), \"提示\", {\n confirmButtonText: \"确定\",\n cancelButtonText: \"取消\",\n type: \"warning\"\n }).then(function () {\n _this.updateIndexedDB();\n _this.currentTreeNodeData.deleteWithRequestApi(true).then(function () {\n var children = node.parent.childNodes;\n var index = children.findIndex(function (d) {\n return d.data.nodeKey === node.data.nodeKey;\n });\n if (index >= 0) {\n children.splice(index, 1);\n } else {\n _this.$message.warning(\"节点删除出错\");\n }\n });\n });\n };\n InterfaceStructureTree.prototype.editRenderObjectConfirm = function (node, data) {\n var _this = this;\n var treeNode = this.viewer.structureTreeManager.treeNodes[data.nodeKey];\n if (data.nodeKey === \"-1\") {\n var segment = new LonganApi.Segment(this.parentSegmentKey);\n if (!this.nameValue) {\n element_ui_1.Message.warning(\"节点名不能为空\");\n return;\n }\n if (segment.subsegmentExists(this.nameValue)) {\n element_ui_1.Message.warning(\"此节点已存在,请重命名\");\n } else {\n var parent_1 = node.parent;\n var children = parent_1.childNodes;\n var index = children.findIndex(function (d) {\n return d.nodeKey === data.nodeKey;\n });\n children.splice(index, 1);\n var parentTreeNode = this.viewer.structureTreeManager.treeNodes[parent_1.data.nodeKey];\n console.log(\"parentTreeNode\", parentTreeNode);\n if (parentTreeNode) {\n parentTreeNode.addWithRequestApi(this.nameValue, true).then(function (treeNodeObject) {\n data.nodeKey = treeNodeObject.nodeKey;\n data.name = treeNodeObject.name;\n _this.isEditingKey = null;\n _this.nameValue = \"\";\n _this.$refs.structureTree.append({\n name: treeNodeObject.name,\n nodeKey: treeNodeObject.nodeKey,\n isShow: true\n }, parent_1);\n _this.$refs.structureTree.setChecked(data.nodeKey, true, true);\n _this.$refs.structureTree.setChecked(treeNodeObject.nodeKey, true, true);\n _this.updateIndexedDB();\n });\n }\n }\n } else {\n if (this.nameValue) {\n this.currentTreeNodeData.renameWithRequestApi(this.nameValue).then(function () {\n _this.updateIndexedDB();\n });\n data.name = this.nameValue;\n this.isEditingKey = null;\n this.nameValue = \"\";\n } else {\n element_ui_1.Message.warning(\"名字不能为空\");\n }\n }\n };\n InterfaceStructureTree.prototype.editRenderObjectCancel = function (node, data) {\n if (data.nodeKey === \"-1\") {\n var parent = node.parent;\n var children = parent.childNodes;\n var index = children.findIndex(function (d) {\n return d.nodeKey === data.nodeKey;\n });\n children.splice(index, 1);\n } else {\n this.isEditingKey = null;\n }\n };\n InterfaceStructureTree.prototype.updateIndexedDB = function () {\n var treeNode = this.currentTreeNodeData;\n idb_1.default.getInstance(treeNode.modelId).del(treeNode.modelId + \"?v=\" + treeNode.model.renderObject.version);\n };\n InterfaceStructureTree.prototype.treeNodeMouseOver = function (data) {\n this.treeNodeHoverKey = data.key;\n };\n InterfaceStructureTree.prototype.treeNodeMouseLeave = function (data) {\n this.treeNodeHoverKey = null;\n };\n InterfaceStructureTree.prototype.isBindModelExist = function (modelId) {\n return false;\n };\n InterfaceStructureTree.prototype.treeNodeContextMenuClick = function (e, data, node, nodeElement) {\n var treeNodeObject = this.viewer.structureTreeManager.treeNodes[data.nodeKey];\n console.log(\"treeNodeContextMenuClick\", e);\n this.currentTreeNodeData = treeNodeObject;\n this.currentTreeNode = node;\n (0, createMenu_1.createMenu)(e.pageX, e.pageY, this.buttonList);\n };\n InterfaceStructureTree.prototype.treeNodeExpand = function (data, node, e) {\n console.log(data, node, e);\n this.expandedKeys.push(data.nodeKey);\n };\n InterfaceStructureTree.prototype.treeNodeCollapse = function (data, node, e) {\n var index = this.expandedKeys.indexOf(data.nodeKey);\n if (index !== -1) {\n this.expandedKeys.splice(index, 1);\n }\n };\n InterfaceStructureTree.prototype.showLevel = function (level) {\n var _this = this;\n setTimeout(function () {\n var node = _this.currentTreeNodeData;\n _this.expandLevel(node, level);\n }, 10);\n };\n InterfaceStructureTree.prototype.expandLevel = function (node, level) {\n var _this = this;\n var _a;\n if (node) {\n node.loaded = false;\n var nodeDom = (_a = this.$refs.structureTree) === null || _a === void 0 ? void 0 : _a.getNode(node.nodeKey);\n if (nodeDom) {\n nodeDom.expand();\n }\n }\n setTimeout(function () {\n var currentLevel = level - 1;\n if (currentLevel > 0) {\n for (var i = 0; i < node.childNodes.length; i++) {\n var item = node.childNodes[i];\n if (item.childNodes && item.childNodes.length > 0) {\n _this.expandLevel(item, currentLevel);\n }\n }\n }\n }, 10);\n };\n InterfaceStructureTree.prototype.setAllExpand = function (state) {\n var nodes = this.$refs.structureTree.store.root;\n this.expandNode(nodes, state);\n };\n InterfaceStructureTree.prototype.expandNode = function (node, state) {\n node.expanded = state;\n for (var i = 0, len = node.childNodes.length; i < len; i++) {\n if (node.childNodes[i].childNodes.length > 0) {\n this.expandNode(node.childNodes[i], state);\n }\n }\n };\n InterfaceStructureTree.prototype.hideObject = function () {\n console.log(\"hideObject\");\n this.$refs.structureTree.setChecked(this.currentTreeNodeData, false, true);\n var viewer = this.viewer;\n viewer.invisibleManager.invisible([this.currentTreeNodeData]);\n viewer.updateDisplay();\n };\n InterfaceStructureTree.prototype.reHideObject = function () {\n var _this = this;\n var root = this.$refs.structureTree.root;\n console.log(\"root-------------\", root);\n root.childNodes.forEach(function (item) {\n _this.$refs.structureTree.setChecked(item.data.nodeKey, false, true);\n });\n this.$refs.structureTree.setChecked(this.currentTreeNodeData, true, true);\n var viewer = this.viewer;\n this.viewer.invisibleManager.invisibleInvert([this.currentTreeNodeData]);\n viewer.updateDisplay();\n };\n InterfaceStructureTree.prototype.clearHideObject = function () {\n var _this = this;\n var root = this.$refs.structureTree.root;\n root.childNodes.forEach(function (item) {\n _this.$refs.structureTree.setChecked(item.data.nodeKey, true, true);\n });\n var viewer = this.viewer;\n viewer.invisibleManager.clearAllInvisible();\n viewer.updateDisplay();\n };\n InterfaceStructureTree.prototype.checkChange = function (data) {\n var checkedNodes;\n var checkedKeys = this.$refs.structureTree.getCheckedKeys();\n var halfCheckedNodes = this.$refs.structureTree.getHalfCheckedNodes();\n var halfCheckedKeys;\n this.treeCheck(data, {\n checkedNodes: checkedNodes,\n checkedKeys: checkedKeys,\n halfCheckedNodes: halfCheckedNodes,\n halfCheckedKeys: halfCheckedKeys\n });\n };\n InterfaceStructureTree.prototype.isolateObject = function () {\n this.viewer.isolationManager.isolation([this.currentTreeNodeData.segmentObject]);\n this.viewer.updateDisplay();\n };\n InterfaceStructureTree.prototype.isolateOtherObjects = function () {\n var viewer = this.viewer;\n viewer.isolationManager.isolationInvert([this.currentTreeNodeData]);\n viewer.updateDisplay();\n };\n InterfaceStructureTree.prototype.clearIsolateObjects = function () {\n this.viewer.isolationManager.clearAllIsolation();\n this.viewer.updateDisplay();\n };\n InterfaceStructureTree.prototype.openEditAllRenderObjectClick = function (node, data) {};\n InterfaceStructureTree.prototype.editAllRenderObjectConfirm = function (data) {\n this.isTreeEditing = false;\n this.treeNodeHoverKey = null;\n };\n InterfaceStructureTree.prototype.editAllRenderObjectCancel = function (data) {};\n InterfaceStructureTree.prototype.setData = function () {\n this.$emit(\"setData\", {\n title: \"模型结构树\",\n top: \"20px\",\n left: \"20px\",\n height: \"600px\",\n width: \"300px\"\n });\n };\n InterfaceStructureTree.prototype.findTreeNodePath = function (node, targetKey, nodePath) {\n if (!this.loopFlag) {\n return;\n }\n var childNodes = node.childNodes;\n for (var i = 0; i < childNodes.length; i++) {\n var childNode = childNodes[i];\n var data = childNode.data;\n var deepCloneNodePath = tslib_1.__spreadArray([], tslib_1.__read(nodePath), false);\n deepCloneNodePath.push(childNode);\n if (data.key !== targetKey) {\n this.findTreeNodePath(childNode, targetKey, deepCloneNodePath);\n } else {\n this.nodePath.push(this.rootNode);\n for (var j = 0; j < deepCloneNodePath.length; j++) {\n this.nodePath.push(deepCloneNodePath[j]);\n }\n this.selectedGslNode = childNode;\n this.loopFlag = false;\n return deepCloneNodePath;\n }\n }\n };\n InterfaceStructureTree.prototype.getPathKeys = function (treeNodeObject, pathKeys) {\n if (treeNodeObject.nodeKey) {\n pathKeys.add(treeNodeObject.nodeKey);\n }\n if (treeNodeObject.parent) {\n this.getPathKeys(treeNodeObject.parent, pathKeys);\n }\n };\n InterfaceStructureTree.prototype.updateNode = function (treeNodeObject) {\n var _this = this;\n var pathKeys = new Longan.List();\n if (treeNodeObject) {\n this.getPathKeys(treeNodeObject, pathKeys);\n }\n pathKeys.items.reverse().forEach(function (nodeKey) {\n if (nodeKey === _this.level0Node.key) {\n _this.loadNode(_this.level0Node, _this.level0NodeResolve);\n } else {\n _this.loadNode(_this.currentNode, _this.currentNodeResolve);\n }\n });\n };\n InterfaceStructureTree.prototype.mounted = function () {\n var _this = this;\n this.setData();\n console.time(\"interfaceStructureTree getModelObjects\");\n this.getModelObjects();\n console.timeEnd(\"interfaceStructureTree getModelObjects\");\n structureTreeBus_1.default.$on(\"updateTree\", function (key) {\n var _a;\n console.log(\"structureTreeBus\");\n var tree = _this.$refs.structureTree;\n if (tree) {\n var keys = tree.getCheckedKeys();\n var expandedKeys = tree.getCheckedKeys();\n if (key !== undefined) {\n var treeNode = (_a = _this.viewer.structureTreeManager) === null || _a === void 0 ? void 0 : _a.treeNodes[key];\n _this.updateNode(treeNode);\n } else {\n _this.level0Node.childNodes = [];\n _this.checkKeys = [];\n _this.loadNode(_this.level0Node, _this.level0NodeResolve);\n _this.showLevel(1);\n }\n tree.setCheckedKeys(expandedKeys);\n }\n });\n this.$nextTick(function () {\n _this.viewer.onLButtonUp.add(_this.heighLight);\n });\n };\n InterfaceStructureTree.prototype.beforeDestroy = function () {\n if (this.viewer) {\n this.viewer.onLButtonUp.remove(this.heighLight);\n }\n };\n tslib_1.__decorate([(0, vue_property_decorator_1.Prop)()], InterfaceStructureTree.prototype, \"componentData\", void 0);\n tslib_1.__decorate([(0, vue_property_decorator_1.Inject)()], InterfaceStructureTree.prototype, \"getViewer\", void 0);\n InterfaceStructureTree = tslib_1.__decorate([(0, vue_property_decorator_1.Component)({\n components: {\n GsDivider: gs_divider_vue_1.default\n }\n })], InterfaceStructureTree);\n return InterfaceStructureTree;\n }(vue_property_decorator_1.Vue);\n exports[\"default\"] = InterfaceStructureTree;\n}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcz8/Y2xvbmVkUnVsZVNldC04Ni51c2VbMF0hLi9ub2RlX21vZHVsZXMvYmFiZWwtbG9hZGVyL2xpYi9pbmRleC5qcyEuL25vZGVfbW9kdWxlcy9AdnVlL2NsaS1wbHVnaW4tdHlwZXNjcmlwdC9ub2RlX21vZHVsZXMvdHMtbG9hZGVyL2luZGV4LmpzPz9jbG9uZWRSdWxlU2V0LTg4LnVzZVsxXSEuL3BhY2thZ2VzL2JpbUFpci9zcmMvdmlld2VyV3JhcHBlci9wYW5lbHMvc3RydWN0dXJlVHJlZS9wYW5lcy9zdHJ1Y3R1cmVUcmVlLnRzeD92dWUmdHlwZT1zY3JpcHQmbGFuZz1qcyYuanMiLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWlCQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBS0E7QUFBQTtBQUFBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFNQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFRQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFTQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBR0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBOztBQUdBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBdzlCQTtBQXQ5QkE7QUFBQTtBQUNBO0FBQ0E7Ozs7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBRUE7QUFBQTtBQUNBO0FBQ0E7Ozs7QUFFQTtBQUFBOztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBSUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7O0FBRUE7O0FBR0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOzs7QUFHQTtBQUVBO0FBQ0E7QUFFQTs7QUFFQTtBQUVBO0FBQUE7QUFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBRUE7OztBQUdBO0FBQ0E7OztBQUdBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBS0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBOztBQUVBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7Ozs7QUFLQTtBQUNBO0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFFQTtBQUVBO0FBQUE7QUFBQTtBQUFBO0FBSUE7QUFFQTtBQUVBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFJQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUdBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQVFBO0FBY0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFJQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFJQTtBQUNBOztBQUdBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUdBO0FBQ0E7QUFDQTs7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBRUE7QUFDQTtBQUVBO0FBRUE7QUFTQTtBQUVBO0FBUUE7QUFBQTtBQUNBO0FBRUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUlBO0FBR0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUdBO0FBUUE7QUFLQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7OztBQUtBO0FBQ0E7QUFhQTtBQUNBO0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBS0E7QUFLQTtBQUNBOzs7QUFHQTtBQUVBO0FBQ0E7QUFHQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBR0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFFQTs7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQU1BO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFFQTtBQUVBO0FBRUE7QUFNQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBRUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBOztBQUVBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7O0FBSUE7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBRUE7QUFDQTs7O0FBR0E7QUFFQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUlBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQVNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFTQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUVBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7O0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBRUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBQ0E7QUFFQTtBQUNBO0FBRUE7QUFFQTtBQUVBO0FBQ0E7QUFTQTtBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBV0E7O0FBS0E7O0FBRUE7QUFFQTtBQUdBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFQTs7QUFFQTtBQXJxQ0E7QUFDQTtBQUZBO0FBRkE7QUFBQTtBQUFBO0FBQ0E7QUF3cUNBO0FBQUE7QUF2cUNBIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vYmltbGlnaHQtcGxhdGZvcm0vLi9wYWNrYWdlcy9iaW1BaXIvc3JjL3ZpZXdlcldyYXBwZXIvcGFuZWxzL3N0cnVjdHVyZVRyZWUvcGFuZXMvc3RydWN0dXJlVHJlZS50c3g/NmUxNiJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgUHJvcCwgVnVlLCBXYXRjaCB9IGZyb20gXCJ2dWUtcHJvcGVydHktZGVjb3JhdG9yXCI7XHJcbmltcG9ydCAqIGFzIExvbmdhbiBmcm9tIFwiZ3MtbG9uZ2FuXCI7XHJcbmltcG9ydCAqIGFzIExvbmdhbkFwaSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9hcGlcIjtcclxuaW1wb3J0IEdzRGl2aWRlciBmcm9tIFwiLi4vLi4vLi4vLi4vY29tcG9uZW50cy9ncy9nc0RpdmlkZXIvZ3MtZGl2aWRlci52dWVcIjtcclxuXHJcbmltcG9ydCBUcmVlIGZyb20gXCIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2VsL3RyZWVcIjtcclxuaW1wb3J0IHsgQnV0dG9uLCBJbnB1dCwgRm9ybSwgRm9ybUl0ZW0sIE1lc3NhZ2UsIE1lc3NhZ2VCb3ggfSBmcm9tIFwiZWxlbWVudC11aVwiO1xyXG5pbXBvcnQgeyBCdXR0b25Db25maWcsIGNyZWF0ZU1lbnUgfSBmcm9tIFwiLi4vLi4vLi4vbW9kdWxlL2NyZWF0ZU1lbnVcIjtcclxuaW1wb3J0IHN0cnVjdHVyZVRyZWUgZnJvbSBcIi4uLy4uLy4uLy4uL3N0b3JlL3N0cnVjdHVyZVRyZWVcIjtcclxuaW1wb3J0IHsgQ29tcG9uZW50U2VsZWN0b3IgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vcGVyYXRvcnMvY29tcG9uZW50U2VsZWN0b3JcIjtcclxuaW1wb3J0IHsgVHJlZU5vZGVPYmplY3QgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL3RyZWVOb2RlT2JqZWN0XCI7XHJcbmltcG9ydCB7IFZpZXdlciB9IGZyb20gXCIuLi8uLi8uLi8uLi9nc0RldkZ4L3ZpZXdlclwiO1xyXG5pbXBvcnQgSURCIGZyb20gXCJncy1sb25nYW4vbG9uZ2FuL2lkYlwiO1xyXG5pbXBvcnQgeyBMaWdodE1vZGVsIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2dzRGV2Rngvb2JqZWN0cy9saWdodE1vZGVsXCI7XHJcbmltcG9ydCB7IFJlZmVyZW5jZUxpZ2h0TW9kZWwgfSBmcm9tIFwiLi4vLi4vLi4vLi4vZ3NEZXZGeC9vYmplY3RzL3JlZmVyZW5jZUxpZ2h0TW9kZWxcIjtcclxuaW1wb3J0IHN0cnVjdHVyZVRyZWVCdXMgZnJvbSBcIi4uL3N0cnVjdHVyZVRyZWVCdXNcIjtcclxuXHJcblZ1ZS51c2UoVHJlZSk7XHJcblZ1ZS51c2UoQnV0dG9uKTtcclxuVnVlLnVzZShJbnB1dCk7XHJcblZ1ZS51c2UoRm9ybSk7XHJcblZ1ZS51c2UoRm9ybUl0ZW0pO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgY29tcG9uZW50czogeyBHc0RpdmlkZXIgfSxcclxufSlcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSW50ZXJmYWNlU3RydWN0dXJlVHJlZSBleHRlbmRzIFZ1ZSB7XHJcbiAgQFByb3AoKSBjb21wb25lbnREYXRhO1xyXG4gIEBJbmplY3QoKSBnZXRWaWV3ZXI7XHJcbiAgc2VhcmNoVmFsdWUgPSBcIlwiO1xyXG4gIHRyZWVQcm9wcyA9IHtcclxuICAgIGxhYmVsOiBcIm5hbWVcIixcclxuICAgIGNoaWxkcmVuOiBcImNoaWxkTm9kZXNcIixcclxuICAgIGlzTGVhZjogXCJpc0xlYWZcIixcclxuICAgIGV4cGFuZWQ6IFwiZXhwYW5lZFwiLFxyXG4gIH07XHJcbiAgdHJlZUNoZWNrZWROb3MgPSBbXTtcclxuICB0cmVlRXhwYW5kQWxsID0gdHJ1ZTtcclxuICBkcmFnZ2luZ05vZGUgPSBudWxsO1xyXG5cclxuICB0cmVlTW9kZWxTdHJ1Y3R1cmUgPSBudWxsO1xyXG5cclxuICBzZWxlY3RlZEtleSA9IC0xO1xyXG4gIHNlbGVjdGVkUGF0aCA9IFwiXCI7XHJcbiAgLy8g5Yu+6YCJ55qEa2V5c1xyXG4gIGNoZWNrS2V5cyA9IFtdO1xyXG4gIC8vIOmakOiXj+eahGtleXNcclxuICBpbnZpc2libGVLZXlzID0gW107XHJcbiAgLy8g5bGV5byA55qEa2V5c1xyXG4gIGV4cGFuZGVkS2V5cyA9IFtdO1xyXG4gIGN1cnJlbnRUcmVlS2V5ID0gbnVsbDtcclxuICBpc0VkaXRpbmdLZXk6IHN0cmluZyA9IG51bGw7XHJcbiAgbmFtZVZhbHVlID0gXCJcIjtcclxuICAvLyBtb2RlbE9iamVjdHM6IFRyZWVOb2RlT2JqZWN0W10gPSBbXTtcclxuICBtb2RlbE9iamVjdHNDbG9uZSA9IFtdO1xyXG5cclxuICBwYXJlbnRTZWdtZW50S2V5OiBudW1iZXIgPSBudWxsO1xyXG4gIHRyZWVOb2RlSG92ZXJLZXkgPSBudWxsO1xyXG4gIGlzVHJlZUVkaXRpbmcgPSBmYWxzZTtcclxuICBvcGVyYXRvckxpc3QgPSBbXTtcclxuICBjb250ZXh0TWVudTtcclxuICBjdXJyZW50VHJlZU5vZGVEYXRhOiBUcmVlTm9kZU9iamVjdDtcclxuICBjdXJyZW50VHJlZU5vZGU7XHJcblxyXG4gIC8vIOmalOemu2lk5YiX6KGoXHJcbiAgaXNvbGF0aW9uSWRzID0gW107XHJcbiAgbGV2ZWxPbmVEYXRhID0gW107XHJcblxyXG4gIGxvb3BGbGFnID0gZmFsc2U7XHJcbiAgc2VsZWN0ZWRHc2xOb2RlID0gbnVsbDtcclxuICBub2RlUGF0aCA9IFtdO1xyXG4gIGNob29zZU5vZGUgPSBudWxsO1xyXG4gIHJvb3ROb2RlID0gbnVsbDtcclxuICBsYXN0Tm9DaGVja2VkUm9vdE5vZGVzID0gW107XHJcblxyXG4gIGNvdW50ID0gMDtcclxuICBlbmQgPSBmYWxzZTtcclxuICBpc29sYXRpb25LZXlzID0gW107XHJcblxyXG4gIGlzVHJlZUxvY2F0ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFwiaXNUcmVlTG9jYXRlXCIpICE9PSBcImZhbHNlXCI7XHJcblxyXG4gIGxldmVsME5vZGU7XHJcbiAgbGV2ZWwwTm9kZVJlc29sdmU7XHJcblxyXG4gIGN1cnJlbnROb2RlO1xyXG4gIGN1cnJlbnROb2RlUmVzb2x2ZTtcclxuXHJcbiAgY2hlY2tTdHJpY3RseSA9IGZhbHNlO1xyXG4gIGRyYWdnaW5nTm9kZUNoZWNrZWQgPSB0cnVlO1xyXG5cclxuICBidXR0b25MaXN0OiBCdXR0b25Db25maWdbXSA9IFtcclxuICAgIHtcclxuICAgICAgbmFtZTogXCLnvJbovpFcIixcclxuICAgICAgY2hpbGRyZW46IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiBcIua3u+WKoFwiLFxyXG4gICAgICAgICAgY2xpY2tGdW46ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5hZGRSZW5kZXJPYmplY3RDbGljaygpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6IFwi6YeN5ZG95ZCNXCIsXHJcbiAgICAgICAgICBjbGlja0Z1bjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmFtZVJlbmRlck9iamVjdENsaWNrKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogXCLliKDpmaRcIixcclxuICAgICAgICAgIGNsaWNrRnVuOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsZXRlUmVuZGVyT2JqZWN0Q2xpY2soKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgICAvLyB7XHJcbiAgICAvLyAgIG5hbWU6IFwi6auY5Lqu6YCJ5Lit5a+56LGhXCIsXHJcbiAgICAvLyAgIGtleTogXCJoaWdobGlnaHRcIixcclxuICAgIC8vICAgY2xpY2tGdW46ICgpID0+IHtcclxuICAgIC8vICAgICAvL3RoaXMuY29tcG9uZW50U2VsZWN0QW5kSGVpZ2hsaWdodCgpO1xyXG4gICAgLy8gICB9LFxyXG4gICAgLy8gfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogXCLpmpDol49cIixcclxuICAgICAgY2hpbGRyZW46IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiBcIumakOiXj+mAieS4reWvueixoVwiLFxyXG4gICAgICAgICAgY2xpY2tGdW46ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5oaWRlT2JqZWN0KCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogXCLpmpDol4/lhbbku5blr7nosaFcIixcclxuICAgICAgICAgIGNsaWNrRnVuOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucmVIaWRlT2JqZWN0KCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogXCLmmL7npLrlhajpg6jlr7nosaFcIixcclxuICAgICAgICAgIGNsaWNrRnVuOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJIaWRlT2JqZWN0KCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBuYW1lOiBcIumalOemu1wiLFxyXG4gICAgICBjaGlsZHJlbjogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6IFwi6ZqU56a76YCJ5Lit5a+56LGhXCIsXHJcbiAgICAgICAgICBjbGlja0Z1bjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmlzb2xhdGVPYmplY3QoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiBcIumalOemu+WFtuS7luWvueixoVwiLFxyXG4gICAgICAgICAgY2xpY2tGdW46ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pc29sYXRlT3RoZXJPYmplY3RzKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogXCLlj5bmtojpmpTnprtcIixcclxuICAgICAgICAgIGNsaWNrRnVuOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJJc29sYXRlT2JqZWN0cygpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgbmFtZTogXCLlsZXlvIBcIixcclxuICAgICAgY2hpbGRyZW46IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBuYW1lOiBcIuWxleW8gOS4gOWxglwiLFxyXG4gICAgICAgICAgY2xpY2tGdW46ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5zaG93TGV2ZWwoMSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogXCLlsZXlvIDkuozlsYJcIixcclxuICAgICAgICAgIGNsaWNrRnVuOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd0xldmVsKDIpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIG5hbWU6IFwi5bGV5byA5LiJ5bGCXCIsXHJcbiAgICAgICAgICBjbGlja0Z1bjogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dMZXZlbCgzKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyB7XHJcbiAgICAgICAgLy8gICBuYW1lOiBcIuWFqOmDqOWxleW8gFwiLCBrZXk6IFwic2hvd0FsbFwiLCBjbGlja0Z1bjogKCkgPT4ge1xyXG4gICAgICAgIC8vICAgICB0aGlzLnNldEFsbEV4cGFuZCh0cnVlKVxyXG4gICAgICAgIC8vICAgfVxyXG4gICAgICAgIC8vIH0sXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgbmFtZTogXCLlhajpg6jmlLbotbdcIixcclxuICAgICAgICAgIGNsaWNrRnVuOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0QWxsRXhwYW5kKGZhbHNlKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgXSxcclxuICAgIH0sXHJcbiAgXTtcclxuXHJcbiAgc3RydWN0dXJlVHJlZSA9IHN0cnVjdHVyZVRyZWU7XHJcbiAgdHJlZU5vZGVEcmFnRW50ZXJUaW1lcjtcclxuXHJcbiAgaGVpZ2hMaWdodCA9ICgpID0+IHtcclxuICAgIGxldCBzZWdPYmogPSB0aGlzLnZpZXdlci5zZWxlY3Rpb25NYW5hZ2VyLnNlZ21lbnRPYmplY3Q7XHJcbiAgICBjb25zb2xlLmxvZyhcIumAieS4reeahOWvueixoe+8mlwiLCBzZWdPYmopO1xyXG4gICAgaWYgKHNlZ09iaikge1xyXG4gICAgICBsZXQgdHJlZU5vZGVPYmplY3QgPVxyXG4gICAgICAgIHRoaXMudmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnRyZWVOb2Rlc1tzZWdPYmoubm9kZUtleV07XHJcbiAgICAgIGxldCBwYXRoS2V5czogTG9uZ2FuLkxpc3Q8c3RyaW5nPiA9IG5ldyBMb25nYW4uTGlzdCgpO1xyXG4gICAgICBpZiAodHJlZU5vZGVPYmplY3QpIHtcclxuICAgICAgICB0aGlzLmdldFBhdGhLZXlzKHRyZWVOb2RlT2JqZWN0LCBwYXRoS2V5cyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCB0cmVlID0gdGhpcy4kcmVmcy5zdHJ1Y3R1cmVUcmVlIGFzIGFueTtcclxuICAgICAgcGF0aEtleXMuaXRlbXMucmV2ZXJzZSgpLmZvckVhY2goKG5vZGVLZXkpID0+IHtcclxuICAgICAgICAvLyDoioLngrnliqDovb3lrozlkI7lho3lsZXlvIBcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIGxldCBub2RlID0gdHJlZS5nZXROb2RlKG5vZGVLZXkpO1xyXG4gICAgICAgICAgaWYgKG5vZGUpIHtcclxuICAgICAgICAgICAgbm9kZS5leHBhbmQoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LCAwKTtcclxuICAgICAgfSk7XHJcbiAgICAgIC8vIHRoaXMuZXhwYW5kZWRLZXlzLnB1c2goc2VnT2JqLm5vZGVLZXkpO1xyXG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB0aGlzLmxvY2F0ZUN1cnJlbnROb2RlKHNlZ09iai5ub2RlS2V5KTtcclxuICAgICAgICB0cmVlLnNldEN1cnJlbnRLZXkoc2VnT2JqLm5vZGVLZXkpO1xyXG4gICAgICB9LCAxMCk7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgZ2V0IHZpZXdlcigpOiBWaWV3ZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0Vmlld2VyKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdGFicygpIHtcclxuICAgIGxldCB0YWJzID0gdGhpcy52aWV3ZXIub3B0aW9ucy5jb21wb25lbnRzLnByb3BlcnR5LnRhYnM7XHJcbiAgICByZXR1cm4gdGFicztcclxuICB9XHJcblxyXG4gIGdldCB2aWV3ZXJUeXBlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudmlld2VyLm9wdGlvbnMudmlld2VyVHlwZTtcclxuICB9XHJcblxyXG4gIGxvYWROb2RlKG5vZGUsIHJlc29sdmUpIHtcclxuICAgIGlmICghdGhpcy52aWV3ZXIpIHtcclxuICAgICAgcmVzb2x2ZShbXSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNoZWNrU3RyaWN0bHkgPSB0cnVlO1xyXG4gICAgaWYgKHRoaXMudmlld2VyPy5zdHJ1Y3R1cmVUcmVlTWFuYWdlcj8ucm9vdE5vZGUpIHtcclxuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY3VycmVudE5vZGUgPSBub2RlO1xyXG4gICAgICAgIHRoaXMuY3VycmVudE5vZGVSZXNvbHZlID0gcmVzb2x2ZTtcclxuICAgICAgICBpZiAobm9kZS5sZXZlbCA9PT0gMCkge1xyXG4gICAgICAgICAgbGV0IHJlc3VsdDtcclxuICAgICAgICAgIHRoaXMubGV2ZWwwTm9kZSA9IG5vZGU7IC8v6L+Z6YeM5piv5YWz6ZSu77yB5ZyoZGF0YemHjOmdouWumuS5ieS4gOS4quWPmOmHj++8jOWwhm5vZGUubGV2ZWwgPT0gMOeahG5vZGXlrZjotbfmnaVcclxuICAgICAgICAgIHRoaXMubGV2ZWwwTm9kZVJlc29sdmUgPSByZXNvbHZlOyAvL+WQjFxyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLnZpZXdlci5yZW5kZXJPYmplY3QgJiZcclxuICAgICAgICAgICAgdGhpcy52aWV3ZXIucmVuZGVyT2JqZWN0LnNob3dUcmVlTm9kZVxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuZ2V0Tm9kZXMoW3RoaXMudmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnJvb3ROb2RlXSk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmludmlzaWJsZUtleXMuaW5kZXhPZihyZXN1bHRbMF0ubm9kZUtleSkgPT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5jaGVja0tleXMucHVzaChyZXN1bHRbMF0ubm9kZUtleSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCA9IHRoaXMuZ2V0Tm9kZXMoXHJcbiAgICAgICAgICAgICAgdGhpcy52aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXIucm9vdE5vZGUuY2hpbGROb2Rlc1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXN1bHQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmludmlzaWJsZUtleXMuaW5kZXhPZihpdGVtLm5vZGVLZXkpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0tleXMucHVzaChpdGVtLm5vZGVLZXkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBsZXQgdHJlZU5vZGUgPVxyXG4gICAgICAgICAgICB0aGlzLnZpZXdlci5zdHJ1Y3R1cmVUcmVlTWFuYWdlcj8udHJlZU5vZGVzW25vZGUuZGF0YS5ub2RlS2V5XTtcclxuICAgICAgICAgIGlmICh0cmVlTm9kZSkge1xyXG4gICAgICAgICAgICBsZXQgY2hpbGROb2RlcyA9IHRyZWVOb2RlLmNoaWxkTm9kZXM7XHJcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSB0aGlzLmdldE5vZGVzKGNoaWxkTm9kZXMpO1xyXG4gICAgICAgICAgICByZXN1bHQuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmludmlzaWJsZUtleXMuaW5kZXhPZihpdGVtLm5vZGVLZXkpID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0tleXMucHVzaChpdGVtLm5vZGVLZXkpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHJlc3VsdCk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzb2x2ZShbXSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2hlY2tTdHJpY3RseSA9IGZhbHNlO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwi5qCR57uT5p6E54i25a2Q6IqC54K56YeN5paw5YWz6IGUXCIpO1xyXG4gICAgICB9LCAyMCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXROb2Rlcyh0cmVlTm9kZU9iamVjdHM6IFRyZWVOb2RlT2JqZWN0W10pOiB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBub2RlS2V5OiBzdHJpbmc7XHJcbiAgICBpc1Nob3c6IGJvb2xlYW47XHJcbiAgICBpc0xlYWY6IGJvb2xlYW47XHJcbiAgICBleHBhbmVkOiBib29sZWFuO1xyXG4gIH1bXSB7XHJcbiAgICBsZXQgcmVzdWx0ID0gW107XHJcbiAgICB0cmVlTm9kZU9iamVjdHMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICByZXN1bHQucHVzaCh7XHJcbiAgICAgICAgbmFtZTogaXRlbS5uYW1lLFxyXG4gICAgICAgIG5vZGVLZXk6IGl0ZW0ubm9kZUtleSxcclxuICAgICAgICBpc1Nob3c6IGl0ZW0uaXNTaG93LFxyXG4gICAgICAgIGlzTGVhZjogaXRlbS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCxcclxuICAgICAgICBleHBhbmVkOiB0aGlzLmV4cGFuZGVkS2V5cy5pbmRleE9mKGl0ZW0ubm9kZUtleSkgIT09IC0xLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIGlzVHJlZUxvY2F0ZUNoYW5nZSh2YWwpIHtcclxuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFwiaXNUcmVlTG9jYXRlXCIsIHZhbCk7XHJcbiAgICB0aGlzLmlzVHJlZUxvY2F0ZSA9IHZhbDtcclxuICB9XHJcblxyXG4gIGxvY2F0ZUN1cnJlbnROb2RlKG5vZGVLZXkpIHtcclxuICAgIGlmICghdGhpcy5pc1RyZWVMb2NhdGUpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jb3VudCA9IDA7XHJcbiAgICB0aGlzLmVuZCA9IGZhbHNlO1xyXG4gICAgbGV0IHRyZWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInN0cnVjdHVyZVRyZWVcIik7XHJcbiAgICBsZXQgbm9kZSA9ICh0aGlzLiRyZWZzLnN0cnVjdHVyZVRyZWUgYXMgYW55KS5zdG9yZS5yb290O1xyXG5cclxuICAgIHRoaXMuY291bnRFeHBhbmROb2RlKG5vZGUsIG5vZGVLZXkpO1xyXG4gICAgbGV0IGNvdW50ID0gdGhpcy5jb3VudDtcclxuICAgIGxldCBwYXJlbnRFbGVtZW50ID0gdHJlZS5wYXJlbnRFbGVtZW50O1xyXG4gICAgcGFyZW50RWxlbWVudC5zY3JvbGxUbygwLCBjb3VudCAqIDI2IC0gNjApO1xyXG4gIH1cclxuXHJcbiAgLy8gVE9ET++8mumAkuW9kuW+heS8mOWMlu+8jOaJvuWIsOebruagh+iKgueCueW6lOivpeS4reaWremAkuW9klxyXG4gIGNvdW50RXhwYW5kTm9kZShub2RlLCBub2RlS2V5KSB7XHJcbiAgICBpZiAoIXRoaXMuZW5kKSB7XHJcbiAgICAgIGlmIChub2RlLmV4cGFuZGVkIHx8IHRoaXMuY291bnQgPT09IDAgfHwgbm9kZS5kYXRhLm5vZGVLZXkgPT09IG5vZGVLZXkpIHtcclxuICAgICAgICB0aGlzLmNvdW50ICs9IDE7XHJcbiAgICAgICAgaWYgKG5vZGUuZGF0YSAmJiBub2RlLmRhdGEubm9kZUtleSA9PT0gbm9kZUtleSkge1xyXG4gICAgICAgICAgdGhpcy5lbmQgPSB0cnVlO1xyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuY291bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChub2RlLmNoaWxkTm9kZXMpIHtcclxuICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgLy8g6YGN5Y6G5a2Q6IqC54K5XHJcbiAgICAgICAgICAgIHRoaXMuY291bnRFeHBhbmROb2RlKG5vZGUuY2hpbGROb2Rlc1tpXSwgbm9kZUtleSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY291bnQgKz0gMTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZmluZFJvVmlzaWJsZShpbnNPYmo6IExvbmdhbi5SZW5kZXJJbnN0YW5jZU9iamVjdCwgY2hlY2tlZE5vczogbnVtYmVyW10pIHtcclxuICAgIGlmIChpbnNPYmoucmVuZGVyT2JqZWN0LnZpc2libGUpIHtcclxuICAgICAgY2hlY2tlZE5vcy5wdXNoKGluc09iai5ubyk7XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGluc09iai5jaGlsZE9iamVjdHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgdGhpcy5maW5kUm9WaXNpYmxlKGluc09iai5jaGlsZE9iamVjdHNbaV0sIGNoZWNrZWROb3MpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TW9kZWxPYmplY3RzKCkge1xyXG4gICAgbGV0IHZpZXdlciA9IHRoaXMudmlld2VyO1xyXG4gICAgaWYgKHZpZXdlciAmJiB2aWV3ZXIuaW5zdGFuY2VPYmplY3QpIHtcclxuICAgICAgbGV0IGluc09iaiA9IHZpZXdlci5pbnN0YW5jZU9iamVjdDtcclxuICAgICAgbGV0IHRyZWVDaGVja2VkTm9zID0gW107XHJcbiAgICAgIHRoaXMuZmluZFJvVmlzaWJsZShpbnNPYmosIHRyZWVDaGVja2VkTm9zKTtcclxuICAgICAgdGhpcy50cmVlQ2hlY2tlZE5vcyA9IHRyZWVDaGVja2VkTm9zO1xyXG5cclxuICAgICAgbGV0IHJvb3ROb2RlID1cclxuICAgICAgICB0aGlzLmNvbXBvbmVudERhdGEgJiYgdGhpcy5jb21wb25lbnREYXRhLnN0cnVjdHVyZVRyZWVcclxuICAgICAgICAgID8gdGhpcy5jb21wb25lbnREYXRhLnN0cnVjdHVyZVRyZWVbMF1cclxuICAgICAgICAgIDogdGhpcy52aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXIucm9vdE5vZGU7XHJcblxyXG4gICAgICBpZiAodGhpcy52aWV3ZXIucmVuZGVyT2JqZWN0LnNob3dUcmVlTm9kZSkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRyZWVOb2RlRGF0YSA9IHJvb3ROb2RlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFRyZWVOb2RlRGF0YSA9IHJvb3ROb2RlLmNoaWxkTm9kZXNbMF07XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2hvd0xldmVsKDEpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50cmVlQ2hlY2tlZE5vcyA9IFtdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2VhcmNoVmFsdWVDaGFuZ2UodmFsKSB7XHJcbiAgICBpZiAodmFsKSB7XHJcbiAgICAgIGxldCB0cmVlTm9kZXMgPSB0aGlzLnZpZXdlci5zdHJ1Y3R1cmVUcmVlTWFuYWdlci50cmVlTm9kZXM7XHJcbiAgICAgIGxldCB0cmVlID0gdGhpcy4kcmVmcy5zdHJ1Y3R1cmVUcmVlIGFzIGFueTtcclxuXHJcbiAgICAgIGZvciAobGV0IGtleSBpbiB0cmVlTm9kZXMpIHtcclxuICAgICAgICBpZiAodHJlZU5vZGVzW2tleV0ubmFtZS5pbmRleE9mKHRoaXMuc2VhcmNoVmFsdWUpICE9PSAtMSkge1xyXG4gICAgICAgICAgbGV0IHRyZWVOb2RlT2JqZWN0ID0gdHJlZU5vZGVzW2tleV07XHJcbiAgICAgICAgICBsZXQgcGF0aEtleXM6IExvbmdhbi5MaXN0PHN0cmluZz4gPSBuZXcgTG9uZ2FuLkxpc3QoKTtcclxuICAgICAgICAgIGlmICh0cmVlTm9kZU9iamVjdCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldFBhdGhLZXlzKHRyZWVOb2RlT2JqZWN0LCBwYXRoS2V5cyk7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgcGF0aEtleXMuaXRlbXMucmV2ZXJzZSgpLmZvckVhY2goKG5vZGVLZXkpID0+IHtcclxuICAgICAgICAgICAgbGV0IG5vZGUgPSB0cmVlLmdldE5vZGUobm9kZUtleSk7XHJcbiAgICAgICAgICAgIGlmIChub2RlKSB7XHJcbiAgICAgICAgICAgICAgbm9kZS5leHBhbmQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgKHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnkpLmZpbHRlcih0aGlzLnNlYXJjaFZhbHVlKTtcclxuICB9XHJcblxyXG4gIGZpbHRlck5vZGUodmFsdWUsIGRhdGEpOiBib29sZWFuIHtcclxuICAgIGlmICghdmFsdWUpIHtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0YS5uYW1lLmluZGV4T2YodmFsdWUpICE9PSAtMTtcclxuICB9XHJcblxyXG4gIHRyZWVDaGVjayhcclxuICAgIGRhdGE6IFRyZWVOb2RlT2JqZWN0LFxyXG4gICAgeyBjaGVja2VkTm9kZXMsIGNoZWNrZWRLZXlzLCBoYWxmQ2hlY2tlZE5vZGVzLCBoYWxmQ2hlY2tlZEtleXMgfVxyXG4gICkge1xyXG4gICAgLy8gdGhpcy5jaGVja0tleXMgPSBjaGVja2VkS2V5cztcclxuICAgIC8vIGNvbnNvbGUubG9nKFwidGhpcy5jaGVja0tleXNcIiwgdGhpcy5jaGVja0tleXMpO1xyXG4gICAgbGV0IHRyZWVOb2RlT2JqZWN0ID1cclxuICAgICAgdGhpcy52aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXIudHJlZU5vZGVzW2RhdGEubm9kZUtleV07XHJcbiAgICBpZiAoXHJcbiAgICAgIGNoZWNrZWROb2Rlc1xyXG4gICAgICAgIC5tYXAoKGl0ZW0pID0+IGl0ZW0ubm9kZUtleSlcclxuICAgICAgICAuaW5kZXhPZih0cmVlTm9kZU9iamVjdC5ub2RlS2V5KSA9PT0gLTFcclxuICAgICkge1xyXG4gICAgICB0aGlzLnZpZXdlci5pbnZpc2libGVNYW5hZ2VyLmludmlzaWJsZShbdHJlZU5vZGVPYmplY3RdKTtcclxuICAgICAgdGhpcy5pbnZpc2libGVLZXlzLnB1c2godHJlZU5vZGVPYmplY3Qubm9kZUtleSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwi6ZqQ6JeP6IqC54K5a2V5c1wiLCB0aGlzLmludmlzaWJsZUtleXMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy52aWV3ZXIuaW52aXNpYmxlTWFuYWdlci5jbGVhckludmlzaWJsZShbdHJlZU5vZGVPYmplY3RdKTtcclxuICAgICAgbGV0IGluZGV4ID0gdGhpcy5pbnZpc2libGVLZXlzLmluZGV4T2YodHJlZU5vZGVPYmplY3Qubm9kZUtleSk7XHJcbiAgICAgIGlmIChpbmRleCAhPT0gLTEpIHtcclxuICAgICAgICB0aGlzLmludmlzaWJsZUtleXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuXHJcbiAgICBpZiAodGhpcy52aWV3ZXIub3B0aW9ucy5jb21wb25lbnRzLnN0cnVjdHVyZVRyZWUuZGVmYXVsdFRhYi5jaGVja0Z1bikge1xyXG4gICAgICB0aGlzLnZpZXdlci5vcHRpb25zLmNvbXBvbmVudHMuc3RydWN0dXJlVHJlZS5kZWZhdWx0VGFiLmNoZWNrRnVuKFxyXG4gICAgICAgIHRyZWVOb2RlT2JqZWN0LFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNoZWNrZWROb2RlcyxcclxuICAgICAgICAgIGNoZWNrZWRLZXlzLFxyXG4gICAgICAgICAgaGFsZkNoZWNrZWROb2RlcyxcclxuICAgICAgICAgIGhhbGZDaGVja2VkS2V5cyxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaW5kSW52aXNpYmxlUm9vdE5vZGVzKHJvb3ROb2RlLCBoYWxmQ2hlY2tlZE5vZGVzLCBpbnZpc2libGVSb290Tm9kZXMpIHtcclxuICAgIGlmIChyb290Tm9kZS5jaGVja2VkID09PSBmYWxzZSkge1xyXG4gICAgICBpZiAoaGFsZkNoZWNrZWROb2Rlcy5pbmRleE9mKHJvb3ROb2RlLmRhdGEpID09PSAtMSkge1xyXG4gICAgICAgIGludmlzaWJsZVJvb3ROb2Rlcy5wdXNoKHJvb3ROb2RlLmRhdGEpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBjaGlsZE5vZGVzID0gcm9vdE5vZGUuY2hpbGROb2RlcztcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIHRoaXMuZmluZEludmlzaWJsZVJvb3ROb2RlcyhcclxuICAgICAgICAgICAgY2hpbGROb2Rlc1tpXSxcclxuICAgICAgICAgICAgaGFsZkNoZWNrZWROb2RlcyxcclxuICAgICAgICAgICAgaW52aXNpYmxlUm9vdE5vZGVzXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZmluZE5vT2JqVHJlZU5vZGVPYmplY3QodHJlZU5vZGVPYmplY3Q6IFRyZWVOb2RlT2JqZWN0KSB7XHJcbiAgLy8gICBpZiAodHJlZU5vZGVPYmplY3Qub2JqKSB7XHJcbiAgLy8gICAgIGlmICh0cmVlTm9kZU9iamVjdC5jaGlsZE5vZGVzKSB7XHJcbiAgLy8gICAgICAgcmV0dXJuIHRoaXMuZmluZE5vT2JqVHJlZU5vZGVPYmplY3QodHJlZU5vZGVPYmplY3QuY2hpbGROb2Rlc1swXSk7XHJcbiAgLy8gICAgIH0gZWxzZSB7XHJcbiAgLy8gICAgICAgcmV0dXJuIG51bGw7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgIH0gZWxzZSB7XHJcbiAgLy8gICAgIHJldHVybiB0cmVlTm9kZU9iamVjdDtcclxuICAvLyAgIH1cclxuICAvLyB9XHJcblxyXG4gIHRyZWVOb2RlQ2xpY2soZGF0YSwgbm9kZSkge1xyXG4gICAgbGV0IHRyZWVOb2RlID0gdGhpcy52aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXIudHJlZU5vZGVzW2RhdGEubm9kZUtleV07XHJcblxyXG4gICAgLy8gbGV0IG5vT2JqVHJlZU5vZGVPYmplY3QgPSB0aGlzLmZpbmROb09ialRyZWVOb2RlT2JqZWN0KHRyZWVOb2RlKTtcclxuICAgIC8vIHRoaXMudmlld2VyLmVuc3VyZVNlZ21lbnRBc3luR2VvbWV0cnkobm9PYmpUcmVlTm9kZU9iamVjdC5zZWdtZW50LmtleSk7XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJ0cmVlTm9kZUNsaWNrXCIsIG5vZGUsIHRyZWVOb2RlKTtcclxuICAgIHRoaXMuY3VycmVudFRyZWVOb2RlRGF0YSA9IHRyZWVOb2RlO1xyXG4gICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uTWFuYWdlci5jbGVhckFsbFNlbGVjdGlvbkFuZEhpZ2hsaWdodCgpO1xyXG4gICAgdGhpcy52aWV3ZXIuc2VsZWN0aW9uTWFuYWdlci5zZWxlY3RBbmRIaWdobGlnaHQoW3RyZWVOb2RlXSk7XHJcbiAgICB0aGlzLnZpZXdlci5sb2NhdGVPYmplY3QodHJlZU5vZGUpO1xyXG5cclxuICAgIHRoaXMudmlld2VyLnBhbmVsTWFuYWdlci5wcm9wZXJ0eVBhbmVsLmdldFByb3BlcnR5KHRyZWVOb2RlLnNlZ21lbnRPYmplY3QpO1xyXG5cclxuICAgIGlmICh0aGlzLnZpZXdlci5vcHRpb25zLmNvbXBvbmVudHMuc3RydWN0dXJlVHJlZS5jbGlja0Z1bikge1xyXG4gICAgICB0aGlzLnZpZXdlci5vcHRpb25zLmNvbXBvbmVudHMuc3RydWN0dXJlVHJlZS5jbGlja0Z1bih0cmVlTm9kZSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy52aWV3ZXIub3B0aW9ucy5jb21wb25lbnRzLnN0cnVjdHVyZVRyZWUuZGVmYXVsdFRhYi5jbGlja0Z1bikge1xyXG4gICAgICB0aGlzLnZpZXdlci5vcHRpb25zLmNvbXBvbmVudHMuc3RydWN0dXJlVHJlZS5kZWZhdWx0VGFiLmNsaWNrRnVuKFxyXG4gICAgICAgIHRyZWVOb2RlXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVUcmVlKG5ld1RyZWUsIG5vZGUpIHtcclxuICAgIGxldCBuZXdOb2RlID0gbnVsbDtcclxuICAgIGlmIChub2RlLmRhdGEpIHtcclxuICAgICAgbmV3Tm9kZSA9IHsga2V5OiBub2RlLmRhdGEua2V5LCBuYW1lOiBub2RlLmRhdGEubmFtZSwgaXRlbXM6IFtdIH07XHJcbiAgICAgIGlmIChuZXdUcmVlLml0ZW1zKSB7XHJcbiAgICAgICAgbmV3VHJlZS5pdGVtcy5wdXNoKG5ld05vZGUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG5ld1RyZWUucHVzaChuZXdOb2RlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghbmV3Tm9kZSkge1xyXG4gICAgICBuZXdOb2RlID0gbmV3VHJlZTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUuY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICB0aGlzLmNyZWF0ZVRyZWUobmV3Tm9kZSwgbm9kZS5jaGlsZE5vZGVzW2ldKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFByb3BlcnRpZXMoa2V5KSB7XHJcbiAgICBsZXQgc2VnbWVudCA9IG5ldyBMb25nYW4uU2VnbWVudChrZXkpO1xyXG4gICAgbGV0IGpzb25TdHJpbmcgPSBzZWdtZW50LnByb3BlcnR5LnNob3dTdHJpbmcoXCJQcm9wZXJ0aWVzXCIpO1xyXG5cclxuICAgIGxldCBzaG93UGFyZW50UHJvcGVydHkgPSBzZWdtZW50LnByb3BlcnR5LnNob3dCb29sZWFuKFxyXG4gICAgICBcInNob3dQYXJlbnRQcm9wZXJ0aWVzXCJcclxuICAgICk7XHJcbiAgICBpZiAoc2hvd1BhcmVudFByb3BlcnR5KSB7XHJcbiAgICAgIGxldCBrZXkgPSBzZWdtZW50Lm93bmVyLmtleTtcclxuICAgICAganNvblN0cmluZyA9IHRoaXMuZ2V0UGFyZW50UHJvcGVydGllcyhrZXkpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UGFyZW50UHJvcGVydGllcyhrZXkpIHtcclxuICAgIGxldCBzZWdtZW50ID0gbmV3IExvbmdhbi5TZWdtZW50KGtleSk7XHJcbiAgICBsZXQgcHJvcGVydGllcyA9IHNlZ21lbnQucHJvcGVydHkuc2hvd1N0cmluZyhcIlByb3BlcnRpZXNcIik7XHJcbiAgICBpZiAocHJvcGVydGllcykge1xyXG4gICAgICByZXR1cm4gcHJvcGVydGllcztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmdldFBhcmVudFByb3BlcnRpZXMoc2VnbWVudC5vd25lci5rZXkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdHJlZU5vZGVEcmFnU3RhcnQobm9kZSwgZXYpIHtcclxuICAgIHRoaXMuZHJhZ2dpbmdOb2RlID0gbm9kZTtcclxuICAgIHRoaXMuY3VycmVudFRyZWVOb2RlID0gbm9kZTtcclxuICAgIHRoaXMuY3VycmVudFRyZWVOb2RlRGF0YSA9XHJcbiAgICAgIHRoaXMudmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnRyZWVOb2Rlc1tub2RlLmRhdGEubm9kZUtleV07XHJcbiAgICB0aGlzLmRyYWdnaW5nTm9kZUNoZWNrZWQgPSBub2RlLmNoZWNrZWQ7XHJcblxyXG4gICAgY29uc29sZS5sb2coXCJ0aGlzLmRyYWdnaW5nTm9kZUNoZWNrZWQgXCIsIHRoaXMuZHJhZ2dpbmdOb2RlQ2hlY2tlZCk7XHJcbiAgfVxyXG5cclxuICB0cmVlTm9kZURyYWdFbnRlcihkcmFnZ2luZ05vZGUsIG92ZXJOb2RlLCBldikge1xyXG4gICAgLy8gdGhpcy5sb2FkTm9kZShvdmVyTm9kZSwgdGhpcy5sZXZlbDBOb2RlUmVzb2x2ZSk7XHJcbiAgICBjb25zb2xlLmxvZyhcInRoaXMudHJlZU5vZGVEcmFnRW50ZXJUaW1lclwiKTtcclxuICAgIC8vIGlmICh0aGlzLnRyZWVOb2RlRHJhZ0VudGVyVGltZXIpIHtcclxuICAgIC8vICAgY2xlYXJUaW1lb3V0KHRoaXMudHJlZU5vZGVEcmFnRW50ZXJUaW1lcik7XHJcbiAgICAvLyB9XHJcbiAgICAvLyB0aGlzLnRyZWVOb2RlRHJhZ0VudGVyVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgIC8vICAgdGhpcy5leHBhbmRlZEtleXMucHVzaChvdmVyTm9kZS5kYXRhLm5vZGVLZXkpO1xyXG4gICAgLy8gICBjbGVhclRpbWVvdXQodGhpcy50cmVlTm9kZURyYWdFbnRlclRpbWVyKTtcclxuICAgIC8vICAgdGhpcy50cmVlTm9kZURyYWdFbnRlclRpbWVyID0gbnVsbDtcclxuICAgIC8vIH0sIDUwMCk7XHJcbiAgfVxyXG5cclxuICB0cmVlTm9kZURyYWdFbmQoZHJhZ2dpbmdOb2RlLCBkcm9wTm9kZSwgZHJvcFR5cGUpIHtcclxuICAgIC8vIGlmIChkcm9wVHlwZSA9PT0gXCJpbm5lclwiICYmICFkcm9wTm9kZS5leHBhbmRlZCkge1xyXG4gICAgLy8gICB0aGlzLiRtZXNzYWdlLndhcm5pbmcoZHJvcE5vZGUubGFiZWwgKyBcIuiKgueCueacquWxleW8gO+8jOaXoOazleenu+WFpVwiKTtcclxuICAgIC8vICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICB0cmVlTm9kZURyb3AoZHJhZ2dpbmdOb2RlLCBkcm9wTm9kZSwgZHJvcFR5cGUsIGV2KSB7XHJcbiAgICBjb25zb2xlLmxvZyhcImRyb3BOb2RlLmV4cGVuZFwiLCBkcm9wTm9kZSk7XHJcblxyXG4gICAgdGhpcy4kY29uZmlybShcclxuICAgICAgYOaYr+WQpuWwhuiKgueCuSR7ZHJhZ2dpbmdOb2RlLmxhYmVsfeenu+WKqOWIsCR7ZHJvcE5vZGUubGFiZWx9JHtcclxuICAgICAgICBkcm9wVHlwZSA9PSBcImJlZm9yZVwiID8gXCLkuYvliY1cIiA6IGRyb3BUeXBlID09IFwiYWZ0ZXJcIiA/IFwi5LmL5ZCOXCIgOiBcIuS4i1wiXHJcbiAgICAgIH0/YCxcclxuICAgICAgXCLmj5DnpLpcIixcclxuICAgICAge1xyXG4gICAgICAgIGNvbmZpcm1CdXR0b25UZXh0OiBcIuehruWumlwiLFxyXG4gICAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IFwi5Y+W5raIXCIsXHJcbiAgICAgICAgdHlwZTogXCJ3YXJuaW5nXCIsXHJcbiAgICAgIH1cclxuICAgIClcclxuICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuZHJvcENvbmZpcm0oZHJhZ2dpbmdOb2RlLCBkcm9wTm9kZSwgZHJvcFR5cGUpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy4kbWVzc2FnZSh7XHJcbiAgICAgICAgICAgIHR5cGU6IFwic3VjY2Vzc1wiLFxyXG4gICAgICAgICAgICBtZXNzYWdlOiBcIuenu+WKqOaIkOWKnyFcIixcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgLy8gc3RydWN0dXJlVHJlZUJ1cy4kZW1pdChcInVwZGF0ZVRyZWVcIiwgZHJhZ2dpbmdOb2RlLmtleSk7XHJcbiAgICAgICAgICBpZiAoZHJvcE5vZGUgPT09IFwiaW5uZXJcIikge1xyXG4gICAgICAgICAgICBzdHJ1Y3R1cmVUcmVlQnVzLiRlbWl0KFwidXBkYXRlVHJlZVwiLCBkcm9wTm9kZS5rZXkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3RydWN0dXJlVHJlZUJ1cy4kZW1pdChcInVwZGF0ZVRyZWVcIiwgZHJvcE5vZGUucGFyZW50LmtleSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy4kbWVzc2FnZSh7XHJcbiAgICAgICAgICB0eXBlOiBcImluZm9cIixcclxuICAgICAgICAgIG1lc3NhZ2U6IFwi5Y+W5raI56e75YqoXCIsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgLy8gc3RydWN0dXJlVHJlZUJ1cy4kZW1pdChcInVwZGF0ZVRyZWVcIiwgZHJhZ2dpbmdOb2RlLnBhcmVudC5rZXkpO1xyXG4gICAgICAgIHN0cnVjdHVyZVRyZWVCdXMuJGVtaXQoXCJ1cGRhdGVUcmVlXCIsIGRyb3BOb2RlLnBhcmVudC5rZXkpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGRyb3BDb25maXJtKGRyYWdnaW5nTm9kZSwgZHJvcE5vZGUsIGRyb3BUeXBlKSB7XHJcbiAgICBmdW5jdGlvbiBnZXRJbmRleChwYXJlbnQsIGNoaWxkKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBwYXJlbnQuY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGl0ZW0gPSBwYXJlbnQuY2hpbGROb2Rlc1tpXTtcclxuICAgICAgICBpZiAoaXRlbS5rZXkgPT09IGNoaWxkLmtleSkge1xyXG4gICAgICAgICAgcmV0dXJuIGk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiAtMTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaW5kZXggPSAtMTtcclxuICAgIC8vIGxldCBkcmFnZ2luZ1NlZ21lbnQgPSBuZXcgTG9uZ2FuQXBpLlNlZ21lbnQoZHJhZ2dpbmdOb2RlLmtleSk7XHJcbiAgICBsZXQgZHJvcFNlZ21lbnQ7XHJcblxyXG4gICAgbGV0IGRyYWdnaW5nVHJlZU5vZGUgPVxyXG4gICAgICB0aGlzLnZpZXdlci5zdHJ1Y3R1cmVUcmVlTWFuYWdlci50cmVlTm9kZXNbZHJhZ2dpbmdOb2RlLmRhdGEubm9kZUtleV07XHJcbiAgICBsZXQgZHJvcFRyZWVOb2RlO1xyXG5cclxuICAgIGxldCB0YXJnZXRTZWdJbmRleDtcclxuXHJcbiAgICBzd2l0Y2ggKGRyb3BUeXBlKSB7XHJcbiAgICAgIGNhc2UgXCJpbm5lclwiOlxyXG4gICAgICAgIC8vIGRyb3BTZWdtZW50ID0gbmV3IExvbmdhbkFwaS5TZWdtZW50KGRyb3BOb2RlLmtleSk7XHJcbiAgICAgICAgZHJvcFRyZWVOb2RlID0gdGhpcy52aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXIudHJlZU5vZGVzW2Ryb3BOb2RlLmtleV07XHJcbiAgICAgICAgZHJvcFNlZ21lbnQgPSBkcm9wVHJlZU5vZGUuc2VnbWVudDtcclxuICAgICAgICB0YXJnZXRTZWdJbmRleCA9IGRyb3BUcmVlTm9kZS5jaGlsZE5vZGVzLmxlbmd0aDtcclxuICAgICAgICB0aGlzLmV4cGFuZGVkS2V5cy5wdXNoKGRyb3BOb2RlLmRhdGEua2V5KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBcImJlZm9yZVwiOlxyXG4gICAgICAgIGluZGV4ID0gZ2V0SW5kZXgoZHJvcE5vZGUucGFyZW50LCBkcm9wTm9kZSk7XHJcbiAgICAgICAgLy8gZHJvcFNlZ21lbnQgPSBuZXcgTG9uZ2FuQXBpLlNlZ21lbnQoZHJvcE5vZGUucGFyZW50LmtleSk7XHJcbiAgICAgICAgZHJvcFRyZWVOb2RlID1cclxuICAgICAgICAgIHRoaXMudmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnRyZWVOb2Rlc1tkcm9wTm9kZS5wYXJlbnQua2V5XTtcclxuICAgICAgICBkcm9wU2VnbWVudCA9XHJcbiAgICAgICAgICB0aGlzLnZpZXdlci5zdHJ1Y3R1cmVUcmVlTWFuYWdlci50cmVlTm9kZXNbZHJvcE5vZGUua2V5XS5zZWdtZW50XHJcbiAgICAgICAgICAgIC5vd25lcjtcclxuICAgICAgICB0YXJnZXRTZWdJbmRleCA9IGluZGV4IC0gMTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJhZnRlclwiOlxyXG4gICAgICAgIGluZGV4ID0gZ2V0SW5kZXgoZHJvcE5vZGUucGFyZW50LCBkcm9wTm9kZSk7XHJcbiAgICAgICAgLy8gZHJvcFNlZ21lbnQgPSBuZXcgTG9uZ2FuQXBpLlNlZ21lbnQoZHJvcE5vZGUucGFyZW50LmtleSk7XHJcbiAgICAgICAgZHJvcFNlZ21lbnQgPVxyXG4gICAgICAgICAgdGhpcy52aWV3ZXIuc3RydWN0dXJlVHJlZU1hbmFnZXIudHJlZU5vZGVzW2Ryb3BOb2RlLmtleV0uc2VnbWVudFxyXG4gICAgICAgICAgICAub3duZXI7XHJcblxyXG4gICAgICAgIGRyb3BUcmVlTm9kZSA9XHJcbiAgICAgICAgICB0aGlzLnZpZXdlci5zdHJ1Y3R1cmVUcmVlTWFuYWdlci50cmVlTm9kZXNbZHJvcE5vZGUucGFyZW50LmtleV07XHJcblxyXG4gICAgICAgIHRhcmdldFNlZ0luZGV4ID0gaW5kZXggKyAxO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gICAgLy8gZHJhZ2dpbmdTZWdtZW50Lm1vdmVUb0luZGV4KGRyb3BTZWdtZW50LCB0YXJnZXRTZWdJbmRleCk7XHJcbiAgICBsZXQgZHJhZ2dpbmdOb2RlQ2hlY2tlZCA9IHRoaXMuZHJhZ2dpbmdOb2RlQ2hlY2tlZDtcclxuICAgIHJldHVybiBkcmFnZ2luZ1RyZWVOb2RlXHJcbiAgICAgIC5tb3ZlVG9JbmRleFdpdGhSZXF1ZXN0QXBpKGRyb3BUcmVlTm9kZSwgZHJvcFNlZ21lbnQsIHRhcmdldFNlZ0luZGV4KVxyXG4gICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICBcInRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBcIixcclxuICAgICAgICAgIHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSxcclxuICAgICAgICAgIGRyYWdnaW5nTm9kZSxcclxuICAgICAgICAgIGRyYWdnaW5nTm9kZS5rZXksXHJcbiAgICAgICAgICBkcmFnZ2luZ05vZGVDaGVja2VkXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgKHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnkpLnNldENoZWNrZWQoXHJcbiAgICAgICAgICBkcmFnZ2luZ05vZGUua2V5LFxyXG4gICAgICAgICAgZHJhZ2dpbmdOb2RlQ2hlY2tlZCxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZUluZGV4ZWREQigpO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIGFkZFJlbmRlck9iamVjdENsaWNrKCkge1xyXG4gICAgbGV0IGRhdGEgPSB0aGlzLmN1cnJlbnRUcmVlTm9kZURhdGE7XHJcbiAgICBpZiAoZGF0YS5jaGlsZE5vZGVzKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5jaGlsZE5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGRhdGEuY2hpbGROb2Rlc1tpXS5ub2RlS2V5ID09PSBcIi0xXCIpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBhcmVudFNlZ21lbnRLZXkgPSBkYXRhLmtleTtcclxuICAgIHRoaXMubmFtZVZhbHVlID0gXCJcIjtcclxuICAgIC8vIGxldCBuZXdOb2RlRGF0YTogVHJlZU5vZGVPYmplY3QgPSBuZXcgVHJlZU5vZGVPYmplY3QoXHJcbiAgICAvLyAgIHRoaXMudmlld2VyLFxyXG4gICAgLy8gICBcIiBcIixcclxuICAgIC8vICAgbnVsbCxcclxuICAgIC8vICAgXCJcIlxyXG4gICAgLy8gKTtcclxuXHJcbiAgICAvLyBpZiAoIWRhdGEuY2hpbGROb2Rlcykge1xyXG4gICAgLy8gICBkYXRhLmNoaWxkTm9kZXMgPSBbXTtcclxuICAgIC8vIH1cclxuICAgIC8vIG5ld05vZGVEYXRhLnBhcmVudCA9IGRhdGE7XHJcbiAgICAvLyBkYXRhLmNoaWxkTm9kZXMucHVzaChuZXdOb2RlRGF0YSk7XHJcbiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLmN1cnJlbnRUcmVlTm9kZTtcclxuICAgIHBhcmVudC5leHBhbmQoKTtcclxuICAgIC8vIHRoaXMuZXhwYW5kZWRLZXlzLnB1c2goZGF0YS5ub2RlS2V5KTtcclxuICAgIC8vIHRoaXMuZXhwYW5kZWRLZXlzLnB1c2goXCItMVwiKTtcclxuICAgICh0aGlzLiRyZWZzLnN0cnVjdHVyZVRyZWUgYXMgYW55KS5hcHBlbmQoXHJcbiAgICAgIHtcclxuICAgICAgICBuYW1lOiBcIiBcIixcclxuICAgICAgICBub2RlS2V5OiBcIi0xXCIsXHJcbiAgICAgICAgaXNTaG93OiB0cnVlLFxyXG4gICAgICB9LFxyXG4gICAgICBwYXJlbnRcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5pc0VkaXRpbmdLZXkgPSBcIi0xXCI7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5sb2NhdGVDdXJyZW50Tm9kZShcIi0xXCIpO1xyXG4gICAgICBsZXQgaW5wdXQgPSB0aGlzLiRyZWZzLmVkaXRpbmdUcmVlTm9kZUlucHV0IGFzIGFueTtcclxuICAgICAgaWYgKGlucHV0KSB7XHJcbiAgICAgICAgaW5wdXQuZm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgfSwgMTApO1xyXG4gIH1cclxuXHJcbiAgcmVuYW1lUmVuZGVyT2JqZWN0Q2xpY2soKSB7XHJcbiAgICBsZXQgZGF0YSA9IHRoaXMuY3VycmVudFRyZWVOb2RlRGF0YTtcclxuICAgIHRoaXMuaXNFZGl0aW5nS2V5ID0gZGF0YS5ub2RlS2V5O1xyXG4gICAgdGhpcy5uYW1lVmFsdWUgPSBkYXRhLm5hbWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgKHRoaXMuJHJlZnMuZWRpdGluZ1RyZWVOb2RlSW5wdXQgYXMgYW55KS5mb2N1cygpO1xyXG4gICAgfSwgMTApO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlUmVuZGVyT2JqZWN0Q2xpY2soKSB7XHJcbiAgICBsZXQgZGF0YSA9IHRoaXMuY3VycmVudFRyZWVOb2RlRGF0YTtcclxuICAgIGxldCBub2RlID0gdGhpcy5jdXJyZW50VHJlZU5vZGU7XHJcbiAgICBNZXNzYWdlQm94LmNvbmZpcm0oYOehruWumuWIoOmZpCR7ZGF0YS5uYW1lfeiKgueCue+8n2AsIFwi5o+Q56S6XCIsIHtcclxuICAgICAgY29uZmlybUJ1dHRvblRleHQ6IFwi56Gu5a6aXCIsXHJcbiAgICAgIGNhbmNlbEJ1dHRvblRleHQ6IFwi5Y+W5raIXCIsXHJcbiAgICAgIHR5cGU6IFwid2FybmluZ1wiLFxyXG4gICAgfSkudGhlbigoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlSW5kZXhlZERCKCk7XHJcblxyXG4gICAgICB0aGlzLmN1cnJlbnRUcmVlTm9kZURhdGEuZGVsZXRlV2l0aFJlcXVlc3RBcGkodHJ1ZSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgbGV0IGNoaWxkcmVuOiBhbnlbXSA9IG5vZGUucGFyZW50LmNoaWxkTm9kZXM7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSBjaGlsZHJlbi5maW5kSW5kZXgoXHJcbiAgICAgICAgICAoZCkgPT4gZC5kYXRhLm5vZGVLZXkgPT09IG5vZGUuZGF0YS5ub2RlS2V5XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcclxuICAgICAgICAgIGNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuJG1lc3NhZ2Uud2FybmluZyhcIuiKgueCueWIoOmZpOWHuumUmVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBlZGl0UmVuZGVyT2JqZWN0Q29uZmlybShub2RlLCBkYXRhKSB7XHJcbiAgICBsZXQgdHJlZU5vZGUgPSB0aGlzLnZpZXdlci5zdHJ1Y3R1cmVUcmVlTWFuYWdlci50cmVlTm9kZXNbZGF0YS5ub2RlS2V5XTtcclxuXHJcbiAgICAvLyDmt7vliqBcclxuICAgIGlmIChkYXRhLm5vZGVLZXkgPT09IFwiLTFcIikge1xyXG4gICAgICBsZXQgc2VnbWVudCA9IG5ldyBMb25nYW5BcGkuU2VnbWVudCh0aGlzLnBhcmVudFNlZ21lbnRLZXkpO1xyXG4gICAgICBpZiAoIXRoaXMubmFtZVZhbHVlKSB7XHJcbiAgICAgICAgTWVzc2FnZS53YXJuaW5nKFwi6IqC54K55ZCN5LiN6IO95Li656m6XCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoc2VnbWVudC5zdWJzZWdtZW50RXhpc3RzKHRoaXMubmFtZVZhbHVlKSkge1xyXG4gICAgICAgIE1lc3NhZ2Uud2FybmluZyhcIuatpOiKgueCueW3suWtmOWcqO+8jOivt+mHjeWRveWQjVwiKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBsZXQgcGFyZW50ID0gZGF0YS5wYXJlbnQ7XHJcbiAgICAgICAgLy/liKDpmaTkuLTml7bnmoRcclxuICAgICAgICAvLyBwYXJlbnQucmVtb3ZlQ2hpbGROb2RlKHRyZWVOb2RlKTtcclxuICAgICAgICAvLyB0cmVlTm9kZS5kZWxldGUoKTtcclxuICAgICAgICBjb25zdCBwYXJlbnQgPSBub2RlLnBhcmVudDtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHBhcmVudC5jaGlsZE5vZGVzO1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gY2hpbGRyZW4uZmluZEluZGV4KChkKSA9PiBkLm5vZGVLZXkgPT09IGRhdGEubm9kZUtleSk7XHJcbiAgICAgICAgY2hpbGRyZW4uc3BsaWNlKGluZGV4LCAxKTtcclxuXHJcbiAgICAgICAgbGV0IHBhcmVudFRyZWVOb2RlID1cclxuICAgICAgICAgIHRoaXMudmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnRyZWVOb2Rlc1twYXJlbnQuZGF0YS5ub2RlS2V5XTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcInBhcmVudFRyZWVOb2RlXCIsIHBhcmVudFRyZWVOb2RlKTtcclxuICAgICAgICBpZiAocGFyZW50VHJlZU5vZGUpIHtcclxuICAgICAgICAgIHBhcmVudFRyZWVOb2RlXHJcbiAgICAgICAgICAgIC5hZGRXaXRoUmVxdWVzdEFwaSh0aGlzLm5hbWVWYWx1ZSwgdHJ1ZSlcclxuICAgICAgICAgICAgLnRoZW4oKHRyZWVOb2RlT2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgLy8gdHJlZU5vZGUgPSB0cmVlTm9kZU9iamVjdDtcclxuICAgICAgICAgICAgICBkYXRhLm5vZGVLZXkgPSB0cmVlTm9kZU9iamVjdC5ub2RlS2V5O1xyXG4gICAgICAgICAgICAgIGRhdGEubmFtZSA9IHRyZWVOb2RlT2JqZWN0Lm5hbWU7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc0VkaXRpbmdLZXkgPSBudWxsO1xyXG4gICAgICAgICAgICAgIHRoaXMubmFtZVZhbHVlID0gXCJcIjtcclxuICAgICAgICAgICAgICAodGhpcy4kcmVmcy5zdHJ1Y3R1cmVUcmVlIGFzIGFueSkuYXBwZW5kKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBuYW1lOiB0cmVlTm9kZU9iamVjdC5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICBub2RlS2V5OiB0cmVlTm9kZU9iamVjdC5ub2RlS2V5LFxyXG4gICAgICAgICAgICAgICAgICBpc1Nob3c6IHRydWUsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgcGFyZW50XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAodGhpcy4kcmVmcy5zdHJ1Y3R1cmVUcmVlIGFzIGFueSkuc2V0Q2hlY2tlZChcclxuICAgICAgICAgICAgICAgIGRhdGEubm9kZUtleSxcclxuICAgICAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAodGhpcy4kcmVmcy5zdHJ1Y3R1cmVUcmVlIGFzIGFueSkuc2V0Q2hlY2tlZChcclxuICAgICAgICAgICAgICAgIHRyZWVOb2RlT2JqZWN0Lm5vZGVLZXksXHJcbiAgICAgICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy51cGRhdGVJbmRleGVkREIoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyDnvJbovpFcclxuICAgICAgaWYgKHRoaXMubmFtZVZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50VHJlZU5vZGVEYXRhXHJcbiAgICAgICAgICAucmVuYW1lV2l0aFJlcXVlc3RBcGkodGhpcy5uYW1lVmFsdWUpXHJcbiAgICAgICAgICAudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlSW5kZXhlZERCKCk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZGF0YS5uYW1lID0gdGhpcy5uYW1lVmFsdWU7XHJcbiAgICAgICAgdGhpcy5pc0VkaXRpbmdLZXkgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubmFtZVZhbHVlID0gXCJcIjtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBNZXNzYWdlLndhcm5pbmcoXCLlkI3lrZfkuI3og73kuLrnqbpcIik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGVkaXRSZW5kZXJPYmplY3RDYW5jZWwobm9kZSwgZGF0YSkge1xyXG4gICAgLy8g5re75YqgXHJcbiAgICBpZiAoZGF0YS5ub2RlS2V5ID09PSBcIi0xXCIpIHtcclxuICAgICAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQ7XHJcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gcGFyZW50LmNoaWxkTm9kZXM7XHJcbiAgICAgIGNvbnN0IGluZGV4ID0gY2hpbGRyZW4uZmluZEluZGV4KChkKSA9PiBkLm5vZGVLZXkgPT09IGRhdGEubm9kZUtleSk7XHJcbiAgICAgIGNoaWxkcmVuLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyDnvJbovpFcclxuICAgICAgdGhpcy5pc0VkaXRpbmdLZXkgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlSW5kZXhlZERCKCkge1xyXG4gICAgbGV0IHRyZWVOb2RlID0gdGhpcy5jdXJyZW50VHJlZU5vZGVEYXRhO1xyXG4gICAgSURCLmdldEluc3RhbmNlKHRyZWVOb2RlLm1vZGVsSWQpLmRlbChcclxuICAgICAgdHJlZU5vZGUubW9kZWxJZCArXHJcbiAgICAgICAgXCI/dj1cIiArXHJcbiAgICAgICAgKHRyZWVOb2RlLm1vZGVsLnJlbmRlck9iamVjdCBhcyBMaWdodE1vZGVsIHwgUmVmZXJlbmNlTGlnaHRNb2RlbClcclxuICAgICAgICAgIC52ZXJzaW9uXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdHJlZU5vZGVNb3VzZU92ZXIoZGF0YSkge1xyXG4gICAgLy8gaWYgKHRoaXMuaXNUcmVlRWRpdGluZykge1xyXG4gICAgdGhpcy50cmVlTm9kZUhvdmVyS2V5ID0gZGF0YS5rZXk7XHJcbiAgICAvLyB9XHJcbiAgfVxyXG5cclxuICB0cmVlTm9kZU1vdXNlTGVhdmUoZGF0YSkge1xyXG4gICAgLy8gaWYgKHRoaXMuaXNUcmVlRWRpdGluZykge1xyXG4gICAgdGhpcy50cmVlTm9kZUhvdmVyS2V5ID0gbnVsbDtcclxuICAgIC8vIH1cclxuICB9XHJcblxyXG4gIGlzQmluZE1vZGVsRXhpc3QobW9kZWxJZCkge1xyXG4gICAgLy8gZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm1vZGVsTGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgLy8gICAgIGlmICh0aGlzLm1vZGVsTGlzdFtpXS5saWdodE1vZGVsSWQgPT09IG1vZGVsSWQpIHtcclxuICAgIC8vICAgICAgICAgcmV0dXJuIHRydWVcclxuICAgIC8vICAgICB9XHJcbiAgICAvLyB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0cmVlTm9kZUNvbnRleHRNZW51Q2xpY2soZSwgZGF0YSwgbm9kZSwgbm9kZUVsZW1lbnQpIHtcclxuICAgIGxldCB0cmVlTm9kZU9iamVjdCA9XHJcbiAgICAgIHRoaXMudmlld2VyLnN0cnVjdHVyZVRyZWVNYW5hZ2VyLnRyZWVOb2Rlc1tkYXRhLm5vZGVLZXldO1xyXG4gICAgY29uc29sZS5sb2coXCJ0cmVlTm9kZUNvbnRleHRNZW51Q2xpY2tcIiwgZSk7XHJcbiAgICB0aGlzLmN1cnJlbnRUcmVlTm9kZURhdGEgPSB0cmVlTm9kZU9iamVjdDtcclxuICAgIHRoaXMuY3VycmVudFRyZWVOb2RlID0gbm9kZTtcclxuICAgIGNyZWF0ZU1lbnUoZS5wYWdlWCwgZS5wYWdlWSwgdGhpcy5idXR0b25MaXN0KTtcclxuICB9XHJcblxyXG4gIHRyZWVOb2RlRXhwYW5kKGRhdGEsIG5vZGUsIGUpIHtcclxuICAgIGNvbnNvbGUubG9nKGRhdGEsIG5vZGUsIGUpO1xyXG4gICAgdGhpcy5leHBhbmRlZEtleXMucHVzaChkYXRhLm5vZGVLZXkpO1xyXG4gIH1cclxuXHJcbiAgdHJlZU5vZGVDb2xsYXBzZShkYXRhLCBub2RlLCBlKSB7XHJcbiAgICBsZXQgaW5kZXggPSB0aGlzLmV4cGFuZGVkS2V5cy5pbmRleE9mKGRhdGEubm9kZUtleSk7XHJcbiAgICBpZiAoaW5kZXggIT09IC0xKSB7XHJcbiAgICAgIHRoaXMuZXhwYW5kZWRLZXlzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzaG93TGV2ZWwobGV2ZWw6IG51bWJlcikge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIC8vIHRoaXMuZXhwYW5kZWRLZXlzID0gW107XHJcbiAgICAgIGxldCBub2RlID0gdGhpcy5jdXJyZW50VHJlZU5vZGVEYXRhO1xyXG4gICAgICB0aGlzLmV4cGFuZExldmVsKG5vZGUsIGxldmVsKTtcclxuICAgIH0sIDEwKTtcclxuICB9XHJcblxyXG4gIGV4cGFuZExldmVsKG5vZGUsIGxldmVsOiBudW1iZXIpIHtcclxuICAgIC8vIG5vZGUuZXhwYW5kZWQgPSB0cnVlO1xyXG4gICAgaWYgKG5vZGUpIHtcclxuICAgICAgbm9kZS5sb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgIGxldCBub2RlRG9tID0gKHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnkpPy5nZXROb2RlKG5vZGUubm9kZUtleSk7XHJcbiAgICAgIGlmIChub2RlRG9tKSB7XHJcbiAgICAgICAgbm9kZURvbS5leHBhbmQoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGxldCBjdXJyZW50TGV2ZWwgPSBsZXZlbCAtIDE7XHJcbiAgICAgIGlmIChjdXJyZW50TGV2ZWwgPiAwKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGNvbnN0IGl0ZW0gPSBub2RlLmNoaWxkTm9kZXNbaV07XHJcbiAgICAgICAgICBpZiAoaXRlbS5jaGlsZE5vZGVzICYmIGl0ZW0uY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kTGV2ZWwoaXRlbSwgY3VycmVudExldmVsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0sIDEwKTtcclxuICAgIC8vIHRoaXMuZXhwYW5kZWRLZXlzLnB1c2gobm9kZS5rZXkpO1xyXG4gIH1cclxuXHJcbiAgc2V0QWxsRXhwYW5kKHN0YXRlKSB7XHJcbiAgICBsZXQgbm9kZXMgPSAodGhpcy4kcmVmcy5zdHJ1Y3R1cmVUcmVlIGFzIGFueSkuc3RvcmUucm9vdDtcclxuICAgIHRoaXMuZXhwYW5kTm9kZShub2Rlcywgc3RhdGUpO1xyXG4gIH1cclxuXHJcbiAgZXhwYW5kTm9kZShub2RlLCBzdGF0ZSkge1xyXG4gICAgLy8g5pS55Y+Y6IqC54K555qE6Ieq6LqrZXhwYW5kZWTnirbmgIFcclxuICAgIG5vZGUuZXhwYW5kZWQgPSBzdGF0ZTtcclxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBub2RlLmNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgLy8g6YGN5Y6G5a2Q6IqC54K5XHJcbiAgICAgIGlmIChub2RlLmNoaWxkTm9kZXNbaV0uY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5leHBhbmROb2RlKG5vZGUuY2hpbGROb2Rlc1tpXSwgc3RhdGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoaWRlT2JqZWN0KCkge1xyXG4gICAgY29uc29sZS5sb2coXCJoaWRlT2JqZWN0XCIpO1xyXG4gICAgKHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnkpLnNldENoZWNrZWQoXHJcbiAgICAgIHRoaXMuY3VycmVudFRyZWVOb2RlRGF0YSxcclxuICAgICAgZmFsc2UsXHJcbiAgICAgIHRydWVcclxuICAgICk7XHJcbiAgICBsZXQgdmlld2VyID0gdGhpcy52aWV3ZXI7XHJcbiAgICB2aWV3ZXIuaW52aXNpYmxlTWFuYWdlci5pbnZpc2libGUoW3RoaXMuY3VycmVudFRyZWVOb2RlRGF0YV0pO1xyXG4gICAgdmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuICB9XHJcblxyXG4gIHJlSGlkZU9iamVjdCgpIHtcclxuICAgIGxldCByb290ID0gKHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnkpLnJvb3Q7XHJcbiAgICBjb25zb2xlLmxvZyhcInJvb3QtLS0tLS0tLS0tLS0tXCIsIHJvb3QpO1xyXG4gICAgcm9vdC5jaGlsZE5vZGVzLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgKHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnkpLnNldENoZWNrZWQoXHJcbiAgICAgICAgaXRlbS5kYXRhLm5vZGVLZXksXHJcbiAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgICAodGhpcy4kcmVmcy5zdHJ1Y3R1cmVUcmVlIGFzIGFueSkuc2V0Q2hlY2tlZChcclxuICAgICAgdGhpcy5jdXJyZW50VHJlZU5vZGVEYXRhLFxyXG4gICAgICB0cnVlLFxyXG4gICAgICB0cnVlXHJcbiAgICApO1xyXG4gICAgbGV0IHZpZXdlciA9IHRoaXMudmlld2VyO1xyXG4gICAgdGhpcy52aWV3ZXIuaW52aXNpYmxlTWFuYWdlci5pbnZpc2libGVJbnZlcnQoW3RoaXMuY3VycmVudFRyZWVOb2RlRGF0YV0pO1xyXG4gICAgdmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuICB9XHJcblxyXG4gIGNsZWFySGlkZU9iamVjdCgpIHtcclxuICAgIGxldCByb290ID0gKHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnkpLnJvb3Q7XHJcbiAgICByb290LmNoaWxkTm9kZXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICAodGhpcy4kcmVmcy5zdHJ1Y3R1cmVUcmVlIGFzIGFueSkuc2V0Q2hlY2tlZChcclxuICAgICAgICBpdGVtLmRhdGEubm9kZUtleSxcclxuICAgICAgICB0cnVlLFxyXG4gICAgICAgIHRydWVcclxuICAgICAgKTtcclxuICAgIH0pO1xyXG4gICAgbGV0IHZpZXdlciA9IHRoaXMudmlld2VyO1xyXG4gICAgdmlld2VyLmludmlzaWJsZU1hbmFnZXIuY2xlYXJBbGxJbnZpc2libGUoKTtcclxuICAgIHZpZXdlci51cGRhdGVEaXNwbGF5KCk7XHJcbiAgfVxyXG5cclxuICBjaGVja0NoYW5nZShkYXRhKSB7XHJcbiAgICBsZXQgY2hlY2tlZE5vZGVzO1xyXG4gICAgbGV0IGNoZWNrZWRLZXlzID0gKHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnkpLmdldENoZWNrZWRLZXlzKCk7XHJcbiAgICBsZXQgaGFsZkNoZWNrZWROb2RlcyA9IChcclxuICAgICAgdGhpcy4kcmVmcy5zdHJ1Y3R1cmVUcmVlIGFzIGFueVxyXG4gICAgKS5nZXRIYWxmQ2hlY2tlZE5vZGVzKCk7XHJcbiAgICBsZXQgaGFsZkNoZWNrZWRLZXlzO1xyXG4gICAgdGhpcy50cmVlQ2hlY2soZGF0YSwge1xyXG4gICAgICBjaGVja2VkTm9kZXMsXHJcbiAgICAgIGNoZWNrZWRLZXlzLFxyXG4gICAgICBoYWxmQ2hlY2tlZE5vZGVzLFxyXG4gICAgICBoYWxmQ2hlY2tlZEtleXMsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGlzb2xhdGVPYmplY3QoKSB7XHJcbiAgICB0aGlzLnZpZXdlci5pc29sYXRpb25NYW5hZ2VyLmlzb2xhdGlvbihbXHJcbiAgICAgIHRoaXMuY3VycmVudFRyZWVOb2RlRGF0YS5zZWdtZW50T2JqZWN0LFxyXG4gICAgXSk7XHJcblxyXG4gICAgdGhpcy52aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xyXG4gIH1cclxuXHJcbiAgaXNvbGF0ZU90aGVyT2JqZWN0cygpIHtcclxuICAgIGxldCB2aWV3ZXIgPSB0aGlzLnZpZXdlcjtcclxuICAgIHZpZXdlci5pc29sYXRpb25NYW5hZ2VyLmlzb2xhdGlvbkludmVydChbdGhpcy5jdXJyZW50VHJlZU5vZGVEYXRhXSk7XHJcbiAgICB2aWV3ZXIudXBkYXRlRGlzcGxheSgpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJJc29sYXRlT2JqZWN0cygpIHtcclxuICAgIHRoaXMudmlld2VyLmlzb2xhdGlvbk1hbmFnZXIuY2xlYXJBbGxJc29sYXRpb24oKTtcclxuICAgIHRoaXMudmlld2VyLnVwZGF0ZURpc3BsYXkoKTtcclxuICB9XHJcblxyXG4gIG9wZW5FZGl0QWxsUmVuZGVyT2JqZWN0Q2xpY2sobm9kZSwgZGF0YSkge1xyXG4gICAgLy8gdGhpcy5tb2RlbE9iamVjdHNDbG9uZSA9IFsuLi50aGlzLm1vZGVsT2JqZWN0c107XHJcbiAgICAvLyB0aGlzLmlzVHJlZUVkaXRpbmcgPSB0cnVlO1xyXG4gICAgLy8gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAvLyAgIHRoaXMuZXhwYW5kZWRLZXlzLnB1c2goZGF0YS5jaGlsZE5vZGVzWzBdLmtleSk7XHJcbiAgICAvLyAgIHRoaXMudHJlZU5vZGVIb3ZlcktleSA9IGRhdGEuY2hpbGROb2Rlc1swXS5rZXk7XHJcbiAgICAvLyB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgZWRpdEFsbFJlbmRlck9iamVjdENvbmZpcm0oZGF0YSkge1xyXG4gICAgdGhpcy5pc1RyZWVFZGl0aW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLnRyZWVOb2RlSG92ZXJLZXkgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgZWRpdEFsbFJlbmRlck9iamVjdENhbmNlbChkYXRhKSB7XHJcbiAgICAvLyB0aGlzLmlzVHJlZUVkaXRpbmcgPSBmYWxzZTtcclxuICAgIC8vIHRoaXMudHJlZU5vZGVIb3ZlcktleSA9IG51bGw7XHJcbiAgICAvLyB0aGlzLm1vZGVsT2JqZWN0cyA9IFsuLi50aGlzLm1vZGVsT2JqZWN0c0Nsb25lXTtcclxuICAgIC8vIHRoaXMuZ2V0TW9kZWxPYmplY3RzKCk7XHJcbiAgICAvLyB0aGlzLm1vZGVsT2JqZWN0cyA9IFtdO1xyXG4gICAgLy8gdGhpcy5jcmVhdGVUcmVlKHRoaXMubW9kZWxPYmplY3RzLCAodGhpcy4kcmVmcy5zdHJ1Y3R1cmVUcmVlIGFzIGFueSkucm9vdCk7XHJcbiAgfVxyXG5cclxuICBzZXREYXRhKCkge1xyXG4gICAgdGhpcy4kZW1pdChcInNldERhdGFcIiwge1xyXG4gICAgICB0aXRsZTogXCLmqKHlnovnu5PmnoTmoJFcIixcclxuICAgICAgdG9wOiBcIjIwcHhcIixcclxuICAgICAgbGVmdDogXCIyMHB4XCIsXHJcbiAgICAgIGhlaWdodDogXCI2MDBweFwiLFxyXG4gICAgICB3aWR0aDogXCIzMDBweFwiLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBmaW5kVHJlZU5vZGVQYXRoKG5vZGUsIHRhcmdldEtleSwgbm9kZVBhdGg6IGFueVtdKSB7XHJcbiAgICBpZiAoIXRoaXMubG9vcEZsYWcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgbGV0IGNoaWxkTm9kZXMgPSBub2RlLmNoaWxkTm9kZXM7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkTm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgbGV0IGNoaWxkTm9kZSA9IGNoaWxkTm9kZXNbaV07XHJcbiAgICAgIGxldCBkYXRhID0gY2hpbGROb2RlLmRhdGE7XHJcblxyXG4gICAgICBsZXQgZGVlcENsb25lTm9kZVBhdGggPSBbLi4ubm9kZVBhdGhdO1xyXG5cclxuICAgICAgZGVlcENsb25lTm9kZVBhdGgucHVzaChjaGlsZE5vZGUpO1xyXG4gICAgICBpZiAoZGF0YS5rZXkgIT09IHRhcmdldEtleSkge1xyXG4gICAgICAgIHRoaXMuZmluZFRyZWVOb2RlUGF0aChjaGlsZE5vZGUsIHRhcmdldEtleSwgZGVlcENsb25lTm9kZVBhdGgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubm9kZVBhdGgucHVzaCh0aGlzLnJvb3ROb2RlKTtcclxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRlZXBDbG9uZU5vZGVQYXRoLmxlbmd0aDsgaisrKSB7XHJcbiAgICAgICAgICB0aGlzLm5vZGVQYXRoLnB1c2goZGVlcENsb25lTm9kZVBhdGhbal0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlbGVjdGVkR3NsTm9kZSA9IGNoaWxkTm9kZTtcclxuICAgICAgICB0aGlzLmxvb3BGbGFnID0gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIGRlZXBDbG9uZU5vZGVQYXRoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRQYXRoS2V5cyh0cmVlTm9kZU9iamVjdDogVHJlZU5vZGVPYmplY3QsIHBhdGhLZXlzOiBMb25nYW4uTGlzdDxzdHJpbmc+KSB7XHJcbiAgICBpZiAodHJlZU5vZGVPYmplY3Qubm9kZUtleSkge1xyXG4gICAgICBwYXRoS2V5cy5hZGQodHJlZU5vZGVPYmplY3Qubm9kZUtleSk7XHJcbiAgICB9XHJcbiAgICBpZiAodHJlZU5vZGVPYmplY3QucGFyZW50KSB7XHJcbiAgICAgIHRoaXMuZ2V0UGF0aEtleXModHJlZU5vZGVPYmplY3QucGFyZW50LCBwYXRoS2V5cyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVOb2RlKHRyZWVOb2RlT2JqZWN0OiBUcmVlTm9kZU9iamVjdCkge1xyXG4gICAgbGV0IHBhdGhLZXlzOiBMb25nYW4uTGlzdDxzdHJpbmc+ID0gbmV3IExvbmdhbi5MaXN0KCk7XHJcbiAgICBpZiAodHJlZU5vZGVPYmplY3QpIHtcclxuICAgICAgdGhpcy5nZXRQYXRoS2V5cyh0cmVlTm9kZU9iamVjdCwgcGF0aEtleXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGxldCB0cmVlID0gdGhpcy4kcmVmcy5zdHJ1Y3R1cmVUcmVlIGFzIGFueTtcclxuICAgIHBhdGhLZXlzLml0ZW1zLnJldmVyc2UoKS5mb3JFYWNoKChub2RlS2V5KSA9PiB7XHJcbiAgICAgIGlmIChub2RlS2V5ID09PSB0aGlzLmxldmVsME5vZGUua2V5KSB7XHJcbiAgICAgICAgdGhpcy5sb2FkTm9kZSh0aGlzLmxldmVsME5vZGUsIHRoaXMubGV2ZWwwTm9kZVJlc29sdmUpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubG9hZE5vZGUodGhpcy5jdXJyZW50Tm9kZSwgdGhpcy5jdXJyZW50Tm9kZVJlc29sdmUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG1vdW50ZWQoKSB7XHJcbiAgICB0aGlzLnNldERhdGEoKTtcclxuICAgIGNvbnNvbGUudGltZShcImludGVyZmFjZVN0cnVjdHVyZVRyZWUgZ2V0TW9kZWxPYmplY3RzXCIpO1xyXG4gICAgdGhpcy5nZXRNb2RlbE9iamVjdHMoKTtcclxuICAgIGNvbnNvbGUudGltZUVuZChcImludGVyZmFjZVN0cnVjdHVyZVRyZWUgZ2V0TW9kZWxPYmplY3RzXCIpO1xyXG5cclxuICAgIHN0cnVjdHVyZVRyZWVCdXMuJG9uKFwidXBkYXRlVHJlZVwiLCAoa2V5PykgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhcInN0cnVjdHVyZVRyZWVCdXNcIik7XHJcblxyXG4gICAgICBsZXQgdHJlZTogYW55ID0gdGhpcy4kcmVmcy5zdHJ1Y3R1cmVUcmVlO1xyXG4gICAgICBpZiAodHJlZSkge1xyXG4gICAgICAgIC8vIOiOt+WPluW9k+WJjemAieS4reiKgueCueeahGtleeWAvFxyXG4gICAgICAgIGxldCBrZXlzID0gdHJlZS5nZXRDaGVja2VkS2V5cygpO1xyXG4gICAgICAgIC8vIOiOt+WPluW9k+WJjeWxleW8gOiKgueCueeahGtleeWAvFxyXG4gICAgICAgIGxldCBleHBhbmRlZEtleXMgPSB0cmVlLmdldENoZWNrZWRLZXlzKCk7XHJcbiAgICAgICAgLy8g5pu05paw5pWw5o2uXHJcbiAgICAgICAgaWYgKGtleSAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBsZXQgdHJlZU5vZGUgPSB0aGlzLnZpZXdlci5zdHJ1Y3R1cmVUcmVlTWFuYWdlcj8udHJlZU5vZGVzW2tleV07XHJcblxyXG4gICAgICAgICAgLy8gaWYgKHRyZWVOb2RlKSB7XHJcbiAgICAgICAgICAvLyAgIGxldCBkYXRhID0gdGhpcy5nZXROb2RlcyhbdHJlZU5vZGVdKVswXTtcclxuICAgICAgICAgIC8vICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgIC8vICAgICB0cmVlLnVwZGF0ZUtleUNoaWxkcmVuKGtleSwgZGF0YSk7XHJcbiAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZU5vZGUodHJlZU5vZGUpO1xyXG5cclxuICAgICAgICAgIC8vIC8vIOiOt+WPluW9k+WJjeiKgueCuVxyXG4gICAgICAgICAgLy8gY29uc3Qgbm9kZSA9IHRyZWUuZ2V0Tm9kZShrZXkpO1xyXG4gICAgICAgICAgLy8gLy8g5pu05paw5a2Q6IqC54K55pWw5o2uXHJcbiAgICAgICAgICAvLyBub2RlLmNoaWxkcmVuID0gdGhpcy5nZXROb2Rlcyh0cmVlTm9kZS5jaGlsZE5vZGVzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5sZXZlbDBOb2RlLmNoaWxkTm9kZXMgPSBbXTsgLy/miorlrZjotbfmnaXnmoRub2Rl55qE5a2Q6IqC54K55riF56m677yM5LiN54S25Lya55WM6Z2i5Lya5Ye6546w6YeN5aSN5qCR77yBXHJcbiAgICAgICAgICB0aGlzLmNoZWNrS2V5cyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5sb2FkTm9kZSh0aGlzLmxldmVsME5vZGUsIHRoaXMubGV2ZWwwTm9kZVJlc29sdmUpO1xyXG4gICAgICAgICAgLy8gdGhpcy5jaGVja1N0cmljdGx5ID0gdHJ1ZTtcclxuICAgICAgICAgIC8vIHRoaXMuaW52aXNpYmxlS2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgIC8vICAgbGV0IG5vZGUgPSAodGhpcy4kcmVmcy5zdHJ1Y3R1cmVUcmVlIGFzIGFueSkuZ2V0Tm9kZShrZXkpO1xyXG4gICAgICAgICAgLy8gICBub2RlLmNoZWNrZWQgPSBudWxsO1xyXG4gICAgICAgICAgLy8gICBub2RlLnBhcmVudC5jaGVja2VkID0gbnVsbDtcclxuICAgICAgICAgIC8vICAgLy8gbm9kZS5wYXJlbnQuaW5kZXRlcm1pbmF0ZSA9IHRydWU7XHJcbiAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKFwiKHRoaXMuJHJlZnMuc3RydWN0dXJlVHJlZSBhcyBhbnkpLmdldE5vZGUoa2V5KVwiLCBub2RlKTtcclxuICAgICAgICAgIC8vIH0pO1xyXG4gICAgICAgICAgLy8gdGhpcy5jaGVja1N0cmljdGx5ID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgdGhpcy5zaG93TGV2ZWwoMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIOmHjeaWsOWLvumAieiKgueCuVxyXG4gICAgICAgIC8vIHRyZWUuc2V0Q2hlY2tlZEtleXMoa2V5cyk7XHJcbiAgICAgICAgLy8g6YeN5paw5bGV5byA6IqC54K5XHJcbiAgICAgICAgdHJlZS5zZXRDaGVja2VkS2V5cyhleHBhbmRlZEtleXMpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XHJcbiAgICAgIC8vIGxldCBjb21wb25lbnRTZWxlY3RvciA9IHRoaXMudmlld2VyLm9wZXJhdG9yTWFuYWdlci5maW5kKFwiQ29tcG9uZW50U2VsZWN0b3JcIikgYXMgQ29tcG9uZW50U2VsZWN0b3I7XHJcbiAgICAgIC8vIGlmIChjb21wb25lbnRTZWxlY3Rvcikge1xyXG4gICAgICB0aGlzLnZpZXdlci5vbkxCdXR0b25VcC5hZGQodGhpcy5oZWlnaExpZ2h0KTtcclxuICAgICAgLy8gfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBiZWZvcmVEZXN0cm95KCkge1xyXG4gICAgaWYgKHRoaXMudmlld2VyKSB7XHJcbiAgICAgIC8vIFx0bGV0IGNvbXBvbmVudFNlbGVjdG9yID0gdGhpcy52aWV3ZXIub3BlcmF0b3JNYW5hZ2VyLmZpbmQoXCJDb21wb25lbnRTZWxlY3RvclwiKSBhcyBDb21wb25lbnRTZWxlY3RvcjtcclxuICAgICAgdGhpcy52aWV3ZXIub25MQnV0dG9uVXAucmVtb3ZlKHRoaXMuaGVpZ2hMaWdodCk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./node_modules/babel-loader/lib/index.js??clonedRuleSet-86.use[0]!./node_modules/babel-loader/lib/index.js!./node_modules/@vue/cli-plugin-typescript/node_modules/ts-loader/index.js??clonedRuleSet-88.use[1]!./packages/bimAir/src/viewerWrapper/panels/structureTree/panes/structureTree.tsx?vue&type=script&lang=js&\n");
|
|
7406
7406
|
|
|
7407
7407
|
/***/ }),
|
|
7408
7408
|
|