eurostat-map 4.11.0 → 4.11.2
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/build/323.eurostatmap.min.js +3 -0
- package/build/323.eurostatmap.min.js.map +1 -0
- package/build/eurostatmap.js +268 -73
- package/build/eurostatmap.min.js +2 -2
- package/build/eurostatmap.min.js.map +1 -1
- package/build/package.json +1 -1
- package/build/src_core_dorling_dorling-worker_js.eurostatmap.js +218 -8
- package/build/types/core/decoration/LabelsConfig.d.ts +2 -1
- package/build/types/layers/composition/bar/BarMapConfig.d.ts +7 -0
- package/build/types/layers/composition/coxcomb/CoxcombMapConfig.d.ts +7 -0
- package/build/types/layers/composition/pie/PieMapConfig.d.ts +7 -0
- package/build/types/layers/composition/waffle/WaffleMapConfig.d.ts +7 -0
- package/build/types/layers/proportional-symbol/ProportionalSymbolConfig.d.ts +5 -1
- package/build/vendors-node_modules_d3-force_src_collide_js-node_modules_d3-force_src_simulation_js-node_mod-2a5c42.eurostatmap.js +1320 -0
- package/package.json +1 -1
- package/build/215.eurostatmap.min.js +0 -3
- package/build/215.eurostatmap.min.js.map +0 -1
|
@@ -0,0 +1,1320 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
(self["webpackChunkeurostatmap"] = self["webpackChunkeurostatmap"] || []).push([["vendors-node_modules_d3-force_src_collide_js-node_modules_d3-force_src_simulation_js-node_mod-2a5c42"],{
|
|
3
|
+
|
|
4
|
+
/***/ "./node_modules/d3-dispatch/src/dispatch.js"
|
|
5
|
+
/*!**************************************************!*\
|
|
6
|
+
!*** ./node_modules/d3-dispatch/src/dispatch.js ***!
|
|
7
|
+
\**************************************************/
|
|
8
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
9
|
+
|
|
10
|
+
__webpack_require__.r(__webpack_exports__);
|
|
11
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
12
|
+
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
|
|
13
|
+
/* harmony export */ });
|
|
14
|
+
var noop = {value: () => {}};
|
|
15
|
+
|
|
16
|
+
function dispatch() {
|
|
17
|
+
for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
|
|
18
|
+
if (!(t = arguments[i] + "") || (t in _) || /[\s.]/.test(t)) throw new Error("illegal type: " + t);
|
|
19
|
+
_[t] = [];
|
|
20
|
+
}
|
|
21
|
+
return new Dispatch(_);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
function Dispatch(_) {
|
|
25
|
+
this._ = _;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function parseTypenames(typenames, types) {
|
|
29
|
+
return typenames.trim().split(/^|\s+/).map(function(t) {
|
|
30
|
+
var name = "", i = t.indexOf(".");
|
|
31
|
+
if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
|
|
32
|
+
if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
|
|
33
|
+
return {type: t, name: name};
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
Dispatch.prototype = dispatch.prototype = {
|
|
38
|
+
constructor: Dispatch,
|
|
39
|
+
on: function(typename, callback) {
|
|
40
|
+
var _ = this._,
|
|
41
|
+
T = parseTypenames(typename + "", _),
|
|
42
|
+
t,
|
|
43
|
+
i = -1,
|
|
44
|
+
n = T.length;
|
|
45
|
+
|
|
46
|
+
// If no callback was specified, return the callback of the given type and name.
|
|
47
|
+
if (arguments.length < 2) {
|
|
48
|
+
while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// If a type was specified, set the callback for the given type and name.
|
|
53
|
+
// Otherwise, if a null callback was specified, remove callbacks of the given name.
|
|
54
|
+
if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
|
|
55
|
+
while (++i < n) {
|
|
56
|
+
if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);
|
|
57
|
+
else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return this;
|
|
61
|
+
},
|
|
62
|
+
copy: function() {
|
|
63
|
+
var copy = {}, _ = this._;
|
|
64
|
+
for (var t in _) copy[t] = _[t].slice();
|
|
65
|
+
return new Dispatch(copy);
|
|
66
|
+
},
|
|
67
|
+
call: function(type, that) {
|
|
68
|
+
if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];
|
|
69
|
+
if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
|
|
70
|
+
for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
|
|
71
|
+
},
|
|
72
|
+
apply: function(type, that, args) {
|
|
73
|
+
if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
|
|
74
|
+
for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
|
|
78
|
+
function get(type, name) {
|
|
79
|
+
for (var i = 0, n = type.length, c; i < n; ++i) {
|
|
80
|
+
if ((c = type[i]).name === name) {
|
|
81
|
+
return c.value;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function set(type, name, callback) {
|
|
87
|
+
for (var i = 0, n = type.length; i < n; ++i) {
|
|
88
|
+
if (type[i].name === name) {
|
|
89
|
+
type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
if (callback != null) type.push({name: name, value: callback});
|
|
94
|
+
return type;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (dispatch);
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
/***/ },
|
|
101
|
+
|
|
102
|
+
/***/ "./node_modules/d3-force/src/collide.js"
|
|
103
|
+
/*!**********************************************!*\
|
|
104
|
+
!*** ./node_modules/d3-force/src/collide.js ***!
|
|
105
|
+
\**********************************************/
|
|
106
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
107
|
+
|
|
108
|
+
__webpack_require__.r(__webpack_exports__);
|
|
109
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
110
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
|
|
111
|
+
/* harmony export */ });
|
|
112
|
+
/* harmony import */ var d3_quadtree__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-quadtree */ "./node_modules/d3-quadtree/src/quadtree.js");
|
|
113
|
+
/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./constant.js */ "./node_modules/d3-force/src/constant.js");
|
|
114
|
+
/* harmony import */ var _jiggle_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./jiggle.js */ "./node_modules/d3-force/src/jiggle.js");
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
function x(d) {
|
|
120
|
+
return d.x + d.vx;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
function y(d) {
|
|
124
|
+
return d.y + d.vy;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(radius) {
|
|
128
|
+
var nodes,
|
|
129
|
+
radii,
|
|
130
|
+
random,
|
|
131
|
+
strength = 1,
|
|
132
|
+
iterations = 1;
|
|
133
|
+
|
|
134
|
+
if (typeof radius !== "function") radius = (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(radius == null ? 1 : +radius);
|
|
135
|
+
|
|
136
|
+
function force() {
|
|
137
|
+
var i, n = nodes.length,
|
|
138
|
+
tree,
|
|
139
|
+
node,
|
|
140
|
+
xi,
|
|
141
|
+
yi,
|
|
142
|
+
ri,
|
|
143
|
+
ri2;
|
|
144
|
+
|
|
145
|
+
for (var k = 0; k < iterations; ++k) {
|
|
146
|
+
tree = (0,d3_quadtree__WEBPACK_IMPORTED_MODULE_0__["default"])(nodes, x, y).visitAfter(prepare);
|
|
147
|
+
for (i = 0; i < n; ++i) {
|
|
148
|
+
node = nodes[i];
|
|
149
|
+
ri = radii[node.index], ri2 = ri * ri;
|
|
150
|
+
xi = node.x + node.vx;
|
|
151
|
+
yi = node.y + node.vy;
|
|
152
|
+
tree.visit(apply);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function apply(quad, x0, y0, x1, y1) {
|
|
157
|
+
var data = quad.data, rj = quad.r, r = ri + rj;
|
|
158
|
+
if (data) {
|
|
159
|
+
if (data.index > node.index) {
|
|
160
|
+
var x = xi - data.x - data.vx,
|
|
161
|
+
y = yi - data.y - data.vy,
|
|
162
|
+
l = x * x + y * y;
|
|
163
|
+
if (l < r * r) {
|
|
164
|
+
if (x === 0) x = (0,_jiggle_js__WEBPACK_IMPORTED_MODULE_2__["default"])(random), l += x * x;
|
|
165
|
+
if (y === 0) y = (0,_jiggle_js__WEBPACK_IMPORTED_MODULE_2__["default"])(random), l += y * y;
|
|
166
|
+
l = (r - (l = Math.sqrt(l))) / l * strength;
|
|
167
|
+
node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));
|
|
168
|
+
node.vy += (y *= l) * r;
|
|
169
|
+
data.vx -= x * (r = 1 - r);
|
|
170
|
+
data.vy -= y * r;
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
function prepare(quad) {
|
|
180
|
+
if (quad.data) return quad.r = radii[quad.data.index];
|
|
181
|
+
for (var i = quad.r = 0; i < 4; ++i) {
|
|
182
|
+
if (quad[i] && quad[i].r > quad.r) {
|
|
183
|
+
quad.r = quad[i].r;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
function initialize() {
|
|
189
|
+
if (!nodes) return;
|
|
190
|
+
var i, n = nodes.length, node;
|
|
191
|
+
radii = new Array(n);
|
|
192
|
+
for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
force.initialize = function(_nodes, _random) {
|
|
196
|
+
nodes = _nodes;
|
|
197
|
+
random = _random;
|
|
198
|
+
initialize();
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
force.iterations = function(_) {
|
|
202
|
+
return arguments.length ? (iterations = +_, force) : iterations;
|
|
203
|
+
};
|
|
204
|
+
|
|
205
|
+
force.strength = function(_) {
|
|
206
|
+
return arguments.length ? (strength = +_, force) : strength;
|
|
207
|
+
};
|
|
208
|
+
|
|
209
|
+
force.radius = function(_) {
|
|
210
|
+
return arguments.length ? (radius = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_1__["default"])(+_), initialize(), force) : radius;
|
|
211
|
+
};
|
|
212
|
+
|
|
213
|
+
return force;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
/***/ },
|
|
218
|
+
|
|
219
|
+
/***/ "./node_modules/d3-force/src/constant.js"
|
|
220
|
+
/*!***********************************************!*\
|
|
221
|
+
!*** ./node_modules/d3-force/src/constant.js ***!
|
|
222
|
+
\***********************************************/
|
|
223
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
224
|
+
|
|
225
|
+
__webpack_require__.r(__webpack_exports__);
|
|
226
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
227
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
|
|
228
|
+
/* harmony export */ });
|
|
229
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {
|
|
230
|
+
return function() {
|
|
231
|
+
return x;
|
|
232
|
+
};
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
/***/ },
|
|
237
|
+
|
|
238
|
+
/***/ "./node_modules/d3-force/src/jiggle.js"
|
|
239
|
+
/*!*********************************************!*\
|
|
240
|
+
!*** ./node_modules/d3-force/src/jiggle.js ***!
|
|
241
|
+
\*********************************************/
|
|
242
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
243
|
+
|
|
244
|
+
__webpack_require__.r(__webpack_exports__);
|
|
245
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
246
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
|
|
247
|
+
/* harmony export */ });
|
|
248
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(random) {
|
|
249
|
+
return (random() - 0.5) * 1e-6;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
/***/ },
|
|
254
|
+
|
|
255
|
+
/***/ "./node_modules/d3-force/src/lcg.js"
|
|
256
|
+
/*!******************************************!*\
|
|
257
|
+
!*** ./node_modules/d3-force/src/lcg.js ***!
|
|
258
|
+
\******************************************/
|
|
259
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
260
|
+
|
|
261
|
+
__webpack_require__.r(__webpack_exports__);
|
|
262
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
263
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
|
|
264
|
+
/* harmony export */ });
|
|
265
|
+
// https://en.wikipedia.org/wiki/Linear_congruential_generator#Parameters_in_common_use
|
|
266
|
+
const a = 1664525;
|
|
267
|
+
const c = 1013904223;
|
|
268
|
+
const m = 4294967296; // 2^32
|
|
269
|
+
|
|
270
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {
|
|
271
|
+
let s = 1;
|
|
272
|
+
return () => (s = (a * s + c) % m) / m;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
/***/ },
|
|
277
|
+
|
|
278
|
+
/***/ "./node_modules/d3-force/src/simulation.js"
|
|
279
|
+
/*!*************************************************!*\
|
|
280
|
+
!*** ./node_modules/d3-force/src/simulation.js ***!
|
|
281
|
+
\*************************************************/
|
|
282
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
283
|
+
|
|
284
|
+
__webpack_require__.r(__webpack_exports__);
|
|
285
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
286
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),
|
|
287
|
+
/* harmony export */ x: () => (/* binding */ x),
|
|
288
|
+
/* harmony export */ y: () => (/* binding */ y)
|
|
289
|
+
/* harmony export */ });
|
|
290
|
+
/* harmony import */ var d3_dispatch__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! d3-dispatch */ "./node_modules/d3-dispatch/src/dispatch.js");
|
|
291
|
+
/* harmony import */ var d3_timer__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! d3-timer */ "./node_modules/d3-timer/src/timer.js");
|
|
292
|
+
/* harmony import */ var _lcg_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lcg.js */ "./node_modules/d3-force/src/lcg.js");
|
|
293
|
+
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
function x(d) {
|
|
298
|
+
return d.x;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
function y(d) {
|
|
302
|
+
return d.y;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
var initialRadius = 10,
|
|
306
|
+
initialAngle = Math.PI * (3 - Math.sqrt(5));
|
|
307
|
+
|
|
308
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(nodes) {
|
|
309
|
+
var simulation,
|
|
310
|
+
alpha = 1,
|
|
311
|
+
alphaMin = 0.001,
|
|
312
|
+
alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),
|
|
313
|
+
alphaTarget = 0,
|
|
314
|
+
velocityDecay = 0.6,
|
|
315
|
+
forces = new Map(),
|
|
316
|
+
stepper = (0,d3_timer__WEBPACK_IMPORTED_MODULE_1__.timer)(step),
|
|
317
|
+
event = (0,d3_dispatch__WEBPACK_IMPORTED_MODULE_0__["default"])("tick", "end"),
|
|
318
|
+
random = (0,_lcg_js__WEBPACK_IMPORTED_MODULE_2__["default"])();
|
|
319
|
+
|
|
320
|
+
if (nodes == null) nodes = [];
|
|
321
|
+
|
|
322
|
+
function step() {
|
|
323
|
+
tick();
|
|
324
|
+
event.call("tick", simulation);
|
|
325
|
+
if (alpha < alphaMin) {
|
|
326
|
+
stepper.stop();
|
|
327
|
+
event.call("end", simulation);
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
function tick(iterations) {
|
|
332
|
+
var i, n = nodes.length, node;
|
|
333
|
+
|
|
334
|
+
if (iterations === undefined) iterations = 1;
|
|
335
|
+
|
|
336
|
+
for (var k = 0; k < iterations; ++k) {
|
|
337
|
+
alpha += (alphaTarget - alpha) * alphaDecay;
|
|
338
|
+
|
|
339
|
+
forces.forEach(function(force) {
|
|
340
|
+
force(alpha);
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
for (i = 0; i < n; ++i) {
|
|
344
|
+
node = nodes[i];
|
|
345
|
+
if (node.fx == null) node.x += node.vx *= velocityDecay;
|
|
346
|
+
else node.x = node.fx, node.vx = 0;
|
|
347
|
+
if (node.fy == null) node.y += node.vy *= velocityDecay;
|
|
348
|
+
else node.y = node.fy, node.vy = 0;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
return simulation;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
function initializeNodes() {
|
|
356
|
+
for (var i = 0, n = nodes.length, node; i < n; ++i) {
|
|
357
|
+
node = nodes[i], node.index = i;
|
|
358
|
+
if (node.fx != null) node.x = node.fx;
|
|
359
|
+
if (node.fy != null) node.y = node.fy;
|
|
360
|
+
if (isNaN(node.x) || isNaN(node.y)) {
|
|
361
|
+
var radius = initialRadius * Math.sqrt(0.5 + i), angle = i * initialAngle;
|
|
362
|
+
node.x = radius * Math.cos(angle);
|
|
363
|
+
node.y = radius * Math.sin(angle);
|
|
364
|
+
}
|
|
365
|
+
if (isNaN(node.vx) || isNaN(node.vy)) {
|
|
366
|
+
node.vx = node.vy = 0;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
function initializeForce(force) {
|
|
372
|
+
if (force.initialize) force.initialize(nodes, random);
|
|
373
|
+
return force;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
initializeNodes();
|
|
377
|
+
|
|
378
|
+
return simulation = {
|
|
379
|
+
tick: tick,
|
|
380
|
+
|
|
381
|
+
restart: function() {
|
|
382
|
+
return stepper.restart(step), simulation;
|
|
383
|
+
},
|
|
384
|
+
|
|
385
|
+
stop: function() {
|
|
386
|
+
return stepper.stop(), simulation;
|
|
387
|
+
},
|
|
388
|
+
|
|
389
|
+
nodes: function(_) {
|
|
390
|
+
return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;
|
|
391
|
+
},
|
|
392
|
+
|
|
393
|
+
alpha: function(_) {
|
|
394
|
+
return arguments.length ? (alpha = +_, simulation) : alpha;
|
|
395
|
+
},
|
|
396
|
+
|
|
397
|
+
alphaMin: function(_) {
|
|
398
|
+
return arguments.length ? (alphaMin = +_, simulation) : alphaMin;
|
|
399
|
+
},
|
|
400
|
+
|
|
401
|
+
alphaDecay: function(_) {
|
|
402
|
+
return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;
|
|
403
|
+
},
|
|
404
|
+
|
|
405
|
+
alphaTarget: function(_) {
|
|
406
|
+
return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;
|
|
407
|
+
},
|
|
408
|
+
|
|
409
|
+
velocityDecay: function(_) {
|
|
410
|
+
return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;
|
|
411
|
+
},
|
|
412
|
+
|
|
413
|
+
randomSource: function(_) {
|
|
414
|
+
return arguments.length ? (random = _, forces.forEach(initializeForce), simulation) : random;
|
|
415
|
+
},
|
|
416
|
+
|
|
417
|
+
force: function(name, _) {
|
|
418
|
+
return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);
|
|
419
|
+
},
|
|
420
|
+
|
|
421
|
+
find: function(x, y, radius) {
|
|
422
|
+
var i = 0,
|
|
423
|
+
n = nodes.length,
|
|
424
|
+
dx,
|
|
425
|
+
dy,
|
|
426
|
+
d2,
|
|
427
|
+
node,
|
|
428
|
+
closest;
|
|
429
|
+
|
|
430
|
+
if (radius == null) radius = Infinity;
|
|
431
|
+
else radius *= radius;
|
|
432
|
+
|
|
433
|
+
for (i = 0; i < n; ++i) {
|
|
434
|
+
node = nodes[i];
|
|
435
|
+
dx = x - node.x;
|
|
436
|
+
dy = y - node.y;
|
|
437
|
+
d2 = dx * dx + dy * dy;
|
|
438
|
+
if (d2 < radius) closest = node, radius = d2;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
return closest;
|
|
442
|
+
},
|
|
443
|
+
|
|
444
|
+
on: function(name, _) {
|
|
445
|
+
return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);
|
|
446
|
+
}
|
|
447
|
+
};
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
/***/ },
|
|
452
|
+
|
|
453
|
+
/***/ "./node_modules/d3-force/src/x.js"
|
|
454
|
+
/*!****************************************!*\
|
|
455
|
+
!*** ./node_modules/d3-force/src/x.js ***!
|
|
456
|
+
\****************************************/
|
|
457
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
458
|
+
|
|
459
|
+
__webpack_require__.r(__webpack_exports__);
|
|
460
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
461
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
|
|
462
|
+
/* harmony export */ });
|
|
463
|
+
/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ "./node_modules/d3-force/src/constant.js");
|
|
464
|
+
|
|
465
|
+
|
|
466
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x) {
|
|
467
|
+
var strength = (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__["default"])(0.1),
|
|
468
|
+
nodes,
|
|
469
|
+
strengths,
|
|
470
|
+
xz;
|
|
471
|
+
|
|
472
|
+
if (typeof x !== "function") x = (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__["default"])(x == null ? 0 : +x);
|
|
473
|
+
|
|
474
|
+
function force(alpha) {
|
|
475
|
+
for (var i = 0, n = nodes.length, node; i < n; ++i) {
|
|
476
|
+
node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
function initialize() {
|
|
481
|
+
if (!nodes) return;
|
|
482
|
+
var i, n = nodes.length;
|
|
483
|
+
strengths = new Array(n);
|
|
484
|
+
xz = new Array(n);
|
|
485
|
+
for (i = 0; i < n; ++i) {
|
|
486
|
+
strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
|
|
490
|
+
force.initialize = function(_) {
|
|
491
|
+
nodes = _;
|
|
492
|
+
initialize();
|
|
493
|
+
};
|
|
494
|
+
|
|
495
|
+
force.strength = function(_) {
|
|
496
|
+
return arguments.length ? (strength = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : strength;
|
|
497
|
+
};
|
|
498
|
+
|
|
499
|
+
force.x = function(_) {
|
|
500
|
+
return arguments.length ? (x = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : x;
|
|
501
|
+
};
|
|
502
|
+
|
|
503
|
+
return force;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
|
|
507
|
+
/***/ },
|
|
508
|
+
|
|
509
|
+
/***/ "./node_modules/d3-force/src/y.js"
|
|
510
|
+
/*!****************************************!*\
|
|
511
|
+
!*** ./node_modules/d3-force/src/y.js ***!
|
|
512
|
+
\****************************************/
|
|
513
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
514
|
+
|
|
515
|
+
__webpack_require__.r(__webpack_exports__);
|
|
516
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
517
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
|
|
518
|
+
/* harmony export */ });
|
|
519
|
+
/* harmony import */ var _constant_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./constant.js */ "./node_modules/d3-force/src/constant.js");
|
|
520
|
+
|
|
521
|
+
|
|
522
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(y) {
|
|
523
|
+
var strength = (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__["default"])(0.1),
|
|
524
|
+
nodes,
|
|
525
|
+
strengths,
|
|
526
|
+
yz;
|
|
527
|
+
|
|
528
|
+
if (typeof y !== "function") y = (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__["default"])(y == null ? 0 : +y);
|
|
529
|
+
|
|
530
|
+
function force(alpha) {
|
|
531
|
+
for (var i = 0, n = nodes.length, node; i < n; ++i) {
|
|
532
|
+
node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;
|
|
533
|
+
}
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
function initialize() {
|
|
537
|
+
if (!nodes) return;
|
|
538
|
+
var i, n = nodes.length;
|
|
539
|
+
strengths = new Array(n);
|
|
540
|
+
yz = new Array(n);
|
|
541
|
+
for (i = 0; i < n; ++i) {
|
|
542
|
+
strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);
|
|
543
|
+
}
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
force.initialize = function(_) {
|
|
547
|
+
nodes = _;
|
|
548
|
+
initialize();
|
|
549
|
+
};
|
|
550
|
+
|
|
551
|
+
force.strength = function(_) {
|
|
552
|
+
return arguments.length ? (strength = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : strength;
|
|
553
|
+
};
|
|
554
|
+
|
|
555
|
+
force.y = function(_) {
|
|
556
|
+
return arguments.length ? (y = typeof _ === "function" ? _ : (0,_constant_js__WEBPACK_IMPORTED_MODULE_0__["default"])(+_), initialize(), force) : y;
|
|
557
|
+
};
|
|
558
|
+
|
|
559
|
+
return force;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
|
|
563
|
+
/***/ },
|
|
564
|
+
|
|
565
|
+
/***/ "./node_modules/d3-quadtree/src/add.js"
|
|
566
|
+
/*!*********************************************!*\
|
|
567
|
+
!*** ./node_modules/d3-quadtree/src/add.js ***!
|
|
568
|
+
\*********************************************/
|
|
569
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
570
|
+
|
|
571
|
+
__webpack_require__.r(__webpack_exports__);
|
|
572
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
573
|
+
/* harmony export */ addAll: () => (/* binding */ addAll),
|
|
574
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
|
|
575
|
+
/* harmony export */ });
|
|
576
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(d) {
|
|
577
|
+
const x = +this._x.call(null, d),
|
|
578
|
+
y = +this._y.call(null, d);
|
|
579
|
+
return add(this.cover(x, y), x, y, d);
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
function add(tree, x, y, d) {
|
|
583
|
+
if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points
|
|
584
|
+
|
|
585
|
+
var parent,
|
|
586
|
+
node = tree._root,
|
|
587
|
+
leaf = {data: d},
|
|
588
|
+
x0 = tree._x0,
|
|
589
|
+
y0 = tree._y0,
|
|
590
|
+
x1 = tree._x1,
|
|
591
|
+
y1 = tree._y1,
|
|
592
|
+
xm,
|
|
593
|
+
ym,
|
|
594
|
+
xp,
|
|
595
|
+
yp,
|
|
596
|
+
right,
|
|
597
|
+
bottom,
|
|
598
|
+
i,
|
|
599
|
+
j;
|
|
600
|
+
|
|
601
|
+
// If the tree is empty, initialize the root as a leaf.
|
|
602
|
+
if (!node) return tree._root = leaf, tree;
|
|
603
|
+
|
|
604
|
+
// Find the existing leaf for the new point, or add it.
|
|
605
|
+
while (node.length) {
|
|
606
|
+
if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
|
|
607
|
+
if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
|
|
608
|
+
if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
// Is the new point is exactly coincident with the existing point?
|
|
612
|
+
xp = +tree._x.call(null, node.data);
|
|
613
|
+
yp = +tree._y.call(null, node.data);
|
|
614
|
+
if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;
|
|
615
|
+
|
|
616
|
+
// Otherwise, split the leaf node until the old and new point are separated.
|
|
617
|
+
do {
|
|
618
|
+
parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);
|
|
619
|
+
if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
|
|
620
|
+
if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
|
|
621
|
+
} while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));
|
|
622
|
+
return parent[j] = node, parent[i] = leaf, tree;
|
|
623
|
+
}
|
|
624
|
+
|
|
625
|
+
function addAll(data) {
|
|
626
|
+
var d, i, n = data.length,
|
|
627
|
+
x,
|
|
628
|
+
y,
|
|
629
|
+
xz = new Array(n),
|
|
630
|
+
yz = new Array(n),
|
|
631
|
+
x0 = Infinity,
|
|
632
|
+
y0 = Infinity,
|
|
633
|
+
x1 = -Infinity,
|
|
634
|
+
y1 = -Infinity;
|
|
635
|
+
|
|
636
|
+
// Compute the points and their extent.
|
|
637
|
+
for (i = 0; i < n; ++i) {
|
|
638
|
+
if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;
|
|
639
|
+
xz[i] = x;
|
|
640
|
+
yz[i] = y;
|
|
641
|
+
if (x < x0) x0 = x;
|
|
642
|
+
if (x > x1) x1 = x;
|
|
643
|
+
if (y < y0) y0 = y;
|
|
644
|
+
if (y > y1) y1 = y;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
// If there were no (valid) points, abort.
|
|
648
|
+
if (x0 > x1 || y0 > y1) return this;
|
|
649
|
+
|
|
650
|
+
// Expand the tree to cover the new points.
|
|
651
|
+
this.cover(x0, y0).cover(x1, y1);
|
|
652
|
+
|
|
653
|
+
// Add the new points.
|
|
654
|
+
for (i = 0; i < n; ++i) {
|
|
655
|
+
add(this, xz[i], yz[i], data[i]);
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
return this;
|
|
659
|
+
}
|
|
660
|
+
|
|
661
|
+
|
|
662
|
+
/***/ },
|
|
663
|
+
|
|
664
|
+
/***/ "./node_modules/d3-quadtree/src/cover.js"
|
|
665
|
+
/*!***********************************************!*\
|
|
666
|
+
!*** ./node_modules/d3-quadtree/src/cover.js ***!
|
|
667
|
+
\***********************************************/
|
|
668
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
669
|
+
|
|
670
|
+
__webpack_require__.r(__webpack_exports__);
|
|
671
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
672
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
|
|
673
|
+
/* harmony export */ });
|
|
674
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x, y) {
|
|
675
|
+
if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points
|
|
676
|
+
|
|
677
|
+
var x0 = this._x0,
|
|
678
|
+
y0 = this._y0,
|
|
679
|
+
x1 = this._x1,
|
|
680
|
+
y1 = this._y1;
|
|
681
|
+
|
|
682
|
+
// If the quadtree has no extent, initialize them.
|
|
683
|
+
// Integer extent are necessary so that if we later double the extent,
|
|
684
|
+
// the existing quadrant boundaries don’t change due to floating point error!
|
|
685
|
+
if (isNaN(x0)) {
|
|
686
|
+
x1 = (x0 = Math.floor(x)) + 1;
|
|
687
|
+
y1 = (y0 = Math.floor(y)) + 1;
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
// Otherwise, double repeatedly to cover.
|
|
691
|
+
else {
|
|
692
|
+
var z = x1 - x0 || 1,
|
|
693
|
+
node = this._root,
|
|
694
|
+
parent,
|
|
695
|
+
i;
|
|
696
|
+
|
|
697
|
+
while (x0 > x || x >= x1 || y0 > y || y >= y1) {
|
|
698
|
+
i = (y < y0) << 1 | (x < x0);
|
|
699
|
+
parent = new Array(4), parent[i] = node, node = parent, z *= 2;
|
|
700
|
+
switch (i) {
|
|
701
|
+
case 0: x1 = x0 + z, y1 = y0 + z; break;
|
|
702
|
+
case 1: x0 = x1 - z, y1 = y0 + z; break;
|
|
703
|
+
case 2: x1 = x0 + z, y0 = y1 - z; break;
|
|
704
|
+
case 3: x0 = x1 - z, y0 = y1 - z; break;
|
|
705
|
+
}
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
if (this._root && this._root.length) this._root = node;
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
this._x0 = x0;
|
|
712
|
+
this._y0 = y0;
|
|
713
|
+
this._x1 = x1;
|
|
714
|
+
this._y1 = y1;
|
|
715
|
+
return this;
|
|
716
|
+
}
|
|
717
|
+
|
|
718
|
+
|
|
719
|
+
/***/ },
|
|
720
|
+
|
|
721
|
+
/***/ "./node_modules/d3-quadtree/src/data.js"
|
|
722
|
+
/*!**********************************************!*\
|
|
723
|
+
!*** ./node_modules/d3-quadtree/src/data.js ***!
|
|
724
|
+
\**********************************************/
|
|
725
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
726
|
+
|
|
727
|
+
__webpack_require__.r(__webpack_exports__);
|
|
728
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
729
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
|
|
730
|
+
/* harmony export */ });
|
|
731
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {
|
|
732
|
+
var data = [];
|
|
733
|
+
this.visit(function(node) {
|
|
734
|
+
if (!node.length) do data.push(node.data); while (node = node.next)
|
|
735
|
+
});
|
|
736
|
+
return data;
|
|
737
|
+
}
|
|
738
|
+
|
|
739
|
+
|
|
740
|
+
/***/ },
|
|
741
|
+
|
|
742
|
+
/***/ "./node_modules/d3-quadtree/src/extent.js"
|
|
743
|
+
/*!************************************************!*\
|
|
744
|
+
!*** ./node_modules/d3-quadtree/src/extent.js ***!
|
|
745
|
+
\************************************************/
|
|
746
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
747
|
+
|
|
748
|
+
__webpack_require__.r(__webpack_exports__);
|
|
749
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
750
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
|
|
751
|
+
/* harmony export */ });
|
|
752
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(_) {
|
|
753
|
+
return arguments.length
|
|
754
|
+
? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])
|
|
755
|
+
: isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
|
|
759
|
+
/***/ },
|
|
760
|
+
|
|
761
|
+
/***/ "./node_modules/d3-quadtree/src/find.js"
|
|
762
|
+
/*!**********************************************!*\
|
|
763
|
+
!*** ./node_modules/d3-quadtree/src/find.js ***!
|
|
764
|
+
\**********************************************/
|
|
765
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
766
|
+
|
|
767
|
+
__webpack_require__.r(__webpack_exports__);
|
|
768
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
769
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
|
|
770
|
+
/* harmony export */ });
|
|
771
|
+
/* harmony import */ var _quad_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quad.js */ "./node_modules/d3-quadtree/src/quad.js");
|
|
772
|
+
|
|
773
|
+
|
|
774
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(x, y, radius) {
|
|
775
|
+
var data,
|
|
776
|
+
x0 = this._x0,
|
|
777
|
+
y0 = this._y0,
|
|
778
|
+
x1,
|
|
779
|
+
y1,
|
|
780
|
+
x2,
|
|
781
|
+
y2,
|
|
782
|
+
x3 = this._x1,
|
|
783
|
+
y3 = this._y1,
|
|
784
|
+
quads = [],
|
|
785
|
+
node = this._root,
|
|
786
|
+
q,
|
|
787
|
+
i;
|
|
788
|
+
|
|
789
|
+
if (node) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](node, x0, y0, x3, y3));
|
|
790
|
+
if (radius == null) radius = Infinity;
|
|
791
|
+
else {
|
|
792
|
+
x0 = x - radius, y0 = y - radius;
|
|
793
|
+
x3 = x + radius, y3 = y + radius;
|
|
794
|
+
radius *= radius;
|
|
795
|
+
}
|
|
796
|
+
|
|
797
|
+
while (q = quads.pop()) {
|
|
798
|
+
|
|
799
|
+
// Stop searching if this quadrant can’t contain a closer node.
|
|
800
|
+
if (!(node = q.node)
|
|
801
|
+
|| (x1 = q.x0) > x3
|
|
802
|
+
|| (y1 = q.y0) > y3
|
|
803
|
+
|| (x2 = q.x1) < x0
|
|
804
|
+
|| (y2 = q.y1) < y0) continue;
|
|
805
|
+
|
|
806
|
+
// Bisect the current quadrant.
|
|
807
|
+
if (node.length) {
|
|
808
|
+
var xm = (x1 + x2) / 2,
|
|
809
|
+
ym = (y1 + y2) / 2;
|
|
810
|
+
|
|
811
|
+
quads.push(
|
|
812
|
+
new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](node[3], xm, ym, x2, y2),
|
|
813
|
+
new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](node[2], x1, ym, xm, y2),
|
|
814
|
+
new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](node[1], xm, y1, x2, ym),
|
|
815
|
+
new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](node[0], x1, y1, xm, ym)
|
|
816
|
+
);
|
|
817
|
+
|
|
818
|
+
// Visit the closest quadrant first.
|
|
819
|
+
if (i = (y >= ym) << 1 | (x >= xm)) {
|
|
820
|
+
q = quads[quads.length - 1];
|
|
821
|
+
quads[quads.length - 1] = quads[quads.length - 1 - i];
|
|
822
|
+
quads[quads.length - 1 - i] = q;
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
// Visit this point. (Visiting coincident points isn’t necessary!)
|
|
827
|
+
else {
|
|
828
|
+
var dx = x - +this._x.call(null, node.data),
|
|
829
|
+
dy = y - +this._y.call(null, node.data),
|
|
830
|
+
d2 = dx * dx + dy * dy;
|
|
831
|
+
if (d2 < radius) {
|
|
832
|
+
var d = Math.sqrt(radius = d2);
|
|
833
|
+
x0 = x - d, y0 = y - d;
|
|
834
|
+
x3 = x + d, y3 = y + d;
|
|
835
|
+
data = node.data;
|
|
836
|
+
}
|
|
837
|
+
}
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
return data;
|
|
841
|
+
}
|
|
842
|
+
|
|
843
|
+
|
|
844
|
+
/***/ },
|
|
845
|
+
|
|
846
|
+
/***/ "./node_modules/d3-quadtree/src/quad.js"
|
|
847
|
+
/*!**********************************************!*\
|
|
848
|
+
!*** ./node_modules/d3-quadtree/src/quad.js ***!
|
|
849
|
+
\**********************************************/
|
|
850
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
851
|
+
|
|
852
|
+
__webpack_require__.r(__webpack_exports__);
|
|
853
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
854
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
|
|
855
|
+
/* harmony export */ });
|
|
856
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(node, x0, y0, x1, y1) {
|
|
857
|
+
this.node = node;
|
|
858
|
+
this.x0 = x0;
|
|
859
|
+
this.y0 = y0;
|
|
860
|
+
this.x1 = x1;
|
|
861
|
+
this.y1 = y1;
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
|
|
865
|
+
/***/ },
|
|
866
|
+
|
|
867
|
+
/***/ "./node_modules/d3-quadtree/src/quadtree.js"
|
|
868
|
+
/*!**************************************************!*\
|
|
869
|
+
!*** ./node_modules/d3-quadtree/src/quadtree.js ***!
|
|
870
|
+
\**************************************************/
|
|
871
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
872
|
+
|
|
873
|
+
__webpack_require__.r(__webpack_exports__);
|
|
874
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
875
|
+
/* harmony export */ "default": () => (/* binding */ quadtree)
|
|
876
|
+
/* harmony export */ });
|
|
877
|
+
/* harmony import */ var _add_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./add.js */ "./node_modules/d3-quadtree/src/add.js");
|
|
878
|
+
/* harmony import */ var _cover_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./cover.js */ "./node_modules/d3-quadtree/src/cover.js");
|
|
879
|
+
/* harmony import */ var _data_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./data.js */ "./node_modules/d3-quadtree/src/data.js");
|
|
880
|
+
/* harmony import */ var _extent_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./extent.js */ "./node_modules/d3-quadtree/src/extent.js");
|
|
881
|
+
/* harmony import */ var _find_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./find.js */ "./node_modules/d3-quadtree/src/find.js");
|
|
882
|
+
/* harmony import */ var _remove_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./remove.js */ "./node_modules/d3-quadtree/src/remove.js");
|
|
883
|
+
/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./root.js */ "./node_modules/d3-quadtree/src/root.js");
|
|
884
|
+
/* harmony import */ var _size_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./size.js */ "./node_modules/d3-quadtree/src/size.js");
|
|
885
|
+
/* harmony import */ var _visit_js__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./visit.js */ "./node_modules/d3-quadtree/src/visit.js");
|
|
886
|
+
/* harmony import */ var _visitAfter_js__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./visitAfter.js */ "./node_modules/d3-quadtree/src/visitAfter.js");
|
|
887
|
+
/* harmony import */ var _x_js__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./x.js */ "./node_modules/d3-quadtree/src/x.js");
|
|
888
|
+
/* harmony import */ var _y_js__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./y.js */ "./node_modules/d3-quadtree/src/y.js");
|
|
889
|
+
|
|
890
|
+
|
|
891
|
+
|
|
892
|
+
|
|
893
|
+
|
|
894
|
+
|
|
895
|
+
|
|
896
|
+
|
|
897
|
+
|
|
898
|
+
|
|
899
|
+
|
|
900
|
+
|
|
901
|
+
|
|
902
|
+
function quadtree(nodes, x, y) {
|
|
903
|
+
var tree = new Quadtree(x == null ? _x_js__WEBPACK_IMPORTED_MODULE_10__.defaultX : x, y == null ? _y_js__WEBPACK_IMPORTED_MODULE_11__.defaultY : y, NaN, NaN, NaN, NaN);
|
|
904
|
+
return nodes == null ? tree : tree.addAll(nodes);
|
|
905
|
+
}
|
|
906
|
+
|
|
907
|
+
function Quadtree(x, y, x0, y0, x1, y1) {
|
|
908
|
+
this._x = x;
|
|
909
|
+
this._y = y;
|
|
910
|
+
this._x0 = x0;
|
|
911
|
+
this._y0 = y0;
|
|
912
|
+
this._x1 = x1;
|
|
913
|
+
this._y1 = y1;
|
|
914
|
+
this._root = undefined;
|
|
915
|
+
}
|
|
916
|
+
|
|
917
|
+
function leaf_copy(leaf) {
|
|
918
|
+
var copy = {data: leaf.data}, next = copy;
|
|
919
|
+
while (leaf = leaf.next) next = next.next = {data: leaf.data};
|
|
920
|
+
return copy;
|
|
921
|
+
}
|
|
922
|
+
|
|
923
|
+
var treeProto = quadtree.prototype = Quadtree.prototype;
|
|
924
|
+
|
|
925
|
+
treeProto.copy = function() {
|
|
926
|
+
var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),
|
|
927
|
+
node = this._root,
|
|
928
|
+
nodes,
|
|
929
|
+
child;
|
|
930
|
+
|
|
931
|
+
if (!node) return copy;
|
|
932
|
+
|
|
933
|
+
if (!node.length) return copy._root = leaf_copy(node), copy;
|
|
934
|
+
|
|
935
|
+
nodes = [{source: node, target: copy._root = new Array(4)}];
|
|
936
|
+
while (node = nodes.pop()) {
|
|
937
|
+
for (var i = 0; i < 4; ++i) {
|
|
938
|
+
if (child = node.source[i]) {
|
|
939
|
+
if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});
|
|
940
|
+
else node.target[i] = leaf_copy(child);
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
}
|
|
944
|
+
|
|
945
|
+
return copy;
|
|
946
|
+
};
|
|
947
|
+
|
|
948
|
+
treeProto.add = _add_js__WEBPACK_IMPORTED_MODULE_0__["default"];
|
|
949
|
+
treeProto.addAll = _add_js__WEBPACK_IMPORTED_MODULE_0__.addAll;
|
|
950
|
+
treeProto.cover = _cover_js__WEBPACK_IMPORTED_MODULE_1__["default"];
|
|
951
|
+
treeProto.data = _data_js__WEBPACK_IMPORTED_MODULE_2__["default"];
|
|
952
|
+
treeProto.extent = _extent_js__WEBPACK_IMPORTED_MODULE_3__["default"];
|
|
953
|
+
treeProto.find = _find_js__WEBPACK_IMPORTED_MODULE_4__["default"];
|
|
954
|
+
treeProto.remove = _remove_js__WEBPACK_IMPORTED_MODULE_5__["default"];
|
|
955
|
+
treeProto.removeAll = _remove_js__WEBPACK_IMPORTED_MODULE_5__.removeAll;
|
|
956
|
+
treeProto.root = _root_js__WEBPACK_IMPORTED_MODULE_6__["default"];
|
|
957
|
+
treeProto.size = _size_js__WEBPACK_IMPORTED_MODULE_7__["default"];
|
|
958
|
+
treeProto.visit = _visit_js__WEBPACK_IMPORTED_MODULE_8__["default"];
|
|
959
|
+
treeProto.visitAfter = _visitAfter_js__WEBPACK_IMPORTED_MODULE_9__["default"];
|
|
960
|
+
treeProto.x = _x_js__WEBPACK_IMPORTED_MODULE_10__["default"];
|
|
961
|
+
treeProto.y = _y_js__WEBPACK_IMPORTED_MODULE_11__["default"];
|
|
962
|
+
|
|
963
|
+
|
|
964
|
+
/***/ },
|
|
965
|
+
|
|
966
|
+
/***/ "./node_modules/d3-quadtree/src/remove.js"
|
|
967
|
+
/*!************************************************!*\
|
|
968
|
+
!*** ./node_modules/d3-quadtree/src/remove.js ***!
|
|
969
|
+
\************************************************/
|
|
970
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
971
|
+
|
|
972
|
+
__webpack_require__.r(__webpack_exports__);
|
|
973
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
974
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),
|
|
975
|
+
/* harmony export */ removeAll: () => (/* binding */ removeAll)
|
|
976
|
+
/* harmony export */ });
|
|
977
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(d) {
|
|
978
|
+
if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points
|
|
979
|
+
|
|
980
|
+
var parent,
|
|
981
|
+
node = this._root,
|
|
982
|
+
retainer,
|
|
983
|
+
previous,
|
|
984
|
+
next,
|
|
985
|
+
x0 = this._x0,
|
|
986
|
+
y0 = this._y0,
|
|
987
|
+
x1 = this._x1,
|
|
988
|
+
y1 = this._y1,
|
|
989
|
+
x,
|
|
990
|
+
y,
|
|
991
|
+
xm,
|
|
992
|
+
ym,
|
|
993
|
+
right,
|
|
994
|
+
bottom,
|
|
995
|
+
i,
|
|
996
|
+
j;
|
|
997
|
+
|
|
998
|
+
// If the tree is empty, initialize the root as a leaf.
|
|
999
|
+
if (!node) return this;
|
|
1000
|
+
|
|
1001
|
+
// Find the leaf node for the point.
|
|
1002
|
+
// While descending, also retain the deepest parent with a non-removed sibling.
|
|
1003
|
+
if (node.length) while (true) {
|
|
1004
|
+
if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;
|
|
1005
|
+
if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;
|
|
1006
|
+
if (!(parent = node, node = node[i = bottom << 1 | right])) return this;
|
|
1007
|
+
if (!node.length) break;
|
|
1008
|
+
if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;
|
|
1009
|
+
}
|
|
1010
|
+
|
|
1011
|
+
// Find the point to remove.
|
|
1012
|
+
while (node.data !== d) if (!(previous = node, node = node.next)) return this;
|
|
1013
|
+
if (next = node.next) delete node.next;
|
|
1014
|
+
|
|
1015
|
+
// If there are multiple coincident points, remove just the point.
|
|
1016
|
+
if (previous) return (next ? previous.next = next : delete previous.next), this;
|
|
1017
|
+
|
|
1018
|
+
// If this is the root point, remove it.
|
|
1019
|
+
if (!parent) return this._root = next, this;
|
|
1020
|
+
|
|
1021
|
+
// Remove this leaf.
|
|
1022
|
+
next ? parent[i] = next : delete parent[i];
|
|
1023
|
+
|
|
1024
|
+
// If the parent now contains exactly one leaf, collapse superfluous parents.
|
|
1025
|
+
if ((node = parent[0] || parent[1] || parent[2] || parent[3])
|
|
1026
|
+
&& node === (parent[3] || parent[2] || parent[1] || parent[0])
|
|
1027
|
+
&& !node.length) {
|
|
1028
|
+
if (retainer) retainer[j] = node;
|
|
1029
|
+
else this._root = node;
|
|
1030
|
+
}
|
|
1031
|
+
|
|
1032
|
+
return this;
|
|
1033
|
+
}
|
|
1034
|
+
|
|
1035
|
+
function removeAll(data) {
|
|
1036
|
+
for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);
|
|
1037
|
+
return this;
|
|
1038
|
+
}
|
|
1039
|
+
|
|
1040
|
+
|
|
1041
|
+
/***/ },
|
|
1042
|
+
|
|
1043
|
+
/***/ "./node_modules/d3-quadtree/src/root.js"
|
|
1044
|
+
/*!**********************************************!*\
|
|
1045
|
+
!*** ./node_modules/d3-quadtree/src/root.js ***!
|
|
1046
|
+
\**********************************************/
|
|
1047
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1048
|
+
|
|
1049
|
+
__webpack_require__.r(__webpack_exports__);
|
|
1050
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1051
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
|
|
1052
|
+
/* harmony export */ });
|
|
1053
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {
|
|
1054
|
+
return this._root;
|
|
1055
|
+
}
|
|
1056
|
+
|
|
1057
|
+
|
|
1058
|
+
/***/ },
|
|
1059
|
+
|
|
1060
|
+
/***/ "./node_modules/d3-quadtree/src/size.js"
|
|
1061
|
+
/*!**********************************************!*\
|
|
1062
|
+
!*** ./node_modules/d3-quadtree/src/size.js ***!
|
|
1063
|
+
\**********************************************/
|
|
1064
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1065
|
+
|
|
1066
|
+
__webpack_require__.r(__webpack_exports__);
|
|
1067
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1068
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
|
|
1069
|
+
/* harmony export */ });
|
|
1070
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__() {
|
|
1071
|
+
var size = 0;
|
|
1072
|
+
this.visit(function(node) {
|
|
1073
|
+
if (!node.length) do ++size; while (node = node.next)
|
|
1074
|
+
});
|
|
1075
|
+
return size;
|
|
1076
|
+
}
|
|
1077
|
+
|
|
1078
|
+
|
|
1079
|
+
/***/ },
|
|
1080
|
+
|
|
1081
|
+
/***/ "./node_modules/d3-quadtree/src/visit.js"
|
|
1082
|
+
/*!***********************************************!*\
|
|
1083
|
+
!*** ./node_modules/d3-quadtree/src/visit.js ***!
|
|
1084
|
+
\***********************************************/
|
|
1085
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1086
|
+
|
|
1087
|
+
__webpack_require__.r(__webpack_exports__);
|
|
1088
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1089
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
|
|
1090
|
+
/* harmony export */ });
|
|
1091
|
+
/* harmony import */ var _quad_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quad.js */ "./node_modules/d3-quadtree/src/quad.js");
|
|
1092
|
+
|
|
1093
|
+
|
|
1094
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback) {
|
|
1095
|
+
var quads = [], q, node = this._root, child, x0, y0, x1, y1;
|
|
1096
|
+
if (node) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](node, this._x0, this._y0, this._x1, this._y1));
|
|
1097
|
+
while (q = quads.pop()) {
|
|
1098
|
+
if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {
|
|
1099
|
+
var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
|
|
1100
|
+
if (child = node[3]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](child, xm, ym, x1, y1));
|
|
1101
|
+
if (child = node[2]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](child, x0, ym, xm, y1));
|
|
1102
|
+
if (child = node[1]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](child, xm, y0, x1, ym));
|
|
1103
|
+
if (child = node[0]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](child, x0, y0, xm, ym));
|
|
1104
|
+
}
|
|
1105
|
+
}
|
|
1106
|
+
return this;
|
|
1107
|
+
}
|
|
1108
|
+
|
|
1109
|
+
|
|
1110
|
+
/***/ },
|
|
1111
|
+
|
|
1112
|
+
/***/ "./node_modules/d3-quadtree/src/visitAfter.js"
|
|
1113
|
+
/*!****************************************************!*\
|
|
1114
|
+
!*** ./node_modules/d3-quadtree/src/visitAfter.js ***!
|
|
1115
|
+
\****************************************************/
|
|
1116
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1117
|
+
|
|
1118
|
+
__webpack_require__.r(__webpack_exports__);
|
|
1119
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1120
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__)
|
|
1121
|
+
/* harmony export */ });
|
|
1122
|
+
/* harmony import */ var _quad_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./quad.js */ "./node_modules/d3-quadtree/src/quad.js");
|
|
1123
|
+
|
|
1124
|
+
|
|
1125
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(callback) {
|
|
1126
|
+
var quads = [], next = [], q;
|
|
1127
|
+
if (this._root) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](this._root, this._x0, this._y0, this._x1, this._y1));
|
|
1128
|
+
while (q = quads.pop()) {
|
|
1129
|
+
var node = q.node;
|
|
1130
|
+
if (node.length) {
|
|
1131
|
+
var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;
|
|
1132
|
+
if (child = node[0]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](child, x0, y0, xm, ym));
|
|
1133
|
+
if (child = node[1]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](child, xm, y0, x1, ym));
|
|
1134
|
+
if (child = node[2]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](child, x0, ym, xm, y1));
|
|
1135
|
+
if (child = node[3]) quads.push(new _quad_js__WEBPACK_IMPORTED_MODULE_0__["default"](child, xm, ym, x1, y1));
|
|
1136
|
+
}
|
|
1137
|
+
next.push(q);
|
|
1138
|
+
}
|
|
1139
|
+
while (q = next.pop()) {
|
|
1140
|
+
callback(q.node, q.x0, q.y0, q.x1, q.y1);
|
|
1141
|
+
}
|
|
1142
|
+
return this;
|
|
1143
|
+
}
|
|
1144
|
+
|
|
1145
|
+
|
|
1146
|
+
/***/ },
|
|
1147
|
+
|
|
1148
|
+
/***/ "./node_modules/d3-quadtree/src/x.js"
|
|
1149
|
+
/*!*******************************************!*\
|
|
1150
|
+
!*** ./node_modules/d3-quadtree/src/x.js ***!
|
|
1151
|
+
\*******************************************/
|
|
1152
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1153
|
+
|
|
1154
|
+
__webpack_require__.r(__webpack_exports__);
|
|
1155
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1156
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),
|
|
1157
|
+
/* harmony export */ defaultX: () => (/* binding */ defaultX)
|
|
1158
|
+
/* harmony export */ });
|
|
1159
|
+
function defaultX(d) {
|
|
1160
|
+
return d[0];
|
|
1161
|
+
}
|
|
1162
|
+
|
|
1163
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(_) {
|
|
1164
|
+
return arguments.length ? (this._x = _, this) : this._x;
|
|
1165
|
+
}
|
|
1166
|
+
|
|
1167
|
+
|
|
1168
|
+
/***/ },
|
|
1169
|
+
|
|
1170
|
+
/***/ "./node_modules/d3-quadtree/src/y.js"
|
|
1171
|
+
/*!*******************************************!*\
|
|
1172
|
+
!*** ./node_modules/d3-quadtree/src/y.js ***!
|
|
1173
|
+
\*******************************************/
|
|
1174
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1175
|
+
|
|
1176
|
+
__webpack_require__.r(__webpack_exports__);
|
|
1177
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1178
|
+
/* harmony export */ "default": () => (/* export default binding */ __WEBPACK_DEFAULT_EXPORT__),
|
|
1179
|
+
/* harmony export */ defaultY: () => (/* binding */ defaultY)
|
|
1180
|
+
/* harmony export */ });
|
|
1181
|
+
function defaultY(d) {
|
|
1182
|
+
return d[1];
|
|
1183
|
+
}
|
|
1184
|
+
|
|
1185
|
+
/* harmony default export */ function __WEBPACK_DEFAULT_EXPORT__(_) {
|
|
1186
|
+
return arguments.length ? (this._y = _, this) : this._y;
|
|
1187
|
+
}
|
|
1188
|
+
|
|
1189
|
+
|
|
1190
|
+
/***/ },
|
|
1191
|
+
|
|
1192
|
+
/***/ "./node_modules/d3-timer/src/timer.js"
|
|
1193
|
+
/*!********************************************!*\
|
|
1194
|
+
!*** ./node_modules/d3-timer/src/timer.js ***!
|
|
1195
|
+
\********************************************/
|
|
1196
|
+
(__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
1197
|
+
|
|
1198
|
+
__webpack_require__.r(__webpack_exports__);
|
|
1199
|
+
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
|
|
1200
|
+
/* harmony export */ Timer: () => (/* binding */ Timer),
|
|
1201
|
+
/* harmony export */ now: () => (/* binding */ now),
|
|
1202
|
+
/* harmony export */ timer: () => (/* binding */ timer),
|
|
1203
|
+
/* harmony export */ timerFlush: () => (/* binding */ timerFlush)
|
|
1204
|
+
/* harmony export */ });
|
|
1205
|
+
var frame = 0, // is an animation frame pending?
|
|
1206
|
+
timeout = 0, // is a timeout pending?
|
|
1207
|
+
interval = 0, // are any timers active?
|
|
1208
|
+
pokeDelay = 1000, // how frequently we check for clock skew
|
|
1209
|
+
taskHead,
|
|
1210
|
+
taskTail,
|
|
1211
|
+
clockLast = 0,
|
|
1212
|
+
clockNow = 0,
|
|
1213
|
+
clockSkew = 0,
|
|
1214
|
+
clock = typeof performance === "object" && performance.now ? performance : Date,
|
|
1215
|
+
setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };
|
|
1216
|
+
|
|
1217
|
+
function now() {
|
|
1218
|
+
return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
|
|
1219
|
+
}
|
|
1220
|
+
|
|
1221
|
+
function clearNow() {
|
|
1222
|
+
clockNow = 0;
|
|
1223
|
+
}
|
|
1224
|
+
|
|
1225
|
+
function Timer() {
|
|
1226
|
+
this._call =
|
|
1227
|
+
this._time =
|
|
1228
|
+
this._next = null;
|
|
1229
|
+
}
|
|
1230
|
+
|
|
1231
|
+
Timer.prototype = timer.prototype = {
|
|
1232
|
+
constructor: Timer,
|
|
1233
|
+
restart: function(callback, delay, time) {
|
|
1234
|
+
if (typeof callback !== "function") throw new TypeError("callback is not a function");
|
|
1235
|
+
time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
|
|
1236
|
+
if (!this._next && taskTail !== this) {
|
|
1237
|
+
if (taskTail) taskTail._next = this;
|
|
1238
|
+
else taskHead = this;
|
|
1239
|
+
taskTail = this;
|
|
1240
|
+
}
|
|
1241
|
+
this._call = callback;
|
|
1242
|
+
this._time = time;
|
|
1243
|
+
sleep();
|
|
1244
|
+
},
|
|
1245
|
+
stop: function() {
|
|
1246
|
+
if (this._call) {
|
|
1247
|
+
this._call = null;
|
|
1248
|
+
this._time = Infinity;
|
|
1249
|
+
sleep();
|
|
1250
|
+
}
|
|
1251
|
+
}
|
|
1252
|
+
};
|
|
1253
|
+
|
|
1254
|
+
function timer(callback, delay, time) {
|
|
1255
|
+
var t = new Timer;
|
|
1256
|
+
t.restart(callback, delay, time);
|
|
1257
|
+
return t;
|
|
1258
|
+
}
|
|
1259
|
+
|
|
1260
|
+
function timerFlush() {
|
|
1261
|
+
now(); // Get the current time, if not already set.
|
|
1262
|
+
++frame; // Pretend we’ve set an alarm, if we haven’t already.
|
|
1263
|
+
var t = taskHead, e;
|
|
1264
|
+
while (t) {
|
|
1265
|
+
if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);
|
|
1266
|
+
t = t._next;
|
|
1267
|
+
}
|
|
1268
|
+
--frame;
|
|
1269
|
+
}
|
|
1270
|
+
|
|
1271
|
+
function wake() {
|
|
1272
|
+
clockNow = (clockLast = clock.now()) + clockSkew;
|
|
1273
|
+
frame = timeout = 0;
|
|
1274
|
+
try {
|
|
1275
|
+
timerFlush();
|
|
1276
|
+
} finally {
|
|
1277
|
+
frame = 0;
|
|
1278
|
+
nap();
|
|
1279
|
+
clockNow = 0;
|
|
1280
|
+
}
|
|
1281
|
+
}
|
|
1282
|
+
|
|
1283
|
+
function poke() {
|
|
1284
|
+
var now = clock.now(), delay = now - clockLast;
|
|
1285
|
+
if (delay > pokeDelay) clockSkew -= delay, clockLast = now;
|
|
1286
|
+
}
|
|
1287
|
+
|
|
1288
|
+
function nap() {
|
|
1289
|
+
var t0, t1 = taskHead, t2, time = Infinity;
|
|
1290
|
+
while (t1) {
|
|
1291
|
+
if (t1._call) {
|
|
1292
|
+
if (time > t1._time) time = t1._time;
|
|
1293
|
+
t0 = t1, t1 = t1._next;
|
|
1294
|
+
} else {
|
|
1295
|
+
t2 = t1._next, t1._next = null;
|
|
1296
|
+
t1 = t0 ? t0._next = t2 : taskHead = t2;
|
|
1297
|
+
}
|
|
1298
|
+
}
|
|
1299
|
+
taskTail = t0;
|
|
1300
|
+
sleep(time);
|
|
1301
|
+
}
|
|
1302
|
+
|
|
1303
|
+
function sleep(time) {
|
|
1304
|
+
if (frame) return; // Soonest alarm already set, or will be.
|
|
1305
|
+
if (timeout) timeout = clearTimeout(timeout);
|
|
1306
|
+
var delay = time - clockNow; // Strictly less than if we recomputed clockNow.
|
|
1307
|
+
if (delay > 24) {
|
|
1308
|
+
if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);
|
|
1309
|
+
if (interval) interval = clearInterval(interval);
|
|
1310
|
+
} else {
|
|
1311
|
+
if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);
|
|
1312
|
+
frame = 1, setFrame(wake);
|
|
1313
|
+
}
|
|
1314
|
+
}
|
|
1315
|
+
|
|
1316
|
+
|
|
1317
|
+
/***/ }
|
|
1318
|
+
|
|
1319
|
+
}]);
|
|
1320
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVuZG9ycy1ub2RlX21vZHVsZXNfZDMtZm9yY2Vfc3JjX2NvbGxpZGVfanMtbm9kZV9tb2R1bGVzX2QzLWZvcmNlX3NyY19zaW11bGF0aW9uX2pzLW5vZGVfbW9kLTJhNWM0Mi5ldXJvc3RhdG1hcC5qcyIsIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBQUEsWUFBWTs7QUFFWjtBQUNBLDhDQUE4QyxLQUFLLE9BQU87QUFDMUQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFlBQVk7QUFDWixHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsaUJBQWlCO0FBQ2pCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxtRkFBbUYsT0FBTztBQUMxRjtBQUNBLGdEQUFnRCxPQUFPO0FBQ3ZELEdBQUc7QUFDSDtBQUNBO0FBQ0Esb0RBQW9ELE9BQU87QUFDM0Q7QUFDQTs7QUFFQTtBQUNBLHNDQUFzQyxPQUFPO0FBQzdDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxtQ0FBbUMsT0FBTztBQUMxQztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUNBQW1DLDRCQUE0QjtBQUMvRDtBQUNBOztBQUVBLGlFQUFlLFFBQVEsRUFBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkZhO0FBQ0E7QUFDSjs7QUFFakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSw2QkFBZSxvQ0FBUztBQUN4QjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLDZDQUE2Qyx3REFBUTs7QUFFckQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxvQkFBb0IsZ0JBQWdCO0FBQ3BDLGFBQWEsdURB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QUFFQTtBQUNBLHFCQUFxQjtBQUNyQjtBQUNBLCtCQUErQjtBQUMvQjtBQUNBO0FBQ0E7QUFDQSxJQUFJO0FBQ0o7QUFDQTtBQUNBO0FBQ0EiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9ldXJvc3RhdG1hcC8uL25vZGVfbW9kdWxlcy9kMy1kaXNwYXRjaC9zcmMvZGlzcGF0Y2guanMiLCJ3ZWJwYWNrOi8vZXVyb3N0YXRtYXAvLi9ub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL2NvbGxpZGUuanMiLCJ3ZWJwYWNrOi8vZXVyb3N0YXRtYXAvLi9ub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL2NvbnN0YW50LmpzIiwid2VicGFjazovL2V1cm9zdGF0bWFwLy4vbm9kZV9tb2R1bGVzL2QzLWZvcmNlL3NyYy9qaWdnbGUuanMiLCJ3ZWJwYWNrOi8vZXVyb3N0YXRtYXAvLi9ub2RlX21vZHVsZXMvZDMtZm9yY2Uvc3JjL2xjZy5qcyIsIndlYnBhY2s6Ly9ldXJvc3RhdG1hcC8uL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMvc2ltdWxhdGlvbi5qcyIsIndlYnBhY2s6Ly9ldXJvc3RhdG1hcC8uL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMveC5qcyIsIndlYnBhY2s6Ly9ldXJvc3RhdG1hcC8uL25vZGVfbW9kdWxlcy9kMy1mb3JjZS9zcmMveS5qcyIsIndlYnBhY2s6Ly9ldXJvc3RhdG1hcC8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvYWRkLmpzIiwid2VicGFjazovL2V1cm9zdGF0bWFwLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9jb3Zlci5qcyIsIndlYnBhY2s6Ly9ldXJvc3RhdG1hcC8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvZGF0YS5qcyIsIndlYnBhY2s6Ly9ldXJvc3RhdG1hcC8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvZXh0ZW50LmpzIiwid2VicGFjazovL2V1cm9zdGF0bWFwLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9maW5kLmpzIiwid2VicGFjazovL2V1cm9zdGF0bWFwLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9xdWFkLmpzIiwid2VicGFjazovL2V1cm9zdGF0bWFwLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9xdWFkdHJlZS5qcyIsIndlYnBhY2s6Ly9ldXJvc3RhdG1hcC8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvcmVtb3ZlLmpzIiwid2VicGFjazovL2V1cm9zdGF0bWFwLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9yb290LmpzIiwid2VicGFjazovL2V1cm9zdGF0bWFwLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy9zaXplLmpzIiwid2VicGFjazovL2V1cm9zdGF0bWFwLy4vbm9kZV9tb2R1bGVzL2QzLXF1YWR0cmVlL3NyYy92aXNpdC5qcyIsIndlYnBhY2s6Ly9ldXJvc3RhdG1hcC8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMvdmlzaXRBZnRlci5qcyIsIndlYnBhY2s6Ly9ldXJvc3RhdG1hcC8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMveC5qcyIsIndlYnBhY2s6Ly9ldXJvc3RhdG1hcC8uL25vZGVfbW9kdWxlcy9kMy1xdWFkdHJlZS9zcmMveS5qcyIsIndlYnBhY2s6Ly9ldXJvc3RhdG1hcC8uL25vZGVfbW9kdWxlcy9kMy10aW1lci9zcmMvdGltZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIG5vb3AgPSB7dmFsdWU6ICgpID0+IHt9fTtcblxuZnVuY3Rpb24gZGlzcGF0Y2goKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gYXJndW1lbnRzLmxlbmd0aCwgXyA9IHt9LCB0OyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKCEodCA9IGFyZ3VtZW50c1tpXSArIFwiXCIpIHx8ICh0IGluIF8pIHx8IC9bXFxzLl0vLnRlc3QodCkpIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgdHlwZTogXCIgKyB0KTtcbiAgICBfW3RdID0gW107XG4gIH1cbiAgcmV0dXJuIG5ldyBEaXNwYXRjaChfKTtcbn1cblxuZnVuY3Rpb24gRGlzcGF0Y2goXykge1xuICB0aGlzLl8gPSBfO1xufVxuXG5mdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMsIHR5cGVzKSB7XG4gIHJldHVybiB0eXBlbmFtZXMudHJpbSgpLnNwbGl0KC9efFxccysvKS5tYXAoZnVuY3Rpb24odCkge1xuICAgIHZhciBuYW1lID0gXCJcIiwgaSA9IHQuaW5kZXhPZihcIi5cIik7XG4gICAgaWYgKGkgPj0gMCkgbmFtZSA9IHQuc2xpY2UoaSArIDEpLCB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICBpZiAodCAmJiAhdHlwZXMuaGFzT3duUHJvcGVydHkodCkpIHRocm93IG5ldyBFcnJvcihcInVua25vd24gdHlwZTogXCIgKyB0KTtcbiAgICByZXR1cm4ge3R5cGU6IHQsIG5hbWU6IG5hbWV9O1xuICB9KTtcbn1cblxuRGlzcGF0Y2gucHJvdG90eXBlID0gZGlzcGF0Y2gucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogRGlzcGF0Y2gsXG4gIG9uOiBmdW5jdGlvbih0eXBlbmFtZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgXyA9IHRoaXMuXyxcbiAgICAgICAgVCA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiwgXyksXG4gICAgICAgIHQsXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IFQubGVuZ3RoO1xuXG4gICAgLy8gSWYgbm8gY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmV0dXJuIHRoZSBjYWxsYmFjayBvZiB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSAmJiAodCA9IGdldChfW3RdLCB0eXBlbmFtZS5uYW1lKSkpIHJldHVybiB0O1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIElmIGEgdHlwZSB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGNhbGxiYWNrIGZvciB0aGUgZ2l2ZW4gdHlwZSBhbmQgbmFtZS5cbiAgICAvLyBPdGhlcndpc2UsIGlmIGEgbnVsbCBjYWxsYmFjayB3YXMgc3BlY2lmaWVkLCByZW1vdmUgY2FsbGJhY2tzIG9mIHRoZSBnaXZlbiBuYW1lLlxuICAgIGlmIChjYWxsYmFjayAhPSBudWxsICYmIHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNhbGxiYWNrOiBcIiArIGNhbGxiYWNrKTtcbiAgICB3aGlsZSAoKytpIDwgbikge1xuICAgICAgaWYgKHQgPSAodHlwZW5hbWUgPSBUW2ldKS50eXBlKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIGNhbGxiYWNrKTtcbiAgICAgIGVsc2UgaWYgKGNhbGxiYWNrID09IG51bGwpIGZvciAodCBpbiBfKSBfW3RdID0gc2V0KF9bdF0sIHR5cGVuYW1lLm5hbWUsIG51bGwpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9LFxuICBjb3B5OiBmdW5jdGlvbigpIHtcbiAgICB2YXIgY29weSA9IHt9LCBfID0gdGhpcy5fO1xuICAgIGZvciAodmFyIHQgaW4gXykgY29weVt0XSA9IF9bdF0uc2xpY2UoKTtcbiAgICByZXR1cm4gbmV3IERpc3BhdGNoKGNvcHkpO1xuICB9LFxuICBjYWxsOiBmdW5jdGlvbih0eXBlLCB0aGF0KSB7XG4gICAgaWYgKChuID0gYXJndW1lbnRzLmxlbmd0aCAtIDIpID4gMCkgZm9yICh2YXIgYXJncyA9IG5ldyBBcnJheShuKSwgaSA9IDAsIG4sIHQ7IGkgPCBuOyArK2kpIGFyZ3NbaV0gPSBhcmd1bWVudHNbaSArIDJdO1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh0ID0gdGhpcy5fW3R5cGVdLCBpID0gMCwgbiA9IHQubGVuZ3RoOyBpIDwgbjsgKytpKSB0W2ldLnZhbHVlLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9LFxuICBhcHBseTogZnVuY3Rpb24odHlwZSwgdGhhdCwgYXJncykge1xuICAgIGlmICghdGhpcy5fLmhhc093blByb3BlcnR5KHR5cGUpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdHlwZSk7XG4gICAgZm9yICh2YXIgdCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0KHR5cGUsIG5hbWUpIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aCwgYzsgaSA8IG47ICsraSkge1xuICAgIGlmICgoYyA9IHR5cGVbaV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHJldHVybiBjLnZhbHVlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzZXQodHlwZSwgbmFtZSwgY2FsbGJhY2spIHtcbiAgZm9yICh2YXIgaSA9IDAsIG4gPSB0eXBlLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIGlmICh0eXBlW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgIHR5cGVbaV0gPSBub29wLCB0eXBlID0gdHlwZS5zbGljZSgwLCBpKS5jb25jYXQodHlwZS5zbGljZShpICsgMSkpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIGlmIChjYWxsYmFjayAhPSBudWxsKSB0eXBlLnB1c2goe25hbWU6IG5hbWUsIHZhbHVlOiBjYWxsYmFja30pO1xuICByZXR1cm4gdHlwZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZGlzcGF0Y2g7XG4iLCJpbXBvcnQge3F1YWR0cmVlfSBmcm9tIFwiZDMtcXVhZHRyZWVcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IGppZ2dsZSBmcm9tIFwiLi9qaWdnbGUuanNcIjtcblxuZnVuY3Rpb24geChkKSB7XG4gIHJldHVybiBkLnggKyBkLnZ4O1xufVxuXG5mdW5jdGlvbiB5KGQpIHtcbiAgcmV0dXJuIGQueSArIGQudnk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHJhZGl1cykge1xuICB2YXIgbm9kZXMsXG4gICAgICByYWRpaSxcbiAgICAgIHJhbmRvbSxcbiAgICAgIHN0cmVuZ3RoID0gMSxcbiAgICAgIGl0ZXJhdGlvbnMgPSAxO1xuXG4gIGlmICh0eXBlb2YgcmFkaXVzICE9PSBcImZ1bmN0aW9uXCIpIHJhZGl1cyA9IGNvbnN0YW50KHJhZGl1cyA9PSBudWxsID8gMSA6ICtyYWRpdXMpO1xuXG4gIGZ1bmN0aW9uIGZvcmNlKCkge1xuICAgIHZhciBpLCBuID0gbm9kZXMubGVuZ3RoLFxuICAgICAgICB0cmVlLFxuICAgICAgICBub2RlLFxuICAgICAgICB4aSxcbiAgICAgICAgeWksXG4gICAgICAgIHJpLFxuICAgICAgICByaTI7XG5cbiAgICBmb3IgKHZhciBrID0gMDsgayA8IGl0ZXJhdGlvbnM7ICsraykge1xuICAgICAgdHJlZSA9IHF1YWR0cmVlKG5vZGVzLCB4LCB5KS52aXNpdEFmdGVyKHByZXBhcmUpO1xuICAgICAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgICBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIHJpID0gcmFkaWlbbm9kZS5pbmRleF0sIHJpMiA9IHJpICogcmk7XG4gICAgICAgIHhpID0gbm9kZS54ICsgbm9kZS52eDtcbiAgICAgICAgeWkgPSBub2RlLnkgKyBub2RlLnZ5O1xuICAgICAgICB0cmVlLnZpc2l0KGFwcGx5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcHBseShxdWFkLCB4MCwgeTAsIHgxLCB5MSkge1xuICAgICAgdmFyIGRhdGEgPSBxdWFkLmRhdGEsIHJqID0gcXVhZC5yLCByID0gcmkgKyByajtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhLmluZGV4ID4gbm9kZS5pbmRleCkge1xuICAgICAgICAgIHZhciB4ID0geGkgLSBkYXRhLnggLSBkYXRhLnZ4LFxuICAgICAgICAgICAgICB5ID0geWkgLSBkYXRhLnkgLSBkYXRhLnZ5LFxuICAgICAgICAgICAgICBsID0geCAqIHggKyB5ICogeTtcbiAgICAgICAgICBpZiAobCA8IHIgKiByKSB7XG4gICAgICAgICAgICBpZiAoeCA9PT0gMCkgeCA9IGppZ2dsZShyYW5kb20pLCBsICs9IHggKiB4O1xuICAgICAgICAgICAgaWYgKHkgPT09IDApIHkgPSBqaWdnbGUocmFuZG9tKSwgbCArPSB5ICogeTtcbiAgICAgICAgICAgIGwgPSAociAtIChsID0gTWF0aC5zcXJ0KGwpKSkgLyBsICogc3RyZW5ndGg7XG4gICAgICAgICAgICBub2RlLnZ4ICs9ICh4ICo9IGwpICogKHIgPSAocmogKj0gcmopIC8gKHJpMiArIHJqKSk7XG4gICAgICAgICAgICBub2RlLnZ5ICs9ICh5ICo9IGwpICogcjtcbiAgICAgICAgICAgIGRhdGEudnggLT0geCAqIChyID0gMSAtIHIpO1xuICAgICAgICAgICAgZGF0YS52eSAtPSB5ICogcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHgwID4geGkgKyByIHx8IHgxIDwgeGkgLSByIHx8IHkwID4geWkgKyByIHx8IHkxIDwgeWkgLSByO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHByZXBhcmUocXVhZCkge1xuICAgIGlmIChxdWFkLmRhdGEpIHJldHVybiBxdWFkLnIgPSByYWRpaVtxdWFkLmRhdGEuaW5kZXhdO1xuICAgIGZvciAodmFyIGkgPSBxdWFkLnIgPSAwOyBpIDwgNDsgKytpKSB7XG4gICAgICBpZiAocXVhZFtpXSAmJiBxdWFkW2ldLnIgPiBxdWFkLnIpIHtcbiAgICAgICAgcXVhZC5yID0gcXVhZFtpXS5yO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XG4gICAgaWYgKCFub2RlcykgcmV0dXJuO1xuICAgIHZhciBpLCBuID0gbm9kZXMubGVuZ3RoLCBub2RlO1xuICAgIHJhZGlpID0gbmV3IEFycmF5KG4pO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIG5vZGUgPSBub2Rlc1tpXSwgcmFkaWlbbm9kZS5pbmRleF0gPSArcmFkaXVzKG5vZGUsIGksIG5vZGVzKTtcbiAgfVxuXG4gIGZvcmNlLmluaXRpYWxpemUgPSBmdW5jdGlvbihfbm9kZXMsIF9yYW5kb20pIHtcbiAgICBub2RlcyA9IF9ub2RlcztcbiAgICByYW5kb20gPSBfcmFuZG9tO1xuICAgIGluaXRpYWxpemUoKTtcbiAgfTtcblxuICBmb3JjZS5pdGVyYXRpb25zID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGl0ZXJhdGlvbnMgPSArXywgZm9yY2UpIDogaXRlcmF0aW9ucztcbiAgfTtcblxuICBmb3JjZS5zdHJlbmd0aCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzdHJlbmd0aCA9ICtfLCBmb3JjZSkgOiBzdHJlbmd0aDtcbiAgfTtcblxuICBmb3JjZS5yYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemUoKSwgZm9yY2UpIDogcmFkaXVzO1xuICB9O1xuXG4gIHJldHVybiBmb3JjZTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ocmFuZG9tKSB7XG4gIHJldHVybiAocmFuZG9tKCkgLSAwLjUpICogMWUtNjtcbn1cbiIsIi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpbmVhcl9jb25ncnVlbnRpYWxfZ2VuZXJhdG9yI1BhcmFtZXRlcnNfaW5fY29tbW9uX3VzZVxuY29uc3QgYSA9IDE2NjQ1MjU7XG5jb25zdCBjID0gMTAxMzkwNDIyMztcbmNvbnN0IG0gPSA0Mjk0OTY3Mjk2OyAvLyAyXjMyXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICBsZXQgcyA9IDE7XG4gIHJldHVybiAoKSA9PiAocyA9IChhICogcyArIGMpICUgbSkgLyBtO1xufVxuIiwiaW1wb3J0IHtkaXNwYXRjaH0gZnJvbSBcImQzLWRpc3BhdGNoXCI7XG5pbXBvcnQge3RpbWVyfSBmcm9tIFwiZDMtdGltZXJcIjtcbmltcG9ydCBsY2cgZnJvbSBcIi4vbGNnLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiB4KGQpIHtcbiAgcmV0dXJuIGQueDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHkoZCkge1xuICByZXR1cm4gZC55O1xufVxuXG52YXIgaW5pdGlhbFJhZGl1cyA9IDEwLFxuICAgIGluaXRpYWxBbmdsZSA9IE1hdGguUEkgKiAoMyAtIE1hdGguc3FydCg1KSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGVzKSB7XG4gIHZhciBzaW11bGF0aW9uLFxuICAgICAgYWxwaGEgPSAxLFxuICAgICAgYWxwaGFNaW4gPSAwLjAwMSxcbiAgICAgIGFscGhhRGVjYXkgPSAxIC0gTWF0aC5wb3coYWxwaGFNaW4sIDEgLyAzMDApLFxuICAgICAgYWxwaGFUYXJnZXQgPSAwLFxuICAgICAgdmVsb2NpdHlEZWNheSA9IDAuNixcbiAgICAgIGZvcmNlcyA9IG5ldyBNYXAoKSxcbiAgICAgIHN0ZXBwZXIgPSB0aW1lcihzdGVwKSxcbiAgICAgIGV2ZW50ID0gZGlzcGF0Y2goXCJ0aWNrXCIsIFwiZW5kXCIpLFxuICAgICAgcmFuZG9tID0gbGNnKCk7XG5cbiAgaWYgKG5vZGVzID09IG51bGwpIG5vZGVzID0gW107XG5cbiAgZnVuY3Rpb24gc3RlcCgpIHtcbiAgICB0aWNrKCk7XG4gICAgZXZlbnQuY2FsbChcInRpY2tcIiwgc2ltdWxhdGlvbik7XG4gICAgaWYgKGFscGhhIDwgYWxwaGFNaW4pIHtcbiAgICAgIHN0ZXBwZXIuc3RvcCgpO1xuICAgICAgZXZlbnQuY2FsbChcImVuZFwiLCBzaW11bGF0aW9uKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrKGl0ZXJhdGlvbnMpIHtcbiAgICB2YXIgaSwgbiA9IG5vZGVzLmxlbmd0aCwgbm9kZTtcblxuICAgIGlmIChpdGVyYXRpb25zID09PSB1bmRlZmluZWQpIGl0ZXJhdGlvbnMgPSAxO1xuXG4gICAgZm9yICh2YXIgayA9IDA7IGsgPCBpdGVyYXRpb25zOyArK2spIHtcbiAgICAgIGFscGhhICs9IChhbHBoYVRhcmdldCAtIGFscGhhKSAqIGFscGhhRGVjYXk7XG5cbiAgICAgIGZvcmNlcy5mb3JFYWNoKGZ1bmN0aW9uKGZvcmNlKSB7XG4gICAgICAgIGZvcmNlKGFscGhhKTtcbiAgICAgIH0pO1xuXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIG5vZGUgPSBub2Rlc1tpXTtcbiAgICAgICAgaWYgKG5vZGUuZnggPT0gbnVsbCkgbm9kZS54ICs9IG5vZGUudnggKj0gdmVsb2NpdHlEZWNheTtcbiAgICAgICAgZWxzZSBub2RlLnggPSBub2RlLmZ4LCBub2RlLnZ4ID0gMDtcbiAgICAgICAgaWYgKG5vZGUuZnkgPT0gbnVsbCkgbm9kZS55ICs9IG5vZGUudnkgKj0gdmVsb2NpdHlEZWNheTtcbiAgICAgICAgZWxzZSBub2RlLnkgPSBub2RlLmZ5LCBub2RlLnZ5ID0gMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2ltdWxhdGlvbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemVOb2RlcygpIHtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IG5vZGVzLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgbm9kZSA9IG5vZGVzW2ldLCBub2RlLmluZGV4ID0gaTtcbiAgICAgIGlmIChub2RlLmZ4ICE9IG51bGwpIG5vZGUueCA9IG5vZGUuZng7XG4gICAgICBpZiAobm9kZS5meSAhPSBudWxsKSBub2RlLnkgPSBub2RlLmZ5O1xuICAgICAgaWYgKGlzTmFOKG5vZGUueCkgfHwgaXNOYU4obm9kZS55KSkge1xuICAgICAgICB2YXIgcmFkaXVzID0gaW5pdGlhbFJhZGl1cyAqIE1hdGguc3FydCgwLjUgKyBpKSwgYW5nbGUgPSBpICogaW5pdGlhbEFuZ2xlO1xuICAgICAgICBub2RlLnggPSByYWRpdXMgKiBNYXRoLmNvcyhhbmdsZSk7XG4gICAgICAgIG5vZGUueSA9IHJhZGl1cyAqIE1hdGguc2luKGFuZ2xlKTtcbiAgICAgIH1cbiAgICAgIGlmIChpc05hTihub2RlLnZ4KSB8fCBpc05hTihub2RlLnZ5KSkge1xuICAgICAgICBub2RlLnZ4ID0gbm9kZS52eSA9IDA7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZUZvcmNlKGZvcmNlKSB7XG4gICAgaWYgKGZvcmNlLmluaXRpYWxpemUpIGZvcmNlLmluaXRpYWxpemUobm9kZXMsIHJhbmRvbSk7XG4gICAgcmV0dXJuIGZvcmNlO1xuICB9XG5cbiAgaW5pdGlhbGl6ZU5vZGVzKCk7XG5cbiAgcmV0dXJuIHNpbXVsYXRpb24gPSB7XG4gICAgdGljazogdGljayxcblxuICAgIHJlc3RhcnQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHN0ZXBwZXIucmVzdGFydChzdGVwKSwgc2ltdWxhdGlvbjtcbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc3RlcHBlci5zdG9wKCksIHNpbXVsYXRpb247XG4gICAgfSxcblxuICAgIG5vZGVzOiBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChub2RlcyA9IF8sIGluaXRpYWxpemVOb2RlcygpLCBmb3JjZXMuZm9yRWFjaChpbml0aWFsaXplRm9yY2UpLCBzaW11bGF0aW9uKSA6IG5vZGVzO1xuICAgIH0sXG5cbiAgICBhbHBoYTogZnVuY3Rpb24oXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoYWxwaGEgPSArXywgc2ltdWxhdGlvbikgOiBhbHBoYTtcbiAgICB9LFxuXG4gICAgYWxwaGFNaW46IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFscGhhTWluID0gK18sIHNpbXVsYXRpb24pIDogYWxwaGFNaW47XG4gICAgfSxcblxuICAgIGFscGhhRGVjYXk6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFscGhhRGVjYXkgPSArXywgc2ltdWxhdGlvbikgOiArYWxwaGFEZWNheTtcbiAgICB9LFxuXG4gICAgYWxwaGFUYXJnZXQ6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGFscGhhVGFyZ2V0ID0gK18sIHNpbXVsYXRpb24pIDogYWxwaGFUYXJnZXQ7XG4gICAgfSxcblxuICAgIHZlbG9jaXR5RGVjYXk6IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHZlbG9jaXR5RGVjYXkgPSAxIC0gXywgc2ltdWxhdGlvbikgOiAxIC0gdmVsb2NpdHlEZWNheTtcbiAgICB9LFxuXG4gICAgcmFuZG9tU291cmNlOiBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5kb20gPSBfLCBmb3JjZXMuZm9yRWFjaChpbml0aWFsaXplRm9yY2UpLCBzaW11bGF0aW9uKSA6IHJhbmRvbTtcbiAgICB9LFxuXG4gICAgZm9yY2U6IGZ1bmN0aW9uKG5hbWUsIF8pIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMSA/ICgoXyA9PSBudWxsID8gZm9yY2VzLmRlbGV0ZShuYW1lKSA6IGZvcmNlcy5zZXQobmFtZSwgaW5pdGlhbGl6ZUZvcmNlKF8pKSksIHNpbXVsYXRpb24pIDogZm9yY2VzLmdldChuYW1lKTtcbiAgICB9LFxuXG4gICAgZmluZDogZnVuY3Rpb24oeCwgeSwgcmFkaXVzKSB7XG4gICAgICB2YXIgaSA9IDAsXG4gICAgICAgICAgbiA9IG5vZGVzLmxlbmd0aCxcbiAgICAgICAgICBkeCxcbiAgICAgICAgICBkeSxcbiAgICAgICAgICBkMixcbiAgICAgICAgICBub2RlLFxuICAgICAgICAgIGNsb3Nlc3Q7XG5cbiAgICAgIGlmIChyYWRpdXMgPT0gbnVsbCkgcmFkaXVzID0gSW5maW5pdHk7XG4gICAgICBlbHNlIHJhZGl1cyAqPSByYWRpdXM7XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgbm9kZSA9IG5vZGVzW2ldO1xuICAgICAgICBkeCA9IHggLSBub2RlLng7XG4gICAgICAgIGR5ID0geSAtIG5vZGUueTtcbiAgICAgICAgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeTtcbiAgICAgICAgaWYgKGQyIDwgcmFkaXVzKSBjbG9zZXN0ID0gbm9kZSwgcmFkaXVzID0gZDI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjbG9zZXN0O1xuICAgIH0sXG5cbiAgICBvbjogZnVuY3Rpb24obmFtZSwgXykge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gKGV2ZW50Lm9uKG5hbWUsIF8pLCBzaW11bGF0aW9uKSA6IGV2ZW50Lm9uKG5hbWUpO1xuICAgIH1cbiAgfTtcbn1cbiIsImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHZhciBzdHJlbmd0aCA9IGNvbnN0YW50KDAuMSksXG4gICAgICBub2RlcyxcbiAgICAgIHN0cmVuZ3RocyxcbiAgICAgIHh6O1xuXG4gIGlmICh0eXBlb2YgeCAhPT0gXCJmdW5jdGlvblwiKSB4ID0gY29uc3RhbnQoeCA9PSBudWxsID8gMCA6ICt4KTtcblxuICBmdW5jdGlvbiBmb3JjZShhbHBoYSkge1xuICAgIGZvciAodmFyIGkgPSAwLCBuID0gbm9kZXMubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XG4gICAgICBub2RlID0gbm9kZXNbaV0sIG5vZGUudnggKz0gKHh6W2ldIC0gbm9kZS54KSAqIHN0cmVuZ3Roc1tpXSAqIGFscGhhO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XG4gICAgaWYgKCFub2RlcykgcmV0dXJuO1xuICAgIHZhciBpLCBuID0gbm9kZXMubGVuZ3RoO1xuICAgIHN0cmVuZ3RocyA9IG5ldyBBcnJheShuKTtcbiAgICB4eiA9IG5ldyBBcnJheShuKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBzdHJlbmd0aHNbaV0gPSBpc05hTih4eltpXSA9ICt4KG5vZGVzW2ldLCBpLCBub2RlcykpID8gMCA6ICtzdHJlbmd0aChub2Rlc1tpXSwgaSwgbm9kZXMpO1xuICAgIH1cbiAgfVxuXG4gIGZvcmNlLmluaXRpYWxpemUgPSBmdW5jdGlvbihfKSB7XG4gICAgbm9kZXMgPSBfO1xuICAgIGluaXRpYWxpemUoKTtcbiAgfTtcblxuICBmb3JjZS5zdHJlbmd0aCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzdHJlbmd0aCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBpbml0aWFsaXplKCksIGZvcmNlKSA6IHN0cmVuZ3RoO1xuICB9O1xuXG4gIGZvcmNlLnggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBpbml0aWFsaXplKCksIGZvcmNlKSA6IHg7XG4gIH07XG5cbiAgcmV0dXJuIGZvcmNlO1xufVxuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHkpIHtcbiAgdmFyIHN0cmVuZ3RoID0gY29uc3RhbnQoMC4xKSxcbiAgICAgIG5vZGVzLFxuICAgICAgc3RyZW5ndGhzLFxuICAgICAgeXo7XG5cbiAgaWYgKHR5cGVvZiB5ICE9PSBcImZ1bmN0aW9uXCIpIHkgPSBjb25zdGFudCh5ID09IG51bGwgPyAwIDogK3kpO1xuXG4gIGZ1bmN0aW9uIGZvcmNlKGFscGhhKSB7XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSBub2Rlcy5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIG5vZGUgPSBub2Rlc1tpXSwgbm9kZS52eSArPSAoeXpbaV0gLSBub2RlLnkpICogc3RyZW5ndGhzW2ldICogYWxwaGE7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpIHtcbiAgICBpZiAoIW5vZGVzKSByZXR1cm47XG4gICAgdmFyIGksIG4gPSBub2Rlcy5sZW5ndGg7XG4gICAgc3RyZW5ndGhzID0gbmV3IEFycmF5KG4pO1xuICAgIHl6ID0gbmV3IEFycmF5KG4pO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHN0cmVuZ3Roc1tpXSA9IGlzTmFOKHl6W2ldID0gK3kobm9kZXNbaV0sIGksIG5vZGVzKSkgPyAwIDogK3N0cmVuZ3RoKG5vZGVzW2ldLCBpLCBub2Rlcyk7XG4gICAgfVxuICB9XG5cbiAgZm9yY2UuaW5pdGlhbGl6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICBub2RlcyA9IF87XG4gICAgaW5pdGlhbGl6ZSgpO1xuICB9O1xuXG4gIGZvcmNlLnN0cmVuZ3RoID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0cmVuZ3RoID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemUoKSwgZm9yY2UpIDogc3RyZW5ndGg7XG4gIH07XG5cbiAgZm9yY2UueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGluaXRpYWxpemUoKSwgZm9yY2UpIDogeTtcbiAgfTtcblxuICByZXR1cm4gZm9yY2U7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkKSB7XG4gIGNvbnN0IHggPSArdGhpcy5feC5jYWxsKG51bGwsIGQpLFxuICAgICAgeSA9ICt0aGlzLl95LmNhbGwobnVsbCwgZCk7XG4gIHJldHVybiBhZGQodGhpcy5jb3Zlcih4LCB5KSwgeCwgeSwgZCk7XG59XG5cbmZ1bmN0aW9uIGFkZCh0cmVlLCB4LCB5LCBkKSB7XG4gIGlmIChpc05hTih4KSB8fCBpc05hTih5KSkgcmV0dXJuIHRyZWU7IC8vIGlnbm9yZSBpbnZhbGlkIHBvaW50c1xuXG4gIHZhciBwYXJlbnQsXG4gICAgICBub2RlID0gdHJlZS5fcm9vdCxcbiAgICAgIGxlYWYgPSB7ZGF0YTogZH0sXG4gICAgICB4MCA9IHRyZWUuX3gwLFxuICAgICAgeTAgPSB0cmVlLl95MCxcbiAgICAgIHgxID0gdHJlZS5feDEsXG4gICAgICB5MSA9IHRyZWUuX3kxLFxuICAgICAgeG0sXG4gICAgICB5bSxcbiAgICAgIHhwLFxuICAgICAgeXAsXG4gICAgICByaWdodCxcbiAgICAgIGJvdHRvbSxcbiAgICAgIGksXG4gICAgICBqO1xuXG4gIC8vIElmIHRoZSB0cmVlIGlzIGVtcHR5LCBpbml0aWFsaXplIHRoZSByb290IGFzIGEgbGVhZi5cbiAgaWYgKCFub2RlKSByZXR1cm4gdHJlZS5fcm9vdCA9IGxlYWYsIHRyZWU7XG5cbiAgLy8gRmluZCB0aGUgZXhpc3RpbmcgbGVhZiBmb3IgdGhlIG5ldyBwb2ludCwgb3IgYWRkIGl0LlxuICB3aGlsZSAobm9kZS5sZW5ndGgpIHtcbiAgICBpZiAocmlnaHQgPSB4ID49ICh4bSA9ICh4MCArIHgxKSAvIDIpKSB4MCA9IHhtOyBlbHNlIHgxID0geG07XG4gICAgaWYgKGJvdHRvbSA9IHkgPj0gKHltID0gKHkwICsgeTEpIC8gMikpIHkwID0geW07IGVsc2UgeTEgPSB5bTtcbiAgICBpZiAocGFyZW50ID0gbm9kZSwgIShub2RlID0gbm9kZVtpID0gYm90dG9tIDw8IDEgfCByaWdodF0pKSByZXR1cm4gcGFyZW50W2ldID0gbGVhZiwgdHJlZTtcbiAgfVxuXG4gIC8vIElzIHRoZSBuZXcgcG9pbnQgaXMgZXhhY3RseSBjb2luY2lkZW50IHdpdGggdGhlIGV4aXN0aW5nIHBvaW50P1xuICB4cCA9ICt0cmVlLl94LmNhbGwobnVsbCwgbm9kZS5kYXRhKTtcbiAgeXAgPSArdHJlZS5feS5jYWxsKG51bGwsIG5vZGUuZGF0YSk7XG4gIGlmICh4ID09PSB4cCAmJiB5ID09PSB5cCkgcmV0dXJuIGxlYWYubmV4dCA9IG5vZGUsIHBhcmVudCA/IHBhcmVudFtpXSA9IGxlYWYgOiB0cmVlLl9yb290ID0gbGVhZiwgdHJlZTtcblxuICAvLyBPdGhlcndpc2UsIHNwbGl0IHRoZSBsZWFmIG5vZGUgdW50aWwgdGhlIG9sZCBhbmQgbmV3IHBvaW50IGFyZSBzZXBhcmF0ZWQuXG4gIGRvIHtcbiAgICBwYXJlbnQgPSBwYXJlbnQgPyBwYXJlbnRbaV0gPSBuZXcgQXJyYXkoNCkgOiB0cmVlLl9yb290ID0gbmV3IEFycmF5KDQpO1xuICAgIGlmIChyaWdodCA9IHggPj0gKHhtID0gKHgwICsgeDEpIC8gMikpIHgwID0geG07IGVsc2UgeDEgPSB4bTtcbiAgICBpZiAoYm90dG9tID0geSA+PSAoeW0gPSAoeTAgKyB5MSkgLyAyKSkgeTAgPSB5bTsgZWxzZSB5MSA9IHltO1xuICB9IHdoaWxlICgoaSA9IGJvdHRvbSA8PCAxIHwgcmlnaHQpID09PSAoaiA9ICh5cCA+PSB5bSkgPDwgMSB8ICh4cCA+PSB4bSkpKTtcbiAgcmV0dXJuIHBhcmVudFtqXSA9IG5vZGUsIHBhcmVudFtpXSA9IGxlYWYsIHRyZWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRBbGwoZGF0YSkge1xuICB2YXIgZCwgaSwgbiA9IGRhdGEubGVuZ3RoLFxuICAgICAgeCxcbiAgICAgIHksXG4gICAgICB4eiA9IG5ldyBBcnJheShuKSxcbiAgICAgIHl6ID0gbmV3IEFycmF5KG4pLFxuICAgICAgeDAgPSBJbmZpbml0eSxcbiAgICAgIHkwID0gSW5maW5pdHksXG4gICAgICB4MSA9IC1JbmZpbml0eSxcbiAgICAgIHkxID0gLUluZmluaXR5O1xuXG4gIC8vIENvbXB1dGUgdGhlIHBvaW50cyBhbmQgdGhlaXIgZXh0ZW50LlxuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgaWYgKGlzTmFOKHggPSArdGhpcy5feC5jYWxsKG51bGwsIGQgPSBkYXRhW2ldKSkgfHwgaXNOYU4oeSA9ICt0aGlzLl95LmNhbGwobnVsbCwgZCkpKSBjb250aW51ZTtcbiAgICB4eltpXSA9IHg7XG4gICAgeXpbaV0gPSB5O1xuICAgIGlmICh4IDwgeDApIHgwID0geDtcbiAgICBpZiAoeCA+IHgxKSB4MSA9IHg7XG4gICAgaWYgKHkgPCB5MCkgeTAgPSB5O1xuICAgIGlmICh5ID4geTEpIHkxID0geTtcbiAgfVxuXG4gIC8vIElmIHRoZXJlIHdlcmUgbm8gKHZhbGlkKSBwb2ludHMsIGFib3J0LlxuICBpZiAoeDAgPiB4MSB8fCB5MCA+IHkxKSByZXR1cm4gdGhpcztcblxuICAvLyBFeHBhbmQgdGhlIHRyZWUgdG8gY292ZXIgdGhlIG5ldyBwb2ludHMuXG4gIHRoaXMuY292ZXIoeDAsIHkwKS5jb3Zlcih4MSwgeTEpO1xuXG4gIC8vIEFkZCB0aGUgbmV3IHBvaW50cy5cbiAgZm9yIChpID0gMDsgaSA8IG47ICsraSkge1xuICAgIGFkZCh0aGlzLCB4eltpXSwgeXpbaV0sIGRhdGFbaV0pO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCB5KSB7XG4gIGlmIChpc05hTih4ID0gK3gpIHx8IGlzTmFOKHkgPSAreSkpIHJldHVybiB0aGlzOyAvLyBpZ25vcmUgaW52YWxpZCBwb2ludHNcblxuICB2YXIgeDAgPSB0aGlzLl94MCxcbiAgICAgIHkwID0gdGhpcy5feTAsXG4gICAgICB4MSA9IHRoaXMuX3gxLFxuICAgICAgeTEgPSB0aGlzLl95MTtcblxuICAvLyBJZiB0aGUgcXVhZHRyZWUgaGFzIG5vIGV4dGVudCwgaW5pdGlhbGl6ZSB0aGVtLlxuICAvLyBJbnRlZ2VyIGV4dGVudCBhcmUgbmVjZXNzYXJ5IHNvIHRoYXQgaWYgd2UgbGF0ZXIgZG91YmxlIHRoZSBleHRlbnQsXG4gIC8vIHRoZSBleGlzdGluZyBxdWFkcmFudCBib3VuZGFyaWVzIGRvbuKAmXQgY2hhbmdlIGR1ZSB0byBmbG9hdGluZyBwb2ludCBlcnJvciFcbiAgaWYgKGlzTmFOKHgwKSkge1xuICAgIHgxID0gKHgwID0gTWF0aC5mbG9vcih4KSkgKyAxO1xuICAgIHkxID0gKHkwID0gTWF0aC5mbG9vcih5KSkgKyAxO1xuICB9XG5cbiAgLy8gT3RoZXJ3aXNlLCBkb3VibGUgcmVwZWF0ZWRseSB0byBjb3Zlci5cbiAgZWxzZSB7XG4gICAgdmFyIHogPSB4MSAtIHgwIHx8IDEsXG4gICAgICAgIG5vZGUgPSB0aGlzLl9yb290LFxuICAgICAgICBwYXJlbnQsXG4gICAgICAgIGk7XG5cbiAgICB3aGlsZSAoeDAgPiB4IHx8IHggPj0geDEgfHwgeTAgPiB5IHx8IHkgPj0geTEpIHtcbiAgICAgIGkgPSAoeSA8IHkwKSA8PCAxIHwgKHggPCB4MCk7XG4gICAgICBwYXJlbnQgPSBuZXcgQXJyYXkoNCksIHBhcmVudFtpXSA9IG5vZGUsIG5vZGUgPSBwYXJlbnQsIHogKj0gMjtcbiAgICAgIHN3aXRjaCAoaSkge1xuICAgICAgICBjYXNlIDA6IHgxID0geDAgKyB6LCB5MSA9IHkwICsgejsgYnJlYWs7XG4gICAgICAgIGNhc2UgMTogeDAgPSB4MSAtIHosIHkxID0geTAgKyB6OyBicmVhaztcbiAgICAgICAgY2FzZSAyOiB4MSA9IHgwICsgeiwgeTAgPSB5MSAtIHo7IGJyZWFrO1xuICAgICAgICBjYXNlIDM6IHgwID0geDEgLSB6LCB5MCA9IHkxIC0gejsgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Jvb3QgJiYgdGhpcy5fcm9vdC5sZW5ndGgpIHRoaXMuX3Jvb3QgPSBub2RlO1xuICB9XG5cbiAgdGhpcy5feDAgPSB4MDtcbiAgdGhpcy5feTAgPSB5MDtcbiAgdGhpcy5feDEgPSB4MTtcbiAgdGhpcy5feTEgPSB5MTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGRhdGEgPSBbXTtcbiAgdGhpcy52aXNpdChmdW5jdGlvbihub2RlKSB7XG4gICAgaWYgKCFub2RlLmxlbmd0aCkgZG8gZGF0YS5wdXNoKG5vZGUuZGF0YSk7IHdoaWxlIChub2RlID0gbm9kZS5uZXh0KVxuICB9KTtcbiAgcmV0dXJuIGRhdGE7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihfKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuY292ZXIoK19bMF1bMF0sICtfWzBdWzFdKS5jb3ZlcigrX1sxXVswXSwgK19bMV1bMV0pXG4gICAgICA6IGlzTmFOKHRoaXMuX3gwKSA/IHVuZGVmaW5lZCA6IFtbdGhpcy5feDAsIHRoaXMuX3kwXSwgW3RoaXMuX3gxLCB0aGlzLl95MV1dO1xufVxuIiwiaW1wb3J0IFF1YWQgZnJvbSBcIi4vcXVhZC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCB5LCByYWRpdXMpIHtcbiAgdmFyIGRhdGEsXG4gICAgICB4MCA9IHRoaXMuX3gwLFxuICAgICAgeTAgPSB0aGlzLl95MCxcbiAgICAgIHgxLFxuICAgICAgeTEsXG4gICAgICB4MixcbiAgICAgIHkyLFxuICAgICAgeDMgPSB0aGlzLl94MSxcbiAgICAgIHkzID0gdGhpcy5feTEsXG4gICAgICBxdWFkcyA9IFtdLFxuICAgICAgbm9kZSA9IHRoaXMuX3Jvb3QsXG4gICAgICBxLFxuICAgICAgaTtcblxuICBpZiAobm9kZSkgcXVhZHMucHVzaChuZXcgUXVhZChub2RlLCB4MCwgeTAsIHgzLCB5MykpO1xuICBpZiAocmFkaXVzID09IG51bGwpIHJhZGl1cyA9IEluZmluaXR5O1xuICBlbHNlIHtcbiAgICB4MCA9IHggLSByYWRpdXMsIHkwID0geSAtIHJhZGl1cztcbiAgICB4MyA9IHggKyByYWRpdXMsIHkzID0geSArIHJhZGl1cztcbiAgICByYWRpdXMgKj0gcmFkaXVzO1xuICB9XG5cbiAgd2hpbGUgKHEgPSBxdWFkcy5wb3AoKSkge1xuXG4gICAgLy8gU3RvcCBzZWFyY2hpbmcgaWYgdGhpcyBxdWFkcmFudCBjYW7igJl0IGNvbnRhaW4gYSBjbG9zZXIgbm9kZS5cbiAgICBpZiAoIShub2RlID0gcS5ub2RlKVxuICAgICAgICB8fCAoeDEgPSBxLngwKSA+IHgzXG4gICAgICAgIHx8ICh5MSA9IHEueTApID4geTNcbiAgICAgICAgfHwgKHgyID0gcS54MSkgPCB4MFxuICAgICAgICB8fCAoeTIgPSBxLnkxKSA8IHkwKSBjb250aW51ZTtcblxuICAgIC8vIEJpc2VjdCB0aGUgY3VycmVudCBxdWFkcmFudC5cbiAgICBpZiAobm9kZS5sZW5ndGgpIHtcbiAgICAgIHZhciB4bSA9ICh4MSArIHgyKSAvIDIsXG4gICAgICAgICAgeW0gPSAoeTEgKyB5MikgLyAyO1xuXG4gICAgICBxdWFkcy5wdXNoKFxuICAgICAgICBuZXcgUXVhZChub2RlWzNdLCB4bSwgeW0sIHgyLCB5MiksXG4gICAgICAgIG5ldyBRdWFkKG5vZGVbMl0sIHgxLCB5bSwgeG0sIHkyKSxcbiAgICAgICAgbmV3IFF1YWQobm9kZVsxXSwgeG0sIHkxLCB4MiwgeW0pLFxuICAgICAgICBuZXcgUXVhZChub2RlWzBdLCB4MSwgeTEsIHhtLCB5bSlcbiAgICAgICk7XG5cbiAgICAgIC8vIFZpc2l0IHRoZSBjbG9zZXN0IHF1YWRyYW50IGZpcnN0LlxuICAgICAgaWYgKGkgPSAoeSA+PSB5bSkgPDwgMSB8ICh4ID49IHhtKSkge1xuICAgICAgICBxID0gcXVhZHNbcXVhZHMubGVuZ3RoIC0gMV07XG4gICAgICAgIHF1YWRzW3F1YWRzLmxlbmd0aCAtIDFdID0gcXVhZHNbcXVhZHMubGVuZ3RoIC0gMSAtIGldO1xuICAgICAgICBxdWFkc1txdWFkcy5sZW5ndGggLSAxIC0gaV0gPSBxO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZpc2l0IHRoaXMgcG9pbnQuIChWaXNpdGluZyBjb2luY2lkZW50IHBvaW50cyBpc27igJl0IG5lY2Vzc2FyeSEpXG4gICAgZWxzZSB7XG4gICAgICB2YXIgZHggPSB4IC0gK3RoaXMuX3guY2FsbChudWxsLCBub2RlLmRhdGEpLFxuICAgICAgICAgIGR5ID0geSAtICt0aGlzLl95LmNhbGwobnVsbCwgbm9kZS5kYXRhKSxcbiAgICAgICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5O1xuICAgICAgaWYgKGQyIDwgcmFkaXVzKSB7XG4gICAgICAgIHZhciBkID0gTWF0aC5zcXJ0KHJhZGl1cyA9IGQyKTtcbiAgICAgICAgeDAgPSB4IC0gZCwgeTAgPSB5IC0gZDtcbiAgICAgICAgeDMgPSB4ICsgZCwgeTMgPSB5ICsgZDtcbiAgICAgICAgZGF0YSA9IG5vZGUuZGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZGF0YTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIHgwLCB5MCwgeDEsIHkxKSB7XG4gIHRoaXMubm9kZSA9IG5vZGU7XG4gIHRoaXMueDAgPSB4MDtcbiAgdGhpcy55MCA9IHkwO1xuICB0aGlzLngxID0geDE7XG4gIHRoaXMueTEgPSB5MTtcbn1cbiIsImltcG9ydCB0cmVlX2FkZCwge2FkZEFsbCBhcyB0cmVlX2FkZEFsbH0gZnJvbSBcIi4vYWRkLmpzXCI7XG5pbXBvcnQgdHJlZV9jb3ZlciBmcm9tIFwiLi9jb3Zlci5qc1wiO1xuaW1wb3J0IHRyZWVfZGF0YSBmcm9tIFwiLi9kYXRhLmpzXCI7XG5pbXBvcnQgdHJlZV9leHRlbnQgZnJvbSBcIi4vZXh0ZW50LmpzXCI7XG5pbXBvcnQgdHJlZV9maW5kIGZyb20gXCIuL2ZpbmQuanNcIjtcbmltcG9ydCB0cmVlX3JlbW92ZSwge3JlbW92ZUFsbCBhcyB0cmVlX3JlbW92ZUFsbH0gZnJvbSBcIi4vcmVtb3ZlLmpzXCI7XG5pbXBvcnQgdHJlZV9yb290IGZyb20gXCIuL3Jvb3QuanNcIjtcbmltcG9ydCB0cmVlX3NpemUgZnJvbSBcIi4vc2l6ZS5qc1wiO1xuaW1wb3J0IHRyZWVfdmlzaXQgZnJvbSBcIi4vdmlzaXQuanNcIjtcbmltcG9ydCB0cmVlX3Zpc2l0QWZ0ZXIgZnJvbSBcIi4vdmlzaXRBZnRlci5qc1wiO1xuaW1wb3J0IHRyZWVfeCwge2RlZmF1bHRYfSBmcm9tIFwiLi94LmpzXCI7XG5pbXBvcnQgdHJlZV95LCB7ZGVmYXVsdFl9IGZyb20gXCIuL3kuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVhZHRyZWUobm9kZXMsIHgsIHkpIHtcbiAgdmFyIHRyZWUgPSBuZXcgUXVhZHRyZWUoeCA9PSBudWxsID8gZGVmYXVsdFggOiB4LCB5ID09IG51bGwgPyBkZWZhdWx0WSA6IHksIE5hTiwgTmFOLCBOYU4sIE5hTik7XG4gIHJldHVybiBub2RlcyA9PSBudWxsID8gdHJlZSA6IHRyZWUuYWRkQWxsKG5vZGVzKTtcbn1cblxuZnVuY3Rpb24gUXVhZHRyZWUoeCwgeSwgeDAsIHkwLCB4MSwgeTEpIHtcbiAgdGhpcy5feCA9IHg7XG4gIHRoaXMuX3kgPSB5O1xuICB0aGlzLl94MCA9IHgwO1xuICB0aGlzLl95MCA9IHkwO1xuICB0aGlzLl94MSA9IHgxO1xuICB0aGlzLl95MSA9IHkxO1xuICB0aGlzLl9yb290ID0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBsZWFmX2NvcHkobGVhZikge1xuICB2YXIgY29weSA9IHtkYXRhOiBsZWFmLmRhdGF9LCBuZXh0ID0gY29weTtcbiAgd2hpbGUgKGxlYWYgPSBsZWFmLm5leHQpIG5leHQgPSBuZXh0Lm5leHQgPSB7ZGF0YTogbGVhZi5kYXRhfTtcbiAgcmV0dXJuIGNvcHk7XG59XG5cbnZhciB0cmVlUHJvdG8gPSBxdWFkdHJlZS5wcm90b3R5cGUgPSBRdWFkdHJlZS5wcm90b3R5cGU7XG5cbnRyZWVQcm90by5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBjb3B5ID0gbmV3IFF1YWR0cmVlKHRoaXMuX3gsIHRoaXMuX3ksIHRoaXMuX3gwLCB0aGlzLl95MCwgdGhpcy5feDEsIHRoaXMuX3kxKSxcbiAgICAgIG5vZGUgPSB0aGlzLl9yb290LFxuICAgICAgbm9kZXMsXG4gICAgICBjaGlsZDtcblxuICBpZiAoIW5vZGUpIHJldHVybiBjb3B5O1xuXG4gIGlmICghbm9kZS5sZW5ndGgpIHJldHVybiBjb3B5Ll9yb290ID0gbGVhZl9jb3B5KG5vZGUpLCBjb3B5O1xuXG4gIG5vZGVzID0gW3tzb3VyY2U6IG5vZGUsIHRhcmdldDogY29weS5fcm9vdCA9IG5ldyBBcnJheSg0KX1dO1xuICB3aGlsZSAobm9kZSA9IG5vZGVzLnBvcCgpKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA0OyArK2kpIHtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGUuc291cmNlW2ldKSB7XG4gICAgICAgIGlmIChjaGlsZC5sZW5ndGgpIG5vZGVzLnB1c2goe3NvdXJjZTogY2hpbGQsIHRhcmdldDogbm9kZS50YXJnZXRbaV0gPSBuZXcgQXJyYXkoNCl9KTtcbiAgICAgICAgZWxzZSBub2RlLnRhcmdldFtpXSA9IGxlYWZfY29weShjaGlsZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvcHk7XG59O1xuXG50cmVlUHJvdG8uYWRkID0gdHJlZV9hZGQ7XG50cmVlUHJvdG8uYWRkQWxsID0gdHJlZV9hZGRBbGw7XG50cmVlUHJvdG8uY292ZXIgPSB0cmVlX2NvdmVyO1xudHJlZVByb3RvLmRhdGEgPSB0cmVlX2RhdGE7XG50cmVlUHJvdG8uZXh0ZW50ID0gdHJlZV9leHRlbnQ7XG50cmVlUHJvdG8uZmluZCA9IHRyZWVfZmluZDtcbnRyZWVQcm90by5yZW1vdmUgPSB0cmVlX3JlbW92ZTtcbnRyZWVQcm90by5yZW1vdmVBbGwgPSB0cmVlX3JlbW92ZUFsbDtcbnRyZWVQcm90by5yb290ID0gdHJlZV9yb290O1xudHJlZVByb3RvLnNpemUgPSB0cmVlX3NpemU7XG50cmVlUHJvdG8udmlzaXQgPSB0cmVlX3Zpc2l0O1xudHJlZVByb3RvLnZpc2l0QWZ0ZXIgPSB0cmVlX3Zpc2l0QWZ0ZXI7XG50cmVlUHJvdG8ueCA9IHRyZWVfeDtcbnRyZWVQcm90by55ID0gdHJlZV95O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZCkge1xuICBpZiAoaXNOYU4oeCA9ICt0aGlzLl94LmNhbGwobnVsbCwgZCkpIHx8IGlzTmFOKHkgPSArdGhpcy5feS5jYWxsKG51bGwsIGQpKSkgcmV0dXJuIHRoaXM7IC8vIGlnbm9yZSBpbnZhbGlkIHBvaW50c1xuXG4gIHZhciBwYXJlbnQsXG4gICAgICBub2RlID0gdGhpcy5fcm9vdCxcbiAgICAgIHJldGFpbmVyLFxuICAgICAgcHJldmlvdXMsXG4gICAgICBuZXh0LFxuICAgICAgeDAgPSB0aGlzLl94MCxcbiAgICAgIHkwID0gdGhpcy5feTAsXG4gICAgICB4MSA9IHRoaXMuX3gxLFxuICAgICAgeTEgPSB0aGlzLl95MSxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgeG0sXG4gICAgICB5bSxcbiAgICAgIHJpZ2h0LFxuICAgICAgYm90dG9tLFxuICAgICAgaSxcbiAgICAgIGo7XG5cbiAgLy8gSWYgdGhlIHRyZWUgaXMgZW1wdHksIGluaXRpYWxpemUgdGhlIHJvb3QgYXMgYSBsZWFmLlxuICBpZiAoIW5vZGUpIHJldHVybiB0aGlzO1xuXG4gIC8vIEZpbmQgdGhlIGxlYWYgbm9kZSBmb3IgdGhlIHBvaW50LlxuICAvLyBXaGlsZSBkZXNjZW5kaW5nLCBhbHNvIHJldGFpbiB0aGUgZGVlcGVzdCBwYXJlbnQgd2l0aCBhIG5vbi1yZW1vdmVkIHNpYmxpbmcuXG4gIGlmIChub2RlLmxlbmd0aCkgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAocmlnaHQgPSB4ID49ICh4bSA9ICh4MCArIHgxKSAvIDIpKSB4MCA9IHhtOyBlbHNlIHgxID0geG07XG4gICAgaWYgKGJvdHRvbSA9IHkgPj0gKHltID0gKHkwICsgeTEpIC8gMikpIHkwID0geW07IGVsc2UgeTEgPSB5bTtcbiAgICBpZiAoIShwYXJlbnQgPSBub2RlLCBub2RlID0gbm9kZVtpID0gYm90dG9tIDw8IDEgfCByaWdodF0pKSByZXR1cm4gdGhpcztcbiAgICBpZiAoIW5vZGUubGVuZ3RoKSBicmVhaztcbiAgICBpZiAocGFyZW50WyhpICsgMSkgJiAzXSB8fCBwYXJlbnRbKGkgKyAyKSAmIDNdIHx8IHBhcmVudFsoaSArIDMpICYgM10pIHJldGFpbmVyID0gcGFyZW50LCBqID0gaTtcbiAgfVxuXG4gIC8vIEZpbmQgdGhlIHBvaW50IHRvIHJlbW92ZS5cbiAgd2hpbGUgKG5vZGUuZGF0YSAhPT0gZCkgaWYgKCEocHJldmlvdXMgPSBub2RlLCBub2RlID0gbm9kZS5uZXh0KSkgcmV0dXJuIHRoaXM7XG4gIGlmIChuZXh0ID0gbm9kZS5uZXh0KSBkZWxldGUgbm9kZS5uZXh0O1xuXG4gIC8vIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBjb2luY2lkZW50IHBvaW50cywgcmVtb3ZlIGp1c3QgdGhlIHBvaW50LlxuICBpZiAocHJldmlvdXMpIHJldHVybiAobmV4dCA/IHByZXZpb3VzLm5leHQgPSBuZXh0IDogZGVsZXRlIHByZXZpb3VzLm5leHQpLCB0aGlzO1xuXG4gIC8vIElmIHRoaXMgaXMgdGhlIHJvb3QgcG9pbnQsIHJlbW92ZSBpdC5cbiAgaWYgKCFwYXJlbnQpIHJldHVybiB0aGlzLl9yb290ID0gbmV4dCwgdGhpcztcblxuICAvLyBSZW1vdmUgdGhpcyBsZWFmLlxuICBuZXh0ID8gcGFyZW50W2ldID0gbmV4dCA6IGRlbGV0ZSBwYXJlbnRbaV07XG5cbiAgLy8gSWYgdGhlIHBhcmVudCBub3cgY29udGFpbnMgZXhhY3RseSBvbmUgbGVhZiwgY29sbGFwc2Ugc3VwZXJmbHVvdXMgcGFyZW50cy5cbiAgaWYgKChub2RlID0gcGFyZW50WzBdIHx8IHBhcmVudFsxXSB8fCBwYXJlbnRbMl0gfHwgcGFyZW50WzNdKVxuICAgICAgJiYgbm9kZSA9PT0gKHBhcmVudFszXSB8fCBwYXJlbnRbMl0gfHwgcGFyZW50WzFdIHx8IHBhcmVudFswXSlcbiAgICAgICYmICFub2RlLmxlbmd0aCkge1xuICAgIGlmIChyZXRhaW5lcikgcmV0YWluZXJbal0gPSBub2RlO1xuICAgIGVsc2UgdGhpcy5fcm9vdCA9IG5vZGU7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUFsbChkYXRhKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gZGF0YS5sZW5ndGg7IGkgPCBuOyArK2kpIHRoaXMucmVtb3ZlKGRhdGFbaV0pO1xuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fcm9vdDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgc2l6ZSA9IDA7XG4gIHRoaXMudmlzaXQoZnVuY3Rpb24obm9kZSkge1xuICAgIGlmICghbm9kZS5sZW5ndGgpIGRvICsrc2l6ZTsgd2hpbGUgKG5vZGUgPSBub2RlLm5leHQpXG4gIH0pO1xuICByZXR1cm4gc2l6ZTtcbn1cbiIsImltcG9ydCBRdWFkIGZyb20gXCIuL3F1YWQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIHF1YWRzID0gW10sIHEsIG5vZGUgPSB0aGlzLl9yb290LCBjaGlsZCwgeDAsIHkwLCB4MSwgeTE7XG4gIGlmIChub2RlKSBxdWFkcy5wdXNoKG5ldyBRdWFkKG5vZGUsIHRoaXMuX3gwLCB0aGlzLl95MCwgdGhpcy5feDEsIHRoaXMuX3kxKSk7XG4gIHdoaWxlIChxID0gcXVhZHMucG9wKCkpIHtcbiAgICBpZiAoIWNhbGxiYWNrKG5vZGUgPSBxLm5vZGUsIHgwID0gcS54MCwgeTAgPSBxLnkwLCB4MSA9IHEueDEsIHkxID0gcS55MSkgJiYgbm9kZS5sZW5ndGgpIHtcbiAgICAgIHZhciB4bSA9ICh4MCArIHgxKSAvIDIsIHltID0gKHkwICsgeTEpIC8gMjtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbM10pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHhtLCB5bSwgeDEsIHkxKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzJdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4MCwgeW0sIHhtLCB5MSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVsxXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeG0sIHkwLCB4MSwgeW0pKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMF0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHgwLCB5MCwgeG0sIHltKSk7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IFF1YWQgZnJvbSBcIi4vcXVhZC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuICB2YXIgcXVhZHMgPSBbXSwgbmV4dCA9IFtdLCBxO1xuICBpZiAodGhpcy5fcm9vdCkgcXVhZHMucHVzaChuZXcgUXVhZCh0aGlzLl9yb290LCB0aGlzLl94MCwgdGhpcy5feTAsIHRoaXMuX3gxLCB0aGlzLl95MSkpO1xuICB3aGlsZSAocSA9IHF1YWRzLnBvcCgpKSB7XG4gICAgdmFyIG5vZGUgPSBxLm5vZGU7XG4gICAgaWYgKG5vZGUubGVuZ3RoKSB7XG4gICAgICB2YXIgY2hpbGQsIHgwID0gcS54MCwgeTAgPSBxLnkwLCB4MSA9IHEueDEsIHkxID0gcS55MSwgeG0gPSAoeDAgKyB4MSkgLyAyLCB5bSA9ICh5MCArIHkxKSAvIDI7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzBdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4MCwgeTAsIHhtLCB5bSkpO1xuICAgICAgaWYgKGNoaWxkID0gbm9kZVsxXSkgcXVhZHMucHVzaChuZXcgUXVhZChjaGlsZCwgeG0sIHkwLCB4MSwgeW0pKTtcbiAgICAgIGlmIChjaGlsZCA9IG5vZGVbMl0pIHF1YWRzLnB1c2gobmV3IFF1YWQoY2hpbGQsIHgwLCB5bSwgeG0sIHkxKSk7XG4gICAgICBpZiAoY2hpbGQgPSBub2RlWzNdKSBxdWFkcy5wdXNoKG5ldyBRdWFkKGNoaWxkLCB4bSwgeW0sIHgxLCB5MSkpO1xuICAgIH1cbiAgICBuZXh0LnB1c2gocSk7XG4gIH1cbiAgd2hpbGUgKHEgPSBuZXh0LnBvcCgpKSB7XG4gICAgY2FsbGJhY2socS5ub2RlLCBxLngwLCBxLnkwLCBxLngxLCBxLnkxKTtcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBkZWZhdWx0WChkKSB7XG4gIHJldHVybiBkWzBdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihfKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRoaXMuX3ggPSBfLCB0aGlzKSA6IHRoaXMuX3g7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gZGVmYXVsdFkoZCkge1xuICByZXR1cm4gZFsxXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oXykge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aGlzLl95ID0gXywgdGhpcykgOiB0aGlzLl95O1xufVxuIiwidmFyIGZyYW1lID0gMCwgLy8gaXMgYW4gYW5pbWF0aW9uIGZyYW1lIHBlbmRpbmc/XG4gICAgdGltZW91dCA9IDAsIC8vIGlzIGEgdGltZW91dCBwZW5kaW5nP1xuICAgIGludGVydmFsID0gMCwgLy8gYXJlIGFueSB0aW1lcnMgYWN0aXZlP1xuICAgIHBva2VEZWxheSA9IDEwMDAsIC8vIGhvdyBmcmVxdWVudGx5IHdlIGNoZWNrIGZvciBjbG9jayBza2V3XG4gICAgdGFza0hlYWQsXG4gICAgdGFza1RhaWwsXG4gICAgY2xvY2tMYXN0ID0gMCxcbiAgICBjbG9ja05vdyA9IDAsXG4gICAgY2xvY2tTa2V3ID0gMCxcbiAgICBjbG9jayA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gXCJvYmplY3RcIiAmJiBwZXJmb3JtYW5jZS5ub3cgPyBwZXJmb3JtYW5jZSA6IERhdGUsXG4gICAgc2V0RnJhbWUgPSB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KSA6IGZ1bmN0aW9uKGYpIHsgc2V0VGltZW91dChmLCAxNyk7IH07XG5cbmV4cG9ydCBmdW5jdGlvbiBub3coKSB7XG4gIHJldHVybiBjbG9ja05vdyB8fCAoc2V0RnJhbWUoY2xlYXJOb3cpLCBjbG9ja05vdyA9IGNsb2NrLm5vdygpICsgY2xvY2tTa2V3KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJOb3coKSB7XG4gIGNsb2NrTm93ID0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVyKCkge1xuICB0aGlzLl9jYWxsID1cbiAgdGhpcy5fdGltZSA9XG4gIHRoaXMuX25leHQgPSBudWxsO1xufVxuXG5UaW1lci5wcm90b3R5cGUgPSB0aW1lci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUaW1lcixcbiAgcmVzdGFydDogZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb25cIik7XG4gICAgdGltZSA9ICh0aW1lID09IG51bGwgPyBub3coKSA6ICt0aW1lKSArIChkZWxheSA9PSBudWxsID8gMCA6ICtkZWxheSk7XG4gICAgaWYgKCF0aGlzLl9uZXh0ICYmIHRhc2tUYWlsICE9PSB0aGlzKSB7XG4gICAgICBpZiAodGFza1RhaWwpIHRhc2tUYWlsLl9uZXh0ID0gdGhpcztcbiAgICAgIGVsc2UgdGFza0hlYWQgPSB0aGlzO1xuICAgICAgdGFza1RhaWwgPSB0aGlzO1xuICAgIH1cbiAgICB0aGlzLl9jYWxsID0gY2FsbGJhY2s7XG4gICAgdGhpcy5fdGltZSA9IHRpbWU7XG4gICAgc2xlZXAoKTtcbiAgfSxcbiAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2NhbGwpIHtcbiAgICAgIHRoaXMuX2NhbGwgPSBudWxsO1xuICAgICAgdGhpcy5fdGltZSA9IEluZmluaXR5O1xuICAgICAgc2xlZXAoKTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lcihjYWxsYmFjaywgZGVsYXksIHRpbWUpIHtcbiAgdmFyIHQgPSBuZXcgVGltZXI7XG4gIHQucmVzdGFydChjYWxsYmFjaywgZGVsYXksIHRpbWUpO1xuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVyRmx1c2goKSB7XG4gIG5vdygpOyAvLyBHZXQgdGhlIGN1cnJlbnQgdGltZSwgaWYgbm90IGFscmVhZHkgc2V0LlxuICArK2ZyYW1lOyAvLyBQcmV0ZW5kIHdl4oCZdmUgc2V0IGFuIGFsYXJtLCBpZiB3ZSBoYXZlbuKAmXQgYWxyZWFkeS5cbiAgdmFyIHQgPSB0YXNrSGVhZCwgZTtcbiAgd2hpbGUgKHQpIHtcbiAgICBpZiAoKGUgPSBjbG9ja05vdyAtIHQuX3RpbWUpID49IDApIHQuX2NhbGwuY2FsbCh1bmRlZmluZWQsIGUpO1xuICAgIHQgPSB0Ll9uZXh0O1xuICB9XG4gIC0tZnJhbWU7XG59XG5cbmZ1bmN0aW9uIHdha2UoKSB7XG4gIGNsb2NrTm93ID0gKGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpKSArIGNsb2NrU2tldztcbiAgZnJhbWUgPSB0aW1lb3V0ID0gMDtcbiAgdHJ5IHtcbiAgICB0aW1lckZsdXNoKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZnJhbWUgPSAwO1xuICAgIG5hcCgpO1xuICAgIGNsb2NrTm93ID0gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb2tlKCkge1xuICB2YXIgbm93ID0gY2xvY2subm93KCksIGRlbGF5ID0gbm93IC0gY2xvY2tMYXN0O1xuICBpZiAoZGVsYXkgPiBwb2tlRGVsYXkpIGNsb2NrU2tldyAtPSBkZWxheSwgY2xvY2tMYXN0ID0gbm93O1xufVxuXG5mdW5jdGlvbiBuYXAoKSB7XG4gIHZhciB0MCwgdDEgPSB0YXNrSGVhZCwgdDIsIHRpbWUgPSBJbmZpbml0eTtcbiAgd2hpbGUgKHQxKSB7XG4gICAgaWYgKHQxLl9jYWxsKSB7XG4gICAgICBpZiAodGltZSA+IHQxLl90aW1lKSB0aW1lID0gdDEuX3RpbWU7XG4gICAgICB0MCA9IHQxLCB0MSA9IHQxLl9uZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0MiA9IHQxLl9uZXh0LCB0MS5fbmV4dCA9IG51bGw7XG4gICAgICB0MSA9IHQwID8gdDAuX25leHQgPSB0MiA6IHRhc2tIZWFkID0gdDI7XG4gICAgfVxuICB9XG4gIHRhc2tUYWlsID0gdDA7XG4gIHNsZWVwKHRpbWUpO1xufVxuXG5mdW5jdGlvbiBzbGVlcCh0aW1lKSB7XG4gIGlmIChmcmFtZSkgcmV0dXJuOyAvLyBTb29uZXN0IGFsYXJtIGFscmVhZHkgc2V0LCBvciB3aWxsIGJlLlxuICBpZiAodGltZW91dCkgdGltZW91dCA9IGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgdmFyIGRlbGF5ID0gdGltZSAtIGNsb2NrTm93OyAvLyBTdHJpY3RseSBsZXNzIHRoYW4gaWYgd2UgcmVjb21wdXRlZCBjbG9ja05vdy5cbiAgaWYgKGRlbGF5ID4gMjQpIHtcbiAgICBpZiAodGltZSA8IEluZmluaXR5KSB0aW1lb3V0ID0gc2V0VGltZW91dCh3YWtlLCB0aW1lIC0gY2xvY2subm93KCkgLSBjbG9ja1NrZXcpO1xuICAgIGlmIChpbnRlcnZhbCkgaW50ZXJ2YWwgPSBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWludGVydmFsKSBjbG9ja0xhc3QgPSBjbG9jay5ub3coKSwgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChwb2tlLCBwb2tlRGVsYXkpO1xuICAgIGZyYW1lID0gMSwgc2V0RnJhbWUod2FrZSk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sInNvdXJjZVJvb3QiOiIifQ==
|