@adstore/templates 2.1.10 → 2.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,516 +0,0 @@
|
|
1
|
-
var resizeObservers = [];
|
2
|
-
var hasActiveObservations = function() {
|
3
|
-
return resizeObservers.some(function(ro) {
|
4
|
-
return ro.activeTargets.length > 0;
|
5
|
-
});
|
6
|
-
};
|
7
|
-
var hasSkippedObservations = function() {
|
8
|
-
return resizeObservers.some(function(ro) {
|
9
|
-
return ro.skippedTargets.length > 0;
|
10
|
-
});
|
11
|
-
};
|
12
|
-
var msg = "ResizeObserver loop completed with undelivered notifications.";
|
13
|
-
var deliverResizeLoopError = function() {
|
14
|
-
var event;
|
15
|
-
if (typeof ErrorEvent === "function") {
|
16
|
-
event = new ErrorEvent("error", {
|
17
|
-
message: msg
|
18
|
-
});
|
19
|
-
} else {
|
20
|
-
event = document.createEvent("Event");
|
21
|
-
event.initEvent("error", false, false);
|
22
|
-
event.message = msg;
|
23
|
-
}
|
24
|
-
window.dispatchEvent(event);
|
25
|
-
};
|
26
|
-
var ResizeObserverBoxOptions;
|
27
|
-
(function(ResizeObserverBoxOptions2) {
|
28
|
-
ResizeObserverBoxOptions2["BORDER_BOX"] = "border-box";
|
29
|
-
ResizeObserverBoxOptions2["CONTENT_BOX"] = "content-box";
|
30
|
-
ResizeObserverBoxOptions2["DEVICE_PIXEL_CONTENT_BOX"] = "device-pixel-content-box";
|
31
|
-
})(ResizeObserverBoxOptions || (ResizeObserverBoxOptions = {}));
|
32
|
-
var freeze = function(obj) {
|
33
|
-
return Object.freeze(obj);
|
34
|
-
};
|
35
|
-
var ResizeObserverSize = function() {
|
36
|
-
function ResizeObserverSize2(inlineSize, blockSize) {
|
37
|
-
this.inlineSize = inlineSize;
|
38
|
-
this.blockSize = blockSize;
|
39
|
-
freeze(this);
|
40
|
-
}
|
41
|
-
return ResizeObserverSize2;
|
42
|
-
}();
|
43
|
-
var DOMRectReadOnly = function() {
|
44
|
-
function DOMRectReadOnly2(x, y, width, height) {
|
45
|
-
this.x = x;
|
46
|
-
this.y = y;
|
47
|
-
this.width = width;
|
48
|
-
this.height = height;
|
49
|
-
this.top = this.y;
|
50
|
-
this.left = this.x;
|
51
|
-
this.bottom = this.top + this.height;
|
52
|
-
this.right = this.left + this.width;
|
53
|
-
return freeze(this);
|
54
|
-
}
|
55
|
-
DOMRectReadOnly2.prototype.toJSON = function() {
|
56
|
-
var _a = this, x = _a.x, y = _a.y, top = _a.top, right = _a.right, bottom = _a.bottom, left = _a.left, width = _a.width, height = _a.height;
|
57
|
-
return { x, y, top, right, bottom, left, width, height };
|
58
|
-
};
|
59
|
-
DOMRectReadOnly2.fromRect = function(rectangle) {
|
60
|
-
return new DOMRectReadOnly2(rectangle.x, rectangle.y, rectangle.width, rectangle.height);
|
61
|
-
};
|
62
|
-
return DOMRectReadOnly2;
|
63
|
-
}();
|
64
|
-
var isSVG = function(target) {
|
65
|
-
return target instanceof SVGElement && "getBBox" in target;
|
66
|
-
};
|
67
|
-
var isHidden = function(target) {
|
68
|
-
if (isSVG(target)) {
|
69
|
-
var _a = target.getBBox(), width = _a.width, height = _a.height;
|
70
|
-
return !width && !height;
|
71
|
-
}
|
72
|
-
var _b = target, offsetWidth = _b.offsetWidth, offsetHeight = _b.offsetHeight;
|
73
|
-
return !(offsetWidth || offsetHeight || target.getClientRects().length);
|
74
|
-
};
|
75
|
-
var isElement = function(obj) {
|
76
|
-
var _a;
|
77
|
-
if (obj instanceof Element) {
|
78
|
-
return true;
|
79
|
-
}
|
80
|
-
var scope = (_a = obj === null || obj === void 0 ? void 0 : obj.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView;
|
81
|
-
return !!(scope && obj instanceof scope.Element);
|
82
|
-
};
|
83
|
-
var isReplacedElement = function(target) {
|
84
|
-
switch (target.tagName) {
|
85
|
-
case "INPUT":
|
86
|
-
if (target.type !== "image") {
|
87
|
-
break;
|
88
|
-
}
|
89
|
-
case "VIDEO":
|
90
|
-
case "AUDIO":
|
91
|
-
case "EMBED":
|
92
|
-
case "OBJECT":
|
93
|
-
case "CANVAS":
|
94
|
-
case "IFRAME":
|
95
|
-
case "IMG":
|
96
|
-
return true;
|
97
|
-
}
|
98
|
-
return false;
|
99
|
-
};
|
100
|
-
var global = typeof window !== "undefined" ? window : {};
|
101
|
-
var cache = /* @__PURE__ */ new WeakMap();
|
102
|
-
var scrollRegexp = /auto|scroll/;
|
103
|
-
var verticalRegexp = /^tb|vertical/;
|
104
|
-
var IE = /msie|trident/i.test(global.navigator && global.navigator.userAgent);
|
105
|
-
var parseDimension = function(pixel) {
|
106
|
-
return parseFloat(pixel || "0");
|
107
|
-
};
|
108
|
-
var size = function(inlineSize, blockSize, switchSizes) {
|
109
|
-
if (inlineSize === void 0) {
|
110
|
-
inlineSize = 0;
|
111
|
-
}
|
112
|
-
if (blockSize === void 0) {
|
113
|
-
blockSize = 0;
|
114
|
-
}
|
115
|
-
if (switchSizes === void 0) {
|
116
|
-
switchSizes = false;
|
117
|
-
}
|
118
|
-
return new ResizeObserverSize((switchSizes ? blockSize : inlineSize) || 0, (switchSizes ? inlineSize : blockSize) || 0);
|
119
|
-
};
|
120
|
-
var zeroBoxes = freeze({
|
121
|
-
devicePixelContentBoxSize: size(),
|
122
|
-
borderBoxSize: size(),
|
123
|
-
contentBoxSize: size(),
|
124
|
-
contentRect: new DOMRectReadOnly(0, 0, 0, 0)
|
125
|
-
});
|
126
|
-
var calculateBoxSizes = function(target, forceRecalculation) {
|
127
|
-
if (forceRecalculation === void 0) {
|
128
|
-
forceRecalculation = false;
|
129
|
-
}
|
130
|
-
if (cache.has(target) && !forceRecalculation) {
|
131
|
-
return cache.get(target);
|
132
|
-
}
|
133
|
-
if (isHidden(target)) {
|
134
|
-
cache.set(target, zeroBoxes);
|
135
|
-
return zeroBoxes;
|
136
|
-
}
|
137
|
-
var cs = getComputedStyle(target);
|
138
|
-
var svg = isSVG(target) && target.ownerSVGElement && target.getBBox();
|
139
|
-
var removePadding = !IE && cs.boxSizing === "border-box";
|
140
|
-
var switchSizes = verticalRegexp.test(cs.writingMode || "");
|
141
|
-
var canScrollVertically = !svg && scrollRegexp.test(cs.overflowY || "");
|
142
|
-
var canScrollHorizontally = !svg && scrollRegexp.test(cs.overflowX || "");
|
143
|
-
var paddingTop = svg ? 0 : parseDimension(cs.paddingTop);
|
144
|
-
var paddingRight = svg ? 0 : parseDimension(cs.paddingRight);
|
145
|
-
var paddingBottom = svg ? 0 : parseDimension(cs.paddingBottom);
|
146
|
-
var paddingLeft = svg ? 0 : parseDimension(cs.paddingLeft);
|
147
|
-
var borderTop = svg ? 0 : parseDimension(cs.borderTopWidth);
|
148
|
-
var borderRight = svg ? 0 : parseDimension(cs.borderRightWidth);
|
149
|
-
var borderBottom = svg ? 0 : parseDimension(cs.borderBottomWidth);
|
150
|
-
var borderLeft = svg ? 0 : parseDimension(cs.borderLeftWidth);
|
151
|
-
var horizontalPadding = paddingLeft + paddingRight;
|
152
|
-
var verticalPadding = paddingTop + paddingBottom;
|
153
|
-
var horizontalBorderArea = borderLeft + borderRight;
|
154
|
-
var verticalBorderArea = borderTop + borderBottom;
|
155
|
-
var horizontalScrollbarThickness = !canScrollHorizontally ? 0 : target.offsetHeight - verticalBorderArea - target.clientHeight;
|
156
|
-
var verticalScrollbarThickness = !canScrollVertically ? 0 : target.offsetWidth - horizontalBorderArea - target.clientWidth;
|
157
|
-
var widthReduction = removePadding ? horizontalPadding + horizontalBorderArea : 0;
|
158
|
-
var heightReduction = removePadding ? verticalPadding + verticalBorderArea : 0;
|
159
|
-
var contentWidth = svg ? svg.width : parseDimension(cs.width) - widthReduction - verticalScrollbarThickness;
|
160
|
-
var contentHeight = svg ? svg.height : parseDimension(cs.height) - heightReduction - horizontalScrollbarThickness;
|
161
|
-
var borderBoxWidth = contentWidth + horizontalPadding + verticalScrollbarThickness + horizontalBorderArea;
|
162
|
-
var borderBoxHeight = contentHeight + verticalPadding + horizontalScrollbarThickness + verticalBorderArea;
|
163
|
-
var boxes = freeze({
|
164
|
-
devicePixelContentBoxSize: size(Math.round(contentWidth * devicePixelRatio), Math.round(contentHeight * devicePixelRatio), switchSizes),
|
165
|
-
borderBoxSize: size(borderBoxWidth, borderBoxHeight, switchSizes),
|
166
|
-
contentBoxSize: size(contentWidth, contentHeight, switchSizes),
|
167
|
-
contentRect: new DOMRectReadOnly(paddingLeft, paddingTop, contentWidth, contentHeight)
|
168
|
-
});
|
169
|
-
cache.set(target, boxes);
|
170
|
-
return boxes;
|
171
|
-
};
|
172
|
-
var calculateBoxSize = function(target, observedBox, forceRecalculation) {
|
173
|
-
var _a = calculateBoxSizes(target, forceRecalculation), borderBoxSize = _a.borderBoxSize, contentBoxSize = _a.contentBoxSize, devicePixelContentBoxSize = _a.devicePixelContentBoxSize;
|
174
|
-
switch (observedBox) {
|
175
|
-
case ResizeObserverBoxOptions.DEVICE_PIXEL_CONTENT_BOX:
|
176
|
-
return devicePixelContentBoxSize;
|
177
|
-
case ResizeObserverBoxOptions.BORDER_BOX:
|
178
|
-
return borderBoxSize;
|
179
|
-
default:
|
180
|
-
return contentBoxSize;
|
181
|
-
}
|
182
|
-
};
|
183
|
-
var ResizeObserverEntry = function() {
|
184
|
-
function ResizeObserverEntry2(target) {
|
185
|
-
var boxes = calculateBoxSizes(target);
|
186
|
-
this.target = target;
|
187
|
-
this.contentRect = boxes.contentRect;
|
188
|
-
this.borderBoxSize = freeze([boxes.borderBoxSize]);
|
189
|
-
this.contentBoxSize = freeze([boxes.contentBoxSize]);
|
190
|
-
this.devicePixelContentBoxSize = freeze([boxes.devicePixelContentBoxSize]);
|
191
|
-
}
|
192
|
-
return ResizeObserverEntry2;
|
193
|
-
}();
|
194
|
-
var calculateDepthForNode = function(node) {
|
195
|
-
if (isHidden(node)) {
|
196
|
-
return Infinity;
|
197
|
-
}
|
198
|
-
var depth = 0;
|
199
|
-
var parent = node.parentNode;
|
200
|
-
while (parent) {
|
201
|
-
depth += 1;
|
202
|
-
parent = parent.parentNode;
|
203
|
-
}
|
204
|
-
return depth;
|
205
|
-
};
|
206
|
-
var broadcastActiveObservations = function() {
|
207
|
-
var shallowestDepth = Infinity;
|
208
|
-
var callbacks2 = [];
|
209
|
-
resizeObservers.forEach(function processObserver(ro) {
|
210
|
-
if (ro.activeTargets.length === 0) {
|
211
|
-
return;
|
212
|
-
}
|
213
|
-
var entries = [];
|
214
|
-
ro.activeTargets.forEach(function processTarget(ot) {
|
215
|
-
var entry = new ResizeObserverEntry(ot.target);
|
216
|
-
var targetDepth = calculateDepthForNode(ot.target);
|
217
|
-
entries.push(entry);
|
218
|
-
ot.lastReportedSize = calculateBoxSize(ot.target, ot.observedBox);
|
219
|
-
if (targetDepth < shallowestDepth) {
|
220
|
-
shallowestDepth = targetDepth;
|
221
|
-
}
|
222
|
-
});
|
223
|
-
callbacks2.push(function resizeObserverCallback() {
|
224
|
-
ro.callback.call(ro.observer, entries, ro.observer);
|
225
|
-
});
|
226
|
-
ro.activeTargets.splice(0, ro.activeTargets.length);
|
227
|
-
});
|
228
|
-
for (var _i = 0, callbacks_1 = callbacks2; _i < callbacks_1.length; _i++) {
|
229
|
-
var callback = callbacks_1[_i];
|
230
|
-
callback();
|
231
|
-
}
|
232
|
-
return shallowestDepth;
|
233
|
-
};
|
234
|
-
var gatherActiveObservationsAtDepth = function(depth) {
|
235
|
-
resizeObservers.forEach(function processObserver(ro) {
|
236
|
-
ro.activeTargets.splice(0, ro.activeTargets.length);
|
237
|
-
ro.skippedTargets.splice(0, ro.skippedTargets.length);
|
238
|
-
ro.observationTargets.forEach(function processTarget(ot) {
|
239
|
-
if (ot.isActive()) {
|
240
|
-
if (calculateDepthForNode(ot.target) > depth) {
|
241
|
-
ro.activeTargets.push(ot);
|
242
|
-
} else {
|
243
|
-
ro.skippedTargets.push(ot);
|
244
|
-
}
|
245
|
-
}
|
246
|
-
});
|
247
|
-
});
|
248
|
-
};
|
249
|
-
var process = function() {
|
250
|
-
var depth = 0;
|
251
|
-
gatherActiveObservationsAtDepth(depth);
|
252
|
-
while (hasActiveObservations()) {
|
253
|
-
depth = broadcastActiveObservations();
|
254
|
-
gatherActiveObservationsAtDepth(depth);
|
255
|
-
}
|
256
|
-
if (hasSkippedObservations()) {
|
257
|
-
deliverResizeLoopError();
|
258
|
-
}
|
259
|
-
return depth > 0;
|
260
|
-
};
|
261
|
-
var trigger;
|
262
|
-
var callbacks = [];
|
263
|
-
var notify = function() {
|
264
|
-
return callbacks.splice(0).forEach(function(cb) {
|
265
|
-
return cb();
|
266
|
-
});
|
267
|
-
};
|
268
|
-
var queueMicroTask = function(callback) {
|
269
|
-
if (!trigger) {
|
270
|
-
var toggle_1 = 0;
|
271
|
-
var el_1 = document.createTextNode("");
|
272
|
-
var config = { characterData: true };
|
273
|
-
new MutationObserver(function() {
|
274
|
-
return notify();
|
275
|
-
}).observe(el_1, config);
|
276
|
-
trigger = function() {
|
277
|
-
el_1.textContent = "".concat(toggle_1 ? toggle_1-- : toggle_1++);
|
278
|
-
};
|
279
|
-
}
|
280
|
-
callbacks.push(callback);
|
281
|
-
trigger();
|
282
|
-
};
|
283
|
-
var queueResizeObserver = function(cb) {
|
284
|
-
queueMicroTask(function ResizeObserver2() {
|
285
|
-
requestAnimationFrame(cb);
|
286
|
-
});
|
287
|
-
};
|
288
|
-
var watching = 0;
|
289
|
-
var isWatching = function() {
|
290
|
-
return !!watching;
|
291
|
-
};
|
292
|
-
var CATCH_PERIOD = 250;
|
293
|
-
var observerConfig = { attributes: true, characterData: true, childList: true, subtree: true };
|
294
|
-
var events = [
|
295
|
-
"resize",
|
296
|
-
"load",
|
297
|
-
"transitionend",
|
298
|
-
"animationend",
|
299
|
-
"animationstart",
|
300
|
-
"animationiteration",
|
301
|
-
"keyup",
|
302
|
-
"keydown",
|
303
|
-
"mouseup",
|
304
|
-
"mousedown",
|
305
|
-
"mouseover",
|
306
|
-
"mouseout",
|
307
|
-
"blur",
|
308
|
-
"focus"
|
309
|
-
];
|
310
|
-
var time = function(timeout) {
|
311
|
-
if (timeout === void 0) {
|
312
|
-
timeout = 0;
|
313
|
-
}
|
314
|
-
return Date.now() + timeout;
|
315
|
-
};
|
316
|
-
var scheduled = false;
|
317
|
-
var Scheduler = function() {
|
318
|
-
function Scheduler2() {
|
319
|
-
var _this = this;
|
320
|
-
this.stopped = true;
|
321
|
-
this.listener = function() {
|
322
|
-
return _this.schedule();
|
323
|
-
};
|
324
|
-
}
|
325
|
-
Scheduler2.prototype.run = function(timeout) {
|
326
|
-
var _this = this;
|
327
|
-
if (timeout === void 0) {
|
328
|
-
timeout = CATCH_PERIOD;
|
329
|
-
}
|
330
|
-
if (scheduled) {
|
331
|
-
return;
|
332
|
-
}
|
333
|
-
scheduled = true;
|
334
|
-
var until = time(timeout);
|
335
|
-
queueResizeObserver(function() {
|
336
|
-
var elementsHaveResized = false;
|
337
|
-
try {
|
338
|
-
elementsHaveResized = process();
|
339
|
-
} finally {
|
340
|
-
scheduled = false;
|
341
|
-
timeout = until - time();
|
342
|
-
if (!isWatching()) {
|
343
|
-
return;
|
344
|
-
}
|
345
|
-
if (elementsHaveResized) {
|
346
|
-
_this.run(1e3);
|
347
|
-
} else if (timeout > 0) {
|
348
|
-
_this.run(timeout);
|
349
|
-
} else {
|
350
|
-
_this.start();
|
351
|
-
}
|
352
|
-
}
|
353
|
-
});
|
354
|
-
};
|
355
|
-
Scheduler2.prototype.schedule = function() {
|
356
|
-
this.stop();
|
357
|
-
this.run();
|
358
|
-
};
|
359
|
-
Scheduler2.prototype.observe = function() {
|
360
|
-
var _this = this;
|
361
|
-
var cb = function() {
|
362
|
-
return _this.observer && _this.observer.observe(document.body, observerConfig);
|
363
|
-
};
|
364
|
-
document.body ? cb() : global.addEventListener("DOMContentLoaded", cb);
|
365
|
-
};
|
366
|
-
Scheduler2.prototype.start = function() {
|
367
|
-
var _this = this;
|
368
|
-
if (this.stopped) {
|
369
|
-
this.stopped = false;
|
370
|
-
this.observer = new MutationObserver(this.listener);
|
371
|
-
this.observe();
|
372
|
-
events.forEach(function(name) {
|
373
|
-
return global.addEventListener(name, _this.listener, true);
|
374
|
-
});
|
375
|
-
}
|
376
|
-
};
|
377
|
-
Scheduler2.prototype.stop = function() {
|
378
|
-
var _this = this;
|
379
|
-
if (!this.stopped) {
|
380
|
-
this.observer && this.observer.disconnect();
|
381
|
-
events.forEach(function(name) {
|
382
|
-
return global.removeEventListener(name, _this.listener, true);
|
383
|
-
});
|
384
|
-
this.stopped = true;
|
385
|
-
}
|
386
|
-
};
|
387
|
-
return Scheduler2;
|
388
|
-
}();
|
389
|
-
var scheduler = new Scheduler();
|
390
|
-
var updateCount = function(n) {
|
391
|
-
!watching && n > 0 && scheduler.start();
|
392
|
-
watching += n;
|
393
|
-
!watching && scheduler.stop();
|
394
|
-
};
|
395
|
-
var skipNotifyOnElement = function(target) {
|
396
|
-
return !isSVG(target) && !isReplacedElement(target) && getComputedStyle(target).display === "inline";
|
397
|
-
};
|
398
|
-
var ResizeObservation = function() {
|
399
|
-
function ResizeObservation2(target, observedBox) {
|
400
|
-
this.target = target;
|
401
|
-
this.observedBox = observedBox || ResizeObserverBoxOptions.CONTENT_BOX;
|
402
|
-
this.lastReportedSize = {
|
403
|
-
inlineSize: 0,
|
404
|
-
blockSize: 0
|
405
|
-
};
|
406
|
-
}
|
407
|
-
ResizeObservation2.prototype.isActive = function() {
|
408
|
-
var size2 = calculateBoxSize(this.target, this.observedBox, true);
|
409
|
-
if (skipNotifyOnElement(this.target)) {
|
410
|
-
this.lastReportedSize = size2;
|
411
|
-
}
|
412
|
-
if (this.lastReportedSize.inlineSize !== size2.inlineSize || this.lastReportedSize.blockSize !== size2.blockSize) {
|
413
|
-
return true;
|
414
|
-
}
|
415
|
-
return false;
|
416
|
-
};
|
417
|
-
return ResizeObservation2;
|
418
|
-
}();
|
419
|
-
var ResizeObserverDetail = function() {
|
420
|
-
function ResizeObserverDetail2(resizeObserver, callback) {
|
421
|
-
this.activeTargets = [];
|
422
|
-
this.skippedTargets = [];
|
423
|
-
this.observationTargets = [];
|
424
|
-
this.observer = resizeObserver;
|
425
|
-
this.callback = callback;
|
426
|
-
}
|
427
|
-
return ResizeObserverDetail2;
|
428
|
-
}();
|
429
|
-
var observerMap = /* @__PURE__ */ new WeakMap();
|
430
|
-
var getObservationIndex = function(observationTargets, target) {
|
431
|
-
for (var i = 0; i < observationTargets.length; i += 1) {
|
432
|
-
if (observationTargets[i].target === target) {
|
433
|
-
return i;
|
434
|
-
}
|
435
|
-
}
|
436
|
-
return -1;
|
437
|
-
};
|
438
|
-
var ResizeObserverController = function() {
|
439
|
-
function ResizeObserverController2() {
|
440
|
-
}
|
441
|
-
ResizeObserverController2.connect = function(resizeObserver, callback) {
|
442
|
-
var detail = new ResizeObserverDetail(resizeObserver, callback);
|
443
|
-
observerMap.set(resizeObserver, detail);
|
444
|
-
};
|
445
|
-
ResizeObserverController2.observe = function(resizeObserver, target, options) {
|
446
|
-
var detail = observerMap.get(resizeObserver);
|
447
|
-
var firstObservation = detail.observationTargets.length === 0;
|
448
|
-
if (getObservationIndex(detail.observationTargets, target) < 0) {
|
449
|
-
firstObservation && resizeObservers.push(detail);
|
450
|
-
detail.observationTargets.push(new ResizeObservation(target, options && options.box));
|
451
|
-
updateCount(1);
|
452
|
-
scheduler.schedule();
|
453
|
-
}
|
454
|
-
};
|
455
|
-
ResizeObserverController2.unobserve = function(resizeObserver, target) {
|
456
|
-
var detail = observerMap.get(resizeObserver);
|
457
|
-
var index = getObservationIndex(detail.observationTargets, target);
|
458
|
-
var lastObservation = detail.observationTargets.length === 1;
|
459
|
-
if (index >= 0) {
|
460
|
-
lastObservation && resizeObservers.splice(resizeObservers.indexOf(detail), 1);
|
461
|
-
detail.observationTargets.splice(index, 1);
|
462
|
-
updateCount(-1);
|
463
|
-
}
|
464
|
-
};
|
465
|
-
ResizeObserverController2.disconnect = function(resizeObserver) {
|
466
|
-
var _this = this;
|
467
|
-
var detail = observerMap.get(resizeObserver);
|
468
|
-
detail.observationTargets.slice().forEach(function(ot) {
|
469
|
-
return _this.unobserve(resizeObserver, ot.target);
|
470
|
-
});
|
471
|
-
detail.activeTargets.splice(0, detail.activeTargets.length);
|
472
|
-
};
|
473
|
-
return ResizeObserverController2;
|
474
|
-
}();
|
475
|
-
var ResizeObserver = function() {
|
476
|
-
function ResizeObserver2(callback) {
|
477
|
-
if (arguments.length === 0) {
|
478
|
-
throw new TypeError("Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.");
|
479
|
-
}
|
480
|
-
if (typeof callback !== "function") {
|
481
|
-
throw new TypeError("Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.");
|
482
|
-
}
|
483
|
-
ResizeObserverController.connect(this, callback);
|
484
|
-
}
|
485
|
-
ResizeObserver2.prototype.observe = function(target, options) {
|
486
|
-
if (arguments.length === 0) {
|
487
|
-
throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.");
|
488
|
-
}
|
489
|
-
if (!isElement(target)) {
|
490
|
-
throw new TypeError("Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element");
|
491
|
-
}
|
492
|
-
ResizeObserverController.observe(this, target, options);
|
493
|
-
};
|
494
|
-
ResizeObserver2.prototype.unobserve = function(target) {
|
495
|
-
if (arguments.length === 0) {
|
496
|
-
throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.");
|
497
|
-
}
|
498
|
-
if (!isElement(target)) {
|
499
|
-
throw new TypeError("Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element");
|
500
|
-
}
|
501
|
-
ResizeObserverController.unobserve(this, target);
|
502
|
-
};
|
503
|
-
ResizeObserver2.prototype.disconnect = function() {
|
504
|
-
ResizeObserverController.disconnect(this);
|
505
|
-
};
|
506
|
-
ResizeObserver2.toString = function() {
|
507
|
-
return "function ResizeObserver () { [polyfill code] }";
|
508
|
-
};
|
509
|
-
return ResizeObserver2;
|
510
|
-
}();
|
511
|
-
export {
|
512
|
-
ResizeObserver,
|
513
|
-
ResizeObserverEntry,
|
514
|
-
ResizeObserverSize
|
515
|
-
};
|
516
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzaXplLW9ic2VydmVyLTk2ZDU3MTVmLmpzIiwic291cmNlcyI6WyIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGp1Z2dsZS9yZXNpemUtb2JzZXJ2ZXIvbGliL3V0aWxzL3Jlc2l6ZU9ic2VydmVycy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlci9saWIvYWxnb3JpdGhtcy9oYXNBY3RpdmVPYnNlcnZhdGlvbnMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGp1Z2dsZS9yZXNpemUtb2JzZXJ2ZXIvbGliL2FsZ29yaXRobXMvaGFzU2tpcHBlZE9ic2VydmF0aW9ucy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlci9saWIvYWxnb3JpdGhtcy9kZWxpdmVyUmVzaXplTG9vcEVycm9yLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BqdWdnbGUvcmVzaXplLW9ic2VydmVyL2xpYi9SZXNpemVPYnNlcnZlckJveE9wdGlvbnMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGp1Z2dsZS9yZXNpemUtb2JzZXJ2ZXIvbGliL3V0aWxzL2ZyZWV6ZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlci9saWIvUmVzaXplT2JzZXJ2ZXJTaXplLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BqdWdnbGUvcmVzaXplLW9ic2VydmVyL2xpYi9ET01SZWN0UmVhZE9ubHkuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGp1Z2dsZS9yZXNpemUtb2JzZXJ2ZXIvbGliL3V0aWxzL2VsZW1lbnQuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGp1Z2dsZS9yZXNpemUtb2JzZXJ2ZXIvbGliL3V0aWxzL2dsb2JhbC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlci9saWIvYWxnb3JpdGhtcy9jYWxjdWxhdGVCb3hTaXplLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BqdWdnbGUvcmVzaXplLW9ic2VydmVyL2xpYi9SZXNpemVPYnNlcnZlckVudHJ5LmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BqdWdnbGUvcmVzaXplLW9ic2VydmVyL2xpYi9hbGdvcml0aG1zL2NhbGN1bGF0ZURlcHRoRm9yTm9kZS5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlci9saWIvYWxnb3JpdGhtcy9icm9hZGNhc3RBY3RpdmVPYnNlcnZhdGlvbnMuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGp1Z2dsZS9yZXNpemUtb2JzZXJ2ZXIvbGliL2FsZ29yaXRobXMvZ2F0aGVyQWN0aXZlT2JzZXJ2YXRpb25zQXREZXB0aC5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlci9saWIvdXRpbHMvcHJvY2Vzcy5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlci9saWIvdXRpbHMvcXVldWVNaWNyb1Rhc2suanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGp1Z2dsZS9yZXNpemUtb2JzZXJ2ZXIvbGliL3V0aWxzL3F1ZXVlUmVzaXplT2JzZXJ2ZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGp1Z2dsZS9yZXNpemUtb2JzZXJ2ZXIvbGliL3V0aWxzL3NjaGVkdWxlci5qcyIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AanVnZ2xlL3Jlc2l6ZS1vYnNlcnZlci9saWIvUmVzaXplT2JzZXJ2YXRpb24uanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGp1Z2dsZS9yZXNpemUtb2JzZXJ2ZXIvbGliL1Jlc2l6ZU9ic2VydmVyRGV0YWlsLmpzIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BqdWdnbGUvcmVzaXplLW9ic2VydmVyL2xpYi9SZXNpemVPYnNlcnZlckNvbnRyb2xsZXIuanMiLCIuLi8uLi8uLi9ub2RlX21vZHVsZXMvQGp1Z2dsZS9yZXNpemUtb2JzZXJ2ZXIvbGliL1Jlc2l6ZU9ic2VydmVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbInZhciByZXNpemVPYnNlcnZlcnMgPSBbXTtcbmV4cG9ydCB7IHJlc2l6ZU9ic2VydmVycyB9O1xuIiwiaW1wb3J0IHsgcmVzaXplT2JzZXJ2ZXJzIH0gZnJvbSAnLi4vdXRpbHMvcmVzaXplT2JzZXJ2ZXJzJztcbnZhciBoYXNBY3RpdmVPYnNlcnZhdGlvbnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHJlc2l6ZU9ic2VydmVycy5zb21lKGZ1bmN0aW9uIChybykgeyByZXR1cm4gcm8uYWN0aXZlVGFyZ2V0cy5sZW5ndGggPiAwOyB9KTtcbn07XG5leHBvcnQgeyBoYXNBY3RpdmVPYnNlcnZhdGlvbnMgfTtcbiIsImltcG9ydCB7IHJlc2l6ZU9ic2VydmVycyB9IGZyb20gJy4uL3V0aWxzL3Jlc2l6ZU9ic2VydmVycyc7XG52YXIgaGFzU2tpcHBlZE9ic2VydmF0aW9ucyA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcmVzaXplT2JzZXJ2ZXJzLnNvbWUoZnVuY3Rpb24gKHJvKSB7IHJldHVybiByby5za2lwcGVkVGFyZ2V0cy5sZW5ndGggPiAwOyB9KTtcbn07XG5leHBvcnQgeyBoYXNTa2lwcGVkT2JzZXJ2YXRpb25zIH07XG4iLCJ2YXIgbXNnID0gJ1Jlc2l6ZU9ic2VydmVyIGxvb3AgY29tcGxldGVkIHdpdGggdW5kZWxpdmVyZWQgbm90aWZpY2F0aW9ucy4nO1xudmFyIGRlbGl2ZXJSZXNpemVMb29wRXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV2ZW50O1xuICAgIGlmICh0eXBlb2YgRXJyb3JFdmVudCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBldmVudCA9IG5ldyBFcnJvckV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgIG1lc3NhZ2U6IG1zZ1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGV2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7XG4gICAgICAgIGV2ZW50LmluaXRFdmVudCgnZXJyb3InLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICBldmVudC5tZXNzYWdlID0gbXNnO1xuICAgIH1cbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XG59O1xuZXhwb3J0IHsgZGVsaXZlclJlc2l6ZUxvb3BFcnJvciB9O1xuIiwidmFyIFJlc2l6ZU9ic2VydmVyQm94T3B0aW9ucztcbihmdW5jdGlvbiAoUmVzaXplT2JzZXJ2ZXJCb3hPcHRpb25zKSB7XG4gICAgUmVzaXplT2JzZXJ2ZXJCb3hPcHRpb25zW1wiQk9SREVSX0JPWFwiXSA9IFwiYm9yZGVyLWJveFwiO1xuICAgIFJlc2l6ZU9ic2VydmVyQm94T3B0aW9uc1tcIkNPTlRFTlRfQk9YXCJdID0gXCJjb250ZW50LWJveFwiO1xuICAgIFJlc2l6ZU9ic2VydmVyQm94T3B0aW9uc1tcIkRFVklDRV9QSVhFTF9DT05URU5UX0JPWFwiXSA9IFwiZGV2aWNlLXBpeGVsLWNvbnRlbnQtYm94XCI7XG59KShSZXNpemVPYnNlcnZlckJveE9wdGlvbnMgfHwgKFJlc2l6ZU9ic2VydmVyQm94T3B0aW9ucyA9IHt9KSk7XG5leHBvcnQgeyBSZXNpemVPYnNlcnZlckJveE9wdGlvbnMgfTtcbiIsImV4cG9ydCB2YXIgZnJlZXplID0gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gT2JqZWN0LmZyZWV6ZShvYmopOyB9O1xuIiwiaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi91dGlscy9mcmVlemUnO1xudmFyIFJlc2l6ZU9ic2VydmVyU2l6ZSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUmVzaXplT2JzZXJ2ZXJTaXplKGlubGluZVNpemUsIGJsb2NrU2l6ZSkge1xuICAgICAgICB0aGlzLmlubGluZVNpemUgPSBpbmxpbmVTaXplO1xuICAgICAgICB0aGlzLmJsb2NrU2l6ZSA9IGJsb2NrU2l6ZTtcbiAgICAgICAgZnJlZXplKHRoaXMpO1xuICAgIH1cbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2ZXJTaXplO1xufSgpKTtcbmV4cG9ydCB7IFJlc2l6ZU9ic2VydmVyU2l6ZSB9O1xuIiwiaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi91dGlscy9mcmVlemUnO1xudmFyIERPTVJlY3RSZWFkT25seSA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRE9NUmVjdFJlYWRPbmx5KHgsIHksIHdpZHRoLCBoZWlnaHQpIHtcbiAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgdGhpcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgICAgICAgdGhpcy50b3AgPSB0aGlzLnk7XG4gICAgICAgIHRoaXMubGVmdCA9IHRoaXMueDtcbiAgICAgICAgdGhpcy5ib3R0b20gPSB0aGlzLnRvcCArIHRoaXMuaGVpZ2h0O1xuICAgICAgICB0aGlzLnJpZ2h0ID0gdGhpcy5sZWZ0ICsgdGhpcy53aWR0aDtcbiAgICAgICAgcmV0dXJuIGZyZWV6ZSh0aGlzKTtcbiAgICB9XG4gICAgRE9NUmVjdFJlYWRPbmx5LnByb3RvdHlwZS50b0pTT04gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYSA9IHRoaXMsIHggPSBfYS54LCB5ID0gX2EueSwgdG9wID0gX2EudG9wLCByaWdodCA9IF9hLnJpZ2h0LCBib3R0b20gPSBfYS5ib3R0b20sIGxlZnQgPSBfYS5sZWZ0LCB3aWR0aCA9IF9hLndpZHRoLCBoZWlnaHQgPSBfYS5oZWlnaHQ7XG4gICAgICAgIHJldHVybiB7IHg6IHgsIHk6IHksIHRvcDogdG9wLCByaWdodDogcmlnaHQsIGJvdHRvbTogYm90dG9tLCBsZWZ0OiBsZWZ0LCB3aWR0aDogd2lkdGgsIGhlaWdodDogaGVpZ2h0IH07XG4gICAgfTtcbiAgICBET01SZWN0UmVhZE9ubHkuZnJvbVJlY3QgPSBmdW5jdGlvbiAocmVjdGFuZ2xlKSB7XG4gICAgICAgIHJldHVybiBuZXcgRE9NUmVjdFJlYWRPbmx5KHJlY3RhbmdsZS54LCByZWN0YW5nbGUueSwgcmVjdGFuZ2xlLndpZHRoLCByZWN0YW5nbGUuaGVpZ2h0KTtcbiAgICB9O1xuICAgIHJldHVybiBET01SZWN0UmVhZE9ubHk7XG59KCkpO1xuZXhwb3J0IHsgRE9NUmVjdFJlYWRPbmx5IH07XG4iLCJ2YXIgaXNTVkcgPSBmdW5jdGlvbiAodGFyZ2V0KSB7IHJldHVybiB0YXJnZXQgaW5zdGFuY2VvZiBTVkdFbGVtZW50ICYmICdnZXRCQm94JyBpbiB0YXJnZXQ7IH07XG52YXIgaXNIaWRkZW4gPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgaWYgKGlzU1ZHKHRhcmdldCkpIHtcbiAgICAgICAgdmFyIF9hID0gdGFyZ2V0LmdldEJCb3goKSwgd2lkdGggPSBfYS53aWR0aCwgaGVpZ2h0ID0gX2EuaGVpZ2h0O1xuICAgICAgICByZXR1cm4gIXdpZHRoICYmICFoZWlnaHQ7XG4gICAgfVxuICAgIHZhciBfYiA9IHRhcmdldCwgb2Zmc2V0V2lkdGggPSBfYi5vZmZzZXRXaWR0aCwgb2Zmc2V0SGVpZ2h0ID0gX2Iub2Zmc2V0SGVpZ2h0O1xuICAgIHJldHVybiAhKG9mZnNldFdpZHRoIHx8IG9mZnNldEhlaWdodCB8fCB0YXJnZXQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGgpO1xufTtcbnZhciBpc0VsZW1lbnQgPSBmdW5jdGlvbiAob2JqKSB7XG4gICAgdmFyIF9hO1xuICAgIGlmIChvYmogaW5zdGFuY2VvZiBFbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICB2YXIgc2NvcGUgPSAoX2EgPSBvYmogPT09IG51bGwgfHwgb2JqID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvYmoub3duZXJEb2N1bWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmRlZmF1bHRWaWV3O1xuICAgIHJldHVybiAhIShzY29wZSAmJiBvYmogaW5zdGFuY2VvZiBzY29wZS5FbGVtZW50KTtcbn07XG52YXIgaXNSZXBsYWNlZEVsZW1lbnQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgc3dpdGNoICh0YXJnZXQudGFnTmFtZSkge1xuICAgICAgICBjYXNlICdJTlBVVCc6XG4gICAgICAgICAgICBpZiAodGFyZ2V0LnR5cGUgIT09ICdpbWFnZScpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgY2FzZSAnVklERU8nOlxuICAgICAgICBjYXNlICdBVURJTyc6XG4gICAgICAgIGNhc2UgJ0VNQkVEJzpcbiAgICAgICAgY2FzZSAnT0JKRUNUJzpcbiAgICAgICAgY2FzZSAnQ0FOVkFTJzpcbiAgICAgICAgY2FzZSAnSUZSQU1FJzpcbiAgICAgICAgY2FzZSAnSU1HJzpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59O1xuZXhwb3J0IHsgaXNTVkcsIGlzSGlkZGVuLCBpc0VsZW1lbnQsIGlzUmVwbGFjZWRFbGVtZW50IH07XG4iLCJleHBvcnQgdmFyIGdsb2JhbCA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDoge307XG4iLCJpbXBvcnQgeyBSZXNpemVPYnNlcnZlckJveE9wdGlvbnMgfSBmcm9tICcuLi9SZXNpemVPYnNlcnZlckJveE9wdGlvbnMnO1xuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXJTaXplIH0gZnJvbSAnLi4vUmVzaXplT2JzZXJ2ZXJTaXplJztcbmltcG9ydCB7IERPTVJlY3RSZWFkT25seSB9IGZyb20gJy4uL0RPTVJlY3RSZWFkT25seSc7XG5pbXBvcnQgeyBpc1NWRywgaXNIaWRkZW4gfSBmcm9tICcuLi91dGlscy9lbGVtZW50JztcbmltcG9ydCB7IGZyZWV6ZSB9IGZyb20gJy4uL3V0aWxzL2ZyZWV6ZSc7XG5pbXBvcnQgeyBnbG9iYWwgfSBmcm9tICcuLi91dGlscy9nbG9iYWwnO1xudmFyIGNhY2hlID0gbmV3IFdlYWtNYXAoKTtcbnZhciBzY3JvbGxSZWdleHAgPSAvYXV0b3xzY3JvbGwvO1xudmFyIHZlcnRpY2FsUmVnZXhwID0gL150Ynx2ZXJ0aWNhbC87XG52YXIgSUUgPSAoL21zaWV8dHJpZGVudC9pKS50ZXN0KGdsb2JhbC5uYXZpZ2F0b3IgJiYgZ2xvYmFsLm5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIHBhcnNlRGltZW5zaW9uID0gZnVuY3Rpb24gKHBpeGVsKSB7IHJldHVybiBwYXJzZUZsb2F0KHBpeGVsIHx8ICcwJyk7IH07XG52YXIgc2l6ZSA9IGZ1bmN0aW9uIChpbmxpbmVTaXplLCBibG9ja1NpemUsIHN3aXRjaFNpemVzKSB7XG4gICAgaWYgKGlubGluZVNpemUgPT09IHZvaWQgMCkgeyBpbmxpbmVTaXplID0gMDsgfVxuICAgIGlmIChibG9ja1NpemUgPT09IHZvaWQgMCkgeyBibG9ja1NpemUgPSAwOyB9XG4gICAgaWYgKHN3aXRjaFNpemVzID09PSB2b2lkIDApIHsgc3dpdGNoU2l6ZXMgPSBmYWxzZTsgfVxuICAgIHJldHVybiBuZXcgUmVzaXplT2JzZXJ2ZXJTaXplKChzd2l0Y2hTaXplcyA/IGJsb2NrU2l6ZSA6IGlubGluZVNpemUpIHx8IDAsIChzd2l0Y2hTaXplcyA/IGlubGluZVNpemUgOiBibG9ja1NpemUpIHx8IDApO1xufTtcbnZhciB6ZXJvQm94ZXMgPSBmcmVlemUoe1xuICAgIGRldmljZVBpeGVsQ29udGVudEJveFNpemU6IHNpemUoKSxcbiAgICBib3JkZXJCb3hTaXplOiBzaXplKCksXG4gICAgY29udGVudEJveFNpemU6IHNpemUoKSxcbiAgICBjb250ZW50UmVjdDogbmV3IERPTVJlY3RSZWFkT25seSgwLCAwLCAwLCAwKVxufSk7XG52YXIgY2FsY3VsYXRlQm94U2l6ZXMgPSBmdW5jdGlvbiAodGFyZ2V0LCBmb3JjZVJlY2FsY3VsYXRpb24pIHtcbiAgICBpZiAoZm9yY2VSZWNhbGN1bGF0aW9uID09PSB2b2lkIDApIHsgZm9yY2VSZWNhbGN1bGF0aW9uID0gZmFsc2U7IH1cbiAgICBpZiAoY2FjaGUuaGFzKHRhcmdldCkgJiYgIWZvcmNlUmVjYWxjdWxhdGlvbikge1xuICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KHRhcmdldCk7XG4gICAgfVxuICAgIGlmIChpc0hpZGRlbih0YXJnZXQpKSB7XG4gICAgICAgIGNhY2hlLnNldCh0YXJnZXQsIHplcm9Cb3hlcyk7XG4gICAgICAgIHJldHVybiB6ZXJvQm94ZXM7XG4gICAgfVxuICAgIHZhciBjcyA9IGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KTtcbiAgICB2YXIgc3ZnID0gaXNTVkcodGFyZ2V0KSAmJiB0YXJnZXQub3duZXJTVkdFbGVtZW50ICYmIHRhcmdldC5nZXRCQm94KCk7XG4gICAgdmFyIHJlbW92ZVBhZGRpbmcgPSAhSUUgJiYgY3MuYm94U2l6aW5nID09PSAnYm9yZGVyLWJveCc7XG4gICAgdmFyIHN3aXRjaFNpemVzID0gdmVydGljYWxSZWdleHAudGVzdChjcy53cml0aW5nTW9kZSB8fCAnJyk7XG4gICAgdmFyIGNhblNjcm9sbFZlcnRpY2FsbHkgPSAhc3ZnICYmIHNjcm9sbFJlZ2V4cC50ZXN0KGNzLm92ZXJmbG93WSB8fCAnJyk7XG4gICAgdmFyIGNhblNjcm9sbEhvcml6b250YWxseSA9ICFzdmcgJiYgc2Nyb2xsUmVnZXhwLnRlc3QoY3Mub3ZlcmZsb3dYIHx8ICcnKTtcbiAgICB2YXIgcGFkZGluZ1RvcCA9IHN2ZyA/IDAgOiBwYXJzZURpbWVuc2lvbihjcy5wYWRkaW5nVG9wKTtcbiAgICB2YXIgcGFkZGluZ1JpZ2h0ID0gc3ZnID8gMCA6IHBhcnNlRGltZW5zaW9uKGNzLnBhZGRpbmdSaWdodCk7XG4gICAgdmFyIHBhZGRpbmdCb3R0b20gPSBzdmcgPyAwIDogcGFyc2VEaW1lbnNpb24oY3MucGFkZGluZ0JvdHRvbSk7XG4gICAgdmFyIHBhZGRpbmdMZWZ0ID0gc3ZnID8gMCA6IHBhcnNlRGltZW5zaW9uKGNzLnBhZGRpbmdMZWZ0KTtcbiAgICB2YXIgYm9yZGVyVG9wID0gc3ZnID8gMCA6IHBhcnNlRGltZW5zaW9uKGNzLmJvcmRlclRvcFdpZHRoKTtcbiAgICB2YXIgYm9yZGVyUmlnaHQgPSBzdmcgPyAwIDogcGFyc2VEaW1lbnNpb24oY3MuYm9yZGVyUmlnaHRXaWR0aCk7XG4gICAgdmFyIGJvcmRlckJvdHRvbSA9IHN2ZyA/IDAgOiBwYXJzZURpbWVuc2lvbihjcy5ib3JkZXJCb3R0b21XaWR0aCk7XG4gICAgdmFyIGJvcmRlckxlZnQgPSBzdmcgPyAwIDogcGFyc2VEaW1lbnNpb24oY3MuYm9yZGVyTGVmdFdpZHRoKTtcbiAgICB2YXIgaG9yaXpvbnRhbFBhZGRpbmcgPSBwYWRkaW5nTGVmdCArIHBhZGRpbmdSaWdodDtcbiAgICB2YXIgdmVydGljYWxQYWRkaW5nID0gcGFkZGluZ1RvcCArIHBhZGRpbmdCb3R0b207XG4gICAgdmFyIGhvcml6b250YWxCb3JkZXJBcmVhID0gYm9yZGVyTGVmdCArIGJvcmRlclJpZ2h0O1xuICAgIHZhciB2ZXJ0aWNhbEJvcmRlckFyZWEgPSBib3JkZXJUb3AgKyBib3JkZXJCb3R0b207XG4gICAgdmFyIGhvcml6b250YWxTY3JvbGxiYXJUaGlja25lc3MgPSAhY2FuU2Nyb2xsSG9yaXpvbnRhbGx5ID8gMCA6IHRhcmdldC5vZmZzZXRIZWlnaHQgLSB2ZXJ0aWNhbEJvcmRlckFyZWEgLSB0YXJnZXQuY2xpZW50SGVpZ2h0O1xuICAgIHZhciB2ZXJ0aWNhbFNjcm9sbGJhclRoaWNrbmVzcyA9ICFjYW5TY3JvbGxWZXJ0aWNhbGx5ID8gMCA6IHRhcmdldC5vZmZzZXRXaWR0aCAtIGhvcml6b250YWxCb3JkZXJBcmVhIC0gdGFyZ2V0LmNsaWVudFdpZHRoO1xuICAgIHZhciB3aWR0aFJlZHVjdGlvbiA9IHJlbW92ZVBhZGRpbmcgPyBob3Jpem9udGFsUGFkZGluZyArIGhvcml6b250YWxCb3JkZXJBcmVhIDogMDtcbiAgICB2YXIgaGVpZ2h0UmVkdWN0aW9uID0gcmVtb3ZlUGFkZGluZyA/IHZlcnRpY2FsUGFkZGluZyArIHZlcnRpY2FsQm9yZGVyQXJlYSA6IDA7XG4gICAgdmFyIGNvbnRlbnRXaWR0aCA9IHN2ZyA/IHN2Zy53aWR0aCA6IHBhcnNlRGltZW5zaW9uKGNzLndpZHRoKSAtIHdpZHRoUmVkdWN0aW9uIC0gdmVydGljYWxTY3JvbGxiYXJUaGlja25lc3M7XG4gICAgdmFyIGNvbnRlbnRIZWlnaHQgPSBzdmcgPyBzdmcuaGVpZ2h0IDogcGFyc2VEaW1lbnNpb24oY3MuaGVpZ2h0KSAtIGhlaWdodFJlZHVjdGlvbiAtIGhvcml6b250YWxTY3JvbGxiYXJUaGlja25lc3M7XG4gICAgdmFyIGJvcmRlckJveFdpZHRoID0gY29udGVudFdpZHRoICsgaG9yaXpvbnRhbFBhZGRpbmcgKyB2ZXJ0aWNhbFNjcm9sbGJhclRoaWNrbmVzcyArIGhvcml6b250YWxCb3JkZXJBcmVhO1xuICAgIHZhciBib3JkZXJCb3hIZWlnaHQgPSBjb250ZW50SGVpZ2h0ICsgdmVydGljYWxQYWRkaW5nICsgaG9yaXpvbnRhbFNjcm9sbGJhclRoaWNrbmVzcyArIHZlcnRpY2FsQm9yZGVyQXJlYTtcbiAgICB2YXIgYm94ZXMgPSBmcmVlemUoe1xuICAgICAgICBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplOiBzaXplKE1hdGgucm91bmQoY29udGVudFdpZHRoICogZGV2aWNlUGl4ZWxSYXRpbyksIE1hdGgucm91bmQoY29udGVudEhlaWdodCAqIGRldmljZVBpeGVsUmF0aW8pLCBzd2l0Y2hTaXplcyksXG4gICAgICAgIGJvcmRlckJveFNpemU6IHNpemUoYm9yZGVyQm94V2lkdGgsIGJvcmRlckJveEhlaWdodCwgc3dpdGNoU2l6ZXMpLFxuICAgICAgICBjb250ZW50Qm94U2l6ZTogc2l6ZShjb250ZW50V2lkdGgsIGNvbnRlbnRIZWlnaHQsIHN3aXRjaFNpemVzKSxcbiAgICAgICAgY29udGVudFJlY3Q6IG5ldyBET01SZWN0UmVhZE9ubHkocGFkZGluZ0xlZnQsIHBhZGRpbmdUb3AsIGNvbnRlbnRXaWR0aCwgY29udGVudEhlaWdodClcbiAgICB9KTtcbiAgICBjYWNoZS5zZXQodGFyZ2V0LCBib3hlcyk7XG4gICAgcmV0dXJuIGJveGVzO1xufTtcbnZhciBjYWxjdWxhdGVCb3hTaXplID0gZnVuY3Rpb24gKHRhcmdldCwgb2JzZXJ2ZWRCb3gsIGZvcmNlUmVjYWxjdWxhdGlvbikge1xuICAgIHZhciBfYSA9IGNhbGN1bGF0ZUJveFNpemVzKHRhcmdldCwgZm9yY2VSZWNhbGN1bGF0aW9uKSwgYm9yZGVyQm94U2l6ZSA9IF9hLmJvcmRlckJveFNpemUsIGNvbnRlbnRCb3hTaXplID0gX2EuY29udGVudEJveFNpemUsIGRldmljZVBpeGVsQ29udGVudEJveFNpemUgPSBfYS5kZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplO1xuICAgIHN3aXRjaCAob2JzZXJ2ZWRCb3gpIHtcbiAgICAgICAgY2FzZSBSZXNpemVPYnNlcnZlckJveE9wdGlvbnMuREVWSUNFX1BJWEVMX0NPTlRFTlRfQk9YOlxuICAgICAgICAgICAgcmV0dXJuIGRldmljZVBpeGVsQ29udGVudEJveFNpemU7XG4gICAgICAgIGNhc2UgUmVzaXplT2JzZXJ2ZXJCb3hPcHRpb25zLkJPUkRFUl9CT1g6XG4gICAgICAgICAgICByZXR1cm4gYm9yZGVyQm94U2l6ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBjb250ZW50Qm94U2l6ZTtcbiAgICB9XG59O1xuZXhwb3J0IHsgY2FsY3VsYXRlQm94U2l6ZSwgY2FsY3VsYXRlQm94U2l6ZXMgfTtcbiIsImltcG9ydCB7IGNhbGN1bGF0ZUJveFNpemVzIH0gZnJvbSAnLi9hbGdvcml0aG1zL2NhbGN1bGF0ZUJveFNpemUnO1xuaW1wb3J0IHsgZnJlZXplIH0gZnJvbSAnLi91dGlscy9mcmVlemUnO1xudmFyIFJlc2l6ZU9ic2VydmVyRW50cnkgPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFJlc2l6ZU9ic2VydmVyRW50cnkodGFyZ2V0KSB7XG4gICAgICAgIHZhciBib3hlcyA9IGNhbGN1bGF0ZUJveFNpemVzKHRhcmdldCk7XG4gICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB0aGlzLmNvbnRlbnRSZWN0ID0gYm94ZXMuY29udGVudFJlY3Q7XG4gICAgICAgIHRoaXMuYm9yZGVyQm94U2l6ZSA9IGZyZWV6ZShbYm94ZXMuYm9yZGVyQm94U2l6ZV0pO1xuICAgICAgICB0aGlzLmNvbnRlbnRCb3hTaXplID0gZnJlZXplKFtib3hlcy5jb250ZW50Qm94U2l6ZV0pO1xuICAgICAgICB0aGlzLmRldmljZVBpeGVsQ29udGVudEJveFNpemUgPSBmcmVlemUoW2JveGVzLmRldmljZVBpeGVsQ29udGVudEJveFNpemVdKTtcbiAgICB9XG4gICAgcmV0dXJuIFJlc2l6ZU9ic2VydmVyRW50cnk7XG59KCkpO1xuZXhwb3J0IHsgUmVzaXplT2JzZXJ2ZXJFbnRyeSB9O1xuIiwiaW1wb3J0IHsgaXNIaWRkZW4gfSBmcm9tICcuLi91dGlscy9lbGVtZW50JztcbnZhciBjYWxjdWxhdGVEZXB0aEZvck5vZGUgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGlmIChpc0hpZGRlbihub2RlKSkge1xuICAgICAgICByZXR1cm4gSW5maW5pdHk7XG4gICAgfVxuICAgIHZhciBkZXB0aCA9IDA7XG4gICAgdmFyIHBhcmVudCA9IG5vZGUucGFyZW50Tm9kZTtcbiAgICB3aGlsZSAocGFyZW50KSB7XG4gICAgICAgIGRlcHRoICs9IDE7XG4gICAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlO1xuICAgIH1cbiAgICByZXR1cm4gZGVwdGg7XG59O1xuZXhwb3J0IHsgY2FsY3VsYXRlRGVwdGhGb3JOb2RlIH07XG4iLCJpbXBvcnQgeyByZXNpemVPYnNlcnZlcnMgfSBmcm9tICcuLi91dGlscy9yZXNpemVPYnNlcnZlcnMnO1xuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXJFbnRyeSB9IGZyb20gJy4uL1Jlc2l6ZU9ic2VydmVyRW50cnknO1xuaW1wb3J0IHsgY2FsY3VsYXRlRGVwdGhGb3JOb2RlIH0gZnJvbSAnLi9jYWxjdWxhdGVEZXB0aEZvck5vZGUnO1xuaW1wb3J0IHsgY2FsY3VsYXRlQm94U2l6ZSB9IGZyb20gJy4vY2FsY3VsYXRlQm94U2l6ZSc7XG52YXIgYnJvYWRjYXN0QWN0aXZlT2JzZXJ2YXRpb25zID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBzaGFsbG93ZXN0RGVwdGggPSBJbmZpbml0eTtcbiAgICB2YXIgY2FsbGJhY2tzID0gW107XG4gICAgcmVzaXplT2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gcHJvY2Vzc09ic2VydmVyKHJvKSB7XG4gICAgICAgIGlmIChyby5hY3RpdmVUYXJnZXRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBlbnRyaWVzID0gW107XG4gICAgICAgIHJvLmFjdGl2ZVRhcmdldHMuZm9yRWFjaChmdW5jdGlvbiBwcm9jZXNzVGFyZ2V0KG90KSB7XG4gICAgICAgICAgICB2YXIgZW50cnkgPSBuZXcgUmVzaXplT2JzZXJ2ZXJFbnRyeShvdC50YXJnZXQpO1xuICAgICAgICAgICAgdmFyIHRhcmdldERlcHRoID0gY2FsY3VsYXRlRGVwdGhGb3JOb2RlKG90LnRhcmdldCk7XG4gICAgICAgICAgICBlbnRyaWVzLnB1c2goZW50cnkpO1xuICAgICAgICAgICAgb3QubGFzdFJlcG9ydGVkU2l6ZSA9IGNhbGN1bGF0ZUJveFNpemUob3QudGFyZ2V0LCBvdC5vYnNlcnZlZEJveCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0RGVwdGggPCBzaGFsbG93ZXN0RGVwdGgpIHtcbiAgICAgICAgICAgICAgICBzaGFsbG93ZXN0RGVwdGggPSB0YXJnZXREZXB0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNhbGxiYWNrcy5wdXNoKGZ1bmN0aW9uIHJlc2l6ZU9ic2VydmVyQ2FsbGJhY2soKSB7XG4gICAgICAgICAgICByby5jYWxsYmFjay5jYWxsKHJvLm9ic2VydmVyLCBlbnRyaWVzLCByby5vYnNlcnZlcik7XG4gICAgICAgIH0pO1xuICAgICAgICByby5hY3RpdmVUYXJnZXRzLnNwbGljZSgwLCByby5hY3RpdmVUYXJnZXRzLmxlbmd0aCk7XG4gICAgfSk7XG4gICAgZm9yICh2YXIgX2kgPSAwLCBjYWxsYmFja3NfMSA9IGNhbGxiYWNrczsgX2kgPCBjYWxsYmFja3NfMS5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgdmFyIGNhbGxiYWNrID0gY2FsbGJhY2tzXzFbX2ldO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH1cbiAgICByZXR1cm4gc2hhbGxvd2VzdERlcHRoO1xufTtcbmV4cG9ydCB7IGJyb2FkY2FzdEFjdGl2ZU9ic2VydmF0aW9ucyB9O1xuIiwiaW1wb3J0IHsgcmVzaXplT2JzZXJ2ZXJzIH0gZnJvbSAnLi4vdXRpbHMvcmVzaXplT2JzZXJ2ZXJzJztcbmltcG9ydCB7IGNhbGN1bGF0ZURlcHRoRm9yTm9kZSB9IGZyb20gJy4vY2FsY3VsYXRlRGVwdGhGb3JOb2RlJztcbnZhciBnYXRoZXJBY3RpdmVPYnNlcnZhdGlvbnNBdERlcHRoID0gZnVuY3Rpb24gKGRlcHRoKSB7XG4gICAgcmVzaXplT2JzZXJ2ZXJzLmZvckVhY2goZnVuY3Rpb24gcHJvY2Vzc09ic2VydmVyKHJvKSB7XG4gICAgICAgIHJvLmFjdGl2ZVRhcmdldHMuc3BsaWNlKDAsIHJvLmFjdGl2ZVRhcmdldHMubGVuZ3RoKTtcbiAgICAgICAgcm8uc2tpcHBlZFRhcmdldHMuc3BsaWNlKDAsIHJvLnNraXBwZWRUYXJnZXRzLmxlbmd0aCk7XG4gICAgICAgIHJvLm9ic2VydmF0aW9uVGFyZ2V0cy5mb3JFYWNoKGZ1bmN0aW9uIHByb2Nlc3NUYXJnZXQob3QpIHtcbiAgICAgICAgICAgIGlmIChvdC5pc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGN1bGF0ZURlcHRoRm9yTm9kZShvdC50YXJnZXQpID4gZGVwdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgcm8uYWN0aXZlVGFyZ2V0cy5wdXNoKG90KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJvLnNraXBwZWRUYXJnZXRzLnB1c2gob3QpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7XG59O1xuZXhwb3J0IHsgZ2F0aGVyQWN0aXZlT2JzZXJ2YXRpb25zQXREZXB0aCB9O1xuIiwiaW1wb3J0IHsgaGFzQWN0aXZlT2JzZXJ2YXRpb25zIH0gZnJvbSAnLi4vYWxnb3JpdGhtcy9oYXNBY3RpdmVPYnNlcnZhdGlvbnMnO1xuaW1wb3J0IHsgaGFzU2tpcHBlZE9ic2VydmF0aW9ucyB9IGZyb20gJy4uL2FsZ29yaXRobXMvaGFzU2tpcHBlZE9ic2VydmF0aW9ucyc7XG5pbXBvcnQgeyBkZWxpdmVyUmVzaXplTG9vcEVycm9yIH0gZnJvbSAnLi4vYWxnb3JpdGhtcy9kZWxpdmVyUmVzaXplTG9vcEVycm9yJztcbmltcG9ydCB7IGJyb2FkY2FzdEFjdGl2ZU9ic2VydmF0aW9ucyB9IGZyb20gJy4uL2FsZ29yaXRobXMvYnJvYWRjYXN0QWN0aXZlT2JzZXJ2YXRpb25zJztcbmltcG9ydCB7IGdhdGhlckFjdGl2ZU9ic2VydmF0aW9uc0F0RGVwdGggfSBmcm9tICcuLi9hbGdvcml0aG1zL2dhdGhlckFjdGl2ZU9ic2VydmF0aW9uc0F0RGVwdGgnO1xudmFyIHByb2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGRlcHRoID0gMDtcbiAgICBnYXRoZXJBY3RpdmVPYnNlcnZhdGlvbnNBdERlcHRoKGRlcHRoKTtcbiAgICB3aGlsZSAoaGFzQWN0aXZlT2JzZXJ2YXRpb25zKCkpIHtcbiAgICAgICAgZGVwdGggPSBicm9hZGNhc3RBY3RpdmVPYnNlcnZhdGlvbnMoKTtcbiAgICAgICAgZ2F0aGVyQWN0aXZlT2JzZXJ2YXRpb25zQXREZXB0aChkZXB0aCk7XG4gICAgfVxuICAgIGlmIChoYXNTa2lwcGVkT2JzZXJ2YXRpb25zKCkpIHtcbiAgICAgICAgZGVsaXZlclJlc2l6ZUxvb3BFcnJvcigpO1xuICAgIH1cbiAgICByZXR1cm4gZGVwdGggPiAwO1xufTtcbmV4cG9ydCB7IHByb2Nlc3MgfTtcbiIsInZhciB0cmlnZ2VyO1xudmFyIGNhbGxiYWNrcyA9IFtdO1xudmFyIG5vdGlmeSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNhbGxiYWNrcy5zcGxpY2UoMCkuZm9yRWFjaChmdW5jdGlvbiAoY2IpIHsgcmV0dXJuIGNiKCk7IH0pOyB9O1xudmFyIHF1ZXVlTWljcm9UYXNrID0gZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0cmlnZ2VyKSB7XG4gICAgICAgIHZhciB0b2dnbGVfMSA9IDA7XG4gICAgICAgIHZhciBlbF8xID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgICAgICB2YXIgY29uZmlnID0geyBjaGFyYWN0ZXJEYXRhOiB0cnVlIH07XG4gICAgICAgIG5ldyBNdXRhdGlvbk9ic2VydmVyKGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5vdGlmeSgpOyB9KS5vYnNlcnZlKGVsXzEsIGNvbmZpZyk7XG4gICAgICAgIHRyaWdnZXIgPSBmdW5jdGlvbiAoKSB7IGVsXzEudGV4dENvbnRlbnQgPSBcIlwiLmNvbmNhdCh0b2dnbGVfMSA/IHRvZ2dsZV8xLS0gOiB0b2dnbGVfMSsrKTsgfTtcbiAgICB9XG4gICAgY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xuICAgIHRyaWdnZXIoKTtcbn07XG5leHBvcnQgeyBxdWV1ZU1pY3JvVGFzayB9O1xuIiwiaW1wb3J0IHsgcXVldWVNaWNyb1Rhc2sgfSBmcm9tICcuL3F1ZXVlTWljcm9UYXNrJztcbnZhciBxdWV1ZVJlc2l6ZU9ic2VydmVyID0gZnVuY3Rpb24gKGNiKSB7XG4gICAgcXVldWVNaWNyb1Rhc2soZnVuY3Rpb24gUmVzaXplT2JzZXJ2ZXIoKSB7XG4gICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShjYik7XG4gICAgfSk7XG59O1xuZXhwb3J0IHsgcXVldWVSZXNpemVPYnNlcnZlciB9O1xuIiwiaW1wb3J0IHsgcHJvY2VzcyB9IGZyb20gJy4vcHJvY2Vzcyc7XG5pbXBvcnQgeyBnbG9iYWwgfSBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgeyBxdWV1ZVJlc2l6ZU9ic2VydmVyIH0gZnJvbSAnLi9xdWV1ZVJlc2l6ZU9ic2VydmVyJztcbnZhciB3YXRjaGluZyA9IDA7XG52YXIgaXNXYXRjaGluZyA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICEhd2F0Y2hpbmc7IH07XG52YXIgQ0FUQ0hfUEVSSU9EID0gMjUwO1xudmFyIG9ic2VydmVyQ29uZmlnID0geyBhdHRyaWJ1dGVzOiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlLCBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfTtcbnZhciBldmVudHMgPSBbXG4gICAgJ3Jlc2l6ZScsXG4gICAgJ2xvYWQnLFxuICAgICd0cmFuc2l0aW9uZW5kJyxcbiAgICAnYW5pbWF0aW9uZW5kJyxcbiAgICAnYW5pbWF0aW9uc3RhcnQnLFxuICAgICdhbmltYXRpb25pdGVyYXRpb24nLFxuICAgICdrZXl1cCcsXG4gICAgJ2tleWRvd24nLFxuICAgICdtb3VzZXVwJyxcbiAgICAnbW91c2Vkb3duJyxcbiAgICAnbW91c2VvdmVyJyxcbiAgICAnbW91c2VvdXQnLFxuICAgICdibHVyJyxcbiAgICAnZm9jdXMnXG5dO1xudmFyIHRpbWUgPSBmdW5jdGlvbiAodGltZW91dCkge1xuICAgIGlmICh0aW1lb3V0ID09PSB2b2lkIDApIHsgdGltZW91dCA9IDA7IH1cbiAgICByZXR1cm4gRGF0ZS5ub3coKSArIHRpbWVvdXQ7XG59O1xudmFyIHNjaGVkdWxlZCA9IGZhbHNlO1xudmFyIFNjaGVkdWxlciA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU2NoZWR1bGVyKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLmxpc3RlbmVyID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gX3RoaXMuc2NoZWR1bGUoKTsgfTtcbiAgICB9XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAodGltZW91dCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICBpZiAodGltZW91dCA9PT0gdm9pZCAwKSB7IHRpbWVvdXQgPSBDQVRDSF9QRVJJT0Q7IH1cbiAgICAgICAgaWYgKHNjaGVkdWxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNjaGVkdWxlZCA9IHRydWU7XG4gICAgICAgIHZhciB1bnRpbCA9IHRpbWUodGltZW91dCk7XG4gICAgICAgIHF1ZXVlUmVzaXplT2JzZXJ2ZXIoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGVsZW1lbnRzSGF2ZVJlc2l6ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudHNIYXZlUmVzaXplZCA9IHByb2Nlc3MoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHNjaGVkdWxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRpbWVvdXQgPSB1bnRpbCAtIHRpbWUoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWlzV2F0Y2hpbmcoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50c0hhdmVSZXNpemVkKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnJ1bigxMDAwKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGltZW91dCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucnVuKHRpbWVvdXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuc3RhcnQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgIHRoaXMucnVuKCk7XG4gICAgfTtcbiAgICBTY2hlZHVsZXIucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBjYiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLm9ic2VydmVyICYmIF90aGlzLm9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuYm9keSwgb2JzZXJ2ZXJDb25maWcpOyB9O1xuICAgICAgICBkb2N1bWVudC5ib2R5ID8gY2IoKSA6IGdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgY2IpO1xuICAgIH07XG4gICAgU2NoZWR1bGVyLnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgaWYgKHRoaXMuc3RvcHBlZCkge1xuICAgICAgICAgICAgdGhpcy5zdG9wcGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5saXN0ZW5lcik7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmUoKTtcbiAgICAgICAgICAgIGV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcihuYW1lLCBfdGhpcy5saXN0ZW5lciwgdHJ1ZSk7IH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBTY2hlZHVsZXIucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGlmICghdGhpcy5zdG9wcGVkKSB7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyICYmIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIGdsb2JhbC5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUsIF90aGlzLmxpc3RlbmVyLCB0cnVlKTsgfSk7XG4gICAgICAgICAgICB0aGlzLnN0b3BwZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gU2NoZWR1bGVyO1xufSgpKTtcbnZhciBzY2hlZHVsZXIgPSBuZXcgU2NoZWR1bGVyKCk7XG52YXIgdXBkYXRlQ291bnQgPSBmdW5jdGlvbiAobikge1xuICAgICF3YXRjaGluZyAmJiBuID4gMCAmJiBzY2hlZHVsZXIuc3RhcnQoKTtcbiAgICB3YXRjaGluZyArPSBuO1xuICAgICF3YXRjaGluZyAmJiBzY2hlZHVsZXIuc3RvcCgpO1xufTtcbmV4cG9ydCB7IHNjaGVkdWxlciwgdXBkYXRlQ291bnQgfTtcbiIsImltcG9ydCB7IFJlc2l6ZU9ic2VydmVyQm94T3B0aW9ucyB9IGZyb20gJy4vUmVzaXplT2JzZXJ2ZXJCb3hPcHRpb25zJztcbmltcG9ydCB7IGNhbGN1bGF0ZUJveFNpemUgfSBmcm9tICcuL2FsZ29yaXRobXMvY2FsY3VsYXRlQm94U2l6ZSc7XG5pbXBvcnQgeyBpc1NWRywgaXNSZXBsYWNlZEVsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2VsZW1lbnQnO1xudmFyIHNraXBOb3RpZnlPbkVsZW1lbnQgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgcmV0dXJuICFpc1NWRyh0YXJnZXQpXG4gICAgICAgICYmICFpc1JlcGxhY2VkRWxlbWVudCh0YXJnZXQpXG4gICAgICAgICYmIGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS5kaXNwbGF5ID09PSAnaW5saW5lJztcbn07XG52YXIgUmVzaXplT2JzZXJ2YXRpb24gPSAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFJlc2l6ZU9ic2VydmF0aW9uKHRhcmdldCwgb2JzZXJ2ZWRCb3gpIHtcbiAgICAgICAgdGhpcy50YXJnZXQgPSB0YXJnZXQ7XG4gICAgICAgIHRoaXMub2JzZXJ2ZWRCb3ggPSBvYnNlcnZlZEJveCB8fCBSZXNpemVPYnNlcnZlckJveE9wdGlvbnMuQ09OVEVOVF9CT1g7XG4gICAgICAgIHRoaXMubGFzdFJlcG9ydGVkU2l6ZSA9IHtcbiAgICAgICAgICAgIGlubGluZVNpemU6IDAsXG4gICAgICAgICAgICBibG9ja1NpemU6IDBcbiAgICAgICAgfTtcbiAgICB9XG4gICAgUmVzaXplT2JzZXJ2YXRpb24ucHJvdG90eXBlLmlzQWN0aXZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2l6ZSA9IGNhbGN1bGF0ZUJveFNpemUodGhpcy50YXJnZXQsIHRoaXMub2JzZXJ2ZWRCb3gsIHRydWUpO1xuICAgICAgICBpZiAoc2tpcE5vdGlmeU9uRWxlbWVudCh0aGlzLnRhcmdldCkpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdFJlcG9ydGVkU2l6ZSA9IHNpemU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubGFzdFJlcG9ydGVkU2l6ZS5pbmxpbmVTaXplICE9PSBzaXplLmlubGluZVNpemVcbiAgICAgICAgICAgIHx8IHRoaXMubGFzdFJlcG9ydGVkU2l6ZS5ibG9ja1NpemUgIT09IHNpemUuYmxvY2tTaXplKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2YXRpb247XG59KCkpO1xuZXhwb3J0IHsgUmVzaXplT2JzZXJ2YXRpb24gfTtcbiIsInZhciBSZXNpemVPYnNlcnZlckRldGFpbCA9IChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gUmVzaXplT2JzZXJ2ZXJEZXRhaWwocmVzaXplT2JzZXJ2ZXIsIGNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlVGFyZ2V0cyA9IFtdO1xuICAgICAgICB0aGlzLnNraXBwZWRUYXJnZXRzID0gW107XG4gICAgICAgIHRoaXMub2JzZXJ2YXRpb25UYXJnZXRzID0gW107XG4gICAgICAgIHRoaXMub2JzZXJ2ZXIgPSByZXNpemVPYnNlcnZlcjtcbiAgICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgIH1cbiAgICByZXR1cm4gUmVzaXplT2JzZXJ2ZXJEZXRhaWw7XG59KCkpO1xuZXhwb3J0IHsgUmVzaXplT2JzZXJ2ZXJEZXRhaWwgfTtcbiIsImltcG9ydCB7IHNjaGVkdWxlciwgdXBkYXRlQ291bnQgfSBmcm9tICcuL3V0aWxzL3NjaGVkdWxlcic7XG5pbXBvcnQgeyBSZXNpemVPYnNlcnZhdGlvbiB9IGZyb20gJy4vUmVzaXplT2JzZXJ2YXRpb24nO1xuaW1wb3J0IHsgUmVzaXplT2JzZXJ2ZXJEZXRhaWwgfSBmcm9tICcuL1Jlc2l6ZU9ic2VydmVyRGV0YWlsJztcbmltcG9ydCB7IHJlc2l6ZU9ic2VydmVycyB9IGZyb20gJy4vdXRpbHMvcmVzaXplT2JzZXJ2ZXJzJztcbnZhciBvYnNlcnZlck1hcCA9IG5ldyBXZWFrTWFwKCk7XG52YXIgZ2V0T2JzZXJ2YXRpb25JbmRleCA9IGZ1bmN0aW9uIChvYnNlcnZhdGlvblRhcmdldHMsIHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JzZXJ2YXRpb25UYXJnZXRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChvYnNlcnZhdGlvblRhcmdldHNbaV0udGFyZ2V0ID09PSB0YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiAtMTtcbn07XG52YXIgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIoKSB7XG4gICAgfVxuICAgIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5jb25uZWN0ID0gZnVuY3Rpb24gKHJlc2l6ZU9ic2VydmVyLCBjYWxsYmFjaykge1xuICAgICAgICB2YXIgZGV0YWlsID0gbmV3IFJlc2l6ZU9ic2VydmVyRGV0YWlsKHJlc2l6ZU9ic2VydmVyLCBjYWxsYmFjayk7XG4gICAgICAgIG9ic2VydmVyTWFwLnNldChyZXNpemVPYnNlcnZlciwgZGV0YWlsKTtcbiAgICB9O1xuICAgIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5vYnNlcnZlID0gZnVuY3Rpb24gKHJlc2l6ZU9ic2VydmVyLCB0YXJnZXQsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIGRldGFpbCA9IG9ic2VydmVyTWFwLmdldChyZXNpemVPYnNlcnZlcik7XG4gICAgICAgIHZhciBmaXJzdE9ic2VydmF0aW9uID0gZGV0YWlsLm9ic2VydmF0aW9uVGFyZ2V0cy5sZW5ndGggPT09IDA7XG4gICAgICAgIGlmIChnZXRPYnNlcnZhdGlvbkluZGV4KGRldGFpbC5vYnNlcnZhdGlvblRhcmdldHMsIHRhcmdldCkgPCAwKSB7XG4gICAgICAgICAgICBmaXJzdE9ic2VydmF0aW9uICYmIHJlc2l6ZU9ic2VydmVycy5wdXNoKGRldGFpbCk7XG4gICAgICAgICAgICBkZXRhaWwub2JzZXJ2YXRpb25UYXJnZXRzLnB1c2gobmV3IFJlc2l6ZU9ic2VydmF0aW9uKHRhcmdldCwgb3B0aW9ucyAmJiBvcHRpb25zLmJveCkpO1xuICAgICAgICAgICAgdXBkYXRlQ291bnQoMSk7XG4gICAgICAgICAgICBzY2hlZHVsZXIuc2NoZWR1bGUoKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLnVub2JzZXJ2ZSA9IGZ1bmN0aW9uIChyZXNpemVPYnNlcnZlciwgdGFyZ2V0KSB7XG4gICAgICAgIHZhciBkZXRhaWwgPSBvYnNlcnZlck1hcC5nZXQocmVzaXplT2JzZXJ2ZXIpO1xuICAgICAgICB2YXIgaW5kZXggPSBnZXRPYnNlcnZhdGlvbkluZGV4KGRldGFpbC5vYnNlcnZhdGlvblRhcmdldHMsIHRhcmdldCk7XG4gICAgICAgIHZhciBsYXN0T2JzZXJ2YXRpb24gPSBkZXRhaWwub2JzZXJ2YXRpb25UYXJnZXRzLmxlbmd0aCA9PT0gMTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGxhc3RPYnNlcnZhdGlvbiAmJiByZXNpemVPYnNlcnZlcnMuc3BsaWNlKHJlc2l6ZU9ic2VydmVycy5pbmRleE9mKGRldGFpbCksIDEpO1xuICAgICAgICAgICAgZGV0YWlsLm9ic2VydmF0aW9uVGFyZ2V0cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgdXBkYXRlQ291bnQoLTEpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIuZGlzY29ubmVjdCA9IGZ1bmN0aW9uIChyZXNpemVPYnNlcnZlcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgZGV0YWlsID0gb2JzZXJ2ZXJNYXAuZ2V0KHJlc2l6ZU9ic2VydmVyKTtcbiAgICAgICAgZGV0YWlsLm9ic2VydmF0aW9uVGFyZ2V0cy5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24gKG90KSB7IHJldHVybiBfdGhpcy51bm9ic2VydmUocmVzaXplT2JzZXJ2ZXIsIG90LnRhcmdldCk7IH0pO1xuICAgICAgICBkZXRhaWwuYWN0aXZlVGFyZ2V0cy5zcGxpY2UoMCwgZGV0YWlsLmFjdGl2ZVRhcmdldHMubGVuZ3RoKTtcbiAgICB9O1xuICAgIHJldHVybiBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXI7XG59KCkpO1xuZXhwb3J0IHsgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyIH07XG4iLCJpbXBvcnQgeyBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIgfSBmcm9tICcuL1Jlc2l6ZU9ic2VydmVyQ29udHJvbGxlcic7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tICcuL3V0aWxzL2VsZW1lbnQnO1xudmFyIFJlc2l6ZU9ic2VydmVyID0gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBSZXNpemVPYnNlcnZlcihjYWxsYmFjaykge1xuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBjb25zdHJ1Y3QgJ1Jlc2l6ZU9ic2VydmVyJzogMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50LlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUmVzaXplT2JzZXJ2ZXInOiBUaGUgY2FsbGJhY2sgcHJvdmlkZWQgYXMgcGFyYW1ldGVyIDEgaXMgbm90IGEgZnVuY3Rpb24uXCIpO1xuICAgICAgICB9XG4gICAgICAgIFJlc2l6ZU9ic2VydmVyQ29udHJvbGxlci5jb25uZWN0KHRoaXMsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgUmVzaXplT2JzZXJ2ZXIucHJvdG90eXBlLm9ic2VydmUgPSBmdW5jdGlvbiAodGFyZ2V0LCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ29ic2VydmUnIG9uICdSZXNpemVPYnNlcnZlcic6IDEgYXJndW1lbnQgcmVxdWlyZWQsIGJ1dCBvbmx5IDAgcHJlc2VudC5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc0VsZW1lbnQodGFyZ2V0KSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZhaWxlZCB0byBleGVjdXRlICdvYnNlcnZlJyBvbiAnUmVzaXplT2JzZXJ2ZXInOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRWxlbWVudFwiKTtcbiAgICAgICAgfVxuICAgICAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIub2JzZXJ2ZSh0aGlzLCB0YXJnZXQsIG9wdGlvbnMpO1xuICAgIH07XG4gICAgUmVzaXplT2JzZXJ2ZXIucHJvdG90eXBlLnVub2JzZXJ2ZSA9IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAndW5vYnNlcnZlJyBvbiAnUmVzaXplT2JzZXJ2ZXInOiAxIGFyZ3VtZW50IHJlcXVpcmVkLCBidXQgb25seSAwIHByZXNlbnQuXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFbGVtZW50KHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGYWlsZWQgdG8gZXhlY3V0ZSAndW5vYnNlcnZlJyBvbiAnUmVzaXplT2JzZXJ2ZXInOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRWxlbWVudFwiKTtcbiAgICAgICAgfVxuICAgICAgICBSZXNpemVPYnNlcnZlckNvbnRyb2xsZXIudW5vYnNlcnZlKHRoaXMsIHRhcmdldCk7XG4gICAgfTtcbiAgICBSZXNpemVPYnNlcnZlci5wcm90b3R5cGUuZGlzY29ubmVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyLmRpc2Nvbm5lY3QodGhpcyk7XG4gICAgfTtcbiAgICBSZXNpemVPYnNlcnZlci50b1N0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICdmdW5jdGlvbiBSZXNpemVPYnNlcnZlciAoKSB7IFtwb2x5ZmlsbCBjb2RlXSB9JztcbiAgICB9O1xuICAgIHJldHVybiBSZXNpemVPYnNlcnZlcjtcbn0oKSk7XG5leHBvcnQgeyBSZXNpemVPYnNlcnZlciB9O1xuIl0sIm5hbWVzIjpbIlJlc2l6ZU9ic2VydmVyQm94T3B0aW9ucyIsIlJlc2l6ZU9ic2VydmVyU2l6ZSIsIkRPTVJlY3RSZWFkT25seSIsIlJlc2l6ZU9ic2VydmVyRW50cnkiLCJjYWxsYmFja3MiLCJSZXNpemVPYnNlcnZlciIsIlNjaGVkdWxlciIsIlJlc2l6ZU9ic2VydmF0aW9uIiwic2l6ZSIsIlJlc2l6ZU9ic2VydmVyRGV0YWlsIiwiUmVzaXplT2JzZXJ2ZXJDb250cm9sbGVyIl0sIm1hcHBpbmdzIjoiQUFBQSxJQUFJLGtCQUFrQixDQUFFO0FDQ3hCLElBQUksd0JBQXdCLFdBQVk7QUFDcEMsU0FBTyxnQkFBZ0IsS0FBSyxTQUFVLElBQUk7QUFBRSxXQUFPLEdBQUcsY0FBYyxTQUFTO0FBQUEsRUFBRSxDQUFFO0FBQ3JGO0FDRkEsSUFBSSx5QkFBeUIsV0FBWTtBQUNyQyxTQUFPLGdCQUFnQixLQUFLLFNBQVUsSUFBSTtBQUFFLFdBQU8sR0FBRyxlQUFlLFNBQVM7QUFBQSxFQUFFLENBQUU7QUFDdEY7QUNIQSxJQUFJLE1BQU07QUFDVixJQUFJLHlCQUF5QixXQUFZO0FBQ3JDLE1BQUk7QUFDSixNQUFJLE9BQU8sZUFBZSxZQUFZO0FBQ2xDLFlBQVEsSUFBSSxXQUFXLFNBQVM7QUFBQSxNQUM1QixTQUFTO0FBQUEsSUFDckIsQ0FBUztBQUFBLEVBQ0osT0FDSTtBQUNELFlBQVEsU0FBUyxZQUFZLE9BQU87QUFDcEMsVUFBTSxVQUFVLFNBQVMsT0FBTyxLQUFLO0FBQ3JDLFVBQU0sVUFBVTtBQUFBLEVBQ25CO0FBQ0QsU0FBTyxjQUFjLEtBQUs7QUFDOUI7QUNkQSxJQUFJO0FBQUEsQ0FDSCxTQUFVQSwyQkFBMEI7QUFDakMsRUFBQUEsMEJBQXlCLFlBQVksSUFBSTtBQUN6QyxFQUFBQSwwQkFBeUIsYUFBYSxJQUFJO0FBQzFDLEVBQUFBLDBCQUF5QiwwQkFBMEIsSUFBSTtBQUMzRCxHQUFHLDZCQUE2QiwyQkFBMkIsQ0FBQSxFQUFHO0FDTHZELElBQUksU0FBUyxTQUFVLEtBQUs7QUFBRSxTQUFPLE9BQU8sT0FB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QUFHO0FBQ3hCLFlBQU0sSUFBSSxVQUFVLGdGQUFnRjtBQUFBLElBQ3ZHO0FBQ0QsUUFBSSxPQUFPLGFBQWEsWUFBWTtBQUNoQyxZQUFNLElBQUksVUFBVSwrRkFBK0Y7QUFBQSxJQUN0SDtBQUNELDZCQUF5QixRQUFRLE1BQU0sUUFBUTtBQUFBLEVBQ2xEO0FBQ0QsRUFBQUEsZ0JBQWUsVUFBVSxVQUFVLFNBQVUsUUFBUSxTQUFTO0FBQzFELFFBQUksVUFBVSxXQUFXLEdBQUc7QUFDeEIsWUFBTSxJQUFJLFVBQVUsMkZBQTJGO0FBQUEsSUFDbEg7QUFDRCxRQUFJLENBQUMsVUFBVSxNQUFNLEdBQUc7QUFDcEIsWUFBTSxJQUFJLFVBQVUsc0ZBQXNGO0FBQUEsSUFDN0c7QUFDRCw2QkFBeUIsUUFBUSxNQUFNLFFBQVEsT0FBTztBQUFBLEVBQzlEO0FBQ0ksRUFBQUEsZ0JBQWUsVUFBVSxZQUFZLFNBQVUsUUFBUTtBQUNuRCxRQUFJLFVBQVUsV0FBVyxHQUFHO0FBQ3hCLFlBQU0sSUFBSSxVQUFVLDZGQUE2RjtBQUFBLElBQ3BIO0FBQ0QsUUFBSSxDQUFDLFVBQVUsTUFBTSxHQUFHO0FBQ3BCLFlBQU0sSUFBSSxVQUFVLHdGQUF3RjtBQUFBLElBQy9HO0FBQ0QsNkJBQXlCLFVBQVUsTUFBTSxNQUFNO0FBQUEsRUFDdkQ7QUFDSSxFQUFBQSxnQkFBZSxVQUFVLGFBQWEsV0FBWTtBQUM5Qyw2QkFBeUIsV0FBVyxJQUFJO0FBQUEsRUFDaEQ7QUFDSSxFQUFBQSxnQkFBZSxXQUFXLFdBQVk7QUFDbEMsV0FBTztBQUFBLEVBQ2Y7QUFDSSxTQUFPQTtBQUNYLEVBQUc7IiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjJdfQ==
|