@fundamental-ngx/core 0.35.2-rc.12 → 0.35.2-rc.13

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 (165) 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/avatar.component.d.ts +5 -4
  5. package/avatar/esm2020/avatar.component.mjs +21 -11
  6. package/avatar/fesm2015/fundamental-ngx-core-avatar.mjs +22 -10
  7. package/avatar/fesm2015/fundamental-ngx-core-avatar.mjs.map +1 -1
  8. package/avatar/fesm2020/fundamental-ngx-core-avatar.mjs +20 -10
  9. package/avatar/fesm2020/fundamental-ngx-core-avatar.mjs.map +1 -1
  10. package/avatar/package.json +1 -1
  11. package/avatar-group/package.json +1 -1
  12. package/bar/package.json +1 -1
  13. package/breadcrumb/package.json +1 -1
  14. package/busy-indicator/package.json +1 -1
  15. package/button/package.json +1 -1
  16. package/calendar/package.json +1 -1
  17. package/card/package.json +1 -1
  18. package/carousel/package.json +1 -1
  19. package/checkbox/package.json +1 -1
  20. package/combobox/package.json +1 -1
  21. package/content-density/package.json +3 -3
  22. package/date-picker/package.json +1 -1
  23. package/datetime/package.json +1 -1
  24. package/datetime-picker/package.json +1 -1
  25. package/dialog/package.json +1 -1
  26. package/dynamic-page/package.json +1 -1
  27. package/dynamic-side-content/package.json +1 -1
  28. package/esm2020/avatar/avatar.component.mjs +21 -11
  29. package/esm2020/grid-list/components/grid-list-item/grid-list-item.component.mjs +12 -8
  30. package/esm2020/input-group/input-group.component.mjs +7 -6
  31. package/esm2020/list/list-item/list-item.component.mjs +12 -7
  32. package/esm2020/multi-input/multi-input.component.mjs +3 -3
  33. package/esm2020/tests/when-stable.mjs +11 -3
  34. package/esm2020/token/token.component.mjs +15 -3
  35. package/esm2020/token/tokenizer.component.mjs +16 -39
  36. package/facets/package.json +1 -1
  37. package/feed-input/package.json +1 -1
  38. package/feed-list-item/package.json +1 -1
  39. package/fesm2015/fundamental-ngx-core-avatar.mjs +22 -10
  40. package/fesm2015/fundamental-ngx-core-avatar.mjs.map +1 -1
  41. package/fesm2015/fundamental-ngx-core-grid-list.mjs +11 -7
  42. package/fesm2015/fundamental-ngx-core-grid-list.mjs.map +1 -1
  43. package/fesm2015/fundamental-ngx-core-input-group.mjs +6 -5
  44. package/fesm2015/fundamental-ngx-core-input-group.mjs.map +1 -1
  45. package/fesm2015/fundamental-ngx-core-list.mjs +12 -7
  46. package/fesm2015/fundamental-ngx-core-list.mjs.map +1 -1
  47. package/fesm2015/fundamental-ngx-core-multi-input.mjs +2 -2
  48. package/fesm2015/fundamental-ngx-core-multi-input.mjs.map +1 -1
  49. package/fesm2015/fundamental-ngx-core-tests.mjs +10 -2
  50. package/fesm2015/fundamental-ngx-core-tests.mjs.map +1 -1
  51. package/fesm2015/fundamental-ngx-core-token.mjs +29 -40
  52. package/fesm2015/fundamental-ngx-core-token.mjs.map +1 -1
  53. package/fesm2020/fundamental-ngx-core-avatar.mjs +20 -10
  54. package/fesm2020/fundamental-ngx-core-avatar.mjs.map +1 -1
  55. package/fesm2020/fundamental-ngx-core-grid-list.mjs +11 -7
  56. package/fesm2020/fundamental-ngx-core-grid-list.mjs.map +1 -1
  57. package/fesm2020/fundamental-ngx-core-input-group.mjs +6 -5
  58. package/fesm2020/fundamental-ngx-core-input-group.mjs.map +1 -1
  59. package/fesm2020/fundamental-ngx-core-list.mjs +11 -6
  60. package/fesm2020/fundamental-ngx-core-list.mjs.map +1 -1
  61. package/fesm2020/fundamental-ngx-core-multi-input.mjs +2 -2
  62. package/fesm2020/fundamental-ngx-core-multi-input.mjs.map +1 -1
  63. package/fesm2020/fundamental-ngx-core-tests.mjs +10 -2
  64. package/fesm2020/fundamental-ngx-core-tests.mjs.map +1 -1
  65. package/fesm2020/fundamental-ngx-core-token.mjs +29 -40
  66. package/fesm2020/fundamental-ngx-core-token.mjs.map +1 -1
  67. package/file-uploader/package.json +1 -1
  68. package/fixed-card-layout/package.json +1 -1
  69. package/flexible-column-layout/package.json +1 -1
  70. package/form/package.json +1 -1
  71. package/formatted-text/package.json +1 -1
  72. package/grid-list/components/grid-list-item/grid-list-item.component.d.ts +5 -3
  73. package/grid-list/esm2020/components/grid-list-item/grid-list-item.component.mjs +12 -8
  74. package/grid-list/fesm2015/fundamental-ngx-core-grid-list.mjs +11 -7
  75. package/grid-list/fesm2015/fundamental-ngx-core-grid-list.mjs.map +1 -1
  76. package/grid-list/fesm2020/fundamental-ngx-core-grid-list.mjs +11 -7
  77. package/grid-list/fesm2020/fundamental-ngx-core-grid-list.mjs.map +1 -1
  78. package/grid-list/package.json +1 -1
  79. package/icon/package.json +1 -1
  80. package/illustrated-message/package.json +1 -1
  81. package/infinite-scroll/package.json +1 -1
  82. package/info-label/package.json +1 -1
  83. package/inline-help/package.json +1 -1
  84. package/input-group/esm2020/input-group.component.mjs +7 -6
  85. package/input-group/fesm2015/fundamental-ngx-core-input-group.mjs +6 -5
  86. package/input-group/fesm2015/fundamental-ngx-core-input-group.mjs.map +1 -1
  87. package/input-group/fesm2020/fundamental-ngx-core-input-group.mjs +6 -5
  88. package/input-group/fesm2020/fundamental-ngx-core-input-group.mjs.map +1 -1
  89. package/input-group/package.json +1 -1
  90. package/layout-grid/package.json +1 -1
  91. package/layout-panel/package.json +1 -1
  92. package/link/package.json +1 -1
  93. package/list/esm2020/list-item/list-item.component.mjs +12 -7
  94. package/list/fesm2015/fundamental-ngx-core-list.mjs +12 -7
  95. package/list/fesm2015/fundamental-ngx-core-list.mjs.map +1 -1
  96. package/list/fesm2020/fundamental-ngx-core-list.mjs +11 -6
  97. package/list/fesm2020/fundamental-ngx-core-list.mjs.map +1 -1
  98. package/list/list-item/list-item.component.d.ts +2 -0
  99. package/list/package.json +1 -1
  100. package/menu/package.json +1 -1
  101. package/message-box/package.json +1 -1
  102. package/message-strip/package.json +1 -1
  103. package/message-toast/package.json +1 -1
  104. package/micro-process-flow/package.json +1 -1
  105. package/mobile-mode/package.json +1 -1
  106. package/multi-input/esm2020/multi-input.component.mjs +3 -3
  107. package/multi-input/fesm2015/fundamental-ngx-core-multi-input.mjs +2 -2
  108. package/multi-input/fesm2015/fundamental-ngx-core-multi-input.mjs.map +1 -1
  109. package/multi-input/fesm2020/fundamental-ngx-core-multi-input.mjs +2 -2
  110. package/multi-input/fesm2020/fundamental-ngx-core-multi-input.mjs.map +1 -1
  111. package/multi-input/package.json +1 -1
  112. package/nested-list/package.json +1 -1
  113. package/notification/package.json +1 -1
  114. package/object-identifier/package.json +1 -1
  115. package/object-marker/package.json +1 -1
  116. package/object-number/package.json +1 -1
  117. package/object-status/package.json +1 -1
  118. package/overflow-layout/package.json +13 -13
  119. package/package.json +1 -1
  120. package/pagination/package.json +1 -1
  121. package/panel/package.json +1 -1
  122. package/popover/package.json +1 -1
  123. package/product-switch/package.json +1 -1
  124. package/progress-indicator/package.json +1 -1
  125. package/quick-view/package.json +1 -1
  126. package/radio/package.json +1 -1
  127. package/rating-indicator/package.json +1 -1
  128. package/resizable-card-layout/package.json +1 -1
  129. package/scroll-spy/package.json +1 -1
  130. package/scrollbar/package.json +1 -1
  131. package/segmented-button/package.json +1 -1
  132. package/select/package.json +1 -1
  133. package/shared/package.json +1 -1
  134. package/shellbar/package.json +1 -1
  135. package/side-navigation/package.json +1 -1
  136. package/slider/package.json +1 -1
  137. package/split-button/package.json +1 -1
  138. package/splitter/package.json +1 -1
  139. package/status-indicator/package.json +1 -1
  140. package/step-input/package.json +1 -1
  141. package/switch/package.json +1 -1
  142. package/table/package.json +1 -1
  143. package/tabs/package.json +1 -1
  144. package/text/package.json +1 -1
  145. package/theming/package.json +1 -1
  146. package/tile/package.json +1 -1
  147. package/time/package.json +1 -1
  148. package/time-picker/package.json +1 -1
  149. package/timeline/package.json +1 -1
  150. package/title/package.json +1 -1
  151. package/token/esm2020/token.component.mjs +15 -3
  152. package/token/esm2020/tokenizer.component.mjs +16 -39
  153. package/token/fesm2015/fundamental-ngx-core-token.mjs +29 -40
  154. package/token/fesm2015/fundamental-ngx-core-token.mjs.map +1 -1
  155. package/token/fesm2020/fundamental-ngx-core-token.mjs +29 -40
  156. package/token/fesm2020/fundamental-ngx-core-token.mjs.map +1 -1
  157. package/token/package.json +1 -1
  158. package/token/token.component.d.ts +8 -2
  159. package/token/tokenizer.component.d.ts +5 -9
  160. package/toolbar/package.json +1 -1
  161. package/tree/package.json +1 -1
  162. package/upload-collection/package.json +1 -1
  163. package/utils/package.json +1 -1
  164. package/vertical-navigation/package.json +1 -1
  165. package/wizard/package.json +1 -1
@@ -150,8 +150,8 @@ export class GridListItemComponent {
150
150
  this.subscription.unsubscribe();
151
151
  }
152
152
  /** Focus grid list item programmatically */
153
- focus() {
154
- this._gridListItem?.nativeElement.focus();
153
+ focus(options) {
154
+ this._gridListItem?.nativeElement.focus(options);
155
155
  }
156
156
  /** @hidden */
157
157
  _setActive(event, isActive) {
@@ -227,9 +227,11 @@ export class GridListItemComponent {
227
227
  /** @hidden */
228
228
  _onKeyDown(event) {
229
229
  const target = event.target;
230
- if (!KeyUtil.isKeyCode(event, [ENTER, SPACE]) ||
231
- this.selectionMode === 'none' ||
232
- !target.classList.contains('fd-grid-list__item')) {
230
+ const isSelectionKeyDown = KeyUtil.isKeyCode(event, [ENTER, SPACE]);
231
+ if (isSelectionKeyDown && this.selectionMode === 'none') {
232
+ this.press.emit(this._outputEventValue);
233
+ }
234
+ if (!isSelectionKeyDown || this.selectionMode === 'none' || !target.classList.contains('fd-grid-list__item')) {
233
235
  return;
234
236
  }
235
237
  this._preventDefault(event);
@@ -294,10 +296,10 @@ export class GridListItemComponent {
294
296
  }
295
297
  }
296
298
  GridListItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: GridListItemComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.GridList }], target: i0.ɵɵFactoryTarget.Component });
297
- GridListItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: GridListItemComponent, selector: "fd-grid-list-item", inputs: { id: "id", width: "width", layoutItemPattern: "layoutItemPattern", status: "status", counter: "counter", value: "value", disableToolbarClick: "disableToolbarClick", selected: "selected", noPadding: "noPadding", ariaLabel: "ariaLabel", type: "type", state: "state", isNavigated: "isNavigated", title: "title", description: "description" }, outputs: { press: "press", detail: "detail", delete: "delete", navigate: "navigate", draft: "draft", locked: "locked" }, host: { properties: { "style.max-width": "this.width", "style.min-width": "this.width" } }, queries: [{ propertyName: "footerBarComponent", first: true, predicate: GridListItemFooterBarComponent, descendants: true }, { propertyName: "itemToolbarComponent", first: true, predicate: GridListItemToolbarComponent, descendants: true }, { propertyName: "body", first: true, predicate: GridListItemBodyDirective, descendants: true }], viewQueries: [{ propertyName: "_gridListItem", first: true, predicate: ["gridListItem"], descendants: true }], ngImport: i0, template: "<div\n #gridListItem\n [id]=\"id\"\n tabindex=\"0\"\n class=\"fd-grid-list__item\"\n role=\"option\"\n [class.is-navigated]=\"isNavigated\"\n [class.is-selected]=\"!!_selectedItem\"\n [class.fd-grid-list__item--link]=\"\n _isActive && (type === 'active' || type === 'detailsAndActive' || type === 'navigation')\n \"\n [class.fd-grid-list__item--unread]=\"state === 'unread'\"\n [class.fd-grid-list__item--locked]=\"state === 'locked'\"\n [class.fd-grid-list__item--draft]=\"state === 'draft'\"\n [class.fd-grid-list__item--error]=\"state === 'error'\"\n (keydown)=\"_onKeyDown($event)\"\n (click)=\"selectionMode === 'singleSelect' && _singleSelect($event); _onClick($event)\"\n [attr.aria-label]=\"ariaLabel\"\n (mouseover)=\"_setActive($event, false)\"\n (mouseout)=\"_setActive($event, true)\"\n [attr.aria-selected]=\"selectionMode === 'none' ? null : !!_selectedItem\"\n>\n <span\n *ngIf=\"status\"\n class=\"fd-grid-list__highlight\"\n [class.fd-grid-list__highlight--positive]=\"status === 'success'\"\n [class.fd-grid-list__highlight--negative]=\"status === 'warning'\"\n [class.fd-grid-list__highlight--critical]=\"status === 'error'\"\n [class.fd-grid-list__highlight--neutral]=\"status === 'neutral'\"\n i18n-aria-label=\"coreGridList.Item.Status|Status aria-label attribute\"\n [attr.aria-label]=\"'Item has status. Status: ' + status + '.'\"\n ></span>\n\n <ng-container *ngIf=\"selectionMode === 'singleSelect'\">\n <ng-container *ngTemplateOutlet=\"radio\"></ng-container>\n </ng-container>\n\n <div\n class=\"fd-toolbar fd-grid-list__item-toolbar\"\n *ngIf=\"\n counter ||\n itemToolbarComponent?.contentTemplateRef ||\n (type && type !== 'inactive' && type !== 'active') ||\n (selectionMode !== 'none' && selectionMode !== 'singleSelect')\n \"\n >\n <ng-container *ngIf=\"selectionMode === 'singleSelectLeft'\">\n <ng-container *ngTemplateOutlet=\"radio\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"selectionMode === 'multiSelect'\">\n <ng-container *ngTemplateOutlet=\"checkbox\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"itemToolbarComponent?.contentTemplateRef\">\n <div class=\"fd-toolbar--extra-content\">\n <ng-container *ngTemplateOutlet=\"itemToolbarComponent.contentTemplateRef\"></ng-container>\n </div>\n </ng-container>\n\n <fd-grid-list-title-bar-spacer></fd-grid-list-title-bar-spacer>\n\n <span\n *ngIf=\"counter\"\n class=\"fd-grid-list__item-counter\"\n i18n-aria-label=\"@@coreGridList.Item.Counter|Count aria-label attribute\"\n [attr.aria-label]=\"'Item has ' + counter + ' children'\"\n [innerText]=\"counter\"\n ></span>\n\n <button\n *ngIf=\"type === 'detail' || type === 'detailsAndActive'\"\n fd-button\n fdType=\"transparent\"\n glyph=\"edit\"\n class=\"fd-grid-list__action-button\"\n i18n-aria-label=\"coreGridList.Item.Btn.Details|Button aria-label attribute\"\n aria-label=\"Details\"\n i18n-title=\"coreGridList.Item.Btn.Details|Button title attribute\"\n title=\"Details\"\n fdCompact\n (click)=\"_onDetail($event)\"\n ></button>\n\n <button\n *ngIf=\"selectionMode === 'delete'\"\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n class=\"fd-grid-list__action-button\"\n i18n-aria-label=\"coreGridList.Item.Btn.Delete|Button aria-label attribute\"\n aria-label=\"Delete\"\n i18n-title=\"coreGridList.Item.Btn.Delete|Button title attribute\"\n title=\"Delete\"\n fdCompact\n (click)=\"_onDelete($event)\"\n ></button>\n\n <span *ngIf=\"type === 'navigation'\" class=\"fd-grid-list__item-navigation-indicator\">\n <fd-icon glyph=\"navigation-right-arrow\"></fd-icon>\n </span>\n\n <ng-container *ngIf=\"selectionMode === 'singleSelectRight'\">\n <ng-container *ngTemplateOutlet=\"radio\"></ng-container>\n </ng-container>\n </div>\n\n <div class=\"fd-grid-list__item-body\" [class.fd-grid-list__item-body--no-padding]=\"noPadding\">\n <ng-content select=\"[fd-grid-list-item-image]\"></ng-content>\n\n <div *ngIf=\"title || description\" class=\"fd-grid-list__item-header\">\n <h4 *ngIf=\"title\" fd-title>{{ title }}</h4>\n <span *ngIf=\"description\" class=\"fd-grid-list__item-subtitle\">{{ description }}</span>\n </div>\n\n <div *ngIf=\"body?.templateRef\" class=\"fd-grid-list__item-content\">\n <ng-container [ngTemplateOutlet]=\"body.templateRef\"></ng-container>\n </div>\n\n <ng-container *ngIf=\"state || footerBarComponent?.contentTemplateRef\">\n <ng-container *ngTemplateOutlet=\"itemFooter\"></ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #radio>\n <input\n [attr.tabindex]=\"selectionMode === 'singleSelect' ? -1 : 0\"\n type=\"radio\"\n class=\"fd-radio fd-radio--compact fd-grid-list__radio-input\"\n [style.display]=\"selectionMode === 'singleSelect' ? 'none' : ''\"\n [id]=\"id + '-radio'\"\n [name]=\"'fd-grid-list-item-toolbar-' + selectionMode\"\n [attr.aria-label]=\"ariaLabel\"\n [value]=\"value\"\n [ngModel]=\"_selectedItem\"\n (ngModelChange)=\"$event && _selectionItem($event)\"\n />\n <label\n class=\"fd-radio__label fd-grid-list__radio-label\"\n [for]=\"id + '-radio'\"\n tabindex=\"-1\"\n (mouseover)=\"_setActive($event, false)\"\n (mouseout)=\"_setActive($event, true)\"\n ></label>\n</ng-template>\n\n<ng-template #checkbox>\n <input\n type=\"checkbox\"\n class=\"fd-checkbox fd-checkbox--compact fd-grid-list__checkbox-input\"\n [id]=\"id + '-checkbox'\"\n [attr.aria-label]=\"ariaLabel\"\n [ngModel]=\"_selectedItem\"\n (click)=\"_checkboxClick($event)\"\n />\n <label\n class=\"fd-checkbox__label fd-checkbox__label--compact fd-grid-list__checkbox-label\"\n [for]=\"id + '-checkbox'\"\n tabindex=\"-1\"\n ></label>\n</ng-template>\n\n<ng-template #itemFooter>\n <div class=\"fd-grid-list__item-body-actions\" *ngIf=\"footerBarComponent || state\">\n <ng-container *ngIf=\"footerBarComponent?.contentTemplateRef\">\n <ng-container *ngTemplateOutlet=\"footerBarComponent.contentTemplateRef\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!footerBarComponent?.contentTemplateRef && state\">\n <span\n *ngIf=\"state === 'error'\"\n fd-object-status\n status=\"negative\"\n i18n-label=\"coreGridList.Item.Status.ContainsErrors|Error label attribute\"\n label=\"Contains errors\"\n i18n-title=\"coreGridList.Item.Status.ContainsErrors|Error title attribute\"\n title=\"Contains errors\"\n ></span>\n\n <button\n class=\"fd-grid-list__action-button\"\n *ngIf=\"state === 'locked'\"\n fd-button\n fdType=\"transparent\"\n glyph=\"private\"\n i18n-aria-label=\"coreGridList.Item.Status.Locked|Button aria-label attribute\"\n aria-label=\"Locked\"\n i18n-label=\"coreGridList.Item.Status.Locked|Button label attribute\"\n label=\"Locked\"\n fdCompact\n (click)=\"_clickOnLocked($event)\"\n ></button>\n\n <button\n class=\"fd-grid-list__action-button\"\n *ngIf=\"state === 'draft'\"\n fd-button\n fdType=\"transparent\"\n i18n-aria-label=\"coreGridList.Item.Status.Draft|Button aria-label attribute\"\n aria-label=\"Draft\"\n i18n-label=\"coreGridList.Item.Status.Draft|Button label attribute\"\n label=\"Draft\"\n fdCompact\n (click)=\"_clickOnDraft($event)\"\n ></button>\n </ng-container>\n </div>\n</ng-template>\n", styles: [".fd-grid-list .fd-dnd-item.fd-dnd-on-drag{cursor:-o-grabbing;cursor:-ms-grabbing;cursor:grabbing;background-color:transparent}.fd-grid-list .fd-dnd-item .fd-grid-list__item{overflow:visible}.fd-grid-list__item .drop-area__line--vertical{height:100%}.fd-grid-list__item .drop-area__line--vertical.before{left:-.55rem}.fd-grid-list__item .drop-area__line--vertical.after{right:-.55rem}.fd-grid-list__item .fd-checkbox__label{-webkit-user-select:none;user-select:none}\n"], components: [{ type: i2.GridListTitleBarSpacerComponent, selector: "fd-grid-list-title-bar-spacer" }, { type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { type: i4.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { type: i5.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { type: i6.ObjectStatusComponent, selector: "[fd-object-status]", inputs: ["class", "status", "glyph", "label", "glyphAriaLabel", "indicationColor", "clickable", "inverted", "large"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i8.ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { type: i9.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i9.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
299
+ GridListItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: GridListItemComponent, selector: "fd-grid-list-item", inputs: { id: "id", width: "width", layoutItemPattern: "layoutItemPattern", status: "status", counter: "counter", value: "value", disableToolbarClick: "disableToolbarClick", selected: "selected", noPadding: "noPadding", ariaLabel: "ariaLabel", ariaLabelledBy: "ariaLabelledBy", type: "type", state: "state", isNavigated: "isNavigated", title: "title", description: "description" }, outputs: { press: "press", detail: "detail", delete: "delete", navigate: "navigate", draft: "draft", locked: "locked" }, host: { properties: { "style.max-width": "this.width", "style.min-width": "this.width" } }, queries: [{ propertyName: "footerBarComponent", first: true, predicate: GridListItemFooterBarComponent, descendants: true }, { propertyName: "itemToolbarComponent", first: true, predicate: GridListItemToolbarComponent, descendants: true }, { propertyName: "body", first: true, predicate: GridListItemBodyDirective, descendants: true }], viewQueries: [{ propertyName: "_gridListItem", first: true, predicate: ["gridListItem"], descendants: true }], ngImport: i0, template: "<div\n #gridListItem\n [id]=\"id\"\n tabindex=\"0\"\n class=\"fd-grid-list__item\"\n role=\"option\"\n [class.is-navigated]=\"isNavigated\"\n [class.is-selected]=\"!!_selectedItem\"\n [class.fd-grid-list__item--link]=\"\n _isActive && (type === 'active' || type === 'detailsAndActive' || type === 'navigation')\n \"\n [class.fd-grid-list__item--unread]=\"state === 'unread'\"\n [class.fd-grid-list__item--locked]=\"state === 'locked'\"\n [class.fd-grid-list__item--draft]=\"state === 'draft'\"\n [class.fd-grid-list__item--error]=\"state === 'error'\"\n (keydown)=\"_onKeyDown($event)\"\n (click)=\"selectionMode === 'singleSelect' && _singleSelect($event); _onClick($event)\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n (mouseover)=\"_setActive($event, false)\"\n (mouseout)=\"_setActive($event, true)\"\n [attr.aria-selected]=\"selectionMode === 'none' ? null : !!_selectedItem\"\n>\n <span\n *ngIf=\"status\"\n class=\"fd-grid-list__highlight\"\n [class.fd-grid-list__highlight--positive]=\"status === 'success'\"\n [class.fd-grid-list__highlight--negative]=\"status === 'warning'\"\n [class.fd-grid-list__highlight--critical]=\"status === 'error'\"\n [class.fd-grid-list__highlight--neutral]=\"status === 'neutral'\"\n i18n-aria-label=\"coreGridList.Item.Status|Status aria-label attribute\"\n [attr.aria-label]=\"'Item has status. Status: ' + status + '.'\"\n ></span>\n\n <ng-container *ngIf=\"selectionMode === 'singleSelect'\">\n <ng-container *ngTemplateOutlet=\"radio\"></ng-container>\n </ng-container>\n\n <div\n class=\"fd-toolbar fd-grid-list__item-toolbar\"\n *ngIf=\"\n counter ||\n itemToolbarComponent?.contentTemplateRef ||\n (type && type !== 'inactive' && type !== 'active') ||\n (selectionMode !== 'none' && selectionMode !== 'singleSelect')\n \"\n >\n <ng-container *ngIf=\"selectionMode === 'singleSelectLeft'\">\n <ng-container *ngTemplateOutlet=\"radio\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"selectionMode === 'multiSelect'\">\n <ng-container *ngTemplateOutlet=\"checkbox\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"itemToolbarComponent?.contentTemplateRef\">\n <div class=\"fd-toolbar--extra-content\">\n <ng-container *ngTemplateOutlet=\"itemToolbarComponent.contentTemplateRef\"></ng-container>\n </div>\n </ng-container>\n\n <fd-grid-list-title-bar-spacer></fd-grid-list-title-bar-spacer>\n\n <span\n *ngIf=\"counter\"\n class=\"fd-grid-list__item-counter\"\n i18n-aria-label=\"@@coreGridList.Item.Counter|Count aria-label attribute\"\n [attr.aria-label]=\"'Item has ' + counter + ' children'\"\n [innerText]=\"counter\"\n ></span>\n\n <button\n *ngIf=\"type === 'detail' || type === 'detailsAndActive'\"\n fd-button\n fdType=\"transparent\"\n glyph=\"edit\"\n class=\"fd-grid-list__action-button\"\n i18n-aria-label=\"coreGridList.Item.Btn.Details|Button aria-label attribute\"\n aria-label=\"Details\"\n i18n-title=\"coreGridList.Item.Btn.Details|Button title attribute\"\n title=\"Details\"\n fdCompact\n (click)=\"_onDetail($event)\"\n ></button>\n\n <button\n *ngIf=\"selectionMode === 'delete'\"\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n class=\"fd-grid-list__action-button\"\n i18n-aria-label=\"coreGridList.Item.Btn.Delete|Button aria-label attribute\"\n aria-label=\"Delete\"\n i18n-title=\"coreGridList.Item.Btn.Delete|Button title attribute\"\n title=\"Delete\"\n fdCompact\n (click)=\"_onDelete($event)\"\n ></button>\n\n <span *ngIf=\"type === 'navigation'\" class=\"fd-grid-list__item-navigation-indicator\">\n <fd-icon glyph=\"navigation-right-arrow\"></fd-icon>\n </span>\n\n <ng-container *ngIf=\"selectionMode === 'singleSelectRight'\">\n <ng-container *ngTemplateOutlet=\"radio\"></ng-container>\n </ng-container>\n </div>\n\n <div class=\"fd-grid-list__item-body\" [class.fd-grid-list__item-body--no-padding]=\"noPadding\">\n <ng-content select=\"[fd-grid-list-item-image]\"></ng-content>\n\n <div *ngIf=\"title || description\" class=\"fd-grid-list__item-header\">\n <h4 *ngIf=\"title\" fd-title>{{ title }}</h4>\n <span *ngIf=\"description\" class=\"fd-grid-list__item-subtitle\">{{ description }}</span>\n </div>\n\n <div *ngIf=\"body?.templateRef\" class=\"fd-grid-list__item-content\">\n <ng-container [ngTemplateOutlet]=\"body.templateRef\"></ng-container>\n </div>\n\n <ng-container *ngIf=\"state || footerBarComponent?.contentTemplateRef\">\n <ng-container *ngTemplateOutlet=\"itemFooter\"></ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #radio>\n <input\n [attr.tabindex]=\"selectionMode === 'singleSelect' ? -1 : 0\"\n type=\"radio\"\n class=\"fd-radio fd-radio--compact fd-grid-list__radio-input\"\n [style.display]=\"selectionMode === 'singleSelect' ? 'none' : ''\"\n [id]=\"id + '-radio'\"\n [name]=\"'fd-grid-list-item-toolbar-' + selectionMode\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [value]=\"value\"\n [ngModel]=\"_selectedItem\"\n (ngModelChange)=\"$event && _selectionItem($event)\"\n />\n <label\n class=\"fd-radio__label fd-grid-list__radio-label\"\n [for]=\"id + '-radio'\"\n tabindex=\"-1\"\n (mouseover)=\"_setActive($event, false)\"\n (mouseout)=\"_setActive($event, true)\"\n ></label>\n</ng-template>\n\n<ng-template #checkbox>\n <input\n type=\"checkbox\"\n class=\"fd-checkbox fd-checkbox--compact fd-grid-list__checkbox-input\"\n [id]=\"id + '-checkbox'\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [ngModel]=\"_selectedItem\"\n (click)=\"_checkboxClick($event)\"\n />\n <label\n class=\"fd-checkbox__label fd-checkbox__label--compact fd-grid-list__checkbox-label\"\n [for]=\"id + '-checkbox'\"\n tabindex=\"-1\"\n ></label>\n</ng-template>\n\n<ng-template #itemFooter>\n <div class=\"fd-grid-list__item-body-actions\" *ngIf=\"footerBarComponent || state\">\n <ng-container *ngIf=\"footerBarComponent?.contentTemplateRef\">\n <ng-container *ngTemplateOutlet=\"footerBarComponent.contentTemplateRef\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!footerBarComponent?.contentTemplateRef && state\">\n <span\n *ngIf=\"state === 'error'\"\n fd-object-status\n status=\"negative\"\n i18n-label=\"coreGridList.Item.Status.ContainsErrors|Error label attribute\"\n label=\"Contains errors\"\n i18n-title=\"coreGridList.Item.Status.ContainsErrors|Error title attribute\"\n title=\"Contains errors\"\n ></span>\n\n <button\n class=\"fd-grid-list__action-button\"\n *ngIf=\"state === 'locked'\"\n fd-button\n fdType=\"transparent\"\n glyph=\"private\"\n i18n-aria-label=\"coreGridList.Item.Status.Locked|Button aria-label attribute\"\n aria-label=\"Locked\"\n i18n-label=\"coreGridList.Item.Status.Locked|Button label attribute\"\n label=\"Locked\"\n fdCompact\n (click)=\"_clickOnLocked($event)\"\n ></button>\n\n <button\n class=\"fd-grid-list__action-button\"\n *ngIf=\"state === 'draft'\"\n fd-button\n fdType=\"transparent\"\n i18n-aria-label=\"coreGridList.Item.Status.Draft|Button aria-label attribute\"\n aria-label=\"Draft\"\n i18n-label=\"coreGridList.Item.Status.Draft|Button label attribute\"\n label=\"Draft\"\n fdCompact\n (click)=\"_clickOnDraft($event)\"\n ></button>\n </ng-container>\n </div>\n</ng-template>\n", styles: [".fd-grid-list .fd-dnd-item.fd-dnd-on-drag{cursor:-o-grabbing;cursor:-ms-grabbing;cursor:grabbing;background-color:transparent}.fd-grid-list .fd-dnd-item .fd-grid-list__item{overflow:visible}.fd-grid-list__item .drop-area__line--vertical{height:100%}.fd-grid-list__item .drop-area__line--vertical.before{left:-.55rem}.fd-grid-list__item .drop-area__line--vertical.after{right:-.55rem}.fd-grid-list__item .fd-checkbox__label{-webkit-user-select:none;user-select:none}\n"], components: [{ type: i2.GridListTitleBarSpacerComponent, selector: "fd-grid-list-title-bar-spacer" }, { type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { type: i4.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { type: i5.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { type: i6.ObjectStatusComponent, selector: "[fd-object-status]", inputs: ["class", "status", "glyph", "label", "glyphAriaLabel", "indicationColor", "clickable", "inverted", "large"] }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i7.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }, { type: i8.ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { type: i9.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { type: i9.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i9.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i9.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i9.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
298
300
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: GridListItemComponent, decorators: [{
299
301
  type: Component,
300
- args: [{ selector: 'fd-grid-list-item', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div\n #gridListItem\n [id]=\"id\"\n tabindex=\"0\"\n class=\"fd-grid-list__item\"\n role=\"option\"\n [class.is-navigated]=\"isNavigated\"\n [class.is-selected]=\"!!_selectedItem\"\n [class.fd-grid-list__item--link]=\"\n _isActive && (type === 'active' || type === 'detailsAndActive' || type === 'navigation')\n \"\n [class.fd-grid-list__item--unread]=\"state === 'unread'\"\n [class.fd-grid-list__item--locked]=\"state === 'locked'\"\n [class.fd-grid-list__item--draft]=\"state === 'draft'\"\n [class.fd-grid-list__item--error]=\"state === 'error'\"\n (keydown)=\"_onKeyDown($event)\"\n (click)=\"selectionMode === 'singleSelect' && _singleSelect($event); _onClick($event)\"\n [attr.aria-label]=\"ariaLabel\"\n (mouseover)=\"_setActive($event, false)\"\n (mouseout)=\"_setActive($event, true)\"\n [attr.aria-selected]=\"selectionMode === 'none' ? null : !!_selectedItem\"\n>\n <span\n *ngIf=\"status\"\n class=\"fd-grid-list__highlight\"\n [class.fd-grid-list__highlight--positive]=\"status === 'success'\"\n [class.fd-grid-list__highlight--negative]=\"status === 'warning'\"\n [class.fd-grid-list__highlight--critical]=\"status === 'error'\"\n [class.fd-grid-list__highlight--neutral]=\"status === 'neutral'\"\n i18n-aria-label=\"coreGridList.Item.Status|Status aria-label attribute\"\n [attr.aria-label]=\"'Item has status. Status: ' + status + '.'\"\n ></span>\n\n <ng-container *ngIf=\"selectionMode === 'singleSelect'\">\n <ng-container *ngTemplateOutlet=\"radio\"></ng-container>\n </ng-container>\n\n <div\n class=\"fd-toolbar fd-grid-list__item-toolbar\"\n *ngIf=\"\n counter ||\n itemToolbarComponent?.contentTemplateRef ||\n (type && type !== 'inactive' && type !== 'active') ||\n (selectionMode !== 'none' && selectionMode !== 'singleSelect')\n \"\n >\n <ng-container *ngIf=\"selectionMode === 'singleSelectLeft'\">\n <ng-container *ngTemplateOutlet=\"radio\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"selectionMode === 'multiSelect'\">\n <ng-container *ngTemplateOutlet=\"checkbox\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"itemToolbarComponent?.contentTemplateRef\">\n <div class=\"fd-toolbar--extra-content\">\n <ng-container *ngTemplateOutlet=\"itemToolbarComponent.contentTemplateRef\"></ng-container>\n </div>\n </ng-container>\n\n <fd-grid-list-title-bar-spacer></fd-grid-list-title-bar-spacer>\n\n <span\n *ngIf=\"counter\"\n class=\"fd-grid-list__item-counter\"\n i18n-aria-label=\"@@coreGridList.Item.Counter|Count aria-label attribute\"\n [attr.aria-label]=\"'Item has ' + counter + ' children'\"\n [innerText]=\"counter\"\n ></span>\n\n <button\n *ngIf=\"type === 'detail' || type === 'detailsAndActive'\"\n fd-button\n fdType=\"transparent\"\n glyph=\"edit\"\n class=\"fd-grid-list__action-button\"\n i18n-aria-label=\"coreGridList.Item.Btn.Details|Button aria-label attribute\"\n aria-label=\"Details\"\n i18n-title=\"coreGridList.Item.Btn.Details|Button title attribute\"\n title=\"Details\"\n fdCompact\n (click)=\"_onDetail($event)\"\n ></button>\n\n <button\n *ngIf=\"selectionMode === 'delete'\"\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n class=\"fd-grid-list__action-button\"\n i18n-aria-label=\"coreGridList.Item.Btn.Delete|Button aria-label attribute\"\n aria-label=\"Delete\"\n i18n-title=\"coreGridList.Item.Btn.Delete|Button title attribute\"\n title=\"Delete\"\n fdCompact\n (click)=\"_onDelete($event)\"\n ></button>\n\n <span *ngIf=\"type === 'navigation'\" class=\"fd-grid-list__item-navigation-indicator\">\n <fd-icon glyph=\"navigation-right-arrow\"></fd-icon>\n </span>\n\n <ng-container *ngIf=\"selectionMode === 'singleSelectRight'\">\n <ng-container *ngTemplateOutlet=\"radio\"></ng-container>\n </ng-container>\n </div>\n\n <div class=\"fd-grid-list__item-body\" [class.fd-grid-list__item-body--no-padding]=\"noPadding\">\n <ng-content select=\"[fd-grid-list-item-image]\"></ng-content>\n\n <div *ngIf=\"title || description\" class=\"fd-grid-list__item-header\">\n <h4 *ngIf=\"title\" fd-title>{{ title }}</h4>\n <span *ngIf=\"description\" class=\"fd-grid-list__item-subtitle\">{{ description }}</span>\n </div>\n\n <div *ngIf=\"body?.templateRef\" class=\"fd-grid-list__item-content\">\n <ng-container [ngTemplateOutlet]=\"body.templateRef\"></ng-container>\n </div>\n\n <ng-container *ngIf=\"state || footerBarComponent?.contentTemplateRef\">\n <ng-container *ngTemplateOutlet=\"itemFooter\"></ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #radio>\n <input\n [attr.tabindex]=\"selectionMode === 'singleSelect' ? -1 : 0\"\n type=\"radio\"\n class=\"fd-radio fd-radio--compact fd-grid-list__radio-input\"\n [style.display]=\"selectionMode === 'singleSelect' ? 'none' : ''\"\n [id]=\"id + '-radio'\"\n [name]=\"'fd-grid-list-item-toolbar-' + selectionMode\"\n [attr.aria-label]=\"ariaLabel\"\n [value]=\"value\"\n [ngModel]=\"_selectedItem\"\n (ngModelChange)=\"$event && _selectionItem($event)\"\n />\n <label\n class=\"fd-radio__label fd-grid-list__radio-label\"\n [for]=\"id + '-radio'\"\n tabindex=\"-1\"\n (mouseover)=\"_setActive($event, false)\"\n (mouseout)=\"_setActive($event, true)\"\n ></label>\n</ng-template>\n\n<ng-template #checkbox>\n <input\n type=\"checkbox\"\n class=\"fd-checkbox fd-checkbox--compact fd-grid-list__checkbox-input\"\n [id]=\"id + '-checkbox'\"\n [attr.aria-label]=\"ariaLabel\"\n [ngModel]=\"_selectedItem\"\n (click)=\"_checkboxClick($event)\"\n />\n <label\n class=\"fd-checkbox__label fd-checkbox__label--compact fd-grid-list__checkbox-label\"\n [for]=\"id + '-checkbox'\"\n tabindex=\"-1\"\n ></label>\n</ng-template>\n\n<ng-template #itemFooter>\n <div class=\"fd-grid-list__item-body-actions\" *ngIf=\"footerBarComponent || state\">\n <ng-container *ngIf=\"footerBarComponent?.contentTemplateRef\">\n <ng-container *ngTemplateOutlet=\"footerBarComponent.contentTemplateRef\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!footerBarComponent?.contentTemplateRef && state\">\n <span\n *ngIf=\"state === 'error'\"\n fd-object-status\n status=\"negative\"\n i18n-label=\"coreGridList.Item.Status.ContainsErrors|Error label attribute\"\n label=\"Contains errors\"\n i18n-title=\"coreGridList.Item.Status.ContainsErrors|Error title attribute\"\n title=\"Contains errors\"\n ></span>\n\n <button\n class=\"fd-grid-list__action-button\"\n *ngIf=\"state === 'locked'\"\n fd-button\n fdType=\"transparent\"\n glyph=\"private\"\n i18n-aria-label=\"coreGridList.Item.Status.Locked|Button aria-label attribute\"\n aria-label=\"Locked\"\n i18n-label=\"coreGridList.Item.Status.Locked|Button label attribute\"\n label=\"Locked\"\n fdCompact\n (click)=\"_clickOnLocked($event)\"\n ></button>\n\n <button\n class=\"fd-grid-list__action-button\"\n *ngIf=\"state === 'draft'\"\n fd-button\n fdType=\"transparent\"\n i18n-aria-label=\"coreGridList.Item.Status.Draft|Button aria-label attribute\"\n aria-label=\"Draft\"\n i18n-label=\"coreGridList.Item.Status.Draft|Button label attribute\"\n label=\"Draft\"\n fdCompact\n (click)=\"_clickOnDraft($event)\"\n ></button>\n </ng-container>\n </div>\n</ng-template>\n", styles: [".fd-grid-list .fd-dnd-item.fd-dnd-on-drag{cursor:-o-grabbing;cursor:-ms-grabbing;cursor:grabbing;background-color:transparent}.fd-grid-list .fd-dnd-item .fd-grid-list__item{overflow:visible}.fd-grid-list__item .drop-area__line--vertical{height:100%}.fd-grid-list__item .drop-area__line--vertical.before{left:-.55rem}.fd-grid-list__item .drop-area__line--vertical.after{right:-.55rem}.fd-grid-list__item .fd-checkbox__label{-webkit-user-select:none;user-select:none}\n"] }]
302
+ args: [{ selector: 'fd-grid-list-item', changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: "<div\n #gridListItem\n [id]=\"id\"\n tabindex=\"0\"\n class=\"fd-grid-list__item\"\n role=\"option\"\n [class.is-navigated]=\"isNavigated\"\n [class.is-selected]=\"!!_selectedItem\"\n [class.fd-grid-list__item--link]=\"\n _isActive && (type === 'active' || type === 'detailsAndActive' || type === 'navigation')\n \"\n [class.fd-grid-list__item--unread]=\"state === 'unread'\"\n [class.fd-grid-list__item--locked]=\"state === 'locked'\"\n [class.fd-grid-list__item--draft]=\"state === 'draft'\"\n [class.fd-grid-list__item--error]=\"state === 'error'\"\n (keydown)=\"_onKeyDown($event)\"\n (click)=\"selectionMode === 'singleSelect' && _singleSelect($event); _onClick($event)\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n (mouseover)=\"_setActive($event, false)\"\n (mouseout)=\"_setActive($event, true)\"\n [attr.aria-selected]=\"selectionMode === 'none' ? null : !!_selectedItem\"\n>\n <span\n *ngIf=\"status\"\n class=\"fd-grid-list__highlight\"\n [class.fd-grid-list__highlight--positive]=\"status === 'success'\"\n [class.fd-grid-list__highlight--negative]=\"status === 'warning'\"\n [class.fd-grid-list__highlight--critical]=\"status === 'error'\"\n [class.fd-grid-list__highlight--neutral]=\"status === 'neutral'\"\n i18n-aria-label=\"coreGridList.Item.Status|Status aria-label attribute\"\n [attr.aria-label]=\"'Item has status. Status: ' + status + '.'\"\n ></span>\n\n <ng-container *ngIf=\"selectionMode === 'singleSelect'\">\n <ng-container *ngTemplateOutlet=\"radio\"></ng-container>\n </ng-container>\n\n <div\n class=\"fd-toolbar fd-grid-list__item-toolbar\"\n *ngIf=\"\n counter ||\n itemToolbarComponent?.contentTemplateRef ||\n (type && type !== 'inactive' && type !== 'active') ||\n (selectionMode !== 'none' && selectionMode !== 'singleSelect')\n \"\n >\n <ng-container *ngIf=\"selectionMode === 'singleSelectLeft'\">\n <ng-container *ngTemplateOutlet=\"radio\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"selectionMode === 'multiSelect'\">\n <ng-container *ngTemplateOutlet=\"checkbox\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"itemToolbarComponent?.contentTemplateRef\">\n <div class=\"fd-toolbar--extra-content\">\n <ng-container *ngTemplateOutlet=\"itemToolbarComponent.contentTemplateRef\"></ng-container>\n </div>\n </ng-container>\n\n <fd-grid-list-title-bar-spacer></fd-grid-list-title-bar-spacer>\n\n <span\n *ngIf=\"counter\"\n class=\"fd-grid-list__item-counter\"\n i18n-aria-label=\"@@coreGridList.Item.Counter|Count aria-label attribute\"\n [attr.aria-label]=\"'Item has ' + counter + ' children'\"\n [innerText]=\"counter\"\n ></span>\n\n <button\n *ngIf=\"type === 'detail' || type === 'detailsAndActive'\"\n fd-button\n fdType=\"transparent\"\n glyph=\"edit\"\n class=\"fd-grid-list__action-button\"\n i18n-aria-label=\"coreGridList.Item.Btn.Details|Button aria-label attribute\"\n aria-label=\"Details\"\n i18n-title=\"coreGridList.Item.Btn.Details|Button title attribute\"\n title=\"Details\"\n fdCompact\n (click)=\"_onDetail($event)\"\n ></button>\n\n <button\n *ngIf=\"selectionMode === 'delete'\"\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n class=\"fd-grid-list__action-button\"\n i18n-aria-label=\"coreGridList.Item.Btn.Delete|Button aria-label attribute\"\n aria-label=\"Delete\"\n i18n-title=\"coreGridList.Item.Btn.Delete|Button title attribute\"\n title=\"Delete\"\n fdCompact\n (click)=\"_onDelete($event)\"\n ></button>\n\n <span *ngIf=\"type === 'navigation'\" class=\"fd-grid-list__item-navigation-indicator\">\n <fd-icon glyph=\"navigation-right-arrow\"></fd-icon>\n </span>\n\n <ng-container *ngIf=\"selectionMode === 'singleSelectRight'\">\n <ng-container *ngTemplateOutlet=\"radio\"></ng-container>\n </ng-container>\n </div>\n\n <div class=\"fd-grid-list__item-body\" [class.fd-grid-list__item-body--no-padding]=\"noPadding\">\n <ng-content select=\"[fd-grid-list-item-image]\"></ng-content>\n\n <div *ngIf=\"title || description\" class=\"fd-grid-list__item-header\">\n <h4 *ngIf=\"title\" fd-title>{{ title }}</h4>\n <span *ngIf=\"description\" class=\"fd-grid-list__item-subtitle\">{{ description }}</span>\n </div>\n\n <div *ngIf=\"body?.templateRef\" class=\"fd-grid-list__item-content\">\n <ng-container [ngTemplateOutlet]=\"body.templateRef\"></ng-container>\n </div>\n\n <ng-container *ngIf=\"state || footerBarComponent?.contentTemplateRef\">\n <ng-container *ngTemplateOutlet=\"itemFooter\"></ng-container>\n </ng-container>\n </div>\n</div>\n\n<ng-template #radio>\n <input\n [attr.tabindex]=\"selectionMode === 'singleSelect' ? -1 : 0\"\n type=\"radio\"\n class=\"fd-radio fd-radio--compact fd-grid-list__radio-input\"\n [style.display]=\"selectionMode === 'singleSelect' ? 'none' : ''\"\n [id]=\"id + '-radio'\"\n [name]=\"'fd-grid-list-item-toolbar-' + selectionMode\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [value]=\"value\"\n [ngModel]=\"_selectedItem\"\n (ngModelChange)=\"$event && _selectionItem($event)\"\n />\n <label\n class=\"fd-radio__label fd-grid-list__radio-label\"\n [for]=\"id + '-radio'\"\n tabindex=\"-1\"\n (mouseover)=\"_setActive($event, false)\"\n (mouseout)=\"_setActive($event, true)\"\n ></label>\n</ng-template>\n\n<ng-template #checkbox>\n <input\n type=\"checkbox\"\n class=\"fd-checkbox fd-checkbox--compact fd-grid-list__checkbox-input\"\n [id]=\"id + '-checkbox'\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [ngModel]=\"_selectedItem\"\n (click)=\"_checkboxClick($event)\"\n />\n <label\n class=\"fd-checkbox__label fd-checkbox__label--compact fd-grid-list__checkbox-label\"\n [for]=\"id + '-checkbox'\"\n tabindex=\"-1\"\n ></label>\n</ng-template>\n\n<ng-template #itemFooter>\n <div class=\"fd-grid-list__item-body-actions\" *ngIf=\"footerBarComponent || state\">\n <ng-container *ngIf=\"footerBarComponent?.contentTemplateRef\">\n <ng-container *ngTemplateOutlet=\"footerBarComponent.contentTemplateRef\"></ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!footerBarComponent?.contentTemplateRef && state\">\n <span\n *ngIf=\"state === 'error'\"\n fd-object-status\n status=\"negative\"\n i18n-label=\"coreGridList.Item.Status.ContainsErrors|Error label attribute\"\n label=\"Contains errors\"\n i18n-title=\"coreGridList.Item.Status.ContainsErrors|Error title attribute\"\n title=\"Contains errors\"\n ></span>\n\n <button\n class=\"fd-grid-list__action-button\"\n *ngIf=\"state === 'locked'\"\n fd-button\n fdType=\"transparent\"\n glyph=\"private\"\n i18n-aria-label=\"coreGridList.Item.Status.Locked|Button aria-label attribute\"\n aria-label=\"Locked\"\n i18n-label=\"coreGridList.Item.Status.Locked|Button label attribute\"\n label=\"Locked\"\n fdCompact\n (click)=\"_clickOnLocked($event)\"\n ></button>\n\n <button\n class=\"fd-grid-list__action-button\"\n *ngIf=\"state === 'draft'\"\n fd-button\n fdType=\"transparent\"\n i18n-aria-label=\"coreGridList.Item.Status.Draft|Button aria-label attribute\"\n aria-label=\"Draft\"\n i18n-label=\"coreGridList.Item.Status.Draft|Button label attribute\"\n label=\"Draft\"\n fdCompact\n (click)=\"_clickOnDraft($event)\"\n ></button>\n </ng-container>\n </div>\n</ng-template>\n", styles: [".fd-grid-list .fd-dnd-item.fd-dnd-on-drag{cursor:-o-grabbing;cursor:-ms-grabbing;cursor:grabbing;background-color:transparent}.fd-grid-list .fd-dnd-item .fd-grid-list__item{overflow:visible}.fd-grid-list__item .drop-area__line--vertical{height:100%}.fd-grid-list__item .drop-area__line--vertical.before{left:-.55rem}.fd-grid-list__item .drop-area__line--vertical.after{right:-.55rem}.fd-grid-list__item .fd-checkbox__label{-webkit-user-select:none;user-select:none}\n"] }]
301
303
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.GridList }]; }, propDecorators: { id: [{
302
304
  type: Input
303
305
  }], width: [{
@@ -324,6 +326,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImpor
324
326
  type: Input
325
327
  }], ariaLabel: [{
326
328
  type: Input
329
+ }], ariaLabelledBy: [{
330
+ type: Input
327
331
  }], type: [{
328
332
  type: Input
329
333
  }], state: [{
@@ -359,4 +363,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImpor
359
363
  type: ContentChild,
360
364
  args: [GridListItemBodyDirective]
361
365
  }] } });
362
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1saXN0LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZ3JpZC1saXN0L2NvbXBvbmVudHMvZ3JpZC1saXN0LWl0ZW0vZ3JpZC1saXN0LWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZ3JpZC1saXN0L2NvbXBvbmVudHMvZ3JpZC1saXN0LWl0ZW0vZ3JpZC1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHdEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDM0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDMUcsT0FBTyxFQUF5Qix3QkFBd0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzFHLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7Ozs7Ozs7QUFFOUQsSUFBSSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFrQjdCLE1BQU0sT0FBTyxxQkFBcUI7SUEwTjlCLFlBQ3FCLEdBQXNCLEVBQ3RCLFdBQXVCLEVBQ3ZCLE9BQWtCLEVBQ2xCLFNBQXNCO1FBSHRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ3RCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBQ3ZCLFlBQU8sR0FBUCxPQUFPLENBQVc7UUFDbEIsY0FBUyxHQUFULFNBQVMsQ0FBYTtRQTdOM0MseUJBQXlCO1FBRXpCLE9BQUUsR0FBRyxxQkFBcUIsb0JBQW9CLEVBQUUsRUFBRSxDQUFDO1FBbUNuRCxzREFBc0Q7UUFFdEQsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBWTVCLGNBQWM7UUFDTixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBRTFCLDRDQUE0QztRQUU1QyxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBd0JsQixjQUFjO1FBQ04sVUFBSyxHQUFxQixVQUFVLENBQUM7UUFTN0M7OztXQUdHO1FBRUgsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFVcEI7OztXQUdHO1FBRUgsVUFBSyxHQUFHLElBQUksWUFBWSxFQUE4QixDQUFDO1FBRXZEOzs7V0FHRztRQUVILFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBOEIsQ0FBQztRQUV4RDs7O1dBR0c7UUFFSCxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQThCLENBQUM7UUFFeEQ7OztXQUdHO1FBRUgsYUFBUSxHQUFHLElBQUksWUFBWSxFQUE4QixDQUFDO1FBRTFEOzs7V0FHRztRQUVILFVBQUssR0FBRyxJQUFJLFlBQVksRUFBOEIsQ0FBQztRQUV2RDs7O1dBR0c7UUFFSCxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQThCLENBQUM7UUFNeEQ7OztXQUdHO1FBQ0gsY0FBUyxHQUFHLElBQUksQ0FBQztRQXdEakIsY0FBYztRQUNOLHVCQUFrQixHQUFhLEVBQUUsQ0FBQztRQUUxQyxjQUFjO1FBQ0csaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBUS9DLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDeEUsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN6RSxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBMU5EOzs7T0FHRztJQUNILElBQ0ksaUJBQWlCLENBQUMsS0FBdUI7UUFDekMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDM0UsQ0FBQztJQXdCRCxxREFBcUQ7SUFDckQsSUFDSSxRQUFRLENBQUMsS0FBd0I7UUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFhRDs7Ozs7Ozs7O09BU0c7SUFDSCxJQUNJLElBQUksQ0FBQyxLQUFpQztRQUN0QyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssSUFBSSxVQUFVLENBQUM7SUFDckMsQ0FBQztJQUNELElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBK0VELGNBQWM7SUFDZCxJQUFJLGlCQUFpQjtRQUNqQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztJQUNuQyxDQUFDO0lBRUQsSUFBSSxpQkFBaUIsQ0FBQyxLQUFlO1FBQ2pDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBaUJELGNBQWM7SUFDZCxJQUFJLGFBQWE7UUFDYixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUVELGNBQWM7SUFDZCxJQUFJLGFBQWEsQ0FBQyxJQUF1QztRQUNyRCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUUzQixJQUFJLElBQUksS0FBSyxRQUFRLElBQUksSUFBSSxLQUFLLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDckQsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO1NBQ2xFO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLEVBQUU7WUFDcEQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWEsS0FBSyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDO1lBRTFGLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztTQUNuRTtRQUVELElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQTJCRCxjQUFjO0lBQ2QsZUFBZTtRQUNYLElBQUksQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVELGNBQWM7SUFDZCxXQUFXO1FBQ1AsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsNENBQTRDO0lBQzVDLEtBQUs7UUFDRCxJQUFJLENBQUMsYUFBYSxFQUFFLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUM5QyxDQUFDO0lBRUQsY0FBYztJQUNkLFVBQVUsQ0FBQyxLQUFpQixFQUFFLFFBQWlCO1FBQzNDLElBQUksSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BDLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO0lBQzlCLENBQUM7SUFFRCxjQUFjO0lBQ2QsYUFBYSxDQUFDLEtBQVk7UUFDdEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1QixJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxXQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO1lBQ2pGLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxjQUFjO0lBQ2QsY0FBYyxDQUFDLEtBQWlCO1FBQzVCLE1BQU0sT0FBTyxHQUFzQixLQUFLLENBQUMsTUFBTyxDQUFDLE9BQU8sQ0FBQztRQUN6RCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQsY0FBYztJQUNkLGNBQWMsQ0FBQyxLQUEyQixFQUFFLEtBQWtCO1FBQzFELElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO1lBQ3BDLE9BQU87U0FDVjtRQUNELE1BQU0sTUFBTSxHQUNSLElBQUksQ0FBQyxhQUFhLEtBQUssYUFBYTtZQUNoQyxDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQyxLQUFLLElBQUksS0FBSyxLQUFLLENBQUM7Z0JBQ3RCLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHO2dCQUM5QixDQUFDLENBQUMsd0JBQXdCLENBQUMsTUFBTSxDQUFDO1FBRTFDLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDM0UsQ0FBQztJQUVELGNBQWM7SUFDZCxTQUFTLENBQUMsS0FBaUI7UUFDdkIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1QixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVcsQ0FBQyxLQUFpQjtRQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQy9DLENBQUM7SUFFRCxjQUFjO0lBQ2QsU0FBUyxDQUFDLEtBQWlCO1FBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFNUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVELGNBQWM7SUFDZCxhQUFhLENBQUMsS0FBaUI7UUFDM0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUU1QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsY0FBYztJQUNkLGNBQWMsQ0FBQyxLQUFpQjtRQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFFRCxjQUFjO0lBQ2QsUUFBUSxDQUFDLEtBQWlCO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDckMsT0FBTztTQUNWO1FBRUQsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxJQUFJLENBQUMsSUFBSSxLQUFLLGtCQUFrQixJQUFJLElBQUksQ0FBQyxJQUFJLEtBQUssWUFBWSxFQUFFO1lBQzFGLE9BQU87U0FDVjtRQUVELElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxZQUFZLEVBQUU7WUFDNUIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QixPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsY0FBYztJQUNkLFVBQVUsQ0FBQyxLQUFvQjtRQUMzQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBd0IsQ0FBQztRQUU5QyxJQUNJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDekMsSUFBSSxDQUFDLGFBQWEsS0FBSyxNQUFNO1lBQzdCLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsRUFDbEQ7WUFDRSxPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTVCLElBQUksSUFBSSxDQUFDLGFBQWEsS0FBSyxhQUFhLEVBQUU7WUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUV6QyxPQUFPO1NBQ1Y7UUFFRCxJQUFJLE9BQU8sSUFBSSxDQUFDLGFBQWEsS0FBSyxXQUFXLEVBQUU7WUFDM0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM3QjtJQUNMLENBQUM7SUFFRCxjQUFjO0lBQ04sc0JBQXNCLENBQUMsS0FBaUI7UUFDNUMsSUFBSSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDaEIsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsTUFBcUIsQ0FBQztRQUM1QyxNQUFNLEVBQUUsU0FBUyxFQUFFLEdBQUcsT0FBTyxDQUFDO1FBRTlCLE9BQU8sQ0FDSCxDQUFDLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztZQUM5RCxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsNkJBQTZCLENBQUM7WUFDbEQsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDO1lBQ2hELENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQywyQkFBMkIsQ0FBQztZQUNoRCxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsOEJBQThCLENBQUM7WUFDbkQsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLDhCQUE4QixDQUFDLENBQ3RELENBQUM7SUFDTixDQUFDO0lBRUQsY0FBYztJQUNOLGlCQUFpQixDQUFDLE9BQW9CO1FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLEVBQUU7WUFDNUIsT0FBTyxLQUFLLENBQUM7U0FDaEI7UUFFRCxPQUFPLE9BQU8sQ0FBQyxhQUFhLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsb0JBQW9CLENBQUMsRUFBRTtZQUM3RixJQUFJLE9BQU8sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLDJCQUEyQixDQUFDLEVBQUU7Z0JBQ3pELE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFFRCxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztTQUNuQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxjQUFjO0lBQ04sZUFBZSxDQUFDLEtBQVk7UUFDaEMsS0FBSyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLEtBQUssQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM1QixDQUFDO0lBRUQsY0FBYztJQUNkLElBQVksaUJBQWlCO1FBQ3pCLE9BQU87WUFDSCxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNO1NBQ3JCLENBQUM7SUFDTixDQUFDO0lBRUQsY0FBYztJQUNOLGdCQUFnQixDQUFDLFlBQXNCO1FBQzNDLEtBQUssTUFBTSxTQUFTLElBQUksWUFBWSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1NBQ3BFO0lBQ0wsQ0FBQztJQUVELGNBQWM7SUFDTixtQkFBbUIsQ0FBQyxZQUFzQjtRQUM5QyxLQUFLLE1BQU0sU0FBUyxJQUFJLFlBQVksRUFBRTtZQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN2RTtJQUNMLENBQUM7O2tIQTNhUSxxQkFBcUI7c0dBQXJCLHFCQUFxQiwwcEJBMEtoQiw4QkFBOEIsdUZBSTlCLDRCQUE0Qix1RUFJNUIseUJBQXlCLCtKQ2xPM0MsODVRQWlOQTsyRkRqS2EscUJBQXFCO2tCQVBqQyxTQUFTOytCQUNJLG1CQUFtQixtQkFHWix1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJO2dMQUtyQyxFQUFFO3NCQURELEtBQUs7Z0JBT04sS0FBSztzQkFISixLQUFLOztzQkFDTCxXQUFXO3VCQUFDLGlCQUFpQjs7c0JBQzdCLFdBQVc7dUJBQUMsaUJBQWlCO2dCQVExQixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBVU4sTUFBTTtzQkFETCxLQUFLO2dCQUtOLE9BQU87c0JBRE4sS0FBSztnQkFRTixLQUFLO3NCQURKLEtBQUs7Z0JBS04sbUJBQW1CO3NCQURsQixLQUFLO2dCQUtGLFFBQVE7c0JBRFgsS0FBSztnQkFjTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sU0FBUztzQkFEUixLQUFLO2dCQWNGLElBQUk7c0JBRFAsS0FBSztnQkFnQk4sS0FBSztzQkFESixLQUFLO2dCQVFOLFdBQVc7c0JBRFYsS0FBSztnQkFLTixLQUFLO3NCQURKLEtBQUs7Z0JBS04sV0FBVztzQkFEVixLQUFLO2dCQVFOLEtBQUs7c0JBREosTUFBTTtnQkFRUCxNQUFNO3NCQURMLE1BQU07Z0JBUVAsTUFBTTtzQkFETCxNQUFNO2dCQVFQLFFBQVE7c0JBRFAsTUFBTTtnQkFRUCxLQUFLO3NCQURKLE1BQU07Z0JBUVAsTUFBTTtzQkFETCxNQUFNO2dCQUtQLGFBQWE7c0JBRFosU0FBUzt1QkFBQyxjQUFjO2dCQXNCekIsa0JBQWtCO3NCQURqQixZQUFZO3VCQUFDLDhCQUE4QjtnQkFLNUMsb0JBQW9CO3NCQURuQixZQUFZO3VCQUFDLDRCQUE0QjtnQkFLMUMsSUFBSTtzQkFESCxZQUFZO3VCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQWZ0ZXJWaWV3SW5pdCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgQ29udGVudENoaWxkLFxuICAgIEVsZW1lbnRSZWYsXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIE9uRGVzdHJveSxcbiAgICBPdXRwdXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRU5URVIsIFNQQUNFIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcblxuaW1wb3J0IHsgS2V5VXRpbCB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS91dGlscyc7XG5pbXBvcnQgeyBOdWxsYWJsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9zaGFyZWQnO1xuXG5pbXBvcnQgeyBHcmlkTGlzdEl0ZW1Cb2R5RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9ncmlkLWxpc3QtaXRlbS1ib2R5LmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBwYXJzZUxheW91dFBhdHRlcm4gfSBmcm9tICcuLi8uLi9oZWxwZXJzL3BhcnNlLWxheW91dC1wYXR0ZXJuJztcbmltcG9ydCB7IEdyaWRMaXN0SXRlbVRvb2xiYXJDb21wb25lbnQgfSBmcm9tICcuLi9ncmlkLWxpc3QtaXRlbS10b29sYmFyL2dyaWQtbGlzdC1pdGVtLXRvb2xiYXIuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRMaXN0U2VsZWN0aW9uTW9kZSwgR3JpZExpc3RTZWxlY3Rpb25BY3Rpb25zIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyaWQtbGlzdC1zZWxlY3Rpb24ubW9kZWxzJztcbmltcG9ydCB7IEdyaWRMaXN0SXRlbUZvb3RlckJhckNvbXBvbmVudCB9IGZyb20gJy4uL2dyaWQtbGlzdC1pdGVtLWZvb3Rlci1iYXIvZ3JpZC1saXN0LWl0ZW0tZm9vdGVyLWJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgR3JpZExpc3QgfSBmcm9tICcuLy4uL2dyaWQtbGlzdC9ncmlkLWxpc3QtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJztcblxubGV0IGdyaWRMaXN0SXRlbVVuaXF1ZUlkID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBHcmlkTGlzdEl0ZW1PdXRwdXRFdmVudDxUPiB7XG4gICAgaW5kZXg/OiBudW1iZXI7XG4gICAgdmFsdWU/OiBUO1xufVxuXG5leHBvcnQgdHlwZSBHcmlkTGlzdEl0ZW1UeXBlID0gJ2luYWN0aXZlJyB8ICdhY3RpdmUnIHwgJ2RldGFpbCcgfCAnZGV0YWlsc0FuZEFjdGl2ZScgfCAnbmF2aWdhdGlvbic7XG5leHBvcnQgdHlwZSBHcmlkTGlzdEl0ZW1TdGF0ZSA9ICd1bnJlYWQnIHwgJ2xvY2tlZCcgfCAnZXJyb3InIHwgJ2RyYWZ0JztcbmV4cG9ydCB0eXBlIEdyaWRMaXN0SXRlbVN0YXR1cyA9ICdzdWNjZXNzJyB8ICd3YXJuaW5nJyB8ICdlcnJvcicgfCAnbmV1dHJhbCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnZmQtZ3JpZC1saXN0LWl0ZW0nLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9ncmlkLWxpc3QtaXRlbS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vZ3JpZC1saXN0LWl0ZW0uY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXG59KVxuZXhwb3J0IGNsYXNzIEdyaWRMaXN0SXRlbUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XG4gICAgLyoqIGlkIGZvciB0aGUgRWxlbWVudCAqL1xuICAgIEBJbnB1dCgpXG4gICAgaWQgPSBgZmQtZ3JpZC1saXN0LWl0ZW0tJHtncmlkTGlzdEl0ZW1VbmlxdWVJZCsrfWA7XG5cbiAgICAvKiogd2lkdGggb2YgdGhlIGVsZW1lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnc3R5bGUubWF4LXdpZHRoJylcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLm1pbi13aWR0aCcpXG4gICAgd2lkdGg6IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIHNwZWNpZnkgdGhlIGNlbGwgbGF5b3V0IGluIHRoZSBmb3JtYXQgYFhMbi1Mbi1Nbi1TbmAgd2hlcmUgbiBpc1xuICAgICAqIHRoZSBudW1iZXIgb2Ygb2NjdXBpZWQgY29sdW1ucyBhbmQgbiBjYW4gYmUgZGlmZmVyZW50IGZvciBlYWNoIHNpemUuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzZXQgbGF5b3V0SXRlbVBhdHRlcm4odmFsdWU6IE51bGxhYmxlPHN0cmluZz4pIHtcbiAgICAgICAgdGhpcy5ncmlkTGF5b3V0Q2xhc3NlcyA9IHZhbHVlID8gcGFyc2VMYXlvdXRQYXR0ZXJuKHZhbHVlLCBmYWxzZSkgOiBbXTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZWZpbmVzIHRoZSBzdGF0dXMgb2YgR3JpZCBMaXN0IEl0ZW1cbiAgICAgKiAoU3RhdHVzZXM6IHN1Y2Nlc3MgfCB3YXJuaW5nIHwgZXJyb3IgfCBuZXV0cmFsKVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc3RhdHVzPzogR3JpZExpc3RJdGVtU3RhdHVzO1xuXG4gICAgLyoqIFNldHMgbnVtYmVyIG9mIHN1YiBpdGVtcyAqL1xuICAgIEBJbnB1dCgpXG4gICAgY291bnRlcjogTnVsbGFibGU8bnVtYmVyPjtcblxuICAgIC8qKlxuICAgICAqIFZhbHVlIGZpZWxkIHN0b3JlcyBpbmZvcm1hdGlvbiBmb3IgcmFkaW8gYnV0dG9uIHZhbHVlLCBjaGVja2JveCBidXR0b24gYW5kIGZvciBHcmlkTGlzdFNlbGVjdGlvbkV2ZW50XG4gICAgICogVGhlIGZpZWxkIGlzIG1hbmRhdG9yeSBmb3IgbW9kZXMgbGlrZSBzaW5nbGVTZWxlY3QsIHNpbmdsZVNlbGVjdExlZnQsIHNpbmdsZVNlbGVjdFJpZ2h0IG9yIG11bHRpU2VsZWN0XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICB2YWx1ZT86IFQ7XG5cbiAgICAvKiogV2hldGhlciBjbGljayBvbiB0aGUgY3VzdG9tIHRvb2xiYXIgaXMgZGlzYWJsZWQgKi9cbiAgICBASW5wdXQoKVxuICAgIGRpc2FibGVUb29sYmFyQ2xpY2sgPSBmYWxzZTtcblxuICAgIC8qKiBBbGxvd3MgYW4gaXRlbSB0byBiZSBzZWxlY3RlZCBwcm9ncmFtbWF0aWNhbGx5ICovXG4gICAgQElucHV0KClcbiAgICBzZXQgc2VsZWN0ZWQodmFsdWU6IE51bGxhYmxlPGJvb2xlYW4+KSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHZhbHVlKTtcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZDtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX3NlbGVjdGVkID0gZmFsc2U7XG5cbiAgICAvKiogUmVtb3ZlIHRoZSBwYWRkaW5nIGZyb20gdGhlIEl0ZW0gYm9keSAqL1xuICAgIEBJbnB1dCgpXG4gICAgbm9QYWRkaW5nID0gZmFsc2U7XG5cbiAgICAvKiogU2V0cyB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZSB0byB0aGUgZWxlbWVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbDogTnVsbGFibGU8c3RyaW5nPjtcblxuICAgIC8qKlxuICAgICAqIERlZmluZXMgdGhlIHR5cGUgb2YgR3JpZCBMaXN0IEl0ZW1cbiAgICAgKiBUeXBlczpcbiAgICAgKiAtIGFjdGl2ZTogaW5kaWNhdGVzIHRoYXQgdGhlIGl0ZW0gaXMgY2xpY2thYmxlIHZpYSBhY3RpdmUgZmVlZGJhY2sgd2hlbiBpdGVtIGlzIHByZXNzZWRcbiAgICAgKiAtIGRldGFpbDogZW5hYmxlcyBkZXRhaWwgYnV0dG9uIG9mIHRoZSBsaXN0IGl0ZW0gdGhhdCBmaXJlcyBldmVudC5cbiAgICAgKiAtIGRldGFpbHNBbmRBY3RpdmU6IGVuYWJsZXMgXCJkZXRhaWxcIiBhbmQgXCJhY3RpdmVcIiBlbnVtZXJhdGlvbnMgdG9nZXRoZXJcbiAgICAgKiAtIGluYWN0aXZlOiBpbmRpY2F0ZXMgdGhlIGxpc3QgaXRlbSBkb2VzIG5vdCBoYXZlIGFueSBhY3RpdmUgZmVlZGJhY2sgd2hlbiBpdGVtIGlzIHByZXNzZWRcbiAgICAgKiAtIG5hdmlnYXRpb246IGluZGljYXRlcyB0aGUgbGlzdCBpdGVtIGlzIG5hdmlnYWJsZSB0byBzaG93IGV4dHJhIGluZm9ybWF0aW9uIGFib3V0IHRoZSBpdGVtXG4gICAgICogRGVmYXVsdDogaW5hY3RpdmVcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCB0eXBlKHZhbHVlOiBOdWxsYWJsZTxHcmlkTGlzdEl0ZW1UeXBlPikge1xuICAgICAgICB0aGlzLl90eXBlID0gdmFsdWUgPz8gJ2luYWN0aXZlJztcbiAgICB9XG4gICAgZ2V0IHR5cGUoKTogR3JpZExpc3RJdGVtVHlwZSB7XG4gICAgICAgIHJldHVybiB0aGlzLl90eXBlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfdHlwZTogR3JpZExpc3RJdGVtVHlwZSA9ICdpbmFjdGl2ZSc7XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGF0ZSBvZiBHcmlkIExpc3QgSXRlbVxuICAgICAqIChTdGF0ZXM6IHVucmVhZCB8IGVycm9yIHwgbG9ja2VkIHwgZHJhZnQpXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBzdGF0ZT86IEdyaWRMaXN0SXRlbVN0YXRlO1xuXG4gICAgLyoqXG4gICAgICogVGhlIG5hdmlnYXRlZCBzdGF0ZSBvZiB0aGUgbGlzdCBpdGVtLlxuICAgICAqIElmIHNldCB0byB0cnVlLCBhIG5hdmlnYXRpb24gaW5kaWNhdG9yIGlzIGRpc3BsYXllZCBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0IGl0ZW0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBpc05hdmlnYXRlZCA9IGZhbHNlO1xuXG4gICAgLyoqIFRpdGxlIG9mIHRoZSBpdGVtICovXG4gICAgQElucHV0KClcbiAgICB0aXRsZTogc3RyaW5nO1xuXG4gICAgLyoqIERlc2NyaXB0aW9uIG9mIHRoZSBpdGVtICovXG4gICAgQElucHV0KClcbiAgICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaXMgdGhyb3duLCB3aGVuIHR5cGUgaXMgYWN0aXZlXG4gICAgICogYW5kIGl0ZW0gaXMgcHJlc3NlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHByZXNzID0gbmV3IEV2ZW50RW1pdHRlcjxHcmlkTGlzdEl0ZW1PdXRwdXRFdmVudDxUPj4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGlzIHRocm93biwgd2hlbiB0eXBlIGlzIGRldGFpbCBvciBkZXRhaWxzQW5kQWN0aXZlXG4gICAgICogYW5kIERldGFpbCBidXR0b24gd2FzIHByZXNzZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBkZXRhaWwgPSBuZXcgRXZlbnRFbWl0dGVyPEdyaWRMaXN0SXRlbU91dHB1dEV2ZW50PFQ+PigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaXMgdGhyb3duLCB3aGVuIG1vZGUgZGVsZXRlXG4gICAgICogYW5kIERlbGV0ZSBidXR0b24gd2FzIHByZXNzZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBkZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPEdyaWRMaXN0SXRlbU91dHB1dEV2ZW50PFQ+PigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaXMgdGhyb3duLCB3aGVuIHR5cGUgaXMgbmF2aWdhdGlvblxuICAgICAqIGFuZCBOYXZpZ2F0ZSBidXR0b24gd2FzIHByZXNzZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBuYXZpZ2F0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8R3JpZExpc3RJdGVtT3V0cHV0RXZlbnQ8VD4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBpcyB0aHJvd24sIHdoZW4gc3RhdGUgaXMgZXJyb3IsIG5vdCB1c2VkIEdyaWRMaXN0SXRlbUZvb3RlckJhckNvbXBvbmVudFxuICAgICAqIGFuZCBEcmFmdCBidXR0b24gd2FzIHByZXNzZWRcbiAgICAgKi9cbiAgICBAT3V0cHV0KClcbiAgICBkcmFmdCA9IG5ldyBFdmVudEVtaXR0ZXI8R3JpZExpc3RJdGVtT3V0cHV0RXZlbnQ8VD4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBpcyB0aHJvd24sIHdoZW4gc3RhdGUgaXMgbG9ja2VkLCBub3QgdXNlZCBHcmlkTGlzdEl0ZW1Gb290ZXJCYXJDb21wb25lbnRcbiAgICAgKiBhbmQgTG9ja2VkIGJ1dHRvbiB3YXMgcHJlc3NlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGxvY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8R3JpZExpc3RJdGVtT3V0cHV0RXZlbnQ8VD4+KCk7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBWaWV3Q2hpbGQoJ2dyaWRMaXN0SXRlbScpXG4gICAgX2dyaWRMaXN0SXRlbTogRWxlbWVudFJlZjtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogVGhlIGFjdGl2ZSBzdGF0ZSBvZiB0aGUgbGlzdCBpdGVtLlxuICAgICAqIElmIHNldCB0byB0cnVlLCB0aGUgd2hvbGUgY2FyZCBoYXMgYWN0aXZlIHN0YXRlLiBCZWNvbWVzIGZhbHNlIG9ubHkgd2hlbiB0aGUgRWRpdCBidXR0b24gaXMgY2xpY2tlZC5cbiAgICAgKi9cbiAgICBfaXNBY3RpdmUgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgZ3JpZExheW91dENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JpZExheW91dENsYXNzZXM7XG4gICAgfVxuXG4gICAgc2V0IGdyaWRMYXlvdXRDbGFzc2VzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgICAgICB0aGlzLl9yZW1vdmVDbGFzc2VzTmFtZXModGhpcy5fZ3JpZExheW91dENsYXNzZXMpO1xuICAgICAgICB0aGlzLl9ncmlkTGF5b3V0Q2xhc3NlcyA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9hZGRDbGFzc2VzTmFtZXModGhpcy5fZ3JpZExheW91dENsYXNzZXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChHcmlkTGlzdEl0ZW1Gb290ZXJCYXJDb21wb25lbnQpXG4gICAgZm9vdGVyQmFyQ29tcG9uZW50OiBHcmlkTGlzdEl0ZW1Gb290ZXJCYXJDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoR3JpZExpc3RJdGVtVG9vbGJhckNvbXBvbmVudClcbiAgICBpdGVtVG9vbGJhckNvbXBvbmVudDogR3JpZExpc3RJdGVtVG9vbGJhckNvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChHcmlkTGlzdEl0ZW1Cb2R5RGlyZWN0aXZlKVxuICAgIGJvZHk6IEdyaWRMaXN0SXRlbUJvZHlEaXJlY3RpdmU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3RlZEl0ZW0/OiBUO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgc2VsZWN0aW9uTW9kZSgpOiBHcmlkTGlzdFNlbGVjdGlvbk1vZGUgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldCBzZWxlY3Rpb25Nb2RlKG1vZGU6IEdyaWRMaXN0U2VsZWN0aW9uTW9kZSB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlID0gbW9kZTtcblxuICAgICAgICBpZiAobW9kZSAhPT0gJ2RlbGV0ZScgJiYgbW9kZSAhPT0gJ25vbmUnICYmICF0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyaWQgTGlzdCBJdGVtIG11c3QgaGF2ZSBbdmFsdWVdIGF0dHJpYnV0ZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkICYmIHRoaXMudmFsdWUgJiYgdGhpcy5faW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnbXVsdGlTZWxlY3QnID8gbnVsbCA6IEdyaWRMaXN0U2VsZWN0aW9uQWN0aW9ucy5BREQ7XG5cbiAgICAgICAgICAgIHRoaXMuX2dyaWRMaXN0LnNldFNlbGVjdGVkSXRlbSh0aGlzLnZhbHVlLCB0aGlzLl9pbmRleCwgYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pbmRleD86IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uTW9kZT86IEdyaWRMaXN0U2VsZWN0aW9uTW9kZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ3JpZExheW91dENsYXNzZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2dyaWRMaXN0OiBHcmlkTGlzdDxUPlxuICAgICkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zU3ViID0gdGhpcy5fZ3JpZExpc3QuX3NlbGVjdGVkSXRlbXMkLnN1YnNjcmliZSgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbSA9IGl0ZW1zLnNlbGVjdGlvbi5maW5kKChpdGVtKSA9PiBpdGVtID09PSB0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHNlbGVjdGVkSXRlbXNTdWIpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogRm9jdXMgZ3JpZCBsaXN0IGl0ZW0gcHJvZ3JhbW1hdGljYWxseSAqL1xuICAgIGZvY3VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9ncmlkTGlzdEl0ZW0/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZXRBY3RpdmUoZXZlbnQ6IE1vdXNlRXZlbnQsIGlzQWN0aXZlOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9pc0VsZW1lbnRDYW5CZUNsaWNrZWQoZXZlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pc0FjdGl2ZSA9IGlzQWN0aXZlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NpbmdsZVNlbGVjdChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJldmVudERlZmF1bHQoZXZlbnQpO1xuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5fc2VsZWN0ZWRJdGVtICE9PSAndW5kZWZpbmVkJyB8fCAhdGhpcy52YWx1ZSB8fCB0aGlzLl9pbmRleCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9ncmlkTGlzdC5zZXRTZWxlY3RlZEl0ZW0odGhpcy52YWx1ZSwgdGhpcy5faW5kZXgpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NoZWNrYm94Q2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2hlY2tlZCA9ICg8SFRNTElucHV0RWxlbWVudD5ldmVudC50YXJnZXQpLmNoZWNrZWQ7XG4gICAgICAgIHRoaXMuX3NlbGVjdGlvbkl0ZW0oY2hlY2tlZCwgZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NlbGVjdGlvbkl0ZW0odmFsdWU6IGJvb2xlYW4gfCBudW1iZXIgfCBULCBldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlIHx8IHRoaXMuX2luZGV4ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3Rpb24gPVxuICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnbXVsdGlTZWxlY3QnXG4gICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgOiB2YWx1ZSB8fCB2YWx1ZSA9PT0gMFxuICAgICAgICAgICAgICAgID8gR3JpZExpc3RTZWxlY3Rpb25BY3Rpb25zLkFERFxuICAgICAgICAgICAgICAgIDogR3JpZExpc3RTZWxlY3Rpb25BY3Rpb25zLlJFTU9WRTtcblxuICAgICAgICB0aGlzLl9ncmlkTGlzdC5zZXRTZWxlY3RlZEl0ZW0odGhpcy52YWx1ZSwgdGhpcy5faW5kZXgsIGFjdGlvbiwgZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uRGV0YWlsKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZXZlbnREZWZhdWx0KGV2ZW50KTtcblxuICAgICAgICB0aGlzLmRldGFpbC5lbWl0KHRoaXMuX291dHB1dEV2ZW50VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uTmF2aWdhdGUoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJldmVudERlZmF1bHQoZXZlbnQpO1xuXG4gICAgICAgIHRoaXMubmF2aWdhdGUuZW1pdCh0aGlzLl9vdXRwdXRFdmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbkRlbGV0ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcmV2ZW50RGVmYXVsdChldmVudCk7XG5cbiAgICAgICAgdGhpcy5kZWxldGUuZW1pdCh0aGlzLl9vdXRwdXRFdmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jbGlja09uRHJhZnQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJldmVudERlZmF1bHQoZXZlbnQpO1xuXG4gICAgICAgIHRoaXMuZHJhZnQuZW1pdCh0aGlzLl9vdXRwdXRFdmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9jbGlja09uTG9ja2VkKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZXZlbnREZWZhdWx0KGV2ZW50KTtcblxuICAgICAgICB0aGlzLmxvY2tlZC5lbWl0KHRoaXMuX291dHB1dEV2ZW50VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uQ2xpY2soZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9pc0VsZW1lbnRDYW5CZUNsaWNrZWQoZXZlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50eXBlICE9PSAnYWN0aXZlJyAmJiB0aGlzLnR5cGUgIT09ICdkZXRhaWxzQW5kQWN0aXZlJyAmJiB0aGlzLnR5cGUgIT09ICduYXZpZ2F0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMudHlwZSA9PT0gJ25hdmlnYXRpb24nKSB7XG4gICAgICAgICAgICB0aGlzLl9vbk5hdmlnYXRlKGV2ZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJlc3MuZW1pdCh0aGlzLl9vdXRwdXRFdmVudFZhbHVlKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9vbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxEaXZFbGVtZW50O1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFLZXlVdGlsLmlzS2V5Q29kZShldmVudCwgW0VOVEVSLCBTUEFDRV0pIHx8XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdub25lJyB8fFxuICAgICAgICAgICAgIXRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZkLWdyaWQtbGlzdF9faXRlbScpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcHJldmVudERlZmF1bHQoZXZlbnQpO1xuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdtdWx0aVNlbGVjdCcpIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGlvbkl0ZW0oIXRoaXMuX3NlbGVjdGVkSXRlbSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5fc2VsZWN0ZWRJdGVtID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgdGhpcy5fc2luZ2xlU2VsZWN0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNFbGVtZW50Q2FuQmVDbGlja2VkKGV2ZW50OiBNb3VzZUV2ZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghZXZlbnQ/LnRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgY29uc3QgeyBjbGFzc0xpc3QgfSA9IGVsZW1lbnQ7XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICEodGhpcy5faXNUb29sYmFyRWxlbWVudChlbGVtZW50KSAmJiB0aGlzLmRpc2FibGVUb29sYmFyQ2xpY2spICYmXG4gICAgICAgICAgICAhY2xhc3NMaXN0LmNvbnRhaW5zKCdmZC1ncmlkLWxpc3RfX2FjdGlvbi1idXR0b24nKSAmJlxuICAgICAgICAgICAgIWNsYXNzTGlzdC5jb250YWlucygnZmQtZ3JpZC1saXN0X19yYWRpby1sYWJlbCcpICYmXG4gICAgICAgICAgICAhY2xhc3NMaXN0LmNvbnRhaW5zKCdmZC1ncmlkLWxpc3RfX3JhZGlvLWlucHV0JykgJiZcbiAgICAgICAgICAgICFjbGFzc0xpc3QuY29udGFpbnMoJ2ZkLWdyaWQtbGlzdF9fY2hlY2tib3gtbGFiZWwnKSAmJlxuICAgICAgICAgICAgIWNsYXNzTGlzdC5jb250YWlucygnZmQtZ3JpZC1saXN0X19jaGVja2JveC1pbnB1dCcpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9pc1Rvb2xiYXJFbGVtZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghdGhpcy5pdGVtVG9vbGJhckNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKGVsZW1lbnQucGFyZW50RWxlbWVudCAmJiAhZWxlbWVudC5wYXJlbnRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZmQtZ3JpZC1saXN0X19pdGVtJykpIHtcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnZmQtdG9vbGJhci0tZXh0cmEtY29udGVudCcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9wcmV2ZW50RGVmYXVsdChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIGdldCBfb3V0cHV0RXZlbnRWYWx1ZSgpOiBHcmlkTGlzdEl0ZW1PdXRwdXRFdmVudDxUPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgIGluZGV4OiB0aGlzLl9pbmRleFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfYWRkQ2xhc3Nlc05hbWVzKGNsYXNzZXNOYW1lczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBjbGFzc05hbWUgb2YgY2xhc3Nlc05hbWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXIuYWRkQ2xhc3ModGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9yZW1vdmVDbGFzc2VzTmFtZXMoY2xhc3Nlc05hbWVzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IGNsYXNzTmFtZSBvZiBjbGFzc2VzTmFtZXMpIHtcbiAgICAgICAgICAgIHRoaXMuX3JlbmRlci5yZW1vdmVDbGFzcyh0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIGNsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgI2dyaWRMaXN0SXRlbVxuICAgIFtpZF09XCJpZFwiXG4gICAgdGFiaW5kZXg9XCIwXCJcbiAgICBjbGFzcz1cImZkLWdyaWQtbGlzdF9faXRlbVwiXG4gICAgcm9sZT1cIm9wdGlvblwiXG4gICAgW2NsYXNzLmlzLW5hdmlnYXRlZF09XCJpc05hdmlnYXRlZFwiXG4gICAgW2NsYXNzLmlzLXNlbGVjdGVkXT1cIiEhX3NlbGVjdGVkSXRlbVwiXG4gICAgW2NsYXNzLmZkLWdyaWQtbGlzdF9faXRlbS0tbGlua109XCJcbiAgICAgICAgX2lzQWN0aXZlICYmICh0eXBlID09PSAnYWN0aXZlJyB8fCB0eXBlID09PSAnZGV0YWlsc0FuZEFjdGl2ZScgfHwgdHlwZSA9PT0gJ25hdmlnYXRpb24nKVxuICAgIFwiXG4gICAgW2NsYXNzLmZkLWdyaWQtbGlzdF9faXRlbS0tdW5yZWFkXT1cInN0YXRlID09PSAndW5yZWFkJ1wiXG4gICAgW2NsYXNzLmZkLWdyaWQtbGlzdF9faXRlbS0tbG9ja2VkXT1cInN0YXRlID09PSAnbG9ja2VkJ1wiXG4gICAgW2NsYXNzLmZkLWdyaWQtbGlzdF9faXRlbS0tZHJhZnRdPVwic3RhdGUgPT09ICdkcmFmdCdcIlxuICAgIFtjbGFzcy5mZC1ncmlkLWxpc3RfX2l0ZW0tLWVycm9yXT1cInN0YXRlID09PSAnZXJyb3InXCJcbiAgICAoa2V5ZG93bik9XCJfb25LZXlEb3duKCRldmVudClcIlxuICAgIChjbGljayk9XCJzZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlU2VsZWN0JyAmJiBfc2luZ2xlU2VsZWN0KCRldmVudCk7IF9vbkNsaWNrKCRldmVudClcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiYXJpYUxhYmVsXCJcbiAgICAobW91c2VvdmVyKT1cIl9zZXRBY3RpdmUoJGV2ZW50LCBmYWxzZSlcIlxuICAgIChtb3VzZW91dCk9XCJfc2V0QWN0aXZlKCRldmVudCwgdHJ1ZSlcIlxuICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwic2VsZWN0aW9uTW9kZSA9PT0gJ25vbmUnID8gbnVsbCA6ICEhX3NlbGVjdGVkSXRlbVwiXG4+XG4gICAgPHNwYW5cbiAgICAgICAgKm5nSWY9XCJzdGF0dXNcIlxuICAgICAgICBjbGFzcz1cImZkLWdyaWQtbGlzdF9faGlnaGxpZ2h0XCJcbiAgICAgICAgW2NsYXNzLmZkLWdyaWQtbGlzdF9faGlnaGxpZ2h0LS1wb3NpdGl2ZV09XCJzdGF0dXMgPT09ICdzdWNjZXNzJ1wiXG4gICAgICAgIFtjbGFzcy5mZC1ncmlkLWxpc3RfX2hpZ2hsaWdodC0tbmVnYXRpdmVdPVwic3RhdHVzID09PSAnd2FybmluZydcIlxuICAgICAgICBbY2xhc3MuZmQtZ3JpZC1saXN0X19oaWdobGlnaHQtLWNyaXRpY2FsXT1cInN0YXR1cyA9PT0gJ2Vycm9yJ1wiXG4gICAgICAgIFtjbGFzcy5mZC1ncmlkLWxpc3RfX2hpZ2hsaWdodC0tbmV1dHJhbF09XCJzdGF0dXMgPT09ICduZXV0cmFsJ1wiXG4gICAgICAgIGkxOG4tYXJpYS1sYWJlbD1cImNvcmVHcmlkTGlzdC5JdGVtLlN0YXR1c3xTdGF0dXMgYXJpYS1sYWJlbCBhdHRyaWJ1dGVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidJdGVtIGhhcyBzdGF0dXMuIFN0YXR1czogJyArIHN0YXR1cyArICcuJ1wiXG4gICAgPjwvc3Bhbj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlU2VsZWN0J1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmFkaW9cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmZC10b29sYmFyIGZkLWdyaWQtbGlzdF9faXRlbS10b29sYmFyXCJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIGNvdW50ZXIgfHxcbiAgICAgICAgICAgIGl0ZW1Ub29sYmFyQ29tcG9uZW50Py5jb250ZW50VGVtcGxhdGVSZWYgfHxcbiAgICAgICAgICAgICh0eXBlICYmIHR5cGUgIT09ICdpbmFjdGl2ZScgJiYgdHlwZSAhPT0gJ2FjdGl2ZScpIHx8XG4gICAgICAgICAgICAoc2VsZWN0aW9uTW9kZSAhPT0gJ25vbmUnICYmIHNlbGVjdGlvbk1vZGUgIT09ICdzaW5nbGVTZWxlY3QnKVxuICAgICAgICBcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGVTZWxlY3RMZWZ0J1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJhZGlvXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb25Nb2RlID09PSAnbXVsdGlTZWxlY3QnXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2hlY2tib3hcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1Ub29sYmFyQ29tcG9uZW50Py5jb250ZW50VGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC10b29sYmFyLS1leHRyYS1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1Ub29sYmFyQ29tcG9uZW50LmNvbnRlbnRUZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxmZC1ncmlkLWxpc3QtdGl0bGUtYmFyLXNwYWNlcj48L2ZkLWdyaWQtbGlzdC10aXRsZS1iYXItc3BhY2VyPlxuXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cImNvdW50ZXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2l0ZW0tY291bnRlclwiXG4gICAgICAgICAgICBpMThuLWFyaWEtbGFiZWw9XCJAQGNvcmVHcmlkTGlzdC5JdGVtLkNvdW50ZXJ8Q291bnQgYXJpYS1sYWJlbCBhdHRyaWJ1dGVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSXRlbSBoYXMgJyArIGNvdW50ZXIgKyAnIGNoaWxkcmVuJ1wiXG4gICAgICAgICAgICBbaW5uZXJUZXh0XT1cImNvdW50ZXJcIlxuICAgICAgICA+PC9zcGFuPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwidHlwZSA9PT0gJ2RldGFpbCcgfHwgdHlwZSA9PT0gJ2RldGFpbHNBbmRBY3RpdmUnXCJcbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgZ2x5cGg9XCJlZGl0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtZ3JpZC1saXN0X19hY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICAgIGkxOG4tYXJpYS1sYWJlbD1cImNvcmVHcmlkTGlzdC5JdGVtLkJ0bi5EZXRhaWxzfEJ1dHRvbiBhcmlhLWxhYmVsIGF0dHJpYnV0ZVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGV0YWlsc1wiXG4gICAgICAgICAgICBpMThuLXRpdGxlPVwiY29yZUdyaWRMaXN0Lkl0ZW0uQnRuLkRldGFpbHN8QnV0dG9uIHRpdGxlIGF0dHJpYnV0ZVwiXG4gICAgICAgICAgICB0aXRsZT1cIkRldGFpbHNcIlxuICAgICAgICAgICAgZmRDb21wYWN0XG4gICAgICAgICAgICAoY2xpY2spPVwiX29uRGV0YWlsKCRldmVudClcIlxuICAgICAgICA+PC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3Rpb25Nb2RlID09PSAnZGVsZXRlJ1wiXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIGdseXBoPVwiZGVjbGluZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWdyaWQtbGlzdF9fYWN0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgICBpMThuLWFyaWEtbGFiZWw9XCJjb3JlR3JpZExpc3QuSXRlbS5CdG4uRGVsZXRlfEJ1dHRvbiBhcmlhLWxhYmVsIGF0dHJpYnV0ZVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGVsZXRlXCJcbiAgICAgICAgICAgIGkxOG4tdGl0bGU9XCJjb3JlR3JpZExpc3QuSXRlbS5CdG4uRGVsZXRlfEJ1dHRvbiB0aXRsZSBhdHRyaWJ1dGVcIlxuICAgICAgICAgICAgdGl0bGU9XCJEZWxldGVcIlxuICAgICAgICAgICAgZmRDb21wYWN0XG4gICAgICAgICAgICAoY2xpY2spPVwiX29uRGVsZXRlKCRldmVudClcIlxuICAgICAgICA+PC9idXR0b24+XG5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJ0eXBlID09PSAnbmF2aWdhdGlvbidcIiBjbGFzcz1cImZkLWdyaWQtbGlzdF9faXRlbS1uYXZpZ2F0aW9uLWluZGljYXRvclwiPlxuICAgICAgICAgICAgPGZkLWljb24gZ2x5cGg9XCJuYXZpZ2F0aW9uLXJpZ2h0LWFycm93XCI+PC9mZC1pY29uPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGVTZWxlY3RSaWdodCdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyYWRpb1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2l0ZW0tYm9keVwiIFtjbGFzcy5mZC1ncmlkLWxpc3RfX2l0ZW0tYm9keS0tbm8tcGFkZGluZ109XCJub1BhZGRpbmdcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2ZkLWdyaWQtbGlzdC1pdGVtLWltYWdlXVwiPjwvbmctY29udGVudD5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwidGl0bGUgfHwgZGVzY3JpcHRpb25cIiBjbGFzcz1cImZkLWdyaWQtbGlzdF9faXRlbS1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxoNCAqbmdJZj1cInRpdGxlXCIgZmQtdGl0bGU+e3sgdGl0bGUgfX08L2g0PlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkZXNjcmlwdGlvblwiIGNsYXNzPVwiZmQtZ3JpZC1saXN0X19pdGVtLXN1YnRpdGxlXCI+e3sgZGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJib2R5Py50ZW1wbGF0ZVJlZlwiIGNsYXNzPVwiZmQtZ3JpZC1saXN0X19pdGVtLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiYm9keS50ZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RhdGUgfHwgZm9vdGVyQmFyQ29tcG9uZW50Py5jb250ZW50VGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtRm9vdGVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjcmFkaW8+XG4gICAgPGlucHV0XG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cInNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGVTZWxlY3QnID8gLTEgOiAwXCJcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgY2xhc3M9XCJmZC1yYWRpbyBmZC1yYWRpby0tY29tcGFjdCBmZC1ncmlkLWxpc3RfX3JhZGlvLWlucHV0XCJcbiAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwic2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZVNlbGVjdCcgPyAnbm9uZScgOiAnJ1wiXG4gICAgICAgIFtpZF09XCJpZCArICctcmFkaW8nXCJcbiAgICAgICAgW25hbWVdPVwiJ2ZkLWdyaWQtbGlzdC1pdGVtLXRvb2xiYXItJyArIHNlbGVjdGlvbk1vZGVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgIFtuZ01vZGVsXT1cIl9zZWxlY3RlZEl0ZW1cIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCIkZXZlbnQgJiYgX3NlbGVjdGlvbkl0ZW0oJGV2ZW50KVwiXG4gICAgLz5cbiAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJmZC1yYWRpb19fbGFiZWwgZmQtZ3JpZC1saXN0X19yYWRpby1sYWJlbFwiXG4gICAgICAgIFtmb3JdPVwiaWQgKyAnLXJhZGlvJ1wiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAobW91c2VvdmVyKT1cIl9zZXRBY3RpdmUoJGV2ZW50LCBmYWxzZSlcIlxuICAgICAgICAobW91c2VvdXQpPVwiX3NldEFjdGl2ZSgkZXZlbnQsIHRydWUpXCJcbiAgICA+PC9sYWJlbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2hlY2tib3g+XG4gICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGNsYXNzPVwiZmQtY2hlY2tib3ggZmQtY2hlY2tib3gtLWNvbXBhY3QgZmQtZ3JpZC1saXN0X19jaGVja2JveC1pbnB1dFwiXG4gICAgICAgIFtpZF09XCJpZCArICctY2hlY2tib3gnXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICBbbmdNb2RlbF09XCJfc2VsZWN0ZWRJdGVtXCJcbiAgICAgICAgKGNsaWNrKT1cIl9jaGVja2JveENsaWNrKCRldmVudClcIlxuICAgIC8+XG4gICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiZmQtY2hlY2tib3hfX2xhYmVsIGZkLWNoZWNrYm94X19sYWJlbC0tY29tcGFjdCBmZC1ncmlkLWxpc3RfX2NoZWNrYm94LWxhYmVsXCJcbiAgICAgICAgW2Zvcl09XCJpZCArICctY2hlY2tib3gnXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgPjwvbGFiZWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2l0ZW1Gb290ZXI+XG4gICAgPGRpdiBjbGFzcz1cImZkLWdyaWQtbGlzdF9faXRlbS1ib2R5LWFjdGlvbnNcIiAqbmdJZj1cImZvb3RlckJhckNvbXBvbmVudCB8fCBzdGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9vdGVyQmFyQ29tcG9uZW50Py5jb250ZW50VGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJCYXJDb21wb25lbnQuY29udGVudFRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZm9vdGVyQmFyQ29tcG9uZW50Py5jb250ZW50VGVtcGxhdGVSZWYgJiYgc3RhdGVcIj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzdGF0ZSA9PT0gJ2Vycm9yJ1wiXG4gICAgICAgICAgICAgICAgZmQtb2JqZWN0LXN0YXR1c1xuICAgICAgICAgICAgICAgIHN0YXR1cz1cIm5lZ2F0aXZlXCJcbiAgICAgICAgICAgICAgICBpMThuLWxhYmVsPVwiY29yZUdyaWRMaXN0Lkl0ZW0uU3RhdHVzLkNvbnRhaW5zRXJyb3JzfEVycm9yIGxhYmVsIGF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgbGFiZWw9XCJDb250YWlucyBlcnJvcnNcIlxuICAgICAgICAgICAgICAgIGkxOG4tdGl0bGU9XCJjb3JlR3JpZExpc3QuSXRlbS5TdGF0dXMuQ29udGFpbnNFcnJvcnN8RXJyb3IgdGl0bGUgYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIkNvbnRhaW5zIGVycm9yc1wiXG4gICAgICAgICAgICA+PC9zcGFuPlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2FjdGlvbi1idXR0b25cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdGUgPT09ICdsb2NrZWQnXCJcbiAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgZ2x5cGg9XCJwcml2YXRlXCJcbiAgICAgICAgICAgICAgICBpMThuLWFyaWEtbGFiZWw9XCJjb3JlR3JpZExpc3QuSXRlbS5TdGF0dXMuTG9ja2VkfEJ1dHRvbiBhcmlhLWxhYmVsIGF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkxvY2tlZFwiXG4gICAgICAgICAgICAgICAgaTE4bi1sYWJlbD1cImNvcmVHcmlkTGlzdC5JdGVtLlN0YXR1cy5Mb2NrZWR8QnV0dG9uIGxhYmVsIGF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgbGFiZWw9XCJMb2NrZWRcIlxuICAgICAgICAgICAgICAgIGZkQ29tcGFjdFxuICAgICAgICAgICAgICAgIChjbGljayk9XCJfY2xpY2tPbkxvY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cblxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtZ3JpZC1saXN0X19hY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXRlID09PSAnZHJhZnQnXCJcbiAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgaTE4bi1hcmlhLWxhYmVsPVwiY29yZUdyaWRMaXN0Lkl0ZW0uU3RhdHVzLkRyYWZ0fEJ1dHRvbiBhcmlhLWxhYmVsIGF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkRyYWZ0XCJcbiAgICAgICAgICAgICAgICBpMThuLWxhYmVsPVwiY29yZUdyaWRMaXN0Lkl0ZW0uU3RhdHVzLkRyYWZ0fEJ1dHRvbiBsYWJlbCBhdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgIGxhYmVsPVwiRHJhZnRcIlxuICAgICAgICAgICAgICAgIGZkQ29tcGFjdFxuICAgICAgICAgICAgICAgIChjbGljayk9XCJfY2xpY2tPbkRyYWZ0KCRldmVudClcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
366
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC1saXN0LWl0ZW0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZ3JpZC1saXN0L2NvbXBvbmVudHMvZ3JpZC1saXN0LWl0ZW0vZ3JpZC1saXN0LWl0ZW0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvZ3JpZC1saXN0L2NvbXBvbmVudHMvZ3JpZC1saXN0LWl0ZW0vZ3JpZC1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUVILHVCQUF1QixFQUN2QixpQkFBaUIsRUFDakIsU0FBUyxFQUNULFlBQVksRUFDWixVQUFVLEVBQ1YsWUFBWSxFQUNaLFdBQVcsRUFDWCxLQUFLLEVBRUwsTUFBTSxFQUNOLFNBQVMsRUFDVCxTQUFTLEVBQ1QsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUVyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHdEQsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sZ0RBQWdELENBQUM7QUFDM0YsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDeEUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sNERBQTRELENBQUM7QUFDMUcsT0FBTyxFQUF5Qix3QkFBd0IsRUFBRSxNQUFNLHlDQUF5QyxDQUFDO0FBQzFHLE9BQU8sRUFBRSw4QkFBOEIsRUFBRSxNQUFNLGtFQUFrRSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRSxPQUFPLEVBQUUscUJBQXFC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S0FBSztzQkFISixLQUFLOztzQkFDTCxXQUFXO3VCQUFDLGlCQUFpQjs7c0JBQzdCLFdBQVc7dUJBQUMsaUJBQWlCO2dCQVExQixpQkFBaUI7c0JBRHBCLEtBQUs7Z0JBVU4sTUFBTTtzQkFETCxLQUFLO2dCQUtOLE9BQU87c0JBRE4sS0FBSztnQkFRTixLQUFLO3NCQURKLEtBQUs7Z0JBS04sbUJBQW1CO3NCQURsQixLQUFLO2dCQUtGLFFBQVE7c0JBRFgsS0FBSztnQkFjTixTQUFTO3NCQURSLEtBQUs7Z0JBS04sU0FBUztzQkFEUixLQUFLO2dCQUtOLGNBQWM7c0JBRGIsS0FBSztnQkFjRixJQUFJO3NCQURQLEtBQUs7Z0JBZ0JOLEtBQUs7c0JBREosS0FBSztnQkFRTixXQUFXO3NCQURWLEtBQUs7Z0JBS04sS0FBSztzQkFESixLQUFLO2dCQUtOLFdBQVc7c0JBRFYsS0FBSztnQkFRTixLQUFLO3NCQURKLE1BQU07Z0JBUVAsTUFBTTtzQkFETCxNQUFNO2dCQVFQLE1BQU07c0JBREwsTUFBTTtnQkFRUCxRQUFRO3NCQURQLE1BQU07Z0JBUVAsS0FBSztzQkFESixNQUFNO2dCQVFQLE1BQU07c0JBREwsTUFBTTtnQkFLUCxhQUFhO3NCQURaLFNBQVM7dUJBQUMsY0FBYztnQkFzQnpCLGtCQUFrQjtzQkFEakIsWUFBWTt1QkFBQyw4QkFBOEI7Z0JBSzVDLG9CQUFvQjtzQkFEbkIsWUFBWTt1QkFBQyw0QkFBNEI7Z0JBSzFDLElBQUk7c0JBREgsWUFBWTt1QkFBQyx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyVmlld0luaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIENvbnRlbnRDaGlsZCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBIb3N0QmluZGluZyxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3V0cHV0LFxuICAgIFJlbmRlcmVyMixcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVOVEVSLCBTUEFDRSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9rZXljb2Rlcyc7XG5cbmltcG9ydCB7IEtleVV0aWwgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvdXRpbHMnO1xuaW1wb3J0IHsgTnVsbGFibGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvc2hhcmVkJztcblxuaW1wb3J0IHsgR3JpZExpc3RJdGVtQm9keURpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvZ3JpZC1saXN0LWl0ZW0tYm9keS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgcGFyc2VMYXlvdXRQYXR0ZXJuIH0gZnJvbSAnLi4vLi4vaGVscGVycy9wYXJzZS1sYXlvdXQtcGF0dGVybic7XG5pbXBvcnQgeyBHcmlkTGlzdEl0ZW1Ub29sYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vZ3JpZC1saXN0LWl0ZW0tdG9vbGJhci9ncmlkLWxpc3QtaXRlbS10b29sYmFyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBHcmlkTGlzdFNlbGVjdGlvbk1vZGUsIEdyaWRMaXN0U2VsZWN0aW9uQWN0aW9ucyB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWxpc3Qtc2VsZWN0aW9uLm1vZGVscyc7XG5pbXBvcnQgeyBHcmlkTGlzdEl0ZW1Gb290ZXJCYXJDb21wb25lbnQgfSBmcm9tICcuLi9ncmlkLWxpc3QtaXRlbS1mb290ZXItYmFyL2dyaWQtbGlzdC1pdGVtLWZvb3Rlci1iYXIuY29tcG9uZW50JztcbmltcG9ydCB7IEdyaWRMaXN0IH0gZnJvbSAnLi8uLi9ncmlkLWxpc3QvZ3JpZC1saXN0LWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbic7XG5cbmxldCBncmlkTGlzdEl0ZW1VbmlxdWVJZCA9IDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3JpZExpc3RJdGVtT3V0cHV0RXZlbnQ8VD4ge1xuICAgIGluZGV4PzogbnVtYmVyO1xuICAgIHZhbHVlPzogVDtcbn1cblxuZXhwb3J0IHR5cGUgR3JpZExpc3RJdGVtVHlwZSA9ICdpbmFjdGl2ZScgfCAnYWN0aXZlJyB8ICdkZXRhaWwnIHwgJ2RldGFpbHNBbmRBY3RpdmUnIHwgJ25hdmlnYXRpb24nO1xuZXhwb3J0IHR5cGUgR3JpZExpc3RJdGVtU3RhdGUgPSAndW5yZWFkJyB8ICdsb2NrZWQnIHwgJ2Vycm9yJyB8ICdkcmFmdCc7XG5leHBvcnQgdHlwZSBHcmlkTGlzdEl0ZW1TdGF0dXMgPSAnc3VjY2VzcycgfCAnd2FybmluZycgfCAnZXJyb3InIHwgJ25ldXRyYWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2ZkLWdyaWQtbGlzdC1pdGVtJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZ3JpZC1saXN0LWl0ZW0uY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2dyaWQtbGlzdC1pdGVtLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBHcmlkTGlzdEl0ZW1Db21wb25lbnQ8VD4gaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAgIC8qKiBpZCBmb3IgdGhlIEVsZW1lbnQgKi9cbiAgICBASW5wdXQoKVxuICAgIGlkID0gYGZkLWdyaWQtbGlzdC1pdGVtLSR7Z3JpZExpc3RJdGVtVW5pcXVlSWQrK31gO1xuXG4gICAgLyoqIHdpZHRoIG9mIHRoZSBlbGVtZW50ICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ3N0eWxlLm1heC13aWR0aCcpXG4gICAgQEhvc3RCaW5kaW5nKCdzdHlsZS5taW4td2lkdGgnKVxuICAgIHdpZHRoOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBzcGVjaWZ5IHRoZSBjZWxsIGxheW91dCBpbiB0aGUgZm9ybWF0IGBYTG4tTG4tTW4tU25gIHdoZXJlIG4gaXNcbiAgICAgKiB0aGUgbnVtYmVyIG9mIG9jY3VwaWVkIGNvbHVtbnMgYW5kIG4gY2FuIGJlIGRpZmZlcmVudCBmb3IgZWFjaCBzaXplLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGxheW91dEl0ZW1QYXR0ZXJuKHZhbHVlOiBOdWxsYWJsZTxzdHJpbmc+KSB7XG4gICAgICAgIHRoaXMuZ3JpZExheW91dENsYXNzZXMgPSB2YWx1ZSA/IHBhcnNlTGF5b3V0UGF0dGVybih2YWx1ZSwgZmFsc2UpIDogW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgc3RhdHVzIG9mIEdyaWQgTGlzdCBJdGVtXG4gICAgICogKFN0YXR1c2VzOiBzdWNjZXNzIHwgd2FybmluZyB8IGVycm9yIHwgbmV1dHJhbClcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXR1cz86IEdyaWRMaXN0SXRlbVN0YXR1cztcblxuICAgIC8qKiBTZXRzIG51bWJlciBvZiBzdWIgaXRlbXMgKi9cbiAgICBASW5wdXQoKVxuICAgIGNvdW50ZXI6IE51bGxhYmxlPG51bWJlcj47XG5cbiAgICAvKipcbiAgICAgKiBWYWx1ZSBmaWVsZCBzdG9yZXMgaW5mb3JtYXRpb24gZm9yIHJhZGlvIGJ1dHRvbiB2YWx1ZSwgY2hlY2tib3ggYnV0dG9uIGFuZCBmb3IgR3JpZExpc3RTZWxlY3Rpb25FdmVudFxuICAgICAqIFRoZSBmaWVsZCBpcyBtYW5kYXRvcnkgZm9yIG1vZGVzIGxpa2Ugc2luZ2xlU2VsZWN0LCBzaW5nbGVTZWxlY3RMZWZ0LCBzaW5nbGVTZWxlY3RSaWdodCBvciBtdWx0aVNlbGVjdFxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgdmFsdWU/OiBUO1xuXG4gICAgLyoqIFdoZXRoZXIgY2xpY2sgb24gdGhlIGN1c3RvbSB0b29sYmFyIGlzIGRpc2FibGVkICovXG4gICAgQElucHV0KClcbiAgICBkaXNhYmxlVG9vbGJhckNsaWNrID0gZmFsc2U7XG5cbiAgICAvKiogQWxsb3dzIGFuIGl0ZW0gdG8gYmUgc2VsZWN0ZWQgcHJvZ3JhbW1hdGljYWxseSAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHNlbGVjdGVkKHZhbHVlOiBOdWxsYWJsZTxib29sZWFuPikge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWQ7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF9zZWxlY3RlZCA9IGZhbHNlO1xuXG4gICAgLyoqIFJlbW92ZSB0aGUgcGFkZGluZyBmcm9tIHRoZSBJdGVtIGJvZHkgKi9cbiAgICBASW5wdXQoKVxuICAgIG5vUGFkZGluZyA9IGZhbHNlO1xuXG4gICAgLyoqIFNldHMgdGhlIGBhcmlhLWxhYmVsYCBhdHRyaWJ1dGUgdG8gdGhlIGVsZW1lbnQuICovXG4gICAgQElucHV0KClcbiAgICBhcmlhTGFiZWw6IE51bGxhYmxlPHN0cmluZz47XG5cbiAgICAvKiogU2V0cyB0aGUgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZSB0byB0aGUgZWxlbWVudC4gKi9cbiAgICBASW5wdXQoKVxuICAgIGFyaWFMYWJlbGxlZEJ5OiBOdWxsYWJsZTxzdHJpbmc+O1xuXG4gICAgLyoqXG4gICAgICogRGVmaW5lcyB0aGUgdHlwZSBvZiBHcmlkIExpc3QgSXRlbVxuICAgICAqIFR5cGVzOlxuICAgICAqIC0gYWN0aXZlOiBpbmRpY2F0ZXMgdGhhdCB0aGUgaXRlbSBpcyBjbGlja2FibGUgdmlhIGFjdGl2ZSBmZWVkYmFjayB3aGVuIGl0ZW0gaXMgcHJlc3NlZFxuICAgICAqIC0gZGV0YWlsOiBlbmFibGVzIGRldGFpbCBidXR0b24gb2YgdGhlIGxpc3QgaXRlbSB0aGF0IGZpcmVzIGV2ZW50LlxuICAgICAqIC0gZGV0YWlsc0FuZEFjdGl2ZTogZW5hYmxlcyBcImRldGFpbFwiIGFuZCBcImFjdGl2ZVwiIGVudW1lcmF0aW9ucyB0b2dldGhlclxuICAgICAqIC0gaW5hY3RpdmU6IGluZGljYXRlcyB0aGUgbGlzdCBpdGVtIGRvZXMgbm90IGhhdmUgYW55IGFjdGl2ZSBmZWVkYmFjayB3aGVuIGl0ZW0gaXMgcHJlc3NlZFxuICAgICAqIC0gbmF2aWdhdGlvbjogaW5kaWNhdGVzIHRoZSBsaXN0IGl0ZW0gaXMgbmF2aWdhYmxlIHRvIHNob3cgZXh0cmEgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGl0ZW1cbiAgICAgKiBEZWZhdWx0OiBpbmFjdGl2ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IHR5cGUodmFsdWU6IE51bGxhYmxlPEdyaWRMaXN0SXRlbVR5cGU+KSB7XG4gICAgICAgIHRoaXMuX3R5cGUgPSB2YWx1ZSA/PyAnaW5hY3RpdmUnO1xuICAgIH1cbiAgICBnZXQgdHlwZSgpOiBHcmlkTGlzdEl0ZW1UeXBlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3R5cGU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBwcml2YXRlIF90eXBlOiBHcmlkTGlzdEl0ZW1UeXBlID0gJ2luYWN0aXZlJztcblxuICAgIC8qKlxuICAgICAqIFNldHMgdGhlIHN0YXRlIG9mIEdyaWQgTGlzdCBJdGVtXG4gICAgICogKFN0YXRlczogdW5yZWFkIHwgZXJyb3IgfCBsb2NrZWQgfCBkcmFmdClcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHN0YXRlPzogR3JpZExpc3RJdGVtU3RhdGU7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgbmF2aWdhdGVkIHN0YXRlIG9mIHRoZSBsaXN0IGl0ZW0uXG4gICAgICogSWYgc2V0IHRvIHRydWUsIGEgbmF2aWdhdGlvbiBpbmRpY2F0b3IgaXMgZGlzcGxheWVkIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3QgaXRlbS5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIGlzTmF2aWdhdGVkID0gZmFsc2U7XG5cbiAgICAvKiogVGl0bGUgb2YgdGhlIGl0ZW0gKi9cbiAgICBASW5wdXQoKVxuICAgIHRpdGxlOiBzdHJpbmc7XG5cbiAgICAvKiogRGVzY3JpcHRpb24gb2YgdGhlIGl0ZW0gKi9cbiAgICBASW5wdXQoKVxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBpcyB0aHJvd24sIHdoZW4gdHlwZSBpcyBhY3RpdmVcbiAgICAgKiBhbmQgaXRlbSBpcyBwcmVzc2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHJlc3MgPSBuZXcgRXZlbnRFbWl0dGVyPEdyaWRMaXN0SXRlbU91dHB1dEV2ZW50PFQ+PigpO1xuXG4gICAgLyoqXG4gICAgICogRXZlbnQgaXMgdGhyb3duLCB3aGVuIHR5cGUgaXMgZGV0YWlsIG9yIGRldGFpbHNBbmRBY3RpdmVcbiAgICAgKiBhbmQgRGV0YWlsIGJ1dHRvbiB3YXMgcHJlc3NlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGRldGFpbCA9IG5ldyBFdmVudEVtaXR0ZXI8R3JpZExpc3RJdGVtT3V0cHV0RXZlbnQ8VD4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBpcyB0aHJvd24sIHdoZW4gbW9kZSBkZWxldGVcbiAgICAgKiBhbmQgRGVsZXRlIGJ1dHRvbiB3YXMgcHJlc3NlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8R3JpZExpc3RJdGVtT3V0cHV0RXZlbnQ8VD4+KCk7XG5cbiAgICAvKipcbiAgICAgKiBFdmVudCBpcyB0aHJvd24sIHdoZW4gdHlwZSBpcyBuYXZpZ2F0aW9uXG4gICAgICogYW5kIE5hdmlnYXRlIGJ1dHRvbiB3YXMgcHJlc3NlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIG5hdmlnYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxHcmlkTGlzdEl0ZW1PdXRwdXRFdmVudDxUPj4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGlzIHRocm93biwgd2hlbiBzdGF0ZSBpcyBlcnJvciwgbm90IHVzZWQgR3JpZExpc3RJdGVtRm9vdGVyQmFyQ29tcG9uZW50XG4gICAgICogYW5kIERyYWZ0IGJ1dHRvbiB3YXMgcHJlc3NlZFxuICAgICAqL1xuICAgIEBPdXRwdXQoKVxuICAgIGRyYWZ0ID0gbmV3IEV2ZW50RW1pdHRlcjxHcmlkTGlzdEl0ZW1PdXRwdXRFdmVudDxUPj4oKTtcblxuICAgIC8qKlxuICAgICAqIEV2ZW50IGlzIHRocm93biwgd2hlbiBzdGF0ZSBpcyBsb2NrZWQsIG5vdCB1c2VkIEdyaWRMaXN0SXRlbUZvb3RlckJhckNvbXBvbmVudFxuICAgICAqIGFuZCBMb2NrZWQgYnV0dG9uIHdhcyBwcmVzc2VkXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgbG9ja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxHcmlkTGlzdEl0ZW1PdXRwdXRFdmVudDxUPj4oKTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQFZpZXdDaGlsZCgnZ3JpZExpc3RJdGVtJylcbiAgICBfZ3JpZExpc3RJdGVtOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PjtcblxuICAgIC8qKiBAaGlkZGVuXG4gICAgICogVGhlIGFjdGl2ZSBzdGF0ZSBvZiB0aGUgbGlzdCBpdGVtLlxuICAgICAqIElmIHNldCB0byB0cnVlLCB0aGUgd2hvbGUgY2FyZCBoYXMgYWN0aXZlIHN0YXRlLiBCZWNvbWVzIGZhbHNlIG9ubHkgd2hlbiB0aGUgRWRpdCBidXR0b24gaXMgY2xpY2tlZC5cbiAgICAgKi9cbiAgICBfaXNBY3RpdmUgPSB0cnVlO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgZ3JpZExheW91dENsYXNzZXMoKTogc3RyaW5nW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ3JpZExheW91dENsYXNzZXM7XG4gICAgfVxuXG4gICAgc2V0IGdyaWRMYXlvdXRDbGFzc2VzKHZhbHVlOiBzdHJpbmdbXSkge1xuICAgICAgICB0aGlzLl9yZW1vdmVDbGFzc2VzTmFtZXModGhpcy5fZ3JpZExheW91dENsYXNzZXMpO1xuICAgICAgICB0aGlzLl9ncmlkTGF5b3V0Q2xhc3NlcyA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9hZGRDbGFzc2VzTmFtZXModGhpcy5fZ3JpZExheW91dENsYXNzZXMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChHcmlkTGlzdEl0ZW1Gb290ZXJCYXJDb21wb25lbnQpXG4gICAgZm9vdGVyQmFyQ29tcG9uZW50OiBHcmlkTGlzdEl0ZW1Gb290ZXJCYXJDb21wb25lbnQ7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIEBDb250ZW50Q2hpbGQoR3JpZExpc3RJdGVtVG9vbGJhckNvbXBvbmVudClcbiAgICBpdGVtVG9vbGJhckNvbXBvbmVudDogR3JpZExpc3RJdGVtVG9vbGJhckNvbXBvbmVudDtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgQENvbnRlbnRDaGlsZChHcmlkTGlzdEl0ZW1Cb2R5RGlyZWN0aXZlKVxuICAgIGJvZHk6IEdyaWRMaXN0SXRlbUJvZHlEaXJlY3RpdmU7XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9zZWxlY3RlZEl0ZW0/OiBUO1xuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBnZXQgc2VsZWN0aW9uTW9kZSgpOiBHcmlkTGlzdFNlbGVjdGlvbk1vZGUgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0aW9uTW9kZTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHNldCBzZWxlY3Rpb25Nb2RlKG1vZGU6IEdyaWRMaXN0U2VsZWN0aW9uTW9kZSB8IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLl9zZWxlY3Rpb25Nb2RlID0gbW9kZTtcblxuICAgICAgICBpZiAobW9kZSAhPT0gJ2RlbGV0ZScgJiYgbW9kZSAhPT0gJ25vbmUnICYmICF0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0dyaWQgTGlzdCBJdGVtIG11c3QgaGF2ZSBbdmFsdWVdIGF0dHJpYnV0ZS4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkICYmIHRoaXMudmFsdWUgJiYgdGhpcy5faW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgYWN0aW9uID0gdGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAnbXVsdGlTZWxlY3QnID8gbnVsbCA6IEdyaWRMaXN0U2VsZWN0aW9uQWN0aW9ucy5BREQ7XG5cbiAgICAgICAgICAgIHRoaXMuX2dyaWRMaXN0LnNldFNlbGVjdGVkSXRlbSh0aGlzLnZhbHVlLCB0aGlzLl9pbmRleCwgYWN0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NkLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIF9pbmRleD86IG51bWJlcjtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfc2VsZWN0aW9uTW9kZT86IEdyaWRMaXN0U2VsZWN0aW9uTW9kZTtcblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfZ3JpZExheW91dENsYXNzZXM6IHN0cmluZ1tdID0gW107XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBfcmVuZGVyOiBSZW5kZXJlcjIsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgX2dyaWRMaXN0OiBHcmlkTGlzdDxUPlxuICAgICkge1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zU3ViID0gdGhpcy5fZ3JpZExpc3QuX3NlbGVjdGVkSXRlbXMkLnN1YnNjcmliZSgoaXRlbXMpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkSXRlbSA9IGl0ZW1zLnNlbGVjdGlvbi5maW5kKChpdGVtKSA9PiBpdGVtID09PSB0aGlzLnZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKHNlbGVjdGVkSXRlbXNTdWIpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9jZC5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKiogRm9jdXMgZ3JpZCBsaXN0IGl0ZW0gcHJvZ3JhbW1hdGljYWxseSAqL1xuICAgIGZvY3VzKG9wdGlvbnM/OiBGb2N1c09wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZ3JpZExpc3RJdGVtPy5uYXRpdmVFbGVtZW50LmZvY3VzKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX3NldEFjdGl2ZShldmVudDogTW91c2VFdmVudCwgaXNBY3RpdmU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzRWxlbWVudENhbkJlQ2xpY2tlZChldmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2lzQWN0aXZlID0gaXNBY3RpdmU7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2luZ2xlU2VsZWN0KGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcmV2ZW50RGVmYXVsdChldmVudCk7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLl9zZWxlY3RlZEl0ZW0gIT09ICd1bmRlZmluZWQnIHx8ICF0aGlzLnZhbHVlIHx8IHRoaXMuX2luZGV4ID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2dyaWRMaXN0LnNldFNlbGVjdGVkSXRlbSh0aGlzLnZhbHVlLCB0aGlzLl9pbmRleCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfY2hlY2tib3hDbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBjaGVja2VkID0gKDxIVE1MSW5wdXRFbGVtZW50PmV2ZW50LnRhcmdldCkuY2hlY2tlZDtcbiAgICAgICAgdGhpcy5fc2VsZWN0aW9uSXRlbShjaGVja2VkLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfc2VsZWN0aW9uSXRlbSh2YWx1ZTogYm9vbGVhbiB8IG51bWJlciB8IFQsIGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudmFsdWUgfHwgdGhpcy5faW5kZXggPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGlvbk1vZGUgIT09ICdtdWx0aVNlbGVjdCdcbiAgICAgICAgICAgICAgICA/IG51bGxcbiAgICAgICAgICAgICAgICA6IHZhbHVlIHx8IHZhbHVlID09PSAwXG4gICAgICAgICAgICAgICAgPyBHcmlkTGlzdFNlbGVjdGlvbkFjdGlvbnMuQUREXG4gICAgICAgICAgICAgICAgOiBHcmlkTGlzdFNlbGVjdGlvbkFjdGlvbnMuUkVNT1ZFO1xuXG4gICAgICAgIHRoaXMuX2dyaWRMaXN0LnNldFNlbGVjdGVkSXRlbSh0aGlzLnZhbHVlLCB0aGlzLl9pbmRleCwgYWN0aW9uLCBldmVudCk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25EZXRhaWwoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJldmVudERlZmF1bHQoZXZlbnQpO1xuXG4gICAgICAgIHRoaXMuZGV0YWlsLmVtaXQodGhpcy5fb3V0cHV0RXZlbnRWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25OYXZpZ2F0ZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcmV2ZW50RGVmYXVsdChldmVudCk7XG5cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZS5lbWl0KHRoaXMuX291dHB1dEV2ZW50VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uRGVsZXRlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMuX3ByZXZlbnREZWZhdWx0KGV2ZW50KTtcblxuICAgICAgICB0aGlzLmRlbGV0ZS5lbWl0KHRoaXMuX291dHB1dEV2ZW50VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NsaWNrT25EcmFmdChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9wcmV2ZW50RGVmYXVsdChldmVudCk7XG5cbiAgICAgICAgdGhpcy5kcmFmdC5lbWl0KHRoaXMuX291dHB1dEV2ZW50VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX2NsaWNrT25Mb2NrZWQoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fcHJldmVudERlZmF1bHQoZXZlbnQpO1xuXG4gICAgICAgIHRoaXMubG9ja2VkLmVtaXQodGhpcy5fb3V0cHV0RXZlbnRWYWx1ZSk7XG4gICAgfVxuXG4gICAgLyoqIEBoaWRkZW4gKi9cbiAgICBfb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuX2lzRWxlbWVudENhbkJlQ2xpY2tlZChldmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnR5cGUgIT09ICdhY3RpdmUnICYmIHRoaXMudHlwZSAhPT0gJ2RldGFpbHNBbmRBY3RpdmUnICYmIHRoaXMudHlwZSAhPT0gJ25hdmlnYXRpb24nKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy50eXBlID09PSAnbmF2aWdhdGlvbicpIHtcbiAgICAgICAgICAgIHRoaXMuX29uTmF2aWdhdGUoZXZlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcmVzcy5lbWl0KHRoaXMuX291dHB1dEV2ZW50VmFsdWUpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgX29uS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQgYXMgSFRNTERpdkVsZW1lbnQ7XG5cbiAgICAgICAgY29uc3QgaXNTZWxlY3Rpb25LZXlEb3duID0gS2V5VXRpbC5pc0tleUNvZGUoZXZlbnQsIFtFTlRFUiwgU1BBQ0VdKTtcblxuICAgICAgICBpZiAoaXNTZWxlY3Rpb25LZXlEb3duICYmIHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gJ25vbmUnKSB7XG4gICAgICAgICAgICB0aGlzLnByZXNzLmVtaXQodGhpcy5fb3V0cHV0RXZlbnRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWlzU2VsZWN0aW9uS2V5RG93biB8fCB0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICdub25lJyB8fCAhdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnZmQtZ3JpZC1saXN0X19pdGVtJykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3ByZXZlbnREZWZhdWx0KGV2ZW50KTtcblxuICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAnbXVsdGlTZWxlY3QnKSB7XG4gICAgICAgICAgICB0aGlzLl9zZWxlY3Rpb25JdGVtKCF0aGlzLl9zZWxlY3RlZEl0ZW0pO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHRoaXMuX3NlbGVjdGVkSXRlbSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHRoaXMuX3NpbmdsZVNlbGVjdChldmVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2lzRWxlbWVudENhbkJlQ2xpY2tlZChldmVudDogTW91c2VFdmVudCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIWV2ZW50Py50YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHsgY2xhc3NMaXN0IH0gPSBlbGVtZW50O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAhKHRoaXMuX2lzVG9vbGJhckVsZW1lbnQoZWxlbWVudCkgJiYgdGhpcy5kaXNhYmxlVG9vbGJhckNsaWNrKSAmJlxuICAgICAgICAgICAgIWNsYXNzTGlzdC5jb250YWlucygnZmQtZ3JpZC1saXN0X19hY3Rpb24tYnV0dG9uJykgJiZcbiAgICAgICAgICAgICFjbGFzc0xpc3QuY29udGFpbnMoJ2ZkLWdyaWQtbGlzdF9fcmFkaW8tbGFiZWwnKSAmJlxuICAgICAgICAgICAgIWNsYXNzTGlzdC5jb250YWlucygnZmQtZ3JpZC1saXN0X19yYWRpby1pbnB1dCcpICYmXG4gICAgICAgICAgICAhY2xhc3NMaXN0LmNvbnRhaW5zKCdmZC1ncmlkLWxpc3RfX2NoZWNrYm94LWxhYmVsJykgJiZcbiAgICAgICAgICAgICFjbGFzc0xpc3QuY29udGFpbnMoJ2ZkLWdyaWQtbGlzdF9fY2hlY2tib3gtaW5wdXQnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfaXNUb29sYmFyRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuaXRlbVRvb2xiYXJDb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlIChlbGVtZW50LnBhcmVudEVsZW1lbnQgJiYgIWVsZW1lbnQucGFyZW50RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZkLWdyaWQtbGlzdF9faXRlbScpKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2ZkLXRvb2xiYXItLWV4dHJhLWNvbnRlbnQnKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcHJldmVudERlZmF1bHQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBnZXQgX291dHB1dEV2ZW50VmFsdWUoKTogR3JpZExpc3RJdGVtT3V0cHV0RXZlbnQ8VD4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICBpbmRleDogdGhpcy5faW5kZXhcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKiogQGhpZGRlbiAqL1xuICAgIHByaXZhdGUgX2FkZENsYXNzZXNOYW1lcyhjbGFzc2VzTmFtZXM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIGZvciAoY29uc3QgY2xhc3NOYW1lIG9mIGNsYXNzZXNOYW1lcykge1xuICAgICAgICAgICAgdGhpcy5fcmVuZGVyLmFkZENsYXNzKHRoaXMuX2VsZW1lbnRSZWYubmF0aXZlRWxlbWVudCwgY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaGlkZGVuICovXG4gICAgcHJpdmF0ZSBfcmVtb3ZlQ2xhc3Nlc05hbWVzKGNsYXNzZXNOYW1lczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgZm9yIChjb25zdCBjbGFzc05hbWUgb2YgY2xhc3Nlc05hbWVzKSB7XG4gICAgICAgICAgICB0aGlzLl9yZW5kZXIucmVtb3ZlQ2xhc3ModGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCBjbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdlxuICAgICNncmlkTGlzdEl0ZW1cbiAgICBbaWRdPVwiaWRcIlxuICAgIHRhYmluZGV4PVwiMFwiXG4gICAgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2l0ZW1cIlxuICAgIHJvbGU9XCJvcHRpb25cIlxuICAgIFtjbGFzcy5pcy1uYXZpZ2F0ZWRdPVwiaXNOYXZpZ2F0ZWRcIlxuICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCIhIV9zZWxlY3RlZEl0ZW1cIlxuICAgIFtjbGFzcy5mZC1ncmlkLWxpc3RfX2l0ZW0tLWxpbmtdPVwiXG4gICAgICAgIF9pc0FjdGl2ZSAmJiAodHlwZSA9PT0gJ2FjdGl2ZScgfHwgdHlwZSA9PT0gJ2RldGFpbHNBbmRBY3RpdmUnIHx8IHR5cGUgPT09ICduYXZpZ2F0aW9uJylcbiAgICBcIlxuICAgIFtjbGFzcy5mZC1ncmlkLWxpc3RfX2l0ZW0tLXVucmVhZF09XCJzdGF0ZSA9PT0gJ3VucmVhZCdcIlxuICAgIFtjbGFzcy5mZC1ncmlkLWxpc3RfX2l0ZW0tLWxvY2tlZF09XCJzdGF0ZSA9PT0gJ2xvY2tlZCdcIlxuICAgIFtjbGFzcy5mZC1ncmlkLWxpc3RfX2l0ZW0tLWRyYWZ0XT1cInN0YXRlID09PSAnZHJhZnQnXCJcbiAgICBbY2xhc3MuZmQtZ3JpZC1saXN0X19pdGVtLS1lcnJvcl09XCJzdGF0ZSA9PT0gJ2Vycm9yJ1wiXG4gICAgKGtleWRvd24pPVwiX29uS2V5RG93bigkZXZlbnQpXCJcbiAgICAoY2xpY2spPVwic2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZVNlbGVjdCcgJiYgX3NpbmdsZVNlbGVjdCgkZXZlbnQpOyBfb25DbGljaygkZXZlbnQpXCJcbiAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImFyaWFMYWJlbGxlZEJ5XCJcbiAgICAobW91c2VvdmVyKT1cIl9zZXRBY3RpdmUoJGV2ZW50LCBmYWxzZSlcIlxuICAgIChtb3VzZW91dCk9XCJfc2V0QWN0aXZlKCRldmVudCwgdHJ1ZSlcIlxuICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwic2VsZWN0aW9uTW9kZSA9PT0gJ25vbmUnID8gbnVsbCA6ICEhX3NlbGVjdGVkSXRlbVwiXG4+XG4gICAgPHNwYW5cbiAgICAgICAgKm5nSWY9XCJzdGF0dXNcIlxuICAgICAgICBjbGFzcz1cImZkLWdyaWQtbGlzdF9faGlnaGxpZ2h0XCJcbiAgICAgICAgW2NsYXNzLmZkLWdyaWQtbGlzdF9faGlnaGxpZ2h0LS1wb3NpdGl2ZV09XCJzdGF0dXMgPT09ICdzdWNjZXNzJ1wiXG4gICAgICAgIFtjbGFzcy5mZC1ncmlkLWxpc3RfX2hpZ2hsaWdodC0tbmVnYXRpdmVdPVwic3RhdHVzID09PSAnd2FybmluZydcIlxuICAgICAgICBbY2xhc3MuZmQtZ3JpZC1saXN0X19oaWdobGlnaHQtLWNyaXRpY2FsXT1cInN0YXR1cyA9PT0gJ2Vycm9yJ1wiXG4gICAgICAgIFtjbGFzcy5mZC1ncmlkLWxpc3RfX2hpZ2hsaWdodC0tbmV1dHJhbF09XCJzdGF0dXMgPT09ICduZXV0cmFsJ1wiXG4gICAgICAgIGkxOG4tYXJpYS1sYWJlbD1cImNvcmVHcmlkTGlzdC5JdGVtLlN0YXR1c3xTdGF0dXMgYXJpYS1sYWJlbCBhdHRyaWJ1dGVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidJdGVtIGhhcyBzdGF0dXMuIFN0YXR1czogJyArIHN0YXR1cyArICcuJ1wiXG4gICAgPjwvc3Bhbj5cblxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb25Nb2RlID09PSAnc2luZ2xlU2VsZWN0J1wiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmFkaW9cIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmZC10b29sYmFyIGZkLWdyaWQtbGlzdF9faXRlbS10b29sYmFyXCJcbiAgICAgICAgKm5nSWY9XCJcbiAgICAgICAgICAgIGNvdW50ZXIgfHxcbiAgICAgICAgICAgIGl0ZW1Ub29sYmFyQ29tcG9uZW50Py5jb250ZW50VGVtcGxhdGVSZWYgfHxcbiAgICAgICAgICAgICh0eXBlICYmIHR5cGUgIT09ICdpbmFjdGl2ZScgJiYgdHlwZSAhPT0gJ2FjdGl2ZScpIHx8XG4gICAgICAgICAgICAoc2VsZWN0aW9uTW9kZSAhPT0gJ25vbmUnICYmIHNlbGVjdGlvbk1vZGUgIT09ICdzaW5nbGVTZWxlY3QnKVxuICAgICAgICBcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGVTZWxlY3RMZWZ0J1wiPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJhZGlvXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxlY3Rpb25Nb2RlID09PSAnbXVsdGlTZWxlY3QnXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2hlY2tib3hcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW1Ub29sYmFyQ29tcG9uZW50Py5jb250ZW50VGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmZC10b29sYmFyLS1leHRyYS1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cIml0ZW1Ub29sYmFyQ29tcG9uZW50LmNvbnRlbnRUZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxmZC1ncmlkLWxpc3QtdGl0bGUtYmFyLXNwYWNlcj48L2ZkLWdyaWQtbGlzdC10aXRsZS1iYXItc3BhY2VyPlxuXG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgICAqbmdJZj1cImNvdW50ZXJcIlxuICAgICAgICAgICAgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2l0ZW0tY291bnRlclwiXG4gICAgICAgICAgICBpMThuLWFyaWEtbGFiZWw9XCJAQGNvcmVHcmlkTGlzdC5JdGVtLkNvdW50ZXJ8Q291bnQgYXJpYS1sYWJlbCBhdHRyaWJ1dGVcIlxuICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInSXRlbSBoYXMgJyArIGNvdW50ZXIgKyAnIGNoaWxkcmVuJ1wiXG4gICAgICAgICAgICBbaW5uZXJUZXh0XT1cImNvdW50ZXJcIlxuICAgICAgICA+PC9zcGFuPlxuXG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwidHlwZSA9PT0gJ2RldGFpbCcgfHwgdHlwZSA9PT0gJ2RldGFpbHNBbmRBY3RpdmUnXCJcbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgZ2x5cGg9XCJlZGl0XCJcbiAgICAgICAgICAgIGNsYXNzPVwiZmQtZ3JpZC1saXN0X19hY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICAgIGkxOG4tYXJpYS1sYWJlbD1cImNvcmVHcmlkTGlzdC5JdGVtLkJ0bi5EZXRhaWxzfEJ1dHRvbiBhcmlhLWxhYmVsIGF0dHJpYnV0ZVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGV0YWlsc1wiXG4gICAgICAgICAgICBpMThuLXRpdGxlPVwiY29yZUdyaWRMaXN0Lkl0ZW0uQnRuLkRldGFpbHN8QnV0dG9uIHRpdGxlIGF0dHJpYnV0ZVwiXG4gICAgICAgICAgICB0aXRsZT1cIkRldGFpbHNcIlxuICAgICAgICAgICAgZmRDb21wYWN0XG4gICAgICAgICAgICAoY2xpY2spPVwiX29uRGV0YWlsKCRldmVudClcIlxuICAgICAgICA+PC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJzZWxlY3Rpb25Nb2RlID09PSAnZGVsZXRlJ1wiXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIGdseXBoPVwiZGVjbGluZVwiXG4gICAgICAgICAgICBjbGFzcz1cImZkLWdyaWQtbGlzdF9fYWN0aW9uLWJ1dHRvblwiXG4gICAgICAgICAgICBpMThuLWFyaWEtbGFiZWw9XCJjb3JlR3JpZExpc3QuSXRlbS5CdG4uRGVsZXRlfEJ1dHRvbiBhcmlhLWxhYmVsIGF0dHJpYnV0ZVwiXG4gICAgICAgICAgICBhcmlhLWxhYmVsPVwiRGVsZXRlXCJcbiAgICAgICAgICAgIGkxOG4tdGl0bGU9XCJjb3JlR3JpZExpc3QuSXRlbS5CdG4uRGVsZXRlfEJ1dHRvbiB0aXRsZSBhdHRyaWJ1dGVcIlxuICAgICAgICAgICAgdGl0bGU9XCJEZWxldGVcIlxuICAgICAgICAgICAgZmRDb21wYWN0XG4gICAgICAgICAgICAoY2xpY2spPVwiX29uRGVsZXRlKCRldmVudClcIlxuICAgICAgICA+PC9idXR0b24+XG5cbiAgICAgICAgPHNwYW4gKm5nSWY9XCJ0eXBlID09PSAnbmF2aWdhdGlvbidcIiBjbGFzcz1cImZkLWdyaWQtbGlzdF9faXRlbS1uYXZpZ2F0aW9uLWluZGljYXRvclwiPlxuICAgICAgICAgICAgPGZkLWljb24gZ2x5cGg9XCJuYXZpZ2F0aW9uLXJpZ2h0LWFycm93XCI+PC9mZC1pY29uPlxuICAgICAgICA8L3NwYW4+XG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGVTZWxlY3RSaWdodCdcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyYWRpb1wiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2l0ZW0tYm9keVwiIFtjbGFzcy5mZC1ncmlkLWxpc3RfX2l0ZW0tYm9keS0tbm8tcGFkZGluZ109XCJub1BhZGRpbmdcIj5cbiAgICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2ZkLWdyaWQtbGlzdC1pdGVtLWltYWdlXVwiPjwvbmctY29udGVudD5cblxuICAgICAgICA8ZGl2ICpuZ0lmPVwidGl0bGUgfHwgZGVzY3JpcHRpb25cIiBjbGFzcz1cImZkLWdyaWQtbGlzdF9faXRlbS1oZWFkZXJcIj5cbiAgICAgICAgICAgIDxoNCAqbmdJZj1cInRpdGxlXCIgZmQtdGl0bGU+e3sgdGl0bGUgfX08L2g0PlxuICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkZXNjcmlwdGlvblwiIGNsYXNzPVwiZmQtZ3JpZC1saXN0X19pdGVtLXN1YnRpdGxlXCI+e3sgZGVzY3JpcHRpb24gfX08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCJib2R5Py50ZW1wbGF0ZVJlZlwiIGNsYXNzPVwiZmQtZ3JpZC1saXN0X19pdGVtLWNvbnRlbnRcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiYm9keS50ZW1wbGF0ZVJlZlwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RhdGUgfHwgZm9vdGVyQmFyQ29tcG9uZW50Py5jb250ZW50VGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJpdGVtRm9vdGVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjcmFkaW8+XG4gICAgPGlucHV0XG4gICAgICAgIFthdHRyLnRhYmluZGV4XT1cInNlbGVjdGlvbk1vZGUgPT09ICdzaW5nbGVTZWxlY3QnID8gLTEgOiAwXCJcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgY2xhc3M9XCJmZC1yYWRpbyBmZC1yYWRpby0tY29tcGFjdCBmZC1ncmlkLWxpc3RfX3JhZGlvLWlucHV0XCJcbiAgICAgICAgW3N0eWxlLmRpc3BsYXldPVwic2VsZWN0aW9uTW9kZSA9PT0gJ3NpbmdsZVNlbGVjdCcgPyAnbm9uZScgOiAnJ1wiXG4gICAgICAgIFtpZF09XCJpZCArICctcmFkaW8nXCJcbiAgICAgICAgW25hbWVdPVwiJ2ZkLWdyaWQtbGlzdC1pdGVtLXRvb2xiYXItJyArIHNlbGVjdGlvbk1vZGVcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImFyaWFMYWJlbFwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJhcmlhTGFiZWxsZWRCeVwiXG4gICAgICAgIFt2YWx1ZV09XCJ2YWx1ZVwiXG4gICAgICAgIFtuZ01vZGVsXT1cIl9zZWxlY3RlZEl0ZW1cIlxuICAgICAgICAobmdNb2RlbENoYW5nZSk9XCIkZXZlbnQgJiYgX3NlbGVjdGlvbkl0ZW0oJGV2ZW50KVwiXG4gICAgLz5cbiAgICA8bGFiZWxcbiAgICAgICAgY2xhc3M9XCJmZC1yYWRpb19fbGFiZWwgZmQtZ3JpZC1saXN0X19yYWRpby1sYWJlbFwiXG4gICAgICAgIFtmb3JdPVwiaWQgKyAnLXJhZGlvJ1wiXG4gICAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgICAobW91c2VvdmVyKT1cIl9zZXRBY3RpdmUoJGV2ZW50LCBmYWxzZSlcIlxuICAgICAgICAobW91c2VvdXQpPVwiX3NldEFjdGl2ZSgkZXZlbnQsIHRydWUpXCJcbiAgICA+PC9sYWJlbD5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjY2hlY2tib3g+XG4gICAgPGlucHV0XG4gICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgIGNsYXNzPVwiZmQtY2hlY2tib3ggZmQtY2hlY2tib3gtLWNvbXBhY3QgZmQtZ3JpZC1saXN0X19jaGVja2JveC1pbnB1dFwiXG4gICAgICAgIFtpZF09XCJpZCArICctY2hlY2tib3gnXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJhcmlhTGFiZWxcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiYXJpYUxhYmVsbGVkQnlcIlxuICAgICAgICBbbmdNb2RlbF09XCJfc2VsZWN0ZWRJdGVtXCJcbiAgICAgICAgKGNsaWNrKT1cIl9jaGVja2JveENsaWNrKCRldmVudClcIlxuICAgIC8+XG4gICAgPGxhYmVsXG4gICAgICAgIGNsYXNzPVwiZmQtY2hlY2tib3hfX2xhYmVsIGZkLWNoZWNrYm94X19sYWJlbC0tY29tcGFjdCBmZC1ncmlkLWxpc3RfX2NoZWNrYm94LWxhYmVsXCJcbiAgICAgICAgW2Zvcl09XCJpZCArICctY2hlY2tib3gnXCJcbiAgICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgPjwvbGFiZWw+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2l0ZW1Gb290ZXI+XG4gICAgPGRpdiBjbGFzcz1cImZkLWdyaWQtbGlzdF9faXRlbS1ib2R5LWFjdGlvbnNcIiAqbmdJZj1cImZvb3RlckJhckNvbXBvbmVudCB8fCBzdGF0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZm9vdGVyQmFyQ29tcG9uZW50Py5jb250ZW50VGVtcGxhdGVSZWZcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJmb290ZXJCYXJDb21wb25lbnQuY29udGVudFRlbXBsYXRlUmVmXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhZm9vdGVyQmFyQ29tcG9uZW50Py5jb250ZW50VGVtcGxhdGVSZWYgJiYgc3RhdGVcIj5cbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJzdGF0ZSA9PT0gJ2Vycm9yJ1wiXG4gICAgICAgICAgICAgICAgZmQtb2JqZWN0LXN0YXR1c1xuICAgICAgICAgICAgICAgIHN0YXR1cz1cIm5lZ2F0aXZlXCJcbiAgICAgICAgICAgICAgICBpMThuLWxhYmVsPVwiY29yZUdyaWRMaXN0Lkl0ZW0uU3RhdHVzLkNvbnRhaW5zRXJyb3JzfEVycm9yIGxhYmVsIGF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgbGFiZWw9XCJDb250YWlucyBlcnJvcnNcIlxuICAgICAgICAgICAgICAgIGkxOG4tdGl0bGU9XCJjb3JlR3JpZExpc3QuSXRlbS5TdGF0dXMuQ29udGFpbnNFcnJvcnN8RXJyb3IgdGl0bGUgYXR0cmlidXRlXCJcbiAgICAgICAgICAgICAgICB0aXRsZT1cIkNvbnRhaW5zIGVycm9yc1wiXG4gICAgICAgICAgICA+PC9zcGFuPlxuXG4gICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJmZC1ncmlkLWxpc3RfX2FjdGlvbi1idXR0b25cIlxuICAgICAgICAgICAgICAgICpuZ0lmPVwic3RhdGUgPT09ICdsb2NrZWQnXCJcbiAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgZ2x5cGg9XCJwcml2YXRlXCJcbiAgICAgICAgICAgICAgICBpMThuLWFyaWEtbGFiZWw9XCJjb3JlR3JpZExpc3QuSXRlbS5TdGF0dXMuTG9ja2VkfEJ1dHRvbiBhcmlhLWxhYmVsIGF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkxvY2tlZFwiXG4gICAgICAgICAgICAgICAgaTE4bi1sYWJlbD1cImNvcmVHcmlkTGlzdC5JdGVtLlN0YXR1cy5Mb2NrZWR8QnV0dG9uIGxhYmVsIGF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgbGFiZWw9XCJMb2NrZWRcIlxuICAgICAgICAgICAgICAgIGZkQ29tcGFjdFxuICAgICAgICAgICAgICAgIChjbGljayk9XCJfY2xpY2tPbkxvY2tlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgID48L2J1dHRvbj5cblxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIGNsYXNzPVwiZmQtZ3JpZC1saXN0X19hY3Rpb24tYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cInN0YXRlID09PSAnZHJhZnQnXCJcbiAgICAgICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgaTE4bi1hcmlhLWxhYmVsPVwiY29yZUdyaWRMaXN0Lkl0ZW0uU3RhdHVzLkRyYWZ0fEJ1dHRvbiBhcmlhLWxhYmVsIGF0dHJpYnV0ZVwiXG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD1cIkRyYWZ0XCJcbiAgICAgICAgICAgICAgICBpMThuLWxhYmVsPVwiY29yZUdyaWRMaXN0Lkl0ZW0uU3RhdHVzLkRyYWZ0fEJ1dHRvbiBsYWJlbCBhdHRyaWJ1dGVcIlxuICAgICAgICAgICAgICAgIGxhYmVsPVwiRHJhZnRcIlxuICAgICAgICAgICAgICAgIGZkQ29tcGFjdFxuICAgICAgICAgICAgICAgIChjbGljayk9XCJfY2xpY2tPbkRyYWZ0KCRldmVudClcIlxuICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=