@fundamental-ngx/core 0.36.0-rc.4 → 0.36.0-rc.5

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.
Files changed (104) hide show
  1. package/action-bar/package.json +1 -1
  2. package/action-sheet/package.json +1 -1
  3. package/alert/package.json +1 -1
  4. package/avatar/package.json +1 -1
  5. package/avatar-group/package.json +1 -1
  6. package/bar/package.json +1 -1
  7. package/breadcrumb/package.json +1 -1
  8. package/busy-indicator/package.json +1 -1
  9. package/button/package.json +1 -1
  10. package/calendar/package.json +1 -1
  11. package/card/package.json +1 -1
  12. package/carousel/package.json +1 -1
  13. package/checkbox/package.json +1 -1
  14. package/combobox/package.json +1 -1
  15. package/content-density/package.json +3 -3
  16. package/date-picker/package.json +1 -1
  17. package/datetime/package.json +1 -1
  18. package/datetime-picker/package.json +1 -1
  19. package/dialog/package.json +1 -1
  20. package/dynamic-page/package.json +1 -1
  21. package/dynamic-side-content/package.json +1 -1
  22. package/esm2020/fixed-card-layout/fixed-card-layout.component.mjs +17 -10
  23. package/facets/package.json +1 -1
  24. package/feed-input/package.json +1 -1
  25. package/feed-list-item/package.json +1 -1
  26. package/fesm2015/fundamental-ngx-core-fixed-card-layout.mjs +16 -9
  27. package/fesm2015/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
  28. package/fesm2020/fundamental-ngx-core-fixed-card-layout.mjs +16 -9
  29. package/fesm2020/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
  30. package/file-uploader/package.json +1 -1
  31. package/fixed-card-layout/esm2020/fixed-card-layout.component.mjs +17 -10
  32. package/fixed-card-layout/fesm2015/fundamental-ngx-core-fixed-card-layout.mjs +16 -9
  33. package/fixed-card-layout/fesm2015/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
  34. package/fixed-card-layout/fesm2020/fundamental-ngx-core-fixed-card-layout.mjs +16 -9
  35. package/fixed-card-layout/fesm2020/fundamental-ngx-core-fixed-card-layout.mjs.map +1 -1
  36. package/fixed-card-layout/fixed-card-layout.component.d.ts +2 -2
  37. package/fixed-card-layout/package.json +1 -1
  38. package/flexible-column-layout/package.json +1 -1
  39. package/form/package.json +1 -1
  40. package/formatted-text/package.json +1 -1
  41. package/grid-list/package.json +1 -1
  42. package/icon/package.json +1 -1
  43. package/illustrated-message/package.json +1 -1
  44. package/infinite-scroll/package.json +1 -1
  45. package/info-label/package.json +1 -1
  46. package/inline-help/package.json +1 -1
  47. package/input-group/package.json +1 -1
  48. package/layout-grid/package.json +1 -1
  49. package/layout-panel/package.json +1 -1
  50. package/link/package.json +1 -1
  51. package/list/package.json +1 -1
  52. package/menu/package.json +1 -1
  53. package/message-box/package.json +1 -1
  54. package/message-strip/package.json +1 -1
  55. package/message-toast/package.json +1 -1
  56. package/micro-process-flow/package.json +1 -1
  57. package/mobile-mode/package.json +1 -1
  58. package/multi-input/package.json +1 -1
  59. package/nested-list/package.json +1 -1
  60. package/notification/package.json +1 -1
  61. package/object-identifier/package.json +1 -1
  62. package/object-marker/package.json +1 -1
  63. package/object-number/package.json +1 -1
  64. package/object-status/package.json +1 -1
  65. package/overflow-layout/package.json +14 -14
  66. package/package.json +2 -2
  67. package/pagination/package.json +1 -1
  68. package/panel/package.json +1 -1
  69. package/popover/package.json +1 -1
  70. package/product-switch/package.json +1 -1
  71. package/progress-indicator/package.json +1 -1
  72. package/quick-view/package.json +1 -1
  73. package/radio/package.json +1 -1
  74. package/rating-indicator/package.json +1 -1
  75. package/resizable-card-layout/package.json +1 -1
  76. package/scroll-spy/package.json +1 -1
  77. package/scrollbar/package.json +1 -1
  78. package/segmented-button/package.json +1 -1
  79. package/select/package.json +1 -1
  80. package/shared/package.json +1 -1
  81. package/shellbar/package.json +1 -1
  82. package/side-navigation/package.json +1 -1
  83. package/slider/package.json +1 -1
  84. package/split-button/package.json +1 -1
  85. package/splitter/package.json +1 -1
  86. package/status-indicator/package.json +1 -1
  87. package/step-input/package.json +1 -1
  88. package/switch/package.json +1 -1
  89. package/table/package.json +1 -1
  90. package/tabs/package.json +1 -1
  91. package/text/package.json +1 -1
  92. package/theming/package.json +1 -1
  93. package/tile/package.json +1 -1
  94. package/time/package.json +1 -1
  95. package/time-picker/package.json +1 -1
  96. package/timeline/package.json +1 -1
  97. package/title/package.json +1 -1
  98. package/token/package.json +1 -1
  99. package/toolbar/package.json +1 -1
  100. package/tree/package.json +1 -1
  101. package/upload-collection/package.json +1 -1
  102. package/utils/package.json +1 -1
  103. package/vertical-navigation/package.json +1 -1
  104. package/wizard/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/action-bar",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/action-sheet",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/alert",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/avatar",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/avatar-group",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
package/bar/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/bar",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/breadcrumb",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/busy-indicator",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/button",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/calendar",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
package/card/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/card",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/carousel",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/checkbox",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/combobox",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/content-density",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0",
7
7
  "rxjs": "7.5.6",
8
8
  "@angular/cdk": "~13.2.4",
9
- "@fundamental-ngx/core/utils": "0.36.0-rc.4",
10
- "@fundamental-ngx/core/shared": "0.36.0-rc.4",
9
+ "@fundamental-ngx/core/utils": "0.36.0-rc.5",
10
+ "@fundamental-ngx/core/shared": "0.36.0-rc.5",
11
11
  "core-js": "3.21.1",
12
12
  "zone.js": "0.11.4",
13
13
  "@angular/platform-browser-dynamic": "~13.2.4",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/date-picker",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/datetime",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/datetime-picker",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/dialog",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/dynamic-page",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/dynamic-side-content",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -2,7 +2,7 @@ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren,
2
2
  import { FocusKeyManager } from '@angular/cdk/a11y';
3
3
  import { CdkDrag } from '@angular/cdk/drag-drop';
4
4
  import { Subject, Subscription } from 'rxjs';
5
- import { debounceTime, distinct, filter, takeUntil } from 'rxjs/operators';
5
+ import { debounceTime, filter, skip, takeUntil } from 'rxjs/operators';
6
6
  import { resizeObservable, RtlService, getDocumentFontSize } from '@fundamental-ngx/core/utils';
7
7
  import { FixedCardLayoutItemComponent } from './fixed-card-layout-item/fixed-card-layout-item.component';
8
8
  import { coerceNumberProperty } from '@angular/cdk/coercion';
@@ -59,6 +59,8 @@ export class FixedCardLayoutComponent {
59
59
  this.layoutChange = new EventEmitter();
60
60
  /** Event to emit on Card dragged and dropped */
61
61
  this.cardDraggedDropped = new EventEmitter();
62
+ /** @hidden*/
63
+ this._containerHeight = 0;
62
64
  /** @hidden handles rtl service */
63
65
  this._dir = 'ltr';
64
66
  /** @hidden first number is the CardDefinition rank, i.e. id */
@@ -70,7 +72,7 @@ export class FixedCardLayoutComponent {
70
72
  /** @hidden */
71
73
  this._columnsWidth = new Map();
72
74
  /** @hidden */
73
- this._listenResize = false;
75
+ this._listenResize = true;
74
76
  /** @hidden */
75
77
  this._cardMinimumWidth = CARD_MINIMUM_WIDTH;
76
78
  /** @hidden */
@@ -236,19 +238,21 @@ export class FixedCardLayoutComponent {
236
238
  /** @hidden Listen window resize and distribute cards on column change */
237
239
  _listenOnResize() {
238
240
  resizeObservable(this._layout.nativeElement)
239
- .pipe(filter(() => this._listenResize), debounceTime(50), takeUntil(this._onDestroy$))
241
+ .pipe(debounceTime(20), filter((entries) => this._listenResize && !!(entries[0].contentRect.height || entries[0].contentRect.width)), takeUntil(this._onDestroy$))
240
242
  .subscribe(() => this.updateLayout());
241
243
  }
242
244
  /** @hidden Listen card change and distribute cards on column change */
243
245
  _listenOnCardsChange() {
244
- this._cards.changes.subscribe(() => this._processCards());
246
+ this._cards.changes.subscribe(() => {
247
+ this._processCards();
248
+ this.updateLayout();
249
+ });
245
250
  }
246
251
  /** @hidden */
247
252
  _processCards() {
248
253
  this._cardsArray = this._cards
249
254
  .toArray()
250
255
  .sort((firstCard, secondCard) => firstCard.fdCardDef - secondCard.fdCardDef);
251
- this.updateLayout();
252
256
  }
253
257
  /** @hidden Distribute cards among columns to arrange them in "Z" flow */
254
258
  _setCardColumns() {
@@ -269,7 +273,7 @@ export class FixedCardLayoutComponent {
269
273
  this._singleItemColumns.add(column[0].fdCardDef);
270
274
  }
271
275
  });
272
- this._listenOnCardsSizeChange();
276
+ this._listenOnCardsHeightChange();
273
277
  }
274
278
  /** @hidden */
275
279
  _setCardColumnsWidth() {
@@ -303,12 +307,15 @@ export class FixedCardLayoutComponent {
303
307
  .map((column) => column.map((cardElRef) => cardElRef?.nativeElement.getBoundingClientRect().height || 0))
304
308
  .map((column, columnIndex) => column.reduce((cardsHeight, height) => (cardsHeight += height + REM_IN_PX), 0) +
305
309
  (columnIndex === columnIndexToAddSpace ? spaceToAdd : 0));
310
+ const prevContainerHeight = this._containerHeight;
306
311
  // +4px because it's the top & bottom borders of card placeholder
307
312
  this._containerHeight = Math.ceil(Math.max(...columnsHeights) + 4);
308
- this._changeDetector.detectChanges();
313
+ if (this._containerHeight !== prevContainerHeight) {
314
+ this._changeDetector.detectChanges();
315
+ }
309
316
  }
310
317
  /** @hidden */
311
- _listenOnCardsSizeChange() {
318
+ _listenOnCardsHeightChange() {
312
319
  this._cardsSizeChangeSubscription.unsubscribe();
313
320
  this._cardsSizeChangeSubscription = new Subscription();
314
321
  this._changeDetector.detectChanges();
@@ -317,7 +324,7 @@ export class FixedCardLayoutComponent {
317
324
  .filter((v) => !!v)
318
325
  .forEach((card) => {
319
326
  this._cardsSizeChangeSubscription.add(resizeObservable(card.nativeElement)
320
- .pipe(filter(() => this._listenResize), distinct((resizeEntry) => resizeEntry[0].contentRect.height), debounceTime(50))
327
+ .pipe(skip(1), debounceTime(20), filter(() => this._listenResize && !!this._layout.nativeElement.clientHeight))
321
328
  .subscribe(() => this._setContainerHeight()));
322
329
  }));
323
330
  }
@@ -387,4 +394,4 @@ function adjustCardRank(draggedCard, replacedCard) {
387
394
  draggedCard.fdCardDef = replacedCard.fdCardDef;
388
395
  replacedCard.fdCardDef = draggedCardRank;
389
396
  }
390
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4ZWQtY2FyZC1sYXlvdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZml4ZWQtY2FyZC1sYXlvdXQvZml4ZWQtY2FyZC1sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZml4ZWQtY2FyZC1sYXlvdXQvZml4ZWQtY2FyZC1sYXlvdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBMkMsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0UsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRWhHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxvQkFBb0IsRUFBZSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7QUFFMUUsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztBQUN4QyxNQUFNLGtCQUFr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QWtCLENBQUMsY0FBc0IsRUFBRSxTQUFpQjtJQUNqRSxjQUFjLEdBQUcsY0FBYyxJQUFJLENBQUMsQ0FBQztJQUNyQyxTQUFTLEdBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQztJQUUzQixNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLEdBQUcsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyx5QkFBeUI7SUFDN0csTUFBTSxvQkFBb0IsR0FBRyxzQkFBc0IsR0FBRyxTQUFTLEdBQUcsQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUM7SUFDaEgsTUFBTSxXQUFXLEdBQUcsb0JBQW9CLEdBQUcsY0FBYyxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLHNCQUFzQixDQUFDO0lBRWhILE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELDREQUE0RDtBQUM1RCxTQUFTLGNBQWMsQ0FBQyxXQUFvQyxFQUFFLFlBQXFDO0lBQy9GLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQyxTQUFTLENBQUM7SUFDOUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxZQUFZLENBQUMsU0FBUyxDQUFDO0lBQy9DLFlBQVksQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDO0FBQzdDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9jdXNLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0Ryb3AsIENka0RyYWdFbnRlciwgQ2RrRHJhZ1N0YXJ0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3QsIGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyByZXNpemVPYnNlcnZhYmxlLCBSdGxTZXJ2aWNlLCBnZXREb2N1bWVudEZvbnRTaXplIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3V0aWxzJztcbmltcG9ydCB7IE51bGxhYmxlIH0gZnJvbSAnQGZ1bmRhbWVudGFsLW5neC9jb3JlL3NoYXJlZCc7XG5pbXBvcnQgeyBGaXhlZENhcmRMYXlvdXRJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9maXhlZC1jYXJkLWxheW91dC1pdGVtL2ZpeGVkLWNhcmQtbGF5b3V0LWl0ZW0uY29tcG9uZW50JztcbmltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5LCBOdW1iZXJJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5cbmNvbnN0IFJFTV9JTl9QWCA9IGdldERvY3VtZW50Rm9udFNpemUoKTtcbmNvbnN0IENBUkRfTUlOSU1VTV9XSURUSCA9IFJFTV9JTl9QWCAqIDIwOyAvLyAyMHJlbVxuY29uc3QgQ0FSRF9HQVBfV0lEVEggPSBSRU1fSU5fUFg7IC8vIDFyZW1cbmNvbnN0IERSQUdfU1RBUlRfREVMQVkgPSAyMDA7IC8vIGluIG1zXG5jb25zdCBNQVhfQ09MVU1OUyA9IDEwO1xuXG5sZXQgY2FyZFJhbmsgPSAxO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbZmRDYXJkRGVmXScgfSlcbmV4cG9ydCBjbGFzcyBDYXJkRGVmaW5pdGlvbkRpcmVjdGl2ZSB7XG4gICAgLyoqXG4gICAgICogQmVoYXZlcyBsaWtlIHJhbmsgb2YgY2FyZC5cbiAgICAgKiBVc2VmdWwgaW4gY3JlYXRpbmcgbGF5b3V0IGFnYWluIGFmdGVyIGRyYWcgYW5kIGRyb3AuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgZmRDYXJkRGVmKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9mZENhcmREZWYgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuICAgIGdldCBmZENhcmREZWYoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZkQ2FyZERlZjtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2ZkQ2FyZERlZjogbnVtYmVyID0gY2FyZFJhbmsrKztcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IocHVibGljIHRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+KSB7fVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIExheW91dCB7XG4gICAgbnVtYmVyT2ZDb2x1bW5zPzogbnVtYmVyO1xuICAgIHNjcmVlblNpemU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDYXJkRHJvcHBlZCB7XG4gICAgcHJldmlvdXNJbmRleDogbnVtYmVyO1xuICAgIGN1cnJlbnRJbmRleDogbnVtYmVyO1xuICAgIGxheW91dENvbHVtbnM6IG51bWJlcjtcbiAgICBpdGVtczogQ2FyZERlZmluaXRpb25EaXJlY3RpdmVbXTtcbn1cblxudHlwZSBDb2x1bW5zID0gMSB8IDIgfCAzIHwgNCB8IDUgfCA2IHwgNyB8IDggfCA5IHwgMTA7XG5cbmV4cG9ydCB0eXBlIENvbHVtbnNXaWR0aENvbmZpZyA9IHsgW0MgaW4gQ29sdW1uc10/OiBudW1iZXIgfTtcblxudHlwZSBDYXJkQ29sdW1uID0gQ2FyZERlZmluaXRpb25EaXJlY3RpdmVbXTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdmZC1maXhlZC1jYXJkLWxheW91dCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpeGVkLWNhcmQtbGF5b3V0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9maXhlZC1jYXJkLWxheW91dC5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2ZkLWZpeGVkLWNhcmQtbGF5b3V0J1xuICAgIH1cbn0pXG5leHBvcnQgY2xhc3MgRml4ZWRDYXJkTGF5b3V0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gICAgLyoqIERyYWcgZHJvcCBiZWhhdmlvciBjYW4gYmUgZGlzYWJsZWQgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVEcmFnRHJvcDogYm9vbGVhbjtcblxuICAgIC8qKiBEcmFnIHN0YXJ0IGRlbGF5IGluIG1pbGxpc2Vjb25kcywgZGVmYXVsdCB0byAyMDBtcyBmb3Igc2FmZSBzY3JvbGxpbmcgb24gbW9iaWxlIHdpdGggdG91Y2hzY3JlZW4gKi9cbiAgICBASW5wdXQoKVxuICAgIGRyYWdTdGFydERlbGF5ID0gRFJBR19TVEFSVF9ERUxBWTtcblxuICAgIC8qKiBDYXJkJ3MgbWluaW11bSB3aWR0aCBpbiBwaXhlbHMuICovXG4gICAgQElucHV0KClcbiAgICBzZXQgY2FyZE1pbmltdW1XaWR0aCh2YWx1ZTogTnVtYmVySW5wdXQpIHtcbiAgICAgICAgY29uc3QgY29lcmNlZFZhbHVlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodmFsdWUpO1xuXG4gICAgICAgIGlmIChjb2VyY2VkVmFsdWUgPCBDQVJEX01JTklNVU1fV0lEVEgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NhcmRNaW5pbXVtV2lkdGggPSBjb2VyY2VkVmFsdWU7XG4gICAgfVxuICAgIGdldCBjYXJkTWluaW11bVdpZHRoKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jYXJkTWluaW11bVdpZHRoO1xuICAgIH1cblxuICAgIC8qKiBDb25maWcgd2l0aCB0aGUgd2lkdGggcmF0aW9zIHRoYXQgc2hvdWxkIHRha2UgZXZlcnkgY29sdW1uLiBGbGV4LWdyb3cgcHJpbmNpcGUuIE1pc3NlZCB2YWx1ZXMgc2V0IHRvIDAuIHMqL1xuICAgIEBJbnB1dCgpXG4gICAgY29sdW1uc1dpZHRoQ29uZmlnOiBDb2x1bW5zV2lkdGhDb25maWc7XG5cbiAgICAvKiogTGltaXQgdGhlIG51bWJlciBvZiBjb2x1bW5zLiBEZWZhdWx0IGlzIDEwLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgbWF4Q29sdW1ucyA9IE1BWF9DT0xVTU5TO1xuXG4gICAgLyoqIEV2ZW50IHRvIGVtaXQsIHdoZW4gbGF5b3V0IGNoYW5nZXMgKi9cbiAgICBAT3V0cHV0KClcbiAgICBsYXlvdXRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxMYXlvdXQ+ID0gbmV3IEV2ZW50RW1pdHRlcjxMYXlvdXQ+KCk7XG5cbiAgICAvKiogRXZlbnQgdG8gZW1pdCBvbiBDYXJkIGRyYWdnZWQgYW5kIGRyb3BwZWQgKi9cbiAgICBAT3V0cHV0KClcbiAgICBjYXJkRHJhZ2dlZERyb3BwZWQ6IEV2ZW50RW1pdHRlcjxDYXJkRHJvcHBlZD4gPSBuZXcgRXZlbnRFbWl0dGVyPENhcmREcm9wcGVkPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKENhcmREZWZpbml0aW9uRGlyZWN0aXZlKVxuICAgIF9jYXJkczogUXVlcnlMaXN0PENhcmREZWZpbml0aW9uRGlyZWN0aXZlPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZHJlbihGaXhlZENhcmRMYXlvdXRJdGVtQ29tcG9uZW50KVxuICAgIF9jYXJkQ29udGFpbmVyczogUXVlcnlMaXN0PEZpeGVkQ2FyZExheW91dEl0ZW1Db21wb25lbnQ+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKENka0RyYWcpXG4gICAgX2RyYWdMaXN0OiBRdWVyeUxpc3Q8Q2RrRHJhZz47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2xheW91dCcpXG4gICAgX2xheW91dDogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NhcmRzQXJyYXk6IENhcmREZWZpbml0aW9uRGlyZWN0aXZlW107XG5cbiAgICAvKiogQGhpZGRlbiBOdW1iZXIgb2YgQ29sdW1ucyBpbiBsYXlvdXQgKi9cbiAgICBfbnVtYmVyT2ZDb2x1bW5zOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYXJkQ29sdW1uczogQ2FyZENvbHVtbltdO1xuXG4gICAgLyoqIEBoaWRkZW4qL1xuICAgIF9jb250YWluZXJIZWlnaHQ6IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuIGhhbmRsZXMgcnRsIHNlcnZpY2UgKi9cbiAgICBfZGlyID0gJ2x0cic7XG5cbiAgICAvKiogQGhpZGRlbiBmaXJzdCBudW1iZXIgaXMgdGhlIENhcmREZWZpbml0aW9uIHJhbmssIGkuZS4gaWQgKi9cbiAgICBfZ3JvdXBJbmRleGVzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcblxuICAgIC8qKiBAaGlkZGVuIGZpcnN0IG51bWJlciBpcyB0aGUgQ2FyZERlZmluaXRpb24gcmFuaywgaS5lLiBpZCAqL1xuICAgIF9pdGVtSW5kZXhlcyA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBmaXJzdCBudW1iZXIgaXMgdGhlIENhcmREZWZpbml0aW9uIHJhbmssIGkuZS4gaWQgKi9cbiAgICBfc2luZ2xlSXRlbUNvbHVtbnMgPSBuZXcgU2V0PG51bWJlcj4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NvbHVtbnNXaWR0aCA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG5cbiAgICAvKiogQGhpZGRlbiBSZXR1cm4gYXZhaWxhYmxlIHdpZHRoIGZvciBmaXhlZCBjYXJkIGxheW91dCAqL1xuICAgIGdldCBfYXZhaWxhYmxlV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xheW91dC5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3BsYWNlaG9sZGVyTWFyZ2luOiBib29sZWFuO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfbGlzdGVuUmVzaXplID0gZmFsc2U7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9oaWRkZW5DYXJkOiBOdWxsYWJsZTxDYXJkRGVmaW5pdGlvbkRpcmVjdGl2ZT47XG5cbiAgICAvKiogQGhpZGRlbiBGb2N1c0tleU1hbmFnZXIgaW5zdGFuY2UgKi9cbiAgICBwcml2YXRlIF9rZXlib2FyZEV2ZW50c01hbmFnZXI6IEZvY3VzS2V5TWFuYWdlcjxGaXhlZENhcmRMYXlvdXRJdGVtQ29tcG9uZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FyZE1pbmltdW1XaWR0aCA9IENBUkRfTUlOSU1VTV9XSURUSDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfY2FyZHNTaXplQ2hhbmdlU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgLyoqIEBoaWRkZW4gQW4gUnhKUyBTdWJqZWN0IHRoYXQgd2lsbCBraWxsIHRoZSBkYXRhIHN0cmVhbSB1cG9uIGNvbXBvbmVudOKAmXMgZGVzdHJ1Y3Rpb24gKGZvciB1bnN1YnNjcmliaW5nKSAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBfcnRsU2VydmljZTogUnRsU2VydmljZVxuICAgICkge31cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3N1YnNjcmliZVRvUnRsKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NDYXJkcygpO1xuXG4gICAgICAgIHRoaXMuX2xpc3Rlbk9uUmVzaXplKCk7XG4gICAgICAgIHRoaXMuX2xpc3Rlbk9uQ2FyZHNDaGFuZ2UoKTtcbiAgICAgICAgdGhpcy5fYWNjZXNzaWJpbGl0eVNldHVwKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIC8vIFNraXAgYWxsIGNoYW5nZXMgdW5sZXNzIHdlIGRvbid0IGhhdmUgaW5pdGlhbCBsYXlvdXQgY3JlYXRlZFxuICAgICAgICBpZiAoIXRoaXMuX2NhcmRzQXJyYXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgnbWF4Q29sdW1ucycgaW4gY2hhbmdlcyB8fCAnY2FyZE1pbmltdW1XaWR0aCcgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVMYXlvdXQoKTtcbiAgICAgICAgfSBlbHNlIGlmICgnY29sdW1uc1dpZHRoQ29uZmlnJyBpbiBjaGFuZ2VzKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRDYXJkQ29sdW1uc1dpZHRoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYXJkc1NpemVDaGFuZ2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcblxuICAgICAgICB0aGlzLl9vbkRlc3Ryb3kkLm5leHQoKTtcbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bicsIFsnJGV2ZW50J10pXG4gICAgaGFuZGxlS2V5ZG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBpZiAodGhpcy5fa2V5Ym9hcmRFdmVudHNNYW5hZ2VyKSB7XG4gICAgICAgICAgICB0aGlzLl9rZXlib2FyZEV2ZW50c01hbmFnZXIub25LZXlkb3duKGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBEaXN0cmlidXRlIGNhcmRzIG9uIHdpbmRvdyByZXNpemUgKi9cbiAgICB1cGRhdGVMYXlvdXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xpc3RlblJlc2l6ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLl9jYXJkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc3NpYmxlTnVtYmVyT2ZDb2x1bW5zID0gZ2V0TnVtYmVyT2ZDb2x1bW5zKHRoaXMuX2F2YWlsYWJsZVdpZHRoLCB0aGlzLmNhcmRNaW5pbXVtV2lkdGgpO1xuXG4gICAgICAgICAgICB0aGlzLl9udW1iZXJPZkNvbHVtbnMgPSBNYXRoLm1pbihcbiAgICAgICAgICAgICAgICBwb3NzaWJsZU51bWJlck9mQ29sdW1ucyxcbiAgICAgICAgICAgICAgICB0aGlzLl9jYXJkcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgdGhpcy5tYXhDb2x1bW5zIHx8IE1BWF9DT0xVTU5TLFxuICAgICAgICAgICAgICAgIE1BWF9DT0xVTU5TXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fbnVtYmVyT2ZDb2x1bW5zID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubGF5b3V0Q2hhbmdlLmVtaXQoe1xuICAgICAgICAgICAgbnVtYmVyT2ZDb2x1bW5zOiB0aGlzLl9udW1iZXJPZkNvbHVtbnMsXG4gICAgICAgICAgICBzY3JlZW5TaXplOiB0aGlzLl9hdmFpbGFibGVXaWR0aFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9zZXRDYXJkQ29sdW1ucygpO1xuICAgICAgICB0aGlzLl9zZXRDYXJkQ29sdW1uc1dpZHRoKCk7XG4gICAgICAgIHRoaXMuX3NldENvbnRhaW5lckhlaWdodCgpO1xuXG4gICAgICAgIHRoaXMuX2xpc3RlblJlc2l6ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25EcmFnU3RhcnRlZChldmVudDogQ2RrRHJhZ1N0YXJ0KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2xpc3RlblJlc2l6ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9oaWRkZW5DYXJkID0gZXZlbnQuc291cmNlLmRhdGE7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25Ecm9wTGlzdEVudGVyZWQoZXZlbnQ6IENka0RyYWdFbnRlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBjb250YWluZXJJdGVtQ2FyZERlZiA9IChldmVudC5jb250YWluZXIuZ2V0U29ydGVkSXRlbXMoKVswXS5kYXRhIGFzIENhcmREZWZpbml0aW9uRGlyZWN0aXZlKS5mZENhcmREZWY7XG4gICAgICAgIGNvbnN0IGRyYWdJdGVtQ2FyZERlZiA9IChldmVudC5pdGVtLmRhdGEgYXMgQ2FyZERlZmluaXRpb25EaXJlY3RpdmUpLmZkQ2FyZERlZjtcblxuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlck1hcmdpbiA9IGNvbnRhaW5lckl0ZW1DYXJkRGVmICE9PSBkcmFnSXRlbUNhcmREZWY7XG5cbiAgICAgICAgY29uc3QgY29sdW1uSW5kZXhUb0FkZFNwYWNlID0gdGhpcy5fY2FyZENvbHVtbnMuZmluZEluZGV4KChjb2x1bW4pID0+XG4gICAgICAgICAgICBjb2x1bW4uZmluZCgoY2FyZCkgPT4gZXZlbnQuY29udGFpbmVyLmdldFNvcnRlZEl0ZW1zKClbMF0uZGF0YSA9PT0gY2FyZClcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgc3BhY2VUb0FkZCA9XG4gICAgICAgICAgICBldmVudC5pdGVtLmVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgK1xuICAgICAgICAgICAgKGV2ZW50LmNvbnRhaW5lci5nZXRTb3J0ZWRJdGVtcygpLmxlbmd0aCA/IFJFTV9JTl9QWCA6IDApO1xuXG4gICAgICAgIC8vIFdoZW4gd2UgbW92ZSB0aGUgY2FyZCBpbnRvIGEgY2VydGFpbiBjb2x1bW4gd2Ugc2hvdWxkIGluY3JlYXNlIHRoZSBoZWlnaHQgb2YgdGhhdCBjb2x1bW4gYnkgdGhlIGNhcmQgaGVpZ2h0XG4gICAgICAgIHRoaXMuX3NldENvbnRhaW5lckhlaWdodChjb2x1bW5JbmRleFRvQWRkU3BhY2UsIHNwYWNlVG9BZGQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uRHJhZ0Ryb3BwZWQoZXZlbnQ6IENka0RyYWdEcm9wPG51bWJlciwgbnVtYmVyPik6IHZvaWQge1xuICAgICAgICB0aGlzLl9oaWRkZW5DYXJkID0gbnVsbDtcblxuICAgICAgICBpZiAoZXZlbnQuY29udGFpbmVyLmRhdGEgPT09IGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3BsYWNlaG9sZGVyTWFyZ2luID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbW92ZWRDYXJkID0gZXZlbnQucHJldmlvdXNDb250YWluZXIuZ2V0U29ydGVkSXRlbXMoKVswXS5kYXRhO1xuICAgICAgICBjb25zdCByZXBsYWNlZENhcmQgPSBldmVudC5jb250YWluZXIuZ2V0U29ydGVkSXRlbXMoKVswXS5kYXRhO1xuXG4gICAgICAgIGNvbnN0IG1vdmVkQ2FyZENvbHVtbiA9IHRoaXMuX2NhcmRDb2x1bW5zLmZpbmQoKGNvbHVtbikgPT5cbiAgICAgICAgICAgIGNvbHVtbi5maW5kKChjYXJkKSA9PiBjYXJkLmZkQ2FyZERlZiA9PT0gbW92ZWRDYXJkLmZkQ2FyZERlZilcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgcmVwbGFjZWRDYXJkQ29sdW1uID0gdGhpcy5fY2FyZENvbHVtbnMuZmluZCgoY29sdW1uKSA9PlxuICAgICAgICAgICAgY29sdW1uLmZpbmQoKGNhcmQpID0+IGNhcmQuZmRDYXJkRGVmID09PSByZXBsYWNlZENhcmQuZmRDYXJkRGVmKVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIElmIHdlIGRyYWdnZWQgdGhlIGNhcmQgZnJvbSB0aGUgc2FtZSBjb2x1bW4gYXMgdGhlIGNvbHVtbiB3ZSdyZSBkcm9wcGluZyBpbnRvXG4gICAgICAgIC8vIFRoZXJlIG1heSBiZSBhIHNpdHVhdGlvbiB3aGVyZSB0aGUgb3JkZXIgc2hvdWxkbid0IGNoYW5nZSBidXQgc2luY2UgdGhlcmUgYXJlIGEgZGlmZmVyZW50IGRyb3AgbGlzdHMgaXQgd2lsbCBjaGFuZ2VcbiAgICAgICAgLy8gV2Ugc2hvdWxkIHByZXZlbnQgdGhpc1xuICAgICAgICBpZiAobW92ZWRDYXJkQ29sdW1uID09PSByZXBsYWNlZENhcmRDb2x1bW4gJiYgbW92ZWRDYXJkQ29sdW1uPy5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgIGlmIChtb3ZlZENhcmQuZmRDYXJkRGVmIDwgcmVwbGFjZWRDYXJkLmZkQ2FyZERlZiAmJiBldmVudC5wcmV2aW91c0NvbnRhaW5lci5kYXRhIDwgZXZlbnQuY29udGFpbmVyLmRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChtb3ZlZENhcmQuZmRDYXJkRGVmID4gcmVwbGFjZWRDYXJkLmZkQ2FyZERlZiAmJiBldmVudC5wcmV2aW91c0NvbnRhaW5lci5kYXRhID4gZXZlbnQuY29udGFpbmVyLmRhdGEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wcm9jZXNzRHJhZ0Ryb3AoZXZlbnQucHJldmlvdXNDb250YWluZXIuZGF0YSwgZXZlbnQuY29udGFpbmVyLmRhdGEsIG1vdmVkQ2FyZCwgcmVwbGFjZWRDYXJkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zb3J0UHJlZGljYXRlRm4gPSAoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4gPT4gaW5kZXggPT09IDA7XG5cbiAgICAvKiogQGhpZGRlbiBGb3IgdGhlIGtleWJvYXJkIGRyYWcmZHJvcCBkaXJlY3RpdmUgKi9cbiAgICBfY3VzdG9tTW92ZUZuID0gKGdyb3VwOiBDYXJkQ29sdW1uLCBpbmRleEZyb206IG51bWJlciwgaW5kZXhUbzogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIGNvbnN0IG1vdmVkQ2FyZCA9IGdyb3VwW2luZGV4RnJvbV07XG4gICAgICAgIGNvbnN0IHJlcGxhY2VkQ2FyZCA9IGdyb3VwW2luZGV4VG9dO1xuXG4gICAgICAgIGNvbnN0IGluZGV4RnJvbUFycmF5ID0gdGhpcy5fY2FyZHNBcnJheS5maW5kSW5kZXgoKGNhcmQpID0+IGNhcmQuZmRDYXJkRGVmID09PSBtb3ZlZENhcmQuZmRDYXJkRGVmKTtcbiAgICAgICAgY29uc3QgaW5kZXhUb0FycmF5ID0gdGhpcy5fY2FyZHNBcnJheS5maW5kSW5kZXgoKGNhcmQpID0+IGNhcmQuZmRDYXJkRGVmID09PSByZXBsYWNlZENhcmQuZmRDYXJkRGVmKTtcblxuICAgICAgICB0aGlzLl9wcm9jZXNzRHJhZ0Ryb3AoaW5kZXhGcm9tQXJyYXksIGluZGV4VG9BcnJheSwgbW92ZWRDYXJkLCByZXBsYWNlZENhcmQpO1xuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiBGb3IgdGhlIGtleWJvYXJkIGRyYWcmZHJvcCBkaXJlY3RpdmUgKi9cbiAgICBfY3VzdG9tVHJhbnNmZXJGbiA9IChwcmV2R3JvdXA6IENhcmRDb2x1bW4sIG5leHRHcm91cDogQ2FyZENvbHVtbiwgaW5kZXhGcm9tOiBudW1iZXIsIGluZGV4VG86IG51bWJlcik6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBtb3ZlZENhcmQgPSBwcmV2R3JvdXBbaW5kZXhGcm9tXTtcbiAgICAgICAgY29uc3QgcmVwbGFjZWRDYXJkID0gbmV4dEdyb3VwW2luZGV4VG9dO1xuXG4gICAgICAgIGNvbnN0IGluZGV4RnJvbUFycmF5ID0gdGhpcy5fY2FyZHNBcnJheS5maW5kSW5kZXgoKGNhcmQpID0+IGNhcmQuZmRDYXJkRGVmID09PSBtb3ZlZENhcmQuZmRDYXJkRGVmKTtcbiAgICAgICAgY29uc3QgaW5kZXhUb0FycmF5ID0gdGhpcy5fY2FyZHNBcnJheS5maW5kSW5kZXgoKGNhcmQpID0+IGNhcmQuZmRDYXJkRGVmID09PSByZXBsYWNlZENhcmQuZmRDYXJkRGVmKTtcblxuICAgICAgICB0aGlzLl9wcm9jZXNzRHJhZ0Ryb3AoaW5kZXhGcm9tQXJyYXksIGluZGV4VG9BcnJheSwgbW92ZWRDYXJkLCByZXBsYWNlZENhcmQpO1xuICAgIH07XG5cbiAgICAvKiogQGhpZGRlbiBBcnJhbmdlcyBjYXJkcyBvbiBkcm9wIG9mIGRyYWdnZWQgY2FyZCAqL1xuICAgIHByaXZhdGUgX3Byb2Nlc3NEcmFnRHJvcChcbiAgICAgICAgcHJldkluZGV4OiBudW1iZXIsXG4gICAgICAgIG5ld0luZGV4OiBudW1iZXIsXG4gICAgICAgIHByZXZDYXJkOiBDYXJkRGVmaW5pdGlvbkRpcmVjdGl2ZSxcbiAgICAgICAgbmV3Q2FyZDogQ2FyZERlZmluaXRpb25EaXJlY3RpdmVcbiAgICApOiB2b2lkIHtcbiAgICAgICAgLy8gbW92ZUl0ZW1JbkFycmF5IGZyb20gQ0RLIHdvbid0IHdvcmsgYXMgaXQgY2hhbmdlcyBvcmRlciBvZiBvdGhlciBjYXJkc1xuICAgICAgICBjb25zdCByZXBsYWNlZENhcmQgPSB0aGlzLl9jYXJkc0FycmF5W25ld0luZGV4XTtcbiAgICAgICAgdGhpcy5fY2FyZHNBcnJheVtuZXdJbmRleF0gPSB0aGlzLl9jYXJkc0FycmF5W3ByZXZJbmRleF07XG4gICAgICAgIHRoaXMuX2NhcmRzQXJyYXlbcHJldkluZGV4XSA9IHJlcGxhY2VkQ2FyZDtcblxuICAgICAgICBhZGp1c3RDYXJkUmFuayhwcmV2Q2FyZCwgbmV3Q2FyZCk7XG5cbiAgICAgICAgdGhpcy5jYXJkRHJhZ2dlZERyb3BwZWQuZW1pdCh7XG4gICAgICAgICAgICBwcmV2aW91c0luZGV4OiBwcmV2SW5kZXgsXG4gICAgICAgICAgICBjdXJyZW50SW5kZXg6IG5ld0luZGV4LFxuICAgICAgICAgICAgbGF5b3V0Q29sdW1uczogdGhpcy5fbnVtYmVyT2ZDb2x1bW5zLFxuICAgICAgICAgICAgaXRlbXM6IHRoaXMuX2NhcmRzLnRvQXJyYXkoKVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnVwZGF0ZUxheW91dCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWNjZXNzaWJpbGl0eVNldHVwKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9rZXlib2FyZEV2ZW50c01hbmFnZXIgPSBuZXcgRm9jdXNLZXlNYW5hZ2VyKHRoaXMuX2NhcmRDb250YWluZXJzKS53aXRoV3JhcCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIFJ0bCBjaGFuZ2Ugc3Vic2NyaXB0aW9uICovXG4gICAgcHJpdmF0ZSBfc3Vic2NyaWJlVG9SdGwoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3J0bFNlcnZpY2U/LnJ0bC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSkuc3Vic2NyaWJlKChpc1J0bCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fZGlyID0gaXNSdGwgPyAncnRsJyA6ICdsdHInO1xuICAgICAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIExpc3RlbiB3aW5kb3cgcmVzaXplIGFuZCBkaXN0cmlidXRlIGNhcmRzIG9uIGNvbHVtbiBjaGFuZ2UgKi9cbiAgICBwcml2YXRlIF9saXN0ZW5PblJlc2l6ZSgpOiB2b2lkIHtcbiAgICAgICAgcmVzaXplT2JzZXJ2YWJsZSh0aGlzLl9sYXlvdXQubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLl9saXN0ZW5SZXNpemUpLFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSg1MCksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlTGF5b3V0KCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIExpc3RlbiBjYXJkIGNoYW5nZSBhbmQgZGlzdHJpYnV0ZSBjYXJkcyBvbiBjb2x1bW4gY2hhbmdlICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25DYXJkc0NoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FyZHMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fcHJvY2Vzc0NhcmRzKCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJvY2Vzc0NhcmRzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jYXJkc0FycmF5ID0gdGhpcy5fY2FyZHNcbiAgICAgICAgICAgIC50b0FycmF5KClcbiAgICAgICAgICAgIC5zb3J0KChmaXJzdENhcmQsIHNlY29uZENhcmQpID0+IGZpcnN0Q2FyZC5mZENhcmREZWYgLSBzZWNvbmRDYXJkLmZkQ2FyZERlZik7XG5cbiAgICAgICAgdGhpcy51cGRhdGVMYXlvdXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBEaXN0cmlidXRlIGNhcmRzIGFtb25nIGNvbHVtbnMgdG8gYXJyYW5nZSB0aGVtIGluIFwiWlwiIGZsb3cgKi9cbiAgICBwcml2YXRlIF9zZXRDYXJkQ29sdW1ucygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZ3JvdXBJbmRleGVzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcbiAgICAgICAgdGhpcy5faXRlbUluZGV4ZXMgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICAgICAgICB0aGlzLl9zaW5nbGVJdGVtQ29sdW1ucyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuXG4gICAgICAgIGNvbnN0IGNvbHVtbnM6IENhcmRDb2x1bW5bXSA9IG5ldyBBcnJheSh0aGlzLl9udW1iZXJPZkNvbHVtbnMpLmZpbGwoMCkubWFwKCgpID0+IG5ldyBBcnJheSgwKSk7XG5cbiAgICAgICAgdGhpcy5fY2FyZHNBcnJheS5mb3JFYWNoKChjYXJkLCBpKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjdXJyQ29sdW1uSW5kZXggPSBpICUgdGhpcy5fbnVtYmVyT2ZDb2x1bW5zO1xuICAgICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gY29sdW1uc1tjdXJyQ29sdW1uSW5kZXhdLmxlbmd0aDtcblxuICAgICAgICAgICAgY29sdW1uc1tjdXJyQ29sdW1uSW5kZXhdLnB1c2goY2FyZCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2dyb3VwSW5kZXhlcy5zZXQoY2FyZC5mZENhcmREZWYsIGN1cnJDb2x1bW5JbmRleCk7XG4gICAgICAgICAgICB0aGlzLl9pdGVtSW5kZXhlcy5zZXQoY2FyZC5mZENhcmREZWYsIGl0ZW1JbmRleCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NhcmRDb2x1bW5zID0gY29sdW1ucztcblxuICAgICAgICB0aGlzLl9jYXJkQ29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGlmIChjb2x1bW4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc2luZ2xlSXRlbUNvbHVtbnMuYWRkKGNvbHVtblswXS5mZENhcmREZWYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5PbkNhcmRzU2l6ZUNoYW5nZSgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2V0Q2FyZENvbHVtbnNXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY29sdW1uc1dpZHRoID0gbmV3IE1hcCgpO1xuXG4gICAgICAgIGNvbnN0IGNvbmZpZ1ByZXNlbnQgPVxuICAgICAgICAgICAgdGhpcy5jb2x1bW5zV2lkdGhDb25maWcgJiZcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLmNvbHVtbnNXaWR0aENvbmZpZyA9PT0gJ29iamVjdCcgJiZcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuY29sdW1uc1dpZHRoQ29uZmlnKS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKCFjb25maWdQcmVzZW50IHx8IHRoaXMuX251bWJlck9mQ29sdW1ucyA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZml4ZWRXaWR0aE1vZGlmaWVycyA9IGZpeFdpZHRoTW9kaWZpZXJzKHRoaXMuY29sdW1uc1dpZHRoQ29uZmlnLCB0aGlzLl9udW1iZXJPZkNvbHVtbnMpO1xuICAgICAgICBjb25zdCB0b3RhbFdpZHRoTW9kaWZpZXJzID0gZml4ZWRXaWR0aE1vZGlmaWVycy5yZWR1Y2UoKHN1bSwgd2lkdGgpID0+IChzdW0gKz0gd2lkdGgpLCAwKTtcbiAgICAgICAgY29uc3QgZnJlZVNwYWNlID0gdGhpcy5fYXZhaWxhYmxlV2lkdGggLSB0aGlzLmNhcmRNaW5pbXVtV2lkdGggKiB0aGlzLl9udW1iZXJPZkNvbHVtbnM7XG5cbiAgICAgICAgdGhpcy5fY2FyZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29sdW1uV2lkdGggPSBNYXRoLnJvdW5kKFxuICAgICAgICAgICAgICAgIHRoaXMuY2FyZE1pbmltdW1XaWR0aCArIChmcmVlU3BhY2UgLyB0b3RhbFdpZHRoTW9kaWZpZXJzKSAqIGZpeGVkV2lkdGhNb2RpZmllcnNbaW5kZXhdXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBjb2x1bW4uZm9yRWFjaCgoY2FyZCkgPT4gdGhpcy5fY29sdW1uc1dpZHRoLnNldChjYXJkLmZkQ2FyZERlZiwgY29sdW1uV2lkdGgpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqIENhbGN1bGF0ZSBjb250YWluZXIgaGVpZ2h0IGFjY29yZGluZ2x5IHRvIHRoZSB0aGUgY2FyZCBjb2x1bW5zIGhlaWdodFxuICAgICAqIFBhcmFtZXRlcnMgdXNlZCB0byBpbmNyZWFzZSB0aGUgaGVpZ2h0IG9mIHRoZSBjb2x1bW4gd2hlcmUgZHJhZyduJ2Ryb3AgcGxhY2Vob2xkZXIgY3VycmVudGx5IGlzXG4gICAgICovXG4gICAgcHJpdmF0ZSBfc2V0Q29udGFpbmVySGVpZ2h0KGNvbHVtbkluZGV4VG9BZGRTcGFjZSA9IC0xLCBzcGFjZVRvQWRkID0gMCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgY29uc3QgY2FyZENvbHVtbnMgPSB0aGlzLl9jYXJkQ29sdW1ucy5tYXAoKGNvbHVtbikgPT5cbiAgICAgICAgICAgIGNvbHVtblxuICAgICAgICAgICAgICAgIC5tYXAoKGNhcmQpID0+IHRoaXMuX2RyYWdMaXN0LmZpbmQoKGRyYWcpID0+IGRyYWcuZGF0YSA9PT0gY2FyZCkpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoY2RrRHJhZykgPT4gIWNka0RyYWc/Ll9kcmFnUmVmLmlzRHJhZ2dpbmcoKSAmJiAhIWNka0RyYWc/LmVsZW1lbnQ/Lm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICAgICAgLm1hcCgoY2RrRHJhZykgPT4gY2RrRHJhZz8uZWxlbWVudClcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBjb2x1bW5zSGVpZ2h0cyA9IGNhcmRDb2x1bW5zXG4gICAgICAgICAgICAubWFwKChjb2x1bW4pID0+IGNvbHVtbi5tYXAoKGNhcmRFbFJlZikgPT4gY2FyZEVsUmVmPy5uYXRpdmVFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodCB8fCAwKSlcbiAgICAgICAgICAgIC5tYXAoXG4gICAgICAgICAgICAgICAgKGNvbHVtbiwgY29sdW1uSW5kZXgpID0+XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbi5yZWR1Y2UoKGNhcmRzSGVpZ2h0LCBoZWlnaHQpID0+IChjYXJkc0hlaWdodCArPSBoZWlnaHQgKyBSRU1fSU5fUFgpLCAwKSArXG4gICAgICAgICAgICAgICAgICAgIChjb2x1bW5JbmRleCA9PT0gY29sdW1uSW5kZXhUb0FkZFNwYWNlID8gc3BhY2VUb0FkZCA6IDApXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIC8vICs0cHggYmVjYXVzZSBpdCdzIHRoZSB0b3AgJiBib3R0b20gYm9yZGVycyBvZiBjYXJkIHBsYWNlaG9sZGVyXG4gICAgICAgIHRoaXMuX2NvbnRhaW5lckhlaWdodCA9IE1hdGguY2VpbChNYXRoLm1heCguLi5jb2x1bW5zSGVpZ2h0cykgKyA0KTtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9saXN0ZW5PbkNhcmRzU2l6ZUNoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FyZHNTaXplQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuX2NhcmRzU2l6ZUNoYW5nZVN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICAgICAgdGhpcy5fY2FyZENvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PlxuICAgICAgICAgICAgY29sdW1uXG4gICAgICAgICAgICAgICAgLm1hcCgoY2FyZCkgPT4gdGhpcy5fZHJhZ0xpc3QuZmluZCgod3JhcHBlcikgPT4gd3JhcHBlci5kYXRhID09PSBjYXJkKT8uZWxlbWVudClcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCh2KTogdiBpcyBFbGVtZW50UmVmPEhUTUxFbGVtZW50PiA9PiAhIXYpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGNhcmQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2FyZHNTaXplQ2hhbmdlU3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc2l6ZU9ic2VydmFibGUoY2FyZC5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5fbGlzdGVuUmVzaXplKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzdGluY3QoKHJlc2l6ZUVudHJ5KSA9PiByZXNpemVFbnRyeVswXS5jb250ZW50UmVjdC5oZWlnaHQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoNTApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5fc2V0Q29udGFpbmVySGVpZ2h0KCkpXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbi8qKiBAaGlkZGVuICovXG5mdW5jdGlvbiBmaXhXaWR0aE1vZGlmaWVycyhjb25maWc6IENvbHVtbnNXaWR0aENvbmZpZywgbnVtYmVyT2ZDb2x1bW5zOiBudW1iZXIpOiBudW1iZXJbXSB7XG4gICAgY29uc3QgbW9kaWZpZXJzID0gbmV3IEFycmF5KG51bWJlck9mQ29sdW1ucykuZmlsbCgwKTtcblxuICAgIHJldHVybiBtb2RpZmllcnMubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBjb2x1bW5XaWR0aE1vZGlmaWVyID0gY29uZmlnW2luZGV4ICsgMV07XG5cbiAgICAgICAgaWYgKCFjb2x1bW5XaWR0aE1vZGlmaWVyIHx8IGNvbHVtbldpZHRoTW9kaWZpZXIgPCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb2x1bW5XaWR0aE1vZGlmaWVyO1xuICAgIH0pO1xufVxuXG4vKiogQGhpZGRlbiBSZXR1cm5zIG51bWJlciBvZiBjb2x1bW5zIHRoYXQgY2FuIGZpdCBpbiBjdXJyZW50IGF2YWlsYWJsZSB3aWR0aCBmb3IgZmQtY2FyZC1sYXlvdXQgKi9cbmZ1bmN0aW9uIGdldE51bWJlck9mQ29sdW1ucyhjb250YWluZXJXaWR0aDogbnVtYmVyLCBjYXJkV2lkdGg6IG51bWJlcik6IG51bWJlciB7XG4gICAgY29udGFpbmVyV2lkdGggPSBjb250YWluZXJXaWR0aCB8fCAxO1xuICAgIGNhcmRXaWR0aCA9IGNhcmRXaWR0aCB8fCAxO1xuXG4gICAgY29uc3QgbnVtYmVyT2ZDYXJkc1dpdGhOb0dhcCA9IE1hdGgubWF4KE1hdGguZmxvb3IoY29udGFpbmVyV2lkdGggLyBjYXJkV2lkdGgpLCAxKTsgLy8gRXhhbXBsZTogOTYwIC8gMzIwID0gM1xuICAgIGNvbnN0IHJlcXVpcmVkV2lkdGhXaXRoR2FwID0gbnVtYmVyT2ZDYXJkc1dpdGhOb0dhcCAqIGNhcmRXaWR0aCArIChudW1iZXJPZkNhcmRzV2l0aE5vR2FwIC0gMSkgKiBDQVJEX0dBUF9XSURUSDtcbiAgICBjb25zdCBjb2x1bW5Db3VudCA9IHJlcXVpcmVkV2lkdGhXaXRoR2FwID4gY29udGFpbmVyV2lkdGggPyBudW1iZXJPZkNhcmRzV2l0aE5vR2FwIC0gMSA6IG51bWJlck9mQ2FyZHNXaXRoTm9HYXA7XG5cbiAgICByZXR1cm4gTWF0aC5tYXgoY29sdW1uQ291bnQsIDEpO1xufVxuXG4vKiogQGhpZGRlbiBNZXRob2QgdG8gdXBkYXRlIHJhbmsgYWZ0ZXIgY2FyZHMgYXJlIGRyYWdnZWQgKi9cbmZ1bmN0aW9uIGFkanVzdENhcmRSYW5rKGRyYWdnZWRDYXJkOiBDYXJkRGVmaW5pdGlvbkRpcmVjdGl2ZSwgcmVwbGFjZWRDYXJkOiBDYXJkRGVmaW5pdGlvbkRpcmVjdGl2ZSk6IHZvaWQge1xuICAgIGNvbnN0IGRyYWdnZWRDYXJkUmFuayA9IGRyYWdnZWRDYXJkLmZkQ2FyZERlZjtcbiAgICBkcmFnZ2VkQ2FyZC5mZENhcmREZWYgPSByZXBsYWNlZENhcmQuZmRDYXJkRGVmO1xuICAgIHJlcGxhY2VkQ2FyZC5mZENhcmREZWYgPSBkcmFnZ2VkQ2FyZFJhbms7XG59XG4iLCI8ZGl2XG4gICAgI2xheW91dFxuICAgIGNka0Ryb3BMaXN0R3JvdXBcbiAgICBmZERuZEtleWJvYXJkR3JvdXBcbiAgICBjbGFzcz1cImZkLWZpeGVkLWNhcmQtbGF5b3V0X19jYXJkLWxheW91dCBmZC1maXhlZC1jYXJkLWxheW91dF9fY2FyZC1sYXlvdXQtLWNvbHVtbnMte3sgdGhpcy5fbnVtYmVyT2ZDb2x1bW5zIH19XCJcbiAgICBbc3R5bGUuaGVpZ2h0XT1cIl9jb250YWluZXJIZWlnaHQgKyAncHgnXCJcbiAgICBbZ3JvdXBzXT1cIl9jYXJkQ29sdW1uc1wiXG4gICAgb3JpZW50YXRpb249XCJob3Jpem9udGFsXCJcbiAgICBbY3VzdG9tTW92ZUZuXT1cIl9jdXN0b21Nb3ZlRm5cIlxuICAgIFtjdXN0b21UcmFuc2ZlckZuXT1cIl9jdXN0b21UcmFuc2ZlckZuXCJcbiAgICBbZGlzYWJsZUtleWJvYXJkRHJhZ0Ryb3BdPVwiZGlzYWJsZURyYWdEcm9wXCJcbiAgICBbY2RrRHJvcExpc3RHcm91cERpc2FibGVkXT1cImRpc2FibGVEcmFnRHJvcFwiXG4gICAgW2F0dHIuZGlyXT1cIl9kaXJcIlxuPlxuICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IGNhcmQgb2YgX2NhcmRzQXJyYXk7IGxldCBjYXJkSW5kZXggPSBpbmRleFwiXG4gICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgIGNsYXNzPVwiZmQtZml4ZWQtY2FyZC1sYXlvdXRfX2NhcmRcIlxuICAgICAgICBbY2xhc3MuZmQtZml4ZWQtY2FyZC1sYXlvdXRfX2NhcmQtLXNpbmdsZV09XCJfc2luZ2xlSXRlbUNvbHVtbnMuaGFzKGNhcmQuZmRDYXJkRGVmKVwiXG4gICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiX2NvbHVtbnNXaWR0aC5nZXQoY2FyZC5mZENhcmREZWYpXCJcbiAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJfY29sdW1uc1dpZHRoLmdldChjYXJkLmZkQ2FyZERlZilcIlxuICAgICAgICBbc3R5bGUuZGlzcGxheV09XCJfaGlkZGVuQ2FyZCA9PT0gY2FyZCA/ICdub25lJyA6ICdibG9jaydcIlxuICAgICAgICBbY2RrRHJvcExpc3REYXRhXT1cImNhcmRJbmRleFwiXG4gICAgICAgIFtjZGtEcm9wTGlzdFNvcnRQcmVkaWNhdGVdPVwiX3NvcnRQcmVkaWNhdGVGblwiXG4gICAgICAgIChjZGtEcm9wTGlzdEVudGVyZWQpPVwiX29uRHJvcExpc3RFbnRlcmVkKCRldmVudClcIlxuICAgID5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2RrRHJhZ1xuICAgICAgICAgICAgZmREbmRLZXlib2FyZEl0ZW1cbiAgICAgICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgICAgICBjZGtEcmFnUHJldmlld0NsYXNzPVwiZmQtZml4ZWQtY2FyZC1sYXlvdXRfX2NhcmQtcHJldmlld1wiXG4gICAgICAgICAgICBbY2RrRHJhZ0RhdGFdPVwiY2FyZFwiXG4gICAgICAgICAgICBbY2RrRHJhZ1N0YXJ0RGVsYXldPVwiZHJhZ1N0YXJ0RGVsYXlcIlxuICAgICAgICAgICAgW2l0ZW1JbmRleF09XCJfaXRlbUluZGV4ZXMuZ2V0KGNhcmQuZmRDYXJkRGVmKSFcIlxuICAgICAgICAgICAgW2dyb3VwSW5kZXhdPVwiX2dyb3VwSW5kZXhlcy5nZXQoY2FyZC5mZENhcmREZWYpIVwiXG4gICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwiX29uRHJhZ1N0YXJ0ZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2RrRHJhZ0Ryb3BwZWQpPVwiX29uRHJhZ0Ryb3BwZWQoJGV2ZW50KVwiXG4gICAgICAgID5cbiAgICAgICAgICAgIDxmZC1maXhlZC1jYXJkLWxheW91dC1pdGVtPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYXJkPy50ZW1wbGF0ZSB8fCBudWxsXCI+IDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9mZC1maXhlZC1jYXJkLWxheW91dC1pdGVtPlxuXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgKmNka0RyYWdQbGFjZWhvbGRlclxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtZml4ZWQtY2FyZC1sYXlvdXRfX2NhcmQtcGxhY2Vob2xkZXJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5tYXJnaW4tYm90dG9tLnJlbV09XCIrX3BsYWNlaG9sZGVyTWFyZ2luXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2FyZD8udGVtcGxhdGUgfHwgbnVsbFwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY29sdW1uIG9mIF9jYXJkQ29sdW1uczsgbGV0IGxhc3QgPSBsYXN0OyBsZXQgaW5kZXggPSBpbmRleFwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIWxhc3RcIiBjbGFzcz1cImZkLWZpeGVkLWNhcmQtbGF5b3V0X19jbGVhcmZpeFwiIFtzdHlsZS5vcmRlcl09XCJpbmRleCArIDFcIj48L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19
397
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4ZWQtY2FyZC1sYXlvdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZml4ZWQtY2FyZC1sYXlvdXQvZml4ZWQtY2FyZC1sYXlvdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZml4ZWQtY2FyZC1sYXlvdXQvZml4ZWQtY2FyZC1sYXlvdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixZQUFZLEVBQ1osS0FBSyxFQUlMLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxFQUVULFdBQVcsRUFDWCxTQUFTLEVBQ1QsWUFBWSxFQUNaLGlCQUFpQixFQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBMkMsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFVBQVUsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRWhHLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQ3pHLE9BQU8sRUFBRSxvQkFBb0IsRUFBZSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7QUFFMUUsTUFBTSxTQUFTLEdBQUcsbUJBQW1CLEVBQUUsQ0FBQztBQUN4QyxNQUFNLGtCQUFr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LENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZHJlbixcbiAgICBEaXJlY3RpdmUsXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE9wdGlvbmFsLFxuICAgIE91dHB1dCxcbiAgICBRdWVyeUxpc3QsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0NoaWxkcmVuLFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9jdXNLZXlNYW5hZ2VyIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgQ2RrRHJhZywgQ2RrRHJhZ0Ryb3AsIENka0RyYWdFbnRlciwgQ2RrRHJhZ1N0YXJ0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2RyYWctZHJvcCc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZmlsdGVyLCBza2lwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IHJlc2l6ZU9ic2VydmFibGUsIFJ0bFNlcnZpY2UsIGdldERvY3VtZW50Rm9udFNpemUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcbmltcG9ydCB7IEZpeGVkQ2FyZExheW91dEl0ZW1Db21wb25lbnQgfSBmcm9tICcuL2ZpeGVkLWNhcmQtbGF5b3V0LWl0ZW0vZml4ZWQtY2FyZC1sYXlvdXQtaXRlbS5jb21wb25lbnQnO1xuaW1wb3J0IHsgY29lcmNlTnVtYmVyUHJvcGVydHksIE51bWJlcklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcblxuY29uc3QgUkVNX0lOX1BYID0gZ2V0RG9jdW1lbnRGb250U2l6ZSgpO1xuY29uc3QgQ0FSRF9NSU5JTVVNX1dJRFRIID0gUkVNX0lOX1BYICogMjA7IC8vIDIwcmVtXG5jb25zdCBDQVJEX0dBUF9XSURUSCA9IFJFTV9JTl9QWDsgLy8gMXJlbVxuY29uc3QgRFJBR19TVEFSVF9ERUxBWSA9IDIwMDsgLy8gaW4gbXNcbmNvbnN0IE1BWF9DT0xVTU5TID0gMTA7XG5cbmxldCBjYXJkUmFuayA9IDE7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tmZENhcmREZWZdJyB9KVxuZXhwb3J0IGNsYXNzIENhcmREZWZpbml0aW9uRGlyZWN0aXZlIHtcbiAgICAvKipcbiAgICAgKiBCZWhhdmVzIGxpa2UgcmFuayBvZiBjYXJkLlxuICAgICAqIFVzZWZ1bCBpbiBjcmVhdGluZyBsYXlvdXQgYWdhaW4gYWZ0ZXIgZHJhZyBhbmQgZHJvcC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBmZENhcmREZWYodmFsdWU6IE51bWJlcklucHV0KSB7XG4gICAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2ZkQ2FyZERlZiA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG4gICAgZ2V0IGZkQ2FyZERlZigpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmRDYXJkRGVmO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZmRDYXJkRGVmOiBudW1iZXIgPSBjYXJkUmFuaysrO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4pIHt9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0IHtcbiAgICBudW1iZXJPZkNvbHVtbnM/OiBudW1iZXI7XG4gICAgc2NyZWVuU2l6ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhcmREcm9wcGVkIHtcbiAgICBwcmV2aW91c0luZGV4OiBudW1iZXI7XG4gICAgY3VycmVudEluZGV4OiBudW1iZXI7XG4gICAgbGF5b3V0Q29sdW1uczogbnVtYmVyO1xuICAgIGl0ZW1zOiBDYXJkRGVmaW5pdGlvbkRpcmVjdGl2ZVtdO1xufVxuXG50eXBlIENvbHVtbnMgPSAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfCA3IHwgOCB8IDkgfCAxMDtcblxuZXhwb3J0IHR5cGUgQ29sdW1uc1dpZHRoQ29uZmlnID0geyBbQyBpbiBDb2x1bW5zXT86IG51bWJlciB9O1xuXG50eXBlIENhcmRDb2x1bW4gPSBDYXJkRGVmaW5pdGlvbkRpcmVjdGl2ZVtdO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWZpeGVkLWNhcmQtbGF5b3V0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZml4ZWQtY2FyZC1sYXlvdXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2ZpeGVkLWNhcmQtbGF5b3V0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBob3N0OiB7XG4gICAgICAgIGNsYXNzOiAnZmQtZml4ZWQtY2FyZC1sYXlvdXQnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBGaXhlZENhcmRMYXlvdXRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgICAvKiogRHJhZyBkcm9wIGJlaGF2aW9yIGNhbiBiZSBkaXNhYmxlZCAqL1xuICAgIEBJbnB1dCgpXG4gICAgZGlzYWJsZURyYWdEcm9wOiBib29sZWFuO1xuXG4gICAgLyoqIERyYWcgc3RhcnQgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLCBkZWZhdWx0IHRvIDIwMG1zIGZvciBzYWZlIHNjcm9sbGluZyBvbiBtb2JpbGUgd2l0aCB0b3VjaHNjcmVlbiAqL1xuICAgIEBJbnB1dCgpXG4gICAgZHJhZ1N0YXJ0RGVsYXkgPSBEUkFHX1NUQVJUX0RFTEFZO1xuXG4gICAgLyoqIENhcmQncyBtaW5pbXVtIHdpZHRoIGluIHBpeGVscy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBjYXJkTWluaW11bVdpZHRoKHZhbHVlOiBOdW1iZXJJbnB1dCkge1xuICAgICAgICBjb25zdCBjb2VyY2VkVmFsdWUgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSk7XG5cbiAgICAgICAgaWYgKGNvZXJjZWRWYWx1ZSA8IENBUkRfTUlOSU1VTV9XSURUSCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2FyZE1pbmltdW1XaWR0aCA9IGNvZXJjZWRWYWx1ZTtcbiAgICB9XG4gICAgZ2V0IGNhcmRNaW5pbXVtV2lkdGgoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhcmRNaW5pbXVtV2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIENvbmZpZyB3aXRoIHRoZSB3aWR0aCByYXRpb3MgdGhhdCBzaG91bGQgdGFrZSBldmVyeSBjb2x1bW4uIEZsZXgtZ3JvdyBwcmluY2lwZS4gTWlzc2VkIHZhbHVlcyBzZXQgdG8gMC4gcyovXG4gICAgQElucHV0KClcbiAgICBjb2x1bW5zV2lkdGhDb25maWc6IENvbHVtbnNXaWR0aENvbmZpZztcblxuICAgIC8qKiBMaW1pdCB0aGUgbnVtYmVyIG9mIGNvbHVtbnMuIERlZmF1bHQgaXMgMTAuICovXG4gICAgQElucHV0KClcbiAgICBtYXhDb2x1bW5zID0gTUFYX0NPTFVNTlM7XG5cbiAgICAvKiogRXZlbnQgdG8gZW1pdCwgd2hlbiBsYXlvdXQgY2hhbmdlcyAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGxheW91dENoYW5nZTogRXZlbnRFbWl0dGVyPExheW91dD4gPSBuZXcgRXZlbnRFbWl0dGVyPExheW91dD4oKTtcblxuICAgIC8qKiBFdmVudCB0byBlbWl0IG9uIENhcmQgZHJhZ2dlZCBhbmQgZHJvcHBlZCAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGNhcmREcmFnZ2VkRHJvcHBlZDogRXZlbnRFbWl0dGVyPENhcmREcm9wcGVkPiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FyZERyb3BwZWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGRyZW4oQ2FyZERlZmluaXRpb25EaXJlY3RpdmUpXG4gICAgX2NhcmRzOiBRdWVyeUxpc3Q8Q2FyZERlZmluaXRpb25EaXJlY3RpdmU+O1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBAVmlld0NoaWxkcmVuKEZpeGVkQ2FyZExheW91dEl0ZW1Db21wb25lbnQpXG4gICAgX2NhcmRDb250YWluZXJzOiBRdWVyeUxpc3Q8Rml4ZWRDYXJkTGF5b3V0SXRlbUNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGRyZW4oQ2RrRHJhZylcbiAgICBfZHJhZ0xpc3Q6IFF1ZXJ5TGlzdDxDZGtEcmFnPjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnbGF5b3V0JylcbiAgICBfbGF5b3V0OiBFbGVtZW50UmVmPEhUTUxFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NhcmRzQXJyYXk6IENhcmREZWZpbml0aW9uRGlyZWN0aXZlW107XG5cbiAgICAvKiogQGhpZGRlbiBOdW1iZXIgb2YgQ29sdW1ucyBpbiBsYXlvdXQgKi9cbiAgICBfbnVtYmVyT2ZDb2x1bW5zOiBudW1iZXI7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jYXJkQ29sdW1uczogQ2FyZENvbHVtbltdO1xuXG4gICAgLyoqIEBoaWRkZW4qL1xuICAgIF9jb250YWluZXJIZWlnaHQgPSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gaGFuZGxlcyBydGwgc2VydmljZSAqL1xuICAgIF9kaXIgPSAnbHRyJztcblxuICAgIC8qKiBAaGlkZGVuIGZpcnN0IG51bWJlciBpcyB0aGUgQ2FyZERlZmluaXRpb24gcmFuaywgaS5lLiBpZCAqL1xuICAgIF9ncm91cEluZGV4ZXMgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gZmlyc3QgbnVtYmVyIGlzIHRoZSBDYXJkRGVmaW5pdGlvbiByYW5rLCBpLmUuIGlkICovXG4gICAgX2l0ZW1JbmRleGVzID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcblxuICAgIC8qKiBAaGlkZGVuIGZpcnN0IG51bWJlciBpcyB0aGUgQ2FyZERlZmluaXRpb24gcmFuaywgaS5lLiBpZCAqL1xuICAgIF9zaW5nbGVJdGVtQ29sdW1ucyA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY29sdW1uc1dpZHRoID0gbmV3IE1hcDxudW1iZXIsIG51bWJlcj4oKTtcblxuICAgIC8qKiBAaGlkZGVuIFJldHVybiBhdmFpbGFibGUgd2lkdGggZm9yIGZpeGVkIGNhcmQgbGF5b3V0ICovXG4gICAgZ2V0IF9hdmFpbGFibGVXaWR0aCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGF5b3V0Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGg7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfcGxhY2Vob2xkZXJNYXJnaW46IGJvb2xlYW47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9saXN0ZW5SZXNpemUgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfaGlkZGVuQ2FyZDogTnVsbGFibGU8Q2FyZERlZmluaXRpb25EaXJlY3RpdmU+O1xuXG4gICAgLyoqIEBoaWRkZW4gRm9jdXNLZXlNYW5hZ2VyIGluc3RhbmNlICovXG4gICAgcHJpdmF0ZSBfa2V5Ym9hcmRFdmVudHNNYW5hZ2VyOiBGb2N1c0tleU1hbmFnZXI8Rml4ZWRDYXJkTGF5b3V0SXRlbUNvbXBvbmVudD47XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhcmRNaW5pbXVtV2lkdGggPSBDQVJEX01JTklNVU1fV0lEVEg7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2NhcmRzU2l6ZUNoYW5nZVN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcblxuICAgIC8qKiBAaGlkZGVuIEFuIFJ4SlMgU3ViamVjdCB0aGF0IHdpbGwga2lsbCB0aGUgZGF0YSBzdHJlYW0gdXBvbiBjb21wb25lbnTigJlzIGRlc3RydWN0aW9uIChmb3IgdW5zdWJzY3JpYmluZykgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25EZXN0cm95JDogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9jaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICAgIEBPcHRpb25hbCgpIHByaXZhdGUgcmVhZG9ubHkgX3J0bFNlcnZpY2U6IFJ0bFNlcnZpY2VcbiAgICApIHt9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9zdWJzY3JpYmVUb1J0bCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcm9jZXNzQ2FyZHMoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5PblJlc2l6ZSgpO1xuICAgICAgICB0aGlzLl9saXN0ZW5PbkNhcmRzQ2hhbmdlKCk7XG4gICAgICAgIHRoaXMuX2FjY2Vzc2liaWxpdHlTZXR1cCgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICAvLyBTa2lwIGFsbCBjaGFuZ2VzIHVubGVzcyB3ZSBkb24ndCBoYXZlIGluaXRpYWwgbGF5b3V0IGNyZWF0ZWRcbiAgICAgICAgaWYgKCF0aGlzLl9jYXJkc0FycmF5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoJ21heENvbHVtbnMnIGluIGNoYW5nZXMgfHwgJ2NhcmRNaW5pbXVtV2lkdGgnIGluIGNoYW5nZXMpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTGF5b3V0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAoJ2NvbHVtbnNXaWR0aENvbmZpZycgaW4gY2hhbmdlcykge1xuICAgICAgICAgICAgdGhpcy5fc2V0Q2FyZENvbHVtbnNXaWR0aCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FyZHNTaXplQ2hhbmdlU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgdGhpcy5fb25EZXN0cm95JC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveSQuY29tcGxldGUoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBIb3N0TGlzdGVuZXIoJ2tleWRvd24nLCBbJyRldmVudCddKVxuICAgIGhhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2tleWJvYXJkRXZlbnRzTWFuYWdlcikge1xuICAgICAgICAgICAgdGhpcy5fa2V5Ym9hcmRFdmVudHNNYW5hZ2VyLm9uS2V5ZG93bihldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRGlzdHJpYnV0ZSBjYXJkcyBvbiB3aW5kb3cgcmVzaXplICovXG4gICAgdXBkYXRlTGF5b3V0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9saXN0ZW5SZXNpemUgPSBmYWxzZTtcblxuICAgICAgICBpZiAodGhpcy5fY2FyZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBwb3NzaWJsZU51bWJlck9mQ29sdW1ucyA9IGdldE51bWJlck9mQ29sdW1ucyh0aGlzLl9hdmFpbGFibGVXaWR0aCwgdGhpcy5jYXJkTWluaW11bVdpZHRoKTtcblxuICAgICAgICAgICAgdGhpcy5fbnVtYmVyT2ZDb2x1bW5zID0gTWF0aC5taW4oXG4gICAgICAgICAgICAgICAgcG9zc2libGVOdW1iZXJPZkNvbHVtbnMsXG4gICAgICAgICAgICAgICAgdGhpcy5fY2FyZHMubGVuZ3RoLFxuICAgICAgICAgICAgICAgIHRoaXMubWF4Q29sdW1ucyB8fCBNQVhfQ09MVU1OUyxcbiAgICAgICAgICAgICAgICBNQVhfQ09MVU1OU1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX251bWJlck9mQ29sdW1ucyA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxheW91dENoYW5nZS5lbWl0KHtcbiAgICAgICAgICAgIG51bWJlck9mQ29sdW1uczogdGhpcy5fbnVtYmVyT2ZDb2x1bW5zLFxuICAgICAgICAgICAgc2NyZWVuU2l6ZTogdGhpcy5fYXZhaWxhYmxlV2lkdGhcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fc2V0Q2FyZENvbHVtbnMoKTtcbiAgICAgICAgdGhpcy5fc2V0Q2FyZENvbHVtbnNXaWR0aCgpO1xuICAgICAgICB0aGlzLl9zZXRDb250YWluZXJIZWlnaHQoKTtcblxuICAgICAgICB0aGlzLl9saXN0ZW5SZXNpemUgPSB0cnVlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uRHJhZ1N0YXJ0ZWQoZXZlbnQ6IENka0RyYWdTdGFydCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9saXN0ZW5SZXNpemUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5faGlkZGVuQ2FyZCA9IGV2ZW50LnNvdXJjZS5kYXRhO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uRHJvcExpc3RFbnRlcmVkKGV2ZW50OiBDZGtEcmFnRW50ZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY29udGFpbmVySXRlbUNhcmREZWYgPSAoZXZlbnQuY29udGFpbmVyLmdldFNvcnRlZEl0ZW1zKClbMF0uZGF0YSBhcyBDYXJkRGVmaW5pdGlvbkRpcmVjdGl2ZSkuZmRDYXJkRGVmO1xuICAgICAgICBjb25zdCBkcmFnSXRlbUNhcmREZWYgPSAoZXZlbnQuaXRlbS5kYXRhIGFzIENhcmREZWZpbml0aW9uRGlyZWN0aXZlKS5mZENhcmREZWY7XG5cbiAgICAgICAgdGhpcy5fcGxhY2Vob2xkZXJNYXJnaW4gPSBjb250YWluZXJJdGVtQ2FyZERlZiAhPT0gZHJhZ0l0ZW1DYXJkRGVmO1xuXG4gICAgICAgIGNvbnN0IGNvbHVtbkluZGV4VG9BZGRTcGFjZSA9IHRoaXMuX2NhcmRDb2x1bW5zLmZpbmRJbmRleCgoY29sdW1uKSA9PlxuICAgICAgICAgICAgY29sdW1uLmZpbmQoKGNhcmQpID0+IGV2ZW50LmNvbnRhaW5lci5nZXRTb3J0ZWRJdGVtcygpWzBdLmRhdGEgPT09IGNhcmQpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHNwYWNlVG9BZGQgPVxuICAgICAgICAgICAgZXZlbnQuaXRlbS5lbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ICtcbiAgICAgICAgICAgIChldmVudC5jb250YWluZXIuZ2V0U29ydGVkSXRlbXMoKS5sZW5ndGggPyBSRU1fSU5fUFggOiAwKTtcblxuICAgICAgICAvLyBXaGVuIHdlIG1vdmUgdGhlIGNhcmQgaW50byBhIGNlcnRhaW4gY29sdW1uIHdlIHNob3VsZCBpbmNyZWFzZSB0aGUgaGVpZ2h0IG9mIHRoYXQgY29sdW1uIGJ5IHRoZSBjYXJkIGhlaWdodFxuICAgICAgICB0aGlzLl9zZXRDb250YWluZXJIZWlnaHQoY29sdW1uSW5kZXhUb0FkZFNwYWNlLCBzcGFjZVRvQWRkKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkRyYWdEcm9wcGVkKGV2ZW50OiBDZGtEcmFnRHJvcDxudW1iZXIsIG51bWJlcj4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5faGlkZGVuQ2FyZCA9IG51bGw7XG5cbiAgICAgICAgaWYgKGV2ZW50LmNvbnRhaW5lci5kYXRhID09PSBldmVudC5wcmV2aW91c0NvbnRhaW5lci5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9wbGFjZWhvbGRlck1hcmdpbiA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IG1vdmVkQ2FyZCA9IGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmdldFNvcnRlZEl0ZW1zKClbMF0uZGF0YTtcbiAgICAgICAgY29uc3QgcmVwbGFjZWRDYXJkID0gZXZlbnQuY29udGFpbmVyLmdldFNvcnRlZEl0ZW1zKClbMF0uZGF0YTtcblxuICAgICAgICBjb25zdCBtb3ZlZENhcmRDb2x1bW4gPSB0aGlzLl9jYXJkQ29sdW1ucy5maW5kKChjb2x1bW4pID0+XG4gICAgICAgICAgICBjb2x1bW4uZmluZCgoY2FyZCkgPT4gY2FyZC5mZENhcmREZWYgPT09IG1vdmVkQ2FyZC5mZENhcmREZWYpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHJlcGxhY2VkQ2FyZENvbHVtbiA9IHRoaXMuX2NhcmRDb2x1bW5zLmZpbmQoKGNvbHVtbikgPT5cbiAgICAgICAgICAgIGNvbHVtbi5maW5kKChjYXJkKSA9PiBjYXJkLmZkQ2FyZERlZiA9PT0gcmVwbGFjZWRDYXJkLmZkQ2FyZERlZilcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBJZiB3ZSBkcmFnZ2VkIHRoZSBjYXJkIGZyb20gdGhlIHNhbWUgY29sdW1uIGFzIHRoZSBjb2x1bW4gd2UncmUgZHJvcHBpbmcgaW50b1xuICAgICAgICAvLyBUaGVyZSBtYXkgYmUgYSBzaXR1YXRpb24gd2hlcmUgdGhlIG9yZGVyIHNob3VsZG4ndCBjaGFuZ2UgYnV0IHNpbmNlIHRoZXJlIGFyZSBhIGRpZmZlcmVudCBkcm9wIGxpc3RzIGl0IHdpbGwgY2hhbmdlXG4gICAgICAgIC8vIFdlIHNob3VsZCBwcmV2ZW50IHRoaXNcbiAgICAgICAgaWYgKG1vdmVkQ2FyZENvbHVtbiA9PT0gcmVwbGFjZWRDYXJkQ29sdW1uICYmIG1vdmVkQ2FyZENvbHVtbj8ubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICBpZiAobW92ZWRDYXJkLmZkQ2FyZERlZiA8IHJlcGxhY2VkQ2FyZC5mZENhcmREZWYgJiYgZXZlbnQucHJldmlvdXNDb250YWluZXIuZGF0YSA8IGV2ZW50LmNvbnRhaW5lci5kYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobW92ZWRDYXJkLmZkQ2FyZERlZiA+IHJlcGxhY2VkQ2FyZC5mZENhcmREZWYgJiYgZXZlbnQucHJldmlvdXNDb250YWluZXIuZGF0YSA+IGV2ZW50LmNvbnRhaW5lci5kYXRhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcHJvY2Vzc0RyYWdEcm9wKGV2ZW50LnByZXZpb3VzQ29udGFpbmVyLmRhdGEsIGV2ZW50LmNvbnRhaW5lci5kYXRhLCBtb3ZlZENhcmQsIHJlcGxhY2VkQ2FyZCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc29ydFByZWRpY2F0ZUZuID0gKGluZGV4OiBudW1iZXIpOiBib29sZWFuID0+IGluZGV4ID09PSAwO1xuXG4gICAgLyoqIEBoaWRkZW4gRm9yIHRoZSBrZXlib2FyZCBkcmFnJmRyb3AgZGlyZWN0aXZlICovXG4gICAgX2N1c3RvbU1vdmVGbiA9IChncm91cDogQ2FyZENvbHVtbiwgaW5kZXhGcm9tOiBudW1iZXIsIGluZGV4VG86IG51bWJlcik6IHZvaWQgPT4ge1xuICAgICAgICBjb25zdCBtb3ZlZENhcmQgPSBncm91cFtpbmRleEZyb21dO1xuICAgICAgICBjb25zdCByZXBsYWNlZENhcmQgPSBncm91cFtpbmRleFRvXTtcblxuICAgICAgICBjb25zdCBpbmRleEZyb21BcnJheSA9IHRoaXMuX2NhcmRzQXJyYXkuZmluZEluZGV4KChjYXJkKSA9PiBjYXJkLmZkQ2FyZERlZiA9PT0gbW92ZWRDYXJkLmZkQ2FyZERlZik7XG4gICAgICAgIGNvbnN0IGluZGV4VG9BcnJheSA9IHRoaXMuX2NhcmRzQXJyYXkuZmluZEluZGV4KChjYXJkKSA9PiBjYXJkLmZkQ2FyZERlZiA9PT0gcmVwbGFjZWRDYXJkLmZkQ2FyZERlZik7XG5cbiAgICAgICAgdGhpcy5fcHJvY2Vzc0RyYWdEcm9wKGluZGV4RnJvbUFycmF5LCBpbmRleFRvQXJyYXksIG1vdmVkQ2FyZCwgcmVwbGFjZWRDYXJkKTtcbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gRm9yIHRoZSBrZXlib2FyZCBkcmFnJmRyb3AgZGlyZWN0aXZlICovXG4gICAgX2N1c3RvbVRyYW5zZmVyRm4gPSAocHJldkdyb3VwOiBDYXJkQ29sdW1uLCBuZXh0R3JvdXA6IENhcmRDb2x1bW4sIGluZGV4RnJvbTogbnVtYmVyLCBpbmRleFRvOiBudW1iZXIpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgbW92ZWRDYXJkID0gcHJldkdyb3VwW2luZGV4RnJvbV07XG4gICAgICAgIGNvbnN0IHJlcGxhY2VkQ2FyZCA9IG5leHRHcm91cFtpbmRleFRvXTtcblxuICAgICAgICBjb25zdCBpbmRleEZyb21BcnJheSA9IHRoaXMuX2NhcmRzQXJyYXkuZmluZEluZGV4KChjYXJkKSA9PiBjYXJkLmZkQ2FyZERlZiA9PT0gbW92ZWRDYXJkLmZkQ2FyZERlZik7XG4gICAgICAgIGNvbnN0IGluZGV4VG9BcnJheSA9IHRoaXMuX2NhcmRzQXJyYXkuZmluZEluZGV4KChjYXJkKSA9PiBjYXJkLmZkQ2FyZERlZiA9PT0gcmVwbGFjZWRDYXJkLmZkQ2FyZERlZik7XG5cbiAgICAgICAgdGhpcy5fcHJvY2Vzc0RyYWdEcm9wKGluZGV4RnJvbUFycmF5LCBpbmRleFRvQXJyYXksIG1vdmVkQ2FyZCwgcmVwbGFjZWRDYXJkKTtcbiAgICB9O1xuXG4gICAgLyoqIEBoaWRkZW4gQXJyYW5nZXMgY2FyZHMgb24gZHJvcCBvZiBkcmFnZ2VkIGNhcmQgKi9cbiAgICBwcml2YXRlIF9wcm9jZXNzRHJhZ0Ryb3AoXG4gICAgICAgIHByZXZJbmRleDogbnVtYmVyLFxuICAgICAgICBuZXdJbmRleDogbnVtYmVyLFxuICAgICAgICBwcmV2Q2FyZDogQ2FyZERlZmluaXRpb25EaXJlY3RpdmUsXG4gICAgICAgIG5ld0NhcmQ6IENhcmREZWZpbml0aW9uRGlyZWN0aXZlXG4gICAgKTogdm9pZCB7XG4gICAgICAgIC8vIG1vdmVJdGVtSW5BcnJheSBmcm9tIENESyB3b24ndCB3b3JrIGFzIGl0IGNoYW5nZXMgb3JkZXIgb2Ygb3RoZXIgY2FyZHNcbiAgICAgICAgY29uc3QgcmVwbGFjZWRDYXJkID0gdGhpcy5fY2FyZHNBcnJheVtuZXdJbmRleF07XG4gICAgICAgIHRoaXMuX2NhcmRzQXJyYXlbbmV3SW5kZXhdID0gdGhpcy5fY2FyZHNBcnJheVtwcmV2SW5kZXhdO1xuICAgICAgICB0aGlzLl9jYXJkc0FycmF5W3ByZXZJbmRleF0gPSByZXBsYWNlZENhcmQ7XG5cbiAgICAgICAgYWRqdXN0Q2FyZFJhbmsocHJldkNhcmQsIG5ld0NhcmQpO1xuXG4gICAgICAgIHRoaXMuY2FyZERyYWdnZWREcm9wcGVkLmVtaXQoe1xuICAgICAgICAgICAgcHJldmlvdXNJbmRleDogcHJldkluZGV4LFxuICAgICAgICAgICAgY3VycmVudEluZGV4OiBuZXdJbmRleCxcbiAgICAgICAgICAgIGxheW91dENvbHVtbnM6IHRoaXMuX251bWJlck9mQ29sdW1ucyxcbiAgICAgICAgICAgIGl0ZW1zOiB0aGlzLl9jYXJkcy50b0FycmF5KClcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy51cGRhdGVMYXlvdXQoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FjY2Vzc2liaWxpdHlTZXR1cCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fa2V5Ym9hcmRFdmVudHNNYW5hZ2VyID0gbmV3IEZvY3VzS2V5TWFuYWdlcih0aGlzLl9jYXJkQ29udGFpbmVycykud2l0aFdyYXAoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBSdGwgY2hhbmdlIHN1YnNjcmlwdGlvbiAqL1xuICAgIHByaXZhdGUgX3N1YnNjcmliZVRvUnRsKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9ydGxTZXJ2aWNlPy5ydGwucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoaXNSdGwpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2RpciA9IGlzUnRsID8gJ3J0bCcgOiAnbHRyJztcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiBMaXN0ZW4gd2luZG93IHJlc2l6ZSBhbmQgZGlzdHJpYnV0ZSBjYXJkcyBvbiBjb2x1bW4gY2hhbmdlICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25SZXNpemUoKTogdm9pZCB7XG4gICAgICAgIHJlc2l6ZU9ic2VydmFibGUodGhpcy5fbGF5b3V0Lm5hdGl2ZUVsZW1lbnQpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMjApLFxuICAgICAgICAgICAgICAgIGZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKGVudHJpZXMpID0+IHRoaXMuX2xpc3RlblJlc2l6ZSAmJiAhIShlbnRyaWVzWzBdLmNvbnRlbnRSZWN0LmhlaWdodCB8fCBlbnRyaWVzWzBdLmNvbnRlbnRSZWN0LndpZHRoKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMudXBkYXRlTGF5b3V0KCkpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIExpc3RlbiBjYXJkIGNoYW5nZSBhbmQgZGlzdHJpYnV0ZSBjYXJkcyBvbiBjb2x1bW4gY2hhbmdlICovXG4gICAgcHJpdmF0ZSBfbGlzdGVuT25DYXJkc0NoYW5nZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FyZHMuY2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc0NhcmRzKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUxheW91dCgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3Byb2Nlc3NDYXJkcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2FyZHNBcnJheSA9IHRoaXMuX2NhcmRzXG4gICAgICAgICAgICAudG9BcnJheSgpXG4gICAgICAgICAgICAuc29ydCgoZmlyc3RDYXJkLCBzZWNvbmRDYXJkKSA9PiBmaXJzdENhcmQuZmRDYXJkRGVmIC0gc2Vjb25kQ2FyZC5mZENhcmREZWYpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuIERpc3RyaWJ1dGUgY2FyZHMgYW1vbmcgY29sdW1ucyB0byBhcnJhbmdlIHRoZW0gaW4gXCJaXCIgZmxvdyAqL1xuICAgIHByaXZhdGUgX3NldENhcmRDb2x1bW5zKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9ncm91cEluZGV4ZXMgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICAgICAgICB0aGlzLl9pdGVtSW5kZXhlcyA9IG5ldyBNYXA8bnVtYmVyLCBudW1iZXI+KCk7XG4gICAgICAgIHRoaXMuX3NpbmdsZUl0ZW1Db2x1bW5zID0gbmV3IFNldDxudW1iZXI+KCk7XG5cbiAgICAgICAgY29uc3QgY29sdW1uczogQ2FyZENvbHVtbltdID0gbmV3IEFycmF5KHRoaXMuX251bWJlck9mQ29sdW1ucykuZmlsbCgwKS5tYXAoKCkgPT4gbmV3IEFycmF5KDApKTtcblxuICAgICAgICB0aGlzLl9jYXJkc0FycmF5LmZvckVhY2goKGNhcmQsIGkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJDb2x1bW5JbmRleCA9IGkgJSB0aGlzLl9udW1iZXJPZkNvbHVtbnM7XG4gICAgICAgICAgICBjb25zdCBpdGVtSW5kZXggPSBjb2x1bW5zW2N1cnJDb2x1bW5JbmRleF0ubGVuZ3RoO1xuXG4gICAgICAgICAgICBjb2x1bW5zW2N1cnJDb2x1bW5JbmRleF0ucHVzaChjYXJkKTtcblxuICAgICAgICAgICAgdGhpcy5fZ3JvdXBJbmRleGVzLnNldChjYXJkLmZkQ2FyZERlZiwgY3VyckNvbHVtbkluZGV4KTtcbiAgICAgICAgICAgIHRoaXMuX2l0ZW1JbmRleGVzLnNldChjYXJkLmZkQ2FyZERlZiwgaXRlbUluZGV4KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5fY2FyZENvbHVtbnMgPSBjb2x1bW5zO1xuXG4gICAgICAgIHRoaXMuX2NhcmRDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbi5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zaW5nbGVJdGVtQ29sdW1ucy5hZGQoY29sdW1uWzBdLmZkQ2FyZERlZik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2xpc3Rlbk9uQ2FyZHNIZWlnaHRDaGFuZ2UoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NldENhcmRDb2x1bW5zV2lkdGgoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NvbHVtbnNXaWR0aCA9IG5ldyBNYXAoKTtcblxuICAgICAgICBjb25zdCBjb25maWdQcmVzZW50ID1cbiAgICAgICAgICAgIHRoaXMuY29sdW1uc1dpZHRoQ29uZmlnICYmXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5jb2x1bW5zV2lkdGhDb25maWcgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmNvbHVtbnNXaWR0aENvbmZpZykubGVuZ3RoO1xuXG4gICAgICAgIGlmICghY29uZmlnUHJlc2VudCB8fCB0aGlzLl9udW1iZXJPZkNvbHVtbnMgPT09IDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpeGVkV2lkdGhNb2RpZmllcnMgPSBmaXhXaWR0aE1vZGlmaWVycyh0aGlzLmNvbHVtbnNXaWR0aENvbmZpZywgdGhpcy5fbnVtYmVyT2ZDb2x1bW5zKTtcbiAgICAgICAgY29uc3QgdG90YWxXaWR0aE1vZGlmaWVycyA9IGZpeGVkV2lkdGhNb2RpZmllcnMucmVkdWNlKChzdW0sIHdpZHRoKSA9PiAoc3VtICs9IHdpZHRoKSwgMCk7XG4gICAgICAgIGNvbnN0IGZyZWVTcGFjZSA9IHRoaXMuX2F2YWlsYWJsZVdpZHRoIC0gdGhpcy5jYXJkTWluaW11bVdpZHRoICogdGhpcy5fbnVtYmVyT2ZDb2x1bW5zO1xuXG4gICAgICAgIHRoaXMuX2NhcmRDb2x1bW5zLmZvckVhY2goKGNvbHVtbiwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gTWF0aC5yb3VuZChcbiAgICAgICAgICAgICAgICB0aGlzLmNhcmRNaW5pbXVtV2lkdGggKyAoZnJlZVNwYWNlIC8gdG90YWxXaWR0aE1vZGlmaWVycykgKiBmaXhlZFdpZHRoTW9kaWZpZXJzW2luZGV4XVxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29sdW1uLmZvckVhY2goKGNhcmQpID0+IHRoaXMuX2NvbHVtbnNXaWR0aC5zZXQoY2FyZC5mZENhcmREZWYsIGNvbHVtbldpZHRoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKiBDYWxjdWxhdGUgY29udGFpbmVyIGhlaWdodCBhY2NvcmRpbmdseSB0byB0aGUgdGhlIGNhcmQgY29sdW1ucyBoZWlnaHRcbiAgICAgKiBQYXJhbWV0ZXJzIHVzZWQgdG8gaW5jcmVhc2UgdGhlIGhlaWdodCBvZiB0aGUgY29sdW1uIHdoZXJlIGRyYWcnbidkcm9wIHBsYWNlaG9sZGVyIGN1cnJlbnRseSBpc1xuICAgICAqL1xuICAgIHByaXZhdGUgX3NldENvbnRhaW5lckhlaWdodChjb2x1bW5JbmRleFRvQWRkU3BhY2UgPSAtMSwgc3BhY2VUb0FkZCA9IDApOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIGNvbnN0IGNhcmRDb2x1bW5zID0gdGhpcy5fY2FyZENvbHVtbnMubWFwKChjb2x1bW4pID0+XG4gICAgICAgICAgICBjb2x1bW5cbiAgICAgICAgICAgICAgICAubWFwKChjYXJkKSA9PiB0aGlzLl9kcmFnTGlzdC5maW5kKChkcmFnKSA9PiBkcmFnLmRhdGEgPT09IGNhcmQpKVxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKGNka0RyYWcpID0+ICFjZGtEcmFnPy5fZHJhZ1JlZi5pc0RyYWdnaW5nKCkgJiYgISFjZGtEcmFnPy5lbGVtZW50Py5uYXRpdmVFbGVtZW50KVxuICAgICAgICAgICAgICAgIC5tYXAoKGNka0RyYWcpID0+IGNka0RyYWc/LmVsZW1lbnQpXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgY29sdW1uc0hlaWdodHMgPSBjYXJkQ29sdW1uc1xuICAgICAgICAgICAgLm1hcCgoY29sdW1uKSA9PiBjb2x1bW4ubWFwKChjYXJkRWxSZWYpID0+IGNhcmRFbFJlZj8ubmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQgfHwgMCkpXG4gICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgIChjb2x1bW4sIGNvbHVtbkluZGV4KSA9PlxuICAgICAgICAgICAgICAgICAgICBjb2x1bW4ucmVkdWNlKChjYXJkc0hlaWdodCwgaGVpZ2h0KSA9PiAoY2FyZHNIZWlnaHQgKz0gaGVpZ2h0ICsgUkVNX0lOX1BYKSwgMCkgK1xuICAgICAgICAgICAgICAgICAgICAoY29sdW1uSW5kZXggPT09IGNvbHVtbkluZGV4VG9BZGRTcGFjZSA/IHNwYWNlVG9BZGQgOiAwKVxuICAgICAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBwcmV2Q29udGFpbmVySGVpZ2h0ID0gdGhpcy5fY29udGFpbmVySGVpZ2h0O1xuXG4gICAgICAgIC8vICs0cHggYmVjYXVzZSBpdCdzIHRoZSB0b3AgJiBib3R0b20gYm9yZGVycyBvZiBjYXJkIHBsYWNlaG9sZGVyXG4gICAgICAgIHRoaXMuX2NvbnRhaW5lckhlaWdodCA9IE1hdGguY2VpbChNYXRoLm1heCguLi5jb2x1bW5zSGVpZ2h0cykgKyA0KTtcblxuICAgICAgICBpZiAodGhpcy5fY29udGFpbmVySGVpZ2h0ICE9PSBwcmV2Q29udGFpbmVySGVpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2xpc3Rlbk9uQ2FyZHNIZWlnaHRDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2NhcmRzU2l6ZUNoYW5nZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLl9jYXJkc1NpemVDaGFuZ2VTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgICAgICAgdGhpcy5fY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIHRoaXMuX2NhcmRDb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT5cbiAgICAgICAgICAgIGNvbHVtblxuICAgICAgICAgICAgICAgIC5tYXAoKGNhcmQpID0+IHRoaXMuX2RyYWdMaXN0LmZpbmQoKHdyYXBwZXIpID0+IHdyYXBwZXIuZGF0YSA9PT0gY2FyZCk/LmVsZW1lbnQpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigodik6IHYgaXMgRWxlbWVudFJlZjxIVE1MRWxlbWVudD4gPT4gISF2KVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChjYXJkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NhcmRzU2l6ZUNoYW5nZVN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNpemVPYnNlcnZhYmxlKGNhcmQubmF0aXZlRWxlbWVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcCgxKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVib3VuY2VUaW1lKDIwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuX2xpc3RlblJlc2l6ZSAmJiAhIXRoaXMuX2xheW91dC5uYXRpdmVFbGVtZW50LmNsaWVudEhlaWdodClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9zZXRDb250YWluZXJIZWlnaHQoKSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgIH1cbn1cblxuLyoqIEBoaWRkZW4gKi9cbmZ1bmN0aW9uIGZpeFdpZHRoTW9kaWZpZXJzKGNvbmZpZzogQ29sdW1uc1dpZHRoQ29uZmlnLCBudW1iZXJPZkNvbHVtbnM6IG51bWJlcik6IG51bWJlcltdIHtcbiAgICBjb25zdCBtb2RpZmllcnMgPSBuZXcgQXJyYXkobnVtYmVyT2ZDb2x1bW5zKS5maWxsKDApO1xuXG4gICAgcmV0dXJuIG1vZGlmaWVycy5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbHVtbldpZHRoTW9kaWZpZXIgPSBjb25maWdbaW5kZXggKyAxXTtcblxuICAgICAgICBpZiAoIWNvbHVtbldpZHRoTW9kaWZpZXIgfHwgY29sdW1uV2lkdGhNb2RpZmllciA8IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbHVtbldpZHRoTW9kaWZpZXI7XG4gICAgfSk7XG59XG5cbi8qKiBAaGlkZGVuIFJldHVybnMgbnVtYmVyIG9mIGNvbHVtbnMgdGhhdCBjYW4gZml0IGluIGN1cnJlbnQgYXZhaWxhYmxlIHdpZHRoIGZvciBmZC1jYXJkLWxheW91dCAqL1xuZnVuY3Rpb24gZ2V0TnVtYmVyT2ZDb2x1bW5zKGNvbnRhaW5lcldpZHRoOiBudW1iZXIsIGNhcmRXaWR0aDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb250YWluZXJXaWR0aCA9IGNvbnRhaW5lcldpZHRoIHx8IDE7XG4gICAgY2FyZFdpZHRoID0gY2FyZFdpZHRoIHx8IDE7XG5cbiAgICBjb25zdCBudW1iZXJPZkNhcmRzV2l0aE5vR2FwID0gTWF0aC5tYXgoTWF0aC5mbG9vcihjb250YWluZXJXaWR0aCAvIGNhcmRXaWR0aCksIDEpOyAvLyBFeGFtcGxlOiA5NjAgLyAzMjAgPSAzXG4gICAgY29uc3QgcmVxdWlyZWRXaWR0aFdpdGhHYXAgPSBudW1iZXJPZkNhcmRzV2l0aE5vR2FwICogY2FyZFdpZHRoICsgKG51bWJlck9mQ2FyZHNXaXRoTm9HYXAgLSAxKSAqIENBUkRfR0FQX1dJRFRIO1xuICAgIGNvbnN0IGNvbHVtbkNvdW50ID0gcmVxdWlyZWRXaWR0aFdpdGhHYXAgPiBjb250YWluZXJXaWR0aCA/IG51bWJlck9mQ2FyZHNXaXRoTm9HYXAgLSAxIDogbnVtYmVyT2ZDYXJkc1dpdGhOb0dhcDtcblxuICAgIHJldHVybiBNYXRoLm1heChjb2x1bW5Db3VudCwgMSk7XG59XG5cbi8qKiBAaGlkZGVuIE1ldGhvZCB0byB1cGRhdGUgcmFuayBhZnRlciBjYXJkcyBhcmUgZHJhZ2dlZCAqL1xuZnVuY3Rpb24gYWRqdXN0Q2FyZFJhbmsoZHJhZ2dlZENhcmQ6IENhcmREZWZpbml0aW9uRGlyZWN0aXZlLCByZXBsYWNlZENhcmQ6IENhcmREZWZpbml0aW9uRGlyZWN0aXZlKTogdm9pZCB7XG4gICAgY29uc3QgZHJhZ2dlZENhcmRSYW5rID0gZHJhZ2dlZENhcmQuZmRDYXJkRGVmO1xuICAgIGRyYWdnZWRDYXJkLmZkQ2FyZERlZiA9IHJlcGxhY2VkQ2FyZC5mZENhcmREZWY7XG4gICAgcmVwbGFjZWRDYXJkLmZkQ2FyZERlZiA9IGRyYWdnZWRDYXJkUmFuaztcbn1cbiIsIjxkaXZcbiAgICAjbGF5b3V0XG4gICAgY2RrRHJvcExpc3RHcm91cFxuICAgIGZkRG5kS2V5Ym9hcmRHcm91cFxuICAgIGNsYXNzPVwiZmQtZml4ZWQtY2FyZC1sYXlvdXRfX2NhcmQtbGF5b3V0IGZkLWZpeGVkLWNhcmQtbGF5b3V0X19jYXJkLWxheW91dC0tY29sdW1ucy17eyB0aGlzLl9udW1iZXJPZkNvbHVtbnMgfX1cIlxuICAgIFtzdHlsZS5oZWlnaHRdPVwiX2NvbnRhaW5lckhlaWdodCArICdweCdcIlxuICAgIFtncm91cHNdPVwiX2NhcmRDb2x1bW5zXCJcbiAgICBvcmllbnRhdGlvbj1cImhvcml6b250YWxcIlxuICAgIFtjdXN0b21Nb3ZlRm5dPVwiX2N1c3RvbU1vdmVGblwiXG4gICAgW2N1c3RvbVRyYW5zZmVyRm5dPVwiX2N1c3RvbVRyYW5zZmVyRm5cIlxuICAgIFtkaXNhYmxlS2V5Ym9hcmREcmFnRHJvcF09XCJkaXNhYmxlRHJhZ0Ryb3BcIlxuICAgIFtjZGtEcm9wTGlzdEdyb3VwRGlzYWJsZWRdPVwiZGlzYWJsZURyYWdEcm9wXCJcbiAgICBbYXR0ci5kaXJdPVwiX2RpclwiXG4+XG4gICAgPGRpdlxuICAgICAgICAqbmdGb3I9XCJsZXQgY2FyZCBvZiBfY2FyZHNBcnJheTsgbGV0IGNhcmRJbmRleCA9IGluZGV4XCJcbiAgICAgICAgY2RrRHJvcExpc3RcbiAgICAgICAgY2xhc3M9XCJmZC1maXhlZC1jYXJkLWxheW91dF9fY2FyZFwiXG4gICAgICAgIFtjbGFzcy5mZC1maXhlZC1jYXJkLWxheW91dF9fY2FyZC0tc2luZ2xlXT1cIl9zaW5nbGVJdGVtQ29sdW1ucy5oYXMoY2FyZC5mZENhcmREZWYpXCJcbiAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJfY29sdW1uc1dpZHRoLmdldChjYXJkLmZkQ2FyZERlZilcIlxuICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cIl9jb2x1bW5zV2lkdGguZ2V0KGNhcmQuZmRDYXJkRGVmKVwiXG4gICAgICAgIFtzdHlsZS5kaXNwbGF5XT1cIl9oaWRkZW5DYXJkID09PSBjYXJkID8gJ25vbmUnIDogJ2Jsb2NrJ1wiXG4gICAgICAgIFtjZGtEcm9wTGlzdERhdGFdPVwiY2FyZEluZGV4XCJcbiAgICAgICAgW2Nka0Ryb3BMaXN0U29ydFByZWRpY2F0ZV09XCJfc29ydFByZWRpY2F0ZUZuXCJcbiAgICAgICAgKGNka0Ryb3BMaXN0RW50ZXJlZCk9XCJfb25Ecm9wTGlzdEVudGVyZWQoJGV2ZW50KVwiXG4gICAgPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjZGtEcmFnXG4gICAgICAgICAgICBmZERuZEtleWJvYXJkSXRlbVxuICAgICAgICAgICAgdGFiaW5kZXg9XCIwXCJcbiAgICAgICAgICAgIGNka0RyYWdQcmV2aWV3Q2xhc3M9XCJmZC1maXhlZC1jYXJkLWxheW91dF9fY2FyZC1wcmV2aWV3XCJcbiAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJjYXJkXCJcbiAgICAgICAgICAgIFtjZGtEcmFnU3RhcnREZWxheV09XCJkcmFnU3RhcnREZWxheVwiXG4gICAgICAgICAgICBbaXRlbUluZGV4XT1cIl9pdGVtSW5kZXhlcy5nZXQoY2FyZC5mZENhcmREZWYpIVwiXG4gICAgICAgICAgICBbZ3JvdXBJbmRleF09XCJfZ3JvdXBJbmRleGVzLmdldChjYXJkLmZkQ2FyZERlZikhXCJcbiAgICAgICAgICAgIChjZGtEcmFnU3RhcnRlZCk9XCJfb25EcmFnU3RhcnRlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjZGtEcmFnRHJvcHBlZCk9XCJfb25EcmFnRHJvcHBlZCgkZXZlbnQpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGZkLWZpeGVkLWNhcmQtbGF5b3V0LWl0ZW0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNhcmQ/LnRlbXBsYXRlIHx8IG51bGxcIj4gPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2ZkLWZpeGVkLWNhcmQtbGF5b3V0LWl0ZW0+XG5cbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAqY2RrRHJhZ1BsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1maXhlZC1jYXJkLWxheW91dF9fY2FyZC1wbGFjZWhvbGRlclwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLm1hcmdpbi1ib3R0b20ucmVtXT1cIitfcGxhY2Vob2xkZXJNYXJnaW5cIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYXJkPy50ZW1wbGF0ZSB8fCBudWxsXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgX2NhcmRDb2x1bW5zOyBsZXQgbGFzdCA9IGxhc3Q7IGxldCBpbmRleCA9IGluZGV4XCI+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhbGFzdFwiIGNsYXNzPVwiZmQtZml4ZWQtY2FyZC1sYXlvdXRfX2NsZWFyZml4XCIgW3N0eWxlLm9yZGVyXT1cImluZGV4ICsgMVwiPjwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuPC9kaXY+XG4iXX0=
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/facets",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/feed-input",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fundamental-ngx/core/feed-list-item",
3
- "version": "0.36.0-rc.4",
3
+ "version": "0.36.0-rc.5",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^13.0.0",
6
6
  "@angular/core": "^13.0.0"