easy-richtextarea 4.0.26 → 4.0.28

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.
@@ -11,6 +11,7 @@ Object.defineProperty(exports, "default", {
11
11
  var _easy = require("easy");
12
12
  var _selection = /*#__PURE__*/ _interopRequireDefault(require("./selection"));
13
13
  var _undoBuffer = /*#__PURE__*/ _interopRequireDefault(require("./undoBuffer"));
14
+ var _event = /*#__PURE__*/ _interopRequireDefault(require("./mixins/event"));
14
15
  var _insert = /*#__PURE__*/ _interopRequireDefault(require("./operation/insert"));
15
16
  var _delete = /*#__PURE__*/ _interopRequireDefault(require("./operation/delete"));
16
17
  var _content = /*#__PURE__*/ _interopRequireDefault(require("./transform/content"));
@@ -211,77 +212,26 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
211
212
  _classCallCheck(this, RichTextarea);
212
213
  var _this;
213
214
  _this = _super.call(this, selector);
214
- _defineProperty(_assertThisInitialized(_this), "intermediateHandler", function(event, element) {
215
- var undoable = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true, eventType = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : _eventTypes.CHANGE_EVENT_TYPE, selectionChanged = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : _this.hasSelectionChanged();
216
- if (_this.readOnly) {
217
- var previousContent = _this.getPreviousContent(), content = previousContent; ///
218
- _this.setContent(content);
219
- }
220
- var content1 = _this.getContent(), selection = _this.getSelection(), contentChanged = _this.hasContentChanged(), changed = contentChanged || selectionChanged;
221
- if (changed) {
222
- _this.callHandlers(eventType, event, element);
223
- }
224
- if (undoable) {
225
- if (contentChanged) {
226
- var previousContent1 = _this.getPreviousContent(), operations = (0, _generate.default)(previousContent1, content1);
227
- _this.undoBuffer.addOperations(operations);
228
- }
229
- }
230
- var previousContent2 = content1, previousSelection = selection; ///
231
- _this.setPreviousContent(previousContent2);
232
- _this.setPreviousSelection(previousSelection);
233
- });
234
- _defineProperty(_assertThisInitialized(_this), "selectChangeHandler", function(event, element) {
235
- if (_this.focused) {
236
- element = _assertThisInitialized(_this); ///
237
- _this.intermediateHandler(event, element);
215
+ _defineProperty(_assertThisInitialized(_this), "cutHandler", function(event, element) {
216
+ var selection = _this.getSelection(), selectionEmpty = selection.isEmpty();
217
+ if (selectionEmpty) {
218
+ return;
238
219
  }
239
- });
240
- _defineProperty(_assertThisInitialized(_this), "contextmenuHandler", function(event, element) {
220
+ var selectedContent = _this.getSelectedContent();
221
+ navigator.clipboard.writeText(selectedContent);
222
+ var content = _this.getContent(), deleteOperation = _delete.default.fromContentAndSelection(content, selection), operation = deleteOperation; ///
223
+ _this.applyOperation(operation);
224
+ _this.intermediateHandler(event, element);
241
225
  event.preventDefault();
242
226
  });
243
- _defineProperty(_assertThisInitialized(_this), "keyDownHandler", function(event, element) {
244
- var ctrlKey = event.ctrlKey, metaKey = event.metaKey;
245
- if (ctrlKey || metaKey) {
246
- var keyCode = event.keyCode;
247
- switch(keyCode){
248
- case _keyCodes.F_KEY_CODE:
249
- {
250
- _this.find(event, element);
251
- event.preventDefault();
252
- return;
253
- }
254
- case _keyCodes.Z_KEY_CODE:
255
- {
256
- var shiftKey = event.shiftKey;
257
- shiftKey ? _this.redo(event, element) : _this.undo(event, element);
258
- event.preventDefault();
259
- return;
260
- }
261
- }
227
+ _defineProperty(_assertThisInitialized(_this), "copyHandler", function(event, element) {
228
+ var selection = _this.getSelection(), selectionEmpty = selection.isEmpty();
229
+ if (selectionEmpty) {
230
+ return;
262
231
  }
263
- defer(function() {
264
- _this.intermediateHandler(event, element);
265
- });
266
- });
267
- _defineProperty(_assertThisInitialized(_this), "scrollHandler", function(event, element) {
268
- var eventType = _eventTypes.SCROLL_EVENT_TYPE;
269
- _this.callHandlers(eventType, event, element);
270
- });
271
- _defineProperty(_assertThisInitialized(_this), "focusHandler", function(event, element) {
272
- _this.focused = true;
273
- defer(function() {
274
- var undoable = true, eventType = _eventTypes.FOCUS_EVENT_TYPE, selectionChanged = true;
275
- _this.intermediateHandler(event, element, undoable, eventType, selectionChanged);
276
- });
277
- });
278
- _defineProperty(_assertThisInitialized(_this), "blurHandler", function(event, element) {
279
- _this.focused = false;
280
- var undoable = true, eventType = _eventTypes.BLUR_EVENT_TYPE, selectionChanged = true;
281
- _this.intermediateHandler(event, element, undoable, eventType, selectionChanged);
282
- });
283
- _defineProperty(_assertThisInitialized(_this), "inputHandler", function(event, element) {
284
- _this.intermediateHandler(event, element);
232
+ var selectedContent = _this.getSelectedContent();
233
+ navigator.clipboard.writeText(selectedContent);
234
+ event.preventDefault();
285
235
  });
286
236
  _defineProperty(_assertThisInitialized(_this), "pasteHandler", function(event, element) {
287
237
  var clipboardData = event.clipboardData, textData = clipboardData.getData(_constants.TEXT);
@@ -298,26 +248,72 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
298
248
  _this.intermediateHandler(event, element);
299
249
  event.preventDefault();
300
250
  });
301
- _defineProperty(_assertThisInitialized(_this), "copyHandler", function(event, element) {
302
- var selection = _this.getSelection(), selectionEmpty = selection.isEmpty();
303
- if (selectionEmpty) {
251
+ _defineProperty(_assertThisInitialized(_this), "inputHandler", function(event, element) {
252
+ _this.intermediateHandler(event, element);
253
+ });
254
+ _defineProperty(_assertThisInitialized(_this), "blurHandler", function(event, element) {
255
+ _this.focused = false;
256
+ var undoable = true, eventType = _eventTypes.BLUR_EVENT_TYPE, selectionChanged = true;
257
+ _this.intermediateHandler(event, element, undoable, eventType, selectionChanged);
258
+ });
259
+ _defineProperty(_assertThisInitialized(_this), "focusHandler", function(event, element) {
260
+ _this.focused = true;
261
+ defer(function() {
262
+ var undoable = true, eventType = _eventTypes.FOCUS_EVENT_TYPE, selectionChanged = true;
263
+ _this.intermediateHandler(event, element, undoable, eventType, selectionChanged);
264
+ });
265
+ });
266
+ _defineProperty(_assertThisInitialized(_this), "scrollHandler", function(event, element) {
267
+ var eventType = _eventTypes.SCROLL_EVENT_TYPE;
268
+ _this.callHandlers(eventType, event, element);
269
+ });
270
+ _defineProperty(_assertThisInitialized(_this), "keyDownHandler", function(event, element) {
271
+ var preventDefault = false;
272
+ var keyCode = event.keyCode;
273
+ switch(keyCode){
274
+ case _keyCodes.Z_KEY_CODE:
275
+ preventDefault = _this.zKeyDown(event, element);
276
+ break;
277
+ case _keyCodes.F_KEY_CODE:
278
+ preventDefault = _this.fKeyDown(event, element);
279
+ break;
280
+ }
281
+ if (preventDefault) {
282
+ event.preventDefault();
304
283
  return;
305
284
  }
306
- var selectedContent = _this.getSelectedContent();
307
- navigator.clipboard.writeText(selectedContent);
285
+ defer(function() {
286
+ _this.intermediateHandler(event, element);
287
+ });
288
+ });
289
+ _defineProperty(_assertThisInitialized(_this), "contextmenuHandler", function(event, element) {
308
290
  event.preventDefault();
309
291
  });
310
- _defineProperty(_assertThisInitialized(_this), "cutHandler", function(event, element) {
311
- var selection = _this.getSelection(), selectionEmpty = selection.isEmpty();
312
- if (selectionEmpty) {
313
- return;
292
+ _defineProperty(_assertThisInitialized(_this), "selectChangeHandler", function(event, element) {
293
+ if (_this.focused) {
294
+ element = _assertThisInitialized(_this); ///
295
+ _this.intermediateHandler(event, element);
314
296
  }
315
- var selectedContent = _this.getSelectedContent();
316
- navigator.clipboard.writeText(selectedContent);
317
- var content = _this.getContent(), deleteOperation = _delete.default.fromContentAndSelection(content, selection), operation = deleteOperation; ///
318
- _this.applyOperation(operation);
319
- _this.intermediateHandler(event, element);
320
- event.preventDefault();
297
+ });
298
+ _defineProperty(_assertThisInitialized(_this), "intermediateHandler", function(event, element) {
299
+ var undoable = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : true, eventType = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : _eventTypes.CHANGE_EVENT_TYPE, selectionChanged = arguments.length > 4 && arguments[4] !== void 0 ? arguments[4] : _this.hasSelectionChanged();
300
+ if (_this.readOnly) {
301
+ var previousContent = _this.getPreviousContent(), content = previousContent; ///
302
+ _this.setContent(content);
303
+ }
304
+ var content1 = _this.getContent(), selection = _this.getSelection(), contentChanged = _this.hasContentChanged(), changed = contentChanged || selectionChanged;
305
+ if (changed) {
306
+ _this.callHandlers(eventType, event, element);
307
+ }
308
+ if (undoable) {
309
+ if (contentChanged) {
310
+ var previousContent1 = _this.getPreviousContent(), operations = (0, _generate.default)(previousContent1, content1);
311
+ _this.undoBuffer.addOperations(operations);
312
+ }
313
+ }
314
+ var previousContent2 = content1, previousSelection = selection; ///
315
+ _this.setPreviousContent(previousContent2);
316
+ _this.setPreviousSelection(previousSelection);
321
317
  });
322
318
  _this.focused = focused;
323
319
  _this.readOnly = readOnly;
@@ -355,6 +351,29 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
355
351
  this.readOnly = readOnly;
356
352
  }
357
353
  },
354
+ {
355
+ key: "callHandlers",
356
+ value: function callHandlers(eventType) {
357
+ for(var _len = arguments.length, remainingArguments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
358
+ remainingArguments[_key - 1] = arguments[_key];
359
+ }
360
+ var _this = this;
361
+ var eventListeners = this.findEventListeners(eventType);
362
+ eventListeners.forEach(function(eventListener) {
363
+ var element = eventListener.element;
364
+ var handler = eventListener.handler, handlerElement = element; ///
365
+ element = _this; ///
366
+ if (handler !== _this.cutHandler && handler !== _this.copyHandler && handler !== _this.pasteHandler && handler !== _this.inputHandler && handler !== _this.blurHandler && handler !== _this.focusHandler && handler !== _this.scrollHandler && handler !== _this.keyDownHandler && handler !== _this.contextmenuHandler && handler !== _this.selectChangeHandler) {
367
+ var _handler;
368
+ (_handler = handler).call.apply(_handler, [
369
+ handlerElement
370
+ ].concat(_toConsumableArray(remainingArguments), [
371
+ element
372
+ ]));
373
+ }
374
+ });
375
+ }
376
+ },
358
377
  {
359
378
  key: "isActive",
360
379
  value: function isActive() {
@@ -424,39 +443,34 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
424
443
  }
425
444
  },
426
445
  {
427
- key: "find",
428
- value: function find(event, element) {
429
- var eventType = _eventTypes.FIND_EVENT_TYPE;
430
- this.callHandlers(eventType, event, element);
431
- }
432
- },
433
- {
434
- key: "undo",
435
- value: function undo(event, element) {
436
- var undoOperation = this.undoBuffer.undo();
437
- if (undoOperation !== null) {
438
- var operation = undoOperation; ///
439
- this.revert(event, element, operation);
446
+ key: "fKeyDown",
447
+ value: function fKeyDown(event, element) {
448
+ var preventDefault = false;
449
+ var ctrlKey = event.ctrlKey, metaKey = event.metaKey;
450
+ if (ctrlKey || metaKey) {
451
+ var eventType = _eventTypes.FIND_EVENT_TYPE;
452
+ this.callHandlers(eventType, event, element);
453
+ preventDefault = true;
440
454
  }
455
+ return preventDefault;
441
456
  }
442
457
  },
443
458
  {
444
- key: "redo",
445
- value: function redo(event, element) {
446
- var redoOperation = this.undoBuffer.redo();
447
- if (redoOperation !== null) {
448
- var operation = redoOperation; ///
449
- this.revert(event, element, operation);
459
+ key: "zKeyDown",
460
+ value: function zKeyDown(event, element) {
461
+ var preventDefault = false;
462
+ var ctrlKey = event.ctrlKey, metaKey = event.metaKey, shiftKey = event.shiftKey;
463
+ if (ctrlKey || metaKey) {
464
+ var operation = shiftKey ? this.undoBuffer.redo() : this.undoBuffer.undo();
465
+ if (operation !== null) {
466
+ var undoable = false, eventType = _eventTypes.CHANGE_EVENT_TYPE, selection = _selection.default.fromOperation(operation), setPreviousSelection = false;
467
+ this.applyOperation(operation);
468
+ this.setSelection(selection, setPreviousSelection);
469
+ this.intermediateHandler(event, element, undoable, eventType);
470
+ }
471
+ preventDefault = true;
450
472
  }
451
- }
452
- },
453
- {
454
- key: "revert",
455
- value: function revert(event, element, operation) {
456
- var undoable = false, selection = _selection.default.fromOperation(operation), setPreviousSelection = false;
457
- this.applyOperation(operation);
458
- this.setSelection(selection, setPreviousSelection);
459
- this.intermediateHandler(event, element, undoable);
473
+ return preventDefault;
460
474
  }
461
475
  },
462
476
  {
@@ -474,29 +488,6 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
474
488
  this.intermediateHandler(event, element, undoable, eventType);
475
489
  }
476
490
  },
477
- {
478
- key: "callHandlers",
479
- value: function callHandlers(eventType) {
480
- for(var _len = arguments.length, remainingArguments = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++){
481
- remainingArguments[_key - 1] = arguments[_key];
482
- }
483
- var _this = this;
484
- var eventListeners = this.findEventListeners(eventType);
485
- eventListeners.forEach(function(eventListener) {
486
- var element = eventListener.element;
487
- var handler = eventListener.handler, handlerElement = element; ///
488
- element = _this; ///
489
- if (handler !== _this.blurHandler && handler !== _this.focusHandler && handler !== _this.scrollHandler) {
490
- var _handler;
491
- (_handler = handler).call.apply(_handler, [
492
- handlerElement
493
- ].concat(_toConsumableArray(remainingArguments), [
494
- element
495
- ]));
496
- }
497
- });
498
- }
499
- },
500
491
  {
501
492
  key: "applyOperation",
502
493
  value: function applyOperation(operation) {
@@ -512,95 +503,35 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
512
503
  {
513
504
  key: "activate",
514
505
  value: function activate() {
515
- this.on(_eventTypes.KEYDOWN_EVENT_TYPE, this.keyDownHandler, this);
516
- this.on(_eventTypes.INPUT_EVENT_TYPE, this.inputHandler, this);
517
- this.on(_eventTypes.SCROLL_EVENT_TYPE, this.scrollHandler, this);
518
- this.on(_eventTypes.FOCUS_EVENT_TYPE, this.focusHandler, this);
519
- this.on(_eventTypes.BLUR_EVENT_TYPE, this.blurHandler, this);
506
+ this.on(_eventTypes.CUT_EVENT_TYPE, this.cutHandler);
507
+ this.on(_eventTypes.COPY_EVENT_TYPE, this.copyHandler);
508
+ this.on(_eventTypes.PASTE_EVENT_TYPE, this.pasteHandler);
509
+ this.on(_eventTypes.INPUT_EVENT_TYPE, this.inputHandler);
510
+ this.on(_eventTypes.BLUR_EVENT_TYPE, this.blurHandler);
511
+ this.on(_eventTypes.FOCUS_EVENT_TYPE, this.focusHandler);
512
+ this.on(_eventTypes.SCROLL_EVENT_TYPE, this.scrollHandler);
513
+ this.on(_eventTypes.KEYDOWN_EVENT_TYPE, this.keyDownHandler);
514
+ this.on(_eventTypes.CONTEXTMENU_EVENT_TYPE, this.contextmenuHandler);
515
+ _easy.document.on(_eventTypes.SELECTIONCHANGE_EVENT_TYPE, this.selectChangeHandler);
520
516
  this.addClass("active");
521
517
  }
522
518
  },
523
519
  {
524
520
  key: "deactivate",
525
521
  value: function deactivate() {
526
- this.off(_eventTypes.KEYDOWN_EVENT_TYPE, this.keyDownHandler, this);
527
- this.off(_eventTypes.INPUT_EVENT_TYPE, this.inputHandler, this);
528
- this.off(_eventTypes.SCROLL_EVENT_TYPE, this.scrollHandler, this);
529
- this.off(_eventTypes.FOCUS_EVENT_TYPE, this.focusHandler, this);
530
- this.off(_eventTypes.BLUR_EVENT_TYPE, this.blurHandler, this);
522
+ this.off(_eventTypes.CUT_EVENT_TYPE, this.cutHandler);
523
+ this.off(_eventTypes.COPY_EVENT_TYPE, this.copyHandler);
524
+ this.off(_eventTypes.PASTE_EVENT_TYPE, this.pasteHandler);
525
+ this.off(_eventTypes.INPUT_EVENT_TYPE, this.inputHandler);
526
+ this.off(_eventTypes.BLUR_EVENT_TYPE, this.blurHandler);
527
+ this.off(_eventTypes.FOCUS_EVENT_TYPE, this.focusHandler);
528
+ this.off(_eventTypes.SCROLL_EVENT_TYPE, this.scrollHandler);
529
+ this.off(_eventTypes.KEYDOWN_EVENT_TYPE, this.keyDownHandler);
530
+ this.off(_eventTypes.CONTEXTMENU_EVENT_TYPE, this.contextmenuHandler);
531
+ _easy.document.off(_eventTypes.SELECTIONCHANGE_EVENT_TYPE, this.selectChangeHandler);
531
532
  this.removeClass("active");
532
533
  }
533
534
  },
534
- {
535
- key: "onFind",
536
- value: function onFind(findHandler, element) {
537
- var eventType = _eventTypes.FIND_EVENT_TYPE, handler = findHandler; ///
538
- this.addEventListener(eventType, handler, element);
539
- }
540
- },
541
- {
542
- key: "offFind",
543
- value: function offFind(findHandler, element) {
544
- var eventType = _eventTypes.FIND_EVENT_TYPE, handler = findHandler; ///
545
- this.removeEventListener(eventType, handler, element);
546
- }
547
- },
548
- {
549
- key: "onBlur",
550
- value: function onBlur(blurHandler, element) {
551
- var eventType = _eventTypes.BLUR_EVENT_TYPE, handler = blurHandler; ///
552
- this.addEventListener(eventType, handler, element);
553
- }
554
- },
555
- {
556
- key: "offBlur",
557
- value: function offBlur(blurHandler, element) {
558
- var eventType = _eventTypes.BLUR_EVENT_TYPE, handler = blurHandler; ///
559
- this.removeEventListener(eventType, handler, element);
560
- }
561
- },
562
- {
563
- key: "onFocus",
564
- value: function onFocus(blurHandler, element) {
565
- var eventType = _eventTypes.FOCUS_EVENT_TYPE, handler = blurHandler; ///
566
- this.addEventListener(eventType, handler, element);
567
- }
568
- },
569
- {
570
- key: "offFocus",
571
- value: function offFocus(blurHandler, element) {
572
- var eventType = _eventTypes.FOCUS_EVENT_TYPE, handler = blurHandler; ///
573
- this.removeEventListener(eventType, handler, element);
574
- }
575
- },
576
- {
577
- key: "onScroll",
578
- value: function onScroll(scrollHandler, element) {
579
- var eventType = _eventTypes.SCROLL_EVENT_TYPE, handler = scrollHandler; ///
580
- this.addEventListener(eventType, handler, element);
581
- }
582
- },
583
- {
584
- key: "offScroll",
585
- value: function offScroll(scrollHandler, element) {
586
- var eventType = _eventTypes.SCROLL_EVENT_TYPE, handler = scrollHandler; ///
587
- this.removeEventListener(eventType, handler, element);
588
- }
589
- },
590
- {
591
- key: "onChange",
592
- value: function onChange(changeHandler, element) {
593
- var eventType = _eventTypes.CHANGE_EVENT_TYPE, handler = changeHandler; ///
594
- this.addEventListener(eventType, handler, element);
595
- }
596
- },
597
- {
598
- key: "offChange",
599
- value: function offChange(changeHandler, element) {
600
- var eventType = _eventTypes.CHANGE_EVENT_TYPE, handler = changeHandler; ///
601
- this.removeEventListener(eventType, handler, element);
602
- }
603
- },
604
535
  {
605
536
  key: "getPreviousContent",
606
537
  value: function getPreviousContent() {
@@ -634,34 +565,24 @@ var RichTextarea = /*#__PURE__*/ function(Element) {
634
565
  {
635
566
  key: "didMount",
636
567
  value: function didMount() {
637
- var _this_properties = this.properties, onFind = _this_properties.onFind, onBlur = _this_properties.onBlur, onFocus = _this_properties.onFocus, onChange = _this_properties.onChange, onScroll = _this_properties.onScroll, findHandler = onFind, blurHandler = onBlur, focusHandler = onFocus, changeHandler = onChange, scrollHandler = onScroll; ///
568
+ var _this_properties = this.properties, onFind = _this_properties.onFind, onBlur = _this_properties.onBlur, onFocus = _this_properties.onFocus, onScroll = _this_properties.onScroll, onChange = _this_properties.onChange, findHandler = onFind, blurHandler = onBlur, focusHandler = onFocus, scrollHandler = onScroll, changeHandler = onChange; ///
638
569
  this.updateInitialState();
639
570
  findHandler && this.onFind(findHandler, this);
640
571
  blurHandler && this.onBlur(blurHandler, this);
641
572
  focusHandler && this.onFocus(focusHandler, this);
642
- changeHandler && this.onChange(changeHandler, this);
643
573
  scrollHandler && this.onScroll(scrollHandler, this);
644
- this.on(_eventTypes.CUT_EVENT_TYPE, this.cutHandler);
645
- this.on(_eventTypes.COPY_EVENT_TYPE, this.copyHandler);
646
- this.on(_eventTypes.PASTE_EVENT_TYPE, this.pasteHandler);
647
- this.on(_eventTypes.CONTEXTMENU_EVENT_TYPE, this.contextmenuHandler);
648
- _easy.document.on(_eventTypes.SELECTIONCHANGE_EVENT_TYPE, this.selectChangeHandler);
574
+ changeHandler && this.onChange(changeHandler, this);
649
575
  }
650
576
  },
651
577
  {
652
578
  key: "willUnmount",
653
579
  value: function willUnmount() {
654
- var _this_properties = this.properties, onFind = _this_properties.onFind, onBlur = _this_properties.onBlur, onFocus = _this_properties.onFocus, onChange = _this_properties.onChange, onScroll = _this_properties.onScroll, findHandler = onFind, blurHandler = onBlur, focusHandler = onFocus, changeHandler = onChange, scrollHandler = onScroll; ///
580
+ var _this_properties = this.properties, onFind = _this_properties.onFind, onBlur = _this_properties.onBlur, onFocus = _this_properties.onFocus, onScroll = _this_properties.onScroll, onChange = _this_properties.onChange, findHandler = onFind, blurHandler = onBlur, focusHandler = onFocus, scrollHandler = onScroll, changeHandler = onChange; ///
655
581
  findHandler && this.offFind(findHandler, this);
656
582
  blurHandler && this.offBlur(blurHandler, this);
657
583
  focusHandler && this.offFocus(focusHandler, this);
658
- changeHandler && this.offChange(changeHandler, this);
659
584
  scrollHandler && this.offScroll(scrollHandler, this);
660
- this.off(_eventTypes.CUT_EVENT_TYPE, this.cutHandler);
661
- this.off(_eventTypes.COPY_EVENT_TYPE, this.copyHandler);
662
- this.off(_eventTypes.PASTE_EVENT_TYPE, this.pasteHandler);
663
- this.off(_eventTypes.CONTEXTMENU_EVENT_TYPE, this.contextmenuHandler);
664
- _easy.document.off(_eventTypes.SELECTIONCHANGE_EVENT_TYPE, this.selectChangeHandler);
585
+ changeHandler && this.offChange(changeHandler, this);
665
586
  var active = this.isActive();
666
587
  if (active) {
667
588
  this.deactivate();
@@ -718,14 +639,15 @@ _defineProperty(RichTextarea, "ignoredProperties", [
718
639
  "onFind",
719
640
  "onBlur",
720
641
  "onFocus",
721
- "onChange",
722
- "onScroll"
642
+ "onScroll",
643
+ "onChange"
723
644
  ]);
724
645
  _defineProperty(RichTextarea, "defaultProperties", {
725
646
  className: "rich"
726
647
  });
648
+ Object.assign(RichTextarea.prototype, _event.default);
727
649
  function defer(func) {
728
650
  setTimeout(func, 0);
729
651
  }
730
652
 
731
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yaWNoVGV4dGFyZWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBFbGVtZW50LCBkb2N1bWVudCB9IGZyb20gXCJlYXN5XCI7XHJcblxyXG5pbXBvcnQgU2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvblwiXHJcbmltcG9ydCBVbmRvQnVmZmVyIGZyb20gXCIuL3VuZG9CdWZmZXJcIjtcclxuaW1wb3J0IEluc2VydE9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vaW5zZXJ0XCI7XHJcbmltcG9ydCBEZWxldGVPcGVyYXRpb24gZnJvbSBcIi4vb3BlcmF0aW9uL2RlbGV0ZVwiO1xyXG5pbXBvcnQgdHJhbnNmb3JtQ29udGVudCBmcm9tIFwiLi90cmFuc2Zvcm0vY29udGVudFwiO1xyXG5pbXBvcnQgdHJhbnNmb3JtU2VsZWN0aW9uIGZyb20gXCIuL3RyYW5zZm9ybS9zZWxlY3Rpb25cIjtcclxuaW1wb3J0IGdlbmVyYXRlT3BlcmF0aW9ucyBmcm9tIFwiLi9vcGVyYXRpb25zL2dlbmVyYXRlXCI7XHJcblxyXG5pbXBvcnQgeyBURVhULCBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi9jb25zdGFudHNcIjtcclxuaW1wb3J0IHsgRl9LRVlfQ09ERSwgWl9LRVlfQ09ERSB9IGZyb20gXCIuL2tleUNvZGVzXCI7XHJcbmltcG9ydCB7IENVVF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBDT1BZX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIEZJTkRfRVZFTlRfVFlQRSxcclxuICAgICAgICAgQkxVUl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBQQVNURV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBJTlBVVF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBGT0NVU19FVkVOVF9UWVBFLFxyXG4gICAgICAgICBDSEFOR0VfRVZFTlRfVFlQRSxcclxuICAgICAgICAgU0NST0xMX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIEtFWURPV05fRVZFTlRfVFlQRSxcclxuICAgICAgICAgQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSxcclxuICAgICAgICAgU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUgfSBmcm9tIFwiLi9ldmVudFR5cGVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSaWNoVGV4dGFyZWEgZXh0ZW5kcyBFbGVtZW50IHtcclxuICBjb25zdHJ1Y3RvcihzZWxlY3RvciwgZm9jdXNlZCwgcmVhZE9ubHksIHVuZG9CdWZmZXIpIHtcclxuICAgIHN1cGVyKHNlbGVjdG9yKTtcclxuXHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gICAgdGhpcy5yZWFkT25seSA9IHJlYWRPbmx5O1xyXG4gICAgdGhpcy51bmRvQnVmZmVyID0gdW5kb0J1ZmZlcjtcclxuICB9XHJcblxyXG4gIGlzRm9jdXNlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLmZvY3VzZWQ7XHJcbiAgfVxyXG5cclxuICBpc1JlYWRPbmx5KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucmVhZE9ubHk7XHJcbiAgfVxyXG5cclxuICBnZXRVbmRvQnVmZmVyKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudW5kb0J1ZmZlcjtcclxuICB9XHJcblxyXG4gIHNldEZvY3VzZWQoZm9jdXNlZCkge1xyXG4gICAgdGhpcy5mb2N1c2VkID0gZm9jdXNlZDtcclxuICB9XHJcblxyXG4gIHNldFJlYWRPbmx5KHJlYWRPbmx5KSB7XHJcbiAgICB0aGlzLnJlYWRPbmx5ID0gcmVhZE9ubHk7XHJcbiAgfVxyXG5cclxuICBpbnRlcm1lZGlhdGVIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSA9IHRydWUsIGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFLCBzZWxlY3Rpb25DaGFuZ2VkID0gdGhpcy5oYXNTZWxlY3Rpb25DaGFuZ2VkKCkpID0+IHtcclxuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzQ29udGVudCA9IHRoaXMuZ2V0UHJldmlvdXNDb250ZW50KCksXHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBwcmV2aW91c0NvbnRlbnQ7ICAvLy9cclxuXHJcbiAgICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgY29udGVudENoYW5nZWQgPSB0aGlzLmhhc0NvbnRlbnRDaGFuZ2VkKCksXHJcbiAgICAgICAgICBjaGFuZ2VkID0gKGNvbnRlbnRDaGFuZ2VkIHx8IHNlbGVjdGlvbkNoYW5nZWQpO1xyXG5cclxuICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh1bmRvYWJsZSkge1xyXG4gICAgICBpZiAoY29udGVudENoYW5nZWQpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91c0NvbnRlbnQgPSB0aGlzLmdldFByZXZpb3VzQ29udGVudCgpLFxyXG4gICAgICAgICAgICAgIG9wZXJhdGlvbnMgPSBnZW5lcmF0ZU9wZXJhdGlvbnMocHJldmlvdXNDb250ZW50LCBjb250ZW50KTtcclxuXHJcbiAgICAgICAgdGhpcy51bmRvQnVmZmVyLmFkZE9wZXJhdGlvbnMob3BlcmF0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcmV2aW91c0NvbnRlbnQgPSBjb250ZW50LCAgLy8vXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG5cclxuICAgIHRoaXMuc2V0UHJldmlvdXNDb250ZW50KHByZXZpb3VzQ29udGVudCk7XHJcblxyXG4gICAgdGhpcy5zZXRQcmV2aW91c1NlbGVjdGlvbihwcmV2aW91c1NlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RDaGFuZ2VIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBpZiAodGhpcy5mb2N1c2VkKSB7XHJcbiAgICAgIGVsZW1lbnQgPSB0aGlzOyAvLy9cclxuXHJcbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb250ZXh0bWVudUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBrZXlEb3duSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgeyBjdHJsS2V5LCBtZXRhS2V5IH0gPSBldmVudDtcclxuXHJcbiAgICBpZiAoY3RybEtleSB8fCBtZXRhS2V5KSB7XHJcbiAgICAgIGNvbnN0IHsga2V5Q29kZSB9ID0gZXZlbnQ7XHJcblxyXG4gICAgICBzd2l0Y2ggKGtleUNvZGUpIHtcclxuICAgICAgICBjYXNlIEZfS0VZX0NPREU6IHtcclxuICAgICAgICAgIHRoaXMuZmluZChldmVudCwgZWxlbWVudCk7XHJcblxyXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjYXNlIFpfS0VZX0NPREU6IHtcclxuICAgICAgICAgIGNvbnN0IHsgc2hpZnRLZXkgfSA9IGV2ZW50O1xyXG5cclxuICAgICAgICAgIHNoaWZ0S2V5ID9cclxuICAgICAgICAgICAgdGhpcy5yZWRvKGV2ZW50LCBlbGVtZW50KSA6XHJcbiAgICAgICAgICAgICAgdGhpcy51bmRvKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBkZWZlcigoKSA9PiB7XHJcbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHNjcm9sbEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IFNDUk9MTF9FVkVOVF9UWVBFO1xyXG5cclxuICAgIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgZXZlbnQsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgZm9jdXNIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICB0aGlzLmZvY3VzZWQgPSB0cnVlO1xyXG5cclxuICAgIGRlZmVyKCgpID0+IHtcclxuICAgICAgY29uc3QgdW5kb2FibGUgPSB0cnVlLFxyXG4gICAgICAgICAgICBldmVudFR5cGUgPSBGT0NVU19FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCwgdW5kb2FibGUsIGV2ZW50VHlwZSwgc2VsZWN0aW9uQ2hhbmdlZCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGJsdXJIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCB1bmRvYWJsZSA9IHRydWUsXHJcbiAgICAgICAgICBldmVudFR5cGUgPSBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlLCBldmVudFR5cGUsIHNlbGVjdGlvbkNoYW5nZWQpO1xyXG4gIH1cclxuXHJcbiAgaW5wdXRIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgcGFzdGVIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCB7IGNsaXBib2FyZERhdGEgfSA9IGV2ZW50LFxyXG4gICAgICAgICAgdGV4dERhdGEgPSBjbGlwYm9hcmREYXRhLmdldERhdGEoVEVYVCk7XHJcblxyXG4gICAgaWYgKHRleHREYXRhID09PSBFTVBUWV9TVFJJTkcpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbXB0eSA9IHNlbGVjdGlvbi5pc0VtcHR5KCk7XHJcblxyXG4gICAgaWYgKCFzZWxlY3Rpb25FbXB0eSkge1xyXG4gICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICAgIGRlbGV0ZU9wZXJhdGlvbiA9IERlbGV0ZU9wZXJhdGlvbi5mcm9tQ29udGVudEFuZFNlbGVjdGlvbihjb250ZW50LCBzZWxlY3Rpb24pLFxyXG4gICAgICAgICAgICBvcGVyYXRpb24gPSBkZWxldGVPcGVyYXRpb247XHJcblxyXG4gICAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRleHREYXRhLCAvLy9cclxuICAgICAgICAgIGluc2VydE9wZXJhdGlvbiA9IEluc2VydE9wZXJhdGlvbi5mcm9tQ29udGVudEFuZFNlbGVjdGlvbihjb250ZW50LCBzZWxlY3Rpb24pLFxyXG4gICAgICAgICAgb3BlcmF0aW9uID0gaW5zZXJ0T3BlcmF0aW9uOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hcHBseU9wZXJhdGlvbihvcGVyYXRpb24pO1xyXG5cclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCk7XHJcblxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIGNvcHlIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRW1wdHkgPSBzZWxlY3Rpb24uaXNFbXB0eSgpO1xyXG5cclxuICAgIGlmIChzZWxlY3Rpb25FbXB0eSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRDb250ZW50ID0gdGhpcy5nZXRTZWxlY3RlZENvbnRlbnQoKTtcclxuXHJcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChzZWxlY3RlZENvbnRlbnQpO1xyXG5cclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBjdXRIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRW1wdHkgPSBzZWxlY3Rpb24uaXNFbXB0eSgpO1xyXG5cclxuICAgIGlmIChzZWxlY3Rpb25FbXB0eSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRDb250ZW50ID0gdGhpcy5nZXRTZWxlY3RlZENvbnRlbnQoKTtcclxuXHJcbiAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChzZWxlY3RlZENvbnRlbnQpO1xyXG5cclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIGRlbGV0ZU9wZXJhdGlvbiA9IERlbGV0ZU9wZXJhdGlvbi5mcm9tQ29udGVudEFuZFNlbGVjdGlvbihjb250ZW50LCBzZWxlY3Rpb24pLFxyXG4gICAgICAgICAgb3BlcmF0aW9uID0gZGVsZXRlT3BlcmF0aW9uOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hcHBseU9wZXJhdGlvbihvcGVyYXRpb24pO1xyXG5cclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCk7XHJcblxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIGlzQWN0aXZlKCkge1xyXG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5oYXNDbGFzcyhcImFjdGl2ZVwiKTtcclxuXHJcbiAgICByZXR1cm4gYWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q29udGVudCgpIHtcclxuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKSxcclxuICAgICAgICAgIHsgdmFsdWUgfSA9IGRvbUVsZW1lbnQsXHJcbiAgICAgICAgICBjb250ZW50ID0gdmFsdWU7ICAvLy9cclxuXHJcbiAgICByZXR1cm4gY29udGVudDtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGlvbigpIHtcclxuICAgIGNvbnN0IGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKSxcclxuICAgICAgICAgIHNlbGVjdGlvbiA9IFNlbGVjdGlvbi5mcm9tRE9NRWxlbWVudChkb21FbGVtZW50KTtcclxuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2VsZWN0ZWRDb250ZW50KCkge1xyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIGVuZFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldEVuZFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzdGFydFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldFN0YXJ0UG9zaXRpb24oKSxcclxuICAgICAgICAgIHN0YXJ0ID0gc3RhcnRQb3NpdGlvbiwgIC8vL1xyXG4gICAgICAgICAgZW5kID0gZW5kUG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIHNlbGVjdGVkQ29udGVudCA9IGNvbnRlbnQuc2xpY2Uoc3RhcnQsIGVuZCk7XHJcblxyXG4gICAgcmV0dXJuIHNlbGVjdGVkQ29udGVudDtcclxuICB9XHJcblxyXG4gIGhhc0NvbnRlbnRDaGFuZ2VkKCkge1xyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgcHJldmlvdXNDb250ZW50ID0gdGhpcy5nZXRQcmV2aW91c0NvbnRlbnQoKSxcclxuICAgICAgICAgIGNvbnRlbnRQcmV2aW91c0NvbnRlbnQgPSAoY29udGVudCA9PT0gcHJldmlvdXNDb250ZW50KSxcclxuICAgICAgICAgIGNvbnRlbnRDaGFuZ2VkID0gIWNvbnRlbnRQcmV2aW91c0NvbnRlbnQ7XHJcblxyXG4gICAgcmV0dXJuIGNvbnRlbnRDaGFuZ2VkO1xyXG4gIH1cclxuXHJcbiAgaGFzU2VsZWN0aW9uQ2hhbmdlZCgpIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IHRoaXMuZ2V0UHJldmlvdXNTZWxlY3Rpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvblByZXZpb3VzU2VsZWN0aW9uID0gc2VsZWN0aW9uLmlzRXF1YWxUbyhwcmV2aW91c1NlbGVjdGlvbiksXHJcbiAgICAgICAgICBzZWxlY3Rpb25DaGFuZ2VkID0gIXNlbGVjdGlvblByZXZpb3VzU2VsZWN0aW9uOyAvLy9cclxuXHJcbiAgICByZXR1cm4gc2VsZWN0aW9uQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIHNldENvbnRlbnQoY29udGVudCwgc2V0UHJldmlvdXNDb250ZW50ID0gdHJ1ZSkge1xyXG4gICAgY29uc3QgdmFsdWUgPSBjb250ZW50LCAgLy8vXHJcbiAgICAgICAgICBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCk7XHJcblxyXG4gICAgT2JqZWN0LmFzc2lnbihkb21FbGVtZW50LCB7XHJcbiAgICAgIHZhbHVlXHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAoc2V0UHJldmlvdXNDb250ZW50KSB7XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzQ29udGVudCA9IGNvbnRlbnQ7ICAvLy9cclxuXHJcbiAgICAgIHRoaXMuc2V0UHJldmlvdXNDb250ZW50KHByZXZpb3VzQ29udGVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBzZXRQcmV2aW91c1NlbGVjdGlvbiA9IHRydWUpIHtcclxuICAgIGNvbnN0IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0U3RhcnRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRW5kUG9zaXRpb24gPSBzZWxlY3Rpb24uZ2V0RW5kUG9zaXRpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uU3RhcnRQb3NpdGlvbiwgIC8vL1xyXG4gICAgICAgICAgc2VsZWN0aW9uRW5kID0gc2VsZWN0aW9uRW5kUG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIGRvbUVsZW1lbnQgPSB0aGlzLmdldERPTUVsZW1lbnQoKTtcclxuXHJcbiAgICBkb21FbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpO1xyXG5cclxuICAgIGlmIChzZXRQcmV2aW91c1NlbGVjdGlvbikge1xyXG4gICAgICBjb25zdCBwcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG5cclxuICAgICAgdGhpcy5zZXRQcmV2aW91c1NlbGVjdGlvbihwcmV2aW91c1NlbGVjdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmaW5kKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBGSU5EX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5jYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCBldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICB1bmRvKGV2ZW50LCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCB1bmRvT3BlcmF0aW9uID0gdGhpcy51bmRvQnVmZmVyLnVuZG8oKTtcclxuXHJcbiAgICBpZiAodW5kb09wZXJhdGlvbiAhPT0gbnVsbCkge1xyXG4gICAgICBjb25zdCBvcGVyYXRpb24gPSB1bmRvT3BlcmF0aW9uOyAgLy8vXHJcblxyXG4gICAgICB0aGlzLnJldmVydChldmVudCwgZWxlbWVudCwgb3BlcmF0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZG8oZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IHJlZG9PcGVyYXRpb24gPSB0aGlzLnVuZG9CdWZmZXIucmVkbygpO1xyXG5cclxuICAgIGlmIChyZWRvT3BlcmF0aW9uICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IHJlZG9PcGVyYXRpb247ICAvLy9cclxuXHJcbiAgICAgIHRoaXMucmV2ZXJ0KGV2ZW50LCBlbGVtZW50LCBvcGVyYXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmV2ZXJ0KGV2ZW50LCBlbGVtZW50LCBvcGVyYXRpb24pIHtcclxuICAgIGNvbnN0IHVuZG9hYmxlID0gZmFsc2UsXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSBTZWxlY3Rpb24uZnJvbU9wZXJhdGlvbihvcGVyYXRpb24pLFxyXG4gICAgICAgICAgc2V0UHJldmlvdXNTZWxlY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBzZXRQcmV2aW91c1NlbGVjdGlvbik7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSk7XHJcbiAgfVxyXG5cclxuICB0cmFuc2Zvcm0ob3BlcmF0aW9ucykge1xyXG4gICAgbGV0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkQ29udGVudCA9IHRyYW5zZm9ybUNvbnRlbnQoY29udGVudCwgb3BlcmF0aW9ucyksXHJcbiAgICAgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IHRyYW5zZm9ybVNlbGVjdGlvbihzZWxlY3Rpb24sIG9wZXJhdGlvbnMpO1xyXG5cclxuICAgIGNvbnRlbnQgPSB0cmFuc2Zvcm1lZENvbnRlbnQ7IC8vL1xyXG5cclxuICAgIHNlbGVjdGlvbiA9IHRyYW5zZm9ybWVkU2VsZWN0aW9uOyAvLy9cclxuXHJcbiAgICBjb25zdCBzZXRQcmV2aW91c0NvbnRlbnQgPSBmYWxzZSxcclxuICAgICAgICAgIHNldFByZXZpb3VzU2VsZWN0aW9uID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5zZXRDb250ZW50KGNvbnRlbnQsIHNldFByZXZpb3VzQ29udGVudCk7XHJcblxyXG4gICAgdGhpcy5zZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCBzZXRQcmV2aW91c1NlbGVjdGlvbik7XHJcblxyXG4gICAgdGhpcy51bmRvQnVmZmVyLnRyYW5zZm9ybShvcGVyYXRpb25zKTtcclxuXHJcbiAgICBjb25zdCBldmVudCA9IG51bGwsXHJcbiAgICAgICAgICBlbGVtZW50ID0gdGhpcyxcclxuICAgICAgICAgIHVuZG9hYmxlID0gZmFsc2UsXHJcbiAgICAgICAgICBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRTtcclxuXHJcbiAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlLCBldmVudFR5cGUpO1xyXG4gIH1cclxuXHJcbiAgY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgLi4ucmVtYWluaW5nQXJndW1lbnRzKSB7XHJcbiAgICBjb25zdCBldmVudExpc3RlbmVycyA9IHRoaXMuZmluZEV2ZW50TGlzdGVuZXJzKGV2ZW50VHlwZSk7XHJcblxyXG4gICAgZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4ge1xyXG4gICAgICBsZXQgeyBlbGVtZW50IH0gPSBldmVudExpc3RlbmVyO1xyXG5cclxuICAgICAgY29uc3QgeyBoYW5kbGVyIH0gPSBldmVudExpc3RlbmVyLFxyXG4gICAgICAgICAgICAgIGhhbmRsZXJFbGVtZW50ID0gZWxlbWVudDsgLy8vXHJcblxyXG4gICAgICBlbGVtZW50ID0gdGhpczsgLy8vXHJcblxyXG4gICAgICBpZiAoKGhhbmRsZXIgIT09IHRoaXMuYmx1ckhhbmRsZXIpICYmIChoYW5kbGVyICE9PSB0aGlzLmZvY3VzSGFuZGxlcikgJiYgKGhhbmRsZXIgIT09IHRoaXMuc2Nyb2xsSGFuZGxlcikpIHtcclxuICAgICAgICBoYW5kbGVyLmNhbGwoaGFuZGxlckVsZW1lbnQsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cywgZWxlbWVudCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKSB7XHJcbiAgICBsZXQgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCk7XHJcblxyXG4gICAgY29uc3QgdHJhbnNmb3JtZWRDb250ZW50ID0gb3BlcmF0aW9uLnRyYW5zZm9ybUNvbnRlbnQoY29udGVudCksXHJcbiAgICAgICAgICB0cmFuc2Zvcm1lZFNlbGVjdGlvbiA9IG9wZXJhdGlvbi50cmFuc2Zvcm1TZWxlY3Rpb24oc2VsZWN0aW9uKTtcclxuXHJcbiAgICBjb250ZW50ID0gdHJhbnNmb3JtZWRDb250ZW50OyAvLy9cclxuXHJcbiAgICBzZWxlY3Rpb24gPSB0cmFuc2Zvcm1lZFNlbGVjdGlvbjsgLy8vXHJcblxyXG4gICAgY29uc3Qgc2V0UHJldmlvdXNDb250ZW50ID0gZmFsc2UsXHJcbiAgICAgICAgICBzZXRQcmV2aW91c1NlbGVjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50LCBzZXRQcmV2aW91c0NvbnRlbnQpO1xyXG5cclxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgYWN0aXZhdGUoKSB7XHJcbiAgICB0aGlzLm9uKEtFWURPV05fRVZFTlRfVFlQRSwgdGhpcy5rZXlEb3duSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihJTlBVVF9FVkVOVF9UWVBFLCB0aGlzLmlucHV0SGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vbihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEZPQ1VTX0VWRU5UX1RZUEUsIHRoaXMuZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKEJMVVJfRVZFTlRfVFlQRSwgdGhpcy5ibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuICB9XHJcblxyXG4gIGRlYWN0aXZhdGUoKSB7XHJcbiAgICB0aGlzLm9mZihLRVlET1dOX0VWRU5UX1RZUEUsIHRoaXMua2V5RG93bkhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHRoaXMub2ZmKElOUFVUX0VWRU5UX1RZUEUsIHRoaXMuaW5wdXRIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihTQ1JPTExfRVZFTlRfVFlQRSwgdGhpcy5zY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9mZihGT0NVU19FVkVOVF9UWVBFLCB0aGlzLmZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoQkxVUl9FVkVOVF9UWVBFLCB0aGlzLmJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gIH1cclxuXHJcbiAgb25GaW5kKGZpbmRIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBGSU5EX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gZmluZEhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkZpbmQoZmluZEhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEZJTkRfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBmaW5kSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25CbHVyKGJsdXJIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZkJsdXIoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEJMVVJfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb25Gb2N1cyhibHVySGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gRk9DVVNfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBibHVySGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgb2ZmRm9jdXMoYmx1ckhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gYmx1ckhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIGVsZW1lbnQpIHtcclxuICAgIGNvbnN0IGV2ZW50VHlwZSA9IFNDUk9MTF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgaGFuZGxlciA9IHNjcm9sbEhhbmRsZXI7ICAvLy9cclxuXHJcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBoYW5kbGVyLCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIG9mZlNjcm9sbChzY3JvbGxIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBzY3JvbGxIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCBlbGVtZW50KSB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBDSEFOR0VfRVZFTlRfVFlQRSxcclxuICAgICAgICAgIGhhbmRsZXIgPSBjaGFuZ2VIYW5kbGVyOyAgLy8vXHJcblxyXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgaGFuZGxlciwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBvZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgZWxlbWVudCkge1xyXG4gICAgY29uc3QgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICBoYW5kbGVyID0gY2hhbmdlSGFuZGxlcjsgIC8vL1xyXG5cclxuICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudFR5cGUsIGhhbmRsZXIsIGVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNDb250ZW50KCkge1xyXG4gICAgY29uc3QgeyBwcmV2aW91c0NvbnRlbnQgfSA9IHRoaXMuZ2V0U3RhdGUoKTtcclxuXHJcbiAgICByZXR1cm4gcHJldmlvdXNDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNTZWxlY3Rpb24oKSB7XHJcbiAgICBjb25zdCB7IHByZXZpb3VzU2VsZWN0aW9uIH0gPSB0aGlzLmdldFN0YXRlKCk7XHJcblxyXG4gICAgcmV0dXJuIHByZXZpb3VzU2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0UHJldmlvdXNDb250ZW50KHByZXZpb3VzQ29udGVudCkge1xyXG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XHJcbiAgICAgIHByZXZpb3VzQ29udGVudFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQcmV2aW91c1NlbGVjdGlvbihwcmV2aW91c1NlbGVjdGlvbikge1xyXG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XHJcbiAgICAgIHByZXZpb3VzU2VsZWN0aW9uXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRpZE1vdW50KCkge1xyXG4gICAgY29uc3QgeyBvbkZpbmQsIG9uQmx1ciwgb25Gb2N1cywgb25DaGFuZ2UsIG9uU2Nyb2xsIH0gPSB0aGlzLnByb3BlcnRpZXMsXHJcbiAgICAgICAgICBmaW5kSGFuZGxlciA9IG9uRmluZCwgLy8vXHJcbiAgICAgICAgICBibHVySGFuZGxlciA9IG9uQmx1ciwgLy8vXHJcbiAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgIGNoYW5nZUhhbmRsZXIgPSBvbkNoYW5nZSwgLy8vXHJcbiAgICAgICAgICBzY3JvbGxIYW5kbGVyID0gb25TY3JvbGw7IC8vL1xyXG5cclxuICAgIHRoaXMudXBkYXRlSW5pdGlhbFN0YXRlKCk7XHJcblxyXG4gICAgZmluZEhhbmRsZXIgJiYgdGhpcy5vbkZpbmQoZmluZEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub25CbHVyKGJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBmb2N1c0hhbmRsZXIgJiYgdGhpcy5vbkZvY3VzKGZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgY2hhbmdlSGFuZGxlciAmJiB0aGlzLm9uQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHNjcm9sbEhhbmRsZXIgJiYgdGhpcy5vblNjcm9sbChzY3JvbGxIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICB0aGlzLm9uKENVVF9FVkVOVF9UWVBFLCB0aGlzLmN1dEhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub24oQ09QWV9FVkVOVF9UWVBFLCB0aGlzLmNvcHlIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9uKFBBU1RFX0VWRU5UX1RZUEUsIHRoaXMucGFzdGVIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9uKENPTlRFWFRNRU5VX0VWRU5UX1RZUEUsIHRoaXMuY29udGV4dG1lbnVIYW5kbGVyKTtcclxuXHJcbiAgICBkb2N1bWVudC5vbihTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSwgdGhpcy5zZWxlY3RDaGFuZ2VIYW5kbGVyKTtcclxuICB9XHJcblxyXG4gIHdpbGxVbm1vdW50KCkge1xyXG4gICAgY29uc3QgeyBvbkZpbmQsIG9uQmx1ciwgb25Gb2N1cywgb25DaGFuZ2UsIG9uU2Nyb2xsIH0gPSB0aGlzLnByb3BlcnRpZXMsXHJcbiAgICAgICAgICAgIGZpbmRIYW5kbGVyID0gb25GaW5kLCAvLy9cclxuICAgICAgICAgICAgYmx1ckhhbmRsZXIgPSBvbkJsdXIsIC8vL1xyXG4gICAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgICAgY2hhbmdlSGFuZGxlciA9IG9uQ2hhbmdlLCAvLy9cclxuICAgICAgICAgICAgc2Nyb2xsSGFuZGxlciA9IG9uU2Nyb2xsOyAvLy9cclxuXHJcbiAgICBmaW5kSGFuZGxlciAmJiB0aGlzLm9mZkZpbmQoZmluZEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub2ZmQmx1cihibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgZm9jdXNIYW5kbGVyICYmIHRoaXMub2ZmRm9jdXMoZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBjaGFuZ2VIYW5kbGVyICYmIHRoaXMub2ZmQ2hhbmdlKGNoYW5nZUhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIHNjcm9sbEhhbmRsZXIgJiYgdGhpcy5vZmZTY3JvbGwoc2Nyb2xsSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgdGhpcy5vZmYoQ1VUX0VWRU5UX1RZUEUsIHRoaXMuY3V0SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoQ09QWV9FVkVOVF9UWVBFLCB0aGlzLmNvcHlIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9mZihQQVNURV9FVkVOVF9UWVBFLCB0aGlzLnBhc3RlSGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSwgdGhpcy5jb250ZXh0bWVudUhhbmRsZXIpO1xyXG5cclxuICAgIGRvY3VtZW50Lm9mZihTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSwgdGhpcy5zZWxlY3RDaGFuZ2VIYW5kbGVyKTtcclxuXHJcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLmlzQWN0aXZlKCk7XHJcblxyXG4gICAgaWYgKGFjdGl2ZSkge1xyXG4gICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHVwZGF0ZUluaXRpYWxTdGF0ZSgpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBwcmV2aW91c0NvbnRlbnQgPSBjb250ZW50LCAgLy8vXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG5cclxuICAgIHRoaXMuc2V0UHJldmlvdXNDb250ZW50KHByZXZpb3VzQ29udGVudCk7XHJcblxyXG4gICAgdGhpcy5zZXRQcmV2aW91c1NlbGVjdGlvbihwcmV2aW91c1NlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBzZXRJbml0aWFsU3RhdGUoKSB7XHJcbiAgICBjb25zdCBwcmV2aW91c0NvbnRlbnQgPSBudWxsLFxyXG4gICAgICAgICAgcHJldmlvdXNTZWxlY3Rpb24gPSBudWxsO1xyXG5cclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBwcmV2aW91c0NvbnRlbnQsXHJcbiAgICAgIHByZXZpb3VzU2VsZWN0aW9uXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGluaXRpYWxpc2UoKSB7XHJcbiAgICB0aGlzLnNldEluaXRpYWxTdGF0ZSgpO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIHRhZ05hbWUgPSBcInRleHRhcmVhXCI7XHJcblxyXG4gIHN0YXRpYyBpZ25vcmVkUHJvcGVydGllcyA9IFtcclxuICAgIFwib25GaW5kXCIsXHJcbiAgICBcIm9uQmx1clwiLFxyXG4gICAgXCJvbkZvY3VzXCIsXHJcbiAgICBcIm9uQ2hhbmdlXCIsXHJcbiAgICBcIm9uU2Nyb2xsXCIsXHJcbiAgXTtcclxuXHJcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xyXG4gICAgY2xhc3NOYW1lOiBcInJpY2hcIlxyXG4gIH07XHJcblxyXG4gIHN0YXRpYyBmcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xyXG4gICAgY29uc3QgZm9jdXNlZCA9IGZhbHNlLFxyXG4gICAgICAgICAgcmVhZE9ubHkgPSBmYWxzZSxcclxuICAgICAgICAgIHVuZG9CdWZmZXIgPSBVbmRvQnVmZmVyLmZyb21Ob3RoaW5nKCksXHJcbiAgICAgICAgICByaWNoVGV4dGFyZWEgPSBFbGVtZW50LmZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcywgZm9jdXNlZCwgcmVhZE9ubHksIHVuZG9CdWZmZXIsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XHJcblxyXG4gICAgcmV0dXJuIHJpY2hUZXh0YXJlYTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGRlZmVyKGZ1bmMpIHtcclxuICBzZXRUaW1lb3V0KGZ1bmMsIDApO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJSaWNoVGV4dGFyZWEiLCJzZWxlY3RvciIsImZvY3VzZWQiLCJyZWFkT25seSIsInVuZG9CdWZmZXIiLCJpbnRlcm1lZGlhdGVIYW5kbGVyIiwiZXZlbnQiLCJlbGVtZW50IiwidW5kb2FibGUiLCJldmVudFR5cGUiLCJDSEFOR0VfRVZFTlRfVFlQRSIsInNlbGVjdGlvbkNoYW5nZWQiLCJoYXNTZWxlY3Rpb25DaGFuZ2VkIiwicHJldmlvdXNDb250ZW50IiwiZ2V0UHJldmlvdXNDb250ZW50IiwiY29udGVudCIsInNldENvbnRlbnQiLCJnZXRDb250ZW50Iiwic2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwiY29udGVudENoYW5nZWQiLCJoYXNDb250ZW50Q2hhbmdlZCIsImNoYW5nZWQiLCJjYWxsSGFuZGxlcnMiLCJvcGVyYXRpb25zIiwiZ2VuZXJhdGVPcGVyYXRpb25zIiwiYWRkT3BlcmF0aW9ucyIsInByZXZpb3VzU2VsZWN0aW9uIiwic2V0UHJldmlvdXNDb250ZW50Iiwic2V0UHJldmlvdXNTZWxlY3Rpb24iLCJzZWxlY3RDaGFuZ2VIYW5kbGVyIiwiY29udGV4dG1lbnVIYW5kbGVyIiwicHJldmVudERlZmF1bHQiLCJrZXlEb3duSGFuZGxlciIsImN0cmxLZXkiLCJtZXRhS2V5Iiwia2V5Q29kZSIsIkZfS0VZX0NPREUiLCJmaW5kIiwiWl9LRVlfQ09ERSIsInNoaWZ0S2V5IiwicmVkbyIsInVuZG8iLCJkZWZlciIsInNjcm9sbEhhbmRsZXIiLCJTQ1JPTExfRVZFTlRfVFlQRSIsImZvY3VzSGFuZGxlciIsIkZPQ1VTX0VWRU5UX1RZUEUiLCJibHVySGFuZGxlciIsIkJMVVJfRVZFTlRfVFlQRSIsImlucHV0SGFuZGxlciIsInBhc3RlSGFuZGxlciIsImNsaXBib2FyZERhdGEiLCJ0ZXh0RGF0YSIsImdldERhdGEiLCJURVhUIiwiRU1QVFlfU1RSSU5HIiwic2VsZWN0aW9uRW1wdHkiLCJpc0VtcHR5IiwiZGVsZXRlT3BlcmF0aW9uIiwiRGVsZXRlT3BlcmF0aW9uIiwiZnJvbUNvbnRlbnRBbmRTZWxlY3Rpb24iLCJvcGVyYXRpb24iLCJhcHBseU9wZXJhdGlvbiIsImluc2VydE9wZXJhdGlvbiIsIkluc2VydE9wZXJhdGlvbiIsImNvcHlIYW5kbGVyIiwic2VsZWN0ZWRDb250ZW50IiwiZ2V0U2VsZWN0ZWRDb250ZW50IiwibmF2aWdhdG9yIiwiY2xpcGJvYXJkIiwid3JpdGVUZXh0IiwiY3V0SGFuZGxlciIsImlzRm9jdXNlZCIsImlzUmVhZE9ubHkiLCJnZXRVbmRvQnVmZmVyIiwic2V0Rm9jdXNlZCIsInNldFJlYWRPbmx5IiwiaXNBY3RpdmUiLCJhY3RpdmUiLCJoYXNDbGFzcyIsImRvbUVsZW1lbnQiLCJnZXRET01FbGVtZW50IiwidmFsdWUiLCJTZWxlY3Rpb24iLCJmcm9tRE9NRWxlbWVudCIsImVuZFBvc2l0aW9uIiwiZ2V0RW5kUG9zaXRpb24iLCJzdGFydFBvc2l0aW9uIiwiZ2V0U3RhcnRQb3NpdGlvbiIsInN0YXJ0IiwiZW5kIiwic2xpY2UiLCJjb250ZW50UHJldmlvdXNDb250ZW50IiwiZ2V0UHJldmlvdXNTZWxlY3Rpb24iLCJzZWxlY3Rpb25QcmV2aW91c1NlbGVjdGlvbiIsImlzRXF1YWxUbyIsIk9iamVjdCIsImFzc2lnbiIsInNldFNlbGVjdGlvbiIsInNlbGVjdGlvblN0YXJ0UG9zaXRpb24iLCJzZWxlY3Rpb25FbmRQb3NpdGlvbiIsInNlbGVjdGlvblN0YXJ0Iiwic2VsZWN0aW9uRW5kIiwic2V0U2VsZWN0aW9uUmFuZ2UiLCJGSU5EX0VWRU5UX1RZUEUiLCJ1bmRvT3BlcmF0aW9uIiwicmV2ZXJ0IiwicmVkb09wZXJhdGlvbiIsImZyb21PcGVyYXRpb24iLCJ0cmFuc2Zvcm0iLCJ0cmFuc2Zvcm1lZENvbnRlbnQiLCJ0cmFuc2Zvcm1Db250ZW50IiwidHJhbnNmb3JtZWRTZWxlY3Rpb24iLCJ0cmFuc2Zvcm1TZWxlY3Rpb24iLCJyZW1haW5pbmdBcmd1bWVudHMiLCJldmVudExpc3RlbmVycyIsImZpbmRFdmVudExpc3RlbmVycyIsImZvckVhY2giLCJldmVudExpc3RlbmVyIiwiaGFuZGxlciIsImhhbmRsZXJFbGVtZW50IiwiY2FsbCIsImFjdGl2YXRlIiwib24iLCJLRVlET1dOX0VWRU5UX1RZUEUiLCJJTlBVVF9FVkVOVF9UWVBFIiwiYWRkQ2xhc3MiLCJkZWFjdGl2YXRlIiwib2ZmIiwicmVtb3ZlQ2xhc3MiLCJvbkZpbmQiLCJmaW5kSGFuZGxlciIsImFkZEV2ZW50TGlzdGVuZXIiLCJvZmZGaW5kIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIm9uQmx1ciIsIm9mZkJsdXIiLCJvbkZvY3VzIiwib2ZmRm9jdXMiLCJvblNjcm9sbCIsIm9mZlNjcm9sbCIsIm9uQ2hhbmdlIiwiY2hhbmdlSGFuZGxlciIsIm9mZkNoYW5nZSIsImdldFN0YXRlIiwidXBkYXRlU3RhdGUiLCJkaWRNb3VudCIsInByb3BlcnRpZXMiLCJ1cGRhdGVJbml0aWFsU3RhdGUiLCJDVVRfRVZFTlRfVFlQRSIsIkNPUFlfRVZFTlRfVFlQRSIsIlBBU1RFX0VWRU5UX1RZUEUiLCJDT05URVhUTUVOVV9FVkVOVF9UWVBFIiwiZG9jdW1lbnQiLCJTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSIsIndpbGxVbm1vdW50Iiwic2V0SW5pdGlhbFN0YXRlIiwic2V0U3RhdGUiLCJpbml0aWFsaXNlIiwiZnJvbUNsYXNzIiwiQ2xhc3MiLCJFbGVtZW50IiwiVW5kb0J1ZmZlciIsImZyb21Ob3RoaW5nIiwicmljaFRleHRhcmVhIiwidGFnTmFtZSIsImlnbm9yZWRQcm9wZXJ0aWVzIiwiZGVmYXVsdFByb3BlcnRpZXMiLCJjbGFzc05hbWUiLCJmdW5jIiwic2V0VGltZW91dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUEyQnFCQTs7O29CQXpCYTs4REFFWjsrREFDQzsyREFDSzsyREFDQTs0REFDQzsrREFDRTs2REFDQTt5QkFFSTt3QkFDSTswQkFZSTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTVCLElBQUEsQUFBTUEsNkJBc25CcEIsQUF0bkJjO2NBQU1BOzhCQUFBQTthQUFBQSxhQUNQQyxRQUFRLEVBQUVDLE9BQU8sRUFBRUMsUUFBUSxFQUFFQyxVQUFVOzhCQURoQ0o7O2tDQUVYQztRQTJCUkksK0NBQUFBLHVCQUFzQixTQUFDQyxPQUFPQyxTQUEyRztnQkFBbEdDLDRFQUFXLElBQUksRUFBRUMsNkVBQVlDLDZCQUFpQixFQUFFQyxvRkFBbUIsTUFBS0MsbUJBQW1CO1lBQ2hJLElBQUksTUFBS1QsUUFBUSxFQUFFO2dCQUNqQixJQUFNVSxrQkFBa0IsTUFBS0Msa0JBQWtCLElBQ3pDQyxVQUFVRixpQkFBa0IsR0FBRztn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
653
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9yaWNoVGV4dGFyZWEuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5pbXBvcnQgeyBFbGVtZW50LCBkb2N1bWVudCB9IGZyb20gXCJlYXN5XCI7XHJcblxyXG5pbXBvcnQgU2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvblwiXHJcbmltcG9ydCBVbmRvQnVmZmVyIGZyb20gXCIuL3VuZG9CdWZmZXJcIjtcclxuaW1wb3J0IGV2ZW50TWl4aW5zIGZyb20gXCIuL21peGlucy9ldmVudFwiO1xyXG5pbXBvcnQgSW5zZXJ0T3BlcmF0aW9uIGZyb20gXCIuL29wZXJhdGlvbi9pbnNlcnRcIjtcclxuaW1wb3J0IERlbGV0ZU9wZXJhdGlvbiBmcm9tIFwiLi9vcGVyYXRpb24vZGVsZXRlXCI7XHJcbmltcG9ydCB0cmFuc2Zvcm1Db250ZW50IGZyb20gXCIuL3RyYW5zZm9ybS9jb250ZW50XCI7XHJcbmltcG9ydCB0cmFuc2Zvcm1TZWxlY3Rpb24gZnJvbSBcIi4vdHJhbnNmb3JtL3NlbGVjdGlvblwiO1xyXG5pbXBvcnQgZ2VuZXJhdGVPcGVyYXRpb25zIGZyb20gXCIuL29wZXJhdGlvbnMvZ2VuZXJhdGVcIjtcclxuXHJcbmltcG9ydCB7IFRFWFQsIEVNUFRZX1NUUklORyB9IGZyb20gXCIuL2NvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBGX0tFWV9DT0RFLCBaX0tFWV9DT0RFIH0gZnJvbSBcIi4va2V5Q29kZXNcIjtcclxuaW1wb3J0IHsgQ1VUX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIENPUFlfRVZFTlRfVFlQRSxcclxuICAgICAgICAgRklORF9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBCTFVSX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIFBBU1RFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIElOUFVUX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIEZPQ1VTX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgIENIQU5HRV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBTQ1JPTExfRVZFTlRfVFlQRSxcclxuICAgICAgICAgS0VZRE9XTl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBDT05URVhUTUVOVV9FVkVOVF9UWVBFLFxyXG4gICAgICAgICBTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSB9IGZyb20gXCIuL2V2ZW50VHlwZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJpY2hUZXh0YXJlYSBleHRlbmRzIEVsZW1lbnQge1xyXG4gIGNvbnN0cnVjdG9yKHNlbGVjdG9yLCBmb2N1c2VkLCByZWFkT25seSwgdW5kb0J1ZmZlcikge1xyXG4gICAgc3VwZXIoc2VsZWN0b3IpO1xyXG5cclxuICAgIHRoaXMuZm9jdXNlZCA9IGZvY3VzZWQ7XHJcbiAgICB0aGlzLnJlYWRPbmx5ID0gcmVhZE9ubHk7XHJcbiAgICB0aGlzLnVuZG9CdWZmZXIgPSB1bmRvQnVmZmVyO1xyXG4gIH1cclxuXHJcbiAgaXNGb2N1c2VkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9jdXNlZDtcclxuICB9XHJcblxyXG4gIGlzUmVhZE9ubHkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5yZWFkT25seTtcclxuICB9XHJcblxyXG4gIGdldFVuZG9CdWZmZXIoKSB7XHJcbiAgICByZXR1cm4gdGhpcy51bmRvQnVmZmVyO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9jdXNlZChmb2N1c2VkKSB7XHJcbiAgICB0aGlzLmZvY3VzZWQgPSBmb2N1c2VkO1xyXG4gIH1cclxuXHJcbiAgc2V0UmVhZE9ubHkocmVhZE9ubHkpIHtcclxuICAgIHRoaXMucmVhZE9ubHkgPSByZWFkT25seTtcclxuICB9XHJcblxyXG4gIGN1dEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbXB0eSA9IHNlbGVjdGlvbi5pc0VtcHR5KCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGlvbkVtcHR5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZENvbnRlbnQgPSB0aGlzLmdldFNlbGVjdGVkQ29udGVudCgpO1xyXG5cclxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHNlbGVjdGVkQ29udGVudCk7XHJcblxyXG4gICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgZGVsZXRlT3BlcmF0aW9uID0gRGVsZXRlT3BlcmF0aW9uLmZyb21Db250ZW50QW5kU2VsZWN0aW9uKGNvbnRlbnQsIHNlbGVjdGlvbiksXHJcbiAgICAgICAgICBvcGVyYXRpb24gPSBkZWxldGVPcGVyYXRpb247ICAvLy9cclxuXHJcbiAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gIH1cclxuXHJcbiAgY29weUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGNvbnN0IHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25FbXB0eSA9IHNlbGVjdGlvbi5pc0VtcHR5KCk7XHJcblxyXG4gICAgaWYgKHNlbGVjdGlvbkVtcHR5KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZENvbnRlbnQgPSB0aGlzLmdldFNlbGVjdGVkQ29udGVudCgpO1xyXG5cclxuICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHNlbGVjdGVkQ29udGVudCk7XHJcblxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICB9XHJcblxyXG4gIHBhc3RlSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgY29uc3QgeyBjbGlwYm9hcmREYXRhIH0gPSBldmVudCxcclxuICAgICAgICAgIHRleHREYXRhID0gY2xpcGJvYXJkRGF0YS5nZXREYXRhKFRFWFQpO1xyXG5cclxuICAgIGlmICh0ZXh0RGF0YSA9PT0gRU1QVFlfU1RSSU5HKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgc2VsZWN0aW9uRW1wdHkgPSBzZWxlY3Rpb24uaXNFbXB0eSgpO1xyXG5cclxuICAgIGlmICghc2VsZWN0aW9uRW1wdHkpIHtcclxuICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuZ2V0Q29udGVudCgpLFxyXG4gICAgICAgICAgICBkZWxldGVPcGVyYXRpb24gPSBEZWxldGVPcGVyYXRpb24uZnJvbUNvbnRlbnRBbmRTZWxlY3Rpb24oY29udGVudCwgc2VsZWN0aW9uKSxcclxuICAgICAgICAgICAgb3BlcmF0aW9uID0gZGVsZXRlT3BlcmF0aW9uO1xyXG5cclxuICAgICAgdGhpcy5hcHBseU9wZXJhdGlvbihvcGVyYXRpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0ZXh0RGF0YSwgLy8vXHJcbiAgICAgICAgICBpbnNlcnRPcGVyYXRpb24gPSBJbnNlcnRPcGVyYXRpb24uZnJvbUNvbnRlbnRBbmRTZWxlY3Rpb24oY29udGVudCwgc2VsZWN0aW9uKSxcclxuICAgICAgICAgIG9wZXJhdGlvbiA9IGluc2VydE9wZXJhdGlvbjsgIC8vL1xyXG5cclxuICAgIHRoaXMuYXBwbHlPcGVyYXRpb24ob3BlcmF0aW9uKTtcclxuXHJcbiAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpO1xyXG5cclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBpbnB1dEhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICBibHVySGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgdGhpcy5mb2N1c2VkID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgdW5kb2FibGUgPSB0cnVlLFxyXG4gICAgICAgICAgZXZlbnRUeXBlID0gQkxVUl9FVkVOVF9UWVBFLFxyXG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSwgZXZlbnRUeXBlLCBzZWxlY3Rpb25DaGFuZ2VkKTtcclxuICB9XHJcblxyXG4gIGZvY3VzSGFuZGxlciA9IChldmVudCwgZWxlbWVudCkgPT4ge1xyXG4gICAgdGhpcy5mb2N1c2VkID0gdHJ1ZTtcclxuXHJcbiAgICBkZWZlcigoKSA9PiB7XHJcbiAgICAgIGNvbnN0IHVuZG9hYmxlID0gdHJ1ZSxcclxuICAgICAgICAgICAgZXZlbnRUeXBlID0gRk9DVVNfRVZFTlRfVFlQRSxcclxuICAgICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9IHRydWU7XHJcblxyXG4gICAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlLCBldmVudFR5cGUsIHNlbGVjdGlvbkNoYW5nZWQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzY3JvbGxIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBjb25zdCBldmVudFR5cGUgPSBTQ1JPTExfRVZFTlRfVFlQRTtcclxuXHJcbiAgICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIGV2ZW50LCBlbGVtZW50KTtcclxuICB9XHJcblxyXG4gIGtleURvd25IYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBsZXQgcHJldmVudERlZmF1bHQgPSBmYWxzZTtcclxuXHJcbiAgICBjb25zdCB7IGtleUNvZGUgfSA9IGV2ZW50O1xyXG5cclxuICAgIHN3aXRjaCAoa2V5Q29kZSkge1xyXG4gICAgICBjYXNlIFpfS0VZX0NPREU6XHJcbiAgICAgICAgcHJldmVudERlZmF1bHQgPSB0aGlzLnpLZXlEb3duKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICBjYXNlIEZfS0VZX0NPREU6XHJcbiAgICAgICAgcHJldmVudERlZmF1bHQgPSB0aGlzLmZLZXlEb3duKGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHByZXZlbnREZWZhdWx0KSB7XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgZGVmZXIoKCkgPT4ge1xyXG4gICAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBjb250ZXh0bWVudUhhbmRsZXIgPSAoZXZlbnQsIGVsZW1lbnQpID0+IHtcclxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RDaGFuZ2VIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50KSA9PiB7XHJcbiAgICBpZiAodGhpcy5mb2N1c2VkKSB7XHJcbiAgICAgIGVsZW1lbnQgPSB0aGlzOyAvLy9cclxuXHJcbiAgICAgIHRoaXMuaW50ZXJtZWRpYXRlSGFuZGxlcihldmVudCwgZWxlbWVudCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbnRlcm1lZGlhdGVIYW5kbGVyID0gKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSA9IHRydWUsIGV2ZW50VHlwZSA9IENIQU5HRV9FVkVOVF9UWVBFLCBzZWxlY3Rpb25DaGFuZ2VkID0gdGhpcy5oYXNTZWxlY3Rpb25DaGFuZ2VkKCkpID0+IHtcclxuICAgIGlmICh0aGlzLnJlYWRPbmx5KSB7XHJcbiAgICAgIGNvbnN0IHByZXZpb3VzQ29udGVudCA9IHRoaXMuZ2V0UHJldmlvdXNDb250ZW50KCksXHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBwcmV2aW91c0NvbnRlbnQ7ICAvLy9cclxuXHJcbiAgICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgY29udGVudENoYW5nZWQgPSB0aGlzLmhhc0NvbnRlbnRDaGFuZ2VkKCksXHJcbiAgICAgICAgICBjaGFuZ2VkID0gKGNvbnRlbnRDaGFuZ2VkIHx8IHNlbGVjdGlvbkNoYW5nZWQpO1xyXG5cclxuICAgIGlmIChjaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuY2FsbEhhbmRsZXJzKGV2ZW50VHlwZSwgZXZlbnQsIGVsZW1lbnQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh1bmRvYWJsZSkge1xyXG4gICAgICBpZiAoY29udGVudENoYW5nZWQpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91c0NvbnRlbnQgPSB0aGlzLmdldFByZXZpb3VzQ29udGVudCgpLFxyXG4gICAgICAgICAgICAgIG9wZXJhdGlvbnMgPSBnZW5lcmF0ZU9wZXJhdGlvbnMocHJldmlvdXNDb250ZW50LCBjb250ZW50KTtcclxuXHJcbiAgICAgICAgdGhpcy51bmRvQnVmZmVyLmFkZE9wZXJhdGlvbnMob3BlcmF0aW9ucyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBwcmV2aW91c0NvbnRlbnQgPSBjb250ZW50LCAgLy8vXHJcbiAgICAgICAgICBwcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbjsgIC8vL1xyXG5cclxuICAgIHRoaXMuc2V0UHJldmlvdXNDb250ZW50KHByZXZpb3VzQ29udGVudCk7XHJcblxyXG4gICAgdGhpcy5zZXRQcmV2aW91c1NlbGVjdGlvbihwcmV2aW91c1NlbGVjdGlvbik7XHJcbiAgfVxyXG5cclxuICBjYWxsSGFuZGxlcnMoZXZlbnRUeXBlLCAuLi5yZW1haW5pbmdBcmd1bWVudHMpIHtcclxuICAgIGNvbnN0IGV2ZW50TGlzdGVuZXJzID0gdGhpcy5maW5kRXZlbnRMaXN0ZW5lcnMoZXZlbnRUeXBlKTtcclxuXHJcbiAgICBldmVudExpc3RlbmVycy5mb3JFYWNoKChldmVudExpc3RlbmVyKSA9PiB7XHJcbiAgICAgIGxldCB7IGVsZW1lbnQgfSA9IGV2ZW50TGlzdGVuZXI7XHJcblxyXG4gICAgICBjb25zdCB7IGhhbmRsZXIgfSA9IGV2ZW50TGlzdGVuZXIsXHJcbiAgICAgICAgICAgIGhhbmRsZXJFbGVtZW50ID0gZWxlbWVudDsgLy8vXHJcblxyXG4gICAgICBlbGVtZW50ID0gdGhpczsgLy8vXHJcblxyXG4gICAgICBpZiAoIChoYW5kbGVyICE9PSB0aGlzLmN1dEhhbmRsZXIpXHJcbiAgICAgICAgJiYgKGhhbmRsZXIgIT09IHRoaXMuY29weUhhbmRsZXIpXHJcbiAgICAgICAgJiYgKGhhbmRsZXIgIT09IHRoaXMucGFzdGVIYW5kbGVyKVxyXG4gICAgICAgICYmIChoYW5kbGVyICE9PSB0aGlzLmlucHV0SGFuZGxlcilcclxuICAgICAgICAmJiAoaGFuZGxlciAhPT0gdGhpcy5ibHVySGFuZGxlcilcclxuICAgICAgICAmJiAoaGFuZGxlciAhPT0gdGhpcy5mb2N1c0hhbmRsZXIpXHJcbiAgICAgICAgJiYgKGhhbmRsZXIgIT09IHRoaXMuc2Nyb2xsSGFuZGxlcilcclxuICAgICAgICAmJiAoaGFuZGxlciAhPT0gdGhpcy5rZXlEb3duSGFuZGxlcilcclxuICAgICAgICAmJiAoaGFuZGxlciAhPT0gdGhpcy5jb250ZXh0bWVudUhhbmRsZXIpXHJcbiAgICAgICAgJiYgKGhhbmRsZXIgIT09IHRoaXMuc2VsZWN0Q2hhbmdlSGFuZGxlcikgKSB7XHJcblxyXG4gICAgICAgIGhhbmRsZXIuY2FsbChoYW5kbGVyRWxlbWVudCwgLi4ucmVtYWluaW5nQXJndW1lbnRzLCBlbGVtZW50KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpc0FjdGl2ZSgpIHtcclxuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuaGFzQ2xhc3MoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgcmV0dXJuIGFjdGl2ZTtcclxuICB9XHJcblxyXG4gIGdldENvbnRlbnQoKSB7XHJcbiAgICBjb25zdCBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCksXHJcbiAgICAgICAgICB7IHZhbHVlIH0gPSBkb21FbGVtZW50LFxyXG4gICAgICAgICAgY29udGVudCA9IHZhbHVlOyAgLy8vXHJcblxyXG4gICAgcmV0dXJuIGNvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBnZXRTZWxlY3Rpb24oKSB7XHJcbiAgICBjb25zdCBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCksXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSBTZWxlY3Rpb24uZnJvbURPTUVsZW1lbnQoZG9tRWxlbWVudCk7XHJcblxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIGdldFNlbGVjdGVkQ29udGVudCgpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIHNlbGVjdGlvbiA9IHRoaXMuZ2V0U2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBlbmRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRFbmRQb3NpdGlvbigpLFxyXG4gICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IHNlbGVjdGlvbi5nZXRTdGFydFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzdGFydCA9IHN0YXJ0UG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIGVuZCA9IGVuZFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBzZWxlY3RlZENvbnRlbnQgPSBjb250ZW50LnNsaWNlKHN0YXJ0LCBlbmQpO1xyXG5cclxuICAgIHJldHVybiBzZWxlY3RlZENvbnRlbnQ7XHJcbiAgfVxyXG5cclxuICBoYXNDb250ZW50Q2hhbmdlZCgpIHtcclxuICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICAgIHByZXZpb3VzQ29udGVudCA9IHRoaXMuZ2V0UHJldmlvdXNDb250ZW50KCksXHJcbiAgICAgICAgICBjb250ZW50UHJldmlvdXNDb250ZW50ID0gKGNvbnRlbnQgPT09IHByZXZpb3VzQ29udGVudCksXHJcbiAgICAgICAgICBjb250ZW50Q2hhbmdlZCA9ICFjb250ZW50UHJldmlvdXNDb250ZW50O1xyXG5cclxuICAgIHJldHVybiBjb250ZW50Q2hhbmdlZDtcclxuICB9XHJcblxyXG4gIGhhc1NlbGVjdGlvbkNoYW5nZWQoKSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgcHJldmlvdXNTZWxlY3Rpb24gPSB0aGlzLmdldFByZXZpb3VzU2VsZWN0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25QcmV2aW91c1NlbGVjdGlvbiA9IHNlbGVjdGlvbi5pc0VxdWFsVG8ocHJldmlvdXNTZWxlY3Rpb24pLFxyXG4gICAgICAgICAgc2VsZWN0aW9uQ2hhbmdlZCA9ICFzZWxlY3Rpb25QcmV2aW91c1NlbGVjdGlvbjsgLy8vXHJcblxyXG4gICAgcmV0dXJuIHNlbGVjdGlvbkNoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICBzZXRDb250ZW50KGNvbnRlbnQsIHNldFByZXZpb3VzQ29udGVudCA9IHRydWUpIHtcclxuICAgIGNvbnN0IHZhbHVlID0gY29udGVudCwgIC8vL1xyXG4gICAgICAgICAgZG9tRWxlbWVudCA9IHRoaXMuZ2V0RE9NRWxlbWVudCgpO1xyXG5cclxuICAgIE9iamVjdC5hc3NpZ24oZG9tRWxlbWVudCwge1xyXG4gICAgICB2YWx1ZVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHNldFByZXZpb3VzQ29udGVudCkge1xyXG4gICAgICBjb25zdCBwcmV2aW91c0NvbnRlbnQgPSBjb250ZW50OyAgLy8vXHJcblxyXG4gICAgICB0aGlzLnNldFByZXZpb3VzQ29udGVudChwcmV2aW91c0NvbnRlbnQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24gPSB0cnVlKSB7XHJcbiAgICBjb25zdCBzZWxlY3Rpb25TdGFydFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldFN0YXJ0UG9zaXRpb24oKSxcclxuICAgICAgICAgIHNlbGVjdGlvbkVuZFBvc2l0aW9uID0gc2VsZWN0aW9uLmdldEVuZFBvc2l0aW9uKCksXHJcbiAgICAgICAgICBzZWxlY3Rpb25TdGFydCA9IHNlbGVjdGlvblN0YXJ0UG9zaXRpb24sICAvLy9cclxuICAgICAgICAgIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbkVuZFBvc2l0aW9uLCAgLy8vXHJcbiAgICAgICAgICBkb21FbGVtZW50ID0gdGhpcy5nZXRET01FbGVtZW50KCk7XHJcblxyXG4gICAgZG9tRWxlbWVudC5zZXRTZWxlY3Rpb25SYW5nZShzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kKTtcclxuXHJcbiAgICBpZiAoc2V0UHJldmlvdXNTZWxlY3Rpb24pIHtcclxuICAgICAgY29uc3QgcHJldmlvdXNTZWxlY3Rpb24gPSBzZWxlY3Rpb247ICAvLy9cclxuXHJcbiAgICAgIHRoaXMuc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZktleURvd24oZXZlbnQsIGVsZW1lbnQpIHtcclxuICAgIGxldCBwcmV2ZW50RGVmYXVsdCA9IGZhbHNlO1xyXG5cclxuICAgIGNvbnN0IHsgY3RybEtleSwgbWV0YUtleSB9ID0gZXZlbnQ7XHJcblxyXG4gICAgaWYgKGN0cmxLZXkgfHwgbWV0YUtleSkge1xyXG4gICAgICBjb25zdCBldmVudFR5cGUgPSBGSU5EX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgICB0aGlzLmNhbGxIYW5kbGVycyhldmVudFR5cGUsIGV2ZW50LCBlbGVtZW50KTtcclxuXHJcbiAgICAgIHByZXZlbnREZWZhdWx0ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gcHJldmVudERlZmF1bHQ7XHJcbiAgfVxyXG5cclxuICB6S2V5RG93bihldmVudCwgZWxlbWVudCkge1xyXG4gICAgbGV0IHByZXZlbnREZWZhdWx0ID0gZmFsc2U7XHJcblxyXG4gICAgY29uc3QgeyBjdHJsS2V5LCBtZXRhS2V5LCBzaGlmdEtleSB9ID0gZXZlbnQ7XHJcblxyXG4gICAgaWYgKGN0cmxLZXkgfHwgbWV0YUtleSkge1xyXG4gICAgICBjb25zdCBvcGVyYXRpb24gPSBzaGlmdEtleSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmRvQnVmZmVyLnJlZG8oKSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuZG9CdWZmZXIudW5kbygpO1xyXG5cclxuICAgICAgaWYgKG9wZXJhdGlvbiAhPT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IHVuZG9hYmxlID0gZmFsc2UsXHJcbiAgICAgICAgICAgICAgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEUsXHJcbiAgICAgICAgICAgICAgc2VsZWN0aW9uID0gU2VsZWN0aW9uLmZyb21PcGVyYXRpb24ob3BlcmF0aW9uKSxcclxuICAgICAgICAgICAgICBzZXRQcmV2aW91c1NlbGVjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgICAgICB0aGlzLmFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbik7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24pO1xyXG5cclxuICAgICAgICB0aGlzLmludGVybWVkaWF0ZUhhbmRsZXIoZXZlbnQsIGVsZW1lbnQsIHVuZG9hYmxlLCBldmVudFR5cGUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBwcmV2ZW50RGVmYXVsdCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHByZXZlbnREZWZhdWx0O1xyXG4gIH1cclxuXHJcbiAgdHJhbnNmb3JtKG9wZXJhdGlvbnMpIHtcclxuICAgIGxldCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgc2VsZWN0aW9uID0gdGhpcy5nZXRTZWxlY3Rpb24oKTtcclxuXHJcbiAgICBjb25zdCB0cmFuc2Zvcm1lZENvbnRlbnQgPSB0cmFuc2Zvcm1Db250ZW50KGNvbnRlbnQsIG9wZXJhdGlvbnMpLFxyXG4gICAgICAgICAgdHJhbnNmb3JtZWRTZWxlY3Rpb24gPSB0cmFuc2Zvcm1TZWxlY3Rpb24oc2VsZWN0aW9uLCBvcGVyYXRpb25zKTtcclxuXHJcbiAgICBjb250ZW50ID0gdHJhbnNmb3JtZWRDb250ZW50OyAvLy9cclxuXHJcbiAgICBzZWxlY3Rpb24gPSB0cmFuc2Zvcm1lZFNlbGVjdGlvbjsgLy8vXHJcblxyXG4gICAgY29uc3Qgc2V0UHJldmlvdXNDb250ZW50ID0gZmFsc2UsXHJcbiAgICAgICAgICBzZXRQcmV2aW91c1NlbGVjdGlvbiA9IGZhbHNlO1xyXG5cclxuICAgIHRoaXMuc2V0Q29udGVudChjb250ZW50LCBzZXRQcmV2aW91c0NvbnRlbnQpO1xyXG5cclxuICAgIHRoaXMuc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgc2V0UHJldmlvdXNTZWxlY3Rpb24pO1xyXG5cclxuICAgIHRoaXMudW5kb0J1ZmZlci50cmFuc2Zvcm0ob3BlcmF0aW9ucyk7XHJcblxyXG4gICAgY29uc3QgZXZlbnQgPSBudWxsLFxyXG4gICAgICAgICAgZWxlbWVudCA9IHRoaXMsXHJcbiAgICAgICAgICB1bmRvYWJsZSA9IGZhbHNlLFxyXG4gICAgICAgICAgZXZlbnRUeXBlID0gQ0hBTkdFX0VWRU5UX1RZUEU7XHJcblxyXG4gICAgdGhpcy5pbnRlcm1lZGlhdGVIYW5kbGVyKGV2ZW50LCBlbGVtZW50LCB1bmRvYWJsZSwgZXZlbnRUeXBlKTtcclxuICB9XHJcblxyXG4gIGFwcGx5T3BlcmF0aW9uKG9wZXJhdGlvbikge1xyXG4gICAgbGV0IGNvbnRlbnQgPSB0aGlzLmdldENvbnRlbnQoKSxcclxuICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpO1xyXG5cclxuICAgIGNvbnN0IHRyYW5zZm9ybWVkQ29udGVudCA9IG9wZXJhdGlvbi50cmFuc2Zvcm1Db250ZW50KGNvbnRlbnQpLFxyXG4gICAgICAgICAgdHJhbnNmb3JtZWRTZWxlY3Rpb24gPSBvcGVyYXRpb24udHJhbnNmb3JtU2VsZWN0aW9uKHNlbGVjdGlvbik7XHJcblxyXG4gICAgY29udGVudCA9IHRyYW5zZm9ybWVkQ29udGVudDsgLy8vXHJcblxyXG4gICAgc2VsZWN0aW9uID0gdHJhbnNmb3JtZWRTZWxlY3Rpb247IC8vL1xyXG5cclxuICAgIGNvbnN0IHNldFByZXZpb3VzQ29udGVudCA9IGZhbHNlLFxyXG4gICAgICAgICAgc2V0UHJldmlvdXNTZWxlY3Rpb24gPSBmYWxzZTtcclxuXHJcbiAgICB0aGlzLnNldENvbnRlbnQoY29udGVudCwgc2V0UHJldmlvdXNDb250ZW50KTtcclxuXHJcbiAgICB0aGlzLnNldFNlbGVjdGlvbihzZWxlY3Rpb24sIHNldFByZXZpb3VzU2VsZWN0aW9uKTtcclxuICB9XHJcblxyXG4gIGFjdGl2YXRlKCkge1xyXG4gICAgdGhpcy5vbihDVVRfRVZFTlRfVFlQRSwgdGhpcy5jdXRIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9uKENPUFlfRVZFTlRfVFlQRSwgdGhpcy5jb3B5SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vbihQQVNURV9FVkVOVF9UWVBFLCB0aGlzLnBhc3RlSGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vbihJTlBVVF9FVkVOVF9UWVBFLCB0aGlzLmlucHV0SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vbihCTFVSX0VWRU5UX1RZUEUsIHRoaXMuYmx1ckhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub24oRk9DVVNfRVZFTlRfVFlQRSwgdGhpcy5mb2N1c0hhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub24oU0NST0xMX0VWRU5UX1RZUEUsIHRoaXMuc2Nyb2xsSGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vbihLRVlET1dOX0VWRU5UX1RZUEUsIHRoaXMua2V5RG93bkhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub24oQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSwgdGhpcy5jb250ZXh0bWVudUhhbmRsZXIpO1xyXG5cclxuICAgIGRvY3VtZW50Lm9uKFNFTEVDVElPTkNIQU5HRV9FVkVOVF9UWVBFLCB0aGlzLnNlbGVjdENoYW5nZUhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMuYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgfVxyXG5cclxuICBkZWFjdGl2YXRlKCkge1xyXG4gICAgdGhpcy5vZmYoQ1VUX0VWRU5UX1RZUEUsIHRoaXMuY3V0SGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoQ09QWV9FVkVOVF9UWVBFLCB0aGlzLmNvcHlIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLm9mZihQQVNURV9FVkVOVF9UWVBFLCB0aGlzLnBhc3RlSGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoSU5QVVRfRVZFTlRfVFlQRSwgdGhpcy5pbnB1dEhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub2ZmKEJMVVJfRVZFTlRfVFlQRSwgdGhpcy5ibHVySGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoRk9DVVNfRVZFTlRfVFlQRSwgdGhpcy5mb2N1c0hhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub2ZmKFNDUk9MTF9FVkVOVF9UWVBFLCB0aGlzLnNjcm9sbEhhbmRsZXIpO1xyXG5cclxuICAgIHRoaXMub2ZmKEtFWURPV05fRVZFTlRfVFlQRSwgdGhpcy5rZXlEb3duSGFuZGxlcik7XHJcblxyXG4gICAgdGhpcy5vZmYoQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSwgdGhpcy5jb250ZXh0bWVudUhhbmRsZXIpO1xyXG5cclxuICAgIGRvY3VtZW50Lm9mZihTRUxFQ1RJT05DSEFOR0VfRVZFTlRfVFlQRSwgdGhpcy5zZWxlY3RDaGFuZ2VIYW5kbGVyKTtcclxuXHJcbiAgICB0aGlzLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNDb250ZW50KCkge1xyXG4gICAgY29uc3QgeyBwcmV2aW91c0NvbnRlbnQgfSA9IHRoaXMuZ2V0U3RhdGUoKTtcclxuXHJcbiAgICByZXR1cm4gcHJldmlvdXNDb250ZW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0UHJldmlvdXNTZWxlY3Rpb24oKSB7XHJcbiAgICBjb25zdCB7IHByZXZpb3VzU2VsZWN0aW9uIH0gPSB0aGlzLmdldFN0YXRlKCk7XHJcblxyXG4gICAgcmV0dXJuIHByZXZpb3VzU2VsZWN0aW9uO1xyXG4gIH1cclxuXHJcbiAgc2V0UHJldmlvdXNDb250ZW50KHByZXZpb3VzQ29udGVudCkge1xyXG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XHJcbiAgICAgIHByZXZpb3VzQ29udGVudFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQcmV2aW91c1NlbGVjdGlvbihwcmV2aW91c1NlbGVjdGlvbikge1xyXG4gICAgdGhpcy51cGRhdGVTdGF0ZSh7XHJcbiAgICAgIHByZXZpb3VzU2VsZWN0aW9uXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGRpZE1vdW50KCkge1xyXG4gICAgY29uc3QgeyBvbkZpbmQsIG9uQmx1ciwgb25Gb2N1cywgb25TY3JvbGwsIG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BlcnRpZXMsXHJcbiAgICAgICAgICBmaW5kSGFuZGxlciA9IG9uRmluZCwgLy8vXHJcbiAgICAgICAgICBibHVySGFuZGxlciA9IG9uQmx1ciwgLy8vXHJcbiAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgIHNjcm9sbEhhbmRsZXIgPSBvblNjcm9sbCwgLy8vXHJcbiAgICAgICAgICBjaGFuZ2VIYW5kbGVyID0gb25DaGFuZ2U7IC8vL1xyXG5cclxuICAgIHRoaXMudXBkYXRlSW5pdGlhbFN0YXRlKCk7XHJcblxyXG4gICAgZmluZEhhbmRsZXIgJiYgdGhpcy5vbkZpbmQoZmluZEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub25CbHVyKGJsdXJIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBmb2N1c0hhbmRsZXIgJiYgdGhpcy5vbkZvY3VzKGZvY3VzSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgc2Nyb2xsSGFuZGxlciAmJiB0aGlzLm9uU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGNoYW5nZUhhbmRsZXIgJiYgdGhpcy5vbkNoYW5nZShjaGFuZ2VIYW5kbGVyLCB0aGlzKTtcclxuICB9XHJcblxyXG4gIHdpbGxVbm1vdW50KCkge1xyXG4gICAgY29uc3QgeyBvbkZpbmQsIG9uQmx1ciwgb25Gb2N1cywgb25TY3JvbGwsIG9uQ2hhbmdlIH0gPSB0aGlzLnByb3BlcnRpZXMsXHJcbiAgICAgICAgICAgIGZpbmRIYW5kbGVyID0gb25GaW5kLCAvLy9cclxuICAgICAgICAgICAgYmx1ckhhbmRsZXIgPSBvbkJsdXIsIC8vL1xyXG4gICAgICAgICAgICBmb2N1c0hhbmRsZXIgPSBvbkZvY3VzLCAvLy9cclxuICAgICAgICAgICAgc2Nyb2xsSGFuZGxlciA9IG9uU2Nyb2xsLCAvLy9cclxuICAgICAgICAgICAgY2hhbmdlSGFuZGxlciA9IG9uQ2hhbmdlOyAvLy9cclxuXHJcbiAgICBmaW5kSGFuZGxlciAmJiB0aGlzLm9mZkZpbmQoZmluZEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGJsdXJIYW5kbGVyICYmIHRoaXMub2ZmQmx1cihibHVySGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgZm9jdXNIYW5kbGVyICYmIHRoaXMub2ZmRm9jdXMoZm9jdXNIYW5kbGVyLCB0aGlzKTtcclxuXHJcbiAgICBzY3JvbGxIYW5kbGVyICYmIHRoaXMub2ZmU2Nyb2xsKHNjcm9sbEhhbmRsZXIsIHRoaXMpO1xyXG5cclxuICAgIGNoYW5nZUhhbmRsZXIgJiYgdGhpcy5vZmZDaGFuZ2UoY2hhbmdlSGFuZGxlciwgdGhpcyk7XHJcblxyXG4gICAgY29uc3QgYWN0aXZlID0gdGhpcy5pc0FjdGl2ZSgpO1xyXG5cclxuICAgIGlmIChhY3RpdmUpIHtcclxuICAgICAgdGhpcy5kZWFjdGl2YXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVJbml0aWFsU3RhdGUoKSB7XHJcbiAgICBjb25zdCBjb250ZW50ID0gdGhpcy5nZXRDb250ZW50KCksXHJcbiAgICAgICAgICBzZWxlY3Rpb24gPSB0aGlzLmdldFNlbGVjdGlvbigpLFxyXG4gICAgICAgICAgcHJldmlvdXNDb250ZW50ID0gY29udGVudCwgIC8vL1xyXG4gICAgICAgICAgcHJldmlvdXNTZWxlY3Rpb24gPSBzZWxlY3Rpb247ICAvLy9cclxuXHJcbiAgICB0aGlzLnNldFByZXZpb3VzQ29udGVudChwcmV2aW91c0NvbnRlbnQpO1xyXG5cclxuICAgIHRoaXMuc2V0UHJldmlvdXNTZWxlY3Rpb24ocHJldmlvdXNTZWxlY3Rpb24pO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5pdGlhbFN0YXRlKCkge1xyXG4gICAgY29uc3QgcHJldmlvdXNDb250ZW50ID0gbnVsbCxcclxuICAgICAgICAgIHByZXZpb3VzU2VsZWN0aW9uID0gbnVsbDtcclxuXHJcbiAgICB0aGlzLnNldFN0YXRlKHtcclxuICAgICAgcHJldmlvdXNDb250ZW50LFxyXG4gICAgICBwcmV2aW91c1NlbGVjdGlvblxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXNlKCkge1xyXG4gICAgdGhpcy5zZXRJbml0aWFsU3RhdGUoKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyB0YWdOYW1lID0gXCJ0ZXh0YXJlYVwiO1xyXG5cclxuICBzdGF0aWMgaWdub3JlZFByb3BlcnRpZXMgPSBbXHJcbiAgICBcIm9uRmluZFwiLFxyXG4gICAgXCJvbkJsdXJcIixcclxuICAgIFwib25Gb2N1c1wiLFxyXG4gICAgXCJvblNjcm9sbFwiLFxyXG4gICAgXCJvbkNoYW5nZVwiXHJcbiAgXTtcclxuXHJcbiAgc3RhdGljIGRlZmF1bHRQcm9wZXJ0aWVzID0ge1xyXG4gICAgY2xhc3NOYW1lOiBcInJpY2hcIlxyXG4gIH07XHJcblxyXG4gIHN0YXRpYyBmcm9tQ2xhc3MoQ2xhc3MsIHByb3BlcnRpZXMsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cykge1xyXG4gICAgY29uc3QgZm9jdXNlZCA9IGZhbHNlLFxyXG4gICAgICAgICAgcmVhZE9ubHkgPSBmYWxzZSxcclxuICAgICAgICAgIHVuZG9CdWZmZXIgPSBVbmRvQnVmZmVyLmZyb21Ob3RoaW5nKCksXHJcbiAgICAgICAgICByaWNoVGV4dGFyZWEgPSBFbGVtZW50LmZyb21DbGFzcyhDbGFzcywgcHJvcGVydGllcywgZm9jdXNlZCwgcmVhZE9ubHksIHVuZG9CdWZmZXIsIC4uLnJlbWFpbmluZ0FyZ3VtZW50cyk7XHJcblxyXG4gICAgcmV0dXJuIHJpY2hUZXh0YXJlYTtcclxuICB9XHJcbn1cclxuXHJcbk9iamVjdC5hc3NpZ24oUmljaFRleHRhcmVhLnByb3RvdHlwZSwgZXZlbnRNaXhpbnMpO1xyXG5cclxuZnVuY3Rpb24gZGVmZXIoZnVuYykge1xyXG4gIHNldFRpbWVvdXQoZnVuYywgMCk7XHJcbn1cclxuIl0sIm5hbWVzIjpbIlJpY2hUZXh0YXJlYSIsInNlbGVjdG9yIiwiZm9jdXNlZCIsInJlYWRPbmx5IiwidW5kb0J1ZmZlciIsImN1dEhhbmRsZXIiLCJldmVudCIsImVsZW1lbnQiLCJzZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJzZWxlY3Rpb25FbXB0eSIsImlzRW1wdHkiLCJzZWxlY3RlZENvbnRlbnQiLCJnZXRTZWxlY3RlZENvbnRlbnQiLCJuYXZpZ2F0b3IiLCJjbGlwYm9hcmQiLCJ3cml0ZVRleHQiLCJjb250ZW50IiwiZ2V0Q29udGVudCIsImRlbGV0ZU9wZXJhdGlvbiIsIkRlbGV0ZU9wZXJhdGlvbiIsImZyb21Db250ZW50QW5kU2VsZWN0aW9uIiwib3BlcmF0aW9uIiwiYXBwbHlPcGVyYXRpb24iLCJpbnRlcm1lZGlhdGVIYW5kbGVyIiwicHJldmVudERlZmF1bHQiLCJjb3B5SGFuZGxlciIsInBhc3RlSGFuZGxlciIsImNsaXBib2FyZERhdGEiLCJ0ZXh0RGF0YSIsImdldERhdGEiLCJURVhUIiwiRU1QVFlfU1RSSU5HIiwiaW5zZXJ0T3BlcmF0aW9uIiwiSW5zZXJ0T3BlcmF0aW9uIiwiaW5wdXRIYW5kbGVyIiwiYmx1ckhhbmRsZXIiLCJ1bmRvYWJsZSIsImV2ZW50VHlwZSIsIkJMVVJfRVZFTlRfVFlQRSIsInNlbGVjdGlvbkNoYW5nZWQiLCJmb2N1c0hhbmRsZXIiLCJkZWZlciIsIkZPQ1VTX0VWRU5UX1RZUEUiLCJzY3JvbGxIYW5kbGVyIiwiU0NST0xMX0VWRU5UX1RZUEUiLCJjYWxsSGFuZGxlcnMiLCJrZXlEb3duSGFuZGxlciIsImtleUNvZGUiLCJaX0tFWV9DT0RFIiwiektleURvd24iLCJGX0tFWV9DT0RFIiwiZktleURvd24iLCJjb250ZXh0bWVudUhhbmRsZXIiLCJzZWxlY3RDaGFuZ2VIYW5kbGVyIiwiQ0hBTkdFX0VWRU5UX1RZUEUiLCJoYXNTZWxlY3Rpb25DaGFuZ2VkIiwicHJldmlvdXNDb250ZW50IiwiZ2V0UHJldmlvdXNDb250ZW50Iiwic2V0Q29udGVudCIsImNvbnRlbnRDaGFuZ2VkIiwiaGFzQ29udGVudENoYW5nZWQiLCJjaGFuZ2VkIiwib3BlcmF0aW9ucyIsImdlbmVyYXRlT3BlcmF0aW9ucyIsImFkZE9wZXJhdGlvbnMiLCJwcmV2aW91c1NlbGVjdGlvbiIsInNldFByZXZpb3VzQ29udGVudCIsInNldFByZXZpb3VzU2VsZWN0aW9uIiwiaXNGb2N1c2VkIiwiaXNSZWFkT25seSIsImdldFVuZG9CdWZmZXIiLCJzZXRGb2N1c2VkIiwic2V0UmVhZE9ubHkiLCJyZW1haW5pbmdBcmd1bWVudHMiLCJldmVudExpc3RlbmVycyIsImZpbmRFdmVudExpc3RlbmVycyIsImZvckVhY2giLCJldmVudExpc3RlbmVyIiwiaGFuZGxlciIsImhhbmRsZXJFbGVtZW50IiwiY2FsbCIsImlzQWN0aXZlIiwiYWN0aXZlIiwiaGFzQ2xhc3MiLCJkb21FbGVtZW50IiwiZ2V0RE9NRWxlbWVudCIsInZhbHVlIiwiU2VsZWN0aW9uIiwiZnJvbURPTUVsZW1lbnQiLCJlbmRQb3NpdGlvbiIsImdldEVuZFBvc2l0aW9uIiwic3RhcnRQb3NpdGlvbiIsImdldFN0YXJ0UG9zaXRpb24iLCJzdGFydCIsImVuZCIsInNsaWNlIiwiY29udGVudFByZXZpb3VzQ29udGVudCIsImdldFByZXZpb3VzU2VsZWN0aW9uIiwic2VsZWN0aW9uUHJldmlvdXNTZWxlY3Rpb24iLCJpc0VxdWFsVG8iLCJPYmplY3QiLCJhc3NpZ24iLCJzZXRTZWxlY3Rpb24iLCJzZWxlY3Rpb25TdGFydFBvc2l0aW9uIiwic2VsZWN0aW9uRW5kUG9zaXRpb24iLCJzZWxlY3Rpb25TdGFydCIsInNlbGVjdGlvbkVuZCIsInNldFNlbGVjdGlvblJhbmdlIiwiY3RybEtleSIsIm1ldGFLZXkiLCJGSU5EX0VWRU5UX1RZUEUiLCJzaGlmdEtleSIsInJlZG8iLCJ1bmRvIiwiZnJvbU9wZXJhdGlvbiIsInRyYW5zZm9ybSIsInRyYW5zZm9ybWVkQ29udGVudCIsInRyYW5zZm9ybUNvbnRlbnQiLCJ0cmFuc2Zvcm1lZFNlbGVjdGlvbiIsInRyYW5zZm9ybVNlbGVjdGlvbiIsImFjdGl2YXRlIiwib24iLCJDVVRfRVZFTlRfVFlQRSIsIkNPUFlfRVZFTlRfVFlQRSIsIlBBU1RFX0VWRU5UX1RZUEUiLCJJTlBVVF9FVkVOVF9UWVBFIiwiS0VZRE9XTl9FVkVOVF9UWVBFIiwiQ09OVEVYVE1FTlVfRVZFTlRfVFlQRSIsImRvY3VtZW50IiwiU0VMRUNUSU9OQ0hBTkdFX0VWRU5UX1RZUEUiLCJhZGRDbGFzcyIsImRlYWN0aXZhdGUiLCJvZmYiLCJyZW1vdmVDbGFzcyIsImdldFN0YXRlIiwidXBkYXRlU3RhdGUiLCJkaWRNb3VudCIsInByb3BlcnRpZXMiLCJvbkZpbmQiLCJvbkJsdXIiLCJvbkZvY3VzIiwib25TY3JvbGwiLCJvbkNoYW5nZSIsImZpbmRIYW5kbGVyIiwiY2hhbmdlSGFuZGxlciIsInVwZGF0ZUluaXRpYWxTdGF0ZSIsIndpbGxVbm1vdW50Iiwib2ZmRmluZCIsIm9mZkJsdXIiLCJvZmZGb2N1cyIsIm9mZlNjcm9sbCIsIm9mZkNoYW5nZSIsInNldEluaXRpYWxTdGF0ZSIsInNldFN0YXRlIiwiaW5pdGlhbGlzZSIsImZyb21DbGFzcyIsIkNsYXNzIiwiRWxlbWVudCIsIlVuZG9CdWZmZXIiLCJmcm9tTm90aGluZyIsInJpY2hUZXh0YXJlYSIsInRhZ05hbWUiLCJpZ25vcmVkUHJvcGVydGllcyIsImRlZmF1bHRQcm9wZXJ0aWVzIiwiY2xhc3NOYW1lIiwicHJvdG90eXBlIiwiZXZlbnRNaXhpbnMiLCJmdW5jIiwic2V0VGltZW91dCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUE0QnFCQTs7O29CQTFCYTs4REFFWjsrREFDQzswREFDQzsyREFDSTsyREFDQTs0REFDQzsrREFDRTs2REFDQTt5QkFFSTt3QkFDSTswQkFZSTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTVCLElBQUEsQUFBTUEsNkJBMmpCcEIsQUEzakJjO2NBQU1BOzhCQUFBQTthQUFBQSxhQUNQQyxRQUFRLEVBQUVDLE9BQU8sRUFB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