@natec/mef-dev-ui-kit 14.0.0 → 16.0.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 (132) hide show
  1. package/esm2022/lib/markup-kit/card/card/card.component.mjs +116 -0
  2. package/esm2022/lib/markup-kit/card/card-long/card-long.component.mjs +169 -0
  3. package/esm2022/lib/markup-kit/card/card-simple/card-simple.component.mjs +50 -0
  4. package/{esm2020 → esm2022}/lib/markup-kit/card/card.module.mjs +11 -11
  5. package/esm2022/lib/markup-kit/collapse/collapse/collapse.component.mjs +149 -0
  6. package/esm2022/lib/markup-kit/collapse/collapse-set/collapse-set.component.mjs +102 -0
  7. package/{esm2020 → esm2022}/lib/markup-kit/collapse/collapse.module.mjs +5 -5
  8. package/esm2022/lib/markup-kit/modals/fill/fill.component.mjs +117 -0
  9. package/{esm2020 → esm2022}/lib/markup-kit/modals/markup-kit.module.mjs +15 -15
  10. package/esm2022/lib/markup-kit/modals/right-filter/right-filter.component.mjs +44 -0
  11. package/esm2022/lib/markup-kit/modals/slide-right/slide-right.component.mjs +113 -0
  12. package/esm2022/lib/markup-kit/modals/slide-up/slide-up.component.mjs +113 -0
  13. package/esm2022/lib/markup-kit/page-layouts/central-page/central-page.component.mjs +51 -0
  14. package/esm2022/lib/markup-kit/page-layouts/central-page-row/central-page-row.component.mjs +27 -0
  15. package/esm2022/lib/markup-kit/page-layouts/manage-page/manage-page.component.mjs +73 -0
  16. package/{esm2020 → esm2022}/lib/markup-kit/page-layouts/page-layouts.module.mjs +13 -13
  17. package/esm2022/lib/markup-kit/page-layouts/profile/profile.component.mjs +137 -0
  18. package/esm2022/lib/markup-kit/page-layouts/table-page/table-page.component.mjs +42 -0
  19. package/esm2022/lib/markup-kit/utils/filtered-field/filtered-field-container/filtered-field-container.component.mjs +72 -0
  20. package/esm2022/lib/markup-kit/utils/filtered-field/filtered-field-item/filtered-field-item.component.mjs +71 -0
  21. package/{esm2020 → esm2022}/lib/markup-kit/utils/filtered-field/filtered-field.module.mjs +7 -7
  22. package/esm2022/lib/markup-kit/utils/filtered-field/filtered-field.service.mjs +43 -0
  23. package/esm2022/lib/markup-kit/utils/filtered-field/filtred-item.model.mjs +13 -0
  24. package/esm2022/lib/markup-kit/utils/help-block/help-block.component.mjs +72 -0
  25. package/{esm2020 → esm2022}/lib/markup-kit/utils/help-block/hepl-block.module.mjs +7 -7
  26. package/esm2022/lib/pg-components/card/card.components.mjs +439 -0
  27. package/{esm2020 → esm2022}/lib/pg-components/card/card.module.mjs +5 -5
  28. package/esm2022/lib/pg-components/progress/progress.component.mjs +80 -0
  29. package/esm2022/lib/pg-components/progress/progress.config.mjs +12 -0
  30. package/{esm2020 → esm2022}/lib/pg-components/progress/progress.module.mjs +5 -5
  31. package/esm2022/lib/pg-components/select/option.component.mjs +93 -0
  32. package/{esm2020 → esm2022}/lib/pg-components/select/option.pipe.mjs +4 -4
  33. package/esm2022/lib/pg-components/select/select.component.mjs +782 -0
  34. package/{esm2020 → esm2022}/lib/pg-components/select/select.module.mjs +5 -5
  35. package/esm2022/lib/pg-components/spec-flow-test/spec-flow-test/spec-flow-test.component.mjs +36 -0
  36. package/{esm2020 → esm2022}/lib/pg-components/spec-flow-test/spec-flow-test.module.mjs +5 -5
  37. package/esm2022/lib/pg-components/switch/switch.component.mjs +293 -0
  38. package/{esm2020 → esm2022}/lib/pg-components/switch/switch.module.mjs +5 -5
  39. package/esm2022/lib/pg-components/tabs/tab-body.component.mjs +21 -0
  40. package/esm2022/lib/pg-components/tabs/tab-label.directive.mjs +45 -0
  41. package/esm2022/lib/pg-components/tabs/tab.component.mjs +102 -0
  42. package/esm2022/lib/pg-components/tabs/tabs-ink-bar.directive.mjs +81 -0
  43. package/esm2022/lib/pg-components/tabs/tabs-nav.component.mjs +298 -0
  44. package/{esm2020 → esm2022}/lib/pg-components/tabs/tabs.module.mjs +5 -5
  45. package/esm2022/lib/pg-components/tabs/tabset.component.mjs +257 -0
  46. package/fesm2022/natec-mef-dev-ui-kit.mjs +4340 -0
  47. package/fesm2022/natec-mef-dev-ui-kit.mjs.map +1 -0
  48. package/lib/markup-kit/card/card/card.component.d.ts +69 -35
  49. package/lib/markup-kit/card/card-long/card-long.component.d.ts +114 -4
  50. package/lib/markup-kit/card/card-simple/card-simple.component.d.ts +24 -1
  51. package/lib/markup-kit/collapse/collapse/collapse.component.d.ts +52 -2
  52. package/lib/markup-kit/collapse/collapse-set/collapse-set.component.d.ts +51 -1
  53. package/lib/markup-kit/modals/fill/fill.component.d.ts +59 -35
  54. package/lib/markup-kit/modals/right-filter/right-filter.component.d.ts +14 -1
  55. package/lib/markup-kit/modals/slide-right/slide-right.component.d.ts +53 -1
  56. package/lib/markup-kit/modals/slide-up/slide-up.component.d.ts +56 -4
  57. package/lib/markup-kit/page-layouts/central-page/central-page.component.d.ts +23 -1
  58. package/lib/markup-kit/page-layouts/central-page-row/central-page-row.component.d.ts +14 -1
  59. package/lib/markup-kit/page-layouts/manage-page/manage-page.component.d.ts +47 -4
  60. package/lib/markup-kit/page-layouts/profile/profile.component.d.ts +78 -2
  61. package/lib/markup-kit/page-layouts/table-page/table-page.component.d.ts +23 -4
  62. package/lib/markup-kit/utils/filtered-field/filtered-field-container/filtered-field-container.component.d.ts +28 -4
  63. package/lib/markup-kit/utils/filtered-field/filtered-field-item/filtered-field-item.component.d.ts +43 -1
  64. package/lib/markup-kit/utils/filtered-field/filtered-field.service.d.ts +14 -0
  65. package/lib/markup-kit/utils/help-block/help-block.component.d.ts +26 -4
  66. package/lib/pg-components/card/card.components.d.ts +182 -1
  67. package/lib/pg-components/progress/progress.component.d.ts +36 -1
  68. package/lib/pg-components/select/option.component.d.ts +31 -1
  69. package/lib/pg-components/select/select.component.d.ts +1 -1
  70. package/lib/pg-components/spec-flow-test/spec-flow-test/spec-flow-test.component.d.ts +1 -1
  71. package/lib/pg-components/switch/switch.component.d.ts +151 -2
  72. package/lib/pg-components/tabs/tab-body.component.d.ts +7 -1
  73. package/lib/pg-components/tabs/tab-label.directive.d.ts +1 -1
  74. package/lib/pg-components/tabs/tab.component.d.ts +46 -1
  75. package/lib/pg-components/tabs/tabs-ink-bar.directive.d.ts +2 -2
  76. package/lib/pg-components/tabs/tabs-nav.component.d.ts +3 -3
  77. package/lib/pg-components/tabs/tabset.component.d.ts +70 -4
  78. package/package.json +10 -21
  79. package/esm2020/lib/markup-kit/card/card/card.component.mjs +0 -40
  80. package/esm2020/lib/markup-kit/card/card-long/card-long.component.mjs +0 -50
  81. package/esm2020/lib/markup-kit/card/card-simple/card-simple.component.mjs +0 -27
  82. package/esm2020/lib/markup-kit/collapse/collapse/collapse.component.mjs +0 -95
  83. package/esm2020/lib/markup-kit/collapse/collapse-set/collapse-set.component.mjs +0 -54
  84. package/esm2020/lib/markup-kit/modals/fill/fill.component.mjs +0 -91
  85. package/esm2020/lib/markup-kit/modals/right-filter/right-filter.component.mjs +0 -28
  86. package/esm2020/lib/markup-kit/modals/slide-right/slide-right.component.mjs +0 -59
  87. package/esm2020/lib/markup-kit/modals/slide-up/slide-up.component.mjs +0 -59
  88. package/esm2020/lib/markup-kit/page-layouts/central-page/central-page.component.mjs +0 -29
  89. package/esm2020/lib/markup-kit/page-layouts/central-page-row/central-page-row.component.mjs +0 -14
  90. package/esm2020/lib/markup-kit/page-layouts/manage-page/manage-page.component.mjs +0 -29
  91. package/esm2020/lib/markup-kit/page-layouts/profile/profile.component.mjs +0 -53
  92. package/esm2020/lib/markup-kit/page-layouts/table-page/table-page.component.mjs +0 -22
  93. package/esm2020/lib/markup-kit/utils/filtered-field/filtered-field-container/filtered-field-container.component.mjs +0 -47
  94. package/esm2020/lib/markup-kit/utils/filtered-field/filtered-field-item/filtered-field-item.component.mjs +0 -29
  95. package/esm2020/lib/markup-kit/utils/filtered-field/filtered-field.service.mjs +0 -30
  96. package/esm2020/lib/markup-kit/utils/filtered-field/filtred-item.model.mjs +0 -9
  97. package/esm2020/lib/markup-kit/utils/help-block/help-block.component.mjs +0 -51
  98. package/esm2020/lib/pg-components/card/card.components.mjs +0 -252
  99. package/esm2020/lib/pg-components/progress/progress.component.mjs +0 -39
  100. package/esm2020/lib/pg-components/progress/progress.config.mjs +0 -14
  101. package/esm2020/lib/pg-components/select/option.component.mjs +0 -59
  102. package/esm2020/lib/pg-components/select/select.component.mjs +0 -766
  103. package/esm2020/lib/pg-components/spec-flow-test/spec-flow-test/spec-flow-test.component.mjs +0 -24
  104. package/esm2020/lib/pg-components/switch/switch.component.mjs +0 -114
  105. package/esm2020/lib/pg-components/tabs/tab-body.component.mjs +0 -14
  106. package/esm2020/lib/pg-components/tabs/tab-label.directive.mjs +0 -44
  107. package/esm2020/lib/pg-components/tabs/tab.component.mjs +0 -53
  108. package/esm2020/lib/pg-components/tabs/tabs-ink-bar.directive.mjs +0 -78
  109. package/esm2020/lib/pg-components/tabs/tabs-nav.component.mjs +0 -287
  110. package/esm2020/lib/pg-components/tabs/tabset.component.mjs +0 -179
  111. package/fesm2015/natec-mef-dev-ui-kit.mjs +0 -2973
  112. package/fesm2015/natec-mef-dev-ui-kit.mjs.map +0 -1
  113. package/fesm2020/natec-mef-dev-ui-kit.mjs +0 -2966
  114. package/fesm2020/natec-mef-dev-ui-kit.mjs.map +0 -1
  115. /package/{esm2020 → esm2022}/lib/markup-kit/card/card-long/cart-type-colors.enum.mjs +0 -0
  116. /package/{esm2020 → esm2022}/lib/markup-kit/card/index.mjs +0 -0
  117. /package/{esm2020 → esm2022}/lib/markup-kit/collapse/index.mjs +0 -0
  118. /package/{esm2020 → esm2022}/lib/markup-kit/modals/index.mjs +0 -0
  119. /package/{esm2020 → esm2022}/lib/markup-kit/modals/modal-size.enum.mjs +0 -0
  120. /package/{esm2020 → esm2022}/lib/markup-kit/page-layouts/index.mjs +0 -0
  121. /package/{esm2020 → esm2022}/lib/markup-kit/utils/filtered-field/index.mjs +0 -0
  122. /package/{esm2020 → esm2022}/lib/markup-kit/utils/help-block/index.mjs +0 -0
  123. /package/{esm2020 → esm2022}/lib/pg-components/card/index.mjs +0 -0
  124. /package/{esm2020 → esm2022}/lib/pg-components/progress/index.mjs +0 -0
  125. /package/{esm2020 → esm2022}/lib/pg-components/select/index.mjs +0 -0
  126. /package/{esm2020 → esm2022}/lib/pg-components/spec-flow-test/index.mjs +0 -0
  127. /package/{esm2020 → esm2022}/lib/pg-components/switch/index.mjs +0 -0
  128. /package/{esm2020 → esm2022}/lib/pg-components/tabs/index.mjs +0 -0
  129. /package/{esm2020 → esm2022}/lib/pg-components/util/convert.mjs +0 -0
  130. /package/{esm2020 → esm2022}/lib/pg-components/util/request-animation.mjs +0 -0
  131. /package/{esm2020 → esm2022}/natec-mef-dev-ui-kit.mjs +0 -0
  132. /package/{esm2020 → esm2022}/public-api.mjs +0 -0
@@ -1,766 +0,0 @@
1
- /**
2
- * complex but work well
3
- * TODO: rebuild latter
4
- */
5
- import { DOWN_ARROW, ENTER, TAB } from "@angular/cdk/keycodes";
6
- import { CdkConnectedOverlay } from "@angular/cdk/overlay";
7
- import { forwardRef, Component, EventEmitter, HostListener, Input, Output, ViewChild, ViewEncapsulation } from "@angular/core";
8
- import { NG_VALUE_ACCESSOR } from "@angular/forms";
9
- import { OptionPipe } from "./option.pipe";
10
- import { toBoolean } from '../util/convert';
11
- import { animate, state, style, transition, trigger } from "@angular/animations";
12
- import * as i0 from "@angular/core";
13
- import * as i1 from "@angular/common";
14
- import * as i2 from "@angular/forms";
15
- import * as i3 from "@angular/cdk/overlay";
16
- /**
17
- * Example of usage:
18
- * <example-url>https://mef.dev/ui_kit_demo/view/select</example-url>
19
- */
20
- export class MefDevSelectComponent {
21
- constructor(_elementRef, _renderer, cDRef) {
22
- this._elementRef = _elementRef;
23
- this._renderer = _renderer;
24
- this.cDRef = cDRef;
25
- this._allowClear = false;
26
- this._disabled = false;
27
- this._isTags = false;
28
- this._isMultiple = false;
29
- this._keepUnListOptions = false;
30
- this._showSearch = false;
31
- this._isOpen = false;
32
- this._prefixCls = "pg-select";
33
- this._classList = [];
34
- this._dropDownPrefixCls = `${this._prefixCls}-dropdown`;
35
- this._selectionPrefixCls = `${this._prefixCls}-selection`;
36
- this._placeholder = "placeholder";
37
- this._notFoundContent = "No Content";
38
- this._searchText = "";
39
- this._triggerWidth = 0;
40
- this._selectedOptions = new Set();
41
- this._options = [];
42
- this._cacheOptions = [];
43
- this._filterOptions = [];
44
- this._tagsOptions = [];
45
- this._isMultiInit = false;
46
- this._dropDownPosition = "bottom";
47
- this._composing = false;
48
- // ngModel Access
49
- this.onChange = () => null;
50
- this.onTouched = () => null;
51
- this.SearchChange = new EventEmitter();
52
- this.change = new EventEmitter();
53
- this.OpenChange = new EventEmitter();
54
- this.ScrollToBottom = new EventEmitter();
55
- this.Filter = true;
56
- this.MaxMultiple = Infinity;
57
- this.FirstDefault = false;
58
- /** new -option insert or new tags insert */
59
- // @ts-ignore
60
- this.addOption = option => {
61
- this._options.push(option);
62
- if (!this._isTags) {
63
- if (option.Value) {
64
- this.updateSelectedOption(this._value);
65
- }
66
- else {
67
- this.forceUpdateSelectedOption(this._value);
68
- }
69
- }
70
- };
71
- /** cancel select multiple option */ // @ts-ignore
72
- this.unSelectMultipleOption = (option, $event, emitChange = true) => {
73
- this._operatingMultipleOption = option;
74
- this._selectedOptions.delete(option);
75
- if (emitChange) {
76
- this.emitMultipleOptions();
77
- }
78
- // 对Tag进行特殊处理
79
- if (this._isTags &&
80
- this._options.indexOf(option) !== -1 &&
81
- this._tagsOptions.indexOf(option) !== -1) {
82
- this.removeOption(option);
83
- this._tagsOptions.splice(this._tagsOptions.indexOf(option), 1);
84
- }
85
- if ($event) {
86
- $event.preventDefault();
87
- $event.stopPropagation();
88
- }
89
- };
90
- this._el = this._elementRef.nativeElement;
91
- }
92
- set AllowClear(value) {
93
- this._allowClear = toBoolean(value);
94
- }
95
- get AllowClear() {
96
- return this._allowClear;
97
- }
98
- set KeepUnListOptions(value) {
99
- this._keepUnListOptions = toBoolean(value);
100
- }
101
- get KeepUnListOptions() {
102
- return this._keepUnListOptions;
103
- }
104
- set Mode(value) {
105
- this._mode = value;
106
- if (this._mode === "multiple") {
107
- this.Multiple = true;
108
- }
109
- else if (this._mode === "tags") {
110
- this.Tags = true;
111
- }
112
- else if (this._mode === "combobox") {
113
- this.ShowSearch = true;
114
- }
115
- }
116
- set Multiple(value) {
117
- this._isMultiple = toBoolean(value);
118
- if (this._isMultiple) {
119
- this.ShowSearch = true;
120
- }
121
- }
122
- get Multiple() {
123
- return this._isMultiple;
124
- }
125
- set PlaceHolder(value) {
126
- this._placeholder = value;
127
- }
128
- get PlaceHolder() {
129
- return this._placeholder;
130
- }
131
- set NotFoundContent(value) {
132
- this._notFoundContent = value;
133
- }
134
- get NotFoundContent() {
135
- return this._notFoundContent;
136
- }
137
- set Size(value) {
138
- // @ts-ignore
139
- this._size = { large: "lg", small: "sm" }[value];
140
- this.setClassMap();
141
- }
142
- get Size() {
143
- return this._size;
144
- }
145
- set ShowSearch(value) {
146
- this._showSearch = toBoolean(value);
147
- }
148
- get ShowSearch() {
149
- return this._showSearch;
150
- }
151
- set Tags(value) {
152
- const isTags = toBoolean(value);
153
- this._isTags = isTags;
154
- this.Multiple = isTags;
155
- }
156
- get Tags() {
157
- return this._isTags;
158
- }
159
- set Disabled(value) {
160
- this._disabled = toBoolean(value);
161
- this.closeDropDown();
162
- this.setClassMap();
163
- }
164
- get Disabled() {
165
- return this._disabled;
166
- }
167
- set Open(value) {
168
- const isOpen = toBoolean(value);
169
- if (this._isOpen === isOpen) {
170
- return;
171
- }
172
- if (isOpen) {
173
- this.scrollToActive();
174
- this._setTriggerWidth();
175
- }
176
- this._isOpen = isOpen;
177
- this.OpenChange.emit(this._isOpen);
178
- this.setClassMap();
179
- if (this._isOpen) {
180
- setTimeout(() => {
181
- this.checkDropDownScroll();
182
- });
183
- }
184
- }
185
- get Open() {
186
- return this._isOpen;
187
- }
188
- /** -option remove or tags remove */
189
- removeOption(option) {
190
- this._options.splice(this._options.indexOf(option), 1);
191
- if (!this._isTags) {
192
- this.forceUpdateSelectedOption(this._value);
193
- }
194
- }
195
- /** dropdown position changed */
196
- onPositionChange(position) {
197
- this._dropDownPosition = position.connectionPair.originY;
198
- }
199
- compositionStart() {
200
- this._composing = true;
201
- }
202
- compositionEnd() {
203
- this._composing = false;
204
- }
205
- /** clear single selected option */
206
- clearSelect($event) {
207
- if ($event) {
208
- $event.preventDefault();
209
- $event.stopPropagation();
210
- } // @ts-ignore
211
- this._selectedOption = null; // @ts-ignore
212
- this.Value = null; // @ts-ignore
213
- this.onChange(null);
214
- }
215
- /** click dropdown option by user */
216
- clickOption(option, $event) {
217
- if (!option) {
218
- return;
219
- }
220
- this.chooseOption(option, true, $event);
221
- this.clearSearchText();
222
- if (!this._isMultiple) {
223
- this.Open = false;
224
- }
225
- }
226
- /** choose option */
227
- chooseOption(option, isUserClick = false, $event) {
228
- if ($event) {
229
- $event.preventDefault();
230
- $event.stopPropagation();
231
- }
232
- this._activeFilterOption = option;
233
- if (option && !option.Disabled) {
234
- if (!this.Multiple) {
235
- this._selectedOption = option;
236
- this._value = option.Value;
237
- if (isUserClick) {
238
- this.change.next(this._value);
239
- this.onChange(option.Value);
240
- }
241
- }
242
- else {
243
- if (isUserClick) {
244
- this.isInSet(this._selectedOptions, option)
245
- ? this.unSelectMultipleOption(option)
246
- : this.selectMultipleOption(option);
247
- }
248
- }
249
- }
250
- }
251
- updateWidth(element, text) {
252
- if (text) {
253
- /** wait for scroll width change */ // @ts-ignore
254
- setTimeout(_ => {
255
- this._renderer.setStyle(element, "width", `${element.scrollWidth}px`);
256
- });
257
- }
258
- else {
259
- this._renderer.removeStyle(element, "width");
260
- }
261
- }
262
- /** determine if option in set */
263
- isInSet(set, option) {
264
- return Array.from(set).find((data) => data.Value === option.Value);
265
- }
266
- /** select multiple option */
267
- selectMultipleOption(option, $event) {
268
- /** if tags do push to tag option */
269
- if (this._isTags &&
270
- this._options.indexOf(option) === -1 &&
271
- this._tagsOptions.indexOf(option) === -1) {
272
- this.addOption(option);
273
- this._tagsOptions.push(option);
274
- }
275
- this._operatingMultipleOption = option;
276
- if (this._selectedOptions.size < this.MaxMultiple) {
277
- this._selectedOptions.add(option);
278
- }
279
- this.emitMultipleOptions();
280
- if ($event) {
281
- $event.preventDefault();
282
- $event.stopPropagation();
283
- }
284
- }
285
- /** emit multiple options */
286
- emitMultipleOptions() {
287
- if (this._isMultiInit) {
288
- return;
289
- }
290
- const arrayOptions = Array.from(this._selectedOptions);
291
- this._value = arrayOptions.map(item => item.Value);
292
- this.onChange(this._value);
293
- }
294
- /** update selected option when add remove option etc */
295
- updateSelectedOption(currentModelValue, triggerByNgModel = false) {
296
- if (currentModelValue == null) {
297
- return;
298
- }
299
- if (this.Multiple) {
300
- const selectedOptions = this._options.filter(item => {
301
- return item != null && currentModelValue.indexOf(item.Value) !== -1;
302
- });
303
- if ((this.KeepUnListOptions || this.Tags) && !triggerByNgModel) {
304
- const _selectedOptions = Array.from(this._selectedOptions);
305
- selectedOptions.forEach(option => {
306
- const _exist = _selectedOptions.some(item => item._value == option._value);
307
- if (!_exist) {
308
- this._selectedOptions.add(option);
309
- }
310
- });
311
- }
312
- else {
313
- this._selectedOptions = new Set();
314
- selectedOptions.forEach(option => {
315
- this._selectedOptions.add(option);
316
- });
317
- }
318
- }
319
- else {
320
- const selectedOption = this._options.filter(item => {
321
- return item != null && item.Value == currentModelValue;
322
- });
323
- this.chooseOption(selectedOption[0]);
324
- }
325
- }
326
- forceUpdateSelectedOption(value) {
327
- /** trigger dirty check */ // @ts-ignore
328
- setTimeout(_ => {
329
- this.updateSelectedOption(value);
330
- });
331
- }
332
- get Value() {
333
- return this._value;
334
- }
335
- set Value(value) {
336
- this._updateValue(value);
337
- }
338
- clearAllSelectedOption(emitChange = true) {
339
- this._selectedOptions.forEach(item => {
340
- this.unSelectMultipleOption(item, null, emitChange);
341
- });
342
- }
343
- handleKeyEnterEvent(event) {
344
- /** when composing end */
345
- if (!this._composing && this._isOpen) {
346
- event.preventDefault();
347
- event.stopPropagation();
348
- this.updateFilterOption(false);
349
- this.clickOption(this._activeFilterOption);
350
- }
351
- }
352
- handleKeyBackspaceEvent(event) {
353
- if (!this._searchText && !this._composing && this._isMultiple) {
354
- event.preventDefault();
355
- const lastOption = Array.from(this._selectedOptions).pop();
356
- this.unSelectMultipleOption(lastOption);
357
- }
358
- }
359
- handleKeyDownEvent($event) {
360
- if (this._isOpen) {
361
- $event.preventDefault();
362
- $event.stopPropagation();
363
- this._activeFilterOption = this.nextOption(this._activeFilterOption, this._filterOptions.filter(w => !w.Disabled));
364
- this.scrollToActive();
365
- }
366
- }
367
- handleKeyUpEvent($event) {
368
- if (this._isOpen) {
369
- $event.preventDefault();
370
- $event.stopPropagation();
371
- this._activeFilterOption = this.preOption(this._activeFilterOption, this._filterOptions.filter(w => !w.Disabled));
372
- this.scrollToActive();
373
- }
374
- }
375
- preOption(option, options) {
376
- return options[options.indexOf(option) - 1] || options[options.length - 1];
377
- }
378
- nextOption(option, options) {
379
- return options[options.indexOf(option) + 1] || options[0];
380
- }
381
- clearSearchText() {
382
- this._searchText = "";
383
- this.updateFilterOption();
384
- }
385
- updateFilterOption(updateActiveFilter = true) {
386
- if (this.Filter) {
387
- this._filterOptions = new OptionPipe().transform(this._options, {
388
- searchText: this._searchText,
389
- tags: this._isTags,
390
- notFoundContent: this._isTags
391
- ? this._searchText
392
- : this._notFoundContent,
393
- disabled: !this._isTags,
394
- value: this._isTags ? this._searchText : "disabled"
395
- });
396
- }
397
- else {
398
- this._filterOptions = this._options;
399
- }
400
- /** TODO: cause pre & next key selection not work */
401
- if (updateActiveFilter && !this._selectedOption) {
402
- this._activeFilterOption = this._filterOptions[0];
403
- }
404
- }
405
- onSearchChange(searchValue) {
406
- this.SearchChange.emit(searchValue);
407
- }
408
- onClick(e) {
409
- e.preventDefault();
410
- if (!this._disabled) {
411
- this.Open = !this.Open;
412
- if (this.ShowSearch) {
413
- /** wait for search display */ // @ts-ignore
414
- setTimeout(_ => {
415
- this.searchInputElementRef.nativeElement.focus();
416
- });
417
- }
418
- }
419
- }
420
- onKeyDown(e) {
421
- const keyCode = e.keyCode;
422
- if (keyCode === TAB && this.Open) {
423
- this.Open = false;
424
- return;
425
- }
426
- if ((keyCode !== DOWN_ARROW && keyCode !== ENTER) || this.Open) {
427
- return;
428
- }
429
- e.preventDefault();
430
- if (!this._disabled) {
431
- this.Open = true;
432
- if (this.ShowSearch) {
433
- /** wait for search display */ // @ts-ignore
434
- setTimeout(_ => {
435
- this.searchInputElementRef.nativeElement.focus();
436
- });
437
- }
438
- }
439
- }
440
- closeDropDown() {
441
- if (!this.Open) {
442
- return;
443
- }
444
- this.onTouched();
445
- if (this.Multiple) {
446
- this._renderer.removeStyle(this.searchInputElementRef.nativeElement, "width");
447
- }
448
- this.clearSearchText();
449
- this.Open = false;
450
- }
451
- setClassMap() {
452
- this._classList.forEach(_className => {
453
- this._renderer.removeClass(this._el, _className);
454
- }); // @ts-ignore
455
- this._classList = [
456
- this._prefixCls,
457
- this._mode === "combobox" && `${this._prefixCls}-combobox`,
458
- !this._disabled && `${this._prefixCls}-enabled`,
459
- this._disabled && `${this._prefixCls}-disabled`,
460
- this._isOpen && `${this._prefixCls}-open`,
461
- this._showSearch && `${this._prefixCls}-show-search`,
462
- this._size && `${this._prefixCls}-${this._size}`
463
- ].filter(item => {
464
- return !!item;
465
- });
466
- this._classList.forEach(_className => {
467
- this._renderer.addClass(this._el, _className);
468
- });
469
- this._selectionClassMap = {
470
- [this._selectionPrefixCls]: true,
471
- [`${this._selectionPrefixCls}--single`]: !this.Multiple,
472
- [`${this._selectionPrefixCls}--multiple`]: this.Multiple
473
- };
474
- }
475
- setDropDownClassMap() {
476
- this._dropDownClassMap = {
477
- [this._dropDownPrefixCls]: true,
478
- ["component-select"]: this._mode === "combobox",
479
- [`${this._dropDownPrefixCls}--single`]: !this.Multiple,
480
- [`${this._dropDownPrefixCls}--multiple`]: this.Multiple,
481
- [`${this._dropDownPrefixCls}-placement-bottomLeft`]: this._dropDownPosition === "bottom",
482
- [`${this._dropDownPrefixCls}-placement-topLeft`]: this._dropDownPosition === "top"
483
- };
484
- }
485
- scrollToActive() {
486
- /** wait for dropdown display */ // @ts-ignore
487
- setTimeout(_ => {
488
- if (this._activeFilterOption && this._activeFilterOption.Value) {
489
- const index = this._filterOptions.findIndex(option => option.Value === this._activeFilterOption.Value);
490
- try {
491
- const scrollPane = this.dropdownUl.nativeElement.children[index];
492
- // TODO: scrollIntoViewIfNeeded is not a standard API, why doing so?
493
- /* tslint:disable-next-line:no-any */
494
- scrollPane.scrollIntoViewIfNeeded(false);
495
- }
496
- catch (e) { }
497
- }
498
- });
499
- }
500
- flushComponentState() {
501
- this.updateFilterOption();
502
- if (!this.Multiple) {
503
- this.updateSelectedOption(this._value);
504
- }
505
- else {
506
- if (this._value) {
507
- this.updateSelectedOption(this._value);
508
- }
509
- }
510
- }
511
- _setTriggerWidth() {
512
- this._triggerWidth = this._getTriggerRect().width;
513
- /** should remove after after https://github.com/angular/material2/pull/8765 merged **/
514
- if (this._cdkOverlay && this._cdkOverlay.overlayRef) {
515
- this._cdkOverlay.overlayRef.updateSize({
516
- width: this._triggerWidth
517
- });
518
- }
519
- }
520
- _getTriggerRect() {
521
- return this.trigger.nativeElement.getBoundingClientRect();
522
- }
523
- writeValue(value) {
524
- this._updateValue(value, false);
525
- }
526
- registerOnChange(fn) {
527
- this.onChange = fn;
528
- }
529
- registerOnTouched(fn) {
530
- this.onTouched = fn;
531
- }
532
- setDisabledState(isDisabled) {
533
- this.Disabled = isDisabled;
534
- }
535
- dropDownScroll(ul) {
536
- if (ul && ul.scrollHeight - ul.scrollTop === ul.clientHeight) {
537
- this.ScrollToBottom.emit(true);
538
- }
539
- }
540
- checkDropDownScroll() {
541
- if (this.dropdownUl &&
542
- this.dropdownUl.nativeElement.scrollHeight ===
543
- this.dropdownUl.nativeElement.clientHeight) {
544
- this.ScrollToBottom.emit(true);
545
- }
546
- }
547
- ngAfterContentInit() {
548
- if (this._value != null) {
549
- this.flushComponentState();
550
- }
551
- }
552
- ngOnInit() {
553
- this.updateFilterOption();
554
- this.setClassMap();
555
- this.setDropDownClassMap();
556
- }
557
- ngAfterContentChecked() {
558
- if (this._cacheOptions !== this._options) {
559
- /** update filter option after every content check cycle */
560
- this.updateFilterOption();
561
- this._cacheOptions = this._options;
562
- }
563
- else {
564
- this.updateFilterOption(false);
565
- }
566
- if (this.FirstDefault) {
567
- if (!this._value && this._options) {
568
- if (this._options[0] !== undefined && this._options[0].Value) {
569
- this.chooseOption(this._options[0], false);
570
- setTimeout(() => {
571
- this.onChange(this._options[0].Value);
572
- });
573
- }
574
- }
575
- }
576
- }
577
- _updateValue(value, emitChange = true) {
578
- if (this._value === value) {
579
- return;
580
- }
581
- if (value == null && this.Multiple) {
582
- this._value = [];
583
- }
584
- else {
585
- this._value = value;
586
- }
587
- if (!this.Multiple) {
588
- if (value == null) { // @ts-ignore
589
- this._selectedOption = null;
590
- }
591
- else {
592
- this.updateSelectedOption(value);
593
- }
594
- }
595
- else {
596
- if (value) {
597
- if (value.length === 0) {
598
- this.clearAllSelectedOption(emitChange);
599
- }
600
- else {
601
- this.updateSelectedOption(value, true);
602
- }
603
- }
604
- else if (value == null) {
605
- this.clearAllSelectedOption(emitChange);
606
- }
607
- }
608
- }
609
- }
610
- MefDevSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MefDevSelectComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
611
- MefDevSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: MefDevSelectComponent, selector: "mefdev-select", inputs: { Filter: "Filter", MaxMultiple: "MaxMultiple", FirstDefault: "FirstDefault", AllowClear: "AllowClear", KeepUnListOptions: "KeepUnListOptions", Mode: "Mode", Multiple: "Multiple", PlaceHolder: "PlaceHolder", NotFoundContent: "NotFoundContent", Size: "Size", ShowSearch: "ShowSearch", Tags: "Tags", Disabled: "Disabled", Open: "Open" }, outputs: { SearchChange: "SearchChange", change: "change", OpenChange: "OpenChange", ScrollToBottom: "ScrollToBottom" }, host: { listeners: { "click": "onClick($event)", "keydown": "onKeyDown($event)" } }, providers: [
612
- {
613
- provide: NG_VALUE_ACCESSOR,
614
- useExisting: forwardRef(() => MefDevSelectComponent),
615
- multi: true
616
- }
617
- ], viewQueries: [{ propertyName: "searchInputElementRef", first: true, predicate: ["searchInput"], descendants: true }, { propertyName: "trigger", first: true, predicate: ["trigger"], descendants: true }, { propertyName: "dropdownUl", first: true, predicate: ["dropdownUl"], descendants: true }, { propertyName: "_cdkOverlay", first: true, predicate: CdkConnectedOverlay, descendants: true }], ngImport: i0, template: "<div tabindex=\"0\" #trigger cdkOverlayOrigin #origin=\"cdkOverlayOrigin\" [ngClass]=\"_selectionClassMap\"\r\n (keydown.Enter)=\"handleKeyEnterEvent($event)\" (keydown.Backspace)=\"handleKeyBackspaceEvent($event)\"\r\n (keydown.ArrowUp)=\"handleKeyUpEvent($event)\" (keydown.ArrowDown)=\"handleKeyDownEvent($event)\">\r\n <div class=\"pg-select-selection__rendered\" *ngIf=\"!ShowSearch\">\r\n <div class=\"pg-select-selection__placeholder\">\r\n <ng-template [ngIf]=\"!_selectedOption\">\r\n {{ PlaceHolder }}\r\n </ng-template>\r\n </div>\r\n <div class=\"pg-select-selection-selected-value\">\r\n {{ _selectedOption?.Label }}\r\n </div>\r\n </div>\r\n <div class=\"pg-select-selection__rendered\" *ngIf=\"ShowSearch\">\r\n <div [hidden]=\"_searchText||(!Open&&_selectedOption)||_selectedOptions.size\"\r\n class=\"pg-select-selection__placeholder\">\r\n <ng-template [ngIf]=\"(!_composing)&&_selectedOption\">\r\n {{ _selectedOption.Label }}\r\n </ng-template>\r\n <ng-template [ngIf]=\"(!_composing)&&(!_selectedOption)\">\r\n {{ PlaceHolder }}\r\n </ng-template>\r\n </div>\r\n <ul *ngIf=\"Multiple\">\r\n <li *ngFor=\"let option of _selectedOptions\" [@tagAnimation] [attr.title]=\"option?.Label || option?.Value\"\r\n class=\"pg-select-selection__choice\" style=\"-webkit-user-select: none;\">\r\n <span class=\"pg-select-selection__choice__remove\" (click)=\"unSelectMultipleOption(option,$event)\"></span>\r\n <div class=\"pg-select-selection__choice__content\">{{ option?.Label }}</div>\r\n </li>\r\n <li class=\"pg-select-search pg-select-search--inline\">\r\n <div class=\"pg-select-search__field__wrap\">\r\n <input class=\"pg-select-search__field\" (compositionstart)=\"compositionStart()\"\r\n (compositionend)=\"compositionEnd();updateWidth(searchInput,_searchText);\" [(ngModel)]=\"_searchText\"\r\n (ngModelChange)=\"updateFilterOption();onSearchChange($event);\"\r\n (keydown)=\"updateWidth(searchInput,_searchText)\" (input)=\"updateWidth(searchInput,_searchText)\"\r\n (blur)=\"onTouched()\" #searchInput>\r\n <span class=\"pg-select-search__field__mirror\"></span></div>\r\n </li>\r\n </ul>\r\n <div *ngIf=\"!Multiple\" class=\"pg-select-selection-selected-value\" [hidden]=\"!(_selectedOption?.Label)||Open\">\r\n {{ _selectedOption?.Label }}\r\n </div>\r\n <div *ngIf=\"!Multiple\" [hidden]=\"!Open\" class=\"pg-select-search pg-select-search--inline\">\r\n <div class=\"pg-select-search__field__wrap\">\r\n <input class=\"pg-select-search__field\" (blur)=\"onTouched()\" (compositionstart)=\"compositionStart()\"\r\n (compositionend)=\"compositionEnd()\" [(ngModel)]=\"_searchText\"\r\n (ngModelChange)=\"updateFilterOption();onSearchChange($event);\" #searchInput>\r\n <span class=\"pg-select-search__field__mirror\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <span (click)=\"onTouched();clearSelect($event)\" class=\"pg-select-selection__clear\" style=\"-webkit-user-select: none;\"\r\n *ngIf=\"_selectedOption?.Label&&AllowClear&&!Multiple\">\r\n </span>\r\n <span class=\"pg-select-arrow\"><b></b></span>\r\n</div>\r\n<ng-template cdkConnectedOverlay cdkConnectedOverlayHasBackdrop [cdkConnectedOverlayOrigin]=\"origin\"\r\n (backdropClick)=\"closeDropDown()\" (detach)=\"closeDropDown();\" (positionChange)=\"onPositionChange($event)\"\r\n [cdkConnectedOverlayWidth]=\"_triggerWidth\" [cdkConnectedOverlayOpen]=\"_isOpen\">\r\n <div [ngClass]=\"_dropDownClassMap\" [@dropDownAnimation]=\"_dropDownPosition\">\r\n <div style=\"overflow: auto;\">\r\n <ul class=\"pg-select-dropdown-menu pg-select-dropdown-menu-vertical pg-select-dropdown-menu-root\" #dropdownUl\r\n (scroll)=\"dropDownScroll(dropdownUl)\">\r\n <li *ngFor=\"let option of _filterOptions\" [class.pg-select-dropdown-menu-item-disabled]=\"option.Disabled\"\r\n [class.pg-select-dropdown-menu-item-active]=\"option.Value == _activeFilterOption?.Value\"\r\n [class.pg-select-dropdown-menu-item-selected]=\"(option.Value==(_selectedOption?.Value))||(isInSet(_selectedOptions,option))\"\r\n class=\"pg-select-dropdown-menu-item\" (click)=\"clickOption(option,$event)\">\r\n <ng-template *ngIf=\"option.OptionTemplate\" [ngTemplateOutlet]=\"option.OptionTemplate\">\r\n </ng-template>\r\n <ng-template [ngIf]=\"!option.OptionTemplate\">\r\n {{ option.Label }}\r\n </ng-template>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</ng-template>", dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i3.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i3.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }], animations: [trigger('dropDownAnimation', [
618
- state('bottom', style({
619
- opacity: 1,
620
- transform: 'scaleY(1)',
621
- transformOrigin: '0% 0%'
622
- })),
623
- transition('void => bottom', [
624
- style({
625
- opacity: 0,
626
- transform: 'scaleY(0)',
627
- transformOrigin: '0% 0%'
628
- }),
629
- animate('150ms cubic-bezier(0.25, 0.8, 0.25, 1)')
630
- ]),
631
- state('top', style({
632
- opacity: 1,
633
- transform: 'scaleY(1)',
634
- transformOrigin: '0% 100%'
635
- })),
636
- transition('void => top', [
637
- style({
638
- opacity: 0,
639
- transform: 'scaleY(0)',
640
- transformOrigin: '0% 100%'
641
- }),
642
- animate('150ms cubic-bezier(0.25, 0.8, 0.25, 1)')
643
- ]),
644
- transition('* => void', [
645
- animate('250ms 100ms linear', style({ opacity: 0 }))
646
- ])
647
- ]),
648
- trigger('tagAnimation', [
649
- state('*', style({ opacity: 1, transform: 'scale(1)' })),
650
- transition('void => *', [
651
- style({ opacity: 0, transform: 'scale(0)' }),
652
- animate('150ms linear')
653
- ]),
654
- state('void', style({ opacity: 0, transform: 'scale(0)' })),
655
- transition('* => void', [
656
- style({ opacity: 1, transform: 'scale(1)' }),
657
- animate('150ms linear')
658
- ])
659
- ])], encapsulation: i0.ViewEncapsulation.None });
660
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MefDevSelectComponent, decorators: [{
661
- type: Component,
662
- args: [{ selector: "mefdev-select", encapsulation: ViewEncapsulation.None, providers: [
663
- {
664
- provide: NG_VALUE_ACCESSOR,
665
- useExisting: forwardRef(() => MefDevSelectComponent),
666
- multi: true
667
- }
668
- ], animations: [trigger('dropDownAnimation', [
669
- state('bottom', style({
670
- opacity: 1,
671
- transform: 'scaleY(1)',
672
- transformOrigin: '0% 0%'
673
- })),
674
- transition('void => bottom', [
675
- style({
676
- opacity: 0,
677
- transform: 'scaleY(0)',
678
- transformOrigin: '0% 0%'
679
- }),
680
- animate('150ms cubic-bezier(0.25, 0.8, 0.25, 1)')
681
- ]),
682
- state('top', style({
683
- opacity: 1,
684
- transform: 'scaleY(1)',
685
- transformOrigin: '0% 100%'
686
- })),
687
- transition('void => top', [
688
- style({
689
- opacity: 0,
690
- transform: 'scaleY(0)',
691
- transformOrigin: '0% 100%'
692
- }),
693
- animate('150ms cubic-bezier(0.25, 0.8, 0.25, 1)')
694
- ]),
695
- transition('* => void', [
696
- animate('250ms 100ms linear', style({ opacity: 0 }))
697
- ])
698
- ]),
699
- trigger('tagAnimation', [
700
- state('*', style({ opacity: 1, transform: 'scale(1)' })),
701
- transition('void => *', [
702
- style({ opacity: 0, transform: 'scale(0)' }),
703
- animate('150ms linear')
704
- ]),
705
- state('void', style({ opacity: 0, transform: 'scale(0)' })),
706
- transition('* => void', [
707
- style({ opacity: 1, transform: 'scale(1)' }),
708
- animate('150ms linear')
709
- ])
710
- ])], template: "<div tabindex=\"0\" #trigger cdkOverlayOrigin #origin=\"cdkOverlayOrigin\" [ngClass]=\"_selectionClassMap\"\r\n (keydown.Enter)=\"handleKeyEnterEvent($event)\" (keydown.Backspace)=\"handleKeyBackspaceEvent($event)\"\r\n (keydown.ArrowUp)=\"handleKeyUpEvent($event)\" (keydown.ArrowDown)=\"handleKeyDownEvent($event)\">\r\n <div class=\"pg-select-selection__rendered\" *ngIf=\"!ShowSearch\">\r\n <div class=\"pg-select-selection__placeholder\">\r\n <ng-template [ngIf]=\"!_selectedOption\">\r\n {{ PlaceHolder }}\r\n </ng-template>\r\n </div>\r\n <div class=\"pg-select-selection-selected-value\">\r\n {{ _selectedOption?.Label }}\r\n </div>\r\n </div>\r\n <div class=\"pg-select-selection__rendered\" *ngIf=\"ShowSearch\">\r\n <div [hidden]=\"_searchText||(!Open&&_selectedOption)||_selectedOptions.size\"\r\n class=\"pg-select-selection__placeholder\">\r\n <ng-template [ngIf]=\"(!_composing)&&_selectedOption\">\r\n {{ _selectedOption.Label }}\r\n </ng-template>\r\n <ng-template [ngIf]=\"(!_composing)&&(!_selectedOption)\">\r\n {{ PlaceHolder }}\r\n </ng-template>\r\n </div>\r\n <ul *ngIf=\"Multiple\">\r\n <li *ngFor=\"let option of _selectedOptions\" [@tagAnimation] [attr.title]=\"option?.Label || option?.Value\"\r\n class=\"pg-select-selection__choice\" style=\"-webkit-user-select: none;\">\r\n <span class=\"pg-select-selection__choice__remove\" (click)=\"unSelectMultipleOption(option,$event)\"></span>\r\n <div class=\"pg-select-selection__choice__content\">{{ option?.Label }}</div>\r\n </li>\r\n <li class=\"pg-select-search pg-select-search--inline\">\r\n <div class=\"pg-select-search__field__wrap\">\r\n <input class=\"pg-select-search__field\" (compositionstart)=\"compositionStart()\"\r\n (compositionend)=\"compositionEnd();updateWidth(searchInput,_searchText);\" [(ngModel)]=\"_searchText\"\r\n (ngModelChange)=\"updateFilterOption();onSearchChange($event);\"\r\n (keydown)=\"updateWidth(searchInput,_searchText)\" (input)=\"updateWidth(searchInput,_searchText)\"\r\n (blur)=\"onTouched()\" #searchInput>\r\n <span class=\"pg-select-search__field__mirror\"></span></div>\r\n </li>\r\n </ul>\r\n <div *ngIf=\"!Multiple\" class=\"pg-select-selection-selected-value\" [hidden]=\"!(_selectedOption?.Label)||Open\">\r\n {{ _selectedOption?.Label }}\r\n </div>\r\n <div *ngIf=\"!Multiple\" [hidden]=\"!Open\" class=\"pg-select-search pg-select-search--inline\">\r\n <div class=\"pg-select-search__field__wrap\">\r\n <input class=\"pg-select-search__field\" (blur)=\"onTouched()\" (compositionstart)=\"compositionStart()\"\r\n (compositionend)=\"compositionEnd()\" [(ngModel)]=\"_searchText\"\r\n (ngModelChange)=\"updateFilterOption();onSearchChange($event);\" #searchInput>\r\n <span class=\"pg-select-search__field__mirror\"></span>\r\n </div>\r\n </div>\r\n </div>\r\n <span (click)=\"onTouched();clearSelect($event)\" class=\"pg-select-selection__clear\" style=\"-webkit-user-select: none;\"\r\n *ngIf=\"_selectedOption?.Label&&AllowClear&&!Multiple\">\r\n </span>\r\n <span class=\"pg-select-arrow\"><b></b></span>\r\n</div>\r\n<ng-template cdkConnectedOverlay cdkConnectedOverlayHasBackdrop [cdkConnectedOverlayOrigin]=\"origin\"\r\n (backdropClick)=\"closeDropDown()\" (detach)=\"closeDropDown();\" (positionChange)=\"onPositionChange($event)\"\r\n [cdkConnectedOverlayWidth]=\"_triggerWidth\" [cdkConnectedOverlayOpen]=\"_isOpen\">\r\n <div [ngClass]=\"_dropDownClassMap\" [@dropDownAnimation]=\"_dropDownPosition\">\r\n <div style=\"overflow: auto;\">\r\n <ul class=\"pg-select-dropdown-menu pg-select-dropdown-menu-vertical pg-select-dropdown-menu-root\" #dropdownUl\r\n (scroll)=\"dropDownScroll(dropdownUl)\">\r\n <li *ngFor=\"let option of _filterOptions\" [class.pg-select-dropdown-menu-item-disabled]=\"option.Disabled\"\r\n [class.pg-select-dropdown-menu-item-active]=\"option.Value == _activeFilterOption?.Value\"\r\n [class.pg-select-dropdown-menu-item-selected]=\"(option.Value==(_selectedOption?.Value))||(isInSet(_selectedOptions,option))\"\r\n class=\"pg-select-dropdown-menu-item\" (click)=\"clickOption(option,$event)\">\r\n <ng-template *ngIf=\"option.OptionTemplate\" [ngTemplateOutlet]=\"option.OptionTemplate\">\r\n </ng-template>\r\n <ng-template [ngIf]=\"!option.OptionTemplate\">\r\n {{ option.Label }}\r\n </ng-template>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n</ng-template>" }]
711
- }], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { searchInputElementRef: [{
712
- type: ViewChild,
713
- args: ["searchInput"]
714
- }], trigger: [{
715
- type: ViewChild,
716
- args: ["trigger"]
717
- }], dropdownUl: [{
718
- type: ViewChild,
719
- args: ["dropdownUl"]
720
- }], SearchChange: [{
721
- type: Output
722
- }], change: [{
723
- type: Output
724
- }], OpenChange: [{
725
- type: Output
726
- }], ScrollToBottom: [{
727
- type: Output
728
- }], Filter: [{
729
- type: Input
730
- }], MaxMultiple: [{
731
- type: Input
732
- }], FirstDefault: [{
733
- type: Input
734
- }], _cdkOverlay: [{
735
- type: ViewChild,
736
- args: [CdkConnectedOverlay]
737
- }], AllowClear: [{
738
- type: Input
739
- }], KeepUnListOptions: [{
740
- type: Input
741
- }], Mode: [{
742
- type: Input
743
- }], Multiple: [{
744
- type: Input
745
- }], PlaceHolder: [{
746
- type: Input
747
- }], NotFoundContent: [{
748
- type: Input
749
- }], Size: [{
750
- type: Input
751
- }], ShowSearch: [{
752
- type: Input
753
- }], Tags: [{
754
- type: Input
755
- }], Disabled: [{
756
- type: Input
757
- }], Open: [{
758
- type: Input
759
- }], onClick: [{
760
- type: HostListener,
761
- args: ["click", ["$event"]]
762
- }], onKeyDown: [{
763
- type: HostListener,
764
- args: ["keydown", ["$event"]]
765
- }] } });
766
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWtpdC1saWIvc3JjL2xpYi9wZy1jb21wb25lbnRzL3NlbGVjdC9zZWxlY3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkta2l0LWxpYi9zcmMvbGliL3BnLWNvbXBvbmVudHMvc2VsZWN0L3NlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFDSCxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUMvRCxPQUFPLEVBQ0wsbUJBQW1CLEVBRXBCLE1BQU0sc0JBQXNCLENBQUM7QUFDOUIsT0FBTyxFQUNMLFVBQVUsRUFHVixTQUFTLEVBRVQsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsRUFDVCxpQkFBaUIsRUFFbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUF3QixpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7O0FBR2pGOzs7SUFHSTtBQXlESixNQUFNLE9BQU8scUJBQXFCO0lBMG9CaEMsWUFDVSxXQUF1QixFQUN2QixTQUFvQixFQUNwQixLQUF3QjtRQUZ4QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtRQUN2QixjQUFTLEdBQVQsU0FBUyxDQUFXO1FBQ3BCLFVBQUssR0FBTCxLQUFLLENBQW1CO1FBdm9CMUIsZ0JBQVcsR0FB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Ii8qKlxyXG4gKiBjb21wbGV4IGJ1dCB3b3JrIHdlbGxcclxuICogVE9ETzogcmVidWlsZCBsYXR0ZXJcclxuICovXHJcbmltcG9ydCB7IERPV05fQVJST1csIEVOVEVSLCBUQUIgfSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2tleWNvZGVzXCI7XHJcbmltcG9ydCB7XHJcbiAgQ2RrQ29ubmVjdGVkT3ZlcmxheSxcclxuICBDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2VcclxufSBmcm9tIFwiQGFuZ3VsYXIvY2RrL292ZXJsYXlcIjtcclxuaW1wb3J0IHtcclxuICBmb3J3YXJkUmVmLFxyXG4gIEFmdGVyQ29udGVudENoZWNrZWQsXHJcbiAgQWZ0ZXJDb250ZW50SW5pdCxcclxuICBDb21wb25lbnQsXHJcbiAgRWxlbWVudFJlZixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSG9zdExpc3RlbmVyLFxyXG4gIElucHV0LFxyXG4gIE9uSW5pdCxcclxuICBPdXRwdXQsXHJcbiAgUmVuZGVyZXIyLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBDaGFuZ2VEZXRlY3RvclJlZlxyXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBNZWZEZXZPcHRpb25Db21wb25lbnQgfSBmcm9tIFwiLi9vcHRpb24uY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IE9wdGlvblBpcGUgfSBmcm9tIFwiLi9vcHRpb24ucGlwZVwiO1xyXG5pbXBvcnQgeyB0b0Jvb2xlYW4gfSBmcm9tICcuLi91dGlsL2NvbnZlcnQnO1xyXG5pbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tIFwiQGFuZ3VsYXIvYW5pbWF0aW9uc1wiO1xyXG5cclxuXHJcbi8qKlxyXG4gICogRXhhbXBsZSBvZiB1c2FnZTpcclxuICAqIDxleGFtcGxlLXVybD5odHRwczovL21lZi5kZXYvdWlfa2l0X2RlbW8vdmlldy9zZWxlY3Q8L2V4YW1wbGUtdXJsPlxyXG4gICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcIm1lZmRldi1zZWxlY3RcIixcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vc2VsZWN0LmNvbXBvbmVudC5odG1sXCIsXHJcblxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAge1xyXG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWVmRGV2U2VsZWN0Q29tcG9uZW50KSxcclxuICAgICAgbXVsdGk6IHRydWVcclxuICAgIH1cclxuICBdLFxyXG4gIGFuaW1hdGlvbnM6IFt0cmlnZ2VyKCdkcm9wRG93bkFuaW1hdGlvbicsIFtcclxuICAgIHN0YXRlKCdib3R0b20nLCBzdHlsZSh7XHJcbiAgICAgIG9wYWNpdHkgICAgICAgIDogMSxcclxuICAgICAgdHJhbnNmb3JtICAgICAgOiAnc2NhbGVZKDEpJyxcclxuICAgICAgdHJhbnNmb3JtT3JpZ2luOiAnMCUgMCUnXHJcbiAgICB9KSksXHJcbiAgICB0cmFuc2l0aW9uKCd2b2lkID0+IGJvdHRvbScsIFtcclxuICAgICAgc3R5bGUoe1xyXG4gICAgICAgIG9wYWNpdHkgICAgICAgIDogMCxcclxuICAgICAgICB0cmFuc2Zvcm0gICAgICA6ICdzY2FsZVkoMCknLFxyXG4gICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzAlIDAlJ1xyXG4gICAgICB9KSxcclxuICAgICAgYW5pbWF0ZSgnMTUwbXMgY3ViaWMtYmV6aWVyKDAuMjUsIDAuOCwgMC4yNSwgMSknKVxyXG4gICAgXSksXHJcbiAgICBzdGF0ZSgndG9wJywgc3R5bGUoe1xyXG4gICAgICBvcGFjaXR5ICAgICAgICA6IDEsXHJcbiAgICAgIHRyYW5zZm9ybSAgICAgIDogJ3NjYWxlWSgxKScsXHJcbiAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzAlIDEwMCUnXHJcbiAgICB9KSksXHJcbiAgICB0cmFuc2l0aW9uKCd2b2lkID0+IHRvcCcsIFtcclxuICAgICAgc3R5bGUoe1xyXG4gICAgICAgIG9wYWNpdHkgICAgICAgIDogMCxcclxuICAgICAgICB0cmFuc2Zvcm0gICAgICA6ICdzY2FsZVkoMCknLFxyXG4gICAgICAgIHRyYW5zZm9ybU9yaWdpbjogJzAlIDEwMCUnXHJcbiAgICAgIH0pLFxyXG4gICAgICBhbmltYXRlKCcxNTBtcyBjdWJpYy1iZXppZXIoMC4yNSwgMC44LCAwLjI1LCAxKScpXHJcbiAgICBdKSxcclxuICAgIHRyYW5zaXRpb24oJyogPT4gdm9pZCcsIFtcclxuICAgICAgYW5pbWF0ZSgnMjUwbXMgMTAwbXMgbGluZWFyJywgc3R5bGUoeyBvcGFjaXR5OiAwIH0pKVxyXG4gICAgXSlcclxuICBdKSxcclxuXHJcbiAgdHJpZ2dlcigndGFnQW5pbWF0aW9uJywgW1xyXG4gICAgc3RhdGUoJyonLCBzdHlsZSh7IG9wYWNpdHk6IDEsIHRyYW5zZm9ybTogJ3NjYWxlKDEpJyB9KSksXHJcbiAgICB0cmFuc2l0aW9uKCd2b2lkID0+IConLCBbXHJcbiAgICAgIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAnc2NhbGUoMCknIH0pLFxyXG4gICAgICBhbmltYXRlKCcxNTBtcyBsaW5lYXInKVxyXG4gICAgXSksXHJcbiAgICBzdGF0ZSgndm9pZCcsIHN0eWxlKHsgb3BhY2l0eTogMCwgdHJhbnNmb3JtOiAnc2NhbGUoMCknIH0pKSxcclxuICAgIHRyYW5zaXRpb24oJyogPT4gdm9pZCcsIFtcclxuICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxLCB0cmFuc2Zvcm06ICdzY2FsZSgxKScgfSksXHJcbiAgICAgIGFuaW1hdGUoJzE1MG1zIGxpbmVhcicpXHJcbiAgICBdKV0pXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWVmRGV2U2VsZWN0Q29tcG9uZW50XHJcbiAgaW1wbGVtZW50c1xyXG4gICAgT25Jbml0LFxyXG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcclxuICAgIEFmdGVyQ29udGVudENoZWNrZWQsXHJcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvciB7XHJcbiAgcHJpdmF0ZSBfYWxsb3dDbGVhciA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2Rpc2FibGVkID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXNUYWdzID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfaXNNdWx0aXBsZSA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2tlZXBVbkxpc3RPcHRpb25zID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfc2hvd1NlYXJjaCA9IGZhbHNlO1xyXG4gIF9lbDogSFRNTEVsZW1lbnQ7XHJcbiAgX2lzT3BlbiA9IGZhbHNlO1xyXG4gIF9wcmVmaXhDbHMgPSBcInBnLXNlbGVjdFwiO1xyXG4gIF9jbGFzc0xpc3Q6IHN0cmluZ1tdID0gW107XHJcbiAgX2Ryb3BEb3duQ2xhc3NNYXA6IGFueTtcclxuICBfZHJvcERvd25QcmVmaXhDbHMgPSBgJHt0aGlzLl9wcmVmaXhDbHN9LWRyb3Bkb3duYDtcclxuICBfc2VsZWN0aW9uQ2xhc3NNYXA6IGFueTtcclxuICBfc2VsZWN0aW9uUHJlZml4Q2xzID0gYCR7dGhpcy5fcHJlZml4Q2xzfS1zZWxlY3Rpb25gO1xyXG4gIF9zaXplOiBzdHJpbmc7XHJcbiAgX3ZhbHVlOiBzdHJpbmdbXSB8IHN0cmluZztcclxuICBfcGxhY2Vob2xkZXIgPSBcInBsYWNlaG9sZGVyXCI7XHJcbiAgX25vdEZvdW5kQ29udGVudCA9IFwiTm8gQ29udGVudFwiO1xyXG4gIF9zZWFyY2hUZXh0ID0gXCJcIjtcclxuICBfdHJpZ2dlcldpZHRoID0gMDtcclxuICBfc2VsZWN0ZWRPcHRpb246IE1lZkRldk9wdGlvbkNvbXBvbmVudDtcclxuICBfb3BlcmF0aW5nTXVsdGlwbGVPcHRpb246IE1lZkRldk9wdGlvbkNvbXBvbmVudDtcclxuICBfc2VsZWN0ZWRPcHRpb25zOiBTZXQ8TWVmRGV2T3B0aW9uQ29tcG9uZW50PiA9IG5ldyBTZXQoKTtcclxuICBfb3B0aW9uczogTWVmRGV2T3B0aW9uQ29tcG9uZW50W10gPSBbXTtcclxuICBfY2FjaGVPcHRpb25zOiBNZWZEZXZPcHRpb25Db21wb25lbnRbXSA9IFtdO1xyXG4gIF9maWx0ZXJPcHRpb25zOiBNZWZEZXZPcHRpb25Db21wb25lbnRbXSA9IFtdO1xyXG4gIF90YWdzT3B0aW9uczogTWVmRGV2T3B0aW9uQ29tcG9uZW50W10gPSBbXTtcclxuICBfYWN0aXZlRmlsdGVyT3B0aW9uOiBNZWZEZXZPcHRpb25Db21wb25lbnQ7XHJcbiAgX2lzTXVsdGlJbml0ID0gZmFsc2U7XHJcbiAgX2Ryb3BEb3duUG9zaXRpb246IFwidG9wXCIgfCBcImNlbnRlclwiIHwgXCJib3R0b21cIiA9IFwiYm90dG9tXCI7XHJcbiAgX2NvbXBvc2luZyA9IGZhbHNlO1xyXG4gIF9tb2RlOiBhbnk7XHJcbiAgLy8gbmdNb2RlbCBBY2Nlc3NcclxuICBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSkgPT4gdm9pZCA9ICgpID0+IG51bGw7XHJcbiAgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4gbnVsbDtcclxuICBAVmlld0NoaWxkKFwic2VhcmNoSW5wdXRcIikgc2VhcmNoSW5wdXRFbGVtZW50UmVmOiBhbnk7XHJcbiAgQFZpZXdDaGlsZChcInRyaWdnZXJcIikgdHJpZ2dlcjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKFwiZHJvcGRvd25VbFwiKSBkcm9wZG93blVsOiBFbGVtZW50UmVmO1xyXG4gIEBPdXRwdXQoKSBTZWFyY2hDaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBjaGFuZ2U6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBPcGVuQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIFNjcm9sbFRvQm90dG9tOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQElucHV0KCkgRmlsdGVyID0gdHJ1ZTtcclxuICBASW5wdXQoKSBNYXhNdWx0aXBsZSA9IEluZmluaXR5O1xyXG4gIEBJbnB1dCgpIEZpcnN0RGVmYXVsdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBWaWV3Q2hpbGQoQ2RrQ29ubmVjdGVkT3ZlcmxheSkgX2Nka092ZXJsYXk6IENka0Nvbm5lY3RlZE92ZXJsYXk7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IEFsbG93Q2xlYXIodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2FsbG93Q2xlYXIgPSB0b0Jvb2xlYW4odmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IEFsbG93Q2xlYXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYWxsb3dDbGVhcjtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IEtlZXBVbkxpc3RPcHRpb25zKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9rZWVwVW5MaXN0T3B0aW9ucyA9IHRvQm9vbGVhbih2YWx1ZSk7XHJcbiAgfVxyXG5cclxuICBnZXQgS2VlcFVuTGlzdE9wdGlvbnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fa2VlcFVuTGlzdE9wdGlvbnM7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBNb2RlKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX21vZGUgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9tb2RlID09PSBcIm11bHRpcGxlXCIpIHtcclxuICAgICAgdGhpcy5NdWx0aXBsZSA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuX21vZGUgPT09IFwidGFnc1wiKSB7XHJcbiAgICAgIHRoaXMuVGFncyA9IHRydWU7XHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuX21vZGUgPT09IFwiY29tYm9ib3hcIikge1xyXG4gICAgICB0aGlzLlNob3dTZWFyY2ggPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgTXVsdGlwbGUodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2lzTXVsdGlwbGUgPSB0b0Jvb2xlYW4odmFsdWUpO1xyXG4gICAgaWYgKHRoaXMuX2lzTXVsdGlwbGUpIHtcclxuICAgICAgdGhpcy5TaG93U2VhcmNoID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBNdWx0aXBsZSgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pc011bHRpcGxlO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgUGxhY2VIb2xkZXIodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fcGxhY2Vob2xkZXIgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBQbGFjZUhvbGRlcigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyO1xyXG4gIH1cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgTm90Rm91bmRDb250ZW50KHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX25vdEZvdW5kQ29udGVudCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IE5vdEZvdW5kQ29udGVudCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX25vdEZvdW5kQ29udGVudDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IFNpemUodmFsdWU6IHN0cmluZykge1xyXG4gICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIHRoaXMuX3NpemUgPSB7IGxhcmdlOiBcImxnXCIsIHNtYWxsOiBcInNtXCIgfVt2YWx1ZV07XHJcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgU2l6ZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NpemU7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBTaG93U2VhcmNoKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9zaG93U2VhcmNoID0gdG9Cb29sZWFuKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGdldCBTaG93U2VhcmNoKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3Nob3dTZWFyY2g7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKVxyXG4gIHNldCBUYWdzKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICBjb25zdCBpc1RhZ3MgPSB0b0Jvb2xlYW4odmFsdWUpO1xyXG4gICAgdGhpcy5faXNUYWdzID0gaXNUYWdzO1xyXG4gICAgdGhpcy5NdWx0aXBsZSA9IGlzVGFncztcclxuICB9XHJcblxyXG4gIGdldCBUYWdzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lzVGFncztcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IERpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHRvQm9vbGVhbih2YWx1ZSk7XHJcbiAgICB0aGlzLmNsb3NlRHJvcERvd24oKTtcclxuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcclxuICB9XHJcblxyXG4gIGdldCBEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IE9wZW4odmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGNvbnN0IGlzT3BlbiA9IHRvQm9vbGVhbih2YWx1ZSk7XHJcbiAgICBpZiAodGhpcy5faXNPcGVuID09PSBpc09wZW4pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKGlzT3Blbikge1xyXG4gICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlKCk7XHJcbiAgICAgIHRoaXMuX3NldFRyaWdnZXJXaWR0aCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faXNPcGVuID0gaXNPcGVuO1xyXG4gICAgdGhpcy5PcGVuQ2hhbmdlLmVtaXQodGhpcy5faXNPcGVuKTtcclxuICAgIHRoaXMuc2V0Q2xhc3NNYXAoKTtcclxuICAgIGlmICh0aGlzLl9pc09wZW4pIHtcclxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5jaGVja0Ryb3BEb3duU2Nyb2xsKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IE9wZW4oKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faXNPcGVuO1xyXG4gIH1cclxuXHJcbiAgLyoqIG5ldyAtb3B0aW9uIGluc2VydCBvciBuZXcgdGFncyBpbnNlcnQgKi9cclxuICAgLy8gQHRzLWlnbm9yZVxyXG4gIGFkZE9wdGlvbiA9IG9wdGlvbiA9PiB7XHJcbiAgICB0aGlzLl9vcHRpb25zLnB1c2gob3B0aW9uKTtcclxuICAgIGlmICghdGhpcy5faXNUYWdzKSB7XHJcbiAgICAgIGlmIChvcHRpb24uVmFsdWUpIHtcclxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkT3B0aW9uKHRoaXMuX3ZhbHVlKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcmNlVXBkYXRlU2VsZWN0ZWRPcHRpb24odGhpcy5fdmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgLyoqIC1vcHRpb24gcmVtb3ZlIG9yIHRhZ3MgcmVtb3ZlICovXHJcbiAgcmVtb3ZlT3B0aW9uKG9wdGlvbjogTWVmRGV2T3B0aW9uQ29tcG9uZW50KTogdm9pZCB7XHJcbiAgICB0aGlzLl9vcHRpb25zLnNwbGljZSh0aGlzLl9vcHRpb25zLmluZGV4T2Yob3B0aW9uKSwgMSk7XHJcbiAgICBpZiAoIXRoaXMuX2lzVGFncykge1xyXG4gICAgICB0aGlzLmZvcmNlVXBkYXRlU2VsZWN0ZWRPcHRpb24odGhpcy5fdmFsdWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIGRyb3Bkb3duIHBvc2l0aW9uIGNoYW5nZWQgKi9cclxuICBvblBvc2l0aW9uQ2hhbmdlKHBvc2l0aW9uOiBDb25uZWN0ZWRPdmVybGF5UG9zaXRpb25DaGFuZ2UpOiB2b2lkIHtcclxuICAgIHRoaXMuX2Ryb3BEb3duUG9zaXRpb24gPSBwb3NpdGlvbi5jb25uZWN0aW9uUGFpci5vcmlnaW5ZO1xyXG4gIH1cclxuXHJcbiAgY29tcG9zaXRpb25TdGFydCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbXBvc2luZyA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBjb21wb3NpdGlvbkVuZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbXBvc2luZyA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqIGNsZWFyIHNpbmdsZSBzZWxlY3RlZCBvcHRpb24gKi9cclxuICBjbGVhclNlbGVjdCgkZXZlbnQ/OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAoJGV2ZW50KSB7XHJcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB9IC8vIEB0cy1pZ25vcmVcclxuICAgIHRoaXMuX3NlbGVjdGVkT3B0aW9uID0gbnVsbDsgLy8gQHRzLWlnbm9yZVxyXG4gICAgdGhpcy5WYWx1ZSA9IG51bGw7IC8vIEB0cy1pZ25vcmVcclxuICAgIHRoaXMub25DaGFuZ2UobnVsbCk7XHJcbiAgfVxyXG5cclxuICAvKiogY2xpY2sgZHJvcGRvd24gb3B0aW9uIGJ5IHVzZXIgKi9cclxuICBjbGlja09wdGlvbihvcHRpb246IE1lZkRldk9wdGlvbkNvbXBvbmVudCwgJGV2ZW50PzogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCFvcHRpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jaG9vc2VPcHRpb24ob3B0aW9uLCB0cnVlLCAkZXZlbnQpO1xyXG4gICAgdGhpcy5jbGVhclNlYXJjaFRleHQoKTtcclxuICAgIGlmICghdGhpcy5faXNNdWx0aXBsZSkge1xyXG4gICAgICB0aGlzLk9wZW4gPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBjaG9vc2Ugb3B0aW9uICovXHJcbiAgY2hvb3NlT3B0aW9uKFxyXG4gICAgb3B0aW9uOiBNZWZEZXZPcHRpb25Db21wb25lbnQsXHJcbiAgICBpc1VzZXJDbGljazogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgJGV2ZW50PzogTW91c2VFdmVudFxyXG4gICk6IHZvaWQge1xyXG4gICAgaWYgKCRldmVudCkge1xyXG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fYWN0aXZlRmlsdGVyT3B0aW9uID0gb3B0aW9uO1xyXG4gICAgaWYgKG9wdGlvbiAmJiAhb3B0aW9uLkRpc2FibGVkKSB7XHJcbiAgICAgIGlmICghdGhpcy5NdWx0aXBsZSkge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkT3B0aW9uID0gb3B0aW9uO1xyXG4gICAgICAgIHRoaXMuX3ZhbHVlID0gb3B0aW9uLlZhbHVlO1xyXG4gICAgICAgIGlmIChpc1VzZXJDbGljaykge1xyXG4gICAgICAgICAgdGhpcy5jaGFuZ2UubmV4dCh0aGlzLl92YWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKG9wdGlvbi5WYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChpc1VzZXJDbGljaykge1xyXG4gICAgICAgICAgdGhpcy5pc0luU2V0KHRoaXMuX3NlbGVjdGVkT3B0aW9ucywgb3B0aW9uKVxyXG4gICAgICAgICAgICA/IHRoaXMudW5TZWxlY3RNdWx0aXBsZU9wdGlvbihvcHRpb24pXHJcbiAgICAgICAgICAgIDogdGhpcy5zZWxlY3RNdWx0aXBsZU9wdGlvbihvcHRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgdXBkYXRlV2lkdGgoZWxlbWVudDogSFRNTElucHV0RWxlbWVudCwgdGV4dDogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodGV4dCkge1xyXG4gICAgICAvKiogd2FpdCBmb3Igc2Nyb2xsIHdpZHRoIGNoYW5nZSAqLyAvLyBAdHMtaWdub3JlXHJcbiAgICAgIHNldFRpbWVvdXQoXyA9PiB7XHJcbiAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoZWxlbWVudCwgXCJ3aWR0aFwiLCBgJHtlbGVtZW50LnNjcm9sbFdpZHRofXB4YCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5fcmVuZGVyZXIucmVtb3ZlU3R5bGUoZWxlbWVudCwgXCJ3aWR0aFwiKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBkZXRlcm1pbmUgaWYgb3B0aW9uIGluIHNldCAqL1xyXG4gIGlzSW5TZXQoXHJcbiAgICBzZXQ6IFNldDxNZWZEZXZPcHRpb25Db21wb25lbnQ+LFxyXG4gICAgb3B0aW9uOiBNZWZEZXZPcHRpb25Db21wb25lbnRcclxuICApOiBNZWZEZXZPcHRpb25Db21wb25lbnQgeyAvLyBAdHMtaWdub3JlXHJcbiAgICByZXR1cm4gKEFycmF5LmZyb20oc2V0KSBhcyBNZWZEZXZPcHRpb25Db21wb25lbnRbXSkuZmluZChcclxuICAgICAgKGRhdGE6IE1lZkRldk9wdGlvbkNvbXBvbmVudCkgPT4gZGF0YS5WYWx1ZSA9PT0gb3B0aW9uLlZhbHVlXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqIGNhbmNlbCBzZWxlY3QgbXVsdGlwbGUgb3B0aW9uICovIC8vIEB0cy1pZ25vcmVcclxuICB1blNlbGVjdE11bHRpcGxlT3B0aW9uID0gKG9wdGlvbiwgJGV2ZW50PywgZW1pdENoYW5nZSA9IHRydWUpID0+IHtcclxuICAgIHRoaXMuX29wZXJhdGluZ011bHRpcGxlT3B0aW9uID0gb3B0aW9uO1xyXG4gICAgdGhpcy5fc2VsZWN0ZWRPcHRpb25zLmRlbGV0ZShvcHRpb24pO1xyXG4gICAgaWYgKGVtaXRDaGFuZ2UpIHtcclxuICAgICAgdGhpcy5lbWl0TXVsdGlwbGVPcHRpb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8g5a+5VGFn6L+b6KGM54m55q6K5aSE55CGXHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuX2lzVGFncyAmJlxyXG4gICAgICB0aGlzLl9vcHRpb25zLmluZGV4T2Yob3B0aW9uKSAhPT0gLTEgJiZcclxuICAgICAgdGhpcy5fdGFnc09wdGlvbnMuaW5kZXhPZihvcHRpb24pICE9PSAtMVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMucmVtb3ZlT3B0aW9uKG9wdGlvbik7XHJcbiAgICAgIHRoaXMuX3RhZ3NPcHRpb25zLnNwbGljZSh0aGlzLl90YWdzT3B0aW9ucy5pbmRleE9mKG9wdGlvbiksIDEpO1xyXG4gICAgfVxyXG4gICAgaWYgKCRldmVudCkge1xyXG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIC8qKiBzZWxlY3QgbXVsdGlwbGUgb3B0aW9uICovXHJcbiAgc2VsZWN0TXVsdGlwbGVPcHRpb24ob3B0aW9uOiBNZWZEZXZPcHRpb25Db21wb25lbnQsICRldmVudD86IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIC8qKiBpZiB0YWdzIGRvIHB1c2ggdG8gdGFnIG9wdGlvbiAqL1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9pc1RhZ3MgJiZcclxuICAgICAgdGhpcy5fb3B0aW9ucy5pbmRleE9mKG9wdGlvbikgPT09IC0xICYmXHJcbiAgICAgIHRoaXMuX3RhZ3NPcHRpb25zLmluZGV4T2Yob3B0aW9uKSA9PT0gLTFcclxuICAgICkge1xyXG4gICAgICB0aGlzLmFkZE9wdGlvbihvcHRpb24pO1xyXG4gICAgICB0aGlzLl90YWdzT3B0aW9ucy5wdXNoKG9wdGlvbik7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9vcGVyYXRpbmdNdWx0aXBsZU9wdGlvbiA9IG9wdGlvbjtcclxuICAgIGlmICh0aGlzLl9zZWxlY3RlZE9wdGlvbnMuc2l6ZSA8IHRoaXMuTWF4TXVsdGlwbGUpIHtcclxuICAgICAgdGhpcy5fc2VsZWN0ZWRPcHRpb25zLmFkZChvcHRpb24pO1xyXG4gICAgfVxyXG4gICAgdGhpcy5lbWl0TXVsdGlwbGVPcHRpb25zKCk7XHJcblxyXG4gICAgaWYgKCRldmVudCkge1xyXG4gICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIGVtaXQgbXVsdGlwbGUgb3B0aW9ucyAqL1xyXG4gIGVtaXRNdWx0aXBsZU9wdGlvbnMoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faXNNdWx0aUluaXQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgYXJyYXlPcHRpb25zID0gQXJyYXkuZnJvbSh0aGlzLl9zZWxlY3RlZE9wdGlvbnMpO1xyXG4gICAgdGhpcy5fdmFsdWUgPSBhcnJheU9wdGlvbnMubWFwKGl0ZW0gPT4gaXRlbS5WYWx1ZSk7XHJcbiAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKiB1cGRhdGUgc2VsZWN0ZWQgb3B0aW9uIHdoZW4gYWRkIHJlbW92ZSBvcHRpb24gZXRjICovXHJcbiAgdXBkYXRlU2VsZWN0ZWRPcHRpb24oXHJcbiAgICBjdXJyZW50TW9kZWxWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sXHJcbiAgICB0cmlnZ2VyQnlOZ01vZGVsOiBib29sZWFuID0gZmFsc2VcclxuICApOiB2b2lkIHtcclxuICAgIGlmIChjdXJyZW50TW9kZWxWYWx1ZSA9PSBudWxsKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLk11bHRpcGxlKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3B0aW9ucyA9IHRoaXMuX29wdGlvbnMuZmlsdGVyKGl0ZW0gPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtICE9IG51bGwgJiYgY3VycmVudE1vZGVsVmFsdWUuaW5kZXhPZihpdGVtLlZhbHVlKSAhPT0gLTE7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAoKHRoaXMuS2VlcFVuTGlzdE9wdGlvbnMgfHwgdGhpcy5UYWdzKSAmJiAhdHJpZ2dlckJ5TmdNb2RlbCkge1xyXG4gICAgICAgIGNvbnN0IF9zZWxlY3RlZE9wdGlvbnMgPSBBcnJheS5mcm9tKHRoaXMuX3NlbGVjdGVkT3B0aW9ucyk7XHJcbiAgICAgICAgc2VsZWN0ZWRPcHRpb25zLmZvckVhY2gob3B0aW9uID0+IHtcclxuICAgICAgICAgIGNvbnN0IF9leGlzdCA9IF9zZWxlY3RlZE9wdGlvbnMuc29tZShcclxuICAgICAgICAgICAgaXRlbSA9PiBpdGVtLl92YWx1ZSA9PSBvcHRpb24uX3ZhbHVlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgaWYgKCFfZXhpc3QpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRPcHRpb25zLmFkZChvcHRpb24pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuX3NlbGVjdGVkT3B0aW9ucyA9IG5ldyBTZXQoKTtcclxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xyXG4gICAgICAgICAgdGhpcy5fc2VsZWN0ZWRPcHRpb25zLmFkZChvcHRpb24pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBzZWxlY3RlZE9wdGlvbiA9IHRoaXMuX29wdGlvbnMuZmlsdGVyKGl0ZW0gPT4ge1xyXG4gICAgICAgIHJldHVybiBpdGVtICE9IG51bGwgJiYgaXRlbS5WYWx1ZSA9PSBjdXJyZW50TW9kZWxWYWx1ZTtcclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuY2hvb3NlT3B0aW9uKHNlbGVjdGVkT3B0aW9uWzBdKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZvcmNlVXBkYXRlU2VsZWN0ZWRPcHRpb24odmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICAvKiogdHJpZ2dlciBkaXJ0eSBjaGVjayAqLyAvLyBAdHMtaWdub3JlXHJcbiAgICBzZXRUaW1lb3V0KF8gPT4ge1xyXG4gICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkT3B0aW9uKHZhbHVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IFZhbHVlKCk6IHN0cmluZyB8IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICB9XHJcblxyXG4gIHNldCBWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pIHtcclxuICAgIHRoaXMuX3VwZGF0ZVZhbHVlKHZhbHVlKTtcclxuICB9XHJcblxyXG4gIGNsZWFyQWxsU2VsZWN0ZWRPcHRpb24oZW1pdENoYW5nZTogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIHRoaXMuX3NlbGVjdGVkT3B0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICB0aGlzLnVuU2VsZWN0TXVsdGlwbGVPcHRpb24oaXRlbSwgbnVsbCwgZW1pdENoYW5nZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGhhbmRsZUtleUVudGVyRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIC8qKiB3aGVuIGNvbXBvc2luZyBlbmQgKi9cclxuICAgIGlmICghdGhpcy5fY29tcG9zaW5nICYmIHRoaXMuX2lzT3Blbikge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJPcHRpb24oZmFsc2UpO1xyXG4gICAgICB0aGlzLmNsaWNrT3B0aW9uKHRoaXMuX2FjdGl2ZUZpbHRlck9wdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVLZXlCYWNrc3BhY2VFdmVudChldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9zZWFyY2hUZXh0ICYmICF0aGlzLl9jb21wb3NpbmcgJiYgdGhpcy5faXNNdWx0aXBsZSkge1xyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICBjb25zdCBsYXN0T3B0aW9uID0gQXJyYXkuZnJvbSh0aGlzLl9zZWxlY3RlZE9wdGlvbnMpLnBvcCgpO1xyXG4gICAgICB0aGlzLnVuU2VsZWN0TXVsdGlwbGVPcHRpb24obGFzdE9wdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBoYW5kbGVLZXlEb3duRXZlbnQoJGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5faXNPcGVuKSB7XHJcbiAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgIHRoaXMuX2FjdGl2ZUZpbHRlck9wdGlvbiA9IHRoaXMubmV4dE9wdGlvbihcclxuICAgICAgICB0aGlzLl9hY3RpdmVGaWx0ZXJPcHRpb24sXHJcbiAgICAgICAgdGhpcy5fZmlsdGVyT3B0aW9ucy5maWx0ZXIodyA9PiAhdy5EaXNhYmxlZClcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlS2V5VXBFdmVudCgkZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9pc09wZW4pIHtcclxuICAgICAgJGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgdGhpcy5fYWN0aXZlRmlsdGVyT3B0aW9uID0gdGhpcy5wcmVPcHRpb24oXHJcbiAgICAgICAgdGhpcy5fYWN0aXZlRmlsdGVyT3B0aW9uLFxyXG4gICAgICAgIHRoaXMuX2ZpbHRlck9wdGlvbnMuZmlsdGVyKHcgPT4gIXcuRGlzYWJsZWQpXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByZU9wdGlvbihcclxuICAgIG9wdGlvbjogTWVmRGV2T3B0aW9uQ29tcG9uZW50LFxyXG4gICAgb3B0aW9uczogTWVmRGV2T3B0aW9uQ29tcG9uZW50W11cclxuICApOiBNZWZEZXZPcHRpb25Db21wb25lbnQge1xyXG4gICAgcmV0dXJuIG9wdGlvbnNbb3B0aW9ucy5pbmRleE9mKG9wdGlvbikgLSAxXSB8fCBvcHRpb25zW29wdGlvbnMubGVuZ3RoIC0gMV07XHJcbiAgfVxyXG5cclxuICBuZXh0T3B0aW9uKFxyXG4gICAgb3B0aW9uOiBNZWZEZXZPcHRpb25Db21wb25lbnQsXHJcbiAgICBvcHRpb25zOiBNZWZEZXZPcHRpb25Db21wb25lbnRbXVxyXG4gICk6IE1lZkRldk9wdGlvbkNvbXBvbmVudCB7XHJcbiAgICByZXR1cm4gb3B0aW9uc1tvcHRpb25zLmluZGV4T2Yob3B0aW9uKSArIDFdIHx8IG9wdGlvbnNbMF07XHJcbiAgfVxyXG5cclxuICBjbGVhclNlYXJjaFRleHQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zZWFyY2hUZXh0ID0gXCJcIjtcclxuICAgIHRoaXMudXBkYXRlRmlsdGVyT3B0aW9uKCk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVGaWx0ZXJPcHRpb24odXBkYXRlQWN0aXZlRmlsdGVyOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuRmlsdGVyKSB7XHJcbiAgICAgIHRoaXMuX2ZpbHRlck9wdGlvbnMgPSBuZXcgT3B0aW9uUGlwZSgpLnRyYW5zZm9ybSh0aGlzLl9vcHRpb25zLCB7XHJcbiAgICAgICAgc2VhcmNoVGV4dDogdGhpcy5fc2VhcmNoVGV4dCxcclxuICAgICAgICB0YWdzOiB0aGlzLl9pc1RhZ3MsXHJcbiAgICAgICAgbm90Rm91bmRDb250ZW50OiB0aGlzLl9pc1RhZ3NcclxuICAgICAgICAgID8gdGhpcy5fc2VhcmNoVGV4dFxyXG4gICAgICAgICAgOiB0aGlzLl9ub3RGb3VuZENvbnRlbnQsXHJcbiAgICAgICAgZGlzYWJsZWQ6ICF0aGlzLl9pc1RhZ3MsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMuX2lzVGFncyA/IHRoaXMuX3NlYXJjaFRleHQgOiBcImRpc2FibGVkXCJcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9maWx0ZXJPcHRpb25zID0gdGhpcy5fb3B0aW9ucztcclxuICAgIH1cclxuXHJcbiAgICAvKiogVE9ETzogY2F1c2UgcHJlICYgbmV4dCBrZXkgc2VsZWN0aW9uIG5vdCB3b3JrICovXHJcbiAgICBpZiAodXBkYXRlQWN0aXZlRmlsdGVyICYmICF0aGlzLl9zZWxlY3RlZE9wdGlvbikge1xyXG4gICAgICB0aGlzLl9hY3RpdmVGaWx0ZXJPcHRpb24gPSB0aGlzLl9maWx0ZXJPcHRpb25zWzBdO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TZWFyY2hDaGFuZ2Uoc2VhcmNoVmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy5TZWFyY2hDaGFuZ2UuZW1pdChzZWFyY2hWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKFwiY2xpY2tcIiwgW1wiJGV2ZW50XCJdKVxyXG4gIG9uQ2xpY2soZTogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLk9wZW4gPSAhdGhpcy5PcGVuO1xyXG4gICAgICBpZiAodGhpcy5TaG93U2VhcmNoKSB7XHJcbiAgICAgICAgLyoqIHdhaXQgZm9yIHNlYXJjaCBkaXNwbGF5ICovIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBzZXRUaW1lb3V0KF8gPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBASG9zdExpc3RlbmVyKFwia2V5ZG93blwiLCBbXCIkZXZlbnRcIl0pXHJcbiAgb25LZXlEb3duKGU6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGNvbnN0IGtleUNvZGUgPSBlLmtleUNvZGU7XHJcbiAgICBpZiAoa2V5Q29kZSA9PT0gVEFCICYmIHRoaXMuT3Blbikge1xyXG4gICAgICB0aGlzLk9wZW4gPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKChrZXlDb2RlICE9PSBET1dOX0FSUk9XICYmIGtleUNvZGUgIT09IEVOVEVSKSB8fCB0aGlzLk9wZW4pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgaWYgKCF0aGlzLl9kaXNhYmxlZCkge1xyXG4gICAgICB0aGlzLk9wZW4gPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5TaG93U2VhcmNoKSB7XHJcbiAgICAgICAgLyoqIHdhaXQgZm9yIHNlYXJjaCBkaXNwbGF5ICovIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBzZXRUaW1lb3V0KF8gPT4ge1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hJbnB1dEVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5mb2N1cygpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjbG9zZURyb3BEb3duKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLk9wZW4pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vblRvdWNoZWQoKTtcclxuICAgIGlmICh0aGlzLk11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyLnJlbW92ZVN0eWxlKFxyXG4gICAgICAgIHRoaXMuc2VhcmNoSW5wdXRFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXHJcbiAgICAgICAgXCJ3aWR0aFwiXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmNsZWFyU2VhcmNoVGV4dCgpO1xyXG4gICAgdGhpcy5PcGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBzZXRDbGFzc01hcCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NsYXNzTGlzdC5mb3JFYWNoKF9jbGFzc05hbWUgPT4ge1xyXG4gICAgICB0aGlzLl9yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLl9lbCwgX2NsYXNzTmFtZSk7XHJcbiAgICB9KTsgLy8gQHRzLWlnbm9yZVxyXG4gICAgdGhpcy5fY2xhc3NMaXN0ID0gW1xyXG4gICAgICB0aGlzLl9wcmVmaXhDbHMsXHJcbiAgICAgIHRoaXMuX21vZGUgPT09IFwiY29tYm9ib3hcIiAmJiBgJHt0aGlzLl9wcmVmaXhDbHN9LWNvbWJvYm94YCxcclxuICAgICAgIXRoaXMuX2Rpc2FibGVkICYmIGAke3RoaXMuX3ByZWZpeENsc30tZW5hYmxlZGAsXHJcbiAgICAgIHRoaXMuX2Rpc2FibGVkICYmIGAke3RoaXMuX3ByZWZpeENsc30tZGlzYWJsZWRgLFxyXG4gICAgICB0aGlzLl9pc09wZW4gJiYgYCR7dGhpcy5fcHJlZml4Q2xzfS1vcGVuYCxcclxuICAgICAgdGhpcy5fc2hvd1NlYXJjaCAmJiBgJHt0aGlzLl9wcmVmaXhDbHN9LXNob3ctc2VhcmNoYCxcclxuICAgICAgdGhpcy5fc2l6ZSAmJiBgJHt0aGlzLl9wcmVmaXhDbHN9LSR7dGhpcy5fc2l6ZX1gXHJcbiAgICBdLmZpbHRlcihpdGVtID0+IHtcclxuICAgICAgcmV0dXJuICEhaXRlbTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fY2xhc3NMaXN0LmZvckVhY2goX2NsYXNzTmFtZSA9PiB7XHJcbiAgICAgIHRoaXMuX3JlbmRlcmVyLmFkZENsYXNzKHRoaXMuX2VsLCBfY2xhc3NOYW1lKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fc2VsZWN0aW9uQ2xhc3NNYXAgPSB7XHJcbiAgICAgIFt0aGlzLl9zZWxlY3Rpb25QcmVmaXhDbHNdOiB0cnVlLFxyXG4gICAgICBbYCR7dGhpcy5fc2VsZWN0aW9uUHJlZml4Q2xzfS0tc2luZ2xlYF06ICF0aGlzLk11bHRpcGxlLFxyXG4gICAgICBbYCR7dGhpcy5fc2VsZWN0aW9uUHJlZml4Q2xzfS0tbXVsdGlwbGVgXTogdGhpcy5NdWx0aXBsZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHNldERyb3BEb3duQ2xhc3NNYXAoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kcm9wRG93bkNsYXNzTWFwID0ge1xyXG4gICAgICBbdGhpcy5fZHJvcERvd25QcmVmaXhDbHNdOiB0cnVlLFxyXG4gICAgICBbXCJjb21wb25lbnQtc2VsZWN0XCJdOiB0aGlzLl9tb2RlID09PSBcImNvbWJvYm94XCIsXHJcbiAgICAgIFtgJHt0aGlzLl9kcm9wRG93blByZWZpeENsc30tLXNpbmdsZWBdOiAhdGhpcy5NdWx0aXBsZSxcclxuICAgICAgW2Ake3RoaXMuX2Ryb3BEb3duUHJlZml4Q2xzfS0tbXVsdGlwbGVgXTogdGhpcy5NdWx0aXBsZSxcclxuICAgICAgW2Ake3RoaXMuX2Ryb3BEb3duUHJlZml4Q2xzfS1wbGFjZW1lbnQtYm90dG9tTGVmdGBdOlxyXG4gICAgICAgIHRoaXMuX2Ryb3BEb3duUG9zaXRpb24gPT09IFwiYm90dG9tXCIsXHJcbiAgICAgIFtgJHt0aGlzLl9kcm9wRG93blByZWZpeENsc30tcGxhY2VtZW50LXRvcExlZnRgXTpcclxuICAgICAgICB0aGlzLl9kcm9wRG93blBvc2l0aW9uID09PSBcInRvcFwiXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgc2Nyb2xsVG9BY3RpdmUoKTogdm9pZCB7XHJcbiAgICAvKiogd2FpdCBmb3IgZHJvcGRvd24gZGlzcGxheSAqLyAvLyBAdHMtaWdub3JlXHJcbiAgICBzZXRUaW1lb3V0KF8gPT4ge1xyXG4gICAgICBpZiAodGhpcy5fYWN0aXZlRmlsdGVyT3B0aW9uICYmIHRoaXMuX2FjdGl2ZUZpbHRlck9wdGlvbi5WYWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fZmlsdGVyT3B0aW9ucy5maW5kSW5kZXgoXHJcbiAgICAgICAgICBvcHRpb24gPT4gb3B0aW9uLlZhbHVlID09PSB0aGlzLl9hY3RpdmVGaWx0ZXJPcHRpb24uVmFsdWVcclxuICAgICAgICApO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBzY3JvbGxQYW5lID0gdGhpcy5kcm9wZG93blVsLm5hdGl2ZUVsZW1lbnQuY2hpbGRyZW5bXHJcbiAgICAgICAgICAgIGluZGV4XHJcbiAgICAgICAgICBdIGFzIEhUTUxMSUVsZW1lbnQ7XHJcbiAgICAgICAgICAvLyBUT0RPOiBzY3JvbGxJbnRvVmlld0lmTmVlZGVkIGlzIG5vdCBhIHN0YW5kYXJkIEFQSSwgd2h5IGRvaW5nIHNvP1xyXG4gICAgICAgICAgLyogdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWFueSAqL1xyXG4gICAgICAgICAgKHNjcm9sbFBhbmUgYXMgYW55KS5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKGZhbHNlKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7fVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGZsdXNoQ29tcG9uZW50U3RhdGUoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZUZpbHRlck9wdGlvbigpO1xyXG4gICAgaWYgKCF0aGlzLk11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRPcHRpb24odGhpcy5fdmFsdWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuX3ZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZE9wdGlvbih0aGlzLl92YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIF9zZXRUcmlnZ2VyV2lkdGgoKTogdm9pZCB7XHJcbiAgICB0aGlzLl90cmlnZ2VyV2lkdGggPSB0aGlzLl9nZXRUcmlnZ2VyUmVjdCgpLndpZHRoO1xyXG4gICAgLyoqIHNob3VsZCByZW1vdmUgYWZ0ZXIgYWZ0ZXIgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvbWF0ZXJpYWwyL3B1bGwvODc2NSBtZXJnZWQgKiovXHJcbiAgICBpZiAodGhpcy5fY2RrT3ZlcmxheSAmJiB0aGlzLl9jZGtPdmVybGF5Lm92ZXJsYXlSZWYpIHtcclxuICAgICAgdGhpcy5fY2RrT3ZlcmxheS5vdmVybGF5UmVmLnVwZGF0ZVNpemUoe1xyXG4gICAgICAgIHdpZHRoOiB0aGlzLl90cmlnZ2VyV2lkdGhcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBfZ2V0VHJpZ2dlclJlY3QoKTogQ2xpZW50UmVjdCB7XHJcbiAgICByZXR1cm4gdGhpcy50cmlnZ2VyLm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgdGhpcy5fdXBkYXRlVmFsdWUodmFsdWUsIGZhbHNlKTtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10pID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xyXG4gIH1cclxuXHJcbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLkRpc2FibGVkID0gaXNEaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIGRyb3BEb3duU2Nyb2xsKHVsOiBIVE1MVUxpc3RFbGVtZW50KTogdm9pZCB7XHJcbiAgICBpZiAodWwgJiYgdWwuc2Nyb2xsSGVpZ2h0IC0gdWwuc2Nyb2xsVG9wID09PSB1bC5jbGllbnRIZWlnaHQpIHtcclxuICAgICAgdGhpcy5TY3JvbGxUb0JvdHRvbS5lbWl0KHRydWUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tEcm9wRG93blNjcm9sbCgpOiB2b2lkIHtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5kcm9wZG93blVsICYmXHJcbiAgICAgIHRoaXMuZHJvcGRvd25VbC5uYXRpdmVFbGVtZW50LnNjcm9sbEhlaWdodCA9PT1cclxuICAgICAgICB0aGlzLmRyb3Bkb3duVWwubmF0aXZlRWxlbWVudC5jbGllbnRIZWlnaHRcclxuICAgICkge1xyXG4gICAgICB0aGlzLlNjcm9sbFRvQm90dG9tLmVtaXQodHJ1ZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXHJcbiAgICBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgcHJpdmF0ZSBjRFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHRoaXMuX2VsID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3ZhbHVlICE9IG51bGwpIHtcclxuICAgICAgdGhpcy5mbHVzaENvbXBvbmVudFN0YXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMudXBkYXRlRmlsdGVyT3B0aW9uKCk7XHJcbiAgICB0aGlzLnNldENsYXNzTWFwKCk7XHJcbiAgICB0aGlzLnNldERyb3BEb3duQ2xhc3NNYXAoKTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9jYWNoZU9wdGlvbnMgIT09IHRoaXMuX29wdGlvbnMpIHtcclxuICAgICAgLyoqIHVwZGF0ZSBmaWx0ZXIgb3B0aW9uIGFmdGVyIGV2ZXJ5IGNvbnRlbnQgY2hlY2sgY3ljbGUgKi9cclxuICAgICAgdGhpcy51cGRhdGVGaWx0ZXJPcHRpb24oKTtcclxuICAgICAgdGhpcy5fY2FjaGVPcHRpb25zID0gdGhpcy5fb3B0aW9ucztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudXBkYXRlRmlsdGVyT3B0aW9uKGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5GaXJzdERlZmF1bHQpIHtcclxuICAgICAgaWYgKCF0aGlzLl92YWx1ZSAmJiB0aGlzLl9vcHRpb25zKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnNbMF0gIT09IHVuZGVmaW5lZCAmJiB0aGlzLl9vcHRpb25zWzBdLlZhbHVlKSB7XHJcbiAgICAgICAgICB0aGlzLmNob29zZU9wdGlvbih0aGlzLl9vcHRpb25zWzBdLCBmYWxzZSk7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLl9vcHRpb25zWzBdLlZhbHVlKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlVmFsdWUoXHJcbiAgICB2YWx1ZTogc3RyaW5nW10gfCBzdHJpbmcsXHJcbiAgICBlbWl0Q2hhbmdlOiBib29sZWFuID0gdHJ1ZVxyXG4gICk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3ZhbHVlID09PSB2YWx1ZSkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBpZiAodmFsdWUgPT0gbnVsbCAmJiB0aGlzLk11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuX3ZhbHVlID0gW107XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLk11bHRpcGxlKSB7XHJcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7IC8vIEB0cy1pZ25vcmVcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZE9wdGlvbiA9IG51bGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZE9wdGlvbih2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgIHRoaXMuY2xlYXJBbGxTZWxlY3RlZE9wdGlvbihlbWl0Q2hhbmdlKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZE9wdGlvbih2YWx1ZSwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2UgaWYgKHZhbHVlID09IG51bGwpIHtcclxuICAgICAgICB0aGlzLmNsZWFyQWxsU2VsZWN0ZWRPcHRpb24oZW1pdENoYW5nZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiB0YWJpbmRleD1cIjBcIiAjdHJpZ2dlciBjZGtPdmVybGF5T3JpZ2luICNvcmlnaW49XCJjZGtPdmVybGF5T3JpZ2luXCIgW25nQ2xhc3NdPVwiX3NlbGVjdGlvbkNsYXNzTWFwXCJcclxuICAoa2V5ZG93bi5FbnRlcik9XCJoYW5kbGVLZXlFbnRlckV2ZW50KCRldmVudClcIiAoa2V5ZG93bi5CYWNrc3BhY2UpPVwiaGFuZGxlS2V5QmFja3NwYWNlRXZlbnQoJGV2ZW50KVwiXHJcbiAgKGtleWRvd24uQXJyb3dVcCk9XCJoYW5kbGVLZXlVcEV2ZW50KCRldmVudClcIiAoa2V5ZG93bi5BcnJvd0Rvd24pPVwiaGFuZGxlS2V5RG93bkV2ZW50KCRldmVudClcIj5cclxuICA8ZGl2IGNsYXNzPVwicGctc2VsZWN0LXNlbGVjdGlvbl9fcmVuZGVyZWRcIiAqbmdJZj1cIiFTaG93U2VhcmNoXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGctc2VsZWN0LXNlbGVjdGlvbl9fcGxhY2Vob2xkZXJcIj5cclxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIiFfc2VsZWN0ZWRPcHRpb25cIj5cclxuICAgICAgICB7eyBQbGFjZUhvbGRlciB9fVxyXG4gICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwicGctc2VsZWN0LXNlbGVjdGlvbi1zZWxlY3RlZC12YWx1ZVwiPlxyXG4gICAgICB7eyBfc2VsZWN0ZWRPcHRpb24/LkxhYmVsIH19XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwicGctc2VsZWN0LXNlbGVjdGlvbl9fcmVuZGVyZWRcIiAqbmdJZj1cIlNob3dTZWFyY2hcIj5cclxuICAgIDxkaXYgW2hpZGRlbl09XCJfc2VhcmNoVGV4dHx8KCFPcGVuJiZfc2VsZWN0ZWRPcHRpb24pfHxfc2VsZWN0ZWRPcHRpb25zLnNpemVcIlxyXG4gICAgICBjbGFzcz1cInBnLXNlbGVjdC1zZWxlY3Rpb25fX3BsYWNlaG9sZGVyXCI+XHJcbiAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIoIV9jb21wb3NpbmcpJiZfc2VsZWN0ZWRPcHRpb25cIj5cclxuICAgICAgICB7eyBfc2VsZWN0ZWRPcHRpb24uTGFiZWwgfX1cclxuICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgPG5nLXRlbXBsYXRlIFtuZ0lmXT1cIighX2NvbXBvc2luZykmJighX3NlbGVjdGVkT3B0aW9uKVwiPlxyXG4gICAgICAgIHt7IFBsYWNlSG9sZGVyIH19XHJcbiAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICA8L2Rpdj5cclxuICAgIDx1bCAqbmdJZj1cIk11bHRpcGxlXCI+XHJcbiAgICAgIDxsaSAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIF9zZWxlY3RlZE9wdGlvbnNcIiBbQHRhZ0FuaW1hdGlvbl0gW2F0dHIudGl0bGVdPVwib3B0aW9uPy5MYWJlbCB8fCBvcHRpb24/LlZhbHVlXCJcclxuICAgICAgICBjbGFzcz1cInBnLXNlbGVjdC1zZWxlY3Rpb25fX2Nob2ljZVwiIHN0eWxlPVwiLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcIj5cclxuICAgICAgICA8c3BhbiBjbGFzcz1cInBnLXNlbGVjdC1zZWxlY3Rpb25fX2Nob2ljZV9fcmVtb3ZlXCIgKGNsaWNrKT1cInVuU2VsZWN0TXVsdGlwbGVPcHRpb24ob3B0aW9uLCRldmVudClcIj48L3NwYW4+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInBnLXNlbGVjdC1zZWxlY3Rpb25fX2Nob2ljZV9fY29udGVudFwiPnt7IG9wdGlvbj8uTGFiZWwgfX08L2Rpdj5cclxuICAgICAgPC9saT5cclxuICAgICAgPGxpIGNsYXNzPVwicGctc2VsZWN0LXNlYXJjaCBwZy1zZWxlY3Qtc2VhcmNoLS1pbmxpbmVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicGctc2VsZWN0LXNlYXJjaF9fZmllbGRfX3dyYXBcIj5cclxuICAgICAgICAgIDxpbnB1dCBjbGFzcz1cInBnLXNlbGVjdC1zZWFyY2hfX2ZpZWxkXCIgKGNvbXBvc2l0aW9uc3RhcnQpPVwiY29tcG9zaXRpb25TdGFydCgpXCJcclxuICAgICAgICAgICAgKGNvbXBvc2l0aW9uZW5kKT1cImNvbXBvc2l0aW9uRW5kKCk7dXBkYXRlV2lkdGgoc2VhcmNoSW5wdXQsX3NlYXJjaFRleHQpO1wiIFsobmdNb2RlbCldPVwiX3NlYXJjaFRleHRcIlxyXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJ1cGRhdGVGaWx0ZXJPcHRpb24oKTtvblNlYXJjaENoYW5nZSgkZXZlbnQpO1wiXHJcbiAgICAgICAgICAgIChrZXlkb3duKT1cInVwZGF0ZVdpZHRoKHNlYXJjaElucHV0LF9zZWFyY2hUZXh0KVwiIChpbnB1dCk9XCJ1cGRhdGVXaWR0aChzZWFyY2hJbnB1dCxfc2VhcmNoVGV4dClcIlxyXG4gICAgICAgICAgICAoYmx1cik9XCJvblRvdWNoZWQoKVwiICNzZWFyY2hJbnB1dD5cclxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGctc2VsZWN0LXNlYXJjaF9fZmllbGRfX21pcnJvclwiPjwvc3Bhbj48L2Rpdj5cclxuICAgICAgPC9saT5cclxuICAgIDwvdWw+XHJcbiAgICA8ZGl2ICpuZ0lmPVwiIU11bHRpcGxlXCIgY2xhc3M9XCJwZy1zZWxlY3Qtc2VsZWN0aW9uLXNlbGVjdGVkLXZhbHVlXCIgW2hpZGRlbl09XCIhKF9zZWxlY3RlZE9wdGlvbj8uTGFiZWwpfHxPcGVuXCI+XHJcbiAgICAgIHt7IF9zZWxlY3RlZE9wdGlvbj8uTGFiZWwgfX1cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiAqbmdJZj1cIiFNdWx0aXBsZVwiIFtoaWRkZW5dPVwiIU9wZW5cIiBjbGFzcz1cInBnLXNlbGVjdC1zZWFyY2ggcGctc2VsZWN0LXNlYXJjaC0taW5saW5lXCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwZy1zZWxlY3Qtc2VhcmNoX19maWVsZF9fd3JhcFwiPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cInBnLXNlbGVjdC1zZWFyY2hfX2ZpZWxkXCIgKGJsdXIpPVwib25Ub3VjaGVkKClcIiAoY29tcG9zaXRpb25zdGFydCk9XCJjb21wb3NpdGlvblN0YXJ0KClcIlxyXG4gICAgICAgICAgKGNvbXBvc2l0aW9uZW5kKT1cImNvbXBvc2l0aW9uRW5kKClcIiBbKG5nTW9kZWwpXT1cIl9zZWFyY2hUZXh0XCJcclxuICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInVwZGF0ZUZpbHRlck9wdGlvbigpO29uU2VhcmNoQ2hhbmdlKCRldmVudCk7XCIgI3NlYXJjaElucHV0PlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwicGctc2VsZWN0LXNlYXJjaF9fZmllbGRfX21pcnJvclwiPjwvc3Bhbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuICA8c3BhbiAoY2xpY2spPVwib25Ub3VjaGVkKCk7Y2xlYXJTZWxlY3QoJGV2ZW50KVwiIGNsYXNzPVwicGctc2VsZWN0LXNlbGVjdGlvbl9fY2xlYXJcIiBzdHlsZT1cIi13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XCJcclxuICAgICpuZ0lmPVwiX3NlbGVjdGVkT3B0aW9uPy5MYWJlbCYmQWxsb3dDbGVhciYmIU11bHRpcGxlXCI+XHJcbiAgPC9zcGFuPlxyXG4gIDxzcGFuIGNsYXNzPVwicGctc2VsZWN0LWFycm93XCI+PGI+PC9iPjwvc3Bhbj5cclxuPC9kaXY+XHJcbjxuZy10ZW1wbGF0ZSBjZGtDb25uZWN0ZWRPdmVybGF5IGNka0Nvbm5lY3RlZE92ZXJsYXlIYXNCYWNrZHJvcCBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJvcmlnaW5cIlxyXG4gIChiYWNrZHJvcENsaWNrKT1cImNsb3NlRHJvcERvd24oKVwiIChkZXRhY2gpPVwiY2xvc2VEcm9wRG93bigpO1wiIChwb3NpdGlvbkNoYW5nZSk9XCJvblBvc2l0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gIFtjZGtDb25uZWN0ZWRPdmVybGF5V2lkdGhdPVwiX3RyaWdnZXJXaWR0aFwiIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJfaXNPcGVuXCI+XHJcbiAgPGRpdiBbbmdDbGFzc109XCJfZHJvcERvd25DbGFzc01hcFwiIFtAZHJvcERvd25BbmltYXRpb25dPVwiX2Ryb3BEb3duUG9zaXRpb25cIj5cclxuICAgIDxkaXYgc3R5bGU9XCJvdmVyZmxvdzogYXV0bztcIj5cclxuICAgICAgPHVsIGNsYXNzPVwicGctc2VsZWN0LWRyb3Bkb3duLW1lbnUgcGctc2VsZWN0LWRyb3Bkb3duLW1lbnUtdmVydGljYWwgcGctc2VsZWN0LWRyb3Bkb3duLW1lbnUtcm9vdFwiICNkcm9wZG93blVsXHJcbiAgICAgICAgKHNjcm9sbCk9XCJkcm9wRG93blNjcm9sbChkcm9wZG93blVsKVwiPlxyXG4gICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIF9maWx0ZXJPcHRpb25zXCIgW2NsYXNzLnBnLXNlbGVjdC1kcm9wZG93bi1tZW51LWl0ZW0tZGlzYWJsZWRdPVwib3B0aW9uLkRpc2FibGVkXCJcclxuICAgICAgICAgIFtjbGFzcy5wZy1zZWxlY3QtZHJvcGRvd24tbWVudS1pdGVtLWFjdGl2ZV09XCJvcHRpb24uVmFsdWUgPT0gX2FjdGl2ZUZpbHRlck9wdGlvbj8uVmFsdWVcIlxyXG4gICAgICAgICAgW2NsYXNzLnBnLXNlbGVjdC1kcm9wZG93bi1tZW51LWl0ZW0tc2VsZWN0ZWRdPVwiKG9wdGlvbi5WYWx1ZT09KF9zZWxlY3RlZE9wdGlvbj8uVmFsdWUpKXx8KGlzSW5TZXQoX3NlbGVjdGVkT3B0aW9ucyxvcHRpb24pKVwiXHJcbiAgICAgICAgICBjbGFzcz1cInBnLXNlbGVjdC1kcm9wZG93bi1tZW51LWl0ZW1cIiAoY2xpY2spPVwiY2xpY2tPcHRpb24ob3B0aW9uLCRldmVudClcIj5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSAqbmdJZj1cIm9wdGlvbi5PcHRpb25UZW1wbGF0ZVwiIFtuZ1RlbXBsYXRlT3V0bGV0XT1cIm9wdGlvbi5PcHRpb25UZW1wbGF0ZVwiPlxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdJZl09XCIhb3B0aW9uLk9wdGlvblRlbXBsYXRlXCI+XHJcbiAgICAgICAgICAgIHt7IG9wdGlvbi5MYWJlbCB9fVxyXG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICA8L3VsPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+Il19