occam-directed-graphs 3.0.37 → 3.0.41

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.
@@ -1,364 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "default", {
6
- enumerable: true,
7
- get: function() {
8
- return DirectedAcyclicGraph;
9
- }
10
- });
11
- var _necessary = require("necessary");
12
- var _edge = /*#__PURE__*/ _interop_require_default(require("./edge"));
13
- var _vertex = /*#__PURE__*/ _interop_require_default(require("./vertex"));
14
- var _vertex1 = require("./utilities/vertex");
15
- function _class_call_check(instance, Constructor) {
16
- if (!(instance instanceof Constructor)) {
17
- throw new TypeError("Cannot call a class as a function");
18
- }
19
- }
20
- function _defineProperties(target, props) {
21
- for(var i = 0; i < props.length; i++){
22
- var descriptor = props[i];
23
- descriptor.enumerable = descriptor.enumerable || false;
24
- descriptor.configurable = true;
25
- if ("value" in descriptor) descriptor.writable = true;
26
- Object.defineProperty(target, descriptor.key, descriptor);
27
- }
28
- }
29
- function _create_class(Constructor, protoProps, staticProps) {
30
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
31
- if (staticProps) _defineProperties(Constructor, staticProps);
32
- return Constructor;
33
- }
34
- function _interop_require_default(obj) {
35
- return obj && obj.__esModule ? obj : {
36
- default: obj
37
- };
38
- }
39
- var last = _necessary.arrayUtilities.last;
40
- var DirectedAcyclicGraph = /*#__PURE__*/ function() {
41
- function DirectedAcyclicGraph(vertexMap) {
42
- _class_call_check(this, DirectedAcyclicGraph);
43
- this.vertexMap = vertexMap;
44
- }
45
- _create_class(DirectedAcyclicGraph, [
46
- {
47
- key: "isEmpty",
48
- value: function isEmpty() {
49
- var vertices = this.getVertices(), verticesLength = vertices.length, empty = verticesLength === 0;
50
- return empty;
51
- }
52
- },
53
- {
54
- key: "getVertices",
55
- value: function getVertices() {
56
- var vertexMapValues = Object.values(this.vertexMap), vertices = vertexMapValues; ///
57
- return vertices;
58
- }
59
- },
60
- {
61
- key: "getVertexNames",
62
- value: function getVertexNames() {
63
- var vertexMapKeys = Object.keys(this.vertexMap), vertexNames = vertexMapKeys; ///
64
- return vertexNames;
65
- }
66
- },
67
- {
68
- key: "getVertexByVertexName",
69
- value: function getVertexByVertexName(vertexName) {
70
- var vertexPresent = this.isVertexPresentByVertexName(vertexName), vertex = vertexPresent ? this.vertexMap[vertexName] : null;
71
- return vertex;
72
- }
73
- },
74
- {
75
- key: "getImmediatePredecessorVertexNamesByVertexName",
76
- value: function getImmediatePredecessorVertexNamesByVertexName(vertexName) {
77
- var vertex = this.getVertexByVertexName(vertexName), immediatePredecessorVertexNames = vertex.getImmediatePredecessorVertexNames();
78
- return immediatePredecessorVertexNames;
79
- }
80
- },
81
- {
82
- key: "getImmediateSuccessorVertexNamesByVertexName",
83
- value: function getImmediateSuccessorVertexNamesByVertexName(vertexName) {
84
- var vertex = this.getVertexByVertexName(vertexName), immediateSuccessorVertexNames = vertex.getImmediateSuccessorVertexNames();
85
- return immediateSuccessorVertexNames;
86
- }
87
- },
88
- {
89
- key: "getPredecessorVertexNamesByVertexName",
90
- value: function getPredecessorVertexNamesByVertexName(vertexName) {
91
- var vertex = this.getVertexByVertexName(vertexName), predecessorVertexNames = vertex.getPredecessorVertexNames();
92
- return predecessorVertexNames;
93
- }
94
- },
95
- {
96
- key: "getSuccessorVertexNamesByVertexName",
97
- value: function getSuccessorVertexNamesByVertexName(vertexName) {
98
- var vertex = this.getVertexByVertexName(vertexName), successorVertexNames = vertex.getSuccessorVertexNames();
99
- return successorVertexNames;
100
- }
101
- },
102
- {
103
- key: "getEdgesByTargetVertexName",
104
- value: function getEdgesByTargetVertexName(targetVertexName) {
105
- var edges = [], targetVertex = this.getVertexByVertexName(targetVertexName);
106
- if (targetVertex !== null) {
107
- var immediatePredecessorVertexNames = targetVertex.getImmediatePredecessorVertexNames(), sourceVertexNames = immediatePredecessorVertexNames; ///
108
- sourceVertexNames.forEach(function(sourceVertexName) {
109
- var edge = _edge.default.fromSourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName);
110
- edges.push(edge);
111
- });
112
- }
113
- return edges;
114
- }
115
- },
116
- {
117
- key: "getEdgesBySourceVertexName",
118
- value: function getEdgesBySourceVertexName(sourceVertexName) {
119
- var edges = [], sourceVertex = this.getVertexByVertexName(sourceVertexName);
120
- if (sourceVertex !== null) {
121
- var immediateSuccessorVertexNames = sourceVertex.getImmediateSuccessorVertexNames(), targetVertexNames = immediateSuccessorVertexNames; ///
122
- targetVertexNames.forEach(function(targetVertexName) {
123
- var edge = _edge.default.fromSourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName);
124
- edges.push(edge);
125
- });
126
- }
127
- return edges;
128
- }
129
- },
130
- {
131
- key: "setVertexByVertexName",
132
- value: function setVertexByVertexName(vertexName, vertex) {
133
- this.vertexMap[vertexName] = vertex;
134
- }
135
- },
136
- {
137
- key: "deleteVertexByVertexName",
138
- value: function deleteVertexByVertexName(vertexName) {
139
- delete this.vertexMap[vertexName];
140
- }
141
- },
142
- {
143
- key: "isEdgePresent",
144
- value: function isEdgePresent(edge) {
145
- var sourceVertexName = edge.getSourceVertexName(), targetVertexName = edge.getTargetVertexName(), edgePresent = this.isEdgePresentByVertexNames(sourceVertexName, targetVertexName);
146
- return edgePresent;
147
- }
148
- },
149
- {
150
- key: "isEdgePresentByVertexNames",
151
- value: function isEdgePresentByVertexNames(sourceVertexName, targetVertexName) {
152
- var edgePresent = false;
153
- var sourceVertex = this.getVertexByVertexName(sourceVertexName), targetVertex = this.getVertexByVertexName(targetVertexName), sourceVertexAndTargetVertexPresent = sourceVertex !== null && targetVertex !== null;
154
- if (sourceVertexAndTargetVertexPresent) {
155
- edgePresent = sourceVertex.isEdgePresentByTargetVertex(targetVertex);
156
- }
157
- return edgePresent;
158
- }
159
- },
160
- {
161
- key: "isVertexPresentByVertexName",
162
- value: function isVertexPresentByVertexName(vertexName) {
163
- var vertexNames = this.getVertexNames(), vertexNamesIncludesVertexName = vertexNames.includes(vertexName), vertexPresent = vertexNamesIncludesVertexName; ///
164
- return vertexPresent;
165
- }
166
- },
167
- {
168
- key: "getOrderedVertexNames",
169
- value: function getOrderedVertexNames() {
170
- var vertices = this.getVertices();
171
- (0, _vertex1.orderVertices)(vertices);
172
- var orderedVertices = vertices, orderedVertexNames = (0, _vertex1.vertexNamesFromVertices)(orderedVertices);
173
- return orderedVertexNames;
174
- }
175
- },
176
- {
177
- key: "addEdge",
178
- value: function addEdge(edge) {
179
- var sourceVertexName = edge.getSourceVertexName(), targetVertexName = edge.getTargetVertexName(), success = this.addEdgeByVertexNames(sourceVertexName, targetVertexName);
180
- return success;
181
- }
182
- },
183
- {
184
- key: "removeEdge",
185
- value: function removeEdge(edge) {
186
- var sourceVertexName = edge.getSourceVertexName(), targetVertexName = edge.getTargetVertexName();
187
- this.removeEdgeByVertexNames(sourceVertexName, targetVertexName);
188
- }
189
- },
190
- {
191
- key: "addEdgeByVertexNames",
192
- value: function addEdgeByVertexNames(sourceVertexName, targetVertexName) {
193
- var success = false;
194
- if (sourceVertexName !== targetVertexName) {
195
- var sourceVertex = this.addVertexByVertexName(sourceVertexName), targetVertex = this.addVertexByVertexName(targetVertexName), edgePresent = sourceVertex.isEdgePresentByTargetVertex(targetVertex);
196
- if (edgePresent) {
197
- success = true;
198
- } else {
199
- var sourceVertexIndex = sourceVertex.getIndex(), targetVertexIndex = targetVertex.getIndex(), invalidatingEdge = sourceVertexIndex > targetVertexIndex;
200
- success = invalidatingEdge ? addInvalidatingEdgeByVertices(sourceVertex, targetVertex) : true;
201
- if (success) {
202
- var immediatePredecessorVertex = sourceVertex, immediateSuccessorVertex = targetVertex; ///
203
- immediatePredecessorVertex.addImmediateSuccessorVertex(immediateSuccessorVertex);
204
- immediateSuccessorVertex.addImmediatePredecessorVertex(immediatePredecessorVertex);
205
- }
206
- }
207
- }
208
- return success;
209
- }
210
- },
211
- {
212
- key: "removeEdgeByVertexNames",
213
- value: function removeEdgeByVertexNames(sourceVertexName, targetVertexName) {
214
- var edgePresent = this.isEdgePresentByVertexNames(sourceVertexName, targetVertexName);
215
- if (edgePresent) {
216
- var sourceVertex = this.getVertexByVertexName(sourceVertexName), targetVertex = this.getVertexByVertexName(targetVertexName);
217
- sourceVertex.removeImmediateSuccessorVertex(targetVertex);
218
- targetVertex.removeImmediatePredecessorVertex(sourceVertex);
219
- }
220
- }
221
- },
222
- {
223
- key: "removeEdgesBySourceVertexName",
224
- value: function removeEdgesBySourceVertexName(sourceVertexName) {
225
- var sourceVertexPresent = this.isVertexPresentByVertexName(sourceVertexName);
226
- if (sourceVertexPresent) {
227
- var sourceVertex = this.getVertexByVertexName(sourceVertexName);
228
- sourceVertex.removeOutgoingEdges();
229
- }
230
- }
231
- },
232
- {
233
- key: "removeEdgesByTargetVertexName",
234
- value: function removeEdgesByTargetVertexName(targetVertexName) {
235
- var targetVertexPresent = this.isVertexPresentByVertexName(targetVertexName);
236
- if (targetVertexPresent) {
237
- var targetVertex = this.getVertexByVertexName(targetVertexName);
238
- targetVertex.removeIncomingEdges();
239
- }
240
- }
241
- },
242
- {
243
- key: "addVertexByVertexName",
244
- value: function addVertexByVertexName(vertexName) {
245
- var vertexPresent = this.isVertexPresentByVertexName(vertexName);
246
- if (!vertexPresent) {
247
- var vertexNames = this.getVertexNames(), vertexNamesLength = vertexNames.length, name = vertexName, index = vertexNamesLength, vertex = _vertex.default.fromNameAndIndex(name, index);
248
- this.setVertexByVertexName(vertexName, vertex);
249
- }
250
- var vertex1 = this.getVertexByVertexName(vertexName);
251
- return vertex1;
252
- }
253
- },
254
- {
255
- key: "removeVertexByVertexName",
256
- value: function removeVertexByVertexName(vertexName) {
257
- var removedEdges = null;
258
- var vertexPresent = this.isVertexPresentByVertexName(vertexName);
259
- if (vertexPresent) {
260
- removedEdges = [];
261
- var vertex = this.getVertexByVertexName(vertexName);
262
- vertex.forEachImmediateSuccessorVertex(function(immediateSuccessVertex) {
263
- var immediatePredecessorVertex = vertex, immediatePredecessorVertexName = immediatePredecessorVertex.getName(), immediateSuccessVertexName = immediateSuccessVertex.getName(), removedEdgeSourceVertexName = immediatePredecessorVertexName, removedEdgeTargetVertexName = immediateSuccessVertexName, removedEdge = new _edge.default(removedEdgeSourceVertexName, removedEdgeTargetVertexName);
264
- removedEdges.push(removedEdge);
265
- immediateSuccessVertex.removeImmediatePredecessorVertex(immediatePredecessorVertex);
266
- });
267
- vertex.forEachImmediatePredecessorVertex(function(immediatePredecessorVertex) {
268
- var immediateSuccessVertex = vertex, immediatePredecessorVertexName = immediatePredecessorVertex.getName(), immediateSuccessVertexName = immediateSuccessVertex.getName(), removedEdgeSourceVertexName = immediatePredecessorVertexName, removedEdgeTargetVertexName = immediateSuccessVertexName, removedEdge = new _edge.default(removedEdgeSourceVertexName, removedEdgeTargetVertexName);
269
- removedEdges.push(removedEdge);
270
- immediatePredecessorVertex.removeImmediateSuccessorVertex(immediateSuccessVertex);
271
- });
272
- this.deleteVertexByVertexName(vertexName);
273
- var deletedVertex = vertex, deletedVertexIndex = deletedVertex.getIndex(), vertices = this.getVertices(), affectedVertices = vertices.reduce(function(affectedVertices, vertex) {
274
- var vertexIndex = vertex.getIndex(), vertexAffected = vertexIndex > deletedVertexIndex;
275
- if (vertexAffected) {
276
- var affectedVertex = vertex; ///
277
- affectedVertices.push(affectedVertex);
278
- }
279
- return affectedVertices;
280
- }, []);
281
- affectedVertices.forEach(function(affectedVertex) {
282
- return affectedVertex.decrementIndex();
283
- });
284
- }
285
- return removedEdges;
286
- }
287
- }
288
- ], [
289
- {
290
- key: "fromNothing",
291
- value: function fromNothing() {
292
- var vertexMap = {}, directedAcyclicGraph = new DirectedAcyclicGraph(vertexMap);
293
- return directedAcyclicGraph;
294
- }
295
- },
296
- {
297
- key: "fromVertexNames",
298
- value: function fromVertexNames(vertexNames) {
299
- var vertexMap = vertexMapFromVertexNames(vertexNames);
300
- var directedAcyclicGraph = new DirectedAcyclicGraph(vertexMap);
301
- return directedAcyclicGraph;
302
- }
303
- },
304
- {
305
- key: "fromOrderedVertices",
306
- value: function fromOrderedVertices(orderedVertices) {
307
- var vertexMap = vertexMapFromOrderedVertices(orderedVertices);
308
- addEdgesToVertices(orderedVertices, vertexMap);
309
- var directedAcyclicGraph = new DirectedAcyclicGraph(vertexMap);
310
- return directedAcyclicGraph;
311
- }
312
- }
313
- ]);
314
- return DirectedAcyclicGraph;
315
- }();
316
- function addInvalidatingEdgeByVertices(sourceVertex, targetVertex) {
317
- var success = false;
318
- var forwardsAffectedVertices = targetVertex.retrieveForwardsAffectedVertices(sourceVertex), lastForwardsAffectedVertex = last(forwardsAffectedVertices), resultsInCycle = lastForwardsAffectedVertex === sourceVertex;
319
- if (!resultsInCycle) {
320
- var backwardsAffectedVertices = sourceVertex.retrieveBackwardsAffectedVertices();
321
- (0, _vertex1.orderVertices)(backwardsAffectedVertices);
322
- (0, _vertex1.orderVertices)(forwardsAffectedVertices);
323
- var affectedVertices = [].concat(backwardsAffectedVertices).concat(forwardsAffectedVertices), affectedVertexIndices = affectedVertices.map(function(affectedVertex) {
324
- var affectedVertexIndex = affectedVertex.getIndex();
325
- return affectedVertexIndex;
326
- });
327
- affectedVertexIndices.sort(function(indexA, indexB) {
328
- return indexA - indexB;
329
- });
330
- affectedVertices.forEach(function(affectedVertex, index) {
331
- var affectedVertexIndex = affectedVertexIndices[index];
332
- affectedVertex.setIndex(affectedVertexIndex);
333
- });
334
- success = true;
335
- }
336
- return success;
337
- }
338
- function vertexMapFromVertexNames(vertexNames) {
339
- var vertexMap = {};
340
- vertexNames.forEach(function(vertexName, index) {
341
- var name = vertexName, vertex = _vertex.default.fromNameAndIndex(name, index);
342
- vertexMap[vertexName] = vertex;
343
- });
344
- return vertexMap;
345
- }
346
- function vertexMapFromOrderedVertices(orderedVertices) {
347
- var vertexMap = {};
348
- orderedVertices.forEach(function(orderedVertex, index) {
349
- var name = orderedVertex.getName(), vertex = _vertex.default.fromNameAndIndex(name, index), vertexName = name; ///
350
- vertexMap[vertexName] = vertex;
351
- });
352
- return vertexMap;
353
- }
354
- function addEdgesToVertices(orderedVertices, vertexMap) {
355
- orderedVertices.forEach(function(orderedVertex) {
356
- orderedVertex.forEachOutgoingEdge(function(outgoingEdge) {
357
- var sourceVertexName = outgoingEdge.getSourceVertexName(), targetVertexName = outgoingEdge.getTargetVertexName(), immediatePredecessorVertexName = sourceVertexName, immediateSuccessorVertexName = targetVertexName, immediatePredecessorVertex = vertexMap[immediatePredecessorVertexName], immediateSuccessorVertex = vertexMap[immediateSuccessorVertexName]; ///
358
- immediatePredecessorVertex.addImmediateSuccessorVertex(immediateSuccessorVertex);
359
- immediateSuccessorVertex.addImmediatePredecessorVertex(immediatePredecessorVertex);
360
- });
361
- });
362
- }
363
-
364
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kaXJlY3RlZEFjeWNsaWNHcmFwaC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmltcG9ydCBFZGdlIGZyb20gXCIuL2VkZ2VcIjtcbmltcG9ydCBWZXJ0ZXggZnJvbSBcIi4vdmVydGV4XCI7XG5cbmltcG9ydCB7IHZlcnRleE5hbWVzRnJvbVZlcnRpY2VzLCBvcmRlclZlcnRpY2VzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3ZlcnRleFwiO1xuXG5jb25zdCB7IGxhc3QgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXJlY3RlZEFjeWNsaWNHcmFwaCB7XG4gIGNvbnN0cnVjdG9yKHZlcnRleE1hcCkge1xuICAgIHRoaXMudmVydGV4TWFwID0gdmVydGV4TWFwO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICBjb25zdCB2ZXJ0aWNlcyA9IHRoaXMuZ2V0VmVydGljZXMoKSxcbiAgICAgICAgICB2ZXJ0aWNlc0xlbmd0aCA9IHZlcnRpY2VzLmxlbmd0aCxcbiAgICAgICAgICBlbXB0eSA9ICh2ZXJ0aWNlc0xlbmd0aCA9PT0gMCk7XG5cbiAgICByZXR1cm4gZW1wdHk7XG4gIH1cblxuICBnZXRWZXJ0aWNlcygpIHtcbiAgICBjb25zdCB2ZXJ0ZXhNYXBWYWx1ZXMgPSBPYmplY3QudmFsdWVzKHRoaXMudmVydGV4TWFwKSxcbiAgICAgICAgICB2ZXJ0aWNlcyA9IHZlcnRleE1hcFZhbHVlczsgLy8vXG5cbiAgICByZXR1cm4gdmVydGljZXM7XG4gIH1cblxuICBnZXRWZXJ0ZXhOYW1lcygpIHtcbiAgICBjb25zdCB2ZXJ0ZXhNYXBLZXlzID0gT2JqZWN0LmtleXModGhpcy52ZXJ0ZXhNYXApLFxuICAgICAgICAgIHZlcnRleE5hbWVzID0gdmVydGV4TWFwS2V5czsgIC8vL1xuXG4gICAgcmV0dXJuIHZlcnRleE5hbWVzO1xuICB9XG5cbiAgZ2V0VmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHtcbiAgICBjb25zdCB2ZXJ0ZXhQcmVzZW50ID0gdGhpcy5pc1ZlcnRleFByZXNlbnRCeVZlcnRleE5hbWUodmVydGV4TmFtZSksXG4gICAgICAgICAgdmVydGV4ID0gdmVydGV4UHJlc2VudCA/XG4gICAgICAgICAgICAgICAgICAgICB0aGlzLnZlcnRleE1hcFt2ZXJ0ZXhOYW1lXSA6XG4gICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgICByZXR1cm4gdmVydGV4O1xuICB9XG5cbiAgZ2V0SW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lc0J5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKSB7XG4gICAgY29uc3QgdmVydGV4ID0gdGhpcy5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUodmVydGV4TmFtZSksXG4gICAgICAgICAgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyA9IHZlcnRleC5nZXRJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWVzKCk7XG5cbiAgICByZXR1cm4gaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcztcbiAgfVxuXG4gIGdldEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHtcbiAgICBjb25zdCB2ZXJ0ZXggPSB0aGlzLmdldFZlcnRleEJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKSxcbiAgICAgICAgICBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcyA9IHZlcnRleC5nZXRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcygpO1xuXG4gICAgcmV0dXJuIGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzO1xuICB9XG5cbiAgZ2V0UHJlZGVjZXNzb3JWZXJ0ZXhOYW1lc0J5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKSB7XG4gICAgY29uc3QgdmVydGV4ID0gdGhpcy5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUodmVydGV4TmFtZSksXG4gICAgICAgICAgcHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyA9IHZlcnRleC5nZXRQcmVkZWNlc3NvclZlcnRleE5hbWVzKCk7XG5cbiAgICByZXR1cm4gcHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcztcbiAgfVxuXG4gIGdldFN1Y2Nlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHtcbiAgICBjb25zdCB2ZXJ0ZXggPSB0aGlzLmdldFZlcnRleEJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKSxcbiAgICAgICAgICBzdWNjZXNzb3JWZXJ0ZXhOYW1lcyA9IHZlcnRleC5nZXRTdWNjZXNzb3JWZXJ0ZXhOYW1lcygpO1xuXG4gICAgcmV0dXJuIHN1Y2Nlc3NvclZlcnRleE5hbWVzO1xuICB9XG5cbiAgZ2V0RWRnZXNCeVRhcmdldFZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSkge1xuICAgIGNvbnN0IGVkZ2VzID0gW10sXG4gICAgICAgICAgdGFyZ2V0VmVydGV4ID0gdGhpcy5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSk7XG5cbiAgICBpZiAodGFyZ2V0VmVydGV4ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWVzID0gdGFyZ2V0VmVydGV4LmdldEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZXMoKSxcbiAgICAgICAgICAgIHNvdXJjZVZlcnRleE5hbWVzID0gaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lczsgIC8vL1xuXG4gICAgICBzb3VyY2VWZXJ0ZXhOYW1lcy5mb3JFYWNoKChzb3VyY2VWZXJ0ZXhOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSBFZGdlLmZyb21Tb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKTtcblxuICAgICAgICBlZGdlcy5wdXNoKGVkZ2UpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVkZ2VzO1xuICB9XG5cbiAgZ2V0RWRnZXNCeVNvdXJjZVZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSkge1xuICAgIGNvbnN0IGVkZ2VzID0gW10sXG4gICAgICAgICAgc291cmNlVmVydGV4ID0gdGhpcy5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSk7XG5cbiAgICBpZiAoc291cmNlVmVydGV4ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcyA9IHNvdXJjZVZlcnRleC5nZXRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcygpLFxuICAgICAgICAgICAgdGFyZ2V0VmVydGV4TmFtZXMgPSBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lczsgIC8vL1xuXG4gICAgICB0YXJnZXRWZXJ0ZXhOYW1lcy5mb3JFYWNoKCh0YXJnZXRWZXJ0ZXhOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGVkZ2UgPSBFZGdlLmZyb21Tb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKTtcblxuICAgICAgICBlZGdlcy5wdXNoKGVkZ2UpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVkZ2VzO1xuICB9XG5cbiAgc2V0VmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUsIHZlcnRleCkge1xuICAgIHRoaXMudmVydGV4TWFwW3ZlcnRleE5hbWVdID0gdmVydGV4O1xuICB9XG5cbiAgZGVsZXRlVmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHtcbiAgICBkZWxldGUgdGhpcy52ZXJ0ZXhNYXBbdmVydGV4TmFtZV07XG4gIH1cblxuICBpc0VkZ2VQcmVzZW50KGVkZ2UpIHtcbiAgICBjb25zdCBzb3VyY2VWZXJ0ZXhOYW1lID0gZWRnZS5nZXRTb3VyY2VWZXJ0ZXhOYW1lKCksXG4gICAgICAgICAgdGFyZ2V0VmVydGV4TmFtZSA9IGVkZ2UuZ2V0VGFyZ2V0VmVydGV4TmFtZSgpLFxuICAgICAgICAgIGVkZ2VQcmVzZW50ID0gdGhpcy5pc0VkZ2VQcmVzZW50QnlWZXJ0ZXhOYW1lcyhzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKTtcbiAgICBcbiAgICByZXR1cm4gZWRnZVByZXNlbnQ7XG4gIH1cblxuICBpc0VkZ2VQcmVzZW50QnlWZXJ0ZXhOYW1lcyhzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKSB7XG4gICAgbGV0IGVkZ2VQcmVzZW50ID0gZmFsc2U7XG5cbiAgICBjb25zdCBzb3VyY2VWZXJ0ZXggPSB0aGlzLmdldFZlcnRleEJ5VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lKSxcbiAgICAgICAgICB0YXJnZXRWZXJ0ZXggPSB0aGlzLmdldFZlcnRleEJ5VmVydGV4TmFtZSh0YXJnZXRWZXJ0ZXhOYW1lKSxcbiAgICAgICAgICBzb3VyY2VWZXJ0ZXhBbmRUYXJnZXRWZXJ0ZXhQcmVzZW50ID0gKHNvdXJjZVZlcnRleCAhPT0gbnVsbCkgJiYgKHRhcmdldFZlcnRleCAhPT0gbnVsbCk7XG5cbiAgICBpZiAoc291cmNlVmVydGV4QW5kVGFyZ2V0VmVydGV4UHJlc2VudCkge1xuICAgICAgZWRnZVByZXNlbnQgPSBzb3VyY2VWZXJ0ZXguaXNFZGdlUHJlc2VudEJ5VGFyZ2V0VmVydGV4KHRhcmdldFZlcnRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVkZ2VQcmVzZW50O1xuICB9XG5cbiAgaXNWZXJ0ZXhQcmVzZW50QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHtcbiAgICBjb25zdCB2ZXJ0ZXhOYW1lcyA9IHRoaXMuZ2V0VmVydGV4TmFtZXMoKSxcbiAgICAgICAgICB2ZXJ0ZXhOYW1lc0luY2x1ZGVzVmVydGV4TmFtZSA9IHZlcnRleE5hbWVzLmluY2x1ZGVzKHZlcnRleE5hbWUpLFxuICAgICAgICAgIHZlcnRleFByZXNlbnQgPSB2ZXJ0ZXhOYW1lc0luY2x1ZGVzVmVydGV4TmFtZTsgIC8vL1xuXG4gICAgcmV0dXJuIHZlcnRleFByZXNlbnQ7XG4gIH1cblxuICBnZXRPcmRlcmVkVmVydGV4TmFtZXMoKSB7XG4gICAgY29uc3QgdmVydGljZXMgPSB0aGlzLmdldFZlcnRpY2VzKCk7XG5cbiAgICBvcmRlclZlcnRpY2VzKHZlcnRpY2VzKTtcblxuICAgIGNvbnN0IG9yZGVyZWRWZXJ0aWNlcyA9IHZlcnRpY2VzLCAvLy9cbiAgICAgICAgICBvcmRlcmVkVmVydGV4TmFtZXMgPSB2ZXJ0ZXhOYW1lc0Zyb21WZXJ0aWNlcyhvcmRlcmVkVmVydGljZXMpO1xuXG4gICAgcmV0dXJuIG9yZGVyZWRWZXJ0ZXhOYW1lcztcbiAgfVxuXG4gIGFkZEVkZ2UoZWRnZSkge1xuICAgIGNvbnN0IHNvdXJjZVZlcnRleE5hbWUgPSBlZGdlLmdldFNvdXJjZVZlcnRleE5hbWUoKSxcbiAgICAgICAgICB0YXJnZXRWZXJ0ZXhOYW1lID0gZWRnZS5nZXRUYXJnZXRWZXJ0ZXhOYW1lKCksXG4gICAgICAgICAgc3VjY2VzcyA9IHRoaXMuYWRkRWRnZUJ5VmVydGV4TmFtZXMoc291cmNlVmVydGV4TmFtZSwgdGFyZ2V0VmVydGV4TmFtZSk7XG5cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIHJlbW92ZUVkZ2UoZWRnZSkge1xuICAgIGNvbnN0IHNvdXJjZVZlcnRleE5hbWUgPSBlZGdlLmdldFNvdXJjZVZlcnRleE5hbWUoKSxcbiAgICAgICAgICB0YXJnZXRWZXJ0ZXhOYW1lID0gZWRnZS5nZXRUYXJnZXRWZXJ0ZXhOYW1lKCk7XG5cbiAgICB0aGlzLnJlbW92ZUVkZ2VCeVZlcnRleE5hbWVzKHNvdXJjZVZlcnRleE5hbWUsIHRhcmdldFZlcnRleE5hbWUpO1xuICB9XG5cbiAgYWRkRWRnZUJ5VmVydGV4TmFtZXMoc291cmNlVmVydGV4TmFtZSwgdGFyZ2V0VmVydGV4TmFtZSkge1xuICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICBpZiAoc291cmNlVmVydGV4TmFtZSAhPT0gdGFyZ2V0VmVydGV4TmFtZSkge1xuICAgICAgY29uc3Qgc291cmNlVmVydGV4ID0gdGhpcy5hZGRWZXJ0ZXhCeVZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSksXG4gICAgICAgICAgICB0YXJnZXRWZXJ0ZXggPSB0aGlzLmFkZFZlcnRleEJ5VmVydGV4TmFtZSh0YXJnZXRWZXJ0ZXhOYW1lKSxcbiAgICAgICAgICAgIGVkZ2VQcmVzZW50ID0gc291cmNlVmVydGV4LmlzRWRnZVByZXNlbnRCeVRhcmdldFZlcnRleCh0YXJnZXRWZXJ0ZXgpO1xuICAgICAgXG4gICAgICBpZiAoZWRnZVByZXNlbnQpIHtcbiAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBzb3VyY2VWZXJ0ZXhJbmRleCA9IHNvdXJjZVZlcnRleC5nZXRJbmRleCgpLFxuICAgICAgICAgICAgICB0YXJnZXRWZXJ0ZXhJbmRleCA9IHRhcmdldFZlcnRleC5nZXRJbmRleCgpLFxuICAgICAgICAgICAgICBpbnZhbGlkYXRpbmdFZGdlID0gKHNvdXJjZVZlcnRleEluZGV4ID4gdGFyZ2V0VmVydGV4SW5kZXgpO1xuXG4gICAgICAgIHN1Y2Nlc3MgPSBpbnZhbGlkYXRpbmdFZGdlID9cbiAgICAgICAgICAgICAgICAgICAgYWRkSW52YWxpZGF0aW5nRWRnZUJ5VmVydGljZXMoc291cmNlVmVydGV4LCB0YXJnZXRWZXJ0ZXgpIDpcbiAgICAgICAgICAgICAgICAgICAgICB0cnVlO1xuXG4gICAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgICAgY29uc3QgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXggPSBzb3VyY2VWZXJ0ZXgsIC8vL1xuICAgICAgICAgICAgICAgIGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCA9IHRhcmdldFZlcnRleDsgLy8vXG5cbiAgICAgICAgICBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleC5hZGRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgoaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KTtcblxuICAgICAgICAgIGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleC5hZGRJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleChpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH1cblxuICByZW1vdmVFZGdlQnlWZXJ0ZXhOYW1lcyhzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKSB7XG4gICAgY29uc3QgZWRnZVByZXNlbnQgPSB0aGlzLmlzRWRnZVByZXNlbnRCeVZlcnRleE5hbWVzKHNvdXJjZVZlcnRleE5hbWUsIHRhcmdldFZlcnRleE5hbWUpO1xuXG4gICAgaWYgKGVkZ2VQcmVzZW50KSB7XG4gICAgICBjb25zdCBzb3VyY2VWZXJ0ZXggPSB0aGlzLmdldFZlcnRleEJ5VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lKSxcbiAgICAgICAgICAgIHRhcmdldFZlcnRleCA9IHRoaXMuZ2V0VmVydGV4QnlWZXJ0ZXhOYW1lKHRhcmdldFZlcnRleE5hbWUpO1xuXG4gICAgICBzb3VyY2VWZXJ0ZXgucmVtb3ZlSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KHRhcmdldFZlcnRleCk7XG4gICAgICB0YXJnZXRWZXJ0ZXgucmVtb3ZlSW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgoc291cmNlVmVydGV4KTtcbiAgICB9XG4gIH1cblxuICByZW1vdmVFZGdlc0J5U291cmNlVmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lKSB7XG4gICAgY29uc3Qgc291cmNlVmVydGV4UHJlc2VudCA9IHRoaXMuaXNWZXJ0ZXhQcmVzZW50QnlWZXJ0ZXhOYW1lKHNvdXJjZVZlcnRleE5hbWUpO1xuXG4gICAgaWYgKHNvdXJjZVZlcnRleFByZXNlbnQpIHtcbiAgICAgIGNvbnN0IHNvdXJjZVZlcnRleCA9IHRoaXMuZ2V0VmVydGV4QnlWZXJ0ZXhOYW1lKHNvdXJjZVZlcnRleE5hbWUpO1xuXG4gICAgICBzb3VyY2VWZXJ0ZXgucmVtb3ZlT3V0Z29pbmdFZGdlcygpO1xuICAgIH1cbiAgfVxuXG4gIHJlbW92ZUVkZ2VzQnlUYXJnZXRWZXJ0ZXhOYW1lKHRhcmdldFZlcnRleE5hbWUpIHtcbiAgICBjb25zdCB0YXJnZXRWZXJ0ZXhQcmVzZW50ID0gdGhpcy5pc1ZlcnRleFByZXNlbnRCeVZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSk7XG5cbiAgICBpZiAodGFyZ2V0VmVydGV4UHJlc2VudCkge1xuICAgICAgY29uc3QgdGFyZ2V0VmVydGV4ID0gdGhpcy5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSk7XG5cbiAgICAgIHRhcmdldFZlcnRleC5yZW1vdmVJbmNvbWluZ0VkZ2VzKCk7XG4gICAgfVxuICB9XG5cbiAgYWRkVmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHtcbiAgICBjb25zdCB2ZXJ0ZXhQcmVzZW50ID0gdGhpcy5pc1ZlcnRleFByZXNlbnRCeVZlcnRleE5hbWUodmVydGV4TmFtZSk7XG5cbiAgICBpZiAoIXZlcnRleFByZXNlbnQpIHtcbiAgICAgIGNvbnN0IHZlcnRleE5hbWVzID0gdGhpcy5nZXRWZXJ0ZXhOYW1lcygpLFxuICAgICAgICAgICAgdmVydGV4TmFtZXNMZW5ndGggPSB2ZXJ0ZXhOYW1lcy5sZW5ndGgsXG4gICAgICAgICAgICBuYW1lID0gdmVydGV4TmFtZSwgIC8vL1xuICAgICAgICAgICAgaW5kZXggPSB2ZXJ0ZXhOYW1lc0xlbmd0aCwgLy8vXG4gICAgICAgICAgICB2ZXJ0ZXggPSBWZXJ0ZXguZnJvbU5hbWVBbmRJbmRleChuYW1lLCBpbmRleCk7XG5cbiAgICAgIHRoaXMuc2V0VmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUsIHZlcnRleCk7XG4gICAgfVxuXG4gICAgY29uc3QgdmVydGV4ID0gdGhpcy5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUodmVydGV4TmFtZSk7XG5cbiAgICByZXR1cm4gdmVydGV4O1xuICB9XG5cbiAgcmVtb3ZlVmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHtcbiAgICBsZXQgcmVtb3ZlZEVkZ2VzID0gbnVsbDtcblxuICAgIGNvbnN0IHZlcnRleFByZXNlbnQgPSB0aGlzLmlzVmVydGV4UHJlc2VudEJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKTtcblxuICAgIGlmICh2ZXJ0ZXhQcmVzZW50KSB7XG4gICAgICByZW1vdmVkRWRnZXMgPSBbXTtcblxuICAgICAgY29uc3QgdmVydGV4ID0gdGhpcy5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUodmVydGV4TmFtZSk7XG5cbiAgICAgIHZlcnRleC5mb3JFYWNoSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KChpbW1lZGlhdGVTdWNjZXNzVmVydGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ID0gdmVydGV4LCAgLy8vXG4gICAgICAgICAgICAgIGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZSA9IGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4LmdldE5hbWUoKSxcbiAgICAgICAgICAgICAgaW1tZWRpYXRlU3VjY2Vzc1ZlcnRleE5hbWUgPSBpbW1lZGlhdGVTdWNjZXNzVmVydGV4LmdldE5hbWUoKSxcbiAgICAgICAgICAgICAgcmVtb3ZlZEVkZ2VTb3VyY2VWZXJ0ZXhOYW1lID0gaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lLCAvLy9cbiAgICAgICAgICAgICAgcmVtb3ZlZEVkZ2VUYXJnZXRWZXJ0ZXhOYW1lID0gaW1tZWRpYXRlU3VjY2Vzc1ZlcnRleE5hbWUsIC8vL1xuICAgICAgICAgICAgICByZW1vdmVkRWRnZSA9IG5ldyBFZGdlKHJlbW92ZWRFZGdlU291cmNlVmVydGV4TmFtZSwgcmVtb3ZlZEVkZ2VUYXJnZXRWZXJ0ZXhOYW1lKTtcblxuICAgICAgICByZW1vdmVkRWRnZXMucHVzaChyZW1vdmVkRWRnZSk7XG5cbiAgICAgICAgaW1tZWRpYXRlU3VjY2Vzc1ZlcnRleC5yZW1vdmVJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleChpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCk7XG4gICAgICB9KTtcblxuICAgICAgdmVydGV4LmZvckVhY2hJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCgoaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgpID0+IHtcbiAgICAgICAgY29uc3QgaW1tZWRpYXRlU3VjY2Vzc1ZlcnRleCA9IHZlcnRleCwgIC8vL1xuICAgICAgICAgICAgICBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWUgPSBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleC5nZXROYW1lKCksXG4gICAgICAgICAgICAgIGltbWVkaWF0ZVN1Y2Nlc3NWZXJ0ZXhOYW1lID0gaW1tZWRpYXRlU3VjY2Vzc1ZlcnRleC5nZXROYW1lKCksICAvLy9cbiAgICAgICAgICAgICAgcmVtb3ZlZEVkZ2VTb3VyY2VWZXJ0ZXhOYW1lID0gaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lLCAvLy9cbiAgICAgICAgICAgICAgcmVtb3ZlZEVkZ2VUYXJnZXRWZXJ0ZXhOYW1lID0gaW1tZWRpYXRlU3VjY2Vzc1ZlcnRleE5hbWUsIC8vL1xuICAgICAgICAgICAgICByZW1vdmVkRWRnZSA9IG5ldyBFZGdlKHJlbW92ZWRFZGdlU291cmNlVmVydGV4TmFtZSwgcmVtb3ZlZEVkZ2VUYXJnZXRWZXJ0ZXhOYW1lKTtcblxuICAgICAgICByZW1vdmVkRWRnZXMucHVzaChyZW1vdmVkRWRnZSk7XG5cbiAgICAgICAgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgucmVtb3ZlSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KGltbWVkaWF0ZVN1Y2Nlc3NWZXJ0ZXgpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuZGVsZXRlVmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpO1xuXG4gICAgICBjb25zdCBkZWxldGVkVmVydGV4ID0gdmVydGV4LCAvLy9cbiAgICAgICAgICAgIGRlbGV0ZWRWZXJ0ZXhJbmRleCA9IGRlbGV0ZWRWZXJ0ZXguZ2V0SW5kZXgoKSxcbiAgICAgICAgICAgIHZlcnRpY2VzID0gdGhpcy5nZXRWZXJ0aWNlcygpLFxuICAgICAgICAgICAgYWZmZWN0ZWRWZXJ0aWNlcyA9IHZlcnRpY2VzLnJlZHVjZSgoYWZmZWN0ZWRWZXJ0aWNlcywgdmVydGV4KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZlcnRleEluZGV4ID0gdmVydGV4LmdldEluZGV4KCksXG4gICAgICAgICAgICAgICAgICAgIHZlcnRleEFmZmVjdGVkID0gKHZlcnRleEluZGV4ID4gZGVsZXRlZFZlcnRleEluZGV4KTtcblxuICAgICAgICAgICAgICBpZiAodmVydGV4QWZmZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhZmZlY3RlZFZlcnRleCA9IHZlcnRleDsgIC8vL1xuXG4gICAgICAgICAgICAgICAgYWZmZWN0ZWRWZXJ0aWNlcy5wdXNoKGFmZmVjdGVkVmVydGV4KTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHJldHVybiBhZmZlY3RlZFZlcnRpY2VzO1xuICAgICAgICAgICAgfSwgW10pO1xuXG4gICAgICBhZmZlY3RlZFZlcnRpY2VzLmZvckVhY2goKGFmZmVjdGVkVmVydGV4KSA9PiBhZmZlY3RlZFZlcnRleC5kZWNyZW1lbnRJbmRleCgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVtb3ZlZEVkZ2VzO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IHZlcnRleE1hcCA9IHt9LFxuICAgICAgICAgIGRpcmVjdGVkQWN5Y2xpY0dyYXBoID0gbmV3IERpcmVjdGVkQWN5Y2xpY0dyYXBoKHZlcnRleE1hcCk7XG5cbiAgICByZXR1cm4gZGlyZWN0ZWRBY3ljbGljR3JhcGg7XG4gIH1cbiAgXG4gIHN0YXRpYyBmcm9tVmVydGV4TmFtZXModmVydGV4TmFtZXMpIHtcbiAgICBjb25zdCB2ZXJ0ZXhNYXAgPSB2ZXJ0ZXhNYXBGcm9tVmVydGV4TmFtZXModmVydGV4TmFtZXMpO1xuXG4gICAgY29uc3QgZGlyZWN0ZWRBY3ljbGljR3JhcGggPSBuZXcgRGlyZWN0ZWRBY3ljbGljR3JhcGgodmVydGV4TWFwKTtcblxuICAgIHJldHVybiBkaXJlY3RlZEFjeWNsaWNHcmFwaDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tT3JkZXJlZFZlcnRpY2VzKG9yZGVyZWRWZXJ0aWNlcykge1xuICAgIGNvbnN0IHZlcnRleE1hcCA9IHZlcnRleE1hcEZyb21PcmRlcmVkVmVydGljZXMob3JkZXJlZFZlcnRpY2VzKTtcbiAgICBcbiAgICBhZGRFZGdlc1RvVmVydGljZXMob3JkZXJlZFZlcnRpY2VzLCB2ZXJ0ZXhNYXApO1xuICAgIFxuICAgIGNvbnN0IGRpcmVjdGVkQWN5Y2xpY0dyYXBoID0gbmV3IERpcmVjdGVkQWN5Y2xpY0dyYXBoKHZlcnRleE1hcCk7XG4gICAgXG4gICAgcmV0dXJuIGRpcmVjdGVkQWN5Y2xpY0dyYXBoO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFkZEludmFsaWRhdGluZ0VkZ2VCeVZlcnRpY2VzKHNvdXJjZVZlcnRleCwgdGFyZ2V0VmVydGV4KSB7XG4gIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgY29uc3QgZm9yd2FyZHNBZmZlY3RlZFZlcnRpY2VzID0gdGFyZ2V0VmVydGV4LnJldHJpZXZlRm9yd2FyZHNBZmZlY3RlZFZlcnRpY2VzKHNvdXJjZVZlcnRleCksXG4gICAgICAgIGxhc3RGb3J3YXJkc0FmZmVjdGVkVmVydGV4ID0gbGFzdChmb3J3YXJkc0FmZmVjdGVkVmVydGljZXMpLFxuICAgICAgICByZXN1bHRzSW5DeWNsZSA9IChsYXN0Rm9yd2FyZHNBZmZlY3RlZFZlcnRleCA9PT0gc291cmNlVmVydGV4KTtcblxuICBpZiAoIXJlc3VsdHNJbkN5Y2xlKSB7XG4gICAgY29uc3QgYmFja3dhcmRzQWZmZWN0ZWRWZXJ0aWNlcyA9IHNvdXJjZVZlcnRleC5yZXRyaWV2ZUJhY2t3YXJkc0FmZmVjdGVkVmVydGljZXMoKTtcblxuICAgIG9yZGVyVmVydGljZXMoYmFja3dhcmRzQWZmZWN0ZWRWZXJ0aWNlcyk7XG5cbiAgICBvcmRlclZlcnRpY2VzKGZvcndhcmRzQWZmZWN0ZWRWZXJ0aWNlcyk7XG5cbiAgICBjb25zdCBhZmZlY3RlZFZlcnRpY2VzID0gW10uY29uY2F0KGJhY2t3YXJkc0FmZmVjdGVkVmVydGljZXMpLmNvbmNhdChmb3J3YXJkc0FmZmVjdGVkVmVydGljZXMpLFxuICAgICAgICAgIGFmZmVjdGVkVmVydGV4SW5kaWNlcyA9IGFmZmVjdGVkVmVydGljZXMubWFwKChhZmZlY3RlZFZlcnRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYWZmZWN0ZWRWZXJ0ZXhJbmRleCA9IGFmZmVjdGVkVmVydGV4LmdldEluZGV4KCk7XG5cbiAgICAgICAgICAgIHJldHVybiBhZmZlY3RlZFZlcnRleEluZGV4O1xuICAgICAgICAgIH0pO1xuXG4gICAgYWZmZWN0ZWRWZXJ0ZXhJbmRpY2VzLnNvcnQoKGluZGV4QSwgaW5kZXhCKSA9PiAoaW5kZXhBIC0gaW5kZXhCKSk7XG5cbiAgICBhZmZlY3RlZFZlcnRpY2VzLmZvckVhY2goKGFmZmVjdGVkVmVydGV4LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgYWZmZWN0ZWRWZXJ0ZXhJbmRleCA9IGFmZmVjdGVkVmVydGV4SW5kaWNlc1tpbmRleF07XG5cbiAgICAgIGFmZmVjdGVkVmVydGV4LnNldEluZGV4KGFmZmVjdGVkVmVydGV4SW5kZXgpO1xuICAgIH0pO1xuXG4gICAgc3VjY2VzcyA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gc3VjY2Vzcztcbn1cblxuZnVuY3Rpb24gdmVydGV4TWFwRnJvbVZlcnRleE5hbWVzKHZlcnRleE5hbWVzKSB7XG4gIGNvbnN0IHZlcnRleE1hcCA9IHt9O1xuICBcbiAgdmVydGV4TmFtZXMuZm9yRWFjaCgodmVydGV4TmFtZSwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBuYW1lID0gdmVydGV4TmFtZSwgIC8vL1xuICAgICAgICAgIHZlcnRleCA9IFZlcnRleC5mcm9tTmFtZUFuZEluZGV4KG5hbWUsIGluZGV4KTtcblxuICAgIHZlcnRleE1hcFt2ZXJ0ZXhOYW1lXSA9IHZlcnRleDtcbiAgfSk7XG4gIFxuICByZXR1cm4gdmVydGV4TWFwO1xufVxuXG5mdW5jdGlvbiB2ZXJ0ZXhNYXBGcm9tT3JkZXJlZFZlcnRpY2VzKG9yZGVyZWRWZXJ0aWNlcykge1xuICBjb25zdCB2ZXJ0ZXhNYXAgPSB7fTtcbiAgXG4gIG9yZGVyZWRWZXJ0aWNlcy5mb3JFYWNoKChvcmRlcmVkVmVydGV4LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IG5hbWUgPSBvcmRlcmVkVmVydGV4LmdldE5hbWUoKSxcbiAgICAgICAgICB2ZXJ0ZXggPSBWZXJ0ZXguZnJvbU5hbWVBbmRJbmRleChuYW1lLCBpbmRleCksXG4gICAgICAgICAgdmVydGV4TmFtZSA9IG5hbWU7ICAvLy9cblxuICAgIHZlcnRleE1hcFt2ZXJ0ZXhOYW1lXSA9IHZlcnRleDtcbiAgfSk7XG5cbiAgcmV0dXJuIHZlcnRleE1hcDtcbn1cblxuZnVuY3Rpb24gYWRkRWRnZXNUb1ZlcnRpY2VzKG9yZGVyZWRWZXJ0aWNlcywgdmVydGV4TWFwKSB7XG4gIG9yZGVyZWRWZXJ0aWNlcy5mb3JFYWNoKChvcmRlcmVkVmVydGV4KSA9PiB7XG4gICAgb3JkZXJlZFZlcnRleC5mb3JFYWNoT3V0Z29pbmdFZGdlKChvdXRnb2luZ0VkZ2UpID0+IHtcbiAgICAgIGNvbnN0IHNvdXJjZVZlcnRleE5hbWUgPSBvdXRnb2luZ0VkZ2UuZ2V0U291cmNlVmVydGV4TmFtZSgpLFxuICAgICAgICAgICAgdGFyZ2V0VmVydGV4TmFtZSA9IG91dGdvaW5nRWRnZS5nZXRUYXJnZXRWZXJ0ZXhOYW1lKCksXG4gICAgICAgICAgICBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWUgPSBzb3VyY2VWZXJ0ZXhOYW1lLCAgLy8vXG4gICAgICAgICAgICBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lID0gdGFyZ2V0VmVydGV4TmFtZSxcbiAgICAgICAgICAgIGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ID0gdmVydGV4TWFwW2ltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZV0sIC8vL1xuICAgICAgICAgICAgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4ID0gdmVydGV4TWFwW2ltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVdOyAvLy9cblxuICAgICAgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXguYWRkSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCk7XG5cbiAgICAgIGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleC5hZGRJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleChpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCk7XG4gICAgfSk7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbIkRpcmVjdGVkQWN5Y2xpY0dyYXBoIiwibGFzdCIsImFycmF5VXRpbGl0aWVzIiwidmVydGV4TWFwIiwiaXNFbXB0eSIsInZlcnRpY2VzIiwiZ2V0VmVydGljZXMiLCJ2ZXJ0aWNlc0xlbmd0aCIsImxlbmd0aCIsImVtcHR5IiwidmVydGV4TWFwVmFsdWVzIiwiT2JqZWN0IiwidmFsdWVzIiwiZ2V0VmVydGV4TmFtZXMiLCJ2ZXJ0ZXhNYXBLZXlzIiwia2V5cyIsInZlcnRleE5hbWVzIiwiZ2V0VmVydGV4QnlWZXJ0ZXhOYW1lIiwidmVydGV4TmFtZSIsInZlcnRleFByZXNlbnQiLCJpc1ZlcnRleFByZXNlbnRCeVZlcnRleE5hbWUiLCJ2ZXJ0ZXgiLCJnZXRJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lIiwiaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyIsImdldEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZXMiLCJnZXRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lc0J5VmVydGV4TmFtZSIsImltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzIiwiZ2V0SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXMiLCJnZXRQcmVkZWNlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lIiwicHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyIsImdldFByZWRlY2Vzc29yVmVydGV4TmFtZXMiLCJnZXRTdWNjZXNzb3JWZXJ0ZXhOYW1lc0J5VmVydGV4TmFtZSIsInN1Y2Nlc3NvclZlcnRleE5hbWVzIiwiZ2V0U3VjY2Vzc29yVmVydGV4TmFtZXMiLCJnZXRFZGdlc0J5VGFyZ2V0VmVydGV4TmFtZSIsInRhcmdldFZlcnRleE5hbWUiLCJlZGdlcyIsInRhcmdldFZlcnRleCIsInNvdXJjZVZlcnRleE5hbWVzIiwiZm9yRWFjaCIsInNvdXJjZVZlcnRleE5hbWUiLCJlZGdlIiwiRWRnZSIsImZyb21Tb3VyY2VWZXJ0ZXhOYW1lQW5kVGFyZ2V0VmVydGV4TmFtZSIsInB1c2giLCJnZXRFZGdlc0J5U291cmNlVmVydGV4TmFtZSIsInNvdXJjZVZlcnRleCIsInRhcmdldFZlcnRleE5hbWVzIiwic2V0VmVydGV4QnlWZXJ0ZXhOYW1lIiwiZGVsZXRlVmVydGV4QnlWZXJ0ZXhOYW1lIiwiaXNFZGdlUHJlc2VudCIsImdldFNvdXJjZVZlcnRleE5hbWUiLCJnZXRUYXJnZXRWZXJ0ZXhOYW1lIiwiZWRnZVByZXNlbnQiLCJpc0VkZ2VQcmVzZW50QnlWZXJ0ZXhOYW1lcyIsInNvdXJjZVZlcnRleEFuZFRhcmdldFZlcnRleFByZXNlbnQiLCJpc0VkZ2VQcmVzZW50QnlUYXJnZXRWZXJ0ZXgiLCJ2ZXJ0ZXhOYW1lc0luY2x1ZGVzVmVydGV4TmFtZSIsImluY2x1ZGVzIiwiZ2V0T3JkZXJlZFZlcnRleE5hbWVzIiwib3JkZXJWZXJ0aWNlcyIsIm9yZGVyZWRWZXJ0aWNlcyIsIm9yZGVyZWRWZXJ0ZXhOYW1lcyIsInZlcnRleE5hbWVzRnJvbVZlcnRpY2VzIiwiYWRkRWRnZSIsInN1Y2Nlc3MiLCJhZGRFZGdlQnlWZXJ0ZXhOYW1lcyIsInJlbW92ZUVkZ2UiLCJyZW1vdmVFZGdlQnlWZXJ0ZXhOYW1lcyIsImFkZFZlcnRleEJ5VmVydGV4TmFtZSIsInNvdXJjZVZlcnRleEluZGV4IiwiZ2V0SW5kZXgiLCJ0YXJnZXRWZXJ0ZXhJbmRleCIsImludmFsaWRhdGluZ0VkZ2UiLCJhZGRJbnZhbGlkYXRpbmdFZGdlQnlWZXJ0aWNlcyIsImltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4IiwiaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4IiwiYWRkSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4IiwiYWRkSW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgiLCJyZW1vdmVJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgiLCJyZW1vdmVJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCIsInJlbW92ZUVkZ2VzQnlTb3VyY2VWZXJ0ZXhOYW1lIiwic291cmNlVmVydGV4UHJlc2VudCIsInJlbW92ZU91dGdvaW5nRWRnZXMiLCJyZW1vdmVFZGdlc0J5VGFyZ2V0VmVydGV4TmFtZSIsInRhcmdldFZlcnRleFByZXNlbnQiLCJyZW1vdmVJbmNvbWluZ0VkZ2VzIiwidmVydGV4TmFtZXNMZW5ndGgiLCJuYW1lIiwiaW5kZXgiLCJWZXJ0ZXgiLCJmcm9tTmFtZUFuZEluZGV4IiwicmVtb3ZlVmVydGV4QnlWZXJ0ZXhOYW1lIiwicmVtb3ZlZEVkZ2VzIiwiZm9yRWFjaEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCIsImltbWVkaWF0ZVN1Y2Nlc3NWZXJ0ZXgiLCJpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWUiLCJnZXROYW1lIiwiaW1tZWRpYXRlU3VjY2Vzc1ZlcnRleE5hbWUiLCJyZW1vdmVkRWRnZVNvdXJjZVZlcnRleE5hbWUiLCJyZW1vdmVkRWRnZVRhcmdldFZlcnRleE5hbWUiLCJyZW1vdmVkRWRnZSIsImZvckVhY2hJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCIsImRlbGV0ZWRWZXJ0ZXgiLCJkZWxldGVkVmVydGV4SW5kZXgiLCJhZmZlY3RlZFZlcnRpY2VzIiwicmVkdWNlIiwidmVydGV4SW5kZXgiLCJ2ZXJ0ZXhBZmZlY3RlZCIsImFmZmVjdGVkVmVydGV4IiwiZGVjcmVtZW50SW5kZXgiLCJmcm9tTm90aGluZyIsImRpcmVjdGVkQWN5Y2xpY0dyYXBoIiwiZnJvbVZlcnRleE5hbWVzIiwidmVydGV4TWFwRnJvbVZlcnRleE5hbWVzIiwiZnJvbU9yZGVyZWRWZXJ0aWNlcyIsInZlcnRleE1hcEZyb21PcmRlcmVkVmVydGljZXMiLCJhZGRFZGdlc1RvVmVydGljZXMiLCJmb3J3YXJkc0FmZmVjdGVkVmVydGljZXMiLCJyZXRyaWV2ZUZvcndhcmRzQWZmZWN0ZWRWZXJ0aWNlcyIsImxhc3RGb3J3YXJkc0FmZmVjdGVkVmVydGV4IiwicmVzdWx0c0luQ3ljbGUiLCJiYWNrd2FyZHNBZmZlY3RlZFZlcnRpY2VzIiwicmV0cmlldmVCYWNrd2FyZHNBZmZlY3RlZFZlcnRpY2VzIiwiY29uY2F0IiwiYWZmZWN0ZWRWZXJ0ZXhJbmRpY2VzIiwibWFwIiwiYWZmZWN0ZWRWZXJ0ZXhJbmRleCIsInNvcnQiLCJpbmRleEEiLCJpbmRleEIiLCJzZXRJbmRleCIsIm9yZGVyZWRWZXJ0ZXgiLCJmb3JFYWNoT3V0Z29pbmdFZGdlIiwib3V0Z29pbmdFZGdlIiwiaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFXcUJBOzs7eUJBVFU7MkRBRWQ7NkRBQ0U7dUJBRW9DOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXZELElBQU0sQUFBRUMsT0FBU0MsMEJBQVREO0FBRU8sSUFBQSxBQUFNRCxxQ0E2VWxCLEFBN1VZO2FBQU1BLHFCQUNQRyxTQUFTO2dDQURGSDtRQUVqQixJQUFJLENBQUNHLFlBQVlBOztrQkFGQUg7O1lBS25CSSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTUMsV0FBVyxJQUFJLENBQUNDLGVBQ2hCQyxpQkFBaUJGLFNBQVNHLFFBQzFCQyxRQUFTRixtQkFBbUI7Z0JBRWxDLE9BQU9FO1lBQ1Q7OztZQUVBSCxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTUksa0JBQWtCQyxPQUFPQyxPQUFPLElBQUksQ0FBQ1QsWUFDckNFLFdBQVdLLGlCQUFpQixHQUFHO2dCQUVyQyxPQUFPTDtZQUNUOzs7WUFFQVEsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU1DLGdCQUFnQkgsT0FBT0ksS0FBSyxJQUFJLENBQUNaLFlBQ2pDYSxjQUFjRixlQUFnQixHQUFHO2dCQUV2QyxPQUFPRTtZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBLHNCQUFzQkMsVUFBVTtnQkFDOUIsSUFBTUMsZ0JBQWdCLElBQUksQ0FBQ0MsNEJBQTRCRixhQUNqREcsU0FBU0YsZ0JBQ0UsSUFBSSxDQUFDaEIsU0FBUyxDQUFDZSxXQUFXLEdBQ3hCO2dCQUVuQixPQUFPRztZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBLCtDQUErQ0osVUFBVTtnQkFDdkQsSUFBTUcsU0FBUyxJQUFJLENBQUNKLHNCQUFzQkMsYUFDcENLLGtDQUFrQ0YsT0FBT0c7Z0JBRS9DLE9BQU9EO1lBQ1Q7OztZQUVBRSxLQUFBQTttQkFBQUEsU0FBQUEsNkNBQTZDUCxVQUFVO2dCQUNyRCxJQUFNRyxTQUFTLElBQUksQ0FBQ0osc0JBQXNCQyxhQUNwQ1EsZ0NBQWdDTCxPQUFPTTtnQkFFN0MsT0FBT0Q7WUFDVDs7O1lBRUFFLEtBQUFBO21CQUFBQSxTQUFBQSxzQ0FBc0NWLFVBQVU7Z0JBQzlDLElBQU1HLFNBQVMsSUFBSSxDQUFDSixzQkFBc0JDLGFBQ3BDVyx5QkFBeUJSLE9BQU9TO2dCQUV0QyxPQUFPRDtZQUNUOzs7WUFFQUUsS0FBQUE7bUJBQUFBLFNBQUFBLG9DQUFvQ2IsVUFBVTtnQkFDNUMsSUFBTUcsU0FBUyxJQUFJLENBQUNKLHNCQUFzQkMsYUFDcENjLHVCQUF1QlgsT0FBT1k7Z0JBRXBDLE9BQU9EO1lBQ1Q7OztZQUVBRSxLQUFBQTttQkFBQUEsU0FBQUEsMkJBQTJCQyxnQkFBZ0I7Z0JBQ3pDLElBQU1DLFFBQVEsRUFBRSxFQUNWQyxlQUFlLElBQUksQ0FBQ3BCLHNCQUFzQmtCO2dCQUVoRCxJQUFJRSxpQkFBaUIsTUFBTTtvQkFDekIsSUFBTWQsa0NBQWtDYyxhQUFhYixzQ0FDL0NjLG9CQUFvQmYsaUNBQWtDLEdBQUc7b0JBRS9EZSxrQkFBa0JDLFFBQVEsU0FBQ0M7d0JBQ3pCLElBQU1DLE9BQU9DLGNBQUtDLHdDQUF3Q0gsa0JBQWtCTDt3QkFFNUVDLE1BQU1RLEtBQUtIO29CQUNiO2dCQUNGO2dCQUVBLE9BQU9MO1lBQ1Q7OztZQUVBUyxLQUFBQTttQkFBQUEsU0FBQUEsMkJBQTJCTCxnQkFBZ0I7Z0JBQ3pDLElBQU1KLFFBQVEsRUFBRSxFQUNWVSxlQUFlLElBQUksQ0FBQzdCLHNCQUFzQnVCO2dCQUVoRCxJQUFJTSxpQkFBaUIsTUFBTTtvQkFDekIsSUFBTXBCLGdDQUFnQ29CLGFBQWFuQixvQ0FDN0NvQixvQkFBb0JyQiwrQkFBZ0MsR0FBRztvQkFFN0RxQixrQkFBa0JSLFFBQVEsU0FBQ0o7d0JBQ3pCLElBQU1NLE9BQU9DLGNBQUtDLHdDQUF3Q0gsa0JBQWtCTDt3QkFFNUVDLE1BQU1RLEtBQUtIO29CQUNiO2dCQUNGO2dCQUVBLE9BQU9MO1lBQ1Q7OztZQUVBWSxLQUFBQTttQkFBQUEsU0FBQUEsc0JBQXNCOUIsVUFBVSxFQUFFRyxNQUFNO2dCQUN0QyxJQUFJLENBQUNsQixTQUFTLENBQUNlLFdBQVcsR0FBR0c7WUFDL0I7OztZQUVBNEIsS0FBQUE7bUJBQUFBLFNBQUFBLHlCQUF5Qi9CLFVBQVU7Z0JBQ2pDLE9BQU8sSUFBSSxDQUFDZixTQUFTLENBQUNlLFdBQVc7WUFDbkM7OztZQUVBZ0MsS0FBQUE7bUJBQUFBLFNBQUFBLGNBQWNULElBQUk7Z0JBQ2hCLElBQU1ELG1CQUFtQkMsS0FBS1UsdUJBQ3hCaEIsbUJBQW1CTSxLQUFLVyx1QkFDeEJDLGNBQWMsSUFBSSxDQUFDQywyQkFBMkJkLGtCQUFrQkw7Z0JBRXRFLE9BQU9rQjtZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBLDJCQUEyQmQsZ0JBQWdCLEVBQUVMLGdCQUFnQjtnQkFDM0QsSUFBSWtCLGNBQWM7Z0JBRWxCLElBQU1QLGVBQWUsSUFBSSxDQUFDN0Isc0JBQXNCdUIsbUJBQzFDSCxlQUFlLElBQUksQ0FBQ3BCLHNCQUFzQmtCLG1CQUMxQ29CLHFDQUFxQyxBQUFDVCxpQkFBaUIsUUFBVVQsaUJBQWlCO2dCQUV4RixJQUFJa0Isb0NBQW9DO29CQUN0Q0YsY0FBY1AsYUFBYVUsNEJBQTRCbkI7Z0JBQ3pEO2dCQUVBLE9BQU9nQjtZQUNUOzs7WUFFQWpDLEtBQUFBO21CQUFBQSxTQUFBQSw0QkFBNEJGLFVBQVU7Z0JBQ3BDLElBQU1GLGNBQWMsSUFBSSxDQUFDSCxrQkFDbkI0QyxnQ0FBZ0N6QyxZQUFZMEMsU0FBU3hDLGFBQ3JEQyxnQkFBZ0JzQywrQkFBZ0MsR0FBRztnQkFFekQsT0FBT3RDO1lBQ1Q7OztZQUVBd0MsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU10RCxXQUFXLElBQUksQ0FBQ0M7Z0JBRXRCc0QsSUFBQUEsd0JBQWN2RDtnQkFFZCxJQUFNd0Qsa0JBQWtCeEQsVUFDbEJ5RCxxQkFBcUJDLElBQUFBLGtDQUF3QkY7Z0JBRW5ELE9BQU9DO1lBQ1Q7OztZQUVBRSxLQUFBQTttQkFBQUEsU0FBQUEsUUFBUXZCLElBQUk7Z0JBQ1YsSUFBTUQsbUJBQW1CQyxLQUFLVSx1QkFDeEJoQixtQkFBbUJNLEtBQUtXLHVCQUN4QmEsVUFBVSxJQUFJLENBQUNDLHFCQUFxQjFCLGtCQUFrQkw7Z0JBRTVELE9BQU84QjtZQUNUOzs7WUFFQUUsS0FBQUE7bUJBQUFBLFNBQUFBLFdBQVcxQixJQUFJO2dCQUNiLElBQU1ELG1CQUFtQkMsS0FBS1UsdUJBQ3hCaEIsbUJBQW1CTSxLQUFLVztnQkFFOUIsSUFBSSxDQUFDZ0Isd0JBQXdCNUIsa0JBQWtCTDtZQUNqRDs7O1lBRUErQixLQUFBQTttQkFBQUEsU0FBQUEscUJBQXFCMUIsZ0JBQWdCLEVBQUVMLGdCQUFnQjtnQkFDckQsSUFBSThCLFVBQVU7Z0JBRWQsSUFBSXpCLHFCQUFxQkwsa0JBQWtCO29CQUN6QyxJQUFNVyxlQUFlLElBQUksQ0FBQ3VCLHNCQUFzQjdCLG1CQUMxQ0gsZUFBZSxJQUFJLENBQUNnQyxzQkFBc0JsQyxtQkFDMUNrQixjQUFjUCxhQUFhVSw0QkFBNEJuQjtvQkFFN0QsSUFBSWdCLGFBQWE7d0JBQ2ZZLFVBQVU7b0JBQ1osT0FBTzt3QkFDTCxJQUFNSyxvQkFBb0J4QixhQUFheUIsWUFDakNDLG9CQUFvQm5DLGFBQWFrQyxZQUNqQ0UsbUJBQW9CSCxvQkFBb0JFO3dCQUU5Q1AsVUFBVVEsbUJBQ0VDLDhCQUE4QjVCLGNBQWNULGdCQUMxQzt3QkFFZCxJQUFJNEIsU0FBUzs0QkFDWCxJQUFNVSw2QkFBNkI3QixjQUM3QjhCLDJCQUEyQnZDLGNBQWMsR0FBRzs0QkFFbERzQywyQkFBMkJFLDRCQUE0QkQ7NEJBRXZEQSx5QkFBeUJFLDhCQUE4Qkg7d0JBQ3pEO29CQUNGO2dCQUNGO2dCQUVBLE9BQU9WO1lBQ1Q7OztZQUVBRyxLQUFBQTttQkFBQUEsU0FBQUEsd0JBQXdCNUIsZ0JBQWdCLEVBQUVMLGdCQUFnQjtnQkFDeEQsSUFBTWtCLGNBQWMsSUFBSSxDQUFDQywyQkFBMkJkLGtCQUFrQkw7Z0JBRXRFLElBQUlrQixhQUFhO29CQUNmLElBQU1QLGVBQWUsSUFBSSxDQUFDN0Isc0JBQXNCdUIsbUJBQzFDSCxlQUFlLElBQUksQ0FBQ3BCLHNCQUFzQmtCO29CQUVoRFcsYUFBYWlDLCtCQUErQjFDO29CQUM1Q0EsYUFBYTJDLGlDQUFpQ2xDO2dCQUNoRDtZQUNGOzs7WUFFQW1DLEtBQUFBO21CQUFBQSxTQUFBQSw4QkFBOEJ6QyxnQkFBZ0I7Z0JBQzVDLElBQU0wQyxzQkFBc0IsSUFBSSxDQUFDOUQsNEJBQTRCb0I7Z0JBRTdELElBQUkwQyxxQkFBcUI7b0JBQ3ZCLElBQU1wQyxlQUFlLElBQUksQ0FBQzdCLHNCQUFzQnVCO29CQUVoRE0sYUFBYXFDO2dCQUNmO1lBQ0Y7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUEsOEJBQThCakQsZ0JBQWdCO2dCQUM1QyxJQUFNa0Qsc0JBQXNCLElBQUksQ0FBQ2pFLDRCQUE0QmU7Z0JBRTdELElBQUlrRCxxQkFBcUI7b0JBQ3ZCLElBQU1oRCxlQUFlLElBQUksQ0FBQ3BCLHNCQUFzQmtCO29CQUVoREUsYUFBYWlEO2dCQUNmO1lBQ0Y7OztZQUVBakIsS0FBQUE7bUJBQUFBLFNBQUFBLHNCQUFzQm5ELFVBQVU7Z0JBQzlCLElBQU1DLGdCQUFnQixJQUFJLENBQUNDLDRCQUE0QkY7Z0JBRXZELElBQUksQ0FBQ0MsZUFBZTtvQkFDbEIsSUFBTUgsY0FBYyxJQUFJLENBQUNILGtCQUNuQjBFLG9CQUFvQnZFLFlBQVlSLFFBQ2hDZ0YsT0FBT3RFLFlBQ1B1RSxRQUFRRixtQkFDUmxFLFNBQVNxRSxnQkFBT0MsaUJBQWlCSCxNQUFNQztvQkFFN0MsSUFBSSxDQUFDekMsc0JBQXNCOUIsWUFBWUc7Z0JBQ3pDO2dCQUVBLElBQU1BLFVBQVMsSUFBSSxDQUFDSixzQkFBc0JDO2dCQUUxQyxPQUFPRztZQUNUOzs7WUFFQXVFLEtBQUFBO21CQUFBQSxTQUFBQSx5QkFBeUIxRSxVQUFVO2dCQUNqQyxJQUFJMkUsZUFBZTtnQkFFbkIsSUFBTTFFLGdCQUFnQixJQUFJLENBQUNDLDRCQUE0QkY7Z0JBRXZELElBQUlDLGVBQWU7b0JBQ2pCMEUsZUFBZSxFQUFFO29CQUVqQixJQUFNeEUsU0FBUyxJQUFJLENBQUNKLHNCQUFzQkM7b0JBRTFDRyxPQUFPeUUsZ0NBQWdDLFNBQUNDO3dCQUN0QyxJQUFNcEIsNkJBQTZCdEQsUUFDN0IyRSxpQ0FBaUNyQiwyQkFBMkJzQixXQUM1REMsNkJBQTZCSCx1QkFBdUJFLFdBQ3BERSw4QkFBOEJILGdDQUM5QkksOEJBQThCRiw0QkFDOUJHLGNBQWMsSUFBSTNELGNBQUt5RCw2QkFBNkJDO3dCQUUxRFAsYUFBYWpELEtBQUt5RDt3QkFFbEJOLHVCQUF1QmYsaUNBQWlDTDtvQkFDMUQ7b0JBRUF0RCxPQUFPaUYsa0NBQWtDLFNBQUMzQjt3QkFDeEMsSUFBTW9CLHlCQUF5QjFFLFFBQ3pCMkUsaUNBQWlDckIsMkJBQTJCc0IsV0FDNURDLDZCQUE2QkgsdUJBQXVCRSxXQUNwREUsOEJBQThCSCxnQ0FDOUJJLDhCQUE4QkYsNEJBQzlCRyxjQUFjLElBQUkzRCxjQUFLeUQsNkJBQTZCQzt3QkFFMURQLGFBQWFqRCxLQUFLeUQ7d0JBRWxCMUIsMkJBQTJCSSwrQkFBK0JnQjtvQkFDNUQ7b0JBRUEsSUFBSSxDQUFDOUMseUJBQXlCL0I7b0JBRTlCLElBQU1xRixnQkFBZ0JsRixRQUNoQm1GLHFCQUFxQkQsY0FBY2hDLFlBQ25DbEUsV0FBVyxJQUFJLENBQUNDLGVBQ2hCbUcsbUJBQW1CcEcsU0FBU3FHLE9BQU8sU0FBQ0Qsa0JBQWtCcEY7d0JBQ3BELElBQU1zRixjQUFjdEYsT0FBT2tELFlBQ3JCcUMsaUJBQWtCRCxjQUFjSDt3QkFFdEMsSUFBSUksZ0JBQWdCOzRCQUNsQixJQUFNQyxpQkFBaUJ4RixRQUFTLEdBQUc7NEJBRW5Db0YsaUJBQWlCN0QsS0FBS2lFO3dCQUN4Qjt3QkFFQSxPQUFPSjtvQkFDVCxHQUFHLEVBQUU7b0JBRVhBLGlCQUFpQmxFLFFBQVEsU0FBQ3NFOytCQUFtQkEsZUFBZUM7O2dCQUM5RDtnQkFFQSxPQUFPakI7WUFDVDs7OztZQUVPa0IsS0FBQUE7bUJBQVAsU0FBT0E7Z0JBQ0wsSUFBTTVHLFlBQVksQ0FBQyxHQUNiNkcsdUJBQXVCLElBclRaaEgscUJBcVRxQ0c7Z0JBRXRELE9BQU82RztZQUNUOzs7WUFFT0MsS0FBQUE7bUJBQVAsU0FBT0EsZ0JBQWdCakcsV0FBVztnQkFDaEMsSUFBTWIsWUFBWStHLHlCQUF5QmxHO2dCQUUzQyxJQUFNZ0csdUJBQXVCLElBN1RaaEgscUJBNlRxQ0c7Z0JBRXRELE9BQU82RztZQUNUOzs7WUFFT0csS0FBQUE7bUJBQVAsU0FBT0Esb0JBQW9CdEQsZUFBZTtnQkFDeEMsSUFBTTFELFlBQVlpSCw2QkFBNkJ2RDtnQkFFL0N3RCxtQkFBbUJ4RCxpQkFBaUIxRDtnQkFFcEMsSUFBTTZHLHVCQUF1QixJQXZVWmhILHFCQXVVcUNHO2dCQUV0RCxPQUFPNkc7WUFDVDs7O1dBMVVtQmhIOztBQTZVckIsU0FBUzBFLDhCQUE4QjVCLFlBQVksRUFBRVQsWUFBWTtJQUMvRCxJQUFJNEIsVUFBVTtJQUVkLElBQU1xRCwyQkFBMkJqRixhQUFha0YsaUNBQWlDekUsZUFDekUwRSw2QkFBNkJ2SCxLQUFLcUgsMkJBQ2xDRyxpQkFBa0JELCtCQUErQjFFO0lBRXZELElBQUksQ0FBQzJFLGdCQUFnQjtRQUNuQixJQUFNQyw0QkFBNEI1RSxhQUFhNkU7UUFFL0MvRCxJQUFBQSx3QkFBYzhEO1FBRWQ5RCxJQUFBQSx3QkFBYzBEO1FBRWQsSUFBTWIsbUJBQW1CLEVBQUUsQ0FBQ21CLE9BQU9GLDJCQUEyQkUsT0FBT04sMkJBQy9ETyx3QkFBd0JwQixpQkFBaUJxQixJQUFJLFNBQUNqQjtZQUM1QyxJQUFNa0Isc0JBQXNCbEIsZUFBZXRDO1lBRTNDLE9BQU93RDtRQUNUO1FBRU5GLHNCQUFzQkcsS0FBSyxTQUFDQyxRQUFRQzttQkFBWUQsU0FBU0M7O1FBRXpEekIsaUJBQWlCbEUsUUFBUSxTQUFDc0UsZ0JBQWdCcEI7WUFDeEMsSUFBTXNDLHNCQUFzQkYscUJBQXFCLENBQUNwQyxNQUFNO1lBRXhEb0IsZUFBZXNCLFNBQVNKO1FBQzFCO1FBRUE5RCxVQUFVO0lBQ1o7SUFFQSxPQUFPQTtBQUNUO0FBRUEsU0FBU2lELHlCQUF5QmxHLFdBQVc7SUFDM0MsSUFBTWIsWUFBWSxDQUFDO0lBRW5CYSxZQUFZdUIsUUFBUSxTQUFDckIsWUFBWXVFO1FBQy9CLElBQU1ELE9BQU90RSxZQUNQRyxTQUFTcUUsZ0JBQU9DLGlCQUFpQkgsTUFBTUM7UUFFN0N0RixTQUFTLENBQUNlLFdBQVcsR0FBR0c7SUFDMUI7SUFFQSxPQUFPbEI7QUFDVDtBQUVBLFNBQVNpSCw2QkFBNkJ2RCxlQUFlO0lBQ25ELElBQU0xRCxZQUFZLENBQUM7SUFFbkIwRCxnQkFBZ0J0QixRQUFRLFNBQUM2RixlQUFlM0M7UUFDdEMsSUFBTUQsT0FBTzRDLGNBQWNuQyxXQUNyQjVFLFNBQVNxRSxnQkFBT0MsaUJBQWlCSCxNQUFNQyxRQUN2Q3ZFLGFBQWFzRSxNQUFPLEdBQUc7UUFFN0JyRixTQUFTLENBQUNlLFdBQVcsR0FBR0c7SUFDMUI7SUFFQSxPQUFPbEI7QUFDVDtBQUVBLFNBQVNrSCxtQkFBbUJ4RCxlQUFlLEVBQUUxRCxTQUFTO0lBQ3BEMEQsZ0JBQWdCdEIsUUFBUSxTQUFDNkY7UUFDdkJBLGNBQWNDLG9CQUFvQixTQUFDQztZQUNqQyxJQUFNOUYsbUJBQW1COEYsYUFBYW5GLHVCQUNoQ2hCLG1CQUFtQm1HLGFBQWFsRix1QkFDaEM0QyxpQ0FBaUN4RCxrQkFDakMrRiwrQkFBK0JwRyxrQkFDL0J3Qyw2QkFBNkJ4RSxTQUFTLENBQUM2RiwrQkFBK0IsRUFDdEVwQiwyQkFBMkJ6RSxTQUFTLENBQUNvSSw2QkFBNkIsRUFBRSxHQUFHO1lBRTdFNUQsMkJBQTJCRSw0QkFBNEJEO1lBRXZEQSx5QkFBeUJFLDhCQUE4Qkg7UUFDekQ7SUFDRjtBQUNGIn0=
package/lib/example.js DELETED
@@ -1,21 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- var _index = require("./index");
6
- var directedGraph = _index.DirectedGraph.fromNothing();
7
- directedGraph.addVerticesByVertexNames([
8
- "./easy-layout",
9
- "./easy-with-style",
10
- "./occam-lexers",
11
- "./with-style"
12
- ]);
13
- directedGraph.addEdgeByVertexNames("./easy-with-style", "./easy-layout");
14
- directedGraph.addEdgeByVertexNames("./with-style", "./easy-with-style");
15
- directedGraph.addEdgeByVertexNames("./easy-layout", "./occam-lexers");
16
- directedGraph.addEdgeByVertexNames("./easy-with-style", "./easy-layout");
17
- directedGraph.addEdgeByVertexNames("./occam-lexers", "./with-style");
18
- directedGraph.removeVertexByVertexName("./occam-lexers");
19
- debugger;
20
-
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9leGFtcGxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBEaXJlY3RlZEdyYXBoIH0gZnJvbSBcIi4vaW5kZXhcIjsgIC8vL1xuXG5jb25zdCBkaXJlY3RlZEdyYXBoID0gRGlyZWN0ZWRHcmFwaC5mcm9tTm90aGluZygpO1xuXG5kaXJlY3RlZEdyYXBoLmFkZFZlcnRpY2VzQnlWZXJ0ZXhOYW1lcyhbXG4gIFwiLi9lYXN5LWxheW91dFwiLFxuICBcIi4vZWFzeS13aXRoLXN0eWxlXCIsXG4gIFwiLi9vY2NhbS1sZXhlcnNcIixcbiAgXCIuL3dpdGgtc3R5bGVcIlxuXSk7XG5cbmRpcmVjdGVkR3JhcGguYWRkRWRnZUJ5VmVydGV4TmFtZXMoXCIuL2Vhc3ktd2l0aC1zdHlsZVwiLCBcIi4vZWFzeS1sYXlvdXRcIik7XG5kaXJlY3RlZEdyYXBoLmFkZEVkZ2VCeVZlcnRleE5hbWVzKFwiLi93aXRoLXN0eWxlXCIsIFwiLi9lYXN5LXdpdGgtc3R5bGVcIik7XG5kaXJlY3RlZEdyYXBoLmFkZEVkZ2VCeVZlcnRleE5hbWVzKFwiLi9lYXN5LWxheW91dFwiLCBcIi4vb2NjYW0tbGV4ZXJzXCIpO1xuZGlyZWN0ZWRHcmFwaC5hZGRFZGdlQnlWZXJ0ZXhOYW1lcyhcIi4vZWFzeS13aXRoLXN0eWxlXCIsIFwiLi9lYXN5LWxheW91dFwiKTtcbmRpcmVjdGVkR3JhcGguYWRkRWRnZUJ5VmVydGV4TmFtZXMoXCIuL29jY2FtLWxleGVyc1wiLCBcIi4vd2l0aC1zdHlsZVwiKTtcblxuZGlyZWN0ZWRHcmFwaC5yZW1vdmVWZXJ0ZXhCeVZlcnRleE5hbWUoXCIuL29jY2FtLWxleGVyc1wiKTtcblxuZGVidWdnZXJcbiJdLCJuYW1lcyI6WyJkaXJlY3RlZEdyYXBoIiwiRGlyZWN0ZWRHcmFwaCIsImZyb21Ob3RoaW5nIiwiYWRkVmVydGljZXNCeVZlcnRleE5hbWVzIiwiYWRkRWRnZUJ5VmVydGV4TmFtZXMiLCJyZW1vdmVWZXJ0ZXhCeVZlcnRleE5hbWUiXSwibWFwcGluZ3MiOiJBQUFBOzs7O3FCQUU4QjtBQUU5QixJQUFNQSxnQkFBZ0JDLHFCQUFjQztBQUVwQ0YsY0FBY0cseUJBQXlCO0lBQ3JDO0lBQ0E7SUFDQTtJQUNBO0NBQ0Q7QUFFREgsY0FBY0kscUJBQXFCLHFCQUFxQjtBQUN4REosY0FBY0kscUJBQXFCLGdCQUFnQjtBQUNuREosY0FBY0kscUJBQXFCLGlCQUFpQjtBQUNwREosY0FBY0kscUJBQXFCLHFCQUFxQjtBQUN4REosY0FBY0kscUJBQXFCLGtCQUFrQjtBQUVyREosY0FBY0sseUJBQXlCO0FBRXZDLFFBQVEifQ==
@@ -1,102 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- Object.defineProperty(exports, "default", {
6
- enumerable: true,
7
- get: function() {
8
- return PartialCycle;
9
- }
10
- });
11
- var _necessary = require("necessary");
12
- function _class_call_check(instance, Constructor) {
13
- if (!(instance instanceof Constructor)) {
14
- throw new TypeError("Cannot call a class as a function");
15
- }
16
- }
17
- function _defineProperties(target, props) {
18
- for(var i = 0; i < props.length; i++){
19
- var descriptor = props[i];
20
- descriptor.enumerable = descriptor.enumerable || false;
21
- descriptor.configurable = true;
22
- if ("value" in descriptor) descriptor.writable = true;
23
- Object.defineProperty(target, descriptor.key, descriptor);
24
- }
25
- }
26
- function _create_class(Constructor, protoProps, staticProps) {
27
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
28
- if (staticProps) _defineProperties(Constructor, staticProps);
29
- return Constructor;
30
- }
31
- var first = _necessary.arrayUtilities.first;
32
- var PartialCycle = /*#__PURE__*/ function() {
33
- function PartialCycle(predecessorVertices, cyclicEdge) {
34
- _class_call_check(this, PartialCycle);
35
- this.predecessorVertices = predecessorVertices;
36
- this.cyclicEdge = cyclicEdge;
37
- }
38
- _create_class(PartialCycle, [
39
- {
40
- key: "getPredecessorVertices",
41
- value: function getPredecessorVertices() {
42
- return this.predecessorVertices;
43
- }
44
- },
45
- {
46
- key: "getCyclicEdge",
47
- value: function getCyclicEdge() {
48
- return this.cyclicEdge;
49
- }
50
- },
51
- {
52
- key: "getTargetVertexName",
53
- value: function getTargetVertexName() {
54
- var cyclicEdgeTargetVertexName = this.cyclicEdge.getTargetVertexName(), targetVertexName = cyclicEdgeTargetVertexName; ///
55
- return targetVertexName;
56
- }
57
- },
58
- {
59
- key: "getPredecessorVertexNames",
60
- value: function getPredecessorVertexNames() {
61
- var predecessorVertexNames = this.predecessorVertices.map(function(predecessorVertex) {
62
- var predecessorVertexName = predecessorVertex.getName();
63
- return predecessorVertexName;
64
- });
65
- return predecessorVertexNames;
66
- }
67
- },
68
- {
69
- key: "getCyclicEdgeSourceVertexName",
70
- value: function getCyclicEdgeSourceVertexName() {
71
- var cyclicEdgeSourceVertexName = this.cyclicEdge.getSourceVertexName();
72
- return cyclicEdgeSourceVertexName;
73
- }
74
- },
75
- {
76
- key: "getCyclicEdgeTargetVertexName",
77
- value: function getCyclicEdgeTargetVertexName() {
78
- var cyclicEdgeTargetVertexName = this.cyclicEdge.getTargetVertexName();
79
- return cyclicEdgeTargetVertexName;
80
- }
81
- }
82
- ], [
83
- {
84
- key: "fromCyclicEdgeAndPredecessorVertices",
85
- value: function fromCyclicEdgeAndPredecessorVertices(cyclicEdge, predecessorVertices) {
86
- predecessorVertices = predecessorVertices.slice(); ///
87
- var predecessorVerticesLength = predecessorVertices.length;
88
- if (predecessorVerticesLength > 0) {
89
- var firstPredecessorVertex = first(predecessorVertices), firstPredecessorVertexName = firstPredecessorVertex.getName(), cyclicEdgeTargetVertexName = cyclicEdge.getTargetVertexName();
90
- if (firstPredecessorVertexName === cyclicEdgeTargetVertexName) {
91
- predecessorVertices.shift();
92
- }
93
- }
94
- var partialCycle = new PartialCycle(predecessorVertices, cyclicEdge);
95
- return partialCycle;
96
- }
97
- }
98
- ]);
99
- return PartialCycle;
100
- }();
101
-
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wYXJ0aWFsQ3ljbGUuanMiLCI8PGpzeC1jb25maWctcHJhZ21hLmpzPj4iXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5jb25zdCB7IGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFydGlhbEN5Y2xlIHtcbiAgY29uc3RydWN0b3IocHJlZGVjZXNzb3JWZXJ0aWNlcywgY3ljbGljRWRnZSkge1xuICAgIHRoaXMucHJlZGVjZXNzb3JWZXJ0aWNlcyA9IHByZWRlY2Vzc29yVmVydGljZXM7XG4gICAgdGhpcy5jeWNsaWNFZGdlID0gY3ljbGljRWRnZTtcbiAgfVxuICBcbiAgZ2V0UHJlZGVjZXNzb3JWZXJ0aWNlcygpIHtcbiAgICByZXR1cm4gdGhpcy5wcmVkZWNlc3NvclZlcnRpY2VzO1xuICB9XG5cbiAgZ2V0Q3ljbGljRWRnZSgpIHtcbiAgICByZXR1cm4gdGhpcy5jeWNsaWNFZGdlO1xuICB9XG5cbiAgZ2V0VGFyZ2V0VmVydGV4TmFtZSgpIHtcbiAgICBjb25zdCBjeWNsaWNFZGdlVGFyZ2V0VmVydGV4TmFtZSA9IHRoaXMuY3ljbGljRWRnZS5nZXRUYXJnZXRWZXJ0ZXhOYW1lKCksXG4gICAgICAgICAgdGFyZ2V0VmVydGV4TmFtZSA9IGN5Y2xpY0VkZ2VUYXJnZXRWZXJ0ZXhOYW1lOyAgLy8vXG4gICAgXG4gICAgcmV0dXJuIHRhcmdldFZlcnRleE5hbWU7XG4gIH1cbiAgXG4gIGdldFByZWRlY2Vzc29yVmVydGV4TmFtZXMoKSB7XG4gICAgY29uc3QgcHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyA9IHRoaXMucHJlZGVjZXNzb3JWZXJ0aWNlcy5tYXAoKHByZWRlY2Vzc29yVmVydGV4KSA9PiB7XG4gICAgICBjb25zdCBwcmVkZWNlc3NvclZlcnRleE5hbWUgPSBwcmVkZWNlc3NvclZlcnRleC5nZXROYW1lKCk7XG5cbiAgICAgIHJldHVybiBwcmVkZWNlc3NvclZlcnRleE5hbWU7XG4gICAgfSk7XG4gICAgXG4gICAgcmV0dXJuIHByZWRlY2Vzc29yVmVydGV4TmFtZXM7XG4gIH1cbiAgXG4gIGdldEN5Y2xpY0VkZ2VTb3VyY2VWZXJ0ZXhOYW1lKCkge1xuICAgIGNvbnN0IGN5Y2xpY0VkZ2VTb3VyY2VWZXJ0ZXhOYW1lID0gdGhpcy5jeWNsaWNFZGdlLmdldFNvdXJjZVZlcnRleE5hbWUoKTtcbiAgICBcbiAgICByZXR1cm4gY3ljbGljRWRnZVNvdXJjZVZlcnRleE5hbWU7XG4gIH1cbiAgXG4gIGdldEN5Y2xpY0VkZ2VUYXJnZXRWZXJ0ZXhOYW1lKCkge1xuICAgIGNvbnN0IGN5Y2xpY0VkZ2VUYXJnZXRWZXJ0ZXhOYW1lID0gdGhpcy5jeWNsaWNFZGdlLmdldFRhcmdldFZlcnRleE5hbWUoKTtcbiAgICBcbiAgICByZXR1cm4gY3ljbGljRWRnZVRhcmdldFZlcnRleE5hbWU7XG4gIH1cbiAgXG4gIHN0YXRpYyBmcm9tQ3ljbGljRWRnZUFuZFByZWRlY2Vzc29yVmVydGljZXMoY3ljbGljRWRnZSwgcHJlZGVjZXNzb3JWZXJ0aWNlcykge1xuICAgIHByZWRlY2Vzc29yVmVydGljZXMgPSBwcmVkZWNlc3NvclZlcnRpY2VzLnNsaWNlKCk7ICAvLy9cbiAgICBcbiAgICBjb25zdCBwcmVkZWNlc3NvclZlcnRpY2VzTGVuZ3RoID0gcHJlZGVjZXNzb3JWZXJ0aWNlcy5sZW5ndGg7XG5cbiAgICBpZiAocHJlZGVjZXNzb3JWZXJ0aWNlc0xlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpcnN0UHJlZGVjZXNzb3JWZXJ0ZXggPSBmaXJzdChwcmVkZWNlc3NvclZlcnRpY2VzKSxcbiAgICAgICAgICAgIGZpcnN0UHJlZGVjZXNzb3JWZXJ0ZXhOYW1lID0gZmlyc3RQcmVkZWNlc3NvclZlcnRleC5nZXROYW1lKCksXG4gICAgICAgICAgICBjeWNsaWNFZGdlVGFyZ2V0VmVydGV4TmFtZSA9IGN5Y2xpY0VkZ2UuZ2V0VGFyZ2V0VmVydGV4TmFtZSgpO1xuXG4gICAgICBpZiAoZmlyc3RQcmVkZWNlc3NvclZlcnRleE5hbWUgPT09IGN5Y2xpY0VkZ2VUYXJnZXRWZXJ0ZXhOYW1lKSB7XG4gICAgICAgIHByZWRlY2Vzc29yVmVydGljZXMuc2hpZnQoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJ0aWFsQ3ljbGUgPSBuZXcgUGFydGlhbEN5Y2xlKHByZWRlY2Vzc29yVmVydGljZXMsIGN5Y2xpY0VkZ2UpO1xuICAgIFxuICAgIHJldHVybiBwYXJ0aWFsQ3ljbGU7XG4gIH1cbn1cbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiUGFydGlhbEN5Y2xlIiwiZmlyc3QiLCJhcnJheVV0aWxpdGllcyIsInByZWRlY2Vzc29yVmVydGljZXMiLCJjeWNsaWNFZGdlIiwiZ2V0UHJlZGVjZXNzb3JWZXJ0aWNlcyIsImdldEN5Y2xpY0VkZ2UiLCJnZXRUYXJnZXRWZXJ0ZXhOYW1lIiwiY3ljbGljRWRnZVRhcmdldFZlcnRleE5hbWUiLCJ0YXJnZXRWZXJ0ZXhOYW1lIiwiZ2V0UHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyIsInByZWRlY2Vzc29yVmVydGV4TmFtZXMiLCJtYXAiLCJwcmVkZWNlc3NvclZlcnRleCIsInByZWRlY2Vzc29yVmVydGV4TmFtZSIsImdldE5hbWUiLCJnZXRDeWNsaWNFZGdlU291cmNlVmVydGV4TmFtZSIsImN5Y2xpY0VkZ2VTb3VyY2VWZXJ0ZXhOYW1lIiwiZ2V0U291cmNlVmVydGV4TmFtZSIsImdldEN5Y2xpY0VkZ2VUYXJnZXRWZXJ0ZXhOYW1lIiwiZnJvbUN5Y2xpY0VkZ2VBbmRQcmVkZWNlc3NvclZlcnRpY2VzIiwic2xpY2UiLCJwcmVkZWNlc3NvclZlcnRpY2VzTGVuZ3RoIiwibGVuZ3RoIiwiZmlyc3RQcmVkZWNlc3NvclZlcnRleCIsImZpcnN0UHJlZGVjZXNzb3JWZXJ0ZXhOYW1lIiwic2hpZnQiLCJwYXJ0aWFsQ3ljbGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBTXFCQTs7O3lCQUpVOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUUvQixJQUFNLEFBQUVDLFFBQVVDLDBCQUFWRDtBQUVPLElBQUEsQUFBTUQsNkJBQU47YUFBTUEsYUFDUEcsbUJBQW1CLEVBQUVDLFVBQVU7Z0NBRHhCSjtRQUVqQixJQUFJLENBQUNHLHNCQUFzQkE7UUFDM0IsSUFBSSxDQUFDQyxhQUFhQTs7a0JBSERKOztZQU1uQkssS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDRjtZQUNkOzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDRjtZQUNkOzs7WUFFQUcsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU1DLDZCQUE2QixJQUFJLENBQUNKLFdBQVdHLHVCQUM3Q0UsbUJBQW1CRCw0QkFBNkIsR0FBRztnQkFFekQsT0FBT0M7WUFDVDs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNQyx5QkFBeUIsSUFBSSxDQUFDUixvQkFBb0JTLElBQUksU0FBQ0M7b0JBQzNELElBQU1DLHdCQUF3QkQsa0JBQWtCRTtvQkFFaEQsT0FBT0Q7Z0JBQ1Q7Z0JBRUEsT0FBT0g7WUFDVDs7O1lBRUFLLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNQyw2QkFBNkIsSUFBSSxDQUFDYixXQUFXYztnQkFFbkQsT0FBT0Q7WUFDVDs7O1lBRUFFLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNWCw2QkFBNkIsSUFBSSxDQUFDSixXQUFXRztnQkFFbkQsT0FBT0M7WUFDVDs7OztZQUVPWSxLQUFBQTttQkFBUCxTQUFPQSxxQ0FBcUNoQixVQUFVLEVBQUVELG1CQUFtQjtnQkFDekVBLHNCQUFzQkEsb0JBQW9Ca0IsU0FBVSxHQUFHO2dCQUV2RCxJQUFNQyw0QkFBNEJuQixvQkFBb0JvQjtnQkFFdEQsSUFBSUQsNEJBQTRCLEdBQUc7b0JBQ2pDLElBQU1FLHlCQUF5QnZCLE1BQU1FLHNCQUMvQnNCLDZCQUE2QkQsdUJBQXVCVCxXQUNwRFAsNkJBQTZCSixXQUFXRztvQkFFOUMsSUFBSWtCLCtCQUErQmpCLDRCQUE0Qjt3QkFDN0RMLG9CQUFvQnVCO29CQUN0QjtnQkFDRjtnQkFFQSxJQUFNQyxlQUFlLElBMURKM0IsYUEwRHFCRyxxQkFBcUJDO2dCQUUzRCxPQUFPdUI7WUFDVDs7O1dBN0RtQjNCIn0=
@@ -1,65 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", {
3
- value: true
4
- });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: all[name]
9
- });
10
- }
11
- _export(exports, {
12
- checkEdgesIncludesEdge: function() {
13
- return checkEdgesIncludesEdge;
14
- },
15
- removeEdgeFromEdges: function() {
16
- return removeEdgeFromEdges;
17
- },
18
- edgesBySourceVertexName: function() {
19
- return edgesBySourceVertexName;
20
- },
21
- edgesByTargetVertexName: function() {
22
- return edgesByTargetVertexName;
23
- }
24
- });
25
- var _necessary = require("necessary");
26
- var prune = _necessary.arrayUtilities.prune;
27
- var remove = prune; ///
28
- function checkEdgesIncludesEdge(edge, edges) {
29
- var edge1 = edge, edgesIncludesEdge = edges.some(function(edge) {
30
- var edge2 = edge, matches = edge1.match(edge2);
31
- if (matches) {
32
- return true;
33
- }
34
- });
35
- return edgesIncludesEdge;
36
- }
37
- function removeEdgeFromEdges(edge, edges) {
38
- var edge1 = edge; ///
39
- remove(edges, function(edge) {
40
- var edge2 = edge, matches = edge1.match(edge2);
41
- if (!matches) {
42
- return true;
43
- }
44
- });
45
- }
46
- function edgesBySourceVertexName(sourceVertexName, edges) {
47
- edges = edges.filter(function(edge) {
48
- var matches = edge.matchSourceVertexName(sourceVertexName);
49
- if (matches) {
50
- return true;
51
- }
52
- });
53
- return edges;
54
- }
55
- function edgesByTargetVertexName(targetVertexName, edges) {
56
- edges = edges.filter(function(edge) {
57
- var matches = edge.matchTargetVertexName(targetVertexName);
58
- if (matches) {
59
- return true;
60
- }
61
- });
62
- return edges;
63
- }
64
-
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvZWRnZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgYXJyYXlVdGlsaXRpZXMgfSBmcm9tIFwibmVjZXNzYXJ5XCI7XG5cbmNvbnN0IHsgcHJ1bmUgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5jb25zdCByZW1vdmUgPSBwcnVuZTsgIC8vL1xuXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tFZGdlc0luY2x1ZGVzRWRnZShlZGdlLCBlZGdlcykge1xuICBjb25zdCBlZGdlMSA9IGVkZ2UsIC8vL1xuICAgICAgICBlZGdlc0luY2x1ZGVzRWRnZSA9IGVkZ2VzLnNvbWUoKGVkZ2UpID0+IHtcbiAgICAgICAgICBjb25zdCBlZGdlMiA9IGVkZ2UsIC8vL1xuICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBlZGdlMS5tYXRjaChlZGdlMik7XG5cbiAgICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICByZXR1cm4gZWRnZXNJbmNsdWRlc0VkZ2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVFZGdlRnJvbUVkZ2VzKGVkZ2UsIGVkZ2VzKSB7XG4gIGNvbnN0IGVkZ2UxID0gZWRnZTsgLy8vXG5cbiAgcmVtb3ZlKGVkZ2VzLCAoZWRnZSkgPT4ge1xuICAgIGNvbnN0IGVkZ2UyID0gZWRnZSwgLy8vXG4gICAgICAgICAgbWF0Y2hlcyA9IGVkZ2UxLm1hdGNoKGVkZ2UyKTtcblxuICAgIGlmICghbWF0Y2hlcykgeyAvLy9cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlZGdlc0J5U291cmNlVmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCBlZGdlcykge1xuICBlZGdlcyA9IGVkZ2VzLmZpbHRlcigoZWRnZSkgPT4geyAgLy8vXG4gICAgY29uc3QgbWF0Y2hlcyA9IGVkZ2UubWF0Y2hTb3VyY2VWZXJ0ZXhOYW1lKHNvdXJjZVZlcnRleE5hbWUpO1xuXG4gICAgaWYgKG1hdGNoZXMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGVkZ2VzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZWRnZXNCeVRhcmdldFZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSwgZWRnZXMpIHtcbiAgZWRnZXMgPSBlZGdlcy5maWx0ZXIoKGVkZ2UpID0+IHsgIC8vL1xuICAgIGNvbnN0IG1hdGNoZXMgPSBlZGdlLm1hdGNoVGFyZ2V0VmVydGV4TmFtZSh0YXJnZXRWZXJ0ZXhOYW1lKTtcblxuICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBlZGdlcztcbn1cbiJdLCJuYW1lcyI6WyJjaGVja0VkZ2VzSW5jbHVkZXNFZGdlIiwicmVtb3ZlRWRnZUZyb21FZGdlcyIsImVkZ2VzQnlTb3VyY2VWZXJ0ZXhOYW1lIiwiZWRnZXNCeVRhcmdldFZlcnRleE5hbWUiLCJwcnVuZSIsImFycmF5VXRpbGl0aWVzIiwicmVtb3ZlIiwiZWRnZSIsImVkZ2VzIiwiZWRnZTEiLCJlZGdlc0luY2x1ZGVzRWRnZSIsInNvbWUiLCJlZGdlMiIsIm1hdGNoZXMiLCJtYXRjaCIsInNvdXJjZVZlcnRleE5hbWUiLCJmaWx0ZXIiLCJtYXRjaFNvdXJjZVZlcnRleE5hbWUiLCJ0YXJnZXRWZXJ0ZXhOYW1lIiwibWF0Y2hUYXJnZXRWZXJ0ZXhOYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUFRZ0JBLHNCQUFzQjtlQUF0QkE7O0lBY0FDLG1CQUFtQjtlQUFuQkE7O0lBYUFDLHVCQUF1QjtlQUF2QkE7O0lBWUFDLHVCQUF1QjtlQUF2QkE7Ozt5QkE3Q2U7QUFFL0IsSUFBTSxBQUFFQyxRQUFVQywwQkFBVkQ7QUFFUixJQUFNRSxTQUFTRixPQUFRLEdBQUc7QUFFbkIsU0FBU0osdUJBQXVCTyxJQUFJLEVBQUVDLEtBQUs7SUFDaEQsSUFBTUMsUUFBUUYsTUFDUkcsb0JBQW9CRixNQUFNRyxLQUFLLFNBQUNKO1FBQzlCLElBQU1LLFFBQVFMLE1BQ1JNLFVBQVVKLE1BQU1LLE1BQU1GO1FBRTVCLElBQUlDLFNBQVM7WUFDWCxPQUFPO1FBQ1Q7SUFDRjtJQUVOLE9BQU9IO0FBQ1Q7QUFFTyxTQUFTVCxvQkFBb0JNLElBQUksRUFBRUMsS0FBSztJQUM3QyxJQUFNQyxRQUFRRixNQUFNLEdBQUc7SUFFdkJELE9BQU9FLE9BQU8sU0FBQ0Q7UUFDYixJQUFNSyxRQUFRTCxNQUNSTSxVQUFVSixNQUFNSyxNQUFNRjtRQUU1QixJQUFJLENBQUNDLFNBQVM7WUFDWixPQUFPO1FBQ1Q7SUFDRjtBQUNGO0FBRU8sU0FBU1gsd0JBQXdCYSxnQkFBZ0IsRUFBRVAsS0FBSztJQUM3REEsUUFBUUEsTUFBTVEsT0FBTyxTQUFDVDtRQUNwQixJQUFNTSxVQUFVTixLQUFLVSxzQkFBc0JGO1FBRTNDLElBQUlGLFNBQVM7WUFDWCxPQUFPO1FBQ1Q7SUFDRjtJQUVBLE9BQU9MO0FBQ1Q7QUFFTyxTQUFTTCx3QkFBd0JlLGdCQUFnQixFQUFFVixLQUFLO0lBQzdEQSxRQUFRQSxNQUFNUSxPQUFPLFNBQUNUO1FBQ3BCLElBQU1NLFVBQVVOLEtBQUtZLHNCQUFzQkQ7UUFFM0MsSUFBSUwsU0FBUztZQUNYLE9BQU87UUFDVDtJQUNGO0lBRUEsT0FBT0w7QUFDVCJ9