@agnos-ui/angular-bootstrap 0.6.0 → 0.7.0-next.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 (53) hide show
  1. package/components/accordion/accordion.component.d.ts +39 -46
  2. package/components/alert/alert.component.d.ts +18 -22
  3. package/components/collapse/collapse.component.d.ts +11 -15
  4. package/components/modal/modal.component.d.ts +30 -36
  5. package/components/pagination/pagination.component.d.ts +38 -44
  6. package/components/progressbar/progressbar.component.d.ts +16 -21
  7. package/components/rating/rating.component.d.ts +17 -23
  8. package/components/select/select.component.d.ts +24 -27
  9. package/components/slider/slider.component.d.ts +22 -31
  10. package/components/toast/toast.component.d.ts +21 -27
  11. package/components/tree/tree.component.d.ts +16 -16
  12. package/fesm2022/agnos-ui-angular-bootstrap.mjs +1447 -1052
  13. package/fesm2022/agnos-ui-angular-bootstrap.mjs.map +1 -1
  14. package/package.json +6 -6
  15. package/esm2022/agnos-ui-angular-bootstrap.mjs +0 -5
  16. package/esm2022/agnos-ui-angular.module.mjs +0 -174
  17. package/esm2022/components/accordion/accordion.component.mjs +0 -586
  18. package/esm2022/components/accordion/accordion.gen.mjs +0 -33
  19. package/esm2022/components/accordion/index.mjs +0 -3
  20. package/esm2022/components/alert/alert.component.mjs +0 -270
  21. package/esm2022/components/alert/alert.gen.mjs +0 -15
  22. package/esm2022/components/alert/index.mjs +0 -3
  23. package/esm2022/components/collapse/collapse.component.mjs +0 -89
  24. package/esm2022/components/collapse/collapse.gen.mjs +0 -15
  25. package/esm2022/components/collapse/index.mjs +0 -3
  26. package/esm2022/components/modal/index.mjs +0 -4
  27. package/esm2022/components/modal/modal.component.mjs +0 -460
  28. package/esm2022/components/modal/modal.gen.mjs +0 -27
  29. package/esm2022/components/modal/modal.service.mjs +0 -57
  30. package/esm2022/components/pagination/index.mjs +0 -3
  31. package/esm2022/components/pagination/pagination.component.mjs +0 -600
  32. package/esm2022/components/pagination/pagination.gen.mjs +0 -15
  33. package/esm2022/components/progressbar/index.mjs +0 -3
  34. package/esm2022/components/progressbar/progressbar.component.mjs +0 -219
  35. package/esm2022/components/progressbar/progressbar.gen.mjs +0 -15
  36. package/esm2022/components/rating/index.mjs +0 -3
  37. package/esm2022/components/rating/rating.component.mjs +0 -205
  38. package/esm2022/components/rating/rating.gen.mjs +0 -15
  39. package/esm2022/components/select/index.mjs +0 -3
  40. package/esm2022/components/select/select.component.mjs +0 -282
  41. package/esm2022/components/select/select.gen.mjs +0 -15
  42. package/esm2022/components/slider/index.mjs +0 -3
  43. package/esm2022/components/slider/slider.component.mjs +0 -463
  44. package/esm2022/components/slider/slider.gen.mjs +0 -15
  45. package/esm2022/components/toast/index.mjs +0 -3
  46. package/esm2022/components/toast/toast.component.mjs +0 -324
  47. package/esm2022/components/toast/toast.gen.mjs +0 -15
  48. package/esm2022/components/tree/index.mjs +0 -3
  49. package/esm2022/components/tree/tree.component.mjs +0 -450
  50. package/esm2022/components/tree/tree.gen.mjs +0 -15
  51. package/esm2022/config.gen.mjs +0 -2
  52. package/esm2022/config.mjs +0 -21
  53. package/esm2022/index.mjs +0 -30
@@ -1,600 +0,0 @@
1
- import { BaseWidgetDirective, ComponentTemplate, SlotDirective, UseDirective, auBooleanAttribute, auNumberAttribute } from '@agnos-ui/angular-headless';
2
- import { ChangeDetectionStrategy, Component, ContentChild, Directive, EventEmitter, Input, Output, TemplateRef, ViewChild, ViewEncapsulation, inject, } from '@angular/core';
3
- import { callWidgetFactory } from '../../config';
4
- import { createPagination } from './pagination.gen';
5
- import * as i0 from "@angular/core";
6
- const _c0 = ["pages"];
7
- const _c1 = ["structure"];
8
- const _c2 = (a0, a1, a2) => ({ state: a0, api: a1, directives: a2 });
9
- const _c3 = a0 => ({ page: a0 });
10
- const _c4 = (a0, a1) => [a0, a1];
11
- const _c5 = (a0, a1, a2, a3) => ({ state: a0, api: a1, directives: a2, displayedPage: a3 });
12
- function PaginationDefaultSlotsComponent_ng_template_0_For_1_Conditional_1_ng_template_1_Template(rf, ctx) { }
13
- function PaginationDefaultSlotsComponent_ng_template_0_For_1_Conditional_1_Template(rf, ctx) { if (rf & 1) {
14
- i0.ɵɵelementStart(0, "div", 7);
15
- i0.ɵɵtemplate(1, PaginationDefaultSlotsComponent_ng_template_0_For_1_Conditional_1_ng_template_1_Template, 0, 0, "ng-template", 8);
16
- i0.ɵɵelementEnd();
17
- i0.ɵɵelementStart(2, "span", 9);
18
- i0.ɵɵtext(3);
19
- i0.ɵɵelementEnd();
20
- } if (rf & 2) {
21
- const ctx_r0 = i0.ɵɵnextContext(2);
22
- const state_r2 = ctx_r0.state;
23
- const api_r3 = ctx_r0.api;
24
- const directives_r4 = ctx_r0.directives;
25
- i0.ɵɵadvance();
26
- i0.ɵɵproperty("auSlot", state_r2.ellipsisLabel())("auSlotProps", i0.ɵɵpureFunction3(3, _c2, state_r2, api_r3, directives_r4));
27
- i0.ɵɵadvance(2);
28
- i0.ɵɵtextInterpolate(state_r2.ariaEllipsisLabel());
29
- } }
30
- function PaginationDefaultSlotsComponent_ng_template_0_For_1_Conditional_2_ng_template_1_Template(rf, ctx) { }
31
- function PaginationDefaultSlotsComponent_ng_template_0_For_1_Conditional_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
32
- i0.ɵɵelementStart(0, "span", 9);
33
- i0.ɵɵtext(1);
34
- i0.ɵɵelementEnd();
35
- } if (rf & 2) {
36
- const state_r2 = i0.ɵɵnextContext(3).state;
37
- i0.ɵɵadvance();
38
- i0.ɵɵtextInterpolate(state_r2.activeLabel());
39
- } }
40
- function PaginationDefaultSlotsComponent_ng_template_0_For_1_Conditional_2_Template(rf, ctx) { if (rf & 1) {
41
- i0.ɵɵelementStart(0, "a", 6);
42
- i0.ɵɵtemplate(1, PaginationDefaultSlotsComponent_ng_template_0_For_1_Conditional_2_ng_template_1_Template, 0, 0, "ng-template", 8)(2, PaginationDefaultSlotsComponent_ng_template_0_For_1_Conditional_2_Conditional_2_Template, 2, 1, "span", 9);
43
- i0.ɵɵelementEnd();
44
- } if (rf & 2) {
45
- const page_r5 = i0.ɵɵnextContext().$implicit;
46
- const ctx_r0 = i0.ɵɵnextContext();
47
- const state_r2 = ctx_r0.state;
48
- const api_r3 = ctx_r0.api;
49
- const directives_r4 = ctx_r0.directives;
50
- i0.ɵɵproperty("auUse", i0.ɵɵpureFunction2(6, _c4, directives_r4.pageLink, i0.ɵɵpureFunction1(4, _c3, page_r5)));
51
- i0.ɵɵadvance();
52
- i0.ɵɵproperty("auSlot", state_r2.numberLabel())("auSlotProps", i0.ɵɵpureFunction4(9, _c5, state_r2, api_r3, directives_r4, page_r5));
53
- i0.ɵɵadvance();
54
- i0.ɵɵconditional(state_r2.page() === page_r5 ? 2 : -1);
55
- } }
56
- function PaginationDefaultSlotsComponent_ng_template_0_For_1_Template(rf, ctx) { if (rf & 1) {
57
- i0.ɵɵelementStart(0, "li", 5);
58
- i0.ɵɵtemplate(1, PaginationDefaultSlotsComponent_ng_template_0_For_1_Conditional_1_Template, 4, 7)(2, PaginationDefaultSlotsComponent_ng_template_0_For_1_Conditional_2_Template, 3, 14, "a", 6);
59
- i0.ɵɵelementEnd();
60
- } if (rf & 2) {
61
- const page_r5 = ctx.$implicit;
62
- const state_r2 = i0.ɵɵnextContext().state;
63
- i0.ɵɵclassProp("active", page_r5 === state_r2.page())("disabled", page_r5 === -1 || state_r2.disabled());
64
- i0.ɵɵadvance();
65
- i0.ɵɵconditional(page_r5 === -1 ? 1 : 2);
66
- } }
67
- function PaginationDefaultSlotsComponent_ng_template_0_Template(rf, ctx) { if (rf & 1) {
68
- i0.ɵɵrepeaterCreate(0, PaginationDefaultSlotsComponent_ng_template_0_For_1_Template, 3, 5, "li", 4, i0.ɵɵrepeaterTrackByIdentity);
69
- } if (rf & 2) {
70
- const state_r2 = ctx.state;
71
- i0.ɵɵrepeater(state_r2.pages());
72
- } }
73
- function PaginationDefaultSlotsComponent_ng_template_2_Conditional_1_ng_template_3_Template(rf, ctx) { }
74
- function PaginationDefaultSlotsComponent_ng_template_2_Conditional_1_Template(rf, ctx) { if (rf & 1) {
75
- i0.ɵɵelementStart(0, "li", 5)(1, "a", 6)(2, "span", 12);
76
- i0.ɵɵtemplate(3, PaginationDefaultSlotsComponent_ng_template_2_Conditional_1_ng_template_3_Template, 0, 0, "ng-template", 8);
77
- i0.ɵɵelementEnd()()();
78
- } if (rf & 2) {
79
- const ctx_r5 = i0.ɵɵnextContext();
80
- const state_r7 = ctx_r5.state;
81
- const api_r8 = ctx_r5.api;
82
- const directives_r9 = ctx_r5.directives;
83
- i0.ɵɵclassProp("disabled", state_r7.previousDisabled());
84
- i0.ɵɵadvance();
85
- i0.ɵɵproperty("auUse", directives_r9.pageFirst);
86
- i0.ɵɵadvance(2);
87
- i0.ɵɵproperty("auSlot", state_r7.firstPageLabel())("auSlotProps", i0.ɵɵpureFunction3(5, _c2, state_r7, api_r8, directives_r9));
88
- } }
89
- function PaginationDefaultSlotsComponent_ng_template_2_Conditional_2_ng_template_3_Template(rf, ctx) { }
90
- function PaginationDefaultSlotsComponent_ng_template_2_Conditional_2_Template(rf, ctx) { if (rf & 1) {
91
- i0.ɵɵelementStart(0, "li", 5)(1, "a", 6)(2, "span", 12);
92
- i0.ɵɵtemplate(3, PaginationDefaultSlotsComponent_ng_template_2_Conditional_2_ng_template_3_Template, 0, 0, "ng-template", 8);
93
- i0.ɵɵelementEnd()()();
94
- } if (rf & 2) {
95
- const ctx_r5 = i0.ɵɵnextContext();
96
- const state_r7 = ctx_r5.state;
97
- const api_r8 = ctx_r5.api;
98
- const directives_r9 = ctx_r5.directives;
99
- i0.ɵɵclassProp("disabled", state_r7.previousDisabled());
100
- i0.ɵɵadvance();
101
- i0.ɵɵproperty("auUse", directives_r9.pagePrev);
102
- i0.ɵɵadvance(2);
103
- i0.ɵɵproperty("auSlot", state_r7.previousPageLabel())("auSlotProps", i0.ɵɵpureFunction3(5, _c2, state_r7, api_r8, directives_r9));
104
- } }
105
- function PaginationDefaultSlotsComponent_ng_template_2_ng_template_3_Template(rf, ctx) { }
106
- function PaginationDefaultSlotsComponent_ng_template_2_Conditional_4_ng_template_3_Template(rf, ctx) { }
107
- function PaginationDefaultSlotsComponent_ng_template_2_Conditional_4_Template(rf, ctx) { if (rf & 1) {
108
- i0.ɵɵelementStart(0, "li", 5)(1, "a", 6)(2, "span", 12);
109
- i0.ɵɵtemplate(3, PaginationDefaultSlotsComponent_ng_template_2_Conditional_4_ng_template_3_Template, 0, 0, "ng-template", 8);
110
- i0.ɵɵelementEnd()()();
111
- } if (rf & 2) {
112
- const ctx_r5 = i0.ɵɵnextContext();
113
- const state_r7 = ctx_r5.state;
114
- const api_r8 = ctx_r5.api;
115
- const directives_r9 = ctx_r5.directives;
116
- i0.ɵɵclassProp("disabled", state_r7.nextDisabled());
117
- i0.ɵɵadvance();
118
- i0.ɵɵproperty("auUse", directives_r9.pageNext);
119
- i0.ɵɵadvance(2);
120
- i0.ɵɵproperty("auSlot", state_r7.nextPageLabel())("auSlotProps", i0.ɵɵpureFunction3(5, _c2, state_r7, api_r8, directives_r9));
121
- } }
122
- function PaginationDefaultSlotsComponent_ng_template_2_Conditional_5_ng_template_3_Template(rf, ctx) { }
123
- function PaginationDefaultSlotsComponent_ng_template_2_Conditional_5_Template(rf, ctx) { if (rf & 1) {
124
- i0.ɵɵelementStart(0, "li", 5)(1, "a", 6)(2, "span", 12);
125
- i0.ɵɵtemplate(3, PaginationDefaultSlotsComponent_ng_template_2_Conditional_5_ng_template_3_Template, 0, 0, "ng-template", 8);
126
- i0.ɵɵelementEnd()()();
127
- } if (rf & 2) {
128
- const ctx_r5 = i0.ɵɵnextContext();
129
- const state_r7 = ctx_r5.state;
130
- const api_r8 = ctx_r5.api;
131
- const directives_r9 = ctx_r5.directives;
132
- i0.ɵɵclassProp("disabled", state_r7.nextDisabled());
133
- i0.ɵɵadvance();
134
- i0.ɵɵproperty("auUse", directives_r9.pageLast);
135
- i0.ɵɵadvance(2);
136
- i0.ɵɵproperty("auSlot", state_r7.lastPageLabel())("auSlotProps", i0.ɵɵpureFunction3(5, _c2, state_r7, api_r8, directives_r9));
137
- } }
138
- function PaginationDefaultSlotsComponent_ng_template_2_Template(rf, ctx) { if (rf & 1) {
139
- i0.ɵɵelementStart(0, "ul");
140
- i0.ɵɵtemplate(1, PaginationDefaultSlotsComponent_ng_template_2_Conditional_1_Template, 4, 9, "li", 10)(2, PaginationDefaultSlotsComponent_ng_template_2_Conditional_2_Template, 4, 9, "li", 10)(3, PaginationDefaultSlotsComponent_ng_template_2_ng_template_3_Template, 0, 0, "ng-template", 8)(4, PaginationDefaultSlotsComponent_ng_template_2_Conditional_4_Template, 4, 9, "li", 10)(5, PaginationDefaultSlotsComponent_ng_template_2_Conditional_5_Template, 4, 9, "li", 10);
141
- i0.ɵɵelementEnd();
142
- i0.ɵɵelementStart(6, "div", 11);
143
- i0.ɵɵtext(7);
144
- i0.ɵɵelementEnd();
145
- } if (rf & 2) {
146
- const state_r7 = ctx.state;
147
- const api_r8 = ctx.api;
148
- const directives_r9 = ctx.directives;
149
- i0.ɵɵclassMap("au-pagination pagination" + (state_r7.size() ? " pagination-" + state_r7.size() : "") + " " + state_r7.className());
150
- i0.ɵɵadvance();
151
- i0.ɵɵconditional(state_r7.boundaryLinks() ? 1 : -1);
152
- i0.ɵɵadvance();
153
- i0.ɵɵconditional(state_r7.directionLinks() ? 2 : -1);
154
- i0.ɵɵadvance();
155
- i0.ɵɵproperty("auSlot", state_r7.pagesDisplay())("auSlotProps", i0.ɵɵpureFunction3(9, _c2, state_r7, api_r8, directives_r9));
156
- i0.ɵɵadvance();
157
- i0.ɵɵconditional(state_r7.directionLinks() ? 4 : -1);
158
- i0.ɵɵadvance();
159
- i0.ɵɵconditional(state_r7.boundaryLinks() ? 5 : -1);
160
- i0.ɵɵadvance(2);
161
- i0.ɵɵtextInterpolate(state_r7.ariaLiveLabelText());
162
- } }
163
- const _c6 = ["auPagination", ""];
164
- function PaginationComponent_ng_template_0_Template(rf, ctx) { }
165
- /**
166
- * A directive to use to give the 'ellipsis' link template to the pagination component
167
- * This directive provides a template reference for the {@link PaginationContext}.
168
- */
169
- export class PaginationEllipsisDirective {
170
- constructor() {
171
- this.templateRef = inject((TemplateRef));
172
- }
173
- static ngTemplateContextGuard(_dir, context) {
174
- return true;
175
- }
176
- static { this.ɵfac = function PaginationEllipsisDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PaginationEllipsisDirective)(); }; }
177
- static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PaginationEllipsisDirective, selectors: [["ng-template", "auPaginationEllipsis", ""]], standalone: true }); }
178
- }
179
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaginationEllipsisDirective, [{
180
- type: Directive,
181
- args: [{ selector: 'ng-template[auPaginationEllipsis]', standalone: true }]
182
- }], null, null); })();
183
- /**
184
- * A directive to use to give the 'first' link template to the pagination component
185
- * This directive provides a template reference for the {@link PaginationContext}.
186
- */
187
- export class PaginationFirstDirective {
188
- constructor() {
189
- this.templateRef = inject((TemplateRef));
190
- }
191
- static ngTemplateContextGuard(_dir, context) {
192
- return true;
193
- }
194
- static { this.ɵfac = function PaginationFirstDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PaginationFirstDirective)(); }; }
195
- static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PaginationFirstDirective, selectors: [["ng-template", "auPaginationFirst", ""]], standalone: true }); }
196
- }
197
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaginationFirstDirective, [{
198
- type: Directive,
199
- args: [{ selector: 'ng-template[auPaginationFirst]', standalone: true }]
200
- }], null, null); })();
201
- /**
202
- * A directive to use to give the 'last' link template to the pagination component
203
- * This directive provides a template reference for the {@link PaginationContext}.
204
- */
205
- export class PaginationLastDirective {
206
- constructor() {
207
- this.templateRef = inject((TemplateRef));
208
- }
209
- static ngTemplateContextGuard(_dir, context) {
210
- return true;
211
- }
212
- static { this.ɵfac = function PaginationLastDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PaginationLastDirective)(); }; }
213
- static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PaginationLastDirective, selectors: [["ng-template", "auPaginationLast", ""]], standalone: true }); }
214
- }
215
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaginationLastDirective, [{
216
- type: Directive,
217
- args: [{ selector: 'ng-template[auPaginationLast]', standalone: true }]
218
- }], null, null); })();
219
- /**
220
- * A directive to use to give the 'next' link template to the pagination component
221
- * This directive provides a template reference for the {@link PaginationContext}.
222
- */
223
- export class PaginationNextDirective {
224
- constructor() {
225
- this.templateRef = inject((TemplateRef));
226
- }
227
- static ngTemplateContextGuard(_dir, context) {
228
- return true;
229
- }
230
- static { this.ɵfac = function PaginationNextDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PaginationNextDirective)(); }; }
231
- static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PaginationNextDirective, selectors: [["ng-template", "auPaginationNext", ""]], standalone: true }); }
232
- }
233
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaginationNextDirective, [{
234
- type: Directive,
235
- args: [{ selector: 'ng-template[auPaginationNext]', standalone: true }]
236
- }], null, null); })();
237
- /**
238
- * A directive to use to give the page 'number' template to the pagination component
239
- * This directive provides a template reference for the {@link PaginationNumberContext}.
240
- */
241
- export class PaginationNumberDirective {
242
- constructor() {
243
- this.templateRef = inject((TemplateRef));
244
- }
245
- static ngTemplateContextGuard(_dir, context) {
246
- return true;
247
- }
248
- static { this.ɵfac = function PaginationNumberDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PaginationNumberDirective)(); }; }
249
- static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PaginationNumberDirective, selectors: [["ng-template", "auPaginationNumber", ""]], standalone: true }); }
250
- }
251
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaginationNumberDirective, [{
252
- type: Directive,
253
- args: [{ selector: 'ng-template[auPaginationNumber]', standalone: true }]
254
- }], null, null); })();
255
- /**
256
- * A directive to use to give the 'previous' link template to the pagination component
257
- * This directive provides a template reference for the {@link PaginationContext}.
258
- */
259
- export class PaginationPreviousDirective {
260
- constructor() {
261
- this.templateRef = inject((TemplateRef));
262
- }
263
- static ngTemplateContextGuard(_dir, context) {
264
- return true;
265
- }
266
- static { this.ɵfac = function PaginationPreviousDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PaginationPreviousDirective)(); }; }
267
- static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PaginationPreviousDirective, selectors: [["ng-template", "auPaginationPrevious", ""]], standalone: true }); }
268
- }
269
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaginationPreviousDirective, [{
270
- type: Directive,
271
- args: [{ selector: 'ng-template[auPaginationPrevious]', standalone: true }]
272
- }], null, null); })();
273
- /**
274
- * A directive to use to give the 'Pages' template for the Pages slot
275
- * This directive provides a template reference for the {@link PaginationContext}.
276
- */
277
- export class PaginationPagesDirective {
278
- constructor() {
279
- this.templateRef = inject((TemplateRef));
280
- }
281
- static ngTemplateContextGuard(_dir, context) {
282
- return true;
283
- }
284
- static { this.ɵfac = function PaginationPagesDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PaginationPagesDirective)(); }; }
285
- static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PaginationPagesDirective, selectors: [["ng-template", "auPaginationPages", ""]], standalone: true }); }
286
- }
287
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaginationPagesDirective, [{
288
- type: Directive,
289
- args: [{ selector: 'ng-template[auPaginationPages]', standalone: true }]
290
- }], null, null); })();
291
- /**
292
- * Directive to provide the slot structure for the pagination widget.
293
- * This directive provides a template reference for the {@link PaginationContext}.
294
- */
295
- export class PaginationStructureDirective {
296
- constructor() {
297
- this.templateRef = inject((TemplateRef));
298
- }
299
- static ngTemplateContextGuard(_dir, context) {
300
- return true;
301
- }
302
- static { this.ɵfac = function PaginationStructureDirective_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PaginationStructureDirective)(); }; }
303
- static { this.ɵdir = /*@__PURE__*/ i0.ɵɵdefineDirective({ type: PaginationStructureDirective, selectors: [["ng-template", "auPaginationStructure", ""]], standalone: true }); }
304
- }
305
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaginationStructureDirective, [{
306
- type: Directive,
307
- args: [{ selector: 'ng-template[auPaginationStructure]', standalone: true }]
308
- }], null, null); })();
309
- class PaginationDefaultSlotsComponent {
310
- static { this.ɵfac = function PaginationDefaultSlotsComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PaginationDefaultSlotsComponent)(); }; }
311
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PaginationDefaultSlotsComponent, selectors: [["ng-component"]], viewQuery: function PaginationDefaultSlotsComponent_Query(rf, ctx) { if (rf & 1) {
312
- i0.ɵɵviewQuery(_c0, 7);
313
- i0.ɵɵviewQuery(_c1, 7);
314
- } if (rf & 2) {
315
- let _t;
316
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.pages = _t.first);
317
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.structure = _t.first);
318
- } }, standalone: true, features: [i0.ɵɵStandaloneFeature], decls: 4, vars: 0, consts: [["pages", ""], ["structure", ""], ["auPaginationPages", ""], ["auPaginationStructure", ""], [1, "page-item", 3, "active", "disabled"], [1, "page-item"], [1, "page-link", 3, "auUse"], ["aria-hidden", "true", 1, "page-link", "au-ellipsis"], [3, "auSlot", "auSlotProps"], [1, "visually-hidden"], [1, "page-item", 3, "disabled"], ["aria-live", "polite", 1, "visually-hidden"], ["aria-hidden", "true"]], template: function PaginationDefaultSlotsComponent_Template(rf, ctx) { if (rf & 1) {
319
- i0.ɵɵtemplate(0, PaginationDefaultSlotsComponent_ng_template_0_Template, 2, 0, "ng-template", 2, 0, i0.ɵɵtemplateRefExtractor)(2, PaginationDefaultSlotsComponent_ng_template_2_Template, 8, 13, "ng-template", 3, 1, i0.ɵɵtemplateRefExtractor);
320
- } }, dependencies: [SlotDirective, PaginationPagesDirective, PaginationStructureDirective, UseDirective], encapsulation: 2, changeDetection: 0 }); }
321
- }
322
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaginationDefaultSlotsComponent, [{
323
- type: Component,
324
- args: [{
325
- standalone: true,
326
- imports: [SlotDirective, PaginationPagesDirective, PaginationStructureDirective, UseDirective],
327
- changeDetection: ChangeDetectionStrategy.OnPush,
328
- template: `
329
- <ng-template auPaginationPages #pages let-state="state" let-api="api" let-directives="directives">
330
- @for (page of state.pages(); track page; let i = $index) {
331
- <li class="page-item" [class.active]="page === state.page()" [class.disabled]="page === -1 || state.disabled()">
332
- @if (page === -1) {
333
- <div class="page-link au-ellipsis" aria-hidden="true">
334
- <ng-template [auSlot]="state.ellipsisLabel()" [auSlotProps]="{state, api, directives}" />
335
- </div>
336
- <span class="visually-hidden">{{ state.ariaEllipsisLabel() }}</span>
337
- } @else {
338
- <a class="page-link" [auUse]="[directives.pageLink, {page}]">
339
- <ng-template [auSlot]="state.numberLabel()" [auSlotProps]="{state, api, directives, displayedPage: page}" />
340
- @if (state.page() === page) {
341
- <span class="visually-hidden">{{ state.activeLabel() }}</span>
342
- }
343
- </a>
344
- }
345
- </li>
346
- }
347
- </ng-template>
348
- <ng-template auPaginationStructure #structure let-state="state" let-api="api" let-directives="directives">
349
- <ul [class]="'au-pagination pagination' + (state.size() ? ' pagination-' + state.size() : '') + ' ' + state.className()">
350
- @if (state.boundaryLinks()) {
351
- <li class="page-item" [class.disabled]="state.previousDisabled()">
352
- <a class="page-link" [auUse]="directives.pageFirst">
353
- <span aria-hidden="true">
354
- <ng-template [auSlot]="state.firstPageLabel()" [auSlotProps]="{state, api, directives}" />
355
- </span>
356
- </a>
357
- </li>
358
- }
359
- @if (state.directionLinks()) {
360
- <li class="page-item" [class.disabled]="state.previousDisabled()">
361
- <a class="page-link" [auUse]="directives.pagePrev">
362
- <span aria-hidden="true">
363
- <ng-template [auSlot]="state.previousPageLabel()" [auSlotProps]="{state, api, directives}" />
364
- </span>
365
- </a>
366
- </li>
367
- }
368
- <ng-template [auSlot]="state.pagesDisplay()" [auSlotProps]="{state, api, directives}" />
369
- @if (state.directionLinks()) {
370
- <li class="page-item" [class.disabled]="state.nextDisabled()">
371
- <a class="page-link" [auUse]="directives.pageNext">
372
- <span aria-hidden="true">
373
- <ng-template [auSlot]="state.nextPageLabel()" [auSlotProps]="{state, api, directives}" />
374
- </span>
375
- </a>
376
- </li>
377
- }
378
- @if (state.boundaryLinks()) {
379
- <li class="page-item" [class.disabled]="state.nextDisabled()">
380
- <a class="page-link" [auUse]="directives.pageLast">
381
- <span aria-hidden="true">
382
- <ng-template [auSlot]="state.lastPageLabel()" [auSlotProps]="{state, api, directives}" />
383
- </span>
384
- </a>
385
- </li>
386
- }
387
- </ul>
388
- <div aria-live="polite" class="visually-hidden">{{ state.ariaLiveLabelText() }}</div>
389
- </ng-template>
390
- `,
391
- }]
392
- }], null, { pages: [{
393
- type: ViewChild,
394
- args: ['pages', { static: true }]
395
- }], structure: [{
396
- type: ViewChild,
397
- args: ['structure', { static: true }]
398
- }] }); })();
399
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PaginationDefaultSlotsComponent, { className: "PaginationDefaultSlotsComponent", filePath: "components/pagination/pagination.component.ts", lineNumber: 184 }); })();
400
- /**
401
- * The default slot for the pages
402
- */
403
- export const paginationDefaultSlotPages = new ComponentTemplate(PaginationDefaultSlotsComponent, 'pages');
404
- /**
405
- * The default slot for the structure
406
- */
407
- export const paginationDefaultSlotStructure = new ComponentTemplate(PaginationDefaultSlotsComponent, 'structure');
408
- /**
409
- * The `PaginationComponent` is an Angular component that extends the `BaseWidgetDirective`
410
- * to provide a customizable pagination widget. It includes various input properties
411
- * to configure labels, templates, and behavior for accessibility and internationalization (i18n).
412
- */
413
- export class PaginationComponent extends BaseWidgetDirective {
414
- constructor() {
415
- super(callWidgetFactory({
416
- factory: createPagination,
417
- widgetName: 'pagination',
418
- defaultConfig: {
419
- structure: paginationDefaultSlotStructure,
420
- pagesDisplay: paginationDefaultSlotPages,
421
- },
422
- events: {
423
- onPageChange: (page) => this.pageChange.emit(page),
424
- },
425
- slotTemplates: () => ({
426
- structure: this.slotStructureFromContent?.templateRef,
427
- ellipsisLabel: this.slotEllipsisFromContent?.templateRef,
428
- firstPageLabel: this.slotFirstFromContent?.templateRef,
429
- previousPageLabel: this.slotPreviousFromContent?.templateRef,
430
- nextPageLabel: this.slotNextFromContent?.templateRef,
431
- lastPageLabel: this.slotLastFromContent?.templateRef,
432
- pagesDisplay: this.slotPagesFromContent?.templateRef,
433
- numberLabel: this.slotNumberLabelFromContent?.templateRef,
434
- }),
435
- }));
436
- /**
437
- * An event fired when the page is changed.
438
- *
439
- * Event payload is the number of the newly selected page.
440
- *
441
- * Page numbers start with `1`.
442
- * @defaultValue
443
- * ```ts
444
- * () => {}
445
- * ```
446
- */
447
- this.pageChange = new EventEmitter();
448
- }
449
- static { this.ɵfac = function PaginationComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || PaginationComponent)(); }; }
450
- static { this.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PaginationComponent, selectors: [["", "auPagination", ""]], contentQueries: function PaginationComponent_ContentQueries(rf, ctx, dirIndex) { if (rf & 1) {
451
- i0.ɵɵcontentQuery(dirIndex, PaginationEllipsisDirective, 5);
452
- i0.ɵɵcontentQuery(dirIndex, PaginationFirstDirective, 5);
453
- i0.ɵɵcontentQuery(dirIndex, PaginationPreviousDirective, 5);
454
- i0.ɵɵcontentQuery(dirIndex, PaginationNextDirective, 5);
455
- i0.ɵɵcontentQuery(dirIndex, PaginationLastDirective, 5);
456
- i0.ɵɵcontentQuery(dirIndex, PaginationPagesDirective, 5);
457
- i0.ɵɵcontentQuery(dirIndex, PaginationNumberDirective, 5);
458
- i0.ɵɵcontentQuery(dirIndex, PaginationStructureDirective, 5);
459
- } if (rf & 2) {
460
- let _t;
461
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.slotEllipsisFromContent = _t.first);
462
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.slotFirstFromContent = _t.first);
463
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.slotPreviousFromContent = _t.first);
464
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.slotNextFromContent = _t.first);
465
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.slotLastFromContent = _t.first);
466
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.slotPagesFromContent = _t.first);
467
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.slotNumberLabelFromContent = _t.first);
468
- i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.slotStructureFromContent = _t.first);
469
- } }, hostVars: 1, hostBindings: function PaginationComponent_HostBindings(rf, ctx) { if (rf & 2) {
470
- i0.ɵɵattribute("aria-label", ctx.state.ariaLabel());
471
- } }, inputs: { ariaPageLabel: [0, "auAriaPageLabel", "ariaPageLabel"], ariaLiveLabel: [0, "auAriaLiveLabel", "ariaLiveLabel"], ariaLabel: [0, "auAriaLabel", "ariaLabel"], activeLabel: [0, "auActiveLabel", "activeLabel"], ariaFirstLabel: [0, "auAriaFirstLabel", "ariaFirstLabel"], ariaPreviousLabel: [0, "auAriaPreviousLabel", "ariaPreviousLabel"], ariaNextLabel: [0, "auAriaNextLabel", "ariaNextLabel"], ariaLastLabel: [0, "auAriaLastLabel", "ariaLastLabel"], ariaEllipsisLabel: [0, "auAriaEllipsisLabel", "ariaEllipsisLabel"], pageLink: [0, "auPageLink", "pageLink"], ellipsisLabel: [0, "auEllipsisLabel", "ellipsisLabel"], firstPageLabel: [0, "auFirstPageLabel", "firstPageLabel"], previousPageLabel: [0, "auPreviousPageLabel", "previousPageLabel"], nextPageLabel: [0, "auNextPageLabel", "nextPageLabel"], lastPageLabel: [0, "auLastPageLabel", "lastPageLabel"], pagesDisplay: [0, "auPagesDisplay", "pagesDisplay"], numberLabel: [0, "auNumberLabel", "numberLabel"], structure: [0, "auStructure", "structure"], disabled: [2, "auDisabled", "disabled", auBooleanAttribute], boundaryLinks: [2, "auBoundaryLinks", "boundaryLinks", auBooleanAttribute], directionLinks: [2, "auDirectionLinks", "directionLinks", auBooleanAttribute], collectionSize: [2, "auCollectionSize", "collectionSize", auNumberAttribute], page: [2, "auPage", "page", auNumberAttribute], pageSize: [2, "auPageSize", "pageSize", auNumberAttribute], size: [0, "auSize", "size"], pagesFactory: [0, "auPagesFactory", "pagesFactory"], className: [0, "auClassName", "className"] }, outputs: { pageChange: "auPageChange" }, standalone: true, features: [i0.ɵɵInputTransformsFeature, i0.ɵɵInheritDefinitionFeature, i0.ɵɵStandaloneFeature], attrs: _c6, decls: 1, vars: 6, consts: [[3, "auSlotProps", "auSlot"]], template: function PaginationComponent_Template(rf, ctx) { if (rf & 1) {
472
- i0.ɵɵtemplate(0, PaginationComponent_ng_template_0_Template, 0, 0, "ng-template", 0);
473
- } if (rf & 2) {
474
- i0.ɵɵproperty("auSlotProps", i0.ɵɵpureFunction3(2, _c2, ctx.state, ctx.api, ctx.directives))("auSlot", ctx.state.structure());
475
- } }, dependencies: [SlotDirective], encapsulation: 2, changeDetection: 0 }); }
476
- }
477
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PaginationComponent, [{
478
- type: Component,
479
- args: [{
480
- selector: '[auPagination]',
481
- standalone: true,
482
- imports: [SlotDirective],
483
- changeDetection: ChangeDetectionStrategy.OnPush,
484
- host: {
485
- '[attr.aria-label]': 'state.ariaLabel()',
486
- },
487
- encapsulation: ViewEncapsulation.None,
488
- template: `<ng-template [auSlotProps]="{state, api, directives}" [auSlot]="state.structure()" />`,
489
- }]
490
- }], () => [], { ariaPageLabel: [{
491
- type: Input,
492
- args: ['auAriaPageLabel']
493
- }], ariaLiveLabel: [{
494
- type: Input,
495
- args: ['auAriaLiveLabel']
496
- }], ariaLabel: [{
497
- type: Input,
498
- args: ['auAriaLabel']
499
- }], activeLabel: [{
500
- type: Input,
501
- args: ['auActiveLabel']
502
- }], ariaFirstLabel: [{
503
- type: Input,
504
- args: ['auAriaFirstLabel']
505
- }], ariaPreviousLabel: [{
506
- type: Input,
507
- args: ['auAriaPreviousLabel']
508
- }], ariaNextLabel: [{
509
- type: Input,
510
- args: ['auAriaNextLabel']
511
- }], ariaLastLabel: [{
512
- type: Input,
513
- args: ['auAriaLastLabel']
514
- }], ariaEllipsisLabel: [{
515
- type: Input,
516
- args: ['auAriaEllipsisLabel']
517
- }], pageLink: [{
518
- type: Input,
519
- args: ['auPageLink']
520
- }], ellipsisLabel: [{
521
- type: Input,
522
- args: ['auEllipsisLabel']
523
- }], slotEllipsisFromContent: [{
524
- type: ContentChild,
525
- args: [PaginationEllipsisDirective, { static: false }]
526
- }], firstPageLabel: [{
527
- type: Input,
528
- args: ['auFirstPageLabel']
529
- }], slotFirstFromContent: [{
530
- type: ContentChild,
531
- args: [PaginationFirstDirective, { static: false }]
532
- }], previousPageLabel: [{
533
- type: Input,
534
- args: ['auPreviousPageLabel']
535
- }], slotPreviousFromContent: [{
536
- type: ContentChild,
537
- args: [PaginationPreviousDirective, { static: false }]
538
- }], nextPageLabel: [{
539
- type: Input,
540
- args: ['auNextPageLabel']
541
- }], slotNextFromContent: [{
542
- type: ContentChild,
543
- args: [PaginationNextDirective, { static: false }]
544
- }], lastPageLabel: [{
545
- type: Input,
546
- args: ['auLastPageLabel']
547
- }], slotLastFromContent: [{
548
- type: ContentChild,
549
- args: [PaginationLastDirective, { static: false }]
550
- }], pagesDisplay: [{
551
- type: Input,
552
- args: ['auPagesDisplay']
553
- }], slotPagesFromContent: [{
554
- type: ContentChild,
555
- args: [PaginationPagesDirective, { static: false }]
556
- }], numberLabel: [{
557
- type: Input,
558
- args: ['auNumberLabel']
559
- }], slotNumberLabelFromContent: [{
560
- type: ContentChild,
561
- args: [PaginationNumberDirective, { static: false }]
562
- }], structure: [{
563
- type: Input,
564
- args: ['auStructure']
565
- }], slotStructureFromContent: [{
566
- type: ContentChild,
567
- args: [PaginationStructureDirective, { static: false }]
568
- }], disabled: [{
569
- type: Input,
570
- args: [{ alias: 'auDisabled', transform: auBooleanAttribute }]
571
- }], boundaryLinks: [{
572
- type: Input,
573
- args: [{ alias: 'auBoundaryLinks', transform: auBooleanAttribute }]
574
- }], directionLinks: [{
575
- type: Input,
576
- args: [{ alias: 'auDirectionLinks', transform: auBooleanAttribute }]
577
- }], collectionSize: [{
578
- type: Input,
579
- args: [{ alias: 'auCollectionSize', transform: auNumberAttribute }]
580
- }], page: [{
581
- type: Input,
582
- args: [{ alias: 'auPage', transform: auNumberAttribute }]
583
- }], pageSize: [{
584
- type: Input,
585
- args: [{ alias: 'auPageSize', transform: auNumberAttribute }]
586
- }], size: [{
587
- type: Input,
588
- args: ['auSize']
589
- }], pagesFactory: [{
590
- type: Input,
591
- args: ['auPagesFactory']
592
- }], pageChange: [{
593
- type: Output,
594
- args: ['auPageChange']
595
- }], className: [{
596
- type: Input,
597
- args: ['auClassName']
598
- }] }); })();
599
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(PaginationComponent, { className: "PaginationComponent", filePath: "components/pagination/pagination.component.ts", lineNumber: 213 }); })();
600
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdGlvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9wYWdpbmF0aW9uL3BhZ2luYXRpb24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGtCQUFrQixFQUFFLGlCQUFpQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDdEosT0FBTyxFQUNOLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsWUFBWSxFQUNaLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixXQUFXLEVBQ1gsU0FBUyxFQUNULGlCQUFpQixFQUNqQixNQUFNLEdBQ04sTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sY0FBYyxDQUFDO0FBRS9DLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7Ozs7O0lBMkc1Qyw4QkFBc0Q7SUFDckQsa0lBQXlGO0lBQzFGLGlCQUFNO0lBQ04sK0JBQThCO0lBQUEsWUFBK0I7SUFBQSxpQkFBTzs7Ozs7O0lBRnRELGNBQWdDO0lBQUMsQUFBakMsaURBQWdDLDRFQUF5QztJQUV6RCxlQUErQjtJQUEvQixrREFBK0I7Ozs7SUFLM0QsK0JBQThCO0lBQUEsWUFBeUI7SUFBQSxpQkFBTzs7O0lBQWhDLGNBQXlCO0lBQXpCLDRDQUF5Qjs7O0lBSHpELDRCQUE2RDtJQUU1RCxBQURBLGtJQUE0Ryw4R0FDL0U7SUFHOUIsaUJBQUk7Ozs7Ozs7SUFMaUIsK0dBQXVDO0lBQzlDLGNBQThCO0lBQUMsQUFBL0IsK0NBQThCLHFGQUE4RDtJQUN6RyxjQUVDO0lBRkQsc0RBRUM7OztJQVhKLDZCQUFnSDtJQU03RyxBQUxGLGtHQUFtQiw4RkFLVjtJQVFWLGlCQUFLOzs7O0lBZHdELEFB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QWU7WUFFdEIsMEJBQTBCO2tCQUR6QixZQUFZO21CQUFDLHlCQUF5QixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztZQVVsQyxTQUFTO2tCQUE5QixLQUFLO21CQUFDLGFBQWE7WUFFcEIsd0JBQXdCO2tCQUR2QixZQUFZO21CQUFDLDRCQUE0QixFQUFFLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQztZQVFFLFFBQVE7a0JBQXBFLEtBQUs7bUJBQUMsRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBQztZQU9PLGFBQWE7a0JBQTlFLEtBQUs7bUJBQUMsRUFBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGtCQUFrQixFQUFDO1lBT0csY0FBYztrQkFBaEYsS0FBSzttQkFBQyxFQUFDLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxTQUFTLEVBQUUsa0JBQWtCLEVBQUM7WUFjQyxjQUFjO2tCQUEvRSxLQUFLO21CQUFDLEVBQUMsS0FBSyxFQUFFLGtCQUFrQixFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBQztZQVNSLElBQUk7a0JBQTNELEtBQUs7bUJBQUMsRUFBQyxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBQztZQVFNLFFBQVE7a0JBQW5FLEtBQUs7bUJBQUMsRUFBQyxLQUFLLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBQztZQVN6QyxJQUFJO2tCQUFwQixLQUFLO21CQUFDLFFBQVE7WUFvQlUsWUFBWTtrQkFBcEMsS0FBSzttQkFBQyxnQkFBZ0I7WUFhQyxVQUFVO2tCQUFqQyxNQUFNO21CQUFDLGNBQWM7WUFPQSxTQUFTO2tCQUE5QixLQUFLO21CQUFDLGFBQWE7O2tGQXZUUixtQkFBbUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7U2xvdENvbnRlbnR9IGZyb20gJ0BhZ25vcy11aS9hbmd1bGFyLWhlYWRsZXNzJztcbmltcG9ydCB7QmFzZVdpZGdldERpcmVjdGl2ZSwgQ29tcG9uZW50VGVtcGxhdGUsIFNsb3REaXJlY3RpdmUsIFVzZURpcmVjdGl2ZSwgYXVCb29sZWFuQXR0cmlidXRlLCBhdU51bWJlckF0dHJpYnV0ZX0gZnJvbSAnQGFnbm9zLXVpL2FuZ3VsYXItaGVhZGxlc3MnO1xuaW1wb3J0IHtcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0Q29udGVudENoaWxkLFxuXHREaXJlY3RpdmUsXG5cdEV2ZW50RW1pdHRlcixcblx0SW5wdXQsXG5cdE91dHB1dCxcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDaGlsZCxcblx0Vmlld0VuY2Fwc3VsYXRpb24sXG5cdGluamVjdCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge2NhbGxXaWRnZXRGYWN0b3J5fSBmcm9tICcuLi8uLi9jb25maWcnO1xuaW1wb3J0IHR5cGUge1BhZ2luYXRpb25Db250ZXh0LCBQYWdpbmF0aW9uTnVtYmVyQ29udGV4dCwgUGFnaW5hdGlvbldpZGdldH0gZnJvbSAnLi9wYWdpbmF0aW9uLmdlbic7XG5pbXBvcnQge2NyZWF0ZVBhZ2luYXRpb259IGZyb20gJy4vcGFnaW5hdGlvbi5nZW4nO1xuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRvIHVzZSB0byBnaXZlIHRoZSAnZWxsaXBzaXMnIGxpbmsgdGVtcGxhdGUgdG8gdGhlIHBhZ2luYXRpb24gY29tcG9uZW50XG4gKiBUaGlzIGRpcmVjdGl2ZSBwcm92aWRlcyBhIHRlbXBsYXRlIHJlZmVyZW5jZSBmb3IgdGhlIHtAbGluayBQYWdpbmF0aW9uQ29udGV4dH0uXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmctdGVtcGxhdGVbYXVQYWdpbmF0aW9uRWxsaXBzaXNdJywgc3RhbmRhbG9uZTogdHJ1ZX0pXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvbkVsbGlwc2lzRGlyZWN0aXZlIHtcblx0cHVibGljIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmPFBhZ2luYXRpb25Db250ZXh0Pik7XG5cdHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKF9kaXI6IFBhZ2luYXRpb25FbGxpcHNpc0RpcmVjdGl2ZSwgY29udGV4dDogdW5rbm93bik6IGNvbnRleHQgaXMgUGFnaW5hdGlvbkNvbnRleHQge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdG8gdXNlIHRvIGdpdmUgdGhlICdmaXJzdCcgbGluayB0ZW1wbGF0ZSB0byB0aGUgcGFnaW5hdGlvbiBjb21wb25lbnRcbiAqIFRoaXMgZGlyZWN0aXZlIHByb3ZpZGVzIGEgdGVtcGxhdGUgcmVmZXJlbmNlIGZvciB0aGUge0BsaW5rIFBhZ2luYXRpb25Db250ZXh0fS5cbiAqL1xuQERpcmVjdGl2ZSh7c2VsZWN0b3I6ICduZy10ZW1wbGF0ZVthdVBhZ2luYXRpb25GaXJzdF0nLCBzdGFuZGFsb25lOiB0cnVlfSlcbmV4cG9ydCBjbGFzcyBQYWdpbmF0aW9uRmlyc3REaXJlY3RpdmUge1xuXHRwdWJsaWMgdGVtcGxhdGVSZWYgPSBpbmplY3QoVGVtcGxhdGVSZWY8UGFnaW5hdGlvbkNvbnRleHQ+KTtcblx0c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoX2RpcjogUGFnaW5hdGlvbkZpcnN0RGlyZWN0aXZlLCBjb250ZXh0OiB1bmtub3duKTogY29udGV4dCBpcyBQYWdpbmF0aW9uQ29udGV4dCB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cblxuLyoqXG4gKiBBIGRpcmVjdGl2ZSB0byB1c2UgdG8gZ2l2ZSB0aGUgJ2xhc3QnIGxpbmsgdGVtcGxhdGUgdG8gdGhlIHBhZ2luYXRpb24gY29tcG9uZW50XG4gKiBUaGlzIGRpcmVjdGl2ZSBwcm92aWRlcyBhIHRlbXBsYXRlIHJlZmVyZW5jZSBmb3IgdGhlIHtAbGluayBQYWdpbmF0aW9uQ29udGV4dH0uXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmctdGVtcGxhdGVbYXVQYWdpbmF0aW9uTGFzdF0nLCBzdGFuZGFsb25lOiB0cnVlfSlcbmV4cG9ydCBjbGFzcyBQYWdpbmF0aW9uTGFzdERpcmVjdGl2ZSB7XG5cdHB1YmxpYyB0ZW1wbGF0ZVJlZiA9IGluamVjdChUZW1wbGF0ZVJlZjxQYWdpbmF0aW9uQ29udGV4dD4pO1xuXHRzdGF0aWMgbmdUZW1wbGF0ZUNvbnRleHRHdWFyZChfZGlyOiBQYWdpbmF0aW9uTGFzdERpcmVjdGl2ZSwgY29udGV4dDogdW5rbm93bik6IGNvbnRleHQgaXMgUGFnaW5hdGlvbkNvbnRleHQge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdG8gdXNlIHRvIGdpdmUgdGhlICduZXh0JyBsaW5rIHRlbXBsYXRlIHRvIHRoZSBwYWdpbmF0aW9uIGNvbXBvbmVudFxuICogVGhpcyBkaXJlY3RpdmUgcHJvdmlkZXMgYSB0ZW1wbGF0ZSByZWZlcmVuY2UgZm9yIHRoZSB7QGxpbmsgUGFnaW5hdGlvbkNvbnRleHR9LlxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ25nLXRlbXBsYXRlW2F1UGFnaW5hdGlvbk5leHRdJywgc3RhbmRhbG9uZTogdHJ1ZX0pXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvbk5leHREaXJlY3RpdmUge1xuXHRwdWJsaWMgdGVtcGxhdGVSZWYgPSBpbmplY3QoVGVtcGxhdGVSZWY8UGFnaW5hdGlvbkNvbnRleHQ+KTtcblx0c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoX2RpcjogUGFnaW5hdGlvbk5leHREaXJlY3RpdmUsIGNvbnRleHQ6IHVua25vd24pOiBjb250ZXh0IGlzIFBhZ2luYXRpb25Db250ZXh0IHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRvIHVzZSB0byBnaXZlIHRoZSBwYWdlICdudW1iZXInIHRlbXBsYXRlIHRvIHRoZSBwYWdpbmF0aW9uIGNvbXBvbmVudFxuICogVGhpcyBkaXJlY3RpdmUgcHJvdmlkZXMgYSB0ZW1wbGF0ZSByZWZlcmVuY2UgZm9yIHRoZSB7QGxpbmsgUGFnaW5hdGlvbk51bWJlckNvbnRleHR9LlxuICovXG5ARGlyZWN0aXZlKHtzZWxlY3RvcjogJ25nLXRlbXBsYXRlW2F1UGFnaW5hdGlvbk51bWJlcl0nLCBzdGFuZGFsb25lOiB0cnVlfSlcbmV4cG9ydCBjbGFzcyBQYWdpbmF0aW9uTnVtYmVyRGlyZWN0aXZlIHtcblx0cHVibGljIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmPFBhZ2luYXRpb25OdW1iZXJDb250ZXh0Pik7XG5cdHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKF9kaXI6IFBhZ2luYXRpb25OdW1iZXJEaXJlY3RpdmUsIGNvbnRleHQ6IHVua25vd24pOiBjb250ZXh0IGlzIFBhZ2luYXRpb25OdW1iZXJDb250ZXh0IHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuXG4vKipcbiAqIEEgZGlyZWN0aXZlIHRvIHVzZSB0byBnaXZlIHRoZSAncHJldmlvdXMnIGxpbmsgdGVtcGxhdGUgdG8gdGhlIHBhZ2luYXRpb24gY29tcG9uZW50XG4gKiBUaGlzIGRpcmVjdGl2ZSBwcm92aWRlcyBhIHRlbXBsYXRlIHJlZmVyZW5jZSBmb3IgdGhlIHtAbGluayBQYWdpbmF0aW9uQ29udGV4dH0uXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmctdGVtcGxhdGVbYXVQYWdpbmF0aW9uUHJldmlvdXNdJywgc3RhbmRhbG9uZTogdHJ1ZX0pXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvblByZXZpb3VzRGlyZWN0aXZlIHtcblx0cHVibGljIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmPFBhZ2luYXRpb25Db250ZXh0Pik7XG5cdHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKF9kaXI6IFBhZ2luYXRpb25QcmV2aW91c0RpcmVjdGl2ZSwgY29udGV4dDogdW5rbm93bik6IGNvbnRleHQgaXMgUGFnaW5hdGlvbkNvbnRleHQge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cbi8qKlxuICogQSBkaXJlY3RpdmUgdG8gdXNlIHRvIGdpdmUgdGhlICdQYWdlcycgdGVtcGxhdGUgZm9yIHRoZSBQYWdlcyBzbG90XG4gKiBUaGlzIGRpcmVjdGl2ZSBwcm92aWRlcyBhIHRlbXBsYXRlIHJlZmVyZW5jZSBmb3IgdGhlIHtAbGluayBQYWdpbmF0aW9uQ29udGV4dH0uXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmctdGVtcGxhdGVbYXVQYWdpbmF0aW9uUGFnZXNdJywgc3RhbmRhbG9uZTogdHJ1ZX0pXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvblBhZ2VzRGlyZWN0aXZlIHtcblx0cHVibGljIHRlbXBsYXRlUmVmID0gaW5qZWN0KFRlbXBsYXRlUmVmPFBhZ2luYXRpb25Db250ZXh0Pik7XG5cdHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKF9kaXI6IFBhZ2luYXRpb25QYWdlc0RpcmVjdGl2ZSwgY29udGV4dDogdW5rbm93bik6IGNvbnRleHQgaXMgUGFnaW5hdGlvbkNvbnRleHQge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cbi8qKlxuICogRGlyZWN0aXZlIHRvIHByb3ZpZGUgdGhlIHNsb3Qgc3RydWN0dXJlIGZvciB0aGUgcGFnaW5hdGlvbiB3aWRnZXQuXG4gKiBUaGlzIGRpcmVjdGl2ZSBwcm92aWRlcyBhIHRlbXBsYXRlIHJlZmVyZW5jZSBmb3IgdGhlIHtAbGluayBQYWdpbmF0aW9uQ29udGV4dH0uXG4gKi9cbkBEaXJlY3RpdmUoe3NlbGVjdG9yOiAnbmctdGVtcGxhdGVbYXVQYWdpbmF0aW9uU3RydWN0dXJlXScsIHN0YW5kYWxvbmU6IHRydWV9KVxuZXhwb3J0IGNsYXNzIFBhZ2luYXRpb25TdHJ1Y3R1cmVEaXJlY3RpdmUge1xuXHRwdWJsaWMgdGVtcGxhdGVSZWYgPSBpbmplY3QoVGVtcGxhdGVSZWY8UGFnaW5hdGlvbkNvbnRleHQ+KTtcblx0c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoX2RpcjogUGFnaW5hdGlvblN0cnVjdHVyZURpcmVjdGl2ZSwgY29udGV4dDogdW5rbm93bik6IGNvbnRleHQgaXMgUGFnaW5hdGlvbkNvbnRleHQge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5cbkBDb21wb25lbnQoe1xuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRpbXBvcnRzOiBbU2xvdERpcmVjdGl2ZSwgUGFnaW5hdGlvblBhZ2VzRGlyZWN0aXZlLCBQYWdpbmF0aW9uU3RydWN0dXJlRGlyZWN0aXZlLCBVc2VEaXJlY3RpdmVdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmctdGVtcGxhdGUgYXVQYWdpbmF0aW9uUGFnZXMgI3BhZ2VzIGxldC1zdGF0ZT1cInN0YXRlXCIgbGV0LWFwaT1cImFwaVwiIGxldC1kaXJlY3RpdmVzPVwiZGlyZWN0aXZlc1wiPlxuXHRcdFx0QGZvciAocGFnZSBvZiBzdGF0ZS5wYWdlcygpOyB0cmFjayBwYWdlOyBsZXQgaSA9ICRpbmRleCkge1xuXHRcdFx0XHQ8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIiBbY2xhc3MuYWN0aXZlXT1cInBhZ2UgPT09IHN0YXRlLnBhZ2UoKVwiIFtjbGFzcy5kaXNhYmxlZF09XCJwYWdlID09PSAtMSB8fCBzdGF0ZS5kaXNhYmxlZCgpXCI+XG5cdFx0XHRcdFx0QGlmIChwYWdlID09PSAtMSkge1xuXHRcdFx0XHRcdFx0PGRpdiBjbGFzcz1cInBhZ2UtbGluayBhdS1lbGxpcHNpc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuXHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW2F1U2xvdF09XCJzdGF0ZS5lbGxpcHNpc0xhYmVsKClcIiBbYXVTbG90UHJvcHNdPVwie3N0YXRlLCBhcGksIGRpcmVjdGl2ZXN9XCIgLz5cblx0XHRcdFx0XHRcdDwvZGl2PlxuXHRcdFx0XHRcdFx0PHNwYW4gY2xhc3M9XCJ2aXN1YWxseS1oaWRkZW5cIj57eyBzdGF0ZS5hcmlhRWxsaXBzaXNMYWJlbCgpIH19PC9zcGFuPlxuXHRcdFx0XHRcdH0gQGVsc2Uge1xuXHRcdFx0XHRcdFx0PGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBbYXVVc2VdPVwiW2RpcmVjdGl2ZXMucGFnZUxpbmssIHtwYWdlfV1cIj5cblx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlIFthdVNsb3RdPVwic3RhdGUubnVtYmVyTGFiZWwoKVwiIFthdVNsb3RQcm9wc109XCJ7c3RhdGUsIGFwaSwgZGlyZWN0aXZlcywgZGlzcGxheWVkUGFnZTogcGFnZX1cIiAvPlxuXHRcdFx0XHRcdFx0XHRAaWYgKHN0YXRlLnBhZ2UoKSA9PT0gcGFnZSkge1xuXHRcdFx0XHRcdFx0XHRcdDxzcGFuIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+e3sgc3RhdGUuYWN0aXZlTGFiZWwoKSB9fTwvc3Bhbj5cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0PC9hPlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0PC9saT5cblx0XHRcdH1cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHRcdDxuZy10ZW1wbGF0ZSBhdVBhZ2luYXRpb25TdHJ1Y3R1cmUgI3N0cnVjdHVyZSBsZXQtc3RhdGU9XCJzdGF0ZVwiIGxldC1hcGk9XCJhcGlcIiBsZXQtZGlyZWN0aXZlcz1cImRpcmVjdGl2ZXNcIj5cblx0XHRcdDx1bCBbY2xhc3NdPVwiJ2F1LXBhZ2luYXRpb24gcGFnaW5hdGlvbicgKyAoc3RhdGUuc2l6ZSgpID8gJyBwYWdpbmF0aW9uLScgKyBzdGF0ZS5zaXplKCkgOiAnJykgKyAnICcgKyBzdGF0ZS5jbGFzc05hbWUoKVwiPlxuXHRcdFx0XHRAaWYgKHN0YXRlLmJvdW5kYXJ5TGlua3MoKSkge1xuXHRcdFx0XHRcdDxsaSBjbGFzcz1cInBhZ2UtaXRlbVwiIFtjbGFzcy5kaXNhYmxlZF09XCJzdGF0ZS5wcmV2aW91c0Rpc2FibGVkKClcIj5cblx0XHRcdFx0XHRcdDxhIGNsYXNzPVwicGFnZS1saW5rXCIgW2F1VXNlXT1cImRpcmVjdGl2ZXMucGFnZUZpcnN0XCI+XG5cdFx0XHRcdFx0XHRcdDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuXHRcdFx0XHRcdFx0XHRcdDxuZy10ZW1wbGF0ZSBbYXVTbG90XT1cInN0YXRlLmZpcnN0UGFnZUxhYmVsKClcIiBbYXVTbG90UHJvcHNdPVwie3N0YXRlLCBhcGksIGRpcmVjdGl2ZXN9XCIgLz5cblx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PC9hPlxuXHRcdFx0XHRcdDwvbGk+XG5cdFx0XHRcdH1cblx0XHRcdFx0QGlmIChzdGF0ZS5kaXJlY3Rpb25MaW5rcygpKSB7XG5cdFx0XHRcdFx0PGxpIGNsYXNzPVwicGFnZS1pdGVtXCIgW2NsYXNzLmRpc2FibGVkXT1cInN0YXRlLnByZXZpb3VzRGlzYWJsZWQoKVwiPlxuXHRcdFx0XHRcdFx0PGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBbYXVVc2VdPVwiZGlyZWN0aXZlcy5wYWdlUHJldlwiPlxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW2F1U2xvdF09XCJzdGF0ZS5wcmV2aW91c1BhZ2VMYWJlbCgpXCIgW2F1U2xvdFByb3BzXT1cIntzdGF0ZSwgYXBpLCBkaXJlY3RpdmVzfVwiIC8+XG5cdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdDwvYT5cblx0XHRcdFx0XHQ8L2xpPlxuXHRcdFx0XHR9XG5cdFx0XHRcdDxuZy10ZW1wbGF0ZSBbYXVTbG90XT1cInN0YXRlLnBhZ2VzRGlzcGxheSgpXCIgW2F1U2xvdFByb3BzXT1cIntzdGF0ZSwgYXBpLCBkaXJlY3RpdmVzfVwiIC8+XG5cdFx0XHRcdEBpZiAoc3RhdGUuZGlyZWN0aW9uTGlua3MoKSkge1xuXHRcdFx0XHRcdDxsaSBjbGFzcz1cInBhZ2UtaXRlbVwiIFtjbGFzcy5kaXNhYmxlZF09XCJzdGF0ZS5uZXh0RGlzYWJsZWQoKVwiPlxuXHRcdFx0XHRcdFx0PGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBbYXVVc2VdPVwiZGlyZWN0aXZlcy5wYWdlTmV4dFwiPlxuXHRcdFx0XHRcdFx0XHQ8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj5cblx0XHRcdFx0XHRcdFx0XHQ8bmctdGVtcGxhdGUgW2F1U2xvdF09XCJzdGF0ZS5uZXh0UGFnZUxhYmVsKClcIiBbYXVTbG90UHJvcHNdPVwie3N0YXRlLCBhcGksIGRpcmVjdGl2ZXN9XCIgLz5cblx0XHRcdFx0XHRcdFx0PC9zcGFuPlxuXHRcdFx0XHRcdFx0PC9hPlxuXHRcdFx0XHRcdDwvbGk+XG5cdFx0XHRcdH1cblx0XHRcdFx0QGlmIChzdGF0ZS5ib3VuZGFyeUxpbmtzKCkpIHtcblx0XHRcdFx0XHQ8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIiBbY2xhc3MuZGlzYWJsZWRdPVwic3RhdGUubmV4dERpc2FibGVkKClcIj5cblx0XHRcdFx0XHRcdDxhIGNsYXNzPVwicGFnZS1saW5rXCIgW2F1VXNlXT1cImRpcmVjdGl2ZXMucGFnZUxhc3RcIj5cblx0XHRcdFx0XHRcdFx0PHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG5cdFx0XHRcdFx0XHRcdFx0PG5nLXRlbXBsYXRlIFthdVNsb3RdPVwic3RhdGUubGFzdFBhZ2VMYWJlbCgpXCIgW2F1U2xvdFByb3BzXT1cIntzdGF0ZSwgYXBpLCBkaXJlY3RpdmVzfVwiIC8+XG5cdFx0XHRcdFx0XHRcdDwvc3Bhbj5cblx0XHRcdFx0XHRcdDwvYT5cblx0XHRcdFx0XHQ8L2xpPlxuXHRcdFx0XHR9XG5cdFx0XHQ8L3VsPlxuXHRcdFx0PGRpdiBhcmlhLWxpdmU9XCJwb2xpdGVcIiBjbGFzcz1cInZpc3VhbGx5LWhpZGRlblwiPnt7IHN0YXRlLmFyaWFMaXZlTGFiZWxUZXh0KCkgfX08L2Rpdj5cblx0XHQ8L25nLXRlbXBsYXRlPlxuXHRgLFxufSlcbmNsYXNzIFBhZ2luYXRpb25EZWZhdWx0U2xvdHNDb21wb25lbnQge1xuXHRAVmlld0NoaWxkKCdwYWdlcycsIHtzdGF0aWM6IHRydWV9KSBwYWdlcyE6IFRlbXBsYXRlUmVmPFBhZ2luYXRpb25Db250ZXh0Pjtcblx0QFZpZXdDaGlsZCgnc3RydWN0dXJlJywge3N0YXRpYzogdHJ1ZX0pIHN0cnVjdHVyZSE6IFRlbXBsYXRlUmVmPFBhZ2luYXRpb25Db250ZXh0Pjtcbn1cbi8qKlxuICogVGhlIGRlZmF1bHQgc2xvdCBmb3IgdGhlIHBhZ2VzXG4gKi9cbmV4cG9ydCBjb25zdCBwYWdpbmF0aW9uRGVmYXVsdFNsb3RQYWdlczogU2xvdENvbnRlbnQ8UGFnaW5hdGlvbkNvbnRleHQ+ID0gbmV3IENvbXBvbmVudFRlbXBsYXRlKFBhZ2luYXRpb25EZWZhdWx0U2xvdHNDb21wb25lbnQsICdwYWdlcycpO1xuLyoqXG4gKiBUaGUgZGVmYXVsdCBzbG90IGZvciB0aGUgc3RydWN0dXJlXG4gKi9cbmV4cG9ydCBjb25zdCBwYWdpbmF0aW9uRGVmYXVsdFNsb3RTdHJ1Y3R1cmU6IFNsb3RDb250ZW50PFBhZ2luYXRpb25Db250ZXh0PiA9IG5ldyBDb21wb25lbnRUZW1wbGF0ZShQYWdpbmF0aW9uRGVmYXVsdFNsb3RzQ29tcG9uZW50LCAnc3RydWN0dXJlJyk7XG5cbi8qKlxuICogVGhlIGBQYWdpbmF0aW9uQ29tcG9uZW50YCBpcyBhbiBBbmd1bGFyIGNvbXBvbmVudCB0aGF0IGV4dGVuZHMgdGhlIGBCYXNlV2lkZ2V0RGlyZWN0aXZlYFxuICogdG8gcHJvdmlkZSBhIGN1c3RvbWl6YWJsZSBwYWdpbmF0aW9uIHdpZGdldC4gSXQgaW5jbHVkZXMgdmFyaW91cyBpbnB1dCBwcm9wZXJ0aWVzXG4gKiB0byBjb25maWd1cmUgbGFiZWxzLCB0ZW1wbGF0ZXMsIGFuZCBiZWhhdmlvciBmb3IgYWNjZXNzaWJpbGl0eSBhbmQgaW50ZXJuYXRpb25hbGl6YXRpb24gKGkxOG4pLlxuICovXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICdbYXVQYWdpbmF0aW9uXScsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdGltcG9ydHM6IFtTbG90RGlyZWN0aXZlXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG5cdGhvc3Q6IHtcblx0XHQnW2F0dHIuYXJpYS1sYWJlbF0nOiAnc3RhdGUuYXJpYUxhYmVsKCknLFxuXHR9LFxuXHRlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuXHR0ZW1wbGF0ZTogYDxuZy10ZW1wbGF0ZSBbYXVTbG90UHJvcHNdPVwie3N0YXRlLCBhcGksIGRpcmVjdGl2ZXN9XCIgW2F1U2xvdF09XCJzdGF0ZS5zdHJ1Y3R1cmUoKVwiIC8+YCxcbn0pXG5leHBvcnQgY2xhc3MgUGFnaW5hdGlvbkNvbXBvbmVudCBleHRlbmRzIEJhc2VXaWRnZXREaXJlY3RpdmU8UGFnaW5hdGlvbldpZGdldD4ge1xuXHQvKipcblx0ICogUHJvdmlkZSB0aGUgbGFiZWwgZm9yIGVhY2ggXCJQYWdlXCIgcGFnZSBidXR0b24uXG5cdCAqIFRoaXMgaXMgdXNlZCBmb3IgYWNjZXNzaWJpbGl0eSBwdXJwb3Nlcy5cblx0ICogZm9yIEkxOG4sIHdlIHN1Z2dlc3QgdG8gdXNlIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvblxuXHQgKiBvdmVycmlkZSBhbnkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHByb3ZpZGVkIGZvciB0aGlzXG5cdCAqIEBwYXJhbSBwcm9jZXNzUGFnZSAtIFRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyXG5cdCAqIEBwYXJhbSBwYWdlQ291bnQgLSBUaGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWVcblx0ICogYGBgdHNcblx0ICogKHByb2Nlc3NQYWdlOiBudW1iZXIsIHBhZ2VDb3VudDogbnVtYmVyKSA9PiBgUGFnZSAke3Byb2Nlc3NQYWdlfSBvZiAke3BhZ2VDb3VudH1gXG5cdCAqIGBgYFxuXHQgKi9cblx0QElucHV0KCdhdUFyaWFQYWdlTGFiZWwnKSBhcmlhUGFnZUxhYmVsOiAoKHByb2Nlc3NQYWdlOiBudW1iZXIsIHBhZ2VDb3VudDogbnVtYmVyKSA9PiBzdHJpbmcpIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBQcm92aWRlIHRoZSBsYWJlbCBmb3IgdGhlIGFyaWEtbGl2ZSBlbGVtZW50XG5cdCAqIFRoaXMgaXMgdXNlZCBmb3IgYWNjZXNzaWJpbGl0eSBwdXJwb3Nlcy5cblx0ICogZm9yIEkxOG4sIHdlIHN1Z2dlc3QgdG8gdXNlIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvblxuXHQgKiBvdmVycmlkZSBhbnkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHByb3ZpZGVkIGZvciB0aGlzXG5cdCAqIEBwYXJhbSBjdXJyZW50UGFnZSAtIFRoZSBjdXJyZW50IHBhZ2UgbnVtYmVyXG5cdCAqIEBwYXJhbSBwYWdlQ291bnQgLSBUaGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWVcblx0ICogYGBgdHNcblx0ICogKGN1cnJlbnRQYWdlOiBudW1iZXIpID0+IGBDdXJyZW50IHBhZ2UgaXMgJHtjdXJyZW50UGFnZX1gXG5cdCAqIGBgYFxuXHQgKi9cblx0QElucHV0KCdhdUFyaWFMaXZlTGFiZWwnKSBhcmlhTGl2ZUxhYmVsOiAoKGN1cnJlbnRQYWdlOiBudW1iZXIsIHBhZ2VDb3VudDogbnVtYmVyKSA9PiBzdHJpbmcpIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgbGFiZWwgZm9yIHRoZSBuYXYgZWxlbWVudC5cblx0ICpcblx0ICogZm9yIEkxOG4sIHdlIHN1Z2dlc3QgdG8gdXNlIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvblxuXHQgKiBvdmVycmlkZSBhbnkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHByb3ZpZGVkIGZvciB0aGlzXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgYCdQYWdlIG5hdmlnYXRpb24nYFxuXHQgKi9cblx0QElucHV0KCdhdUFyaWFMYWJlbCcpIGFyaWFMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgbGFiZWwgZm9yIHRoZSBcImFjdGl2ZVwiIHBhZ2UuXG5cdCAqIGZvciBJMThuLCB3ZSBzdWdnZXN0IHRvIHVzZSB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb25cblx0ICogb3ZlcnJpZGUgYW55IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwcm92aWRlZCBmb3IgdGhpc1xuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlXG5cdCAqIGBgYHRzXG5cdCAqICcoY3VycmVudCknXG5cdCAqIGBgYFxuXHQgKi9cblx0QElucHV0KCdhdUFjdGl2ZUxhYmVsJykgYWN0aXZlTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogVGhlIGxhYmVsIGZvciB0aGUgXCJGaXJzdFwiIHBhZ2UgYnV0dG9uLlxuXHQgKiBmb3IgSTE4biwgd2Ugc3VnZ2VzdCB0byB1c2UgdGhlIGdsb2JhbCBjb25maWd1cmF0aW9uXG5cdCAqIG92ZXJyaWRlIGFueSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgcHJvdmlkZWQgZm9yIHRoaXNcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZVxuXHQgKiBgYGB0c1xuXHQgKiAnQWN0aW9uIGxpbmsgZm9yIGZpcnN0IHBhZ2UnXG5cdCAqIGBgYFxuXHQgKi9cblx0QElucHV0KCdhdUFyaWFGaXJzdExhYmVsJykgYXJpYUZpcnN0TGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogVGhlIGxhYmVsIGZvciB0aGUgXCJQcmV2aW91c1wiIHBhZ2UgYnV0dG9uLlxuXHQgKiBmb3IgSTE4biwgd2Ugc3VnZ2VzdCB0byB1c2UgdGhlIGdsb2JhbCBjb25maWd1cmF0aW9uXG5cdCAqIG92ZXJyaWRlIGFueSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgcHJvdmlkZWQgZm9yIHRoaXNcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZVxuXHQgKiBgYGB0c1xuXHQgKiAnQWN0aW9uIGxpbmsgZm9yIHByZXZpb3VzIHBhZ2UnXG5cdCAqIGBgYFxuXHQgKi9cblx0QElucHV0KCdhdUFyaWFQcmV2aW91c0xhYmVsJykgYXJpYVByZXZpb3VzTGFiZWw6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogVGhlIGxhYmVsIGZvciB0aGUgXCJOZXh0XCIgcGFnZSBidXR0b24uXG5cdCAqIGZvciBJMThuLCB3ZSBzdWdnZXN0IHRvIHVzZSB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb25cblx0ICogb3ZlcnJpZGUgYW55IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwcm92aWRlZCBmb3IgdGhpc1xuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlXG5cdCAqIGBgYHRzXG5cdCAqICdBY3Rpb24gbGluayBmb3IgbmV4dCBwYWdlJ1xuXHQgKiBgYGBcblx0ICovXG5cdEBJbnB1dCgnYXVBcmlhTmV4dExhYmVsJykgYXJpYU5leHRMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgbGFiZWwgZm9yIHRoZSBcIkxhc3RcIiBwYWdlIGJ1dHRvbi5cblx0ICogZm9yIEkxOG4sIHdlIHN1Z2dlc3QgdG8gdXNlIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvblxuXHQgKiBvdmVycmlkZSBhbnkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHByb3ZpZGVkIGZvciB0aGlzXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWVcblx0ICogYGBgdHNcblx0ICogJ0FjdGlvbiBsaW5rIGZvciBsYXN0IHBhZ2UnXG5cdCAqIGBgYFxuXHQgKi9cblx0QElucHV0KCdhdUFyaWFMYXN0TGFiZWwnKSBhcmlhTGFzdExhYmVsOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFRoZSBsYWJlbCBmb3IgdGhlIFwiRWxsaXBzaXNcIiBwYWdlLlxuXHQgKiBmb3IgSTE4biwgd2Ugc3VnZ2VzdCB0byB1c2UgdGhlIGdsb2JhbCBjb25maWd1cmF0aW9uXG5cdCAqIG92ZXJyaWRlIGFueSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgcHJvdmlkZWQgZm9yIHRoaXNcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSBgJ0VsbGlwc2lzIHBhZ2UgZWxlbWVudCdgXG5cdCAqL1xuXHRASW5wdXQoJ2F1QXJpYUVsbGlwc2lzTGFiZWwnKSBhcmlhRWxsaXBzaXNMYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBGYWN0b3J5IGZ1bmN0aW9uIHByb3ZpZGluZyB0aGUgaHJlZiBmb3IgYSBcIlBhZ2VcIiBwYWdlIGFuY2hvcixcblx0ICogYmFzZWQgb24gdGhlIGN1cnJlbnQgcGFnZSBudW1iZXJcblx0ICogQHBhcmFtIHBhZ2VOdW1iZXIgLSBUaGUgaW5kZXggdG8gdXNlIGluIHRoZSBsaW5rXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWVcblx0ICogYGBgdHNcblx0ICogKF9wYWdlOiBudW1iZXIpID0+IFBBR0VfTElOS19ERUZBVUxUXG5cdCAqIGBgYFxuXHQgKi9cblx0QElucHV0KCdhdVBhZ2VMaW5rJykgcGFnZUxpbms6ICgocGFnZU51bWJlcjogbnVtYmVyKSA9PiBzdHJpbmcpIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGVtcGxhdGUgdG8gdXNlIGZvciB0aGUgZWxsaXBzaXMgc2xvdFxuXHQgKiBmb3IgSTE4biwgd2Ugc3VnZ2VzdCB0byB1c2UgdGhlIGdsb2JhbCBjb25maWd1cmF0aW9uXG5cdCAqIG92ZXJyaWRlIGFueSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgcHJvdmlkZWQgZm9yIHRoaXNcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSBgJ+KApidgXG5cdCAqL1xuXHRASW5wdXQoJ2F1RWxsaXBzaXNMYWJlbCcpIGVsbGlwc2lzTGFiZWw6IFNsb3RDb250ZW50PFBhZ2luYXRpb25Db250ZXh0Pjtcblx0QENvbnRlbnRDaGlsZChQYWdpbmF0aW9uRWxsaXBzaXNEaXJlY3RpdmUsIHtzdGF0aWM6IGZhbHNlfSlcblx0c2xvdEVsbGlwc2lzRnJvbUNvbnRlbnQ6IFBhZ2luYXRpb25FbGxpcHNpc0RpcmVjdGl2ZSB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogVGhlIHRlbXBsYXRlIHRvIHVzZSBmb3IgdGhlIGZpcnN0IHNsb3Rcblx0ICogZm9yIEkxOG4sIHdlIHN1Z2dlc3QgdG8gdXNlIHRoZSBnbG9iYWwgY29uZmlndXJhdGlvblxuXHQgKiBvdmVycmlkZSBhbnkgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIHByb3ZpZGVkIGZvciB0aGlzXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgYCfCqydgXG5cdCAqL1xuXHRASW5wdXQoJ2F1Rmlyc3RQYWdlTGFiZWwnKSBmaXJzdFBhZ2VMYWJlbDogU2xvdENvbnRlbnQ8UGFnaW5hdGlvbkNvbnRleHQ+O1xuXHRAQ29udGVudENoaWxkKFBhZ2luYXRpb25GaXJzdERpcmVjdGl2ZSwge3N0YXRpYzogZmFsc2V9KVxuXHRzbG90Rmlyc3RGcm9tQ29udGVudDogUGFnaW5hdGlvbkZpcnN0RGlyZWN0aXZlIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGVtcGxhdGUgdG8gdXNlIGZvciB0aGUgcHJldmlvdXMgc2xvdFxuXHQgKiBmb3IgSTE4biwgd2Ugc3VnZ2VzdCB0byB1c2UgdGhlIGdsb2JhbCBjb25maWd1cmF0aW9uXG5cdCAqIG92ZXJyaWRlIGFueSBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgcHJvdmlkZWQgZm9yIHRoaXNcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSBgJ+KAuSdgXG5cdCAqL1xuXHRASW5wdXQoJ2F1UHJldmlvdXNQYWdlTGFiZWwnKSBwcmV2aW91c1BhZ2VMYWJlbDogU2xvdENvbnRlbnQ8UGFnaW5hdGlvbkNvbnRleHQ+O1xuXHRAQ29udGVudENoaWxkKFBhZ2luYXRpb25QcmV2aW91c0RpcmVjdGl2ZSwge3N0YXRpYzogZmFsc2V9KVxuXHRzbG90UHJldmlvdXNGcm9tQ29udGVudDogUGFnaW5hdGlvblByZXZpb3VzRGlyZWN0aXZlIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGVtcGxhdGUgdG8gdXNlIGZvciB0aGUgbmV4dCBzbG90XG5cdCAqIGZvciBJMThuLCB3ZSBzdWdnZXN0IHRvIHVzZSB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb25cblx0ICogb3ZlcnJpZGUgYW55IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwcm92aWRlZCBmb3IgdGhpc1xuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIGAn4oC6J2Bcblx0ICovXG5cdEBJbnB1dCgnYXVOZXh0UGFnZUxhYmVsJykgbmV4dFBhZ2VMYWJlbDogU2xvdENvbnRlbnQ8UGFnaW5hdGlvbkNvbnRleHQ+O1xuXHRAQ29udGVudENoaWxkKFBhZ2luYXRpb25OZXh0RGlyZWN0aXZlLCB7c3RhdGljOiBmYWxzZX0pXG5cdHNsb3ROZXh0RnJvbUNvbnRlbnQ6IFBhZ2luYXRpb25OZXh0RGlyZWN0aXZlIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGVtcGxhdGUgdG8gdXNlIGZvciB0aGUgbGFzdCBzbG90XG5cdCAqIGZvciBJMThuLCB3ZSBzdWdnZXN0IHRvIHVzZSB0aGUgZ2xvYmFsIGNvbmZpZ3VyYXRpb25cblx0ICogb3ZlcnJpZGUgYW55IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwcm92aWRlZCBmb3IgdGhpc1xuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIGAnwrsnYFxuXHQgKi9cblx0QElucHV0KCdhdUxhc3RQYWdlTGFiZWwnKSBsYXN0UGFnZUxhYmVsOiBTbG90Q29udGVudDxQYWdpbmF0aW9uQ29udGV4dD47XG5cdEBDb250ZW50Q2hpbGQoUGFnaW5hdGlvbkxhc3REaXJlY3RpdmUsIHtzdGF0aWM6IGZhbHNlfSlcblx0c2xvdExhc3RGcm9tQ29udGVudDogUGFnaW5hdGlvbkxhc3REaXJlY3RpdmUgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFRoZSB0ZW1wbGF0ZSB0byB1c2UgZm9yIHRoZSBwYWdlcyBzbG90XG5cdCAqIFRvIHVzZSB0byBjdXN0b21pemUgdGhlIHBhZ2VzIHZpZXdcblx0ICogb3ZlcnJpZGUgYW55IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwcm92aWRlZCBmb3IgdGhpc1xuXHQgKi9cblx0QElucHV0KCdhdVBhZ2VzRGlzcGxheScpIHBhZ2VzRGlzcGxheTogU2xvdENvbnRlbnQ8UGFnaW5hdGlvbkNvbnRleHQ+O1xuXHRAQ29udGVudENoaWxkKFBhZ2luYXRpb25QYWdlc0RpcmVjdGl2ZSwge3N0YXRpYzogZmFsc2V9KVxuXHRzbG90UGFnZXNGcm9tQ29udGVudDogUGFnaW5hdGlvblBhZ2VzRGlyZWN0aXZlIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGVtcGxhdGUgdG8gdXNlIGZvciB0aGUgbnVtYmVyIHNsb3Rcblx0ICogb3ZlcnJpZGUgYW55IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBwcm92aWRlZCBmb3IgdGhpc1xuXHQgKiBmb3IgSTE4biwgd2Ugc3VnZ2VzdCB0byB1c2UgdGhlIGdsb2JhbCBjb25maWd1cmF0aW9uXG5cdCAqIEBwYXJhbSBkaXNwbGF5ZWRQYWdlIC0gVGhlIGN1cnJlbnQgcGFnZSBudW1iZXJcblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZVxuXHQgKiBgYGB0c1xuXHQgKiAoe2Rpc3BsYXllZFBhZ2V9OiBQYWdpbmF0aW9uTnVtYmVyQ29udGV4dCkgPT4gYCR7ZGlzcGxheWVkUGFnZX1gXG5cdCAqIGBgYFxuXHQgKi9cblx0QElucHV0KCdhdU51bWJlckxhYmVsJykgbnVtYmVyTGFiZWw6IFNsb3RDb250ZW50PFBhZ2luYXRpb25OdW1iZXJDb250ZXh0Pjtcblx0QENvbnRlbnRDaGlsZChQYWdpbmF0aW9uTnVtYmVyRGlyZWN0aXZlLCB7c3RhdGljOiBmYWxzZX0pXG5cdHNsb3ROdW1iZXJMYWJlbEZyb21Db250ZW50OiBQYWdpbmF0aW9uTnVtYmVyRGlyZWN0aXZlIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBUaGUgdGVtcGxhdGUgdG8gdXNlIGZvciB0aGUgc3RydWN0dXJlIG9mIHRoZSBwYWdpbmF0aW9uIGNvbXBvbmVudFxuXHQgKiBUaGUgZGVmYXVsdCBzdHJ1Y3R1cmUgdXNlcyB7QGxpbmsgUGFnaW5hdGlvblByb3BzLmVsbGlwc2lzTGFiZWx8ZWxsaXBzaXNMYWJlbH0sIHtAbGluayBQYWdpbmF0aW9uUHJvcHMuZmlyc3RQYWdlTGFiZWx8Zmlyc3RQYWdlTGFiZWx9LFxuXHQgKiB7QGxpbmsgUGFnaW5hdGlvblByb3BzLnByZXZpb3VzUGFnZUxhYmVsfHByZXZpb3VzUGFnZUxhYmVsfSwge0BsaW5rIFBhZ2luYXRpb25Qcm9wcy5uZXh0UGFnZUxhYmVsfG5leHRQYWdlTGFiZWx9LFxuXHQgKiB7QGxpbmsgUGFnaW5hdGlvblByb3BzLmxhc3RQYWdlTGFiZWx8bGFzdFBhZ2VMYWJlbH0sIHtAbGluayBQYWdpbmF0aW9uUHJvcHMucGFnZXNEaXNwbGF5fHBhZ2VzRGlzcGxheX0sXG5cdCAqIHtAbGluayBQYWdpbmF0aW9uUHJvcHMubnVtYmVyTGFiZWx8bnVtYmVyTGFiZWx9LFxuXHQgKi9cblx0QElucHV0KCdhdVN0cnVjdHVyZScpIHN0cnVjdHVyZTogU2xvdENvbnRlbnQ8UGFnaW5hdGlvbkNvbnRleHQ+O1xuXHRAQ29udGVudENoaWxkKFBhZ2luYXRpb25TdHJ1Y3R1cmVEaXJlY3RpdmUsIHtzdGF0aWM6IGZhbHNlfSlcblx0c2xvdFN0cnVjdHVyZUZyb21Db250ZW50OiBQYWdpbmF0aW9uU3RydWN0dXJlRGlyZWN0aXZlIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBJZiBgdHJ1ZWAsIHBhZ2luYXRpb24gbGlua3Mgd2lsbCBiZSBkaXNhYmxlZC5cblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSBgZmFsc2VgXG5cdCAqL1xuXHRASW5wdXQoe2FsaWFzOiAnYXVEaXNhYmxlZCcsIHRyYW5zZm9ybTogYXVCb29sZWFuQXR0cmlidXRlfSkgZGlzYWJsZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIElmIGB0cnVlYCwgdGhlIFwiRmlyc3RcIiBhbmQgXCJMYXN0XCIgcGFnZSBsaW5rcyBhcmUgc2hvd24uXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgYGZhbHNlYFxuXHQgKi9cblx0QElucHV0KHthbGlhczogJ2F1Qm91bmRhcnlMaW5rcycsIHRyYW5zZm9ybTogYXVCb29sZWFuQXR0cmlidXRlfSkgYm91bmRhcnlMaW5rczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogSWYgYHRydWVgLCB0aGUgXCJOZXh0XCIgYW5kIFwiUHJldmlvdXNcIiBwYWdlIGxpbmtzIGFyZSBzaG93bi5cblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSBgdHJ1ZWBcblx0ICovXG5cdEBJbnB1dCh7YWxpYXM6ICdhdURpcmVjdGlvbkxpbmtzJywgdHJhbnNmb3JtOiBhdUJvb2xlYW5BdHRyaWJ1dGV9KSBkaXJlY3Rpb25MaW5rczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogVGhlIG51bWJlciBvZiBpdGVtcyBpbiB5b3VyIHBhZ2luYXRlZCBjb2xsZWN0aW9uLlxuXHQgKlxuXHQgKiBOb3RlLCB0aGF0IHRoaXMgaXMgbm90IHRoZSBudW1iZXIgb2YgcGFnZXMuIFBhZ2UgbnVtYmVycyBhcmUgY2FsY3VsYXRlZCBkeW5hbWljYWxseSBiYXNlZCBvblxuXHQgKiBgY29sbGVjdGlvblNpemVgIGFuZCBgcGFnZVNpemVgLlxuXHQgKlxuXHQgKiBFeC4gaWYgeW91IGhhdmUgMTAwIGl0ZW1zIGluIHlvdXIgY29sbGVjdGlvbiBhbmQgZGlzcGxheWluZyAyMCBpdGVtcyBwZXIgcGFnZSwgeW91J2xsIGVuZCB1cCB3aXRoIDUgcGFnZXMuXG5cdCAqXG5cdCAqIFdoYXRldmVyIHRoZSBjb2xsZWN0aW9uU2l6ZSB0aGUgcGFnZSBudW1iZXIgaXMgb2YgbWluaW11bSAxLlxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIGAwYFxuXHQgKi9cblx0QElucHV0KHthbGlhczogJ2F1Q29sbGVjdGlvblNpemUnLCB0cmFuc2Zvcm06IGF1TnVtYmVyQXR0cmlidXRlfSkgY29sbGVjdGlvblNpemU6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogVGhlIGN1cnJlbnQgcGFnZS5cblx0ICpcblx0ICogUGFnZSBudW1iZXJzIHN0YXJ0IHdpdGggYDFgLlxuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlIGAxYFxuXHQgKi9cblx0QElucHV0KHthbGlhczogJ2F1UGFnZScsIHRyYW5zZm9ybTogYXVOdW1iZXJBdHRyaWJ1dGV9KSBwYWdlOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cblx0LyoqXG5cdCAqIFRoZSBudW1iZXIgb2YgaXRlbXMgcGVyIHBhZ2UuXG5cdCAqIEByZW1hcmtzIG1pbiB2YWx1ZSBpcyAxXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgYDEwYFxuXHQgKi9cblx0QElucHV0KHthbGlhczogJ2F1UGFnZVNpemUnLCB0cmFuc2Zvcm06IGF1TnVtYmVyQXR0cmlidXRlfSkgcGFnZVNpemU6IG51bWJlciB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogVGhlIHBhZ2luYXRpb24gZGlzcGxheSBzaXplLlxuXHQgKlxuXHQgKiBCb290c3RyYXAgY3VycmVudGx5IHN1cHBvcnRzIHNtYWxsIGFuZCBsYXJnZSBzaXplcy5cblx0ICpcblx0ICogQGRlZmF1bHRWYWx1ZSBgbnVsbGBcblx0ICovXG5cdEBJbnB1dCgnYXVTaXplJykgc2l6ZTogJ3NtJyB8ICdsZycgfCBudWxsIHwgdW5kZWZpbmVkO1xuXG5cdC8qKlxuXHQgKiBwYWdlc0ZhY3RvcnkgcmV0dXJucyBhIGZ1bmN0aW9uIGNvbXB1dGluZyB0aGUgYXJyYXkgb2YgcGFnZXMgdG8gYmUgZGlzcGxheWVkXG5cdCAqIGFzIG51bWJlciAoLTEgYXJlIHRyZWF0ZWQgYXMgZWxsaXBzaXMpLlxuXHQgKiBVc2UgUGFnZSBzbG90IHRvIGN1c3RvbWl6ZSB0aGUgcGFnZXMgdmlldyBhbmQgbm90IHRoaXNcblx0ICogQHBhcmFtIHBhZ2UgLSBUaGUgY3VycmVudCBwYWdlIG51bWJlclxuXHQgKiBAcGFyYW0gcGFnZUNvdW50IC0gVGhlIHRvdGFsIG51bWJlciBvZiBwYWdlc1xuXHQgKlxuXHQgKiBAZGVmYXVsdFZhbHVlXG5cdCAqIGBgYHRzXG5cdCAqIChfcGFnZTogbnVtYmVyLCBwYWdlQ291bnQ6IG51bWJlcikgPT4ge1xuXHQgKiBcdFx0Y29uc3QgcGFnZXM6IG51bWJlcltdID0gW107XG5cdCAqIFx0XHRmb3IgKGxldCBpID0gMTsgaSA8PSBwYWdlQ291bnQ7IGkrKykge1xuXHQgKiBcdFx0XHRwYWdlcy5wdXNoKGkpO1xuXHQgKiBcdFx0fVxuXHQgKiBcdFx0cmV0dXJuIHBhZ2VzO1xuXHQgKiBcdH1cblx0ICogYGBgXG5cdCAqL1xuXHRASW5wdXQoJ2F1UGFnZXNGYWN0b3J5JykgcGFnZXNGYWN0b3J5OiAoKHBhZ2U6IG51bWJlciwgcGFnZUNvdW50OiBudW1iZXIpID0+IG51bWJlcltdKSB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogQW4gZXZlbnQgZmlyZWQgd2hlbiB0aGUgcGFnZSBpcyBjaGFuZ2VkLlxuXHQgKlxuXHQgKiBFdmVudCBwYXlsb2FkIGlzIHRoZSBudW1iZXIgb2YgdGhlIG5ld2x5IHNlbGVjdGVkIHBhZ2UuXG5cdCAqXG5cdCAqIFBhZ2UgbnVtYmVycyBzdGFydCB3aXRoIGAxYC5cblx0ICogQGRlZmF1bHRWYWx1ZVxuXHQgKiBgYGB0c1xuXHQgKiAoKSA9PiB7fVxuXHQgKiBgYGBcblx0ICovXG5cdEBPdXRwdXQoJ2F1UGFnZUNoYW5nZScpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuXHQvKipcblx0ICogQ1NTIGNsYXNzZXMgdG8gYmUgYXBwbGllZCBvbiB0aGUgd2lkZ2V0IG1haW4gY29udGFpbmVyXG5cdCAqXG5cdCAqIEBkZWZhdWx0VmFsdWUgYCcnYFxuXHQgKi9cblx0QElucHV0KCdhdUNsYXNzTmFtZScpIGNsYXNzTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKFxuXHRcdFx0Y2FsbFdpZGdldEZhY3Rvcnkoe1xuXHRcdFx0XHRmYWN0b3J5OiBjcmVhdGVQYWdpbmF0aW9uLFxuXHRcdFx0XHR3aWRnZXROYW1lOiAncGFnaW5hdGlvbicsXG5cdFx0XHRcdGRlZmF1bHRDb25maWc6IHtcblx0XHRcdFx0XHRzdHJ1Y3R1cmU6IHBhZ2luYXRpb25EZWZhdWx0U2xvdFN0cnVjdHVyZSxcblx0XHRcdFx0XHRwYWdlc0Rpc3BsYXk6IHBhZ2luYXRpb25EZWZhdWx0U2xvdFBhZ2VzLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRldmVudHM6IHtcblx0XHRcdFx0XHRvblBhZ2VDaGFuZ2U6IChwYWdlOiBudW1iZXIpID0+IHRoaXMucGFnZUNoYW5nZS5lbWl0KHBhZ2UpLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzbG90VGVtcGxhdGVzOiAoKSA9PiAoe1xuXHRcdFx0XHRcdHN0cnVjdHVyZTogdGhpcy5zbG90U3RydWN0dXJlRnJvbUNvbnRlbnQ/LnRlbXBsYXRlUmVmLFxuXHRcdFx0XHRcdGVsbGlwc2lzTGFiZWw6IHRoaXMuc2xvdEVsbGlwc2lzRnJvbUNvbnRlbnQ/LnRlbXBsYXRlUmVmLFxuXHRcdFx0XHRcdGZpcnN0UGFnZUxhYmVsOiB0aGlzLnNsb3RGaXJzdEZyb21Db250ZW50Py50ZW1wbGF0ZVJlZixcblx0XHRcdFx0XHRwcmV2aW91c1BhZ2VMYWJlbDogdGhpcy5zbG90UHJldmlvdXNGcm9tQ29udGVudD8udGVtcGxhdGVSZWYsXG5cdFx0XHRcdFx0bmV4dFBhZ2VMYWJlbDogdGhpcy5zbG90TmV4dEZyb21Db250ZW50Py50ZW1wbGF0ZVJlZixcblx0XHRcdFx0XHRsYXN0UGFnZUxhYmVsOiB0aGlzLnNsb3RMYXN0RnJvbUNvbnRlbnQ/LnRlbXBsYXRlUmVmLFxuXHRcdFx0XHRcdHBhZ2VzRGlzcGxheTogdGhpcy5zbG90UGFnZXNGcm9tQ29udGVudD8udGVtcGxhdGVSZWYsXG5cdFx0XHRcdFx0bnVtYmVyTGFiZWw6IHRoaXMuc2xvdE51bWJlckxhYmVsRnJvbUNvbnRlbnQ/LnRlbXBsYXRlUmVmLFxuXHRcdFx0XHR9KSxcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cbn1cbiJdfQ==