@simpleangularcontrols/sac-common 10.0.0-rc.11 → 10.0.0-rc.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/simpleangularcontrols-sac-common.umd.js +1425 -1088
- package/bundles/simpleangularcontrols-sac-common.umd.js.map +1 -1
- package/bundles/simpleangularcontrols-sac-common.umd.min.js +1 -1
- package/bundles/simpleangularcontrols-sac-common.umd.min.js.map +1 -1
- package/common/basedatetimecontrol.d.ts +99 -13
- package/common/basemodelcontrol.d.ts +33 -29
- package/controls/checkbox/radiobutton.d.ts +61 -26
- package/controls/contextmenu/contextmenu.d.ts +26 -19
- package/controls/contextmenu/contextmenu.interface.d.ts +3 -0
- package/controls/contextmenu/contextmenuitem.d.ts +5 -0
- package/controls/contextmenu/contextmenuitembutton.d.ts +21 -20
- package/controls/datetime/date.d.ts +28 -27
- package/controls/datetime/datetime.d.ts +27 -27
- package/controls/datetime/time.d.ts +26 -26
- package/controls/dialog/dialog.d.ts +31 -43
- package/controls/layout/formlayout.d.ts +4 -0
- package/controls/list/buildvaluestring.d.ts +6 -0
- package/controls/list/dropdown.d.ts +9 -51
- package/controls/list/dropdownoptions.d.ts +38 -0
- package/controls/list/dropdownoptions.ngfactory.d.ts +1 -0
- package/controls/static/formcontainer.d.ts +11 -3
- package/controls/tooltip/tooltip.d.ts +33 -51
- package/controls/treeview/treeview.d.ts +87 -121
- package/esm2015/common/basedatetimecontrol.js +178 -30
- package/esm2015/common/basemodelcontrol.js +71 -56
- package/esm2015/controls/checkbox/radiobutton.js +94 -45
- package/esm2015/controls/contextmenu/contextmenu.interface.js +1 -0
- package/esm2015/controls/contextmenu/contextmenu.interface.ngfactory.js +7 -0
- package/esm2015/controls/contextmenu/contextmenu.js +22 -23
- package/esm2015/controls/contextmenu/contextmenuitem.js +13 -2
- package/esm2015/controls/contextmenu/contextmenuitembutton.js +34 -25
- package/esm2015/controls/datetime/date.js +43 -41
- package/esm2015/controls/datetime/datetime.js +42 -41
- package/esm2015/controls/datetime/time.js +42 -41
- package/esm2015/controls/dialog/dialog.js +41 -83
- package/esm2015/controls/layout/formlayout.js +7 -6
- package/esm2015/controls/list/buildvaluestring.js +18 -0
- package/esm2015/controls/{treeview/ngtreeitemaction.ngfactory.js → list/buildvaluestring.ngfactory.js} +1 -1
- package/esm2015/controls/list/dropdown.js +16 -114
- package/esm2015/controls/list/dropdownoptions.js +72 -0
- package/esm2015/controls/{treeview/treeviewchild.ngfactory.js → list/dropdownoptions.ngfactory.js} +1 -1
- package/esm2015/controls/static/formcontainer.js +16 -6
- package/esm2015/controls/tooltip/tooltip.js +60 -250
- package/esm2015/controls/treeview/treeview.js +232 -247
- package/esm2015/interfaces/ISacConfigurationService.js +1 -1
- package/esm2015/interfaces/ISacIconService.js +1 -1
- package/esm2015/interfaces/treeviewaction.interface.js +1 -0
- package/esm2015/interfaces/treeviewaction.interface.ngfactory.js +7 -0
- package/esm2015/public_api.js +6 -6
- package/esm2015/services/sac-configuration.service.js +7 -5
- package/esm2015/services/sac-icon.service.js +25 -1
- package/esm2015/utilities/enums.js +5 -1
- package/esm2015/utilities/popuphelper.js +343 -0
- package/esm2015/utilities/popuphelper.ngfactory.js +7 -0
- package/esm2015/validation/equals.validator.js +14 -0
- package/esm2015/validation/equals.validator.ngfactory.js +7 -0
- package/esm2015/validation/notequals.validator.js +14 -0
- package/esm2015/validation/notequals.validator.ngfactory.js +7 -0
- package/esm2015/validation/validation.class.js +30 -6
- package/fesm2015/simpleangularcontrols-sac-common.js +1398 -1075
- package/fesm2015/simpleangularcontrols-sac-common.js.map +1 -1
- package/interfaces/ISacConfigurationService.d.ts +4 -0
- package/interfaces/ISacIconService.d.ts +16 -0
- package/interfaces/treeviewaction.interface.d.ts +4 -0
- package/interfaces/treeviewaction.interface.ngfactory.d.ts +1 -0
- package/package.json +1 -1
- package/public_api.d.ts +5 -5
- package/services/sac-configuration.service.d.ts +8 -0
- package/services/sac-icon.service.d.ts +33 -1
- package/simpleangularcontrols-sac-common-10.0.0-rc.13.tgz +0 -0
- package/simpleangularcontrols-sac-common.metadata.json +1 -1
- package/utilities/enums.d.ts +3 -1
- package/utilities/popuphelper.d.ts +83 -0
- package/utilities/popuphelper.ngfactory.d.ts +1 -0
- package/validation/equals.validator.d.ts +2 -0
- package/validation/equals.validator.ngfactory.d.ts +1 -0
- package/validation/notequals.validator.d.ts +2 -0
- package/validation/notequals.validator.ngfactory.d.ts +1 -0
- package/validation/validation.class.d.ts +19 -0
- package/controls/treeview/ngtreeitemaction.d.ts +0 -40
- package/controls/treeview/treeviewchild.d.ts +0 -12
- package/esm2015/controls/treeview/ngtreeitemaction.js +0 -60
- package/esm2015/controls/treeview/treeviewchild.js +0 -18
- package/simpleangularcontrols-sac-common-10.0.0-rc.11.tgz +0 -0
- /package/controls/{treeview/ngtreeitemaction.ngfactory.d.ts → contextmenu/contextmenu.interface.ngfactory.d.ts} +0 -0
- /package/controls/{treeview/treeviewchild.ngfactory.d.ts → list/buildvaluestring.ngfactory.d.ts} +0 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
import { Directive, Host, Injector, Input, } from '@angular/core';
|
|
2
|
-
import { FormControlName, FormGroupDirective, NgControl, } from '@angular/forms';
|
|
3
|
-
import { Observable } from 'rxjs';
|
|
4
1
|
import { SacFormLayoutCommon } from '../controls/layout/formlayout';
|
|
5
2
|
import { ControlHeight } from '../enums/ControlHeight';
|
|
6
3
|
import { SACICON_SERVICE, SACVALIDATIONKEY_SERVICE, SacDefaultIconService, SacDefaultValidationKeyService, } from '../services';
|
|
7
|
-
import { SACCONFIGURATION_SERVICE, SacDefaultConfigurationService
|
|
8
|
-
import { SACLOCALISATION_SERVICE, SacDefaultLocalisationService
|
|
4
|
+
import { SACCONFIGURATION_SERVICE, SacDefaultConfigurationService } from '../services/sac-configuration.service';
|
|
5
|
+
import { SACLOCALISATION_SERVICE, SacDefaultLocalisationService } from '../services/sac-localisation.service';
|
|
9
6
|
import { convertToBoolean } from '../utilities/convertion';
|
|
10
7
|
import { createGuid } from '../utilities/guid';
|
|
8
|
+
import { Directive, Host, Injector, Input } from '@angular/core';
|
|
9
|
+
import { FormControlName, FormGroupDirective, NgControl, } from '@angular/forms';
|
|
10
|
+
import { Observable } from 'rxjs';
|
|
11
11
|
/**
|
|
12
12
|
* Abstract Klasse für SacBaseModelControl. Implements ControlValueAccessor, Validator, OnInit
|
|
13
13
|
*/
|
|
@@ -26,6 +26,9 @@ export class SacBaseModelControl {
|
|
|
26
26
|
* Inline Errors für das Control
|
|
27
27
|
*/
|
|
28
28
|
this._inlineerrorenabled = null;
|
|
29
|
+
/**
|
|
30
|
+
* Label Text
|
|
31
|
+
*/
|
|
29
32
|
this._label = '';
|
|
30
33
|
/**
|
|
31
34
|
* Boolean Property dirty; default Wert - false
|
|
@@ -47,6 +50,10 @@ export class SacBaseModelControl {
|
|
|
47
50
|
* Form layout instance if exists
|
|
48
51
|
*/
|
|
49
52
|
this.formlayout = null;
|
|
53
|
+
/**
|
|
54
|
+
* ControlHeight enum for use in HTML markup
|
|
55
|
+
*/
|
|
56
|
+
this.ControlHeight = ControlHeight;
|
|
50
57
|
/**
|
|
51
58
|
* Defines the standard height of the components
|
|
52
59
|
*/
|
|
@@ -99,10 +106,6 @@ export class SacBaseModelControl {
|
|
|
99
106
|
* Name des Controls
|
|
100
107
|
*/
|
|
101
108
|
this.name = createGuid();
|
|
102
|
-
/**
|
|
103
|
-
* ControlHeight enum for use in HTML markup
|
|
104
|
-
*/
|
|
105
|
-
this.ControlHeight = ControlHeight;
|
|
106
109
|
/**
|
|
107
110
|
* Leere Implementation von "propagateChange". Muss gemacht werden, damit kein Fehler entsteht
|
|
108
111
|
*/
|
|
@@ -111,6 +114,10 @@ export class SacBaseModelControl {
|
|
|
111
114
|
* Leere Implementation von "propagateTouch". Muss gemacht werden, damit kein Fehler entsteht
|
|
112
115
|
*/
|
|
113
116
|
this.propagateTouch = () => { };
|
|
117
|
+
/**
|
|
118
|
+
* Detach label text and tooltip from each other in Label so that label and tooltip can be aligned differently. This is in Bootstrap 3 not supported!
|
|
119
|
+
*/
|
|
120
|
+
this.splitlabelandhelptext = null;
|
|
114
121
|
this.formlayout = formlayout;
|
|
115
122
|
this.validationKeyService = injector.get(SACVALIDATIONKEY_SERVICE, new SacDefaultValidationKeyService());
|
|
116
123
|
this.lngResourceService = injector.get(SACLOCALISATION_SERVICE, new SacDefaultLocalisationService(this.validationKeyService));
|
|
@@ -119,35 +126,6 @@ export class SacBaseModelControl {
|
|
|
119
126
|
}
|
|
120
127
|
// #endregion Constructors
|
|
121
128
|
// #region Public Getters And Setters
|
|
122
|
-
/**
|
|
123
|
-
* Aktiviert oder Deaktiviert die Inline Errors für das Control
|
|
124
|
-
*/
|
|
125
|
-
set inlineerrorenabled(value) {
|
|
126
|
-
if (value === null || value === undefined) {
|
|
127
|
-
this._inlineerrorenabled = null;
|
|
128
|
-
}
|
|
129
|
-
else {
|
|
130
|
-
this._inlineerrorenabled = convertToBoolean(value);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Definiert den Label Text
|
|
135
|
-
*/
|
|
136
|
-
set label(v) {
|
|
137
|
-
this._label = v;
|
|
138
|
-
this.UpdateLabelToControl();
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Set Methode für NgModel Binding in Html Markup
|
|
142
|
-
* Input wird benötigt, damit der Wert auch über das Markup gesetzt werden kann.
|
|
143
|
-
*/
|
|
144
|
-
set value(v) {
|
|
145
|
-
if (this.disabled) {
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
this._value = this.ConvertInputValue(v);
|
|
149
|
-
this.propagateChange(this._value);
|
|
150
|
-
}
|
|
151
129
|
/**
|
|
152
130
|
* Get Icon for Helptext Tooltip
|
|
153
131
|
*/
|
|
@@ -158,7 +136,7 @@ export class SacBaseModelControl {
|
|
|
158
136
|
* Methode ergibt Boolean Wert für dirty
|
|
159
137
|
*/
|
|
160
138
|
get dirty() {
|
|
161
|
-
if (this.ngControl !== null) {
|
|
139
|
+
if (this.ngControl !== null && this.ngControl !== undefined) {
|
|
162
140
|
this._dirty = this.ngControl.dirty;
|
|
163
141
|
}
|
|
164
142
|
return this._dirty;
|
|
@@ -169,13 +147,22 @@ export class SacBaseModelControl {
|
|
|
169
147
|
get inlineerrorenabled() {
|
|
170
148
|
return this._inlineerrorenabled;
|
|
171
149
|
}
|
|
150
|
+
/**
|
|
151
|
+
* Aktiviert oder Deaktiviert die Inline Errors für das Control
|
|
152
|
+
*/
|
|
153
|
+
set inlineerrorenabled(value) {
|
|
154
|
+
if (value === null || value === undefined) {
|
|
155
|
+
this._inlineerrorenabled = null;
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
this._inlineerrorenabled = convertToBoolean(value);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
172
161
|
/**
|
|
173
162
|
* Methode ergibt boolean Wert wenn Form invalid oder nicht invalid ist
|
|
174
163
|
*/
|
|
175
164
|
get invalid() {
|
|
176
|
-
return
|
|
177
|
-
this.ngControl !== null &&
|
|
178
|
-
this.ngControl.invalid);
|
|
165
|
+
return this.ngControl !== undefined && this.ngControl !== null && this.ngControl.invalid;
|
|
179
166
|
}
|
|
180
167
|
/**
|
|
181
168
|
* Definiert ob das Control disabled ist
|
|
@@ -191,8 +178,7 @@ export class SacBaseModelControl {
|
|
|
191
178
|
if (this._inlineerrorenabled !== null) {
|
|
192
179
|
return this._inlineerrorenabled;
|
|
193
180
|
}
|
|
194
|
-
if (this.formlayout !== null &&
|
|
195
|
-
this.formlayout.IsInlineErrorEnabled !== null) {
|
|
181
|
+
if (this.formlayout !== null && this.formlayout.IsInlineErrorEnabled !== null) {
|
|
196
182
|
return (_a = this.formlayout) === null || _a === void 0 ? void 0 : _a.IsInlineErrorEnabled;
|
|
197
183
|
}
|
|
198
184
|
if (this.configurationService.InlineErrorEnabled !== null) {
|
|
@@ -206,6 +192,13 @@ export class SacBaseModelControl {
|
|
|
206
192
|
get label() {
|
|
207
193
|
return this._label;
|
|
208
194
|
}
|
|
195
|
+
/**
|
|
196
|
+
* Definiert den Label Text
|
|
197
|
+
*/
|
|
198
|
+
set label(v) {
|
|
199
|
+
this._label = v;
|
|
200
|
+
this.UpdateLabelToControl();
|
|
201
|
+
}
|
|
209
202
|
/**
|
|
210
203
|
* returns an object with all label sizes. These values can then be transferred to corresponding CSS classes using a pipe
|
|
211
204
|
*/
|
|
@@ -223,7 +216,7 @@ export class SacBaseModelControl {
|
|
|
223
216
|
* Methode ergibt Boolean Wert für touched
|
|
224
217
|
*/
|
|
225
218
|
get touched() {
|
|
226
|
-
if (this.ngControl !== null) {
|
|
219
|
+
if (this.ngControl !== null && this.ngControl !== undefined) {
|
|
227
220
|
this._touched = this.ngControl.touched;
|
|
228
221
|
}
|
|
229
222
|
return this._touched;
|
|
@@ -234,6 +227,17 @@ export class SacBaseModelControl {
|
|
|
234
227
|
get value() {
|
|
235
228
|
return this._value;
|
|
236
229
|
}
|
|
230
|
+
/**
|
|
231
|
+
* Set Methode für NgModel Binding in Html Markup
|
|
232
|
+
* Input wird benötigt, damit der Wert auch über das Markup gesetzt werden kann.
|
|
233
|
+
*/
|
|
234
|
+
set value(v) {
|
|
235
|
+
if (this.disabled) {
|
|
236
|
+
return;
|
|
237
|
+
}
|
|
238
|
+
this._value = this.ConvertInputValue(v);
|
|
239
|
+
this.propagateChange(this._value);
|
|
240
|
+
}
|
|
237
241
|
// #endregion Public Getters And Setters
|
|
238
242
|
// #region Public Methods
|
|
239
243
|
/**
|
|
@@ -272,24 +276,21 @@ export class SacBaseModelControl {
|
|
|
272
276
|
return this.lngResourceService.GetString(errorItem.errorMessageKey, parameters);
|
|
273
277
|
}
|
|
274
278
|
/**
|
|
275
|
-
*
|
|
279
|
+
* Init Event
|
|
276
280
|
*/
|
|
277
|
-
|
|
281
|
+
ngOnInit() {
|
|
278
282
|
// receive form via formcontrolname or formcontrol instance
|
|
279
283
|
const formControl = this.injector.get(NgControl, null);
|
|
280
284
|
if (formControl instanceof FormControlName) {
|
|
281
285
|
const form = this.injector.get(FormGroupDirective, null);
|
|
282
286
|
this.ngControl = form.getControl(formControl);
|
|
283
287
|
}
|
|
284
|
-
else
|
|
285
|
-
|
|
288
|
+
else {
|
|
289
|
+
if (formControl) {
|
|
290
|
+
this.ngControl = formControl.control;
|
|
291
|
+
}
|
|
286
292
|
}
|
|
287
293
|
this.UpdateLabelToControl();
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Init Event
|
|
291
|
-
*/
|
|
292
|
-
ngOnInit() {
|
|
293
294
|
// set label sizes from formlayout directive
|
|
294
295
|
this.setLabelSizes();
|
|
295
296
|
// set component heigth from fromlayout directive
|
|
@@ -298,6 +299,8 @@ export class SacBaseModelControl {
|
|
|
298
299
|
this.setIsAdaptiveLabel();
|
|
299
300
|
// set method to display helptext
|
|
300
301
|
this.setHelpTextMode();
|
|
302
|
+
// set SplitMode for Labels
|
|
303
|
+
this.setLabelSplitMode();
|
|
301
304
|
this.OnClassInit();
|
|
302
305
|
}
|
|
303
306
|
/**
|
|
@@ -351,7 +354,7 @@ export class SacBaseModelControl {
|
|
|
351
354
|
writeValue(value) {
|
|
352
355
|
this._value = value;
|
|
353
356
|
}
|
|
354
|
-
// #endregion Public
|
|
357
|
+
// #endregion Public Methods
|
|
355
358
|
// #region Protected Methods
|
|
356
359
|
/**
|
|
357
360
|
* Method can Overwriten in Parent Classes
|
|
@@ -490,6 +493,17 @@ export class SacBaseModelControl {
|
|
|
490
493
|
}
|
|
491
494
|
}
|
|
492
495
|
}
|
|
496
|
+
setLabelSplitMode() {
|
|
497
|
+
var _a;
|
|
498
|
+
if (!this.splitlabelandhelptext) {
|
|
499
|
+
if ((_a = this.formlayout) === null || _a === void 0 ? void 0 : _a.splitlabelandhelptext) {
|
|
500
|
+
this.splitlabelandhelptext = this.formlayout.splitlabelandhelptext;
|
|
501
|
+
}
|
|
502
|
+
else {
|
|
503
|
+
this.splitlabelandhelptext = this.configurationService.SplitLabelAndHelptext;
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
}
|
|
493
507
|
}
|
|
494
508
|
SacBaseModelControl.decorators = [
|
|
495
509
|
{ type: Directive }
|
|
@@ -513,8 +527,9 @@ SacBaseModelControl.propDecorators = {
|
|
|
513
527
|
labelSizeXs: [{ type: Input }],
|
|
514
528
|
labelSizeXxl: [{ type: Input }],
|
|
515
529
|
name: [{ type: Input }],
|
|
530
|
+
splitlabelandhelptext: [{ type: Input }],
|
|
516
531
|
inlineerrorenabled: [{ type: Input }],
|
|
517
532
|
label: [{ type: Input }],
|
|
518
533
|
value: [{ type: Input }]
|
|
519
534
|
};
|
|
520
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZW1vZGVsY29udHJvbC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWt0ZS9zaW1wbGVhbmd1bGFyY29udHJvbHMtbmcxMC9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJjb21tb24vYmFzZW1vZGVsY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsU0FBUyxFQUNULElBQUksRUFDSixRQUFRLEVBQ1IsS0FBSyxHQUVOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFJTCxlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLFNBQVMsR0FHVixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDbEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDcEUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBT3ZELE9BQU8sRUFDTCxlQUFlLEVBQ2Ysd0JBQXdCLEVBQ3hCLHFCQUFxQixFQUNyQiw4QkFBOEIsR0FDL0IsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLHdCQUF3QixFQUN4Qiw4QkFBOEIsR0FDL0IsTUFBTSx1Q0FBdUMsQ0FBQztBQUMvQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLDZCQUE2QixHQUM5QixNQUFNLHNDQUFzQyxDQUFDO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUvQzs7R0FFRztBQUVILE1BQU0sT0FBZ0IsbUJBQW1CO0lBdUl2Qyx3QkFBd0I7SUFFeEIsdUJBQXVCO0lBRXZCOzs7O09BSUc7SUFDSCxZQUNVLFVBQStCLEVBQ3RCLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUEvSXJDLHFC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QU07Z0JBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDO2FBQzFEO1NBQ0Y7UUFFRCx1QkFBdUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDckIsVUFBSSxJQUFJLENBQUMsVUFBVSwwQ0FBRSxXQUFXLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7YUFDaEQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsV0FBVyxDQUFDO2FBQzFEO1NBQ0Y7UUFFRCw2QkFBNkI7UUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDdEIsVUFBSSxJQUFJLENBQUMsVUFBVSwwQ0FBRSxZQUFZLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7YUFDbEQ7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxDQUFDO2FBQzVEO1NBQ0Y7SUFDSCxDQUFDOzs7WUFqbUJGLFNBQVM7OztZQTVCRCxtQkFBbUIsdUJBOEt2QixJQUFJO1lBN0xQLFFBQVE7Ozs4QkFvR1AsS0FBSzt1QkFLTCxLQUFLOzJCQUlMLEtBQUs7dUJBSUwsS0FBSzsyQkFJTCxLQUFLOzBCQUtMLEtBQUs7OEJBSUwsS0FBSzswQkFJTCxLQUFLOzBCQUtMLEtBQUs7MEJBS0wsS0FBSzswQkFLTCxLQUFLOzBCQUtMLEtBQUs7MkJBS0wsS0FBSzttQkFLTCxLQUFLO2lDQTRETCxLQUFLO29CQVlMLEtBQUs7b0JBU0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBEaXJlY3RpdmUsXHJcbiAgSG9zdCxcclxuICBJbmplY3RvcixcclxuICBJbnB1dCxcclxuICBPbkluaXQsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQWJzdHJhY3RDb250cm9sLFxyXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxyXG4gIEZvcm1Db250cm9sLFxyXG4gIEZvcm1Db250cm9sTmFtZSxcclxuICBGb3JtR3JvdXBEaXJlY3RpdmUsXHJcbiAgTmdDb250cm9sLFxyXG4gIFZhbGlkYXRpb25FcnJvcnMsXHJcbiAgVmFsaWRhdG9yLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBTYWNGb3JtTGF5b3V0Q29tbW9uIH0gZnJvbSAnLi4vY29udHJvbHMvbGF5b3V0L2Zvcm1sYXlvdXQnO1xyXG5pbXBvcnQgeyBDb250cm9sSGVpZ2h0IH0gZnJvbSAnLi4vZW51bXMvQ29udHJvbEhlaWdodCc7XHJcbmltcG9ydCB7IElTYWNDb25maWd1cmF0aW9uU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSVNhY0NvbmZpZ3VyYXRpb25TZXJ2aWNlJztcclxuaW1wb3J0IHsgSVNhY0ljb25TZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JU2FjSWNvblNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJU2FjTGFiZWxTaXplcyB9IGZyb20gJy4uL2ludGVyZmFjZXMvSVNhY0xhYmVsU2l6ZXMnO1xyXG5pbXBvcnQgeyBJU2FjTG9jYWxpc2F0aW9uU2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSVNhY0xvY2FsaXNhdGlvblNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJU2FjVmFsaWRhdGlvbktleVNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lTYWNWYWxpZGF0aW9uS2V5U2VydmljZSc7XHJcbmltcG9ydCB7IElBYnN0cmFjdENvbnRyb2xMYWJlbEV4dGVuc2lvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMvaWFic3RyYWN0Y29udHJvbGxhYmVsJztcclxuaW1wb3J0IHtcclxuICBTQUNJQ09OX1NFUlZJQ0UsXHJcbiAgU0FDVkFMSURBVElPTktFWV9TRVJWSUNFLFxyXG4gIFNhY0RlZmF1bHRJY29uU2VydmljZSxcclxuICBTYWNEZWZhdWx0VmFsaWRhdGlvbktleVNlcnZpY2UsXHJcbn0gZnJvbSAnLi4vc2VydmljZXMnO1xyXG5pbXBvcnQge1xyXG4gIFNBQ0NPTkZJR1VSQVRJT05fU0VSVklDRSxcclxuICBTYWNEZWZhdWx0Q29uZmlndXJhdGlvblNlcnZpY2UsXHJcbn0gZnJvbSAnLi4vc2VydmljZXMvc2FjLWNvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgU0FDTE9DQUxJU0FUSU9OX1NFUlZJQ0UsXHJcbiAgU2FjRGVmYXVsdExvY2FsaXNhdGlvblNlcnZpY2UsXHJcbn0gZnJvbSAnLi4vc2VydmljZXMvc2FjLWxvY2FsaXNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgY29udmVydFRvQm9vbGVhbiB9IGZyb20gJy4uL3V0aWxpdGllcy9jb252ZXJ0aW9uJztcclxuaW1wb3J0IHsgY3JlYXRlR3VpZCB9IGZyb20gJy4uL3V0aWxpdGllcy9ndWlkJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9ySXRlbSB9IGZyb20gJy4uL3ZhbGlkYXRpb24nO1xyXG4vKipcclxuICogQWJzdHJhY3QgS2xhc3NlIGbDvHIgU2FjQmFzZU1vZGVsQ29udHJvbC4gSW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgVmFsaWRhdG9yLCBPbkluaXRcclxuICovXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2FjQmFzZU1vZGVsQ29udHJvbDxWQUxVRT5cclxuICBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdFxyXG57XHJcbiAgLy8gI3JlZ2lvbiBQcm9wZXJ0aWVzXHJcblxyXG4gIC8qKlxyXG4gICAqIElubGluZSBFcnJvcnMgZsO8ciBkYXMgQ29udHJvbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2lubGluZWVycm9yZW5hYmxlZDogYm9vbGVhbiB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX2xhYmVsOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgLyoqXHJcbiAgICogU2VydmljZSBmb3IgbG9hZGluZyBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgY29udHJvbHNcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uZmlndXJhdGlvblNlcnZpY2U6IElTYWNDb25maWd1cmF0aW9uU2VydmljZTtcclxuXHJcbiAgLyoqXHJcbiAgICogQm9vbGVhbiBQcm9wZXJ0eSBkaXJ0eTsgZGVmYXVsdCBXZXJ0IC0gZmFsc2VcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgX2RpcnR5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogU2FjTW9kZWwgRm9ybSBpc3QgZGlzYWJsZWRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgX2Rpc2FibGVkRm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIFZhbGlkYXRvclxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBfb25DaGFuZ2U6ICgpID0+IHZvaWQ7XHJcbiAgLyoqXHJcbiAgICogQm9vbGVhbiBQcm9wZXJ0eSB0b3VjaGVkOyBkZWZhdWx0IFdlcnQgLSBmYWxzZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBfdG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIC8qKlxyXG4gICAqIEludGVybmUgVmFyaWFibGUsIGRpZSBkZW4gV2VydCBkZXMgQ29udHJvbHMgaMOkbHRcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgX3ZhbHVlOiBWQUxVRSA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogRm9ybSBsYXlvdXQgaW5zdGFuY2UgaWYgZXhpc3RzXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGZvcm1sYXlvdXQ6IFNhY0Zvcm1MYXlvdXRDb21tb24gPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIGljb24gc2VydmljZVxyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBpY29uU2VydmljZTogSVNhY0ljb25TZXJ2aWNlO1xyXG4gIC8qKlxyXG4gICAqIFNlcnZpY2UgZsO8ciBFcnJvciBMb2NhbGlzYXRpb25cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgbG5nUmVzb3VyY2VTZXJ2aWNlOiBJU2FjTG9jYWxpc2F0aW9uU2VydmljZTtcclxuICAvKipcclxuICAgKiBuZ0NvbnRyb2xcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgbmdDb250cm9sOiBGb3JtQ29udHJvbDtcclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5lcyB0aGUgc3RhbmRhcmQgaGVpZ2h0IG9mIHRoZSBjb21wb25lbnRzXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgY29tcG9uZW50SGVpZ2h0OiBDb250cm9sSGVpZ2h0IHwgbnVsbCA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogRGVha3RpdmllcnQgZGFzIElucHV0IENvbnRyb2xcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBEZWFrdGl2aWVydCBkYXMgTGFiZWwgaW0gVGVtcGxhdGVcclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgZGlzYWJsZWxhYmVsOiBib29sZWFuID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogVGV4dCB0byBzdXBwb3J0IHRoZSB1c2VyIGR1cmluZyBpbnB1dC5cclxuICAgKi9cclxuICBASW5wdXQoKSBwdWJsaWMgaGVscHRleHQ6IHN0cmluZyA9ICcnO1xyXG4gIC8qKlxyXG4gICAqIE1vZGUgZm9yIGRpc3BsYXkgaGVscHRleHRcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBoZWxwdGV4dG1vZGU6ICd0b29sdGlwJyB8ICd0ZXh0JyB8IG51bGw7XHJcbiAgLyoqXHJcbiAgICogZGVmaW5lcyB0aGF0IGVycm9yIG1lc3NhZ2VzIGFyZSBkaXNwbGF5ZWQgdW5kZXIgdGhlIGNvbnRyb2xzXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIGlubGluZUVycm9yOiBib29sZWFuID0gdHJ1ZTtcclxuICAvKipcclxuICAgKiBkZWZpbmVzIHRoYXQgdGhlIGxhYmVscyBhcmUgZGlzcGxheWVkIGFzIGFkYXB0aXZlIGxhYmVsc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBpc0FkYXB0aXZlTGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAvKipcclxuICAgKiBkZWZhdWx0IGxhYmUgc2l6ZSBmb3IgbGFyZ2UgZGV2aWNlc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGxhYmVsU2l6ZUxnOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAvKipcclxuICAgKiBkZWZhdWx0IGxhYmVsIHNpemUgZm9yIG1lZGl1bSBkZXZpY2VzXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgbGFiZWxTaXplTWQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIGRlZmF1bHQgbGFiZWwgc2l6ZSBmb3Igc21hbGwgZGV2aWNlc1xyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGxhYmVsU2l6ZVNtOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAvKipcclxuICAgKiBkZWZhdWx0IGxhYmVsIHNpemUgZm9yIGV4dHJhIGxhcmdlIGRldmljZXNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBsYWJlbFNpemVYbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgLyoqXHJcbiAgICogZGVmYXVsdCBsYWJlbCBjb2x1bW4gc2l6ZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpXHJcbiAgcHVibGljIGxhYmVsU2l6ZVhzOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAvKipcclxuICAgKiBkZWZhdWx0IGxhYmVsIHNpemUgZm9yIGV4dHJhIGV4dHJhIGxhcmdlIGRldmljZXNcclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBsYWJlbFNpemVYeGw6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gIC8qKlxyXG4gICAqIE5hbWUgZGVzIENvbnRyb2xzXHJcbiAgICovXHJcbiAgQElucHV0KCkgcHVibGljIG5hbWU6IHN0cmluZyA9IGNyZWF0ZUd1aWQoKTtcclxuXHJcbiAgLyoqXHJcbiAgICogQ29udHJvbEhlaWdodCBlbnVtIGZvciB1c2UgaW4gSFRNTCBtYXJrdXBcclxuICAgKi9cclxuICBwdWJsaWMgQ29udHJvbEhlaWdodDogdHlwZW9mIENvbnRyb2xIZWlnaHQgPSBDb250cm9sSGVpZ2h0O1xyXG4gIC8qKlxyXG4gICAqIExlZXJlIEltcGxlbWVudGF0aW9uIHZvbiBcInByb3BhZ2F0ZUNoYW5nZVwiLiBNdXNzIGdlbWFjaHQgd2VyZGVuLCBkYW1pdCBrZWluIEZlaGxlciBlbnRzdGVodFxyXG4gICAqL1xyXG4gIHB1YmxpYyBwcm9wYWdhdGVDaGFuZ2U6IGFueSA9ICgpID0+IHt9O1xyXG4gIC8qKlxyXG4gICAqIExlZXJlIEltcGxlbWVudGF0aW9uIHZvbiBcInByb3BhZ2F0ZVRvdWNoXCIuIE11c3MgZ2VtYWNodCB3ZXJkZW4sIGRhbWl0IGtlaW4gRmVobGVyIGVudHN0ZWh0XHJcbiAgICovXHJcbiAgcHVibGljIHByb3BhZ2F0ZVRvdWNoOiBhbnkgPSAoKSA9PiB7fTtcclxuICAvKipcclxuICAgKiBTZXJ2aWNlIHRvIHJlY2VpdmUgc3RhbmRhcmQgdmFsaWRhdGlvbiBtZXNzYWdlIGtleXMgYW5kIHRleHRzXHJcbiAgICovXHJcbiAgcHVibGljIHZhbGlkYXRpb25LZXlTZXJ2aWNlOiBJU2FjVmFsaWRhdGlvbktleVNlcnZpY2U7XHJcblxyXG4gIC8vICNlbmRyZWdpb24gUHJvcGVydGllc1xyXG5cclxuICAvLyAjcmVnaW9uIENvbnN0cnVjdG9yc1xyXG5cclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RvclxyXG4gICAqIEBwYXJhbSBmb3JtbGF5b3V0IFNhY0Zvcm1MYXlvdXRDb21tb24gdG8gZGVmaW5lIHNjb3BlZCBsYXlvdXQgc2V0dGluZ3NcclxuICAgKiBAcGFyYW0gaW5qZWN0b3IgSW5qZWN0b3IgZm9yIGluamVjdGluZyBzZXJ2aWNlc1xyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEhvc3QoKSBmb3JtbGF5b3V0OiBTYWNGb3JtTGF5b3V0Q29tbW9uLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBpbmplY3RvcjogSW5qZWN0b3JcclxuICApIHtcclxuICAgIHRoaXMuZm9ybWxheW91dCA9IGZvcm1sYXlvdXQ7XHJcbiAgICB0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFxyXG4gICAgICBTQUNWQUxJREFUSU9OS0VZX1NFUlZJQ0UsXHJcbiAgICAgIG5ldyBTYWNEZWZhdWx0VmFsaWRhdGlvbktleVNlcnZpY2UoKVxyXG4gICAgKTtcclxuICAgIHRoaXMubG5nUmVzb3VyY2VTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFxyXG4gICAgICBTQUNMT0NBTElTQVRJT05fU0VSVklDRSxcclxuICAgICAgbmV3IFNhY0RlZmF1bHRMb2NhbGlzYXRpb25TZXJ2aWNlKHRoaXMudmFsaWRhdGlvbktleVNlcnZpY2UpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoXHJcbiAgICAgIFNBQ0NPTkZJR1VSQVRJT05fU0VSVklDRSxcclxuICAgICAgbmV3IFNhY0RlZmF1bHRDb25maWd1cmF0aW9uU2VydmljZSgpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuaWNvblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoXHJcbiAgICAgIFNBQ0lDT05fU0VSVklDRSxcclxuICAgICAgbmV3IFNhY0RlZmF1bHRJY29uU2VydmljZSgpXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBDb25zdHJ1Y3RvcnNcclxuXHJcbiAgLy8gI3JlZ2lvbiBQdWJsaWMgR2V0dGVycyBBbmQgU2V0dGVyc1xyXG5cclxuICAvKipcclxuICAgKiBBa3RpdmllcnQgb2RlciBEZWFrdGl2aWVydCBkaWUgSW5saW5lIEVycm9ycyBmw7xyIGRhcyBDb250cm9sXHJcbiAgICovXHJcbiAgQElucHV0KClcclxuICBwdWJsaWMgc2V0IGlubGluZWVycm9yZW5hYmxlZCh2YWx1ZTogYm9vbGVhbiB8IG51bGwpIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHRoaXMuX2lubGluZWVycm9yZW5hYmxlZCA9IG51bGw7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9pbmxpbmVlcnJvcmVuYWJsZWQgPSBjb252ZXJ0VG9Cb29sZWFuKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlZmluaWVydCBkZW4gTGFiZWwgVGV4dFxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHB1YmxpYyBzZXQgbGFiZWwodjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9sYWJlbCA9IHY7XHJcbiAgICB0aGlzLlVwZGF0ZUxhYmVsVG9Db250cm9sKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgTWV0aG9kZSBmw7xyIE5nTW9kZWwgQmluZGluZyBpbiBIdG1sIE1hcmt1cFxyXG4gICAqIElucHV0IHdpcmQgYmVuw7Z0aWd0LCBkYW1pdCBkZXIgV2VydCBhdWNoIMO8YmVyIGRhcyBNYXJrdXAgZ2VzZXR6dCB3ZXJkZW4ga2Fubi5cclxuICAgKi9cclxuICBASW5wdXQoKVxyXG4gIHB1YmxpYyBzZXQgdmFsdWUodjogVkFMVUUpIHtcclxuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLl92YWx1ZSA9IHRoaXMuQ29udmVydElucHV0VmFsdWUodik7XHJcbiAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLl92YWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgSWNvbiBmb3IgSGVscHRleHQgVG9vbHRpcFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgSGVscHRleHRUb29sdGlwSWNvbigpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuaWNvblNlcnZpY2UuR2VuZXJpY0hlbHB0ZXh0SWNvbjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IEJvb2xlYW4gV2VydCBmw7xyIGRpcnR5XHJcbiAgICovXHJcbiAgcHVibGljIGdldCBkaXJ0eSgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPT0gbnVsbCkge1xyXG4gICAgICB0aGlzLl9kaXJ0eSA9IHRoaXMubmdDb250cm9sLmRpcnR5O1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl9kaXJ0eTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgZXJyb3IgbWVzc2FnZXMgaW5saW5lXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpbmxpbmVlcnJvcmVuYWJsZWQoKTogYm9vbGVhbiB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2lubGluZWVycm9yZW5hYmxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IGJvb2xlYW4gV2VydCB3ZW5uIEZvcm0gaW52YWxpZCBvZGVyIG5pY2h0IGludmFsaWQgaXN0XHJcbiAgICovXHJcbiAgcHVibGljIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgdGhpcy5uZ0NvbnRyb2wgIT09IHVuZGVmaW5lZCAmJlxyXG4gICAgICB0aGlzLm5nQ29udHJvbCAhPT0gbnVsbCAmJlxyXG4gICAgICB0aGlzLm5nQ29udHJvbC5pbnZhbGlkXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVmaW5pZXJ0IG9iIGRhcyBDb250cm9sIGRpc2FibGVkIGlzdFxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXQgaXNkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZEZvcm0gfHwgdGhpcy5kaXNhYmxlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgaW5saW5lIGVycm9yIG1lc3NhZ2VzIGFyZSBhY3RpdmUgZm9yIHRoaXMgY29udHJvbC5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGlzaW5saW5lZXJyb3JlbmFibGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMuX2lubGluZWVycm9yZW5hYmxlZCAhPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5faW5saW5lZXJyb3JlbmFibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5mb3JtbGF5b3V0ICE9PSBudWxsICYmXHJcbiAgICAgIHRoaXMuZm9ybWxheW91dC5Jc0lubGluZUVycm9yRW5hYmxlZCAhPT0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLmZvcm1sYXlvdXQ/LklzSW5saW5lRXJyb3JFbmFibGVkO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLklubGluZUVycm9yRW5hYmxlZCAhPT0gbnVsbCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5JbmxpbmVFcnJvckVuYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWZpbmllcnQgZGVuIExhYmVsIFRleHRcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IGxhYmVsKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGFiZWw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGFsbCBsYWJlbCBzaXplcy4gVGhlc2UgdmFsdWVzIGNhbiB0aGVuIGJlIHRyYW5zZmVycmVkIHRvIGNvcnJlc3BvbmRpbmcgQ1NTIGNsYXNzZXMgdXNpbmcgYSBwaXBlXHJcbiAgICovXHJcbiAgcHVibGljIGdldCBsYWJlbFNpemVzKCk6IElTYWNMYWJlbFNpemVzIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGxhYmVsU2l6ZVNtOiB0aGlzLmxhYmVsU2l6ZVNtLFxyXG4gICAgICBsYWJlbFNpemVNZDogdGhpcy5sYWJlbFNpemVNZCxcclxuICAgICAgbGFiZWxTaXplWHM6IHRoaXMubGFiZWxTaXplWHMsXHJcbiAgICAgIGxhYmVsU2l6ZVhsOiB0aGlzLmxhYmVsU2l6ZVhsLFxyXG4gICAgICBsYWJlbFNpemVYeGw6IHRoaXMubGFiZWxTaXplWHhsLFxyXG4gICAgICBsYWJlbFNpemVMZzogdGhpcy5sYWJlbFNpemVMZyxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIGVyZ2lidCBCb29sZWFuIFdlcnQgZsO8ciB0b3VjaGVkXHJcbiAgICovXHJcbiAgcHVibGljIGdldCB0b3VjaGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHRoaXMubmdDb250cm9sICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX3RvdWNoZWQgPSB0aGlzLm5nQ29udHJvbC50b3VjaGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLl90b3VjaGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IE1ldGhvZGUgZsO8ciBOZ01vZGVsIEJpbmRpbmcgaW4gSHRtbCBNYXJrdXBcclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IHZhbHVlKCk6IFZBTFVFIHtcclxuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcclxuICB9XHJcblxyXG4gIC8vICNlbmRyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcclxuXHJcbiAgLy8gI3JlZ2lvbiBQdWJsaWMgTWV0aG9kc1xyXG5cclxuICAvKipcclxuICAgKiBNZXRob2RlIGVyZ2lidCBFcnJvciBhbmhhbmQgdm9uIGdlZ2ViZW5lbiBLcml0ZXJpZW5cclxuICAgKi9cclxuICBwdWJsaWMgR2V0RXJyb3JNZXNzYWdlKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICBpZiAodGhpcy5uZ0NvbnRyb2wuZXJyb3JzID09PSB1bmRlZmluZWQgfHwgdGhpcy5uZ0NvbnRyb2wuZXJyb3JzID09PSBudWxsKSB7XHJcbiAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxzdHJpbmc+KChvYnNlcnZlcikgPT4ge1xyXG4gICAgICAgIG9ic2VydmVyLm5leHQoJycpO1xyXG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGVycm9yczogVmFsaWRhdGlvbkVycm9ycyA9IHRoaXMubmdDb250cm9sLmVycm9ycztcclxuXHJcbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8c3RyaW5nPigob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgICBvYnNlcnZlci5uZXh0KCcnKTtcclxuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGVycm9ycyk7XHJcblxyXG4gICAgaWYgKGtleXMubGVuZ3RoIDw9IDApIHtcclxuICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgb2JzZXJ2ZXIubmV4dCgnJyk7XHJcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgZXJyb3JJdGVtOiBWYWxpZGF0aW9uRXJyb3JJdGVtID0gZXJyb3JzW2tleXNbMF1dO1xyXG5cclxuICAgIC8vIFZhbGlkYXRpb24gUGFyYW1ldGVyc1xyXG4gICAgY29uc3QgcGFyYW1ldGVycyA9IHt9O1xyXG4gICAgaWYgKGVycm9ySXRlbS5wYXJhbWV0ZXJzICE9PSBudWxsICYmIGVycm9ySXRlbS5wYXJhbWV0ZXJzICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgZXJyb3JJdGVtLnBhcmFtZXRlcnMuZm9yRWFjaCgodiwgaykgPT4ge1xyXG4gICAgICAgIHBhcmFtZXRlcnNba10gPSB2O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHBhcmFtZXRlcnNbJ0ZJRUxEJ10gPSBlcnJvckl0ZW0uZmllbGROYW1lO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmxuZ1Jlc291cmNlU2VydmljZS5HZXRTdHJpbmcoXHJcbiAgICAgIGVycm9ySXRlbS5lcnJvck1lc3NhZ2VLZXksXHJcbiAgICAgIHBhcmFtZXRlcnNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbiBBbmd1bGFyIDEwIHRoZSBDb250cm9sIExhYmVsIGZvciBSZWFjdGl2ZSBGb3JtcyBjYW4gYmUgc2V0IGZpcnN0IHRpbWUgaGVyZS4gV2l0aCBBbmd1bGFyIDEzIGlzIHN1cHBvcnRlZCBieSBpbml0IGluIE9uSW5pdFxyXG4gICAqL1xyXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAvLyByZWNlaXZlIGZvcm0gdmlhIGZvcm1jb250cm9sbmFtZSBvciBmb3JtY29udHJvbCBpbnN0YW5jZVxyXG4gICAgY29uc3QgZm9ybUNvbnRyb2wgPSB0aGlzLmluamVjdG9yLmdldChOZ0NvbnRyb2wsIG51bGwpO1xyXG4gICAgaWYgKGZvcm1Db250cm9sIGluc3RhbmNlb2YgRm9ybUNvbnRyb2xOYW1lKSB7XHJcbiAgICAgIGNvbnN0IGZvcm0gPSB0aGlzLmluamVjdG9yLmdldChGb3JtR3JvdXBEaXJlY3RpdmUsIG51bGwpO1xyXG4gICAgICB0aGlzLm5nQ29udHJvbCA9IGZvcm0uZ2V0Q29udHJvbChmb3JtQ29udHJvbCk7XHJcbiAgICB9IGVsc2UgaWYgKGZvcm1Db250cm9sKSB7XHJcbiAgICAgIHRoaXMubmdDb250cm9sID0gZm9ybUNvbnRyb2wuY29udHJvbCBhcyBGb3JtQ29udHJvbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLlVwZGF0ZUxhYmVsVG9Db250cm9sKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0IEV2ZW50XHJcbiAgICovXHJcbiAgcHVibGljIG5nT25Jbml0KCkge1xyXG4gICAgLy8gc2V0IGxhYmVsIHNpemVzIGZyb20gZm9ybWxheW91dCBkaXJlY3RpdmVcclxuICAgIHRoaXMuc2V0TGFiZWxTaXplcygpO1xyXG5cclxuICAgIC8vIHNldCBjb21wb25lbnQgaGVpZ3RoIGZyb20gZnJvbWxheW91dCBkaXJlY3RpdmVcclxuICAgIHRoaXMuc2V0Q29tcG9uZW50SGVpZ2h0KCk7XHJcblxyXG4gICAgLy8gc2V0IGFkYXB0aXZlIGxhYmVsIHByb3BlcnR5IGZyb20gZm9ybWxheW91dCBkaXJlY3RpdmVcclxuICAgIHRoaXMuc2V0SXNBZGFwdGl2ZUxhYmVsKCk7XHJcblxyXG4gICAgLy8gc2V0IG1ldGhvZCB0byBkaXNwbGF5IGhlbHB0ZXh0XHJcbiAgICB0aGlzLnNldEhlbHBUZXh0TW9kZSgpO1xyXG5cclxuICAgIHRoaXMuT25DbGFzc0luaXQoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgZXJnaWJ0IGJvb2xlYW4gdG91Y2hlZCA9IHRydWVcclxuICAgKi9cclxuICBwdWJsaWMgb25Ub3VjaCgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3RvdWNoZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5wcm9wYWdhdGVUb3VjaCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSwgZGFtaXQgYW5kZXJlIENvbnRyb2xzIMOkbmRlcnVuZ2VuIGltIENvbnRyb2wgbWl0YmVrb21tZW4ga8O2bm5lblxyXG4gICAqIFp1ciDDhG5kZXJ1bmdzaW5mbyBkaWUgTWV0aG9kZSBwcm9wYWdhdGVDaGFuZ2UgYXVmcnVmZW4uXHJcbiAgICovXHJcbiAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UgPSAob2JqKSA9PiBmbihvYmopO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSwgZGFtaXQgYW5kZXJlIENvbnRyb2xzIMOkbmRlcnVuZ2VuIG1pdGJla29tbWVuLCB3ZW5uIGRhcyBDb250cm9sIGFrdGl2aWVydCAoRm9jdXMpIHdpcmQuXHJcbiAgICovXHJcbiAgcHVibGljIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucHJvcGFnYXRlVG91Y2ggPSAob2JqKSA9PiBmbihvYmopO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSByZWdpc3RyaWVydCDDhG5kZXJ1bmdlbiBiZWkgZGVyIFZhbGlkaWVydW5nXHJcbiAgICovXHJcbiAgcHVibGljIHJlZ2lzdGVyT25WYWxpZGF0b3JDaGFuZ2UoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcclxuICAgIHRoaXMuX29uQ2hhbmdlID0gZm47XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXR6dCBkYXMgQ29udHJvbCBhdWYgRGlzYWJsZWRcclxuICAgKi9cclxuICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICB0aGlzLl9kaXNhYmxlZEZvcm0gPSBpc0Rpc2FibGVkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSBkaWUgZGVuIFdlcnQgZGVzIElucHV0cyBzZXR6dFxyXG4gICAqL1xyXG4gIHB1YmxpYyBzZXRWYWx1ZSh2OiBWQUxVRSk6IHZvaWQge1xyXG4gICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBWYWxpZGF0b3IgTWV0aG9kZVxyXG4gICAqL1xyXG4gIHB1YmxpYyB2YWxpZGF0ZShjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCBlcnJvcjogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwgPSB0aGlzLnZhbGlkYXRlRGF0YShjKTtcclxuICAgIHJldHVybiBlcnJvcjtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZGUgenVtIHNjaHJlaWJlbiB2b24gV2VydGVuIGF1cyBkZW0gTW9kZWwgaW4gZGFzIENvbnRyb2xcclxuICAgKi9cclxuICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogVkFMVUUpIHtcclxuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcblxyXG4gIC8vICNyZWdpb24gUHVibGljIEFic3RyYWN0IE1ldGhvZHNcclxuXHJcbiAgLyoqXHJcbiAgICogQWJzdHJha3RlIFZhbGlkYXRvciBNZXRob2RlXHJcbiAgICovXHJcbiAgcHVibGljIGFic3RyYWN0IHZhbGlkYXRlRGF0YShjOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbDtcclxuXHJcbiAgLy8gI2VuZHJlZ2lvbiBQdWJsaWMgQWJzdHJhY3QgTWV0aG9kc1xyXG5cclxuICAvLyAjcmVnaW9uIFByb3RlY3RlZCBNZXRob2RzXHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZCBjYW4gT3ZlcndyaXRlbiBpbiBQYXJlbnQgQ2xhc3Nlc1xyXG4gICAqIEBwYXJhbSB2YWx1ZSBXZXJ0IHdlbGNoZXIgaW4gZGVuIGtvcnJla3RlbiBUeXAga29udmVydGllcnQgd2VyZGVuIHNvbGxcclxuICAgKiBAcmV0dXJucyBXZXJ0IGltIGtvcnJla3RlbiBUeXBcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgQ29udmVydElucHV0VmFsdWUodmFsdWU6IFZBTFVFKTogVkFMVUUge1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTWV0aG9kZSBlcmdpYnQgRGVjaW1hbCBTeW1ib2xcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgR2V0RGVjaW1hbFN5bWJvbCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuICcuJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIE1ldGhvZCBjYW4gYmUgdXNlZCB0byBTZXQgUHJvcGVydGllcyBhdCBDbGFzcyBJbml0XHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIE9uQ2xhc3NJbml0KCk6IHZvaWQge31cclxuXHJcbiAgLyoqXHJcbiAgICogQWt0dWFsaXNpZXJ0IGRlbiBOZ01vZGVsIFdlcnQgdW5kIGRpZSBHw7xsdGlna2VpdCBkZXMgVmFsaWRhdG9ycyBkZXMgQ29udHJvbHNcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgVXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLm5nQ29udHJvbCkge1xyXG4gICAgICB0aGlzLm5nQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgb25seVNlbGY6IHRydWUgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyAjZW5kcmVnaW9uIFByb3RlY3RlZCBNZXRob2RzXHJcblxyXG4gIC8vICNyZWdpb24gUHJpdmF0ZSBNZXRob2RzXHJcblxyXG4gIHByaXZhdGUgVXBkYXRlTGFiZWxUb0NvbnRyb2woKTogdm9pZCB7XHJcbiAgICAvLyBIQUNLOiBBZGQgYWRkaXRpb24gcHJvcGVydHkgdG8gRm9ybUNvbnRyb2wuIENhbiBiZSBmaXhlZCBpZiBzb2x1dGlvbiBmb3IgdGlja2V0OiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xOTY4NlxyXG4gICAgaWYgKHRoaXMubmdDb250cm9sKSB7XHJcbiAgICAgIChcclxuICAgICAgICB0aGlzLm5nQ29udHJvbCBhcyB1bmtub3duIGFzIElBYnN0cmFjdENvbnRyb2xMYWJlbEV4dGVuc2lvblxyXG4gICAgICApLmNvbnRyb2xsYWJlbCA9IHRoaXMubGFiZWw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXQgY29tcG9uZW50IGhlaWdodCBmcm9tIHByb3BlcnR5IG9yIHBhcmVudCBsYXlvdXQgY29udHJvbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0Q29tcG9uZW50SGVpZ2h0KCkge1xyXG4gICAgLy8gc2V0IHNpemUgZXh0cmEgc21hbGxcclxuICAgIGlmICghdGhpcy5jb21wb25lbnRIZWlnaHQpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8uY29tcG9uZW50SGVpZ2h0KSB7XHJcbiAgICAgICAgdGhpcy5jb21wb25lbnRIZWlnaHQgPSB0aGlzLmZvcm1sYXlvdXQuY29tcG9uZW50SGVpZ2h0O1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY29tcG9uZW50SGVpZ2h0ID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5Db21wb25lbnRIZWlnaHQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBtb2RlIGZvciBoZWxwdGV4dC4gQ2FuIGJlIHRvb2x0aXAgb3IgdGV4dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0SGVscFRleHRNb2RlKCkge1xyXG4gICAgaWYgKCF0aGlzLmhlbHB0ZXh0bW9kZSkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5oZWxwdGV4dG1vZGUpIHtcclxuICAgICAgICB0aGlzLmhlbHB0ZXh0bW9kZSA9IHRoaXMuZm9ybWxheW91dC5oZWxwdGV4dG1vZGU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5oZWxwdGV4dG1vZGUgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkhlbHB0ZXh0TW9kZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IGFkYXB0aXZlIGxhYmVsIHByb3BlcnR5IGZyb20gcGFyZW50IGxheW91dCBjb250cm9sXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBzZXRJc0FkYXB0aXZlTGFiZWwoKSB7XHJcbiAgICBpZiAoIXRoaXMuaXNBZGFwdGl2ZUxhYmVsKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmlzQWRhcHRpdmVMYWJlbCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgdGhpcy5pc0FkYXB0aXZlTGFiZWwgPSB0aGlzLmZvcm1sYXlvdXQuaXNBZGFwdGl2ZUxhYmVsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuaXNBZGFwdGl2ZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNldCBsYWJlbCBzaXplcyBmcm9tIHByb3BlcnR5IG9yIHBhcmVudCBsYXlvdXQgY29udHJvbFxyXG4gICAqL1xyXG4gIHByaXZhdGUgc2V0TGFiZWxTaXplcygpIHtcclxuICAgIC8vIHNldCBzaXplIGV4dHJhIHNtYWxsXHJcbiAgICBpZiAoIXRoaXMubGFiZWxTaXplWHMpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8ubGFiZWxTaXplWHMpIHtcclxuICAgICAgICB0aGlzLmxhYmVsU2l6ZVhzID0gdGhpcy5mb3JtbGF5b3V0LmxhYmVsU2l6ZVhzO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplWHMgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZVhzO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0IHNpemUgc21hbGxcclxuICAgIGlmICghdGhpcy5sYWJlbFNpemVTbSkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVTbSkge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplU20gPSB0aGlzLmZvcm1sYXlvdXQubGFiZWxTaXplU207XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVTbSA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuTGFiZWxTaXplU207XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXQgc2l6ZSBtZWRpdW1cclxuICAgIGlmICghdGhpcy5sYWJlbFNpemVNZCkge1xyXG4gICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVNZCkge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplTWQgPSB0aGlzLmZvcm1sYXlvdXQubGFiZWxTaXplTWQ7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVNZCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuTGFiZWxTaXplTWQ7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBzZXQgc2l6ZSBsYXJnZVxyXG4gICAgaWYgKCF0aGlzLmxhYmVsU2l6ZUxnKSB7XHJcbiAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmxhYmVsU2l6ZUxnKSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVMZyA9IHRoaXMuZm9ybWxheW91dC5sYWJlbFNpemVMZztcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxhYmVsU2l6ZUxnID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5MYWJlbFNpemVMZztcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIHNldCBzaXplIGV4dHJhIGxhcmdlXHJcbiAgICBpZiAoIXRoaXMubGFiZWxTaXplWGwpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8ubGFiZWxTaXplWGwpIHtcclxuICAgICAgICB0aGlzLmxhYmVsU2l6ZVhsID0gdGhpcy5mb3JtbGF5b3V0LmxhYmVsU2l6ZVhsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplWGwgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZVhsO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2V0IHNpemUgZXh0cmEgZXh0cmEgbGFyZ2VcclxuICAgIGlmICghdGhpcy5sYWJlbFNpemVYeGwpIHtcclxuICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8ubGFiZWxTaXplWHhsKSB7XHJcbiAgICAgICAgdGhpcy5sYWJlbFNpemVYeGwgPSB0aGlzLmZvcm1sYXlvdXQubGFiZWxTaXplWHhsO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMubGFiZWxTaXplWHhsID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5MYWJlbFNpemVYeGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vICNlbmRyZWdpb24gUHJpdmF0ZSBNZXRob2RzXHJcbn1cclxuIl19
|
|
535
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZW1vZGVsY29udHJvbC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Qcm9qZWt0ZS9zaW1wbGVhbmd1bGFyY29udHJvbHMtbmcxMC9jaC5qbmV0d29yay5zYWMtY29udHJvbHMvcHJvamVjdHMvc2FjLWNvbW1vbi9zcmMvIiwic291cmNlcyI6WyJjb21tb24vYmFzZW1vZGVsY29udHJvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFPdkQsT0FBTyxFQUNILGVBQWUsRUFDZix3QkFBd0IsRUFDeEIscUJBQXFCLEVBQ3JCLDhCQUE4QixHQUNqQyxNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsOEJBQThCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqSCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBSUgsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixTQUFTLEdBR1osTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWxDOztHQUVHO0FBRUgsTUFBTSxPQUFnQixtQkFBbUI7SUF1S3JDLHdCQUF3QjtJQUV4Qix1QkFBdUI7SUFFdkI7Ozs7T0FJRztJQUNILFlBQW9CLFVBQStCLEVBQW1CLFFBQWtCO1FBQWxCLGFBQVEsR0FBUixRQUFRLENBQVU7UUEvS3hGLHFCQUFx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QUM7OztZQS9tQkosU0FBUzs7O1lBbkNELG1CQUFtQix1QkFvTlgsSUFBSTtZQWpNSyxRQUFROzs7OEJBd0Y3QixLQUFLO3VCQU1MLEtBQUs7MkJBS0wsS0FBSzt1QkFLTCxLQUFLOzJCQUtMLEtBQUs7MEJBTUwsS0FBSzs4QkFLTCxLQUFLOzBCQUtMLEtBQUs7MEJBTUwsS0FBSzswQkFNTCxLQUFLOzBCQU1MLEtBQUs7MEJBTUwsS0FBSzsyQkFNTCxLQUFLO21CQU1MLEtBQUs7b0NBZUwsS0FBSztpQ0E4REwsS0FBSztvQkFvREwsS0FBSztvQkF5Q0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNhY0Zvcm1MYXlvdXRDb21tb24gfSBmcm9tICcuLi9jb250cm9scy9sYXlvdXQvZm9ybWxheW91dCc7XHJcbmltcG9ydCB7IENvbnRyb2xIZWlnaHQgfSBmcm9tICcuLi9lbnVtcy9Db250cm9sSGVpZ2h0JztcclxuaW1wb3J0IHsgSVNhY0NvbmZpZ3VyYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JU2FjQ29uZmlndXJhdGlvblNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJU2FjSWNvblNlcnZpY2UgfSBmcm9tICcuLi9pbnRlcmZhY2VzL0lTYWNJY29uU2VydmljZSc7XHJcbmltcG9ydCB7IElTYWNMYWJlbFNpemVzIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JU2FjTGFiZWxTaXplcyc7XHJcbmltcG9ydCB7IElTYWNMb2NhbGlzYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9JU2FjTG9jYWxpc2F0aW9uU2VydmljZSc7XHJcbmltcG9ydCB7IElTYWNWYWxpZGF0aW9uS2V5U2VydmljZSB9IGZyb20gJy4uL2ludGVyZmFjZXMvSVNhY1ZhbGlkYXRpb25LZXlTZXJ2aWNlJztcclxuaW1wb3J0IHsgSUFic3RyYWN0Q29udHJvbExhYmVsRXh0ZW5zaW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9pYWJzdHJhY3Rjb250cm9sbGFiZWwnO1xyXG5pbXBvcnQge1xyXG4gICAgU0FDSUNPTl9TRVJWSUNFLFxyXG4gICAgU0FDVkFMSURBVElPTktFWV9TRVJWSUNFLFxyXG4gICAgU2FjRGVmYXVsdEljb25TZXJ2aWNlLFxyXG4gICAgU2FjRGVmYXVsdFZhbGlkYXRpb25LZXlTZXJ2aWNlLFxyXG59IGZyb20gJy4uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgU0FDQ09ORklHVVJBVElPTl9TRVJWSUNFLCBTYWNEZWZhdWx0Q29uZmlndXJhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zYWMtY29uZmlndXJhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU0FDTE9DQUxJU0FUSU9OX1NFUlZJQ0UsIFNhY0RlZmF1bHRMb2NhbGlzYXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvc2FjLWxvY2FsaXNhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgY29udmVydFRvQm9vbGVhbiB9IGZyb20gJy4uL3V0aWxpdGllcy9jb252ZXJ0aW9uJztcclxuaW1wb3J0IHsgY3JlYXRlR3VpZCB9IGZyb20gJy4uL3V0aWxpdGllcy9ndWlkJztcclxuaW1wb3J0IHsgVmFsaWRhdGlvbkVycm9ySXRlbSB9IGZyb20gJy4uL3ZhbGlkYXRpb24nO1xyXG5pbXBvcnQgeyBEaXJlY3RpdmUsIEhvc3QsIEluamVjdG9yLCBJbnB1dCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgICBDb250cm9sVmFsdWVBY2Nlc3NvcixcclxuICAgIEZvcm1Db250cm9sLFxyXG4gICAgRm9ybUNvbnRyb2xOYW1lLFxyXG4gICAgRm9ybUdyb3VwRGlyZWN0aXZlLFxyXG4gICAgTmdDb250cm9sLFxyXG4gICAgVmFsaWRhdGlvbkVycm9ycyxcclxuICAgIFZhbGlkYXRvcixcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcclxuXHJcbi8qKlxyXG4gKiBBYnN0cmFjdCBLbGFzc2UgZsO8ciBTYWNCYXNlTW9kZWxDb250cm9sLiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uSW5pdFxyXG4gKi9cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBTYWNCYXNlTW9kZWxDb250cm9sPFZBTFVFPiBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBWYWxpZGF0b3IsIE9uSW5pdCB7XHJcbiAgICAvLyAjcmVnaW9uIFByb3BlcnRpZXNcclxuXHJcbiAgICAvKipcclxuICAgICAqIElubGluZSBFcnJvcnMgZsO8ciBkYXMgQ29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9pbmxpbmVlcnJvcmVuYWJsZWQ6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIExhYmVsIFRleHRcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfbGFiZWw6IHN0cmluZyA9ICcnO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VydmljZSBmb3IgbG9hZGluZyBkZWZhdWx0IHNldHRpbmdzIGZvciB0aGUgY29udHJvbHNcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbmZpZ3VyYXRpb25TZXJ2aWNlOiBJU2FjQ29uZmlndXJhdGlvblNlcnZpY2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCb29sZWFuIFByb3BlcnR5IGRpcnR5OyBkZWZhdWx0IFdlcnQgLSBmYWxzZVxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgX2RpcnR5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTYWNNb2RlbCBGb3JtIGlzdCBkaXNhYmxlZFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgX2Rpc2FibGVkRm9ybTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVmFsaWRhdG9yXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBfb25DaGFuZ2U6ICgpID0+IHZvaWQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBCb29sZWFuIFByb3BlcnR5IHRvdWNoZWQ7IGRlZmF1bHQgV2VydCAtIGZhbHNlXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBfdG91Y2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW50ZXJuZSBWYXJpYWJsZSwgZGllIGRlbiBXZXJ0IGRlcyBDb250cm9scyBow6RsdFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgX3ZhbHVlOiBWQUxVRSA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBGb3JtIGxheW91dCBpbnN0YW5jZSBpZiBleGlzdHNcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGZvcm1sYXlvdXQ6IFNhY0Zvcm1MYXlvdXRDb21tb24gPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogaWNvbiBzZXJ2aWNlXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBpY29uU2VydmljZTogSVNhY0ljb25TZXJ2aWNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2VydmljZSBmw7xyIEVycm9yIExvY2FsaXNhdGlvblxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgbG5nUmVzb3VyY2VTZXJ2aWNlOiBJU2FjTG9jYWxpc2F0aW9uU2VydmljZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIG5nQ29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgbmdDb250cm9sOiBGb3JtQ29udHJvbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnRyb2xIZWlnaHQgZW51bSBmb3IgdXNlIGluIEhUTUwgbWFya3VwXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBDb250cm9sSGVpZ2h0OiB0eXBlb2YgQ29udHJvbEhlaWdodCA9IENvbnRyb2xIZWlnaHQ7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmVzIHRoZSBzdGFuZGFyZCBoZWlnaHQgb2YgdGhlIGNvbXBvbmVudHNcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBjb21wb25lbnRIZWlnaHQ6IENvbnRyb2xIZWlnaHQgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIERlYWt0aXZpZXJ0IGRhcyBJbnB1dCBDb250cm9sXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGVha3RpdmllcnQgZGFzIExhYmVsIGltIFRlbXBsYXRlXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBkaXNhYmxlbGFiZWw6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRleHQgdG8gc3VwcG9ydCB0aGUgdXNlciBkdXJpbmcgaW5wdXQuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBoZWxwdGV4dDogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNb2RlIGZvciBkaXNwbGF5IGhlbHB0ZXh0XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgaGVscHRleHRtb2RlOiAndG9vbHRpcCcgfCAndGV4dCcgfCBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogZGVmaW5lcyB0aGF0IGVycm9yIG1lc3NhZ2VzIGFyZSBkaXNwbGF5ZWQgdW5kZXIgdGhlIGNvbnRyb2xzXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBpbmxpbmVFcnJvcjogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBkZWZpbmVzIHRoYXQgdGhlIGxhYmVscyBhcmUgZGlzcGxheWVkIGFzIGFkYXB0aXZlIGxhYmVsc1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgaXNBZGFwdGl2ZUxhYmVsOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBkZWZhdWx0IGxhYmUgc2l6ZSBmb3IgbGFyZ2UgZGV2aWNlc1xyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGxhYmVsU2l6ZUxnOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIGRlZmF1bHQgbGFiZWwgc2l6ZSBmb3IgbWVkaXVtIGRldmljZXNcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBsYWJlbFNpemVNZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBkZWZhdWx0IGxhYmVsIHNpemUgZm9yIHNtYWxsIGRldmljZXNcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBsYWJlbFNpemVTbTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBkZWZhdWx0IGxhYmVsIHNpemUgZm9yIGV4dHJhIGxhcmdlIGRldmljZXNcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBsYWJlbFNpemVYbDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBkZWZhdWx0IGxhYmVsIGNvbHVtbiBzaXplXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbGFiZWxTaXplWHM6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogZGVmYXVsdCBsYWJlbCBzaXplIGZvciBleHRyYSBleHRyYSBsYXJnZSBkZXZpY2VzXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbGFiZWxTaXplWHhsOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE5hbWUgZGVzIENvbnRyb2xzXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBjcmVhdGVHdWlkKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMZWVyZSBJbXBsZW1lbnRhdGlvbiB2b24gXCJwcm9wYWdhdGVDaGFuZ2VcIi4gTXVzcyBnZW1hY2h0IHdlcmRlbiwgZGFtaXQga2VpbiBGZWhsZXIgZW50c3RlaHRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHByb3BhZ2F0ZUNoYW5nZTogYW55ID0gKCkgPT4ge307XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBMZWVyZSBJbXBsZW1lbnRhdGlvbiB2b24gXCJwcm9wYWdhdGVUb3VjaFwiLiBNdXNzIGdlbWFjaHQgd2VyZGVuLCBkYW1pdCBrZWluIEZlaGxlciBlbnRzdGVodFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcHJvcGFnYXRlVG91Y2g6IGFueSA9ICgpID0+IHt9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGV0YWNoIGxhYmVsIHRleHQgYW5kIHRvb2x0aXAgZnJvbSBlYWNoIG90aGVyIGluIExhYmVsIHNvIHRoYXQgbGFiZWwgYW5kIHRvb2x0aXAgY2FuIGJlIGFsaWduZWQgZGlmZmVyZW50bHkuIFRoaXMgaXMgaW4gQm9vdHN0cmFwIDMgbm90IHN1cHBvcnRlZCFcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzcGxpdGxhYmVsYW5kaGVscHRleHQ6IGJvb2xlYW4gfCBudWxsID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNlcnZpY2UgdG8gcmVjZWl2ZSBzdGFuZGFyZCB2YWxpZGF0aW9uIG1lc3NhZ2Uga2V5cyBhbmQgdGV4dHNcclxuICAgICAqL1xyXG4gICAgcHVibGljIHZhbGlkYXRpb25LZXlTZXJ2aWNlOiBJU2FjVmFsaWRhdGlvbktleVNlcnZpY2U7XHJcblxyXG4gICAgLy8gI2VuZHJlZ2lvbiBQcm9wZXJ0aWVzXHJcblxyXG4gICAgLy8gI3JlZ2lvbiBDb25zdHJ1Y3RvcnNcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbnN0cnVjdG9yXHJcbiAgICAgKiBAcGFyYW0gZm9ybWxheW91dCBTYWNGb3JtTGF5b3V0Q29tbW9uIHRvIGRlZmluZSBzY29wZWQgbGF5b3V0IHNldHRpbmdzXHJcbiAgICAgKiBAcGFyYW0gaW5qZWN0b3IgSW5qZWN0b3IgZm9yIGluamVjdGluZyBzZXJ2aWNlc1xyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihASG9zdCgpIGZvcm1sYXlvdXQ6IFNhY0Zvcm1MYXlvdXRDb21tb24sIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3I6IEluamVjdG9yKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtbGF5b3V0ID0gZm9ybWxheW91dDtcclxuICAgICAgICB0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFNBQ1ZBTElEQVRJT05LRVlfU0VSVklDRSwgbmV3IFNhY0RlZmF1bHRWYWxpZGF0aW9uS2V5U2VydmljZSgpKTtcclxuICAgICAgICB0aGlzLmxuZ1Jlc291cmNlU2VydmljZSA9IGluamVjdG9yLmdldChcclxuICAgICAgICAgICAgU0FDTE9DQUxJU0FUSU9OX1NFUlZJQ0UsXHJcbiAgICAgICAgICAgIG5ldyBTYWNEZWZhdWx0TG9jYWxpc2F0aW9uU2VydmljZSh0aGlzLnZhbGlkYXRpb25LZXlTZXJ2aWNlKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoU0FDQ09ORklHVVJBVElPTl9TRVJWSUNFLCBuZXcgU2FjRGVmYXVsdENvbmZpZ3VyYXRpb25TZXJ2aWNlKCkpO1xyXG5cclxuICAgICAgICB0aGlzLmljb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KFNBQ0lDT05fU0VSVklDRSwgbmV3IFNhY0RlZmF1bHRJY29uU2VydmljZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyAjZW5kcmVnaW9uIENvbnN0cnVjdG9yc1xyXG5cclxuICAgIC8vICNyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldCBJY29uIGZvciBIZWxwdGV4dCBUb29sdGlwXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgSGVscHRleHRUb29sdGlwSWNvbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmljb25TZXJ2aWNlLkdlbmVyaWNIZWxwdGV4dEljb247XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2RlIGVyZ2lidCBCb29sZWFuIFdlcnQgZsO8ciBkaXJ0eVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGRpcnR5KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbCAhPT0gbnVsbCAmJiB0aGlzLm5nQ29udHJvbCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2RpcnR5ID0gdGhpcy5uZ0NvbnRyb2wuZGlydHk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlydHk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTaG93IGVycm9yIG1lc3NhZ2VzIGlubGluZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0IGlubGluZWVycm9yZW5hYmxlZCgpOiBib29sZWFuIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lubGluZWVycm9yZW5hYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFrdGl2aWVydCBvZGVyIERlYWt0aXZpZXJ0IGRpZSBJbmxpbmUgRXJyb3JzIGbDvHIgZGFzIENvbnRyb2xcclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgaW5saW5lZXJyb3JlbmFibGVkKHZhbHVlOiBib29sZWFuIHwgbnVsbCkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2lubGluZWVycm9yZW5hYmxlZCA9IG51bGw7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5faW5saW5lZXJyb3JlbmFibGVkID0gY29udmVydFRvQm9vbGVhbih2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kZSBlcmdpYnQgYm9vbGVhbiBXZXJ0IHdlbm4gRm9ybSBpbnZhbGlkIG9kZXIgbmljaHQgaW52YWxpZCBpc3RcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBpbnZhbGlkKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5nQ29udHJvbCAhPT0gdW5kZWZpbmVkICYmIHRoaXMubmdDb250cm9sICE9PSBudWxsICYmIHRoaXMubmdDb250cm9sLmludmFsaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmllcnQgb2IgZGFzIENvbnRyb2wgZGlzYWJsZWQgaXN0XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaXNkaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWRGb3JtIHx8IHRoaXMuZGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIGlubGluZSBlcnJvciBtZXNzYWdlcyBhcmUgYWN0aXZlIGZvciB0aGlzIGNvbnRyb2wuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgaXNpbmxpbmVlcnJvcmVuYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2lubGluZWVycm9yZW5hYmxlZCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5faW5saW5lZXJyb3JlbmFibGVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybWxheW91dCAhPT0gbnVsbCAmJiB0aGlzLmZvcm1sYXlvdXQuSXNJbmxpbmVFcnJvckVuYWJsZWQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWxheW91dD8uSXNJbmxpbmVFcnJvckVuYWJsZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5JbmxpbmVFcnJvckVuYWJsZWQgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuSW5saW5lRXJyb3JFbmFibGVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBEZWZpbmllcnQgZGVuIExhYmVsIFRleHRcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCBsYWJlbCgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9sYWJlbDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIERlZmluaWVydCBkZW4gTGFiZWwgVGV4dFxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKSBwdWJsaWMgc2V0IGxhYmVsKHY6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX2xhYmVsID0gdjtcclxuICAgICAgICB0aGlzLlVwZGF0ZUxhYmVsVG9Db250cm9sKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiByZXR1cm5zIGFuIG9iamVjdCB3aXRoIGFsbCBsYWJlbCBzaXplcy4gVGhlc2UgdmFsdWVzIGNhbiB0aGVuIGJlIHRyYW5zZmVycmVkIHRvIGNvcnJlc3BvbmRpbmcgQ1NTIGNsYXNzZXMgdXNpbmcgYSBwaXBlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgbGFiZWxTaXplcygpOiBJU2FjTGFiZWxTaXplcyB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbGFiZWxTaXplU206IHRoaXMubGFiZWxTaXplU20sXHJcbiAgICAgICAgICAgIGxhYmVsU2l6ZU1kOiB0aGlzLmxhYmVsU2l6ZU1kLFxyXG4gICAgICAgICAgICBsYWJlbFNpemVYczogdGhpcy5sYWJlbFNpemVYcyxcclxuICAgICAgICAgICAgbGFiZWxTaXplWGw6IHRoaXMubGFiZWxTaXplWGwsXHJcbiAgICAgICAgICAgIGxhYmVsU2l6ZVh4bDogdGhpcy5sYWJlbFNpemVYeGwsXHJcbiAgICAgICAgICAgIGxhYmVsU2l6ZUxnOiB0aGlzLmxhYmVsU2l6ZUxnLFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2RlIGVyZ2lidCBCb29sZWFuIFdlcnQgZsO8ciB0b3VjaGVkXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXQgdG91Y2hlZCgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wgIT09IG51bGwgJiYgdGhpcy5uZ0NvbnRyb2wgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLl90b3VjaGVkID0gdGhpcy5uZ0NvbnRyb2wudG91Y2hlZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLl90b3VjaGVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0IE1ldGhvZGUgZsO8ciBOZ01vZGVsIEJpbmRpbmcgaW4gSHRtbCBNYXJrdXBcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldCB2YWx1ZSgpOiBWQUxVRSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IE1ldGhvZGUgZsO8ciBOZ01vZGVsIEJpbmRpbmcgaW4gSHRtbCBNYXJrdXBcclxuICAgICAqIElucHV0IHdpcmQgYmVuw7Z0aWd0LCBkYW1pdCBkZXIgV2VydCBhdWNoIMO8YmVyIGRhcyBNYXJrdXAgZ2VzZXR6dCB3ZXJkZW4ga2Fubi5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgdmFsdWUodjogVkFMVUUpIHtcclxuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl92YWx1ZSA9IHRoaXMuQ29udmVydElucHV0VmFsdWUodik7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5fdmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHVibGljIEdldHRlcnMgQW5kIFNldHRlcnNcclxuXHJcbiAgICAvLyAjcmVnaW9uIFB1YmxpYyBNZXRob2RzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2RlIGVyZ2lidCBFcnJvciBhbmhhbmQgdm9uIGdlZ2ViZW5lbiBLcml0ZXJpZW5cclxuICAgICAqL1xyXG4gICAgcHVibGljIEdldEVycm9yTWVzc2FnZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xyXG4gICAgICAgIGlmICh0aGlzLm5nQ29udHJvbC5lcnJvcnMgPT09IHVuZGVmaW5lZCB8fCB0aGlzLm5nQ29udHJvbC5lcnJvcnMgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHN0cmluZz4oKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KCcnKTtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZXJyb3JzOiBWYWxpZGF0aW9uRXJyb3JzID0gdGhpcy5uZ0NvbnRyb2wuZXJyb3JzO1xyXG5cclxuICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8c3RyaW5nPigob2JzZXJ2ZXIpID0+IHtcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQoJycpO1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBrZXlzOiBzdHJpbmdbXSA9IE9iamVjdC5rZXlzKGVycm9ycyk7XHJcblxyXG4gICAgICAgIGlmIChrZXlzLmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxzdHJpbmc+KChvYnNlcnZlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGVycm9ySXRlbTogVmFsaWRhdGlvbkVycm9ySXRlbSA9IGVycm9yc1trZXlzWzBdXTtcclxuXHJcbiAgICAgICAgLy8gVmFsaWRhdGlvbiBQYXJhbWV0ZXJzXHJcbiAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHt9O1xyXG4gICAgICAgIGlmIChlcnJvckl0ZW0ucGFyYW1ldGVycyAhPT0gbnVsbCAmJiBlcnJvckl0ZW0ucGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIGVycm9ySXRlbS5wYXJhbWV0ZXJzLmZvckVhY2goKHYsIGspID0+IHtcclxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNba10gPSB2O1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGFyYW1ldGVyc1snRklFTEQnXSA9IGVycm9ySXRlbS5maWVsZE5hbWU7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzLmxuZ1Jlc291cmNlU2VydmljZS5HZXRTdHJpbmcoZXJyb3JJdGVtLmVycm9yTWVzc2FnZUtleSwgcGFyYW1ldGVycyk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbml0IEV2ZW50XHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBuZ09uSW5pdCgpIHtcclxuICAgICAgICAvLyByZWNlaXZlIGZvcm0gdmlhIGZvcm1jb250cm9sbmFtZSBvciBmb3JtY29udHJvbCBpbnN0YW5jZVxyXG4gICAgICAgIGNvbnN0IGZvcm1Db250cm9sID0gdGhpcy5pbmplY3Rvci5nZXQoTmdDb250cm9sLCBudWxsKTtcclxuICAgICAgICBpZiAoZm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQ29udHJvbE5hbWUpIHtcclxuICAgICAgICAgICAgY29uc3QgZm9ybSA9IHRoaXMuaW5qZWN0b3IuZ2V0KEZvcm1Hcm91cERpcmVjdGl2ZSwgbnVsbCk7XHJcbiAgICAgICAgICAgIHRoaXMubmdDb250cm9sID0gZm9ybS5nZXRDb250cm9sKGZvcm1Db250cm9sKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoZm9ybUNvbnRyb2wpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdDb250cm9sID0gZm9ybUNvbnRyb2wuY29udHJvbCBhcyBGb3JtQ29udHJvbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5VcGRhdGVMYWJlbFRvQ29udHJvbCgpO1xyXG5cclxuICAgICAgICAvLyBzZXQgbGFiZWwgc2l6ZXMgZnJvbSBmb3JtbGF5b3V0IGRpcmVjdGl2ZVxyXG4gICAgICAgIHRoaXMuc2V0TGFiZWxTaXplcygpO1xyXG5cclxuICAgICAgICAvLyBzZXQgY29tcG9uZW50IGhlaWd0aCBmcm9tIGZyb21sYXlvdXQgZGlyZWN0aXZlXHJcbiAgICAgICAgdGhpcy5zZXRDb21wb25lbnRIZWlnaHQoKTtcclxuXHJcbiAgICAgICAgLy8gc2V0IGFkYXB0aXZlIGxhYmVsIHByb3BlcnR5IGZyb20gZm9ybWxheW91dCBkaXJlY3RpdmVcclxuICAgICAgICB0aGlzLnNldElzQWRhcHRpdmVMYWJlbCgpO1xyXG5cclxuICAgICAgICAvLyBzZXQgbWV0aG9kIHRvIGRpc3BsYXkgaGVscHRleHRcclxuICAgICAgICB0aGlzLnNldEhlbHBUZXh0TW9kZSgpO1xyXG5cclxuICAgICAgICAvLyBzZXQgU3BsaXRNb2RlIGZvciBMYWJlbHNcclxuICAgICAgICB0aGlzLnNldExhYmVsU3BsaXRNb2RlKCk7XHJcblxyXG4gICAgICAgIHRoaXMuT25DbGFzc0luaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZGUgZXJnaWJ0IGJvb2xlYW4gdG91Y2hlZCA9IHRydWVcclxuICAgICAqL1xyXG4gICAgcHVibGljIG9uVG91Y2goKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fdG91Y2hlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVUb3VjaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kZSwgZGFtaXQgYW5kZXJlIENvbnRyb2xzIMOkbmRlcnVuZ2VuIGltIENvbnRyb2wgbWl0YmVrb21tZW4ga8O2bm5lblxyXG4gICAgICogWnVyIMOEbmRlcnVuZ3NpbmZvIGRpZSBNZXRob2RlIHByb3BhZ2F0ZUNoYW5nZSBhdWZydWZlbi5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlID0gKG9iaikgPT4gZm4ob2JqKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZGUsIGRhbWl0IGFuZGVyZSBDb250cm9scyDDpG5kZXJ1bmdlbiBtaXRiZWtvbW1lbiwgd2VubiBkYXMgQ29udHJvbCBha3RpdmllcnQgKEZvY3VzKSB3aXJkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMucHJvcGFnYXRlVG91Y2ggPSAob2JqKSA9PiBmbihvYmopO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kZSByZWdpc3RyaWVydCDDhG5kZXJ1bmdlbiBiZWkgZGVyIFZhbGlkaWVydW5nXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyByZWdpc3Rlck9uVmFsaWRhdG9yQ2hhbmdlKGZuOiAoKSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UgPSBmbjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHp0IGRhcyBDb250cm9sIGF1ZiBEaXNhYmxlZFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fZGlzYWJsZWRGb3JtID0gaXNEaXNhYmxlZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZGUgZGllIGRlbiBXZXJ0IGRlcyBJbnB1dHMgc2V0enRcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldFZhbHVlKHY6IFZBTFVFKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy52YWx1ZSA9IHY7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBWYWxpZGF0b3IgTWV0aG9kZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdmFsaWRhdGUoYzogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGVycm9yOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9IHRoaXMudmFsaWRhdGVEYXRhKGMpO1xyXG4gICAgICAgIHJldHVybiBlcnJvcjtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFic3RyYWt0ZSBWYWxpZGF0b3IgTWV0aG9kZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgYWJzdHJhY3QgdmFsaWRhdGVEYXRhKGM6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTWV0aG9kZSB6dW0gc2NocmVpYmVuIHZvbiBXZXJ0ZW4gYXVzIGRlbSBNb2RlbCBpbiBkYXMgQ29udHJvbFxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogVkFMVUUpIHtcclxuICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vICNlbmRyZWdpb24gUHVibGljIE1ldGhvZHNcclxuXHJcbiAgICAvLyAjcmVnaW9uIFByb3RlY3RlZCBNZXRob2RzXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBNZXRob2QgY2FuIE92ZXJ3cml0ZW4gaW4gUGFyZW50IENsYXNzZXNcclxuICAgICAqIEBwYXJhbSB2YWx1ZSBXZXJ0IHdlbGNoZXIgaW4gZGVuIGtvcnJla3RlbiBUeXAga29udmVydGllcnQgd2VyZGVuIHNvbGxcclxuICAgICAqIEByZXR1cm5zIFdlcnQgaW0ga29ycmVrdGVuIFR5cFxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgQ29udmVydElucHV0VmFsdWUodmFsdWU6IFZBTFVFKTogVkFMVUUge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZGUgZXJnaWJ0IERlY2ltYWwgU3ltYm9sXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBHZXREZWNpbWFsU3ltYm9sKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuICcuJztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCBjYW4gYmUgdXNlZCB0byBTZXQgUHJvcGVydGllcyBhdCBDbGFzcyBJbml0XHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBPbkNsYXNzSW5pdCgpOiB2b2lkIHt9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBa3R1YWxpc2llcnQgZGVuIE5nTW9kZWwgV2VydCB1bmQgZGllIEfDvGx0aWdrZWl0IGRlcyBWYWxpZGF0b3JzIGRlcyBDb250cm9sc1xyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgVXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5uZ0NvbnRyb2wpIHtcclxuICAgICAgICAgICAgdGhpcy5uZ0NvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyAjZW5kcmVnaW9uIFByb3RlY3RlZCBNZXRob2RzXHJcblxyXG4gICAgLy8gI3JlZ2lvbiBQcml2YXRlIE1ldGhvZHNcclxuXHJcbiAgICBwcml2YXRlIFVwZGF0ZUxhYmVsVG9Db250cm9sKCk6IHZvaWQge1xyXG4gICAgICAgIC8vIEhBQ0s6IEFkZCBhZGRpdGlvbiBwcm9wZXJ0eSB0byBGb3JtQ29udHJvbC4gQ2FuIGJlIGZpeGVkIGlmIHNvbHV0aW9uIGZvciB0aWNrZXQ6IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvaXNzdWVzLzE5Njg2XHJcbiAgICAgICAgaWYgKHRoaXMubmdDb250cm9sKSB7XHJcbiAgICAgICAgICAgICh0aGlzLm5nQ29udHJvbCBhcyB1bmtub3duIGFzIElBYnN0cmFjdENvbnRyb2xMYWJlbEV4dGVuc2lvbikuY29udHJvbGxhYmVsID0gdGhpcy5sYWJlbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgY29tcG9uZW50IGhlaWdodCBmcm9tIHByb3BlcnR5IG9yIHBhcmVudCBsYXlvdXQgY29udHJvbFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIHNldENvbXBvbmVudEhlaWdodCgpIHtcclxuICAgICAgICAvLyBzZXQgc2l6ZSBleHRyYSBzbWFsbFxyXG4gICAgICAgIGlmICghdGhpcy5jb21wb25lbnRIZWlnaHQpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8uY29tcG9uZW50SGVpZ2h0KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudEhlaWdodCA9IHRoaXMuZm9ybWxheW91dC5jb21wb25lbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudEhlaWdodCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuQ29tcG9uZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IG1vZGUgZm9yIGhlbHB0ZXh0LiBDYW4gYmUgdG9vbHRpcCBvciB0ZXh0XHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc2V0SGVscFRleHRNb2RlKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5oZWxwdGV4dG1vZGUpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8uaGVscHRleHRtb2RlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhlbHB0ZXh0bW9kZSA9IHRoaXMuZm9ybWxheW91dC5oZWxwdGV4dG1vZGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhlbHB0ZXh0bW9kZSA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuSGVscHRleHRNb2RlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0IGFkYXB0aXZlIGxhYmVsIHByb3BlcnR5IGZyb20gcGFyZW50IGxheW91dCBjb250cm9sXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgc2V0SXNBZGFwdGl2ZUxhYmVsKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5pc0FkYXB0aXZlTGFiZWwpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8uaXNBZGFwdGl2ZUxhYmVsICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNBZGFwdGl2ZUxhYmVsID0gdGhpcy5mb3JtbGF5b3V0LmlzQWRhcHRpdmVMYWJlbDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNBZGFwdGl2ZUxhYmVsID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXQgbGFiZWwgc2l6ZXMgZnJvbSBwcm9wZXJ0eSBvciBwYXJlbnQgbGF5b3V0IGNvbnRyb2xcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZXRMYWJlbFNpemVzKCkge1xyXG4gICAgICAgIC8vIHNldCBzaXplIGV4dHJhIHNtYWxsXHJcbiAgICAgICAgaWYgKCF0aGlzLmxhYmVsU2l6ZVhzKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmxhYmVsU2l6ZVhzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZVhzID0gdGhpcy5mb3JtbGF5b3V0LmxhYmVsU2l6ZVhzO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbFNpemVYcyA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuTGFiZWxTaXplWHM7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNldCBzaXplIHNtYWxsXHJcbiAgICAgICAgaWYgKCF0aGlzLmxhYmVsU2l6ZVNtKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZvcm1sYXlvdXQ/LmxhYmVsU2l6ZVNtKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZVNtID0gdGhpcy5mb3JtbGF5b3V0LmxhYmVsU2l6ZVNtO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbFNpemVTbSA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuTGFiZWxTaXplU207XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNldCBzaXplIG1lZGl1bVxyXG4gICAgICAgIGlmICghdGhpcy5sYWJlbFNpemVNZCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVNZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbFNpemVNZCA9IHRoaXMuZm9ybWxheW91dC5sYWJlbFNpemVNZDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxTaXplTWQgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZU1kO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZXQgc2l6ZSBsYXJnZVxyXG4gICAgICAgIGlmICghdGhpcy5sYWJlbFNpemVMZykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVMZykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbFNpemVMZyA9IHRoaXMuZm9ybWxheW91dC5sYWJlbFNpemVMZztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxTaXplTGcgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZUxnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZXQgc2l6ZSBleHRyYSBsYXJnZVxyXG4gICAgICAgIGlmICghdGhpcy5sYWJlbFNpemVYbCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5sYWJlbFNpemVYbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sYWJlbFNpemVYbCA9IHRoaXMuZm9ybWxheW91dC5sYWJlbFNpemVYbDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubGFiZWxTaXplWGwgPSB0aGlzLmNvbmZpZ3VyYXRpb25TZXJ2aWNlLkxhYmVsU2l6ZVhsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzZXQgc2l6ZSBleHRyYSBleHRyYSBsYXJnZVxyXG4gICAgICAgIGlmICghdGhpcy5sYWJlbFNpemVYeGwpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZm9ybWxheW91dD8ubGFiZWxTaXplWHhsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZVh4bCA9IHRoaXMuZm9ybWxheW91dC5sYWJlbFNpemVYeGw7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhYmVsU2l6ZVh4bCA9IHRoaXMuY29uZmlndXJhdGlvblNlcnZpY2UuTGFiZWxTaXplWHhsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0TGFiZWxTcGxpdE1vZGUoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNwbGl0bGFiZWxhbmRoZWxwdGV4dCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5mb3JtbGF5b3V0Py5zcGxpdGxhYmVsYW5kaGVscHRleHQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3BsaXRsYWJlbGFuZGhlbHB0ZXh0ID0gdGhpcy5mb3JtbGF5b3V0LnNwbGl0bGFiZWxhbmRoZWxwdGV4dDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3BsaXRsYWJlbGFuZGhlbHB0ZXh0ID0gdGhpcy5jb25maWd1cmF0aW9uU2VydmljZS5TcGxpdExhYmVsQW5kSGVscHRleHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gI2VuZHJlZ2lvbiBQcml2YXRlIE1ldGhvZHNcclxufVxyXG4iXX0=
|