bways-report 0.1.9 → 0.2.0

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 (93) hide show
  1. package/README.md +463 -316
  2. package/esm2022/lib/core/config/bways-report-config.mjs +29 -32
  3. package/esm2022/lib/core/models/report-datasource.model.mjs +1 -1
  4. package/esm2022/lib/core/services/report-api-execution.service.mjs +33 -11
  5. package/esm2022/lib/core/services/report-session-context.service.mjs +72 -3
  6. package/esm2022/lib/core/tokens/designer-config.token.mjs +4 -0
  7. package/esm2022/lib/core/tokens/reporting-config.token.mjs +1 -1
  8. package/esm2022/lib/core/utils/report-endpoint.util.mjs +22 -0
  9. package/esm2022/lib/core/utils/report-request-scope.mjs +48 -0
  10. package/esm2022/lib/data-access/adapters/endpoint-datasource.adapter.mjs +8 -1
  11. package/esm2022/lib/data-access/adapters/endpoint-lookup.adapter.mjs +5 -2
  12. package/esm2022/lib/data-access/adapters/endpoint-masterdata.adapter.mjs +5 -2
  13. package/esm2022/lib/data-access/adapters/endpoint-persistence.adapter.mjs +30 -14
  14. package/esm2022/lib/data-access/adapters/endpoint-schema-discovery.adapter.mjs +32 -28
  15. package/esm2022/lib/data-access/adapters/endpoint-tokens.mjs +1 -1
  16. package/esm2022/lib/data-access/adapters/http-datasource.adapter.mjs +4 -37
  17. package/esm2022/lib/data-access/adapters/http-lookup.adapter.mjs +4 -50
  18. package/esm2022/lib/data-access/adapters/http-persistence.adapter.mjs +43 -194
  19. package/esm2022/lib/data-access/adapters/http-schema-discovery.adapter.mjs +17 -65
  20. package/esm2022/lib/data-access/adapters/index.mjs +1 -1
  21. package/esm2022/lib/data-access/adapters/local-storage-persistence.adapter.mjs +13 -4
  22. package/esm2022/lib/data-access/adapters/report-id-availability.mjs +20 -0
  23. package/esm2022/lib/data-access/adapters/session-headers.mjs +11 -0
  24. package/esm2022/lib/data-access/contracts/index.mjs +1 -1
  25. package/esm2022/lib/data-access/contracts/report-persistence.contract.mjs +13 -1
  26. package/esm2022/lib/features/designer/components/design-canvas/design-canvas.component.mjs +50 -40
  27. package/esm2022/lib/features/designer/components/dialogs/report-saved-dialog.component.mjs +546 -119
  28. package/esm2022/lib/features/designer/components/property-editor/property-editor-datasource.component.mjs +12 -6
  29. package/esm2022/lib/features/designer/components/property-editor/property-editor-grid.component.mjs +9 -8
  30. package/esm2022/lib/features/designer/components/property-editor/property-editor.component.mjs +9 -4
  31. package/esm2022/lib/features/designer/components/toolbar/designer-toolbar.component.mjs +54 -32
  32. package/esm2022/lib/features/designer/designer.component.mjs +100 -67
  33. package/esm2022/lib/features/designer/rpt-report-designer.component.mjs +10 -4
  34. package/esm2022/lib/features/designer/services/designer-config.service.mjs +56 -0
  35. package/esm2022/lib/features/designer/services/designer-endpoints.service.mjs +155 -0
  36. package/esm2022/lib/features/designer/services/designer-state.service.mjs +3 -2
  37. package/esm2022/lib/features/embed/bways-report-builder.component.mjs +3 -3
  38. package/esm2022/lib/features/export/services/report-export.service.mjs +11 -6
  39. package/esm2022/lib/features/persistence/services/report-store.service.mjs +78 -23
  40. package/esm2022/lib/features/persistence/services/schema-validator.service.mjs +59 -3
  41. package/esm2022/lib/features/routing/components/routed-report-designer.component.mjs +12 -17
  42. package/esm2022/lib/features/routing/components/routed-report-runtime.component.mjs +5 -3
  43. package/esm2022/lib/features/routing/report-routes.mjs +6 -6
  44. package/esm2022/lib/features/routing/resolvers/report-route-identifier.mjs +5 -0
  45. package/esm2022/lib/features/routing/resolvers/report.resolver.mjs +3 -2
  46. package/esm2022/lib/features/runtime/report-execution.service.mjs +18 -5
  47. package/esm2022/lib/features/runtime/report-grid-bridge.component.mjs +4 -2
  48. package/esm2022/lib/features/runtime/report-runtime.component.mjs +94 -71
  49. package/esm2022/lib/features/runtime/rpt-report.component.mjs +49 -41
  50. package/esm2022/lib/primitives/components/chart-bridge/report-chart-bridge.component.mjs +7 -2
  51. package/esm2022/lib/primitives/components/icon/rpt-icon.component.mjs +13 -1
  52. package/esm2022/lib/provide-reporting.mjs +9 -29
  53. package/fesm2022/bways-report.mjs +1789 -1041
  54. package/fesm2022/bways-report.mjs.map +1 -1
  55. package/lib/core/config/bways-report-config.d.ts +14 -5
  56. package/lib/core/models/report-datasource.model.d.ts +5 -0
  57. package/lib/core/services/report-session-context.service.d.ts +9 -0
  58. package/lib/core/tokens/designer-config.token.d.ts +4 -0
  59. package/lib/core/tokens/reporting-config.token.d.ts +4 -0
  60. package/lib/core/utils/report-endpoint.util.d.ts +12 -0
  61. package/lib/core/utils/report-request-scope.d.ts +14 -0
  62. package/lib/data-access/adapters/endpoint-persistence.adapter.d.ts +6 -2
  63. package/lib/data-access/adapters/endpoint-schema-discovery.adapter.d.ts +4 -2
  64. package/lib/data-access/adapters/endpoint-tokens.d.ts +4 -0
  65. package/lib/data-access/adapters/http-datasource.adapter.d.ts +1 -3
  66. package/lib/data-access/adapters/http-lookup.adapter.d.ts +1 -3
  67. package/lib/data-access/adapters/http-persistence.adapter.d.ts +11 -16
  68. package/lib/data-access/adapters/http-schema-discovery.adapter.d.ts +3 -5
  69. package/lib/data-access/adapters/index.d.ts +1 -1
  70. package/lib/data-access/adapters/local-storage-persistence.adapter.d.ts +2 -2
  71. package/lib/data-access/adapters/report-id-availability.d.ts +6 -0
  72. package/lib/data-access/adapters/session-headers.d.ts +3 -0
  73. package/lib/data-access/contracts/index.d.ts +1 -0
  74. package/lib/data-access/contracts/report-persistence.contract.d.ts +16 -1
  75. package/lib/features/designer/components/design-canvas/design-canvas.component.d.ts +2 -0
  76. package/lib/features/designer/components/dialogs/report-saved-dialog.component.d.ts +37 -5
  77. package/lib/features/designer/components/property-editor/property-editor-datasource.component.d.ts +4 -3
  78. package/lib/features/designer/components/property-editor/property-editor-grid.component.d.ts +1 -0
  79. package/lib/features/designer/components/property-editor/property-editor.component.d.ts +1 -0
  80. package/lib/features/designer/components/toolbar/designer-toolbar.component.d.ts +7 -1
  81. package/lib/features/designer/designer.component.d.ts +15 -2
  82. package/lib/features/designer/rpt-report-designer.component.d.ts +5 -1
  83. package/lib/features/designer/services/designer-config.service.d.ts +13 -0
  84. package/lib/features/designer/services/designer-endpoints.service.d.ts +25 -0
  85. package/lib/features/persistence/services/report-store.service.d.ts +15 -1
  86. package/lib/features/persistence/services/schema-validator.service.d.ts +2 -0
  87. package/lib/features/routing/resolvers/report-route-identifier.d.ts +2 -0
  88. package/lib/features/runtime/report-execution.service.d.ts +3 -0
  89. package/lib/features/runtime/report-grid-bridge.component.d.ts +1 -0
  90. package/lib/features/runtime/report-runtime.component.d.ts +1 -0
  91. package/lib/features/runtime/rpt-report.component.d.ts +5 -0
  92. package/lib/primitives/components/chart-bridge/report-chart-bridge.component.d.ts +3 -1
  93. package/package.json +2 -1
@@ -1,3 +1,4 @@
1
+ import { DESIGNER_LOCAL_CONFIG } from '../../core/tokens/designer-config.token';
1
2
  import { ChangeDetectionStrategy, Component, computed, Directive, effect, inject, input, output, signal, ViewContainerRef, } from '@angular/core';
2
3
  import { CommonModule } from '@angular/common';
3
4
  import { GRID_COMPONENT } from '../../core/tokens/reporting-config.token';
@@ -212,6 +213,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
212
213
  }]
213
214
  }], ctorParameters: () => [] });
214
215
  export class ReportGridBridgeComponent {
216
+ designerConfig = inject(DESIGNER_LOCAL_CONFIG, { optional: true });
215
217
  injectedGrid = inject(GRID_COMPONENT, { optional: true });
216
218
  storage = inject(ReportStorageService, { optional: true });
217
219
  constructor() {
@@ -233,7 +235,7 @@ export class ReportGridBridgeComponent {
233
235
  columnDefsChange = output();
234
236
  rowClick = output();
235
237
  selectionChange = output();
236
- customGridComponent = computed(() => this.injectedGrid ?? null);
238
+ customGridComponent = computed(() => this.designerConfig?.()?.grid ?? this.injectedGrid ?? null);
237
239
  selectedRows = signal([]);
238
240
  hasRowClickAction = computed(() => {
239
241
  const def = this.gridDefinition();
@@ -950,4 +952,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
950
952
  </div>
951
953
  `, changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;width:100%;margin-top:16px;font-family:var(--rpt-font-family, inherit)}.rpt-grid-container{width:100%;min-height:480px;display:flex;flex-direction:column}:host ::ng-deep bways-grid{display:block;width:100%;height:480px;min-height:480px;--ug-footer-bg: var(--rpt-color-surface, #f8fafc);--ug-footer-color: var(--rpt-color-text-secondary, #334155);--ug-header-color: var(--rpt-color-text, #0f172a);--ug-border-color: var(--rpt-color-border, #cbd5e1);--ug-font-family: var(--rpt-font-family, inherit);--ug-font-size: var(--rpt-font-size-sm, .75rem);--ug-header-font-weight: 600}:host ::ng-deep .ug-wrapper{height:100%!important;min-height:480px!important}:host ::ng-deep .ug-viewport{min-height:350px!important}:host ::ng-deep .ug-bottom-bar,:host ::ng-deep ug-pagination{background-color:var(--rpt-color-surface, #f8fafc)!important;border-top:1px solid var(--rpt-color-border, #cbd5e1)!important;color:var(--rpt-color-text-muted, #64748b)!important;font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important}:host ::ng-deep .ug-status-bar-content,:host ::ng-deep .ug-pagination-info,:host ::ng-deep .ug-page-info{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;font-weight:500!important;color:var(--rpt-color-text-muted, #64748b)!important;font-variant-numeric:tabular-nums!important}:host ::ng-deep .ug-page-size{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;font-weight:500!important;color:var(--rpt-color-text-muted, #64748b)!important}:host ::ng-deep .ug-page-size select{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;color:var(--rpt-color-text, #0f172a)!important;border-color:var(--rpt-color-border, #cbd5e1)!important;background-color:var(--rpt-color-surface, #ffffff)!important;border-radius:var(--rpt-border-radius-sm, 4px)!important}:host ::ng-deep .ug-total-row{background-color:var(--rpt-color-surface, #f8fafc)!important;border-top:1px solid var(--rpt-color-border, #cbd5e1)!important;border-bottom:2px solid var(--rpt-color-border, #cbd5e1)!important;font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;font-weight:600!important;color:var(--rpt-color-text, #0f172a)!important;font-variant-numeric:tabular-nums!important}:host ::ng-deep .ug-total-row-label{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-xs, .6875rem)!important;font-weight:600!important;text-transform:uppercase!important;letter-spacing:.05em!important;color:var(--rpt-color-text-muted, #64748b)!important;background-color:var(--rpt-color-surface, #f8fafc)!important}:host ::ng-deep .ug-total-cell{font-family:var(--rpt-font-family, inherit)!important;font-size:var(--rpt-font-size-sm, .75rem)!important;font-weight:600!important;color:var(--rpt-color-text, #0f172a)!important;font-variant-numeric:tabular-nums!important}.rpt-table-card{background:var(--rpt-color-bg, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-lg, 8px);box-shadow:var(--rpt-box-shadow, 0 1px 3px rgba(0, 0, 0, .05));overflow:hidden}.rpt-table-toolbar{padding:12px 16px;background-color:var(--rpt-color-surface, #f8fafc);border-bottom:1px solid var(--rpt-color-border, #cbd5e1);display:flex;align-items:center;justify-content:space-between}.rpt-table-title{font-size:var(--rpt-font-size-sm, .75rem);font-weight:600;color:var(--rpt-color-text-muted, #64748b);text-transform:uppercase;letter-spacing:.05em}.rpt-table-responsive{width:100%;overflow-x:auto}.rpt-table{width:100%;border-collapse:collapse;font-size:var(--rpt-font-size-base, .875rem);text-align:left}.rpt-th{background-color:var(--rpt-color-surface, #f8fafc);padding:10px 14px;font-weight:600;font-size:var(--rpt-font-size-sm, .75rem);color:var(--rpt-color-text-muted, #475569);border-bottom:1px solid var(--rpt-color-border, #cbd5e1);white-space:nowrap;-webkit-user-select:none;user-select:none}.rpt-th.sortable{cursor:pointer}.rpt-th.sortable:hover{background-color:var(--rpt-color-surface-hover, #f1f5f9)}.rpt-th-content{display:flex;align-items:center;gap:4px}.rpt-sort-indicator{display:inline-flex;align-items:center;color:var(--rpt-color-primary, #2563eb)}.rpt-th-num,.rpt-td-num{width:48px;text-align:center;color:var(--rpt-color-text-muted, #94a3b8);font-size:var(--rpt-font-size-sm, .75rem)}.rpt-th-cb,.rpt-td-cb{width:42px;min-width:42px;max-width:42px;text-align:center;padding:8px 10px}.rpt-checkbox{width:15px;height:15px;cursor:pointer;accent-color:var(--rpt-color-primary, #2563eb);border-radius:4px;vertical-align:middle;margin:0}.rpt-td{padding:10px 14px;border-bottom:1px solid var(--rpt-color-border, #e2e8f0);color:var(--rpt-color-text, #1e293b)}.rpt-tr:hover{background-color:var(--rpt-color-surface-hover, #f8fafc)}.rpt-tr.is-selected{background-color:#eff6ff}.rpt-tr.is-selected:hover{background-color:#dbeafe}.rpt-tr.is-clickable{cursor:pointer}.rpt-tr.is-clickable:hover{background-color:#f1f5f9}.rpt-td.is-clickable-cell{cursor:pointer}.rpt-cell-action-link{color:var(--rpt-color-primary, #2563eb);font-weight:600;text-decoration:underline;text-underline-offset:2px;cursor:pointer;transition:color .15s ease}.rpt-cell-action-link:hover{color:var(--rpt-color-primary-hover, #1d4ed8)}.rpt-empty-message{text-align:center;padding:40px 20px;color:var(--rpt-color-text-muted, #94a3b8);font-style:italic}.rpt-tfoot-row{background-color:var(--rpt-color-surface, #f8fafc);border-top:1px solid var(--rpt-color-border, #cbd5e1);border-bottom:2px solid var(--rpt-color-border, #cbd5e1)}.rpt-td-aggregate{padding:8px 14px;color:var(--rpt-color-text, #0f172a);font-size:var(--rpt-font-size-sm, .75rem);line-height:1.4}.rpt-aggregate-wrap{display:inline-flex;align-items:baseline;gap:6px}.rpt-aggregate-wrap.is-right{justify-content:flex-end;width:100%}.rpt-aggregate-wrap.is-center{justify-content:center;width:100%}.rpt-aggregate-label{font-size:var(--rpt-font-size-xs, .6875rem);font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--rpt-color-text-muted, #64748b)}.rpt-aggregate-value{font-size:var(--rpt-font-size-sm, .75rem);font-weight:600;color:var(--rpt-color-text, #0f172a);font-variant-numeric:tabular-nums;font-feature-settings:\"tnum\"}.rpt-pagination-bar{display:flex;justify-content:space-between;align-items:center;padding:10px 16px;border-top:1px solid var(--rpt-color-border-subtle, #e2e8f0);background-color:var(--rpt-color-surface, #f8fafc)}.rpt-page-info{font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text-muted, #64748b);font-variant-numeric:tabular-nums}.rpt-page-buttons{display:flex;gap:8px}.rpt-page-btn{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;font-size:var(--rpt-font-size-sm, .75rem);font-weight:500;color:var(--rpt-color-text-secondary, #334155);background-color:var(--rpt-color-surface, #ffffff);border:1px solid var(--rpt-color-border, #cbd5e1);border-radius:var(--rpt-border-radius-sm, 4px);cursor:pointer;transition:all var(--rpt-transition-speed, .15s) ease}.rpt-page-btn:hover:not(:disabled){background-color:var(--rpt-color-surface-hover, #f1f5f9);border-color:var(--rpt-color-border-hover, #94a3b8);color:var(--rpt-color-text, #0f172a)}.rpt-page-btn:disabled{opacity:.5;cursor:not-allowed}\n"] }]
952
954
  }], ctorParameters: () => [] });
953
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWdyaWQtYnJpZGdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL3J1bnRpbWUvcmVwb3J0LWdyaWQtYnJpZGdlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBRU4sZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDMUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7O0FBTTNFLE1BQU0sT0FBTyxzQkFBc0I7SUFDaEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sR0FBNkIsSUFBSSxDQUFDO0lBQ3pDLElBQUksR0FBbUIsRUFBRSxDQUFDO0lBQzFCLHNCQUFzQixHQUFRLElBQUksQ0FBQztJQUNuQyxxQkFBcUIsR0FBUSxJQUFJLENBQUM7SUFDekIsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7SUFFL0MsYUFBYSxHQUFHLEtBQUssQ0FBbUIsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDMUUsV0FBVyxHQUFHLEtBQUssQ0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFDekMsTUFBTSxH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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1LVCxtQkFtU2dCLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRSZWYsXG4gIGNvbXB1dGVkLFxuICBEaXJlY3RpdmUsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgT25EZXN0cm95LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgVHlwZSxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBHUklEX0NPTVBPTkVOVCB9IGZyb20gJy4uLy4uL2NvcmUvdG9rZW5zL3JlcG9ydGluZy1jb25maWcudG9rZW4nO1xuaW1wb3J0IHsgUmVwb3J0U3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JpZENvbHVtbkRlZmluaXRpb24sIFJlcG9ydEdyaWREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWdyaWQubW9kZWwnO1xuaW1wb3J0IHsgUnB0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3ByaW1pdGl2ZXMvY29tcG9uZW50cy9pY29uL3JwdC1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBodW1hbml6ZUlkZW50aWZpZXIgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2lkZW50aWZpZXItaHVtYW5pemVyJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3JwdEdyaWRPdXRsZXRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgUnB0R3JpZE91dGxldERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmNyID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICBwcml2YXRlIGNvbXBSZWY6IENvbXBvbmVudFJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBsYXN0RW1pdHRlZFJlcG9ydFN0YXRlOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIGxhc3RFbWl0dGVkQ29sdW1uRGVmczogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHBsaWVkSW5wdXRzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcblxuICByZWFkb25seSBjb21wb25lbnRUeXBlID0gaW5wdXQ8VHlwZTxhbnk+IHwgbnVsbD4obnVsbCwgeyBhbGlhczogJ3JwdEdyaWRPdXRsZXQnIH0pO1xuICByZWFkb25seSBpbnN0YW5jZUtleSA9IGlucHV0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBpbnB1dHMgPSBpbnB1dDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oe30pO1xuICByZWFkb25seSBncmlkU3RhdGVDaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSBjb2x1bW5EZWZzQ2hhbmdlID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgcm93Q2xpY2sgPSBvdXRwdXQ8eyByb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+OyBjb2x1bW4/OiBhbnk7IGV2ZW50PzogYW55IH0+KCk7XG4gIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZSA9IG91dHB1dDxhbnlbXT4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuY29tcG9uZW50VHlwZSgpO1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5pbnN0YW5jZUtleSgpO1xuICAgICAgdGhpcy5yZWNyZWF0ZUNvbXBvbmVudCh0eXBlKTtcbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50SW5wdXRzID0gdGhpcy5pbnB1dHMoKTtcbiAgICAgIGlmICghdGhpcy5jb21wUmVmKSByZXR1cm47XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGN1cnJlbnRJbnB1dHMpKSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdyZXBvcnRTdGF0ZScpIHtcbiAgICAgICAgICAvLyBTdXBwcmVzcyBjaXJjdWxhciBpbnB1dCBlY2hvOiBpZiBpbmNvbWluZyByZXBvcnRTdGF0ZSBtYXRjaGVzIHdoYXQgdGhpcyBncmlkIGluc3RhbmNlXG4gICAgICAgICAgLy8ganVzdCBlbWl0dGVkLCBza2lwIHNldElucHV0LiBSZS1hcHBseWluZyByZXBvcnRTdGF0ZSBjYXVzZXMgbmdPbkNoYW5nZXMgLT4gYXBwbHlJbXBvcnRlZEZpbHRlcnMsXG4gICAgICAgICAgLy8gd2hpY2ggZGVzdHJveXMgY29sdW1ucyBhbmQgZGlzbWlzc2VzIGFjdGl2ZSBmaWx0ZXIgcG9wb3ZlcnMvaW5wdXRzLlxuICAgICAgICAgIGlmICh0aGlzLmxhc3RFbWl0dGVkUmVwb3J0U3RhdGUgJiYgdGhpcy5pc1JlcG9ydFN0YXRlTWF0Y2hpbmcodGhpcy5sYXN0RW1pdHRlZFJlcG9ydFN0YXRlLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5hcHBsaWVkSW5wdXRzLmhhcygncmVwb3J0U3RhdGUnKSAmJiB0aGlzLmlzUmVwb3J0U3RhdGVNYXRjaGluZyh0aGlzLmFwcGxpZWRJbnB1dHMuZ2V0KCdyZXBvcnRTdGF0ZScpLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgPT09ICdjb2x1bW5zJyB8fCBrZXkgPT09ICdjb2x1bW5EZWZzJykge1xuICAgICAgICAgIGlmICh0aGlzLmxhc3RFbWl0dGVkQ29sdW1uRGVmcyAmJiB0aGlzLmlzQ29sdW1uRGVmc01hdGNoaW5nKHRoaXMubGFzdEVtaXR0ZWRDb2x1bW5EZWZzLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5hcHBsaWVkSW5wdXRzLmhhcyhrZXkpICYmIHRoaXMuaXNDb2x1bW5EZWZzTWF0Y2hpbmcodGhpcy5hcHBsaWVkSW5wdXRzLmdldChrZXkpLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgPT09ICdjb25maWcnKSB7XG4gICAgICAgICAgY29uc3QgcHJldiA9IHRoaXMuYXBwbGllZElucHV0cy5nZXQoJ2NvbmZpZycpO1xuICAgICAgICAgIGlmIChwcmV2ICYmIEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgPT09ICdyb3dEYXRhJykge1xuICAgICAgICAgIGNvbnN0IHByZXYgPSB0aGlzLmFwcGxpZWRJbnB1dHMuZ2V0KCdyb3dEYXRhJyk7XG4gICAgICAgICAgaWYgKHByZXYgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hcHBsaWVkSW5wdXRzLmdldChrZXkpID09PSB2YWx1ZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmNhbkFjY2VwdElucHV0KGtleSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5jb21wUmVmLnNldElucHV0KGtleSwgdmFsdWUpO1xuICAgICAgICAgIHRoaXMuYXBwbGllZElucHV0cy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuQWNjZXB0SW5wdXQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY29tcFJlZikgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGNtcERlZiA9ICh0aGlzLmNvbXBSZWYuY29tcG9uZW50VHlwZSBhcyBhbnkpPy5bJ8m1Y21wJ107XG4gICAgaWYgKGNtcERlZiAmJiBjbXBEZWYuaW5wdXRzKSB7XG4gICAgICByZXR1cm4ga2V5IGluIGNtcERlZi5pbnB1dHMgfHwgT2JqZWN0LnZhbHVlcyhjbXBEZWYuaW5wdXRzKS5pbmNsdWRlcyhrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNSZXBvcnRTdGF0ZU1hdGNoaW5nKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuICAgIGlmICghYSB8fCAhYikgcmV0dXJuIGEgPT09IGI7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdldENvbXBhcmFibGUgPSAoczogYW55KSA9PiAoe1xuICAgICAgICBhY3RpdmVGaWx0ZXJzOiBzLmFjdGl2ZUZpbHRlcnMsXG4gICAgICAgIGNvbmRpdGlvbkZpbHRlcnM6IHMuY29uZGl0aW9uRmlsdGVycyxcbiAgICAgICAgc29ydE1vZGVsOiBzLnNvcnRNb2RlbCxcbiAgICAgICAgZ3JvdXBNb2RlbDogcy5ncm91cE1vZGVsLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZ2V0Q29tcGFyYWJsZShhKSkgPT09IEpTT04uc3RyaW5naWZ5KGdldENvbXBhcmFibGUoYikpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNDb2x1bW5EZWZzTWF0Y2hpbmcoYTogYW55LCBiOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGEpIHx8ICFBcnJheS5pc0FycmF5KGIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBnZXRDb21wYXJhYmxlID0gKGNvbHM6IGFueVtdKSA9PlxuICAgICAgICBjb2xzLm1hcCgoYzogYW55KSA9PiAoe1xuICAgICAgICAgIGZpZWxkOiBjLmZpZWxkLFxuICAgICAgICAgIHdpZHRoOiBjLndpZHRoLFxuICAgICAgICAgIGhpZGU6IGMuaGlkZSxcbiAgICAgICAgICBwaW5uZWQ6IGMucGlubmVkLFxuICAgICAgICB9KSk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZ2V0Q29tcGFyYWJsZShhKSkgPT09IEpTT04uc3RyaW5naWZ5KGdldENvbXBhcmFibGUoYikpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVjcmVhdGVDb21wb25lbnQodHlwZTogVHlwZTxhbnk+IHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICBpZiAoIXR5cGUpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmNvbXBSZWYgPSB0aGlzLnZjci5jcmVhdGVDb21wb25lbnQodHlwZSk7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcFJlZi5pbnN0YW5jZSBhcyBhbnk7XG5cbiAgICAgIGlmIChpbnN0YW5jZS5ncmlkU3RhdGVDaGFuZ2VkICYmIHR5cGVvZiBpbnN0YW5jZS5ncmlkU3RhdGVDaGFuZ2VkLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChcbiAgICAgICAgICBpbnN0YW5jZS5ncmlkU3RhdGVDaGFuZ2VkLnN1YnNjcmliZSgoc3RhdGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sYXN0RW1pdHRlZFJlcG9ydFN0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICB0aGlzLmdyaWRTdGF0ZUNoYW5nZS5lbWl0KHN0YXRlKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGluc3RhbmNlLnJlcG9ydFN0YXRlQ2hhbmdlICYmIHR5cGVvZiBpbnN0YW5jZS5yZXBvcnRTdGF0ZUNoYW5nZS5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goXG4gICAgICAgICAgaW5zdGFuY2UucmVwb3J0U3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKChzdGF0ZTogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxhc3RFbWl0dGVkUmVwb3J0U3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZFN0YXRlQ2hhbmdlLmVtaXQoc3RhdGUpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoaW5zdGFuY2UuY29sdW1uRGVmc0NoYW5nZWQgJiYgdHlwZW9mIGluc3RhbmNlLmNvbHVtbkRlZnNDaGFuZ2VkLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChcbiAgICAgICAgICBpbnN0YW5jZS5jb2x1bW5EZWZzQ2hhbmdlZC5zdWJzY3JpYmUoKGRlZnM6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sYXN0RW1pdHRlZENvbHVtbkRlZnMgPSBkZWZzO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzQ2hhbmdlLmVtaXQoZGVmcyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZW1pdFJvdyA9IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gZGF0YT8uZGF0YSA/PyBkYXRhPy5yb3cgPz8gZGF0YTtcbiAgICAgICAgY29uc3QgY29sID0gZGF0YT8uY29sRGVmID8/IGRhdGE/LmNvbHVtbjtcbiAgICAgICAgdGhpcy5yb3dDbGljay5lbWl0KHsgcm93LCBjb2x1bW46IGNvbCwgZXZlbnQ6IGRhdGE/LmV2ZW50IH0pO1xuICAgICAgfTtcblxuICAgICAgaWYgKGluc3RhbmNlLnJvd0NsaWNrZWQgJiYgdHlwZW9mIGluc3RhbmNlLnJvd0NsaWNrZWQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKGluc3RhbmNlLnJvd0NsaWNrZWQuc3Vic2NyaWJlKGVtaXRSb3cpKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5zdGFuY2Uucm93Q2xpY2sgJiYgdHlwZW9mIGluc3RhbmNlLnJvd0NsaWNrLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChpbnN0YW5jZS5yb3dDbGljay5zdWJzY3JpYmUoZW1pdFJvdykpO1xuICAgICAgfSBlbHNlIGlmIChpbnN0YW5jZS5jZWxsQ2xpY2tlZCAmJiB0eXBlb2YgaW5zdGFuY2UuY2VsbENsaWNrZWQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKGluc3RhbmNlLmNlbGxDbGlja2VkLnN1YnNjcmliZShlbWl0Um93KSk7XG4gICAgICB9IGVsc2UgaWYgKGluc3RhbmNlLmNlbGxDbGljayAmJiB0eXBlb2YgaW5zdGFuY2UuY2VsbENsaWNrLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChpbnN0YW5jZS5jZWxsQ2xpY2suc3Vic2NyaWJlKGVtaXRSb3cpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluc3RhbmNlLnNlbGVjdGlvbkNoYW5nZWQgJiYgdHlwZW9mIGluc3RhbmNlLnNlbGVjdGlvbkNoYW5nZWQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKFxuICAgICAgICAgIGluc3RhbmNlLnNlbGVjdGlvbkNoYW5nZWQuc3Vic2NyaWJlKChzZWxlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93cyA9IEFycmF5LmlzQXJyYXkoc2VsZWN0aW9uKSA/IHNlbGVjdGlvbiA6IChzZWxlY3Rpb24gPyBbc2VsZWN0aW9uXSA6IFtdKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQocm93cyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudElucHV0cyA9IHRoaXMuaW5wdXRzKCk7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjdXJyZW50SW5wdXRzKSkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuQWNjZXB0SW5wdXQoa2V5KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5jb21wUmVmLnNldElucHV0KGtleSwgdmFsdWUpO1xuICAgICAgICAgIHRoaXMuYXBwbGllZElucHV0cy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybignW1JwdEdyaWRPdXRsZXREaXJlY3RpdmVdIEZhaWxlZCB0byBjcmVhdGUgY3VzdG9tIGdyaWQgY29tcG9uZW50OicsIGVycik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLnN1YnMgPSBbXTtcbiAgICB0aGlzLmxhc3RFbWl0dGVkUmVwb3J0U3RhdGUgPSBudWxsO1xuICAgIHRoaXMubGFzdEVtaXR0ZWRDb2x1bW5EZWZzID0gbnVsbDtcbiAgICB0aGlzLmFwcGxpZWRJbnB1dHMuY2xlYXIoKTtcbiAgICBpZiAodGhpcy5jb21wUmVmKSB7XG4gICAgICB0aGlzLmNvbXBSZWYuZGVzdHJveSgpO1xuICAgICAgdGhpcy5jb21wUmVmID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy52Y3IuY2xlYXIoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycHQtZ3JpZC1icmlkZ2UnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBScHRJY29uQ29tcG9uZW50LCBScHRHcmlkT3V0bGV0RGlyZWN0aXZlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicnB0LWdyaWQtY29udGFpbmVyXCI+XG4gICAgICBAaWYgKGN1c3RvbUdyaWRDb21wb25lbnQoKSkge1xuICAgICAgICA8IS0tIEhvc3QtcHJvdmlkZWQgZ3JpZCBjb21wb25lbnQgKGUuZy4gQldheXMtZ3JpZCBVbHRyYUdyaWRDb21wb25lbnQpIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW3JwdEdyaWRPdXRsZXRdPVwiY3VzdG9tR3JpZENvbXBvbmVudCgpXCJcbiAgICAgICAgICBbaW5zdGFuY2VLZXldPVwiZ3JpZEluc3RhbmNlS2V5KClcIlxuICAgICAgICAgIFtpbnB1dHNdPVwiZ3JpZElucHV0cygpXCJcbiAgICAgICAgICAoZ3JpZFN0YXRlQ2hhbmdlKT1cImdyaWRTdGF0ZUNoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChjb2x1bW5EZWZzQ2hhbmdlKT1cImNvbHVtbkRlZnNDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAocm93Q2xpY2spPVwicm93Q2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDwhLS0gQnVpbHQtaW4gZmFsbGJhY2sgdGFibGUgd2hlbiBubyBleHRlcm5hbCBncmlkIGlzIHByb3ZpZGVkIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXRhYmxlLWNhcmRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXRhYmxlLXRvb2xiYXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXRhYmxlLXRpdGxlXCI+UmVzdWx0cyAoe3sgZGF0YSgpLmxlbmd0aCB9fSByb3dzKTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtdGFibGUtcmVzcG9uc2l2ZVwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwicnB0LXRhYmxlXCI+XG4gICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICBAaWYgKHNob3dSb3dOdW1iZXJzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwicnB0LXRoIHJwdC10aC1udW1cIj4jPC90aD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoaXNTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwicnB0LXRoIHJwdC10aC1jYlwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZWZmZWN0aXZlUm93U2VsZWN0aW9uKCkgIT09ICdzaW5nbGUnICYmIGlzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImlzUGFydGlhbGx5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlNlbGVjdCBhbGwgcm93c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1ucygpOyB0cmFjayBjb2wuZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtdGhcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGggfHwgJ2F1dG8nXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUudGV4dC1hbGlnbl09XCJjb2wuYWxpZ24gfHwgJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc29ydGFibGVdPVwiY29sLnNvcnRhYmxlICE9PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNvcnQoY29sKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXRoLWNvbnRlbnRcIiBbc3R5bGUuanVzdGlmeS1jb250ZW50XT1cImdldEp1c3RpZnlDb250ZW50KGNvbC5hbGlnbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvbC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY29sLnNvcnRhYmxlICE9PSBmYWxzZSAmJiBzb3J0Q29sdW1uKCkgPT09IGNvbC5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1zb3J0LWluZGljYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBbbmFtZV09XCJzb3J0RGlyZWN0aW9uKCkgPT09ICdhc2MnID8gJ2NoZXZyb24tdXAnIDogJ2NoZXZyb24tZG93bidcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgQGlmIChwYWdpbmF0ZWREYXRhKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNvbFNwYW4oKVwiIGNsYXNzPVwicnB0LWVtcHR5LW1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICBObyBkYXRhIGZvdW5kIG1hdGNoaW5nIGNyaXRlcmlhXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgQGZvciAocm93IG9mIHBhZ2luYXRlZERhdGEoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LXRyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtY2xpY2thYmxlXT1cImhhc1Jvd0NsaWNrQWN0aW9uKCkgfHwgaXNTZWxlY3Rpb25FbmFibGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dSb3dOdW1iZXJzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInJwdC10ZCBycHQtdGQtbnVtXCI+e3sgKGN1cnJlbnRQYWdlKCkgLSAxKSAqIHBhZ2VTaXplKCkgKyAkaW5kZXggKyAxIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChpc1NlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicnB0LXRkIHJwdC10ZC1jYlwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiZWZmZWN0aXZlUm93U2VsZWN0aW9uKCkgPT09ICdzaW5nbGUnID8gJ3JhZGlvJyA6ICdjaGVja2JveCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJycHQtZmFsbGJhY2stc2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVJvd1NlbGVjdGlvbihyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sIG9mIHZpc2libGVDb2x1bW5zKCk7IHRyYWNrIGNvbC5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LXRkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPVwiY29sLmFsaWduIHx8ICdsZWZ0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1jbGlja2FibGUtY2VsbF09XCIhIWNvbC5hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DZWxsQ2xpY2socm93LCBjb2wsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbC5hY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1jZWxsLWFjdGlvbi1saW5rXCI+e3sgZm9ybWF0VmFsdWUocm93W2NvbC5maWVsZF0sIGNvbCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdFZhbHVlKHJvd1tjb2wuZmllbGRdLCBjb2wpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgQGlmIChoYXNBZ2dyZWdhdGVzKCkpIHtcbiAgICAgICAgICAgICAgICA8dGZvb3Q+XG4gICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJycHQtdGZvb3Qtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd1Jvd051bWJlcnMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInJwdC10ZC1udW1cIj48L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaXNTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJycHQtdGQtY2JcIj48L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1ucygpOyB0cmFjayBjb2wuZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJycHQtdGQtYWdncmVnYXRlXCIgW3N0eWxlLnRleHQtYWxpZ25dPVwiY29sLmFsaWduIHx8ICdsZWZ0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjb2wuYWdncmVnYXRlICYmIGNvbC5hZ2dyZWdhdGUgIT09ICdub25lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWFnZ3JlZ2F0ZS13cmFwXCIgW2NsYXNzLmlzLXJpZ2h0XT1cImNvbC5hbGlnbiA9PT0gJ3JpZ2h0J1wiIFtjbGFzcy5pcy1jZW50ZXJdPVwiY29sLmFsaWduID09PSAnY2VudGVyJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWFnZ3JlZ2F0ZS1sYWJlbFwiPnt7IGNvbC5hZ2dyZWdhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtYWdncmVnYXRlLXZhbHVlXCI+e3sgY29tcHV0ZUFnZ3JlZ2F0ZShjb2wpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGZvb3Q+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICBAaWYgKGlzUGFnaW5hdGlvbkVuYWJsZWQoKSAmJiB0b3RhbFBhZ2VzKCkgPiAxKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXBhZ2luYXRpb24tYmFyXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXBhZ2UtaW5mb1wiPlxuICAgICAgICAgICAgICAgIFBhZ2Uge3sgY3VycmVudFBhZ2UoKSB9fSBvZiB7eyB0b3RhbFBhZ2VzKCkgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXBhZ2UtYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtcGFnZS1idG5cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlKCkgPT09IDFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZQYWdlKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiYXJyb3ctbGVmdFwiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPlByZXZpb3VzPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtcGFnZS1idG5cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlKCkgPT09IHRvdGFsUGFnZXMoKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwibmV4dFBhZ2UoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+TmV4dDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiYXJyb3ctcmlnaHRcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgfVxuICAgIC5ycHQtZ3JpZC1jb250YWluZXIge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiA0ODBweDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgYndheXMtZ3JpZCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiA0ODBweDtcbiAgICAgIG1pbi1oZWlnaHQ6IDQ4MHB4O1xuICAgICAgLS11Zy1mb290ZXItYmc6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICAgIC0tdWctZm9vdGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1zZWNvbmRhcnksICMzMzQxNTUpO1xuICAgICAgLS11Zy1oZWFkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIC0tdWctYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIC0tdWctZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgICAtLXVnLWZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICAtLXVnLWhlYWRlci1mb250LXdlaWdodDogNjAwO1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXdyYXBwZXIge1xuICAgICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICBtaW4taGVpZ2h0OiA0ODBweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXZpZXdwb3J0IHtcbiAgICAgIG1pbi1oZWlnaHQ6IDM1MHB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctYm90dG9tLWJhcixcbiAgICA6aG9zdCA6Om5nLWRlZXAgdWctcGFnaW5hdGlvbiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYykgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKSAhaW1wb3J0YW50O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1zdGF0dXMtYmFyLWNvbnRlbnQsXG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdpbmF0aW9uLWluZm8sXG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdlLWluZm8ge1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDAgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4YikgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXMgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdlLXNpemUge1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDAgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4YikgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdlLXNpemUgc2VsZWN0IHtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pICFpbXBvcnRhbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpICFpbXBvcnRhbnQ7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2ZmZmZmZikgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLXNtLCA0cHgpICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctdG90YWwtcm93IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKSAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXdlaWdodDogNjAwICFpbXBvcnRhbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctdG90YWwtcm93LWxhYmVsIHtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUteHMsIDAuNjg3NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2UgIWltcG9ydGFudDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW0gIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4YikgIWltcG9ydGFudDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXRvdGFsLWNlbGwge1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXMgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLnJwdC10YWJsZS1jYXJkIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1iZywgI2ZmZmZmZik7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLWxnLCA4cHgpO1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LWJveC1zaGFkb3csIDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDUpKTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuICAgIC5ycHQtdGFibGUtdG9vbGJhciB7XG4gICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICB9XG4gICAgLnJwdC10YWJsZS10aXRsZSB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICB9XG4gICAgLnJwdC10YWJsZS1yZXNwb25zaXZlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICB9XG4gICAgLnJwdC10YWJsZSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtYmFzZSwgMC44NzVyZW0pO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG4gICAgLnJwdC10aCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgICBwYWRkaW5nOiAxMHB4IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzQ3NTU2OSk7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgfVxuICAgIC5ycHQtdGguc29ydGFibGUge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgICAucnB0LXRoLnNvcnRhYmxlOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjFmNWY5KTtcbiAgICB9XG4gICAgLnJwdC10aC1jb250ZW50IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA0cHg7XG4gICAgfVxuICAgIC5ycHQtc29ydC1pbmRpY2F0b3Ige1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICB9XG4gICAgLnJwdC10aC1udW0sIC5ycHQtdGQtbnVtIHtcbiAgICAgIHdpZHRoOiA0OHB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjOTRhM2I4KTtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgfVxuICAgIC5ycHQtdGgtY2IsIC5ycHQtdGQtY2Ige1xuICAgICAgd2lkdGg6IDQycHg7XG4gICAgICBtaW4td2lkdGg6IDQycHg7XG4gICAgICBtYXgtd2lkdGg6IDQycHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBwYWRkaW5nOiA4cHggMTBweDtcbiAgICB9XG4gICAgLnJwdC1jaGVja2JveCB7XG4gICAgICB3aWR0aDogMTVweDtcbiAgICAgIGhlaWdodDogMTVweDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGFjY2VudC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gICAgLnJwdC10ZCB7XG4gICAgICBwYWRkaW5nOiAxMHB4IDE0cHg7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2UyZThmMCk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMxZTI5M2IpO1xuICAgIH1cbiAgICAucnB0LXRyOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjhmYWZjKTtcbiAgICB9XG4gICAgLnJwdC10ci5pcy1zZWxlY3RlZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWZmNmZmO1xuICAgIH1cbiAgICAucnB0LXRyLmlzLXNlbGVjdGVkOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkYmVhZmU7XG4gICAgfVxuICAgIC5ycHQtdHIuaXMtY2xpY2thYmxlIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gICAgLnJwdC10ci5pcy1jbGlja2FibGU6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjVmOTtcbiAgICB9XG4gICAgLnJwdC10ZC5pcy1jbGlja2FibGUtY2VsbCB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuICAgIC5ycHQtY2VsbC1hY3Rpb24tbGluayB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAycHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBjb2xvciAxNTBtcyBlYXNlO1xuICAgIH1cbiAgICAucnB0LWNlbGwtYWN0aW9uLWxpbms6aG92ZXIge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICB9XG4gICAgLnJwdC1lbXB0eS1tZXNzYWdlIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHBhZGRpbmc6IDQwcHggMjBweDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzk0YTNiOCk7XG4gICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgfVxuICAgIC5ycHQtdGZvb3Qtcm93IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICB9XG4gICAgLnJwdC10ZC1hZ2dyZWdhdGUge1xuICAgICAgcGFkZGluZzogOHB4IDE0cHg7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLXdyYXAge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgICBnYXA6IDZweDtcbiAgICB9XG4gICAgLnJwdC1hZ2dyZWdhdGUtd3JhcC5pcy1yaWdodCB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLXdyYXAuaXMtY2VudGVyIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLWxhYmVsIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS14cywgMC42ODc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLXZhbHVlIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICd0bnVtJztcbiAgICB9XG4gICAgLnJwdC1wYWdpbmF0aW9uLWJhciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLXN1YnRsZSwgI2UyZThmMCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgfVxuICAgIC5ycHQtcGFnZS1pbmZvIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgfVxuICAgIC5ycHQtcGFnZS1idXR0b25zIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBnYXA6IDhweDtcbiAgICB9XG4gICAgLnJwdC1wYWdlLWJ0biB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDVweDtcbiAgICAgIHBhZGRpbmc6IDRweCAxMHB4O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtc2Vjb25kYXJ5LCAjMzM0MTU1KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZmZmZmZmKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMtc20sIDRweCk7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQsIDE1MG1zKSBlYXNlO1xuICAgIH1cbiAgICAucnB0LXBhZ2UtYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjFmNWY5KTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1ob3ZlciwgIzk0YTNiOCk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgIH1cbiAgICAucnB0LXBhZ2UtYnRuOmRpc2FibGVkIHtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgfVxuICBgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFJlcG9ydEdyaWRCcmlkZ2VDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGluamVjdGVkR3JpZCA9IGluamVjdChHUklEX0NPTVBPTkVOVCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdG9yYWdlID0gaW5qZWN0KFJlcG9ydFN0b3JhZ2VTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICh0aGlzLnN0b3JhZ2UpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IGxlZ2FjeURlZmF1bHQgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYndheXNfZ3JpZF9yZXBvcnRfc3RhdGVfZGVmYXVsdCcpO1xuICAgICAgICBpZiAobGVnYWN5RGVmYXVsdCAmJiAhbGVnYWN5RGVmYXVsdC5pbmNsdWRlcygnX3ZlcnNpb25fJykpIHtcbiAgICAgICAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbSgnYndheXNfZ3JpZF9yZXBvcnRfc3RhdGVfZGVmYXVsdCcpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgLy8gU2lsZW50bHkgaWdub3JlIHJlc3RyaWN0ZWQgc3RvcmFnZSBlbnZpcm9ubWVudHMgKGUuZy4gc2FuZGJveGVkIGlmcmFtZXMpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVhZG9ubHkgZ3JpZERlZmluaXRpb24gPSBpbnB1dC5yZXF1aXJlZDxSZXBvcnRHcmlkRGVmaW5pdGlvbj4oKTtcbiAgcmVhZG9ubHkgZGF0YSA9IGlucHV0PHVua25vd25bXT4oW10pO1xuXG4gIHJlYWRvbmx5IGdyaWRTdGF0ZUNoYW5nZSA9IG91dHB1dDxhbnk+KCk7XG4gIHJlYWRvbmx5IGNvbHVtbkRlZnNDaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSByb3dDbGljayA9IG91dHB1dDx7IHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47IGNvbHVtbj86IEdyaWRDb2x1bW5EZWZpbml0aW9uOyBldmVudD86IE1vdXNlRXZlbnQgfT4oKTtcbiAgcmVhZG9ubHkgc2VsZWN0aW9uQ2hhbmdlID0gb3V0cHV0PGFueVtdPigpO1xuXG4gIHJlYWRvbmx5IGN1c3RvbUdyaWRDb21wb25lbnQgPSBjb21wdXRlZDxUeXBlPHVua25vd24+IHwgbnVsbD4oKCkgPT4gdGhpcy5pbmplY3RlZEdyaWQgPz8gbnVsbCk7XG4gIHJlYWRvbmx5IHNlbGVjdGVkUm93cyA9IHNpZ25hbDxhbnlbXT4oW10pO1xuXG4gIHJlYWRvbmx5IGhhc1Jvd0NsaWNrQWN0aW9uID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRlZiA9IHRoaXMuZ3JpZERlZmluaXRpb24oKTtcbiAgICByZXR1cm4gISEoXG4gICAgICBkZWY/LnJvd0NsaWNrQWN0aW9uIHx8XG4gICAgICBkZWY/Lm9wdGlvbnM/LnJvd0NsaWNrQWN0aW9uIHx8XG4gICAgICB0aGlzLnZpc2libGVDb2x1bW5zKCkuc29tZSgoYykgPT4gISFjLmFjdGlvbilcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBpc0NoZWNrYm94U2VsZWN0aW9uRW5hYmxlZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zO1xuICAgIGlmIChvcHRzPy5jaGVja2JveFNlbGVjdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gb3B0cy5jaGVja2JveFNlbGVjdGlvbjtcbiAgICB9XG4gICAgaWYgKG9wdHM/LnNlbGVjdGFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29sdW1ucygpLnNvbWUoKGMpID0+IGMuY2hlY2tib3hTZWxlY3Rpb24pO1xuICB9KTtcblxuICByZWFkb25seSBlZmZlY3RpdmVSb3dTZWxlY3Rpb24gPSBjb21wdXRlZDwnc2luZ2xlJyB8ICdtdWx0aXBsZSc+KCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zO1xuICAgIHJldHVybiBvcHRzPy5zZWxlY3Rpb25Nb2RlIHx8IG9wdHM/LnJvd1NlbGVjdGlvbiB8fCAnbXVsdGlwbGUnO1xuICB9KTtcblxuICByZWFkb25seSBpc0hlYWRlckNoZWNrYm94U2VsZWN0aW9uRW5hYmxlZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICBpZiAodGhpcy5lZmZlY3RpdmVSb3dTZWxlY3Rpb24oKSA9PT0gJ3NpbmdsZScpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuZ3JpZERlZmluaXRpb24oKT8ub3B0aW9ucztcbiAgICBpZiAob3B0cz8uaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG9wdHMuaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb247XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmlzQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlzU2VsZWN0aW9uRW5hYmxlZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zO1xuICAgIHJldHVybiAhIShvcHRzPy5zZWxlY3RhYmxlIHx8IG9wdHM/LmNoZWNrYm94U2VsZWN0aW9uIHx8IHRoaXMudmlzaWJsZUNvbHVtbnMoKS5zb21lKChjKSA9PiBjLmNoZWNrYm94U2VsZWN0aW9uKSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNvcnRDb2x1bW4gPSBzaWduYWw8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG4gIHJlYWRvbmx5IHNvcnREaXJlY3Rpb24gPSBzaWduYWw8J2FzYycgfCAnZGVzYyc+KCdhc2MnKTtcbiAgcmVhZG9ubHkgY3VycmVudFBhZ2UgPSBzaWduYWw8bnVtYmVyPigxKTtcbiAgcmVhZG9ubHkgdmlzaWJsZUNvbHVtbnMgPSBjb21wdXRlZDxHcmlkQ29sdW1uRGVmaW5pdGlvbltdPigoKSA9PiB7XG4gICAgY29uc3QgZGVmaW5lZCA9ICh0aGlzLmdyaWREZWZpbml0aW9uKCk/LmNvbHVtbnMgPz8gW10pLmZpbHRlcigoYykgPT4gYy52aXNpYmxlICE9PSBmYWxzZSk7XG4gICAgY29uc3Qgcm93cyA9IHRoaXMuZGF0YSgpO1xuICAgIGlmIChyb3dzICYmIHJvd3MubGVuZ3RoID4gMCAmJiB0eXBlb2Ygcm93c1swXSA9PT0gJ29iamVjdCcgJiYgcm93c1swXSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgZmlyc3RSb3cgPSByb3dzWzBdIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGZpcnN0Um93KS5maWx0ZXIoKGspID0+IGsudHJpbSgpLmxlbmd0aCA+IDApO1xuICAgICAgY29uc3QgbWF0Y2hlc0FueSA9IGRlZmluZWQuc29tZSgoYykgPT4ga2V5cy5pbmNsdWRlcyhjLmZpZWxkKSk7XG4gICAgICAvLyBJZiBubyBjb2x1bW5zIGFyZSBkZWZpbmVkLCBvciB0aGUgZGVmaW5lZCBjb2x1bW5zIGRvbid0IG1hdGNoIGFueSBmaWVsZCBpbiB0aGUgZGF0YSAoZS5nLiBkdW1teSBpZC9uYW1lIGRlZmF1bHRzKTpcbiAgICAgIGlmICgoZGVmaW5lZC5sZW5ndGggPT09IDAgfHwgIW1hdGNoZXNBbnkpICYmIGtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4ga2V5cy5tYXAoKGspID0+ICh7XG4gICAgICAgICAgZmllbGQ6IGssXG4gICAgICAgICAgbGFiZWw6IGh1bWFuaXplSWRlbnRpZmllcihrKSxcbiAgICAgICAgICBkYXRhVHlwZTogdHlwZW9mIGZpcnN0Um93W2tdID09PSAnbnVtYmVyJyA/ICdudW1iZXInIDogdHlwZW9mIGZpcnN0Um93W2tdID09PSAnYm9vbGVhbicgPyAnYm9vbGVhbicgOiAnc3RyaW5nJyxcbiAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxuICAgICAgICAgIHNvcnRhYmxlOiB0cnVlLFxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkZWZpbmVkO1xuICB9KTtcblxuICByZWFkb25seSBicmlkZ2VkQ29sdW1ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBpc0dyaWRDaGVja2JveCA9IHRoaXMuaXNDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQoKTtcbiAgICBjb25zdCBpc0dyaWRIZWFkZXJDaGVja2JveCA9IHRoaXMuaXNIZWFkZXJDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQoKTtcbiAgICBjb25zdCBoYXNFeHBsaWNpdENvbENoZWNrYm94ID0gdGhpcy52aXNpYmxlQ29sdW1ucygpLnNvbWUoKGMpID0+IGMuY2hlY2tib3hTZWxlY3Rpb24pO1xuXG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnMoKS5tYXAoKGNvbCwgaWR4KSA9PiB7XG4gICAgICBsZXQgd2lkdGhOdW06IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0eXBlb2YgY29sLndpZHRoID09PSAnc3RyaW5nJyAmJiBjb2wud2lkdGguZW5kc1dpdGgoJ3B4JykpIHtcbiAgICAgICAgd2lkdGhOdW0gPSBwYXJzZUludChjb2wud2lkdGgsIDEwKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIChjb2wud2lkdGggYXMgdW5rbm93bikgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHdpZHRoTnVtID0gY29sLndpZHRoIGFzIHVua25vd24gYXMgbnVtYmVyO1xuICAgICAgfVxuXG4gICAgICBsZXQgY29sQ2hlY2tib3hTZWxlY3Rpb246IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBjb2wuY2hlY2tib3hTZWxlY3Rpb247XG4gICAgICBsZXQgY29sSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb246IGJvb2xlYW4gfCB1bmRlZmluZWQgPSBjb2wuaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb247XG5cbiAgICAgIGlmICghaGFzRXhwbGljaXRDb2xDaGVja2JveCAmJiBpc0dyaWRDaGVja2JveCAmJiBpZHggPT09IDApIHtcbiAgICAgICAgY29sQ2hlY2tib3hTZWxlY3Rpb24gPSB0cnVlO1xuICAgICAgICBjb2xIZWFkZXJDaGVja2JveFNlbGVjdGlvbiA9IGlzR3JpZEhlYWRlckNoZWNrYm94O1xuICAgICAgfVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5jb2wsXG4gICAgICAgIGhlYWRlck5hbWU6IGNvbC5sYWJlbCwgLy8gQldheXMtZ3JpZCAvIEFHIEdyaWQgc3RhbmRhcmRcbiAgICAgICAgaGVhZGVyOiBjb2wubGFiZWwsXG4gICAgICAgIHRpdGxlOiBjb2wubGFiZWwsXG4gICAgICAgIGhpZGU6IGNvbC52aXNpYmxlID09PSBmYWxzZSxcbiAgICAgICAgd2lkdGg6IHdpZHRoTnVtLFxuICAgICAgICBhZ2dGdW5jOiBjb2wuYWdncmVnYXRlICYmIGNvbC5hZ2dyZWdhdGUgIT09ICdub25lJyA/IGNvbC5hZ2dyZWdhdGUgOiB1bmRlZmluZWQsXG4gICAgICAgIGNoZWNrYm94U2VsZWN0aW9uOiBjb2xDaGVja2JveFNlbGVjdGlvbixcbiAgICAgICAgaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb246IGNvbEhlYWRlckNoZWNrYm94U2VsZWN0aW9uLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZ3JpZEluc3RhbmNlS2V5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5kYXRhU291cmNlSWQgfHwgJ2N1c3RvbSc7XG4gICAgY29uc3QgY29scyA9IHRoaXMudmlzaWJsZUNvbHVtbnMoKS5tYXAoKGMpID0+IGMuZmllbGQpLmpvaW4oJ18nKTtcbiAgICByZXR1cm4gYCR7ZHN9XyR7Y29sc31gO1xuICB9KTtcblxuICByZWFkb25seSBncmlkU3RhdGVLZXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgZHMgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk/LmRhdGFTb3VyY2VJZCB8fCAnY3VzdG9tJztcbiAgICBjb25zdCBhbGxDb2xzID0gdGhpcy52aXNpYmxlQ29sdW1ucygpLm1hcCgoYykgPT4gYy5maWVsZCk7XG4gICAgY29uc3QgY291bnQgPSBhbGxDb2xzLmxlbmd0aDtcbiAgICBjb25zdCBjb2xzU2lnID0gYWxsQ29scy5zbGljZSgwLCA1KS5qb2luKCdfJyk7XG4gICAgcmV0dXJuIGBycHRfJHtkc31fJHtjb3VudH1fJHtjb2xzU2lnIHx8ICdncmlkJ31gO1xuICB9KTtcblxuICByZWFkb25seSBncmlkQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk/Lm9wdGlvbnMgfHwge307XG4gICAgY29uc3Qgcm93U2VsID0gdGhpcy5lZmZlY3RpdmVSb3dTZWxlY3Rpb24oKTtcbiAgICBjb25zdCBoYXNDaGVja2JveCA9IHRoaXMuaXNDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQoKTtcbiAgICBjb25zdCBoYXNIZWFkZXJDaGVja2JveCA9IHRoaXMuaXNIZWFkZXJDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQoKTtcblxuICAgIHJldHVybiB7XG4gICAgICBzaWRlQmFyOiBvcHRzLnNpZGVCYXIgIT09IHVuZGVmaW5lZCA/IG9wdHMuc2lkZUJhciA6IHRydWUsXG4gICAgICBzdGF0dXNCYXI6IG9wdHMuc3RhdHVzQmFyICE9PSB1bmRlZmluZWQgPyBvcHRzLnN0YXR1c0JhciA6IHRydWUsXG4gICAgICBnbG9iYWxTZWFyY2g6IG9wdHMuZ2xvYmFsU2VhcmNoICE9PSB1bmRlZmluZWQgPyBvcHRzLmdsb2JhbFNlYXJjaCA6IHRydWUsXG4gICAgICAuLi5vcHRzLFxuICAgICAgcm93U2VsZWN0aW9uOiByb3dTZWwsXG4gICAgICBzZWxlY3Rpb25Nb2RlOiByb3dTZWwsXG4gICAgICBjaGVja2JveFNlbGVjdGlvbjogaGFzQ2hlY2tib3gsXG4gICAgICBoZWFkZXJDaGVja2JveFNlbGVjdGlvbjogaGFzSGVhZGVyQ2hlY2tib3gsXG4gICAgICBzdGF0ZUtleTogdGhpcy5ncmlkU3RhdGVLZXkoKSxcbiAgICB9O1xuICB9KTtcblxuICBwcml2YXRlIHJlY29uY2lsZUNvbHVtbkdyb3VwRGVmcyhcbiAgICBncm91cERlZnM6IGFueVtdIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgICBjdXJyZW50Q29sdW1uczogYW55W11cbiAgKTogYW55W10gfCBudWxsIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoZ3JvdXBEZWZzKSB8fCBncm91cERlZnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgY3VycmVudEZpZWxkcyA9IG5ldyBTZXQoY3VycmVudENvbHVtbnMubWFwKChjKSA9PiBjLmZpZWxkKSk7XG4gICAgY29uc3QgbGVhZkZpZWxkczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBjb2xsZWN0TGVhdmVzID0gKGRlZnM6IGFueVtdKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGQgb2YgZGVmcykge1xuICAgICAgICBpZiAoZCAmJiBBcnJheS5pc0FycmF5KGQuY2hpbGRyZW4pKSB7XG4gICAgICAgICAgY29sbGVjdExlYXZlcyhkLmNoaWxkcmVuKTtcbiAgICAgICAgfSBlbHNlIGlmIChkICYmIGQuZmllbGQpIHtcbiAgICAgICAgICBsZWFmRmllbGRzLnB1c2goZC5maWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbGxlY3RMZWF2ZXMoZ3JvdXBEZWZzKTtcblxuICAgIC8vIElmIGxlYWYgZmllbGRzIGluIGdyb3VwRGVmcyBkb24ndCBtYXRjaCB0aGUgY3VycmVudCBhY3RpdmUgY29sdW1ucyAoZS5nLiBkdW1teSBpZC9uYW1lIGZyb20gcHJldmlvdXMgdGVtcGxhdGUpLFxuICAgIC8vIG9yIGlmIHRoZSBncm91cCBkZWZpbml0aW9uIG9ubHkgaGFkIGR1bW15IHRlbXBsYXRlIGNvbHVtbnMgKDw9IDIpIHdoaWxlIGN1cnJlbnRDb2x1bW5zIGlzIGEgZnVsbCBkYXRhc2V0ICg+IDUpLFxuICAgIC8vIHRoZSBzYXZlZCBncm91cERlZnMgaXMgb2Jzb2xldGUgYW5kIG11c3QgYmUgY2xlYXJlZCBzbyB0aGUgZ3JpZCBjYW4gcmVuZGVyIGFsbCBjdXJyZW50IGNvbHVtbnMgY2xlYW5seS5cbiAgICBjb25zdCB2YWxpZExlYXZlcyA9IGxlYWZGaWVsZHMuZmlsdGVyKChmKSA9PiBjdXJyZW50RmllbGRzLmhhcyhmKSk7XG4gICAgaWYgKHZhbGlkTGVhdmVzLmxlbmd0aCA9PT0gMCB8fCAobGVhZkZpZWxkcy5sZW5ndGggPD0gMiAmJiBjdXJyZW50Q29sdW1ucy5sZW5ndGggPiA1ICYmIHZhbGlkTGVhdmVzLmxlbmd0aCA8PSAyKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gSWYgc29tZSBjb2x1bW5zIGFyZSBncm91cGVkLCBidXQgbmV3IGNvbHVtbnMgd2VyZSBhZGRlZC9kZXRlY3RlZCB0aGF0IGFyZW4ndCBpbiBncm91cERlZnMsXG4gICAgLy8gYXBwZW5kIHRoZSByZW1haW5pbmcgY29sdW1ucyBzbyB0aGF0IFVsdHJhR3JpZCdzIGZsYXR0ZW5Db2x1bW5EZWZzIHdpbGwgaW5jbHVkZSBBTEwgY29sdW1ucy5cbiAgICBjb25zdCBsZWFmU2V0ID0gbmV3IFNldChsZWFmRmllbGRzKTtcbiAgICBjb25zdCBtaXNzaW5nQ29sdW1ucyA9IGN1cnJlbnRDb2x1bW5zLmZpbHRlcigoYykgPT4gIWxlYWZTZXQuaGFzKGMuZmllbGQpKTtcbiAgICBpZiAobWlzc2luZ0NvbHVtbnMubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIFsuLi5ncm91cERlZnMsIC4uLm1pc3NpbmdDb2x1bW5zXTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3JvdXBEZWZzO1xuICB9XG5cbiAgcmVhZG9ubHkgZ3JpZFJlcG9ydFN0YXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk/Lm9wdGlvbnM7XG4gICAgY29uc3QgZXhpc3RpbmcgPSAob3B0cz8ucmVwb3J0U3RhdGUgYXMgYW55KSB8fCB7fTtcbiAgICBjb25zdCBicmlkZ2VkID0gdGhpcy5icmlkZ2VkQ29sdW1ucygpO1xuICAgIGNvbnN0IGVmZmVjdGl2ZUdyb3VwRGVmcyA9IHRoaXMucmVjb25jaWxlQ29sdW1uR3JvdXBEZWZzKGV4aXN0aW5nLmNvbHVtbkdyb3VwRGVmcywgYnJpZGdlZCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICBjb2x1bW5Hcm91cERlZnM6IGVmZmVjdGl2ZUdyb3VwRGVmcyxcbiAgICAgIGNvbHVtbkRlZnM6IGJyaWRnZWQsXG4gICAgICBzb3J0TW9kZWw6IChvcHRzPy5zb3J0TW9kZWwgYXMgYW55KSB8fCBleGlzdGluZy5zb3J0TW9kZWwgfHwgW10sXG4gICAgICBncm91cE1vZGVsOiBvcHRzPy5ncm91cE1vZGVsIHx8IGV4aXN0aW5nLmdyb3VwTW9kZWwgfHwgW10sXG4gICAgICBhY3RpdmVGaWx0ZXJzOiBleGlzdGluZy5hY3RpdmVGaWx0ZXJzIHx8IHt9LFxuICAgICAgY29uZGl0aW9uRmlsdGVyczogZXhpc3RpbmcuY29uZGl0aW9uRmlsdGVycyB8fCB7fSxcbiAgICAgIGhpZ2hsaWdodFJ1bGVzOiBleGlzdGluZy5oaWdobGlnaHRSdWxlcyB8fCBbXSxcbiAgICB9O1xuICB9KTtcblxuICByZWFkb25seSBncmlkSW5wdXRzID0gY29tcHV0ZWQoKCkgPT4gKHtcbiAgICBjb2x1bW5zOiB0aGlzLmJyaWRnZWRDb2x1bW5zKCksXG4gICAgY29sdW1uRGVmczogdGhpcy5icmlkZ2VkQ29sdW1ucygpLFxuICAgIHJvd0RhdGE6IHRoaXMuZGF0YSgpLFxuICAgIGNvbmZpZzogdGhpcy5ncmlkQ29uZmlnKCksXG4gICAgcmVwb3J0U3RhdGU6IHRoaXMuZ3JpZFJlcG9ydFN0YXRlKCksXG4gICAgcGFnaW5hdGlvbjogdGhpcy5ncmlkRGVmaW5pdGlvbigpLm9wdGlvbnM/LnBhZ2luYXRpb24gIT09IGZhbHNlLFxuICAgIHBhZ2VTaXplOiB0aGlzLmdyaWREZWZpbml0aW9uKCkub3B0aW9ucz8ucGFnZVNpemUgPz8gMTAsXG4gIH0pKTtcblxuICByZWFkb25seSBzaG93Um93TnVtYmVycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gISF0aGlzLmdyaWREZWZpbml0aW9uKCkub3B0aW9ucz8uc2hvd1Jvd051bWJlcnM7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGlzUGFnaW5hdGlvbkVuYWJsZWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZERlZmluaXRpb24oKS5vcHRpb25zPy5wYWdpbmF0aW9uICE9PSBmYWxzZTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgcGFnZVNpemUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuZ3JpZERlZmluaXRpb24oKS5vcHRpb25zPy5wYWdlU2l6ZSA/PyAxMDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgY29sU3BhbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlQ29sdW1ucygpLmxlbmd0aCArICh0aGlzLnNob3dSb3dOdW1iZXJzKCkgPyAxIDogMCkgKyAodGhpcy5pc1NlbGVjdGlvbkVuYWJsZWQoKSA/IDEgOiAwKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaGFzQWdncmVnYXRlcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgdGhpcy5ncmlkRGVmaW5pdGlvbigpLm9wdGlvbnM/LnNob3dGb290ZXIgJiZcbiAgICAgIHRoaXMudmlzaWJsZUNvbHVtbnMoKS5zb21lKChjKSA9PiBjLmFnZ3JlZ2F0ZSAmJiBjLmFnZ3JlZ2F0ZSAhPT0gJ25vbmUnKVxuICAgICk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHNvcnRlZERhdGEgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPigoKSA9PiB7XG4gICAgY29uc3QgcmF3ID0gKHRoaXMuZGF0YSgpIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+W10pIHx8IFtdO1xuICAgIGNvbnN0IGNvbCA9IHRoaXMuc29ydENvbHVtbigpO1xuICAgIGNvbnN0IGRpciA9IHRoaXMuc29ydERpcmVjdGlvbigpO1xuXG4gICAgaWYgKCFjb2wpIHJldHVybiByYXc7XG5cbiAgICByZXR1cm4gWy4uLnJhd10uc29ydCgoYSwgYikgPT4ge1xuICAgICAgY29uc3QgdmFsQSA9IGFbY29sXTtcbiAgICAgIGNvbnN0IHZhbEIgPSBiW2NvbF07XG4gICAgICBpZiAodmFsQSA9PSBudWxsICYmIHZhbEIgPT0gbnVsbCkgcmV0dXJuIDA7XG4gICAgICBpZiAodmFsQSA9PSBudWxsKSByZXR1cm4gMTtcbiAgICAgIGlmICh2YWxCID09IG51bGwpIHJldHVybiAtMTtcbiAgICAgIGlmICh2YWxBIDwgdmFsQikgcmV0dXJuIGRpciA9PT0gJ2FzYycgPyAtMSA6IDE7XG4gICAgICBpZiAodmFsQSA+IHZhbEIpIHJldHVybiBkaXIgPT09ICdhc2MnID8gMSA6IC0xO1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHRvdGFsUGFnZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgaWYgKCF0aGlzLmlzUGFnaW5hdGlvbkVuYWJsZWQoKSkgcmV0dXJuIDE7XG4gICAgY29uc3QgbGVuID0gdGhpcy5zb3J0ZWREYXRhKCkubGVuZ3RoO1xuICAgIHJldHVybiBNYXRoLm1heCgxLCBNYXRoLmNlaWwobGVuIC8gdGhpcy5wYWdlU2l6ZSgpKSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHBhZ2luYXRlZERhdGEgPSBjb21wdXRlZDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPigoKSA9PiB7XG4gICAgY29uc3Qgc29ydGVkID0gdGhpcy5zb3J0ZWREYXRhKCk7XG4gICAgaWYgKCF0aGlzLmlzUGFnaW5hdGlvbkVuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIHNvcnRlZDtcbiAgICB9XG4gICAgY29uc3Qgc3RhcnQgPSAodGhpcy5jdXJyZW50UGFnZSgpIC0gMSkgKiB0aGlzLnBhZ2VTaXplKCk7XG4gICAgcmV0dXJuIHNvcnRlZC5zbGljZShzdGFydCwgc3RhcnQgKyB0aGlzLnBhZ2VTaXplKCkpO1xuICB9KTtcblxuICBnZXRKdXN0aWZ5Q29udGVudChhbGlnbj86ICdsZWZ0JyB8ICdjZW50ZXInIHwgJ3JpZ2h0Jyk6IHN0cmluZyB7XG4gICAgaWYgKGFsaWduID09PSAncmlnaHQnKSByZXR1cm4gJ2ZsZXgtZW5kJztcbiAgICBpZiAoYWxpZ24gPT09ICdjZW50ZXInKSByZXR1cm4gJ2NlbnRlcic7XG4gICAgcmV0dXJuICdmbGV4LXN0YXJ0JztcbiAgfVxuXG4gIHRvZ2dsZVNvcnQoY29sOiBHcmlkQ29sdW1uRGVmaW5pdGlvbik6IHZvaWQge1xuICAgIGlmIChjb2wuc29ydGFibGUgPT09IGZhbHNlKSByZXR1cm47XG4gICAgaWYgKHRoaXMuc29ydENvbHVtbigpID09PSBjb2wuZmllbGQpIHtcbiAgICAgIHRoaXMuc29ydERpcmVjdGlvbi5zZXQodGhpcy5zb3J0RGlyZWN0aW9uKCkgPT09ICdhc2MnID8gJ2Rlc2MnIDogJ2FzYycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNvcnRDb2x1bW4uc2V0KGNvbC5maWVsZCk7XG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24uc2V0KCdhc2MnKTtcbiAgICB9XG4gICAgdGhpcy5jdXJyZW50UGFnZS5zZXQoMSk7XG4gIH1cblxuICBwcmV2UGFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSgpID4gMSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZS51cGRhdGUoKHApID0+IHAgLSAxKTtcbiAgICB9XG4gIH1cblxuICBuZXh0UGFnZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jdXJyZW50UGFnZSgpIDwgdGhpcy50b3RhbFBhZ2VzKCkpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UudXBkYXRlKChwKSA9PiBwICsgMSk7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0VmFsdWUodmFsdWU6IHVua25vd24sIGNvbDogR3JpZENvbHVtbkRlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gJyc7XG4gICAgaWYgKGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5Jykge1xuICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgIHJldHVybiBpc05hTihudW0pID8gU3RyaW5nKHZhbHVlKSA6IGAkJHtudW0udG9Mb2NhbGVTdHJpbmcodW5kZWZpbmVkLCB7IG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMiwgbWF4aW11bUZyYWN0aW9uRGlnaXRzOiAyIH0pfWA7XG4gICAgfVxuICAgIGlmIChjb2wuZGF0YVR5cGUgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgcmV0dXJuIGlzTmFOKG51bSkgPyBTdHJpbmcodmFsdWUpIDogbnVtLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmIChjb2wuZGF0YVR5cGUgPT09ICdkYXRlJyAmJiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zdCBkID0gbmV3IERhdGUodmFsdWUpO1xuICAgICAgcmV0dXJuIGlzTmFOKGQuZ2V0VGltZSgpKSA/IFN0cmluZyh2YWx1ZSkgOiBkLnRvTG9jYWxlRGF0ZVN0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgfVxuXG4gIGNvbXB1dGVBZ2dyZWdhdGUoY29sOiBHcmlkQ29sdW1uRGVmaW5pdGlvbik6IHN0cmluZyB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuc29ydGVkRGF0YSgpO1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcwJztcblxuICAgIGlmIChjb2wuYWdncmVnYXRlID09PSAnY291bnQnKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGRhdGEubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBjb25zdCBudW1iZXJzID0gZGF0YVxuICAgICAgLm1hcCgocm93KSA9PiBOdW1iZXIocm93W2NvbC5maWVsZF0pKVxuICAgICAgLmZpbHRlcigobikgPT4gIWlzTmFOKG4pKTtcblxuICAgIGlmIChudW1iZXJzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcwJztcblxuICAgIGlmIChjb2wuYWdncmVnYXRlID09PSAnc3VtJykge1xuICAgICAgY29uc3Qgc3VtID0gbnVtYmVycy5yZWR1Y2UoKGFjYywgbikgPT4gYWNjICsgbiwgMCk7XG4gICAgICByZXR1cm4gY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knID8gYCQke3N1bS50b0ZpeGVkKDIpfWAgOiBzdW0udG9Mb2NhbGVTdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoY29sLmFnZ3JlZ2F0ZSA9PT0gJ2F2ZycpIHtcbiAgICAgIGNvbnN0IGF2ZyA9IG51bWJlcnMucmVkdWNlKChhY2MsIG4pID0+IGFjYyArIG4sIDApIC8gbnVtYmVycy5sZW5ndGg7XG4gICAgICByZXR1cm4gY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knID8gYCQke2F2Zy50b0ZpeGVkKDIpfWAgOiBhdmcudG9GaXhlZCgyKTtcbiAgICB9XG5cbiAgICBpZiAoY29sLmFnZ3JlZ2F0ZSA9PT0gJ21pbicpIHtcbiAgICAgIGNvbnN0IG1pbiA9IE1hdGgubWluKC4uLm51bWJlcnMpO1xuICAgICAgcmV0dXJuIGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5JyA/IGAkJHttaW4udG9GaXhlZCgyKX1gIDogU3RyaW5nKG1pbik7XG4gICAgfVxuXG4gICAgaWYgKGNvbC5hZ2dyZWdhdGUgPT09ICdtYXgnKSB7XG4gICAgICBjb25zdCBtYXggPSBNYXRoLm1heCguLi5udW1iZXJzKTtcbiAgICAgIHJldHVybiBjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScgPyBgJCR7bWF4LnRvRml4ZWQoMil9YCA6IFN0cmluZyhtYXgpO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIG9uU2VsZWN0aW9uQ2hhbmdlKHNlbGVjdGVkOiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCByb3dzID0gQXJyYXkuaXNBcnJheShzZWxlY3RlZCkgPyBzZWxlY3RlZCA6IChzZWxlY3RlZCA/IFtzZWxlY3RlZF0gOiBbXSk7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KHJvd3MpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQocm93cyk7XG4gIH1cblxuICBpc1Jvd1NlbGVjdGVkKHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFJvd3MoKS5pbmNsdWRlcyhyb3cpO1xuICB9XG5cbiAgaXNBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wYWdpbmF0ZWREYXRhKCk7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGRhdGEuZXZlcnkoKHIpID0+IHRoaXMuaXNSb3dTZWxlY3RlZChyKSk7XG4gIH1cblxuICBpc1BhcnRpYWxseVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnBhZ2luYXRlZERhdGEoKTtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgICBjb25zdCBjb3VudCA9IGRhdGEuZmlsdGVyKChyKSA9PiB0aGlzLmlzUm93U2VsZWN0ZWQocikpLmxlbmd0aDtcbiAgICByZXR1cm4gY291bnQgPiAwICYmIGNvdW50IDwgZGF0YS5sZW5ndGg7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RBbGwoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2hlY2tlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZWxlY3RlZFJvd3MoKTtcbiAgICBjb25zdCBwYWdlUm93cyA9IHRoaXMucGFnaW5hdGVkRGF0YSgpO1xuICAgIGxldCBuZXh0OiBhbnlbXTtcbiAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgY29uc3Qgc2V0ID0gbmV3IFNldChbLi4uY3VycmVudCwgLi4ucGFnZVJvd3NdKTtcbiAgICAgIG5leHQgPSBBcnJheS5mcm9tKHNldCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHQgPSBjdXJyZW50LmZpbHRlcigocikgPT4gIXBhZ2VSb3dzLmluY2x1ZGVzKHIpKTtcbiAgICB9XG4gICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KG5leHQpO1xuICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQobmV4dCk7XG4gIH1cblxuICB0b2dnbGVSb3dTZWxlY3Rpb24ocm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2hlY2tlZCA9IChldmVudC50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZDtcbiAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZWxlY3RlZFJvd3MoKTtcbiAgICBjb25zdCBtb2RlID0gdGhpcy5lZmZlY3RpdmVSb3dTZWxlY3Rpb24oKTtcbiAgICBsZXQgbmV4dDogYW55W107XG4gICAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICBuZXh0ID0gY2hlY2tlZCA/IFtyb3ddIDogW107XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgIG5leHQgPSBjdXJyZW50LmluY2x1ZGVzKHJvdykgPyBjdXJyZW50IDogWy4uLmN1cnJlbnQsIHJvd107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0ID0gY3VycmVudC5maWx0ZXIoKHIpID0+IHIgIT09IHJvdyk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChuZXh0KTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG5leHQpO1xuICB9XG5cbiAgb25Sb3dDbGljayhyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzU2VsZWN0aW9uRW5hYmxlZCgpKSB7XG4gICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5zZWxlY3RlZFJvd3MoKTtcbiAgICAgIGNvbnN0IG1vZGUgPSB0aGlzLmVmZmVjdGl2ZVJvd1NlbGVjdGlvbigpO1xuICAgICAgbGV0IG5leHQ6IGFueVtdO1xuICAgICAgaWYgKG1vZGUgPT09ICdzaW5nbGUnKSB7XG4gICAgICAgIG5leHQgPSBbcm93XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5leHQgPSBjdXJyZW50LmluY2x1ZGVzKHJvdykgPyBjdXJyZW50LmZpbHRlcigocikgPT4gciAhPT0gcm93KSA6IFsuLi5jdXJyZW50LCByb3ddO1xuICAgICAgfVxuICAgICAgdGhpcy5zZWxlY3RlZFJvd3Muc2V0KG5leHQpO1xuICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChuZXh0KTtcbiAgICB9XG4gICAgaWYgKHRoaXMuaGFzUm93Q2xpY2tBY3Rpb24oKSkge1xuICAgICAgdGhpcy5yb3dDbGljay5lbWl0KHsgcm93LCBldmVudCB9KTtcbiAgICB9XG4gIH1cblxuICBvbkNlbGxDbGljayhyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBjb2w6IEdyaWRDb2x1bW5EZWZpbml0aW9uLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmIChjb2wuYWN0aW9uKSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMucm93Q2xpY2suZW1pdCh7IHJvdywgY29sdW1uOiBjb2wsIGV2ZW50IH0pO1xuICAgIH1cbiAgfVxufVxuIl19
955
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3J0LWdyaWQtYnJpZGdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2J3YXlzLXJlcG9ydC9zcmMvbGliL2ZlYXR1cmVzL3J1bnRpbWUvcmVwb3J0LWdyaWQtYnJpZGdlLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUVMLE1BQU0sRUFDTixNQUFNLEVBRU4sZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDMUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFFbEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDdkYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7O0FBTTNFLE1BQU0sT0FBTyxzQkFBc0I7SUFDaEIsR0FBRyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ3hDLE9BQU8sR0FBNkIsSUFBSSxDQUFDO0lBQ3pDLElBQUksR0FBbUIsRUFBRSxDQUFDO0lBQzFCLHNCQUFzQixHQUFRLElBQUksQ0FBQztJQUNuQyxxQkFBcUIsR0FBUSxJQUFJLENBQUM7SUFDekIsYUFBYSxHQUFHLElBQUksR0FBRyxFQUFlLENBQUM7SUFFL0MsYUFBYSxHQUFHLEtBQUssQ0FBbUIsSUFBSSxFQUFFLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDMUUsV0FB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QUNQLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLHNCQUFzQixDQUFDLFlBQ3ZEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUtULG1CQW1TZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERFU0lHTkVSX0xPQ0FMX0NPTkZJRyB9IGZyb20gJy4uLy4uL2NvcmUvdG9rZW5zL2Rlc2lnbmVyLWNvbmZpZy50b2tlbic7XG5pbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRSZWYsXG4gIGNvbXB1dGVkLFxuICBEaXJlY3RpdmUsXG4gIGVmZmVjdCxcbiAgaW5qZWN0LFxuICBpbnB1dCxcbiAgT25EZXN0cm95LFxuICBvdXRwdXQsXG4gIHNpZ25hbCxcbiAgVHlwZSxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBHUklEX0NPTVBPTkVOVCB9IGZyb20gJy4uLy4uL2NvcmUvdG9rZW5zL3JlcG9ydGluZy1jb25maWcudG9rZW4nO1xuaW1wb3J0IHsgUmVwb3J0U3RvcmFnZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3JlcG9ydC1zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JpZENvbHVtbkRlZmluaXRpb24sIFJlcG9ydEdyaWREZWZpbml0aW9uIH0gZnJvbSAnLi4vLi4vY29yZS9tb2RlbHMvcmVwb3J0LWdyaWQubW9kZWwnO1xuaW1wb3J0IHsgUnB0SWNvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL3ByaW1pdGl2ZXMvY29tcG9uZW50cy9pY29uL3JwdC1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBodW1hbml6ZUlkZW50aWZpZXIgfSBmcm9tICcuLi8uLi9jb3JlL3V0aWxzL2lkZW50aWZpZXItaHVtYW5pemVyJztcblxuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW3JwdEdyaWRPdXRsZXRdJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgUnB0R3JpZE91dGxldERpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgdmNyID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuICBwcml2YXRlIGNvbXBSZWY6IENvbXBvbmVudFJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcbiAgcHJpdmF0ZSBsYXN0RW1pdHRlZFJlcG9ydFN0YXRlOiBhbnkgPSBudWxsO1xuICBwcml2YXRlIGxhc3RFbWl0dGVkQ29sdW1uRGVmczogYW55ID0gbnVsbDtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHBsaWVkSW5wdXRzID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcblxuICByZWFkb25seSBjb21wb25lbnRUeXBlID0gaW5wdXQ8VHlwZTxhbnk+IHwgbnVsbD4obnVsbCwgeyBhbGlhczogJ3JwdEdyaWRPdXRsZXQnIH0pO1xuICByZWFkb25seSBpbnN0YW5jZUtleSA9IGlucHV0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBpbnB1dHMgPSBpbnB1dDxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oe30pO1xuICByZWFkb25seSBncmlkU3RhdGVDaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSBjb2x1bW5EZWZzQ2hhbmdlID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgcm93Q2xpY2sgPSBvdXRwdXQ8eyByb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+OyBjb2x1bW4/OiBhbnk7IGV2ZW50PzogYW55IH0+KCk7XG4gIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZSA9IG91dHB1dDxhbnlbXT4oKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgY29uc3QgdHlwZSA9IHRoaXMuY29tcG9uZW50VHlwZSgpO1xuICAgICAgY29uc3Qga2V5ID0gdGhpcy5pbnN0YW5jZUtleSgpO1xuICAgICAgdGhpcy5yZWNyZWF0ZUNvbXBvbmVudCh0eXBlKTtcbiAgICB9KTtcblxuICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50SW5wdXRzID0gdGhpcy5pbnB1dHMoKTtcbiAgICAgIGlmICghdGhpcy5jb21wUmVmKSByZXR1cm47XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGN1cnJlbnRJbnB1dHMpKSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdyZXBvcnRTdGF0ZScpIHtcbiAgICAgICAgICAvLyBTdXBwcmVzcyBjaXJjdWxhciBpbnB1dCBlY2hvOiBpZiBpbmNvbWluZyByZXBvcnRTdGF0ZSBtYXRjaGVzIHdoYXQgdGhpcyBncmlkIGluc3RhbmNlXG4gICAgICAgICAgLy8ganVzdCBlbWl0dGVkLCBza2lwIHNldElucHV0LiBSZS1hcHBseWluZyByZXBvcnRTdGF0ZSBjYXVzZXMgbmdPbkNoYW5nZXMgLT4gYXBwbHlJbXBvcnRlZEZpbHRlcnMsXG4gICAgICAgICAgLy8gd2hpY2ggZGVzdHJveXMgY29sdW1ucyBhbmQgZGlzbWlzc2VzIGFjdGl2ZSBmaWx0ZXIgcG9wb3ZlcnMvaW5wdXRzLlxuICAgICAgICAgIGlmICh0aGlzLmxhc3RFbWl0dGVkUmVwb3J0U3RhdGUgJiYgdGhpcy5pc1JlcG9ydFN0YXRlTWF0Y2hpbmcodGhpcy5sYXN0RW1pdHRlZFJlcG9ydFN0YXRlLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5hcHBsaWVkSW5wdXRzLmhhcygncmVwb3J0U3RhdGUnKSAmJiB0aGlzLmlzUmVwb3J0U3RhdGVNYXRjaGluZyh0aGlzLmFwcGxpZWRJbnB1dHMuZ2V0KCdyZXBvcnRTdGF0ZScpLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgPT09ICdjb2x1bW5zJyB8fCBrZXkgPT09ICdjb2x1bW5EZWZzJykge1xuICAgICAgICAgIGlmICh0aGlzLmxhc3RFbWl0dGVkQ29sdW1uRGVmcyAmJiB0aGlzLmlzQ29sdW1uRGVmc01hdGNoaW5nKHRoaXMubGFzdEVtaXR0ZWRDb2x1bW5EZWZzLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodGhpcy5hcHBsaWVkSW5wdXRzLmhhcyhrZXkpICYmIHRoaXMuaXNDb2x1bW5EZWZzTWF0Y2hpbmcodGhpcy5hcHBsaWVkSW5wdXRzLmdldChrZXkpLCB2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgPT09ICdjb25maWcnKSB7XG4gICAgICAgICAgY29uc3QgcHJldiA9IHRoaXMuYXBwbGllZElucHV0cy5nZXQoJ2NvbmZpZycpO1xuICAgICAgICAgIGlmIChwcmV2ICYmIEpTT04uc3RyaW5naWZ5KHByZXYpID09PSBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChrZXkgPT09ICdyb3dEYXRhJykge1xuICAgICAgICAgIGNvbnN0IHByZXYgPSB0aGlzLmFwcGxpZWRJbnB1dHMuZ2V0KCdyb3dEYXRhJyk7XG4gICAgICAgICAgaWYgKHByZXYgPT09IHZhbHVlKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5hcHBsaWVkSW5wdXRzLmdldChrZXkpID09PSB2YWx1ZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmNhbkFjY2VwdElucHV0KGtleSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5jb21wUmVmLnNldElucHV0KGtleSwgdmFsdWUpO1xuICAgICAgICAgIHRoaXMuYXBwbGllZElucHV0cy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FuQWNjZXB0SW5wdXQoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuY29tcFJlZikgcmV0dXJuIGZhbHNlO1xuICAgIGNvbnN0IGNtcERlZiA9ICh0aGlzLmNvbXBSZWYuY29tcG9uZW50VHlwZSBhcyBhbnkpPy5bJ8m1Y21wJ107XG4gICAgaWYgKGNtcERlZiAmJiBjbXBEZWYuaW5wdXRzKSB7XG4gICAgICByZXR1cm4ga2V5IGluIGNtcERlZi5pbnB1dHMgfHwgT2JqZWN0LnZhbHVlcyhjbXBEZWYuaW5wdXRzKS5pbmNsdWRlcyhrZXkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHByaXZhdGUgaXNSZXBvcnRTdGF0ZU1hdGNoaW5nKGE6IGFueSwgYjogYW55KTogYm9vbGVhbiB7XG4gICAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuICAgIGlmICghYSB8fCAhYikgcmV0dXJuIGEgPT09IGI7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGdldENvbXBhcmFibGUgPSAoczogYW55KSA9PiAoe1xuICAgICAgICBhY3RpdmVGaWx0ZXJzOiBzLmFjdGl2ZUZpbHRlcnMsXG4gICAgICAgIGNvbmRpdGlvbkZpbHRlcnM6IHMuY29uZGl0aW9uRmlsdGVycyxcbiAgICAgICAgc29ydE1vZGVsOiBzLnNvcnRNb2RlbCxcbiAgICAgICAgZ3JvdXBNb2RlbDogcy5ncm91cE1vZGVsLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZ2V0Q29tcGFyYWJsZShhKSkgPT09IEpTT04uc3RyaW5naWZ5KGdldENvbXBhcmFibGUoYikpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaXNDb2x1bW5EZWZzTWF0Y2hpbmcoYTogYW55LCBiOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAoYSA9PT0gYikgcmV0dXJuIHRydWU7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGEpIHx8ICFBcnJheS5pc0FycmF5KGIpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBnZXRDb21wYXJhYmxlID0gKGNvbHM6IGFueVtdKSA9PlxuICAgICAgICBjb2xzLm1hcCgoYzogYW55KSA9PiAoe1xuICAgICAgICAgIGZpZWxkOiBjLmZpZWxkLFxuICAgICAgICAgIHdpZHRoOiBjLndpZHRoLFxuICAgICAgICAgIGhpZGU6IGMuaGlkZSxcbiAgICAgICAgICBwaW5uZWQ6IGMucGlubmVkLFxuICAgICAgICB9KSk7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZ2V0Q29tcGFyYWJsZShhKSkgPT09IEpTT04uc3RyaW5naWZ5KGdldENvbXBhcmFibGUoYikpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVjcmVhdGVDb21wb25lbnQodHlwZTogVHlwZTxhbnk+IHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgICBpZiAoIXR5cGUpIHJldHVybjtcblxuICAgIHRyeSB7XG4gICAgICB0aGlzLmNvbXBSZWYgPSB0aGlzLnZjci5jcmVhdGVDb21wb25lbnQodHlwZSk7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcFJlZi5pbnN0YW5jZSBhcyBhbnk7XG5cbiAgICAgIGlmIChpbnN0YW5jZS5ncmlkU3RhdGVDaGFuZ2VkICYmIHR5cGVvZiBpbnN0YW5jZS5ncmlkU3RhdGVDaGFuZ2VkLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChcbiAgICAgICAgICBpbnN0YW5jZS5ncmlkU3RhdGVDaGFuZ2VkLnN1YnNjcmliZSgoc3RhdGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sYXN0RW1pdHRlZFJlcG9ydFN0YXRlID0gc3RhdGU7XG4gICAgICAgICAgICB0aGlzLmdyaWRTdGF0ZUNoYW5nZS5lbWl0KHN0YXRlKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKGluc3RhbmNlLnJlcG9ydFN0YXRlQ2hhbmdlICYmIHR5cGVvZiBpbnN0YW5jZS5yZXBvcnRTdGF0ZUNoYW5nZS5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5zdWJzLnB1c2goXG4gICAgICAgICAgaW5zdGFuY2UucmVwb3J0U3RhdGVDaGFuZ2Uuc3Vic2NyaWJlKChzdGF0ZTogYW55KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmxhc3RFbWl0dGVkUmVwb3J0U3RhdGUgPSBzdGF0ZTtcbiAgICAgICAgICAgIHRoaXMuZ3JpZFN0YXRlQ2hhbmdlLmVtaXQoc3RhdGUpO1xuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoaW5zdGFuY2UuY29sdW1uRGVmc0NoYW5nZWQgJiYgdHlwZW9mIGluc3RhbmNlLmNvbHVtbkRlZnNDaGFuZ2VkLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChcbiAgICAgICAgICBpbnN0YW5jZS5jb2x1bW5EZWZzQ2hhbmdlZC5zdWJzY3JpYmUoKGRlZnM6IGFueSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5sYXN0RW1pdHRlZENvbHVtbkRlZnMgPSBkZWZzO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5EZWZzQ2hhbmdlLmVtaXQoZGVmcyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZW1pdFJvdyA9IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3Qgcm93ID0gZGF0YT8uZGF0YSA/PyBkYXRhPy5yb3cgPz8gZGF0YTtcbiAgICAgICAgY29uc3QgY29sID0gZGF0YT8uY29sRGVmID8/IGRhdGE/LmNvbHVtbjtcbiAgICAgICAgdGhpcy5yb3dDbGljay5lbWl0KHsgcm93LCBjb2x1bW46IGNvbCwgZXZlbnQ6IGRhdGE/LmV2ZW50IH0pO1xuICAgICAgfTtcblxuICAgICAgaWYgKGluc3RhbmNlLnJvd0NsaWNrZWQgJiYgdHlwZW9mIGluc3RhbmNlLnJvd0NsaWNrZWQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKGluc3RhbmNlLnJvd0NsaWNrZWQuc3Vic2NyaWJlKGVtaXRSb3cpKTtcbiAgICAgIH0gZWxzZSBpZiAoaW5zdGFuY2Uucm93Q2xpY2sgJiYgdHlwZW9mIGluc3RhbmNlLnJvd0NsaWNrLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChpbnN0YW5jZS5yb3dDbGljay5zdWJzY3JpYmUoZW1pdFJvdykpO1xuICAgICAgfSBlbHNlIGlmIChpbnN0YW5jZS5jZWxsQ2xpY2tlZCAmJiB0eXBlb2YgaW5zdGFuY2UuY2VsbENsaWNrZWQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKGluc3RhbmNlLmNlbGxDbGlja2VkLnN1YnNjcmliZShlbWl0Um93KSk7XG4gICAgICB9IGVsc2UgaWYgKGluc3RhbmNlLmNlbGxDbGljayAmJiB0eXBlb2YgaW5zdGFuY2UuY2VsbENsaWNrLnN1YnNjcmliZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnN1YnMucHVzaChpbnN0YW5jZS5jZWxsQ2xpY2suc3Vic2NyaWJlKGVtaXRSb3cpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGluc3RhbmNlLnNlbGVjdGlvbkNoYW5nZWQgJiYgdHlwZW9mIGluc3RhbmNlLnNlbGVjdGlvbkNoYW5nZWQuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc3Vicy5wdXNoKFxuICAgICAgICAgIGluc3RhbmNlLnNlbGVjdGlvbkNoYW5nZWQuc3Vic2NyaWJlKChzZWxlY3Rpb246IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgcm93cyA9IEFycmF5LmlzQXJyYXkoc2VsZWN0aW9uKSA/IHNlbGVjdGlvbiA6IChzZWxlY3Rpb24gPyBbc2VsZWN0aW9uXSA6IFtdKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQocm93cyk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY3VycmVudElucHV0cyA9IHRoaXMuaW5wdXRzKCk7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhjdXJyZW50SW5wdXRzKSkge1xuICAgICAgICBpZiAoIXRoaXMuY2FuQWNjZXB0SW5wdXQoa2V5KSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdGhpcy5jb21wUmVmLnNldElucHV0KGtleSwgdmFsdWUpO1xuICAgICAgICAgIHRoaXMuYXBwbGllZElucHV0cy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0gY2F0Y2gge31cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybignW1JwdEdyaWRPdXRsZXREaXJlY3RpdmVdIEZhaWxlZCB0byBjcmVhdGUgY3VzdG9tIGdyaWQgY29tcG9uZW50OicsIGVycik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhcigpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnMuZm9yRWFjaCgocykgPT4gcy51bnN1YnNjcmliZSgpKTtcbiAgICB0aGlzLnN1YnMgPSBbXTtcbiAgICB0aGlzLmxhc3RFbWl0dGVkUmVwb3J0U3RhdGUgPSBudWxsO1xuICAgIHRoaXMubGFzdEVtaXR0ZWRDb2x1bW5EZWZzID0gbnVsbDtcbiAgICB0aGlzLmFwcGxpZWRJbnB1dHMuY2xlYXIoKTtcbiAgICBpZiAodGhpcy5jb21wUmVmKSB7XG4gICAgICB0aGlzLmNvbXBSZWYuZGVzdHJveSgpO1xuICAgICAgdGhpcy5jb21wUmVmID0gbnVsbDtcbiAgICB9XG4gICAgdGhpcy52Y3IuY2xlYXIoKTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY2xlYXIoKTtcbiAgfVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdycHQtZ3JpZC1icmlkZ2UnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBScHRJY29uQ29tcG9uZW50LCBScHRHcmlkT3V0bGV0RGlyZWN0aXZlXSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2IGNsYXNzPVwicnB0LWdyaWQtY29udGFpbmVyXCI+XG4gICAgICBAaWYgKGN1c3RvbUdyaWRDb21wb25lbnQoKSkge1xuICAgICAgICA8IS0tIEhvc3QtcHJvdmlkZWQgZ3JpZCBjb21wb25lbnQgKGUuZy4gQldheXMtZ3JpZCBVbHRyYUdyaWRDb21wb25lbnQpIC0tPlxuICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgW3JwdEdyaWRPdXRsZXRdPVwiY3VzdG9tR3JpZENvbXBvbmVudCgpXCJcbiAgICAgICAgICBbaW5zdGFuY2VLZXldPVwiZ3JpZEluc3RhbmNlS2V5KClcIlxuICAgICAgICAgIFtpbnB1dHNdPVwiZ3JpZElucHV0cygpXCJcbiAgICAgICAgICAoZ3JpZFN0YXRlQ2hhbmdlKT1cImdyaWRTdGF0ZUNoYW5nZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgIChjb2x1bW5EZWZzQ2hhbmdlKT1cImNvbHVtbkRlZnNDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAocm93Q2xpY2spPVwicm93Q2xpY2suZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAvPlxuICAgICAgfSBAZWxzZSB7XG4gICAgICAgIDwhLS0gQnVpbHQtaW4gZmFsbGJhY2sgdGFibGUgd2hlbiBubyBleHRlcm5hbCBncmlkIGlzIHByb3ZpZGVkIC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXRhYmxlLWNhcmRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXRhYmxlLXRvb2xiYXJcIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXRhYmxlLXRpdGxlXCI+UmVzdWx0cyAoe3sgZGF0YSgpLmxlbmd0aCB9fSByb3dzKTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJycHQtdGFibGUtcmVzcG9uc2l2ZVwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwicnB0LXRhYmxlXCI+XG4gICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICBAaWYgKHNob3dSb3dOdW1iZXJzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwicnB0LXRoIHJwdC10aC1udW1cIj4jPC90aD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBpZiAoaXNTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwicnB0LXRoIHJwdC10aC1jYlwiPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZWZmZWN0aXZlUm93U2VsZWN0aW9uKCkgIT09ICdzaW5nbGUnICYmIGlzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2VkXT1cImlzQWxsU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmRldGVybWluYXRlXT1cImlzUGFydGlhbGx5U2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlU2VsZWN0QWxsKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlNlbGVjdCBhbGwgcm93c1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1ucygpOyB0cmFjayBjb2wuZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtdGhcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjb2wud2lkdGggfHwgJ2F1dG8nXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUudGV4dC1hbGlnbl09XCJjb2wuYWxpZ24gfHwgJ2xlZnQnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3Muc29ydGFibGVdPVwiY29sLnNvcnRhYmxlICE9PSBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZVNvcnQoY29sKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXRoLWNvbnRlbnRcIiBbc3R5bGUuanVzdGlmeS1jb250ZW50XT1cImdldEp1c3RpZnlDb250ZW50KGNvbC5hbGlnbilcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNvbC5sYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY29sLnNvcnRhYmxlICE9PSBmYWxzZSAmJiBzb3J0Q29sdW1uKCkgPT09IGNvbC5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1zb3J0LWluZGljYXRvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBbbmFtZV09XCJzb3J0RGlyZWN0aW9uKCkgPT09ICdhc2MnID8gJ2NoZXZyb24tdXAnIDogJ2NoZXZyb24tZG93bidcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgQGlmIChwYWdpbmF0ZWREYXRhKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNvbFNwYW4oKVwiIGNsYXNzPVwicnB0LWVtcHR5LW1lc3NhZ2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICBObyBkYXRhIGZvdW5kIG1hdGNoaW5nIGNyaXRlcmlhXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgQGZvciAocm93IG9mIHBhZ2luYXRlZERhdGEoKTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIDx0clxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LXRyXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuaXMtY2xpY2thYmxlXT1cImhhc1Jvd0NsaWNrQWN0aW9uKCkgfHwgaXNTZWxlY3Rpb25FbmFibGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1zZWxlY3RlZF09XCJpc1Jvd1NlbGVjdGVkKHJvdylcIlxuICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKHJvdywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNob3dSb3dOdW1iZXJzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInJwdC10ZCBycHQtdGQtbnVtXCI+e3sgKGN1cnJlbnRQYWdlKCkgLSAxKSAqIHBhZ2VTaXplKCkgKyAkaW5kZXggKyAxIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChpc1NlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwicnB0LXRkIHJwdC10ZC1jYlwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiZWZmZWN0aXZlUm93U2VsZWN0aW9uKCkgPT09ICdzaW5nbGUnID8gJ3JhZGlvJyA6ICdjaGVja2JveCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJycHQtZmFsbGJhY2stc2VsZWN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInJwdC1jaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiaXNSb3dTZWxlY3RlZChyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInRvZ2dsZVJvd1NlbGVjdGlvbihyb3csICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgQGZvciAoY29sIG9mIHZpc2libGVDb2x1bW5zKCk7IHRyYWNrIGNvbC5maWVsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicnB0LXRkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPVwiY29sLmFsaWduIHx8ICdsZWZ0J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5pcy1jbGlja2FibGUtY2VsbF09XCIhIWNvbC5hY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib25DZWxsQ2xpY2socm93LCBjb2wsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbC5hY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJwdC1jZWxsLWFjdGlvbi1saW5rXCI+e3sgZm9ybWF0VmFsdWUocm93W2NvbC5maWVsZF0sIGNvbCkgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdFZhbHVlKHJvd1tjb2wuZmllbGRdLCBjb2wpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgICAgQGlmIChoYXNBZ2dyZWdhdGVzKCkpIHtcbiAgICAgICAgICAgICAgICA8dGZvb3Q+XG4gICAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJycHQtdGZvb3Qtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoc2hvd1Jvd051bWJlcnMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInJwdC10ZC1udW1cIj48L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoaXNTZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJycHQtdGQtY2JcIj48L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1ucygpOyB0cmFjayBjb2wuZmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJycHQtdGQtYWdncmVnYXRlXCIgW3N0eWxlLnRleHQtYWxpZ25dPVwiY29sLmFsaWduIHx8ICdsZWZ0J1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjb2wuYWdncmVnYXRlICYmIGNvbC5hZ2dyZWdhdGUgIT09ICdub25lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LWFnZ3JlZ2F0ZS13cmFwXCIgW2NsYXNzLmlzLXJpZ2h0XT1cImNvbC5hbGlnbiA9PT0gJ3JpZ2h0J1wiIFtjbGFzcy5pcy1jZW50ZXJdPVwiY29sLmFsaWduID09PSAnY2VudGVyJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LWFnZ3JlZ2F0ZS1sYWJlbFwiPnt7IGNvbC5hZ2dyZWdhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJycHQtYWdncmVnYXRlLXZhbHVlXCI+e3sgY29tcHV0ZUFnZ3JlZ2F0ZShjb2wpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGZvb3Q+XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICBAaWYgKGlzUGFnaW5hdGlvbkVuYWJsZWQoKSAmJiB0b3RhbFBhZ2VzKCkgPiAxKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXBhZ2luYXRpb24tYmFyXCI+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicnB0LXBhZ2UtaW5mb1wiPlxuICAgICAgICAgICAgICAgIFBhZ2Uge3sgY3VycmVudFBhZ2UoKSB9fSBvZiB7eyB0b3RhbFBhZ2VzKCkgfX1cbiAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicnB0LXBhZ2UtYnV0dG9uc1wiPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtcGFnZS1idG5cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlKCkgPT09IDFcIlxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInByZXZQYWdlKClcIlxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiYXJyb3ctbGVmdFwiIFtzaXplXT1cIjEyXCIgLz5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPlByZXZpb3VzPC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgY2xhc3M9XCJycHQtcGFnZS1idG5cIlxuICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImN1cnJlbnRQYWdlKCkgPT09IHRvdGFsUGFnZXMoKVwiXG4gICAgICAgICAgICAgICAgICAoY2xpY2spPVwibmV4dFBhZ2UoKVwiXG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+TmV4dDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxycHQtaWNvbiBuYW1lPVwiYXJyb3ctcmlnaHRcIiBbc2l6ZV09XCIxMlwiIC8+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgYCxcbiAgc3R5bGVzOiBbYFxuICAgIDpob3N0IHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtYXJnaW4tdG9wOiAxNnB4O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgfVxuICAgIC5ycHQtZ3JpZC1jb250YWluZXIge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICBtaW4taGVpZ2h0OiA0ODBweDtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgYndheXMtZ3JpZCB7XG4gICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiA0ODBweDtcbiAgICAgIG1pbi1oZWlnaHQ6IDQ4MHB4O1xuICAgICAgLS11Zy1mb290ZXItYmc6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICAgIC0tdWctZm9vdGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1zZWNvbmRhcnksICMzMzQxNTUpO1xuICAgICAgLS11Zy1oZWFkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIC0tdWctYm9yZGVyLWNvbG9yOiB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIC0tdWctZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCk7XG4gICAgICAtLXVnLWZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICAtLXVnLWhlYWRlci1mb250LXdlaWdodDogNjAwO1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXdyYXBwZXIge1xuICAgICAgaGVpZ2h0OiAxMDAlICFpbXBvcnRhbnQ7XG4gICAgICBtaW4taGVpZ2h0OiA0ODBweCAhaW1wb3J0YW50O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXZpZXdwb3J0IHtcbiAgICAgIG1pbi1oZWlnaHQ6IDM1MHB4ICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctYm90dG9tLWJhcixcbiAgICA6aG9zdCA6Om5nLWRlZXAgdWctcGFnaW5hdGlvbiB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYykgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKSAhaW1wb3J0YW50O1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKSAhaW1wb3J0YW50O1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1zdGF0dXMtYmFyLWNvbnRlbnQsXG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdpbmF0aW9uLWluZm8sXG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdlLWluZm8ge1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDAgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4YikgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXMgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdlLXNpemUge1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDAgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4YikgIWltcG9ydGFudDtcbiAgICB9XG4gICAgOmhvc3QgOjpuZy1kZWVwIC51Zy1wYWdlLXNpemUgc2VsZWN0IHtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pICFpbXBvcnRhbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItY29sb3I6IHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpICFpbXBvcnRhbnQ7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2ZmZmZmZikgIWltcG9ydGFudDtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLXNtLCA0cHgpICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctdG90YWwtcm93IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKSAhaW1wb3J0YW50O1xuICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpICFpbXBvcnRhbnQ7XG4gICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXdlaWdodDogNjAwICFpbXBvcnRhbnQ7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zICFpbXBvcnRhbnQ7XG4gICAgfVxuICAgIDpob3N0IDo6bmctZGVlcCAudWctdG90YWwtcm93LWxhYmVsIHtcbiAgICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1ycHQtZm9udC1mYW1pbHksIGluaGVyaXQpICFpbXBvcnRhbnQ7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUteHMsIDAuNjg3NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcbiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2UgIWltcG9ydGFudDtcbiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW0gIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4YikgIWltcG9ydGFudDtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKSAhaW1wb3J0YW50O1xuICAgIH1cbiAgICA6aG9zdCA6Om5nLWRlZXAgLnVnLXRvdGFsLWNlbGwge1xuICAgICAgZm9udC1mYW1pbHk6IHZhcigtLXJwdC1mb250LWZhbWlseSwgaW5oZXJpdCkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDAgIWltcG9ydGFudDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dCwgIzBmMTcyYSkgIWltcG9ydGFudDtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXMgIWltcG9ydGFudDtcbiAgICB9XG4gICAgLnJwdC10YWJsZS1jYXJkIHtcbiAgICAgIGJhY2tncm91bmQ6IHZhcigtLXJwdC1jb2xvci1iZywgI2ZmZmZmZik7XG4gICAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJwdC1ib3JkZXItcmFkaXVzLWxnLCA4cHgpO1xuICAgICAgYm94LXNoYWRvdzogdmFyKC0tcnB0LWJveC1zaGFkb3csIDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMDUpKTtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgfVxuICAgIC5ycHQtdGFibGUtdG9vbGJhciB7XG4gICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICB9XG4gICAgLnJwdC10YWJsZS10aXRsZSB7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtc20sIDAuNzVyZW0pO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICB9XG4gICAgLnJwdC10YWJsZS1yZXNwb25zaXZlIHtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICB9XG4gICAgLnJwdC10YWJsZSB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgICBmb250LXNpemU6IHZhcigtLXJwdC1mb250LXNpemUtYmFzZSwgMC44NzVyZW0pO1xuICAgICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICB9XG4gICAgLnJwdC10aCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgICBwYWRkaW5nOiAxMHB4IDE0cHg7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzQ3NTU2OSk7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2NiZDVlMSk7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgfVxuICAgIC5ycHQtdGguc29ydGFibGUge1xuICAgICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIH1cbiAgICAucnB0LXRoLnNvcnRhYmxlOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjFmNWY5KTtcbiAgICB9XG4gICAgLnJwdC10aC1jb250ZW50IHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgZ2FwOiA0cHg7XG4gICAgfVxuICAgIC5ycHQtc29ydC1pbmRpY2F0b3Ige1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LCAjMjU2M2ViKTtcbiAgICB9XG4gICAgLnJwdC10aC1udW0sIC5ycHQtdGQtbnVtIHtcbiAgICAgIHdpZHRoOiA0OHB4O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjOTRhM2I4KTtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgfVxuICAgIC5ycHQtdGgtY2IsIC5ycHQtdGQtY2Ige1xuICAgICAgd2lkdGg6IDQycHg7XG4gICAgICBtaW4td2lkdGg6IDQycHg7XG4gICAgICBtYXgtd2lkdGg6IDQycHg7XG4gICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICBwYWRkaW5nOiA4cHggMTBweDtcbiAgICB9XG4gICAgLnJwdC1jaGVja2JveCB7XG4gICAgICB3aWR0aDogMTVweDtcbiAgICAgIGhlaWdodDogMTVweDtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIGFjY2VudC1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gICAgLnJwdC10ZCB7XG4gICAgICBwYWRkaW5nOiAxMHB4IDE0cHg7XG4gICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tcnB0LWNvbG9yLWJvcmRlciwgI2UyZThmMCk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMxZTI5M2IpO1xuICAgIH1cbiAgICAucnB0LXRyOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjhmYWZjKTtcbiAgICB9XG4gICAgLnJwdC10ci5pcy1zZWxlY3RlZCB7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWZmNmZmO1xuICAgIH1cbiAgICAucnB0LXRyLmlzLXNlbGVjdGVkOmhvdmVyIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkYmVhZmU7XG4gICAgfVxuICAgIC5ycHQtdHIuaXMtY2xpY2thYmxlIHtcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB9XG4gICAgLnJwdC10ci5pcy1jbGlja2FibGU6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjVmOTtcbiAgICB9XG4gICAgLnJwdC10ZC5pcy1jbGlja2FibGUtY2VsbCB7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgfVxuICAgIC5ycHQtY2VsbC1hY3Rpb24tbGluayB7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXByaW1hcnksICMyNTYzZWIpO1xuICAgICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgICAgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAycHg7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBjb2xvciAxNTBtcyBlYXNlO1xuICAgIH1cbiAgICAucnB0LWNlbGwtYWN0aW9uLWxpbms6aG92ZXIge1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci1wcmltYXJ5LWhvdmVyLCAjMWQ0ZWQ4KTtcbiAgICB9XG4gICAgLnJwdC1lbXB0eS1tZXNzYWdlIHtcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICAgIHBhZGRpbmc6IDQwcHggMjBweDtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzk0YTNiOCk7XG4gICAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgfVxuICAgIC5ycHQtdGZvb3Qtcm93IHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZjhmYWZjKTtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLCAjY2JkNWUxKTtcbiAgICB9XG4gICAgLnJwdC10ZC1hZ2dyZWdhdGUge1xuICAgICAgcGFkZGluZzogOHB4IDE0cHg7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLXdyYXAge1xuICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgICBnYXA6IDZweDtcbiAgICB9XG4gICAgLnJwdC1hZ2dyZWdhdGUtd3JhcC5pcy1yaWdodCB7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLXdyYXAuaXMtY2VudGVyIHtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLWxhYmVsIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS14cywgMC42ODc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICAgIGNvbG9yOiB2YXIoLS1ycHQtY29sb3ItdGV4dC1tdXRlZCwgIzY0NzQ4Yik7XG4gICAgfVxuICAgIC5ycHQtYWdncmVnYXRlLXZhbHVlIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNjAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LCAjMGYxNzJhKTtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICd0bnVtJztcbiAgICB9XG4gICAgLnJwdC1wYWdpbmF0aW9uLWJhciB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgIHBhZGRpbmc6IDEwcHggMTZweDtcbiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1ycHQtY29sb3ItYm9yZGVyLXN1YnRsZSwgI2UyZThmMCk7XG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1ycHQtY29sb3Itc3VyZmFjZSwgI2Y4ZmFmYyk7XG4gICAgfVxuICAgIC5ycHQtcGFnZS1pbmZvIHtcbiAgICAgIGZvbnQtc2l6ZTogdmFyKC0tcnB0LWZvbnQtc2l6ZS1zbSwgMC43NXJlbSk7XG4gICAgICBmb250LXdlaWdodDogNTAwO1xuICAgICAgY29sb3I6IHZhcigtLXJwdC1jb2xvci10ZXh0LW11dGVkLCAjNjQ3NDhiKTtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgfVxuICAgIC5ycHQtcGFnZS1idXR0b25zIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBnYXA6IDhweDtcbiAgICB9XG4gICAgLnJwdC1wYWdlLWJ0biB7XG4gICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICBnYXA6IDVweDtcbiAgICAgIHBhZGRpbmc6IDRweCAxMHB4O1xuICAgICAgZm9udC1zaXplOiB2YXIoLS1ycHQtZm9udC1zaXplLXNtLCAwLjc1cmVtKTtcbiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQtc2Vjb25kYXJ5LCAjMzM0MTU1KTtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLCAjZmZmZmZmKTtcbiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJwdC1jb2xvci1ib3JkZXIsICNjYmQ1ZTEpO1xuICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcnB0LWJvcmRlci1yYWRpdXMtc20sIDRweCk7XG4gICAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tcnB0LXRyYW5zaXRpb24tc3BlZWQsIDE1MG1zKSBlYXNlO1xuICAgIH1cbiAgICAucnB0LXBhZ2UtYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXJwdC1jb2xvci1zdXJmYWNlLWhvdmVyLCAjZjFmNWY5KTtcbiAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tcnB0LWNvbG9yLWJvcmRlci1ob3ZlciwgIzk0YTNiOCk7XG4gICAgICBjb2xvcjogdmFyKC0tcnB0LWNvbG9yLXRleHQsICMwZjE3MmEpO1xuICAgIH1cbiAgICAucnB0LXBhZ2UtYnRuOmRpc2FibGVkIHtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgfVxuICBgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFJlcG9ydEdyaWRCcmlkZ2VDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc2lnbmVyQ29uZmlnID0gaW5qZWN0KERFU0lHTkVSX0xPQ0FMX0NPTkZJRywgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RlZEdyaWQgPSBpbmplY3QoR1JJRF9DT01QT05FTlQsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RvcmFnZSA9IGluamVjdChSZXBvcnRTdG9yYWdlU2VydmljZSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodGhpcy5zdG9yYWdlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBsZWdhY3lEZWZhdWx0ID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J3YXlzX2dyaWRfcmVwb3J0X3N0YXRlX2RlZmF1bHQnKTtcbiAgICAgICAgaWYgKGxlZ2FjeURlZmF1bHQgJiYgIWxlZ2FjeURlZmF1bHQuaW5jbHVkZXMoJ192ZXJzaW9uXycpKSB7XG4gICAgICAgICAgdGhpcy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2J3YXlzX2dyaWRfcmVwb3J0X3N0YXRlX2RlZmF1bHQnKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIC8vIFNpbGVudGx5IGlnbm9yZSByZXN0cmljdGVkIHN0b3JhZ2UgZW52aXJvbm1lbnRzIChlLmcuIHNhbmRib3hlZCBpZnJhbWVzKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlYWRvbmx5IGdyaWREZWZpbml0aW9uID0gaW5wdXQucmVxdWlyZWQ8UmVwb3J0R3JpZERlZmluaXRpb24+KCk7XG4gIHJlYWRvbmx5IGRhdGEgPSBpbnB1dDx1bmtub3duW10+KFtdKTtcblxuICByZWFkb25seSBncmlkU3RhdGVDaGFuZ2UgPSBvdXRwdXQ8YW55PigpO1xuICByZWFkb25seSBjb2x1bW5EZWZzQ2hhbmdlID0gb3V0cHV0PGFueT4oKTtcbiAgcmVhZG9ubHkgcm93Q2xpY2sgPSBvdXRwdXQ8eyByb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+OyBjb2x1bW4/OiBHcmlkQ29sdW1uRGVmaW5pdGlvbjsgZXZlbnQ/OiBNb3VzZUV2ZW50IH0+KCk7XG4gIHJlYWRvbmx5IHNlbGVjdGlvbkNoYW5nZSA9IG91dHB1dDxhbnlbXT4oKTtcblxuICByZWFkb25seSBjdXN0b21HcmlkQ29tcG9uZW50ID0gY29tcHV0ZWQ8VHlwZTx1bmtub3duPiB8IG51bGw+KCgpID0+IHRoaXMuZGVzaWduZXJDb25maWc/LigpPy5ncmlkID8/IHRoaXMuaW5qZWN0ZWRHcmlkID8/IG51bGwpO1xuICByZWFkb25seSBzZWxlY3RlZFJvd3MgPSBzaWduYWw8YW55W10+KFtdKTtcblxuICByZWFkb25seSBoYXNSb3dDbGlja0FjdGlvbiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkZWYgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk7XG4gICAgcmV0dXJuICEhKFxuICAgICAgZGVmPy5yb3dDbGlja0FjdGlvbiB8fFxuICAgICAgZGVmPy5vcHRpb25zPy5yb3dDbGlja0FjdGlvbiB8fFxuICAgICAgdGhpcy52aXNpYmxlQ29sdW1ucygpLnNvbWUoKGMpID0+ICEhYy5hY3Rpb24pXG4gICAgKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaXNDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuZ3JpZERlZmluaXRpb24oKT8ub3B0aW9ucztcbiAgICBpZiAob3B0cz8uY2hlY2tib3hTZWxlY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG9wdHMuY2hlY2tib3hTZWxlY3Rpb247XG4gICAgfVxuICAgIGlmIChvcHRzPy5zZWxlY3RhYmxlKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnMoKS5zb21lKChjKSA9PiBjLmNoZWNrYm94U2VsZWN0aW9uKTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZWZmZWN0aXZlUm93U2VsZWN0aW9uID0gY29tcHV0ZWQ8J3NpbmdsZScgfCAnbXVsdGlwbGUnPigoKSA9PiB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuZ3JpZERlZmluaXRpb24oKT8ub3B0aW9ucztcbiAgICByZXR1cm4gb3B0cz8uc2VsZWN0aW9uTW9kZSB8fCBvcHRzPy5yb3dTZWxlY3Rpb24gfHwgJ211bHRpcGxlJztcbiAgfSk7XG5cbiAgcmVhZG9ubHkgaXNIZWFkZXJDaGVja2JveFNlbGVjdGlvbkVuYWJsZWQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgaWYgKHRoaXMuZWZmZWN0aXZlUm93U2VsZWN0aW9uKCkgPT09ICdzaW5nbGUnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IG9wdHMgPSB0aGlzLmdyaWREZWZpbml0aW9uKCk/Lm9wdGlvbnM7XG4gICAgaWYgKG9wdHM/LmhlYWRlckNoZWNrYm94U2VsZWN0aW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBvcHRzLmhlYWRlckNoZWNrYm94U2VsZWN0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5pc0NoZWNrYm94U2VsZWN0aW9uRW5hYmxlZCgpO1xuICB9KTtcblxuICByZWFkb25seSBpc1NlbGVjdGlvbkVuYWJsZWQgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiB7XG4gICAgY29uc3Qgb3B0cyA9IHRoaXMuZ3JpZERlZmluaXRpb24oKT8ub3B0aW9ucztcbiAgICByZXR1cm4gISEob3B0cz8uc2VsZWN0YWJsZSB8fCBvcHRzPy5jaGVja2JveFNlbGVjdGlvbiB8fCB0aGlzLnZpc2libGVDb2x1bW5zKCkuc29tZSgoYykgPT4gYy5jaGVja2JveFNlbGVjdGlvbikpO1xuICB9KTtcblxuICByZWFkb25seSBzb3J0Q29sdW1uID0gc2lnbmFsPHN0cmluZyB8IG51bGw+KG51bGwpO1xuICByZWFkb25seSBzb3J0RGlyZWN0aW9uID0gc2lnbmFsPCdhc2MnIHwgJ2Rlc2MnPignYXNjJyk7XG4gIHJlYWRvbmx5IGN1cnJlbnRQYWdlID0gc2lnbmFsPG51bWJlcj4oMSk7XG4gIHJlYWRvbmx5IHZpc2libGVDb2x1bW5zID0gY29tcHV0ZWQ8R3JpZENvbHVtbkRlZmluaXRpb25bXT4oKCkgPT4ge1xuICAgIGNvbnN0IGRlZmluZWQgPSAodGhpcy5ncmlkRGVmaW5pdGlvbigpPy5jb2x1bW5zID8/IFtdKS5maWx0ZXIoKGMpID0+IGMudmlzaWJsZSAhPT0gZmFsc2UpO1xuICAgIGNvbnN0IHJvd3MgPSB0aGlzLmRhdGEoKTtcbiAgICBpZiAocm93cyAmJiByb3dzLmxlbmd0aCA+IDAgJiYgdHlwZW9mIHJvd3NbMF0gPT09ICdvYmplY3QnICYmIHJvd3NbMF0gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGZpcnN0Um93ID0gcm93c1swXSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhmaXJzdFJvdykuZmlsdGVyKChrKSA9PiBrLnRyaW0oKS5sZW5ndGggPiAwKTtcbiAgICAgIGNvbnN0IG1hdGNoZXNBbnkgPSBkZWZpbmVkLnNvbWUoKGMpID0+IGtleXMuaW5jbHVkZXMoYy5maWVsZCkpO1xuICAgICAgLy8gSWYgbm8gY29sdW1ucyBhcmUgZGVmaW5lZCwgb3IgdGhlIGRlZmluZWQgY29sdW1ucyBkb24ndCBtYXRjaCBhbnkgZmllbGQgaW4gdGhlIGRhdGEgKGUuZy4gZHVtbXkgaWQvbmFtZSBkZWZhdWx0cyk6XG4gICAgICBpZiAoKGRlZmluZWQubGVuZ3RoID09PSAwIHx8ICFtYXRjaGVzQW55KSAmJiBrZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIGtleXMubWFwKChrKSA9PiAoe1xuICAgICAgICAgIGZpZWxkOiBrLFxuICAgICAgICAgIGxhYmVsOiBodW1hbml6ZUlkZW50aWZpZXIoayksXG4gICAgICAgICAgZGF0YVR5cGU6IHR5cGVvZiBmaXJzdFJvd1trXSA9PT0gJ251bWJlcicgPyAnbnVtYmVyJyA6IHR5cGVvZiBmaXJzdFJvd1trXSA9PT0gJ2Jvb2xlYW4nID8gJ2Jvb2xlYW4nIDogJ3N0cmluZycsXG4gICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICBzb3J0YWJsZTogdHJ1ZSxcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZGVmaW5lZDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgYnJpZGdlZENvbHVtbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3QgaXNHcmlkQ2hlY2tib3ggPSB0aGlzLmlzQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCk7XG4gICAgY29uc3QgaXNHcmlkSGVhZGVyQ2hlY2tib3ggPSB0aGlzLmlzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCk7XG4gICAgY29uc3QgaGFzRXhwbGljaXRDb2xDaGVja2JveCA9IHRoaXMudmlzaWJsZUNvbHVtbnMoKS5zb21lKChjKSA9PiBjLmNoZWNrYm94U2VsZWN0aW9uKTtcblxuICAgIHJldHVybiB0aGlzLnZpc2libGVDb2x1bW5zKCkubWFwKChjb2wsIGlkeCkgPT4ge1xuICAgICAgbGV0IHdpZHRoTnVtOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgICBpZiAodHlwZW9mIGNvbC53aWR0aCA9PT0gJ3N0cmluZycgJiYgY29sLndpZHRoLmVuZHNXaXRoKCdweCcpKSB7XG4gICAgICAgIHdpZHRoTnVtID0gcGFyc2VJbnQoY29sLndpZHRoLCAxMCk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiAoY29sLndpZHRoIGFzIHVua25vd24pID09PSAnbnVtYmVyJykge1xuICAgICAgICB3aWR0aE51bSA9IGNvbC53aWR0aCBhcyB1bmtub3duIGFzIG51bWJlcjtcbiAgICAgIH1cblxuICAgICAgbGV0IGNvbENoZWNrYm94U2VsZWN0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gY29sLmNoZWNrYm94U2VsZWN0aW9uO1xuICAgICAgbGV0IGNvbEhlYWRlckNoZWNrYm94U2VsZWN0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkID0gY29sLmhlYWRlckNoZWNrYm94U2VsZWN0aW9uO1xuXG4gICAgICBpZiAoIWhhc0V4cGxpY2l0Q29sQ2hlY2tib3ggJiYgaXNHcmlkQ2hlY2tib3ggJiYgaWR4ID09PSAwKSB7XG4gICAgICAgIGNvbENoZWNrYm94U2VsZWN0aW9uID0gdHJ1ZTtcbiAgICAgICAgY29sSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb24gPSBpc0dyaWRIZWFkZXJDaGVja2JveDtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uY29sLFxuICAgICAgICBoZWFkZXJOYW1lOiBjb2wubGFiZWwsIC8vIEJXYXlzLWdyaWQgLyBBRyBHcmlkIHN0YW5kYXJkXG4gICAgICAgIGhlYWRlcjogY29sLmxhYmVsLFxuICAgICAgICB0aXRsZTogY29sLmxhYmVsLFxuICAgICAgICBoaWRlOiBjb2wudmlzaWJsZSA9PT0gZmFsc2UsXG4gICAgICAgIHdpZHRoOiB3aWR0aE51bSxcbiAgICAgICAgYWdnRnVuYzogY29sLmFnZ3JlZ2F0ZSAmJiBjb2wuYWdncmVnYXRlICE9PSAnbm9uZScgPyBjb2wuYWdncmVnYXRlIDogdW5kZWZpbmVkLFxuICAgICAgICBjaGVja2JveFNlbGVjdGlvbjogY29sQ2hlY2tib3hTZWxlY3Rpb24sXG4gICAgICAgIGhlYWRlckNoZWNrYm94U2VsZWN0aW9uOiBjb2xIZWFkZXJDaGVja2JveFNlbGVjdGlvbixcbiAgICAgIH07XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGdyaWRJbnN0YW5jZUtleSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBkcyA9IHRoaXMuZ3JpZERlZmluaXRpb24oKT8uZGF0YVNvdXJjZUlkIHx8ICdjdXN0b20nO1xuICAgIGNvbnN0IGNvbHMgPSB0aGlzLnZpc2libGVDb2x1bW5zKCkubWFwKChjKSA9PiBjLmZpZWxkKS5qb2luKCdfJyk7XG4gICAgcmV0dXJuIGAke2RzfV8ke2NvbHN9YDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZ3JpZFN0YXRlS2V5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IGRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5kYXRhU291cmNlSWQgfHwgJ2N1c3RvbSc7XG4gICAgY29uc3QgYWxsQ29scyA9IHRoaXMudmlzaWJsZUNvbHVtbnMoKS5tYXAoKGMpID0+IGMuZmllbGQpO1xuICAgIGNvbnN0IGNvdW50ID0gYWxsQ29scy5sZW5ndGg7XG4gICAgY29uc3QgY29sc1NpZyA9IGFsbENvbHMuc2xpY2UoMCwgNSkuam9pbignXycpO1xuICAgIHJldHVybiBgcnB0XyR7ZHN9XyR7Y291bnR9XyR7Y29sc1NpZyB8fCAnZ3JpZCd9YDtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZ3JpZENvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zIHx8IHt9O1xuICAgIGNvbnN0IHJvd1NlbCA9IHRoaXMuZWZmZWN0aXZlUm93U2VsZWN0aW9uKCk7XG4gICAgY29uc3QgaGFzQ2hlY2tib3ggPSB0aGlzLmlzQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCk7XG4gICAgY29uc3QgaGFzSGVhZGVyQ2hlY2tib3ggPSB0aGlzLmlzSGVhZGVyQ2hlY2tib3hTZWxlY3Rpb25FbmFibGVkKCk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc2lkZUJhcjogb3B0cy5zaWRlQmFyICE9PSB1bmRlZmluZWQgPyBvcHRzLnNpZGVCYXIgOiB0cnVlLFxuICAgICAgc3RhdHVzQmFyOiBvcHRzLnN0YXR1c0JhciAhPT0gdW5kZWZpbmVkID8gb3B0cy5zdGF0dXNCYXIgOiB0cnVlLFxuICAgICAgZ2xvYmFsU2VhcmNoOiBvcHRzLmdsb2JhbFNlYXJjaCAhPT0gdW5kZWZpbmVkID8gb3B0cy5nbG9iYWxTZWFyY2ggOiB0cnVlLFxuICAgICAgLi4ub3B0cyxcbiAgICAgIHJvd1NlbGVjdGlvbjogcm93U2VsLFxuICAgICAgc2VsZWN0aW9uTW9kZTogcm93U2VsLFxuICAgICAgY2hlY2tib3hTZWxlY3Rpb246IGhhc0NoZWNrYm94LFxuICAgICAgaGVhZGVyQ2hlY2tib3hTZWxlY3Rpb246IGhhc0hlYWRlckNoZWNrYm94LFxuICAgICAgc3RhdGVLZXk6IHRoaXMuZ3JpZFN0YXRlS2V5KCksXG4gICAgfTtcbiAgfSk7XG5cbiAgcHJpdmF0ZSByZWNvbmNpbGVDb2x1bW5Hcm91cERlZnMoXG4gICAgZ3JvdXBEZWZzOiBhbnlbXSB8IG51bGwgfCB1bmRlZmluZWQsXG4gICAgY3VycmVudENvbHVtbnM6IGFueVtdXG4gICk6IGFueVtdIHwgbnVsbCB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGdyb3VwRGVmcykgfHwgZ3JvdXBEZWZzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRGaWVsZHMgPSBuZXcgU2V0KGN1cnJlbnRDb2x1bW5zLm1hcCgoYykgPT4gYy5maWVsZCkpO1xuICAgIGNvbnN0IGxlYWZGaWVsZHM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgY29sbGVjdExlYXZlcyA9IChkZWZzOiBhbnlbXSkgPT4ge1xuICAgICAgZm9yIChjb25zdCBkIG9mIGRlZnMpIHtcbiAgICAgICAgaWYgKGQgJiYgQXJyYXkuaXNBcnJheShkLmNoaWxkcmVuKSkge1xuICAgICAgICAgIGNvbGxlY3RMZWF2ZXMoZC5jaGlsZHJlbik7XG4gICAgICAgIH0gZWxzZSBpZiAoZCAmJiBkLmZpZWxkKSB7XG4gICAgICAgICAgbGVhZkZpZWxkcy5wdXNoKGQuZmllbGQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgICBjb2xsZWN0TGVhdmVzKGdyb3VwRGVmcyk7XG5cbiAgICAvLyBJZiBsZWFmIGZpZWxkcyBpbiBncm91cERlZnMgZG9uJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgYWN0aXZlIGNvbHVtbnMgKGUuZy4gZHVtbXkgaWQvbmFtZSBmcm9tIHByZXZpb3VzIHRlbXBsYXRlKSxcbiAgICAvLyBvciBpZiB0aGUgZ3JvdXAgZGVmaW5pdGlvbiBvbmx5IGhhZCBkdW1teSB0ZW1wbGF0ZSBjb2x1bW5zICg8PSAyKSB3aGlsZSBjdXJyZW50Q29sdW1ucyBpcyBhIGZ1bGwgZGF0YXNldCAoPiA1KSxcbiAgICAvLyB0aGUgc2F2ZWQgZ3JvdXBEZWZzIGlzIG9ic29sZXRlIGFuZCBtdXN0IGJlIGNsZWFyZWQgc28gdGhlIGdyaWQgY2FuIHJlbmRlciBhbGwgY3VycmVudCBjb2x1bW5zIGNsZWFubHkuXG4gICAgY29uc3QgdmFsaWRMZWF2ZXMgPSBsZWFmRmllbGRzLmZpbHRlcigoZikgPT4gY3VycmVudEZpZWxkcy5oYXMoZikpO1xuICAgIGlmICh2YWxpZExlYXZlcy5sZW5ndGggPT09IDAgfHwgKGxlYWZGaWVsZHMubGVuZ3RoIDw9IDIgJiYgY3VycmVudENvbHVtbnMubGVuZ3RoID4gNSAmJiB2YWxpZExlYXZlcy5sZW5ndGggPD0gMikpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIElmIHNvbWUgY29sdW1ucyBhcmUgZ3JvdXBlZCwgYnV0IG5ldyBjb2x1bW5zIHdlcmUgYWRkZWQvZGV0ZWN0ZWQgdGhhdCBhcmVuJ3QgaW4gZ3JvdXBEZWZzLFxuICAgIC8vIGFwcGVuZCB0aGUgcmVtYWluaW5nIGNvbHVtbnMgc28gdGhhdCBVbHRyYUdyaWQncyBmbGF0dGVuQ29sdW1uRGVmcyB3aWxsIGluY2x1ZGUgQUxMIGNvbHVtbnMuXG4gICAgY29uc3QgbGVhZlNldCA9IG5ldyBTZXQobGVhZkZpZWxkcyk7XG4gICAgY29uc3QgbWlzc2luZ0NvbHVtbnMgPSBjdXJyZW50Q29sdW1ucy5maWx0ZXIoKGMpID0+ICFsZWFmU2V0LmhhcyhjLmZpZWxkKSk7XG4gICAgaWYgKG1pc3NpbmdDb2x1bW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBbLi4uZ3JvdXBEZWZzLCAuLi5taXNzaW5nQ29sdW1uc107XG4gICAgfVxuXG4gICAgcmV0dXJuIGdyb3VwRGVmcztcbiAgfVxuXG4gIHJlYWRvbmx5IGdyaWRSZXBvcnRTdGF0ZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCBvcHRzID0gdGhpcy5ncmlkRGVmaW5pdGlvbigpPy5vcHRpb25zO1xuICAgIGNvbnN0IGV4aXN0aW5nID0gKG9wdHM/LnJlcG9ydFN0YXRlIGFzIGFueSkgfHwge307XG4gICAgY29uc3QgYnJpZGdlZCA9IHRoaXMuYnJpZGdlZENvbHVtbnMoKTtcbiAgICBjb25zdCBlZmZlY3RpdmVHcm91cERlZnMgPSB0aGlzLnJlY29uY2lsZUNvbHVtbkdyb3VwRGVmcyhleGlzdGluZy5jb2x1bW5Hcm91cERlZnMsIGJyaWRnZWQpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmV4aXN0aW5nLFxuICAgICAgY29sdW1uR3JvdXBEZWZzOiBlZmZlY3RpdmVHcm91cERlZnMsXG4gICAgICBjb2x1bW5EZWZzOiBicmlkZ2VkLFxuICAgICAgc29ydE1vZGVsOiAob3B0cz8uc29ydE1vZGVsIGFzIGFueSkgfHwgZXhpc3Rpbmcuc29ydE1vZGVsIHx8IFtdLFxuICAgICAgZ3JvdXBNb2RlbDogb3B0cz8uZ3JvdXBNb2RlbCB8fCBleGlzdGluZy5ncm91cE1vZGVsIHx8IFtdLFxuICAgICAgYWN0aXZlRmlsdGVyczogZXhpc3RpbmcuYWN0aXZlRmlsdGVycyB8fCB7fSxcbiAgICAgIGNvbmRpdGlvbkZpbHRlcnM6IGV4aXN0aW5nLmNvbmRpdGlvbkZpbHRlcnMgfHwge30sXG4gICAgICBoaWdobGlnaHRSdWxlczogZXhpc3RpbmcuaGlnaGxpZ2h0UnVsZXMgfHwgW10sXG4gICAgfTtcbiAgfSk7XG5cbiAgcmVhZG9ubHkgZ3JpZElucHV0cyA9IGNvbXB1dGVkKCgpID0+ICh7XG4gICAgY29sdW1uczogdGhpcy5icmlkZ2VkQ29sdW1ucygpLFxuICAgIGNvbHVtbkRlZnM6IHRoaXMuYnJpZGdlZENvbHVtbnMoKSxcbiAgICByb3dEYXRhOiB0aGlzLmRhdGEoKSxcbiAgICBjb25maWc6IHRoaXMuZ3JpZENvbmZpZygpLFxuICAgIHJlcG9ydFN0YXRlOiB0aGlzLmdyaWRSZXBvcnRTdGF0ZSgpLFxuICAgIHBhZ2luYXRpb246IHRoaXMuZ3JpZERlZmluaXRpb24oKS5vcHRpb25zPy5wYWdpbmF0aW9uICE9PSBmYWxzZSxcbiAgICBwYWdlU2l6ZTogdGhpcy5ncmlkRGVmaW5pdGlvbigpLm9wdGlvbnM/LnBhZ2VTaXplID8/IDEwLFxuICB9KSk7XG5cbiAgcmVhZG9ubHkgc2hvd1Jvd051bWJlcnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuICEhdGhpcy5ncmlkRGVmaW5pdGlvbigpLm9wdGlvbnM/LnNob3dSb3dOdW1iZXJzO1xuICB9KTtcblxuICByZWFkb25seSBpc1BhZ2luYXRpb25FbmFibGVkID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmdyaWREZWZpbml0aW9uKCkub3B0aW9ucz8ucGFnaW5hdGlvbiAhPT0gZmFsc2U7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IHBhZ2VTaXplID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIHJldHVybiB0aGlzLmdyaWREZWZpbml0aW9uKCkub3B0aW9ucz8ucGFnZVNpemUgPz8gMTA7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGNvbFNwYW4gPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMudmlzaWJsZUNvbHVtbnMoKS5sZW5ndGggKyAodGhpcy5zaG93Um93TnVtYmVycygpID8gMSA6IDApICsgKHRoaXMuaXNTZWxlY3Rpb25FbmFibGVkKCkgPyAxIDogMCk7XG4gIH0pO1xuXG4gIHJlYWRvbmx5IGhhc0FnZ3JlZ2F0ZXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMuZ3JpZERlZmluaXRpb24oKS5vcHRpb25zPy5zaG93Rm9vdGVyICYmXG4gICAgICB0aGlzLnZpc2libGVDb2x1bW5zKCkuc29tZSgoYykgPT4gYy5hZ2dyZWdhdGUgJiYgYy5hZ2dyZWdhdGUgIT09ICdub25lJylcbiAgICApO1xuICB9KTtcblxuICByZWFkb25seSBzb3J0ZWREYXRhID0gY29tcHV0ZWQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4oKCkgPT4ge1xuICAgIGNvbnN0IHJhdyA9ICh0aGlzLmRhdGEoKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdKSB8fCBbXTtcbiAgICBjb25zdCBjb2wgPSB0aGlzLnNvcnRDb2x1bW4oKTtcbiAgICBjb25zdCBkaXIgPSB0aGlzLnNvcnREaXJlY3Rpb24oKTtcblxuICAgIGlmICghY29sKSByZXR1cm4gcmF3O1xuXG4gICAgcmV0dXJuIFsuLi5yYXddLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgIGNvbnN0IHZhbEEgPSBhW2NvbF07XG4gICAgICBjb25zdCB2YWxCID0gYltjb2xdO1xuICAgICAgaWYgKHZhbEEgPT0gbnVsbCAmJiB2YWxCID09IG51bGwpIHJldHVybiAwO1xuICAgICAgaWYgKHZhbEEgPT0gbnVsbCkgcmV0dXJuIDE7XG4gICAgICBpZiAodmFsQiA9PSBudWxsKSByZXR1cm4gLTE7XG4gICAgICBpZiAodmFsQSA8IHZhbEIpIHJldHVybiBkaXIgPT09ICdhc2MnID8gLTEgOiAxO1xuICAgICAgaWYgKHZhbEEgPiB2YWxCKSByZXR1cm4gZGlyID09PSAnYXNjJyA/IDEgOiAtMTtcbiAgICAgIHJldHVybiAwO1xuICAgIH0pO1xuICB9KTtcblxuICByZWFkb25seSB0b3RhbFBhZ2VzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGlmICghdGhpcy5pc1BhZ2luYXRpb25FbmFibGVkKCkpIHJldHVybiAxO1xuICAgIGNvbnN0IGxlbiA9IHRoaXMuc29ydGVkRGF0YSgpLmxlbmd0aDtcbiAgICByZXR1cm4gTWF0aC5tYXgoMSwgTWF0aC5jZWlsKGxlbiAvIHRoaXMucGFnZVNpemUoKSkpO1xuICB9KTtcblxuICByZWFkb25seSBwYWdpbmF0ZWREYXRhID0gY29tcHV0ZWQ8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4oKCkgPT4ge1xuICAgIGNvbnN0IHNvcnRlZCA9IHRoaXMuc29ydGVkRGF0YSgpO1xuICAgIGlmICghdGhpcy5pc1BhZ2luYXRpb25FbmFibGVkKCkpIHtcbiAgICAgIHJldHVybiBzb3J0ZWQ7XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0ID0gKHRoaXMuY3VycmVudFBhZ2UoKSAtIDEpICogdGhpcy5wYWdlU2l6ZSgpO1xuICAgIHJldHVybiBzb3J0ZWQuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgdGhpcy5wYWdlU2l6ZSgpKTtcbiAgfSk7XG5cbiAgZ2V0SnVzdGlmeUNvbnRlbnQoYWxpZ24/OiAnbGVmdCcgfCAnY2VudGVyJyB8ICdyaWdodCcpOiBzdHJpbmcge1xuICAgIGlmIChhbGlnbiA9PT0gJ3JpZ2h0JykgcmV0dXJuICdmbGV4LWVuZCc7XG4gICAgaWYgKGFsaWduID09PSAnY2VudGVyJykgcmV0dXJuICdjZW50ZXInO1xuICAgIHJldHVybiAnZmxleC1zdGFydCc7XG4gIH1cblxuICB0b2dnbGVTb3J0KGNvbDogR3JpZENvbHVtbkRlZmluaXRpb24pOiB2b2lkIHtcbiAgICBpZiAoY29sLnNvcnRhYmxlID09PSBmYWxzZSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnNvcnRDb2x1bW4oKSA9PT0gY29sLmZpZWxkKSB7XG4gICAgICB0aGlzLnNvcnREaXJlY3Rpb24uc2V0KHRoaXMuc29ydERpcmVjdGlvbigpID09PSAnYXNjJyA/ICdkZXNjJyA6ICdhc2MnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zb3J0Q29sdW1uLnNldChjb2wuZmllbGQpO1xuICAgICAgdGhpcy5zb3J0RGlyZWN0aW9uLnNldCgnYXNjJyk7XG4gICAgfVxuICAgIHRoaXMuY3VycmVudFBhZ2Uuc2V0KDEpO1xuICB9XG5cbiAgcHJldlBhZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UoKSA+IDEpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2UudXBkYXRlKChwKSA9PiBwIC0gMSk7XG4gICAgfVxuICB9XG5cbiAgbmV4dFBhZ2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuY3VycmVudFBhZ2UoKSA8IHRoaXMudG90YWxQYWdlcygpKSB7XG4gICAgICB0aGlzLmN1cnJlbnRQYWdlLnVwZGF0ZSgocCkgPT4gcCArIDEpO1xuICAgIH1cbiAgfVxuXG4gIGZvcm1hdFZhbHVlKHZhbHVlOiB1bmtub3duLCBjb2w6IEdyaWRDb2x1bW5EZWZpbml0aW9uKTogc3RyaW5nIHtcbiAgICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuICcnO1xuICAgIGlmIChjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScpIHtcbiAgICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICByZXR1cm4gaXNOYU4obnVtKSA/IFN0cmluZyh2YWx1ZSkgOiBgJCR7bnVtLnRvTG9jYWxlU3RyaW5nKHVuZGVmaW5lZCwgeyBtaW5pbXVtRnJhY3Rpb25EaWdpdHM6IDIsIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMiB9KX1gO1xuICAgIH1cbiAgICBpZiAoY29sLmRhdGFUeXBlID09PSAnbnVtYmVyJykge1xuICAgICAgY29uc3QgbnVtID0gTnVtYmVyKHZhbHVlKTtcbiAgICAgIHJldHVybiBpc05hTihudW0pID8gU3RyaW5nKHZhbHVlKSA6IG51bS50b0xvY2FsZVN0cmluZygpO1xuICAgIH1cbiAgICBpZiAoY29sLmRhdGFUeXBlID09PSAnZGF0ZScgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgZCA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgIHJldHVybiBpc05hTihkLmdldFRpbWUoKSkgPyBTdHJpbmcodmFsdWUpIDogZC50b0xvY2FsZURhdGVTdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIFN0cmluZyh2YWx1ZSk7XG4gIH1cblxuICBjb21wdXRlQWdncmVnYXRlKGNvbDogR3JpZENvbHVtbkRlZmluaXRpb24pOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnNvcnRlZERhdGEoKTtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHJldHVybiAnMCc7XG5cbiAgICBpZiAoY29sLmFnZ3JlZ2F0ZSA9PT0gJ2NvdW50Jykge1xuICAgICAgcmV0dXJuIFN0cmluZyhkYXRhLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgY29uc3QgbnVtYmVycyA9IGRhdGFcbiAgICAgIC5tYXAoKHJvdykgPT4gTnVtYmVyKHJvd1tjb2wuZmllbGRdKSlcbiAgICAgIC5maWx0ZXIoKG4pID0+ICFpc05hTihuKSk7XG5cbiAgICBpZiAobnVtYmVycy5sZW5ndGggPT09IDApIHJldHVybiAnMCc7XG5cbiAgICBpZiAoY29sLmFnZ3JlZ2F0ZSA9PT0gJ3N1bScpIHtcbiAgICAgIGNvbnN0IHN1bSA9IG51bWJlcnMucmVkdWNlKChhY2MsIG4pID0+IGFjYyArIG4sIDApO1xuICAgICAgcmV0dXJuIGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5JyA/IGAkJHtzdW0udG9GaXhlZCgyKX1gIDogc3VtLnRvTG9jYWxlU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKGNvbC5hZ2dyZWdhdGUgPT09ICdhdmcnKSB7XG4gICAgICBjb25zdCBhdmcgPSBudW1iZXJzLnJlZHVjZSgoYWNjLCBuKSA9PiBhY2MgKyBuLCAwKSAvIG51bWJlcnMubGVuZ3RoO1xuICAgICAgcmV0dXJuIGNvbC5kYXRhVHlwZSA9PT0gJ2N1cnJlbmN5JyA/IGAkJHthdmcudG9GaXhlZCgyKX1gIDogYXZnLnRvRml4ZWQoMik7XG4gICAgfVxuXG4gICAgaWYgKGNvbC5hZ2dyZWdhdGUgPT09ICdtaW4nKSB7XG4gICAgICBjb25zdCBtaW4gPSBNYXRoLm1pbiguLi5udW1iZXJzKTtcbiAgICAgIHJldHVybiBjb2wuZGF0YVR5cGUgPT09ICdjdXJyZW5jeScgPyBgJCR7bWluLnRvRml4ZWQoMil9YCA6IFN0cmluZyhtaW4pO1xuICAgIH1cblxuICAgIGlmIChjb2wuYWdncmVnYXRlID09PSAnbWF4Jykge1xuICAgICAgY29uc3QgbWF4ID0gTWF0aC5tYXgoLi4ubnVtYmVycyk7XG4gICAgICByZXR1cm4gY29sLmRhdGFUeXBlID09PSAnY3VycmVuY3knID8gYCQke21heC50b0ZpeGVkKDIpfWAgOiBTdHJpbmcobWF4KTtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvblNlbGVjdGlvbkNoYW5nZShzZWxlY3RlZDogYW55KTogdm9pZCB7XG4gICAgY29uc3Qgcm93cyA9IEFycmF5LmlzQXJyYXkoc2VsZWN0ZWQpID8gc2VsZWN0ZWQgOiAoc2VsZWN0ZWQgPyBbc2VsZWN0ZWRdIDogW10pO1xuICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChyb3dzKTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHJvd3MpO1xuICB9XG5cbiAgaXNSb3dTZWxlY3RlZChyb3c6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRSb3dzKCkuaW5jbHVkZXMocm93KTtcbiAgfVxuXG4gIGlzQWxsU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMucGFnaW5hdGVkRGF0YSgpO1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiBkYXRhLmV2ZXJ5KChyKSA9PiB0aGlzLmlzUm93U2VsZWN0ZWQocikpO1xuICB9XG5cbiAgaXNQYXJ0aWFsbHlTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBkYXRhID0gdGhpcy5wYWdpbmF0ZWREYXRhKCk7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgY291bnQgPSBkYXRhLmZpbHRlcigocikgPT4gdGhpcy5pc1Jvd1NlbGVjdGVkKHIpKS5sZW5ndGg7XG4gICAgcmV0dXJuIGNvdW50ID4gMCAmJiBjb3VudCA8IGRhdGEubGVuZ3RoO1xuICB9XG5cbiAgdG9nZ2xlU2VsZWN0QWxsKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2VsZWN0ZWRSb3dzKCk7XG4gICAgY29uc3QgcGFnZVJvd3MgPSB0aGlzLnBhZ2luYXRlZERhdGEoKTtcbiAgICBsZXQgbmV4dDogYW55W107XG4gICAgaWYgKGNoZWNrZWQpIHtcbiAgICAgIGNvbnN0IHNldCA9IG5ldyBTZXQoWy4uLmN1cnJlbnQsIC4uLnBhZ2VSb3dzXSk7XG4gICAgICBuZXh0ID0gQXJyYXkuZnJvbShzZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXh0ID0gY3VycmVudC5maWx0ZXIoKHIpID0+ICFwYWdlUm93cy5pbmNsdWRlcyhyKSk7XG4gICAgfVxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChuZXh0KTtcbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KG5leHQpO1xuICB9XG5cbiAgdG9nZ2xlUm93U2VsZWN0aW9uKHJvdzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNoZWNrZWQgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLmNoZWNrZWQ7XG4gICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2VsZWN0ZWRSb3dzKCk7XG4gICAgY29uc3QgbW9kZSA9IHRoaXMuZWZmZWN0aXZlUm93U2VsZWN0aW9uKCk7XG4gICAgbGV0IG5leHQ6IGFueVtdO1xuICAgIGlmIChtb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgbmV4dCA9IGNoZWNrZWQgPyBbcm93XSA6IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY2hlY2tlZCkge1xuICAgICAgICBuZXh0ID0gY3VycmVudC5pbmNsdWRlcyhyb3cpID8gY3VycmVudCA6IFsuLi5jdXJyZW50LCByb3ddO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV4dCA9IGN1cnJlbnQuZmlsdGVyKChyKSA9PiByICE9PSByb3cpO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnNlbGVjdGVkUm93cy5zZXQobmV4dCk7XG4gICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChuZXh0KTtcbiAgfVxuXG4gIG9uUm93Q2xpY2socm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgY29uc3QgY3VycmVudCA9IHRoaXMuc2VsZWN0ZWRSb3dzKCk7XG4gICAgICBjb25zdCBtb2RlID0gdGhpcy5lZmZlY3RpdmVSb3dTZWxlY3Rpb24oKTtcbiAgICAgIGxldCBuZXh0OiBhbnlbXTtcbiAgICAgIGlmIChtb2RlID09PSAnc2luZ2xlJykge1xuICAgICAgICBuZXh0ID0gW3Jvd107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXh0ID0gY3VycmVudC5pbmNsdWRlcyhyb3cpID8gY3VycmVudC5maWx0ZXIoKHIpID0+IHIgIT09IHJvdykgOiBbLi4uY3VycmVudCwgcm93XTtcbiAgICAgIH1cbiAgICAgIHRoaXMuc2VsZWN0ZWRSb3dzLnNldChuZXh0KTtcbiAgICAgIHRoaXMuc2VsZWN0aW9uQ2hhbmdlLmVtaXQobmV4dCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmhhc1Jvd0NsaWNrQWN0aW9uKCkpIHtcbiAgICAgIHRoaXMucm93Q2xpY2suZW1pdCh7IHJvdywgZXZlbnQgfSk7XG4gICAgfVxuICB9XG5cbiAgb25DZWxsQ2xpY2socm93OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgY29sOiBHcmlkQ29sdW1uRGVmaW5pdGlvbiwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoY29sLmFjdGlvbikge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLnJvd0NsaWNrLmVtaXQoeyByb3csIGNvbHVtbjogY29sLCBldmVudCB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==