@gipisistemas/ng-core 1.1.3 → 1.1.5
Sign up to get free protection for your applications and to get access to all the features.
- package/assets/styles/colors.scss +5 -1
- package/bundles/gipisistemas-ng-core.umd.js +2098 -1285
- package/bundles/gipisistemas-ng-core.umd.js.map +1 -1
- package/bundles/gipisistemas-ng-core.umd.min.js +10 -9
- package/bundles/gipisistemas-ng-core.umd.min.js.map +1 -1
- package/core/gipi-components/models/sort.model.d.ts +3 -3
- package/core/utils/array.util.d.ts +2 -2
- package/core/utils/object.util.d.ts +3 -5
- package/core/utils/string.util.d.ts +4 -0
- package/esm2015/core/gipi-components/models/sort.model.js +1 -1
- package/esm2015/core/gipi-components/services/abstract-crud.service.js +18 -24
- package/esm2015/core/utils/array.util.js +4 -2
- package/esm2015/core/utils/object.util.js +5 -9
- package/esm2015/core/utils/string.util.js +27 -1
- package/esm2015/gipi-components.js +11 -1
- package/esm2015/shared/components/input/input.component.js +46 -23
- package/esm2015/shared/components/select-entity-paged/shared/select-search/select-search.component.js +2 -2
- package/esm2015/shared/components/table/table.component.js +1 -1
- package/esm2015/shared/gipi-components/abstract-form/abstract-form.component.js +1 -1
- package/esm2015/shared/gipi-components/button/button.component.js +18 -2
- package/esm2015/shared/gipi-components/card/card.component.js +113 -0
- package/esm2015/shared/gipi-components/datepicker/datepicker/datepicker.component.js +8 -3
- package/esm2015/shared/gipi-components/empty-state/empty-state.component.js +30 -0
- package/esm2015/shared/gipi-components/input-select-paged/input-search/input-search.component.js +2 -2
- package/esm2015/shared/gipi-components/layout-grid/col.directive.js +4 -4
- package/esm2015/shared/gipi-components/month-year-picker/month-year-picker.component.js +2 -2
- package/esm2015/shared/gipi-components/notification/notification.component.js +8 -3
- package/esm2015/shared/gipi-components/popover/shared/popover-trigger.js +4 -4
- package/esm2015/shared/gipi-components/sidebar/sidenav/sidenav.component.js +35 -3
- package/esm2015/shared/gipi-components/slide-toggle/slide-toggle.component.js +113 -0
- package/esm2015/shared/gipi-components/split-button/split-button.component.js +243 -0
- package/esm2015/shared/gipi-components/tabs/shared/dynamic-tab.directive.js +18 -0
- package/esm2015/shared/gipi-components/tabs/shared/tab.model.js +8 -0
- package/esm2015/shared/gipi-components/tabs/tab/tab.component.js +66 -0
- package/esm2015/shared/gipi-components/tabs/tab-group/tab-group.component.js +123 -0
- package/esm2015/shared/gipi-components/textarea/textarea.component.js +298 -0
- package/esm2015/shared/shared.module.js +22 -16
- package/esm2015/shared.js +1 -5
- package/esm5/core/gipi-components/models/sort.model.js +1 -1
- package/esm5/core/gipi-components/services/abstract-crud.service.js +18 -24
- package/esm5/core/utils/array.util.js +4 -3
- package/esm5/core/utils/object.util.js +5 -9
- package/esm5/core/utils/string.util.js +27 -1
- package/esm5/gipi-components.js +11 -1
- package/esm5/shared/components/input/input.component.js +46 -23
- package/esm5/shared/components/select-entity-paged/shared/select-search/select-search.component.js +2 -2
- package/esm5/shared/components/table/table.component.js +1 -1
- package/esm5/shared/gipi-components/abstract-form/abstract-form.component.js +1 -1
- package/esm5/shared/gipi-components/button/button.component.js +22 -2
- package/esm5/shared/gipi-components/card/card.component.js +135 -0
- package/esm5/shared/gipi-components/datepicker/datepicker/datepicker.component.js +8 -3
- package/esm5/shared/gipi-components/empty-state/empty-state.component.js +33 -0
- package/esm5/shared/gipi-components/input-select-paged/input-search/input-search.component.js +2 -2
- package/esm5/shared/gipi-components/layout-grid/col.directive.js +4 -4
- package/esm5/shared/gipi-components/month-year-picker/month-year-picker.component.js +2 -2
- package/esm5/shared/gipi-components/notification/notification.component.js +8 -3
- package/esm5/shared/gipi-components/popover/shared/popover-trigger.js +4 -4
- package/esm5/shared/gipi-components/sidebar/sidenav/sidenav.component.js +35 -3
- package/esm5/shared/gipi-components/slide-toggle/slide-toggle.component.js +127 -0
- package/esm5/shared/gipi-components/split-button/split-button.component.js +249 -0
- package/esm5/shared/gipi-components/tabs/shared/dynamic-tab.directive.js +19 -0
- package/esm5/shared/gipi-components/tabs/shared/tab.model.js +10 -0
- package/esm5/shared/gipi-components/tabs/tab/tab.component.js +67 -0
- package/esm5/shared/gipi-components/tabs/tab-group/tab-group.component.js +131 -0
- package/esm5/shared/gipi-components/textarea/textarea.component.js +352 -0
- package/esm5/shared/shared.module.js +22 -16
- package/esm5/shared.js +1 -5
- package/fesm2015/gipisistemas-ng-core.js +1991 -1274
- package/fesm2015/gipisistemas-ng-core.js.map +1 -1
- package/fesm5/gipisistemas-ng-core.js +2088 -1281
- package/fesm5/gipisistemas-ng-core.js.map +1 -1
- package/gipi-components.d.ts +9 -0
- package/gipisistemas-ng-core.metadata.json +1 -1
- package/package.json +1 -2
- package/shared/components/input/input.component.d.ts +13 -11
- package/shared/components/table/table.component.d.ts +3 -3
- package/shared/gipi-components/button/button.component.d.ts +14 -0
- package/shared/gipi-components/card/card.component.d.ts +23 -0
- package/shared/gipi-components/empty-state/empty-state.component.d.ts +5 -0
- package/shared/gipi-components/notification/notification.component.d.ts +1 -0
- package/shared/gipi-components/sidebar/sidenav/sidenav.component.d.ts +7 -0
- package/shared/gipi-components/slide-toggle/slide-toggle.component.d.ts +27 -0
- package/shared/gipi-components/split-button/split-button.component.d.ts +60 -0
- package/shared/{directives → gipi-components/tabs/shared}/dynamic-tab.directive.d.ts +1 -1
- package/shared/gipi-components/tabs/shared/tab.model.d.ts +12 -0
- package/shared/{components → gipi-components/tabs}/tab/tab.component.d.ts +4 -2
- package/shared/gipi-components/tabs/tab-group/tab-group.component.d.ts +22 -0
- package/shared/gipi-components/textarea/textarea.component.d.ts +68 -0
- package/shared.d.ts +0 -4
- package/esm2015/shared/components/select-button/select-button.component.js +0 -181
- package/esm2015/shared/components/tab/tab.component.js +0 -57
- package/esm2015/shared/components/tab-group/tab-group.component.js +0 -117
- package/esm2015/shared/directives/dynamic-tab.directive.js +0 -18
- package/esm5/shared/components/select-button/select-button.component.js +0 -195
- package/esm5/shared/components/tab/tab.component.js +0 -58
- package/esm5/shared/components/tab-group/tab-group.component.js +0 -125
- package/esm5/shared/directives/dynamic-tab.directive.js +0 -19
- package/shared/components/select-button/select-button.component.d.ts +0 -35
- package/shared/components/tab-group/tab-group.component.d.ts +0 -22
@@ -1,13 +1,16 @@
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
2
|
-
import { Component, ContentChild, ElementRef, EventEmitter, Input, Output, TemplateRef, ViewChild, forwardRef } from '@angular/core';
|
2
|
+
import { ChangeDetectorRef, Component, ContentChild, ElementRef, EventEmitter, Input, OnInit, Output, TemplateRef, ViewChild, forwardRef } from '@angular/core';
|
3
3
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
4
4
|
import { BehaviorSubject } from 'rxjs';
|
5
5
|
import { debounceTime } from 'rxjs/operators';
|
6
|
-
import { PhoneUtil } from '../../../core';
|
6
|
+
import { PhoneUtil } from '../../../core/utils/phone.util';
|
7
|
+
import { StringUtil } from '../../../core/utils/string.util';
|
7
8
|
var InputComponent = /** @class */ (function () {
|
8
|
-
function InputComponent() {
|
9
|
-
this.
|
10
|
-
this.
|
9
|
+
function InputComponent(elementRef, _changeDetectorRef) {
|
10
|
+
this.elementRef = elementRef;
|
11
|
+
this._changeDetectorRef = _changeDetectorRef;
|
12
|
+
this._inputSubject$ = new BehaviorSubject('');
|
13
|
+
this._maskPhone$ = new BehaviorSubject('');
|
11
14
|
this.tooltip = '';
|
12
15
|
this.styleClassFormField = '';
|
13
16
|
this.styleClassSuffix = '';
|
@@ -30,16 +33,21 @@ var InputComponent = /** @class */ (function () {
|
|
30
33
|
InputComponent_1 = InputComponent;
|
31
34
|
Object.defineProperty(InputComponent.prototype, "value", {
|
32
35
|
get: function () {
|
33
|
-
return this.
|
36
|
+
return this._value;
|
34
37
|
},
|
35
|
-
set: function (
|
38
|
+
set: function (value) {
|
39
|
+
var valueAux = null;
|
36
40
|
if (this.lowerCase) {
|
37
|
-
|
41
|
+
valueAux = this.checkLowercase(this.checkSpaceDrop(value));
|
38
42
|
}
|
39
43
|
else {
|
40
|
-
|
44
|
+
valueAux = this.checkUppercase(this.checkSpaceDrop(value));
|
41
45
|
}
|
42
|
-
this.
|
46
|
+
this._value = valueAux;
|
47
|
+
if (this.value !== value) {
|
48
|
+
this._changeDetectorRef.detectChanges();
|
49
|
+
}
|
50
|
+
this.onChange(this._value);
|
43
51
|
this.onTouch();
|
44
52
|
},
|
45
53
|
enumerable: false,
|
@@ -48,12 +56,13 @@ var InputComponent = /** @class */ (function () {
|
|
48
56
|
InputComponent.prototype.ngOnInit = function () {
|
49
57
|
var _this = this;
|
50
58
|
if (this.phone) {
|
51
|
-
this._inputSubject
|
52
|
-
|
59
|
+
this._inputSubject$.pipe(debounceTime(300)).subscribe(function (value) {
|
60
|
+
if (!StringUtil.isEmpty(value)) {
|
61
|
+
_this._maskPhone$.next(PhoneUtil.mask(value));
|
62
|
+
}
|
53
63
|
});
|
54
64
|
}
|
55
65
|
};
|
56
|
-
InputComponent.prototype.ngAfterViewInit = function () { };
|
57
66
|
InputComponent.prototype.registerOnChange = function (fn) {
|
58
67
|
this.onChange = fn;
|
59
68
|
};
|
@@ -61,8 +70,16 @@ var InputComponent = /** @class */ (function () {
|
|
61
70
|
this.onTouch = fn;
|
62
71
|
};
|
63
72
|
InputComponent.prototype.writeValue = function (value) {
|
73
|
+
if (this.phone && !StringUtil.isEmpty(value)) {
|
74
|
+
this._inputSubject$.next(value);
|
75
|
+
this._changeDetectorRef.detectChanges();
|
76
|
+
}
|
64
77
|
this.value = value;
|
65
78
|
};
|
79
|
+
InputComponent.prototype.setDisabledState = function (isDisabled) {
|
80
|
+
this.disabled = isDisabled;
|
81
|
+
this._changeDetectorRef.detectChanges();
|
82
|
+
};
|
66
83
|
InputComponent.prototype.checkSpaceDrop = function (value) {
|
67
84
|
if (this.spaceDrop && value) {
|
68
85
|
return value.replace(/\s/g, '');
|
@@ -92,23 +109,27 @@ var InputComponent = /** @class */ (function () {
|
|
92
109
|
this.onTouch();
|
93
110
|
}
|
94
111
|
};
|
95
|
-
InputComponent.prototype.
|
112
|
+
InputComponent.prototype.onInputPhoneKeydown = function (event) {
|
96
113
|
if (!this.phone) {
|
97
114
|
return;
|
98
115
|
}
|
99
116
|
var value = PhoneUtil.removeCharacters(event.target.value);
|
100
117
|
var key = event.key;
|
101
|
-
if (/\d/.test(key) && value.length < 12) {
|
102
|
-
this._maskPhone
|
118
|
+
if (/\d/.test(key) && ((value.trim().length < 8) || (value.trim().length > 12))) {
|
119
|
+
this._maskPhone$.next('0*');
|
103
120
|
}
|
104
121
|
};
|
105
122
|
InputComponent.prototype.onInputPhoneChange = function (value) {
|
106
123
|
if (!this.phone) {
|
107
124
|
return;
|
108
125
|
}
|
109
|
-
this._inputSubject
|
126
|
+
this._inputSubject$.next(value);
|
110
127
|
};
|
111
128
|
var InputComponent_1;
|
129
|
+
InputComponent.ctorParameters = function () { return [
|
130
|
+
{ type: ElementRef },
|
131
|
+
{ type: ChangeDetectorRef }
|
132
|
+
]; };
|
112
133
|
__decorate([
|
113
134
|
ViewChild('input', { static: false, read: ElementRef }),
|
114
135
|
__metadata("design:type", ElementRef)
|
@@ -178,9 +199,10 @@ var InputComponent = /** @class */ (function () {
|
|
178
199
|
__metadata("design:type", String)
|
179
200
|
], InputComponent.prototype, "appearance", void 0);
|
180
201
|
__decorate([
|
181
|
-
Input(
|
182
|
-
__metadata("design:type", Object)
|
183
|
-
|
202
|
+
Input(),
|
203
|
+
__metadata("design:type", Object),
|
204
|
+
__metadata("design:paramtypes", [Object])
|
205
|
+
], InputComponent.prototype, "value", null);
|
184
206
|
__decorate([
|
185
207
|
Input(),
|
186
208
|
__metadata("design:type", String)
|
@@ -224,7 +246,7 @@ var InputComponent = /** @class */ (function () {
|
|
224
246
|
InputComponent = InputComponent_1 = __decorate([
|
225
247
|
Component({
|
226
248
|
selector: 'itss-input',
|
227
|
-
template: "<div fxLayout=\"column\">\n <mat-label *ngIf=\"label\">\n {{ label }}\n <span *ngIf=\"required && label\"> * </span>\n <gipi-helpful-tip *ngIf=\"tooltip && label\"\n [tooltip]=\"tooltip\">\n </gipi-helpful-tip>\n </mat-label>\n\n <ng-container *ngIf=\"hidePasswordManager && (type === 'password')\">\n <input style=\"opacity: 0;position: absolute;\">\n <input type=\"password\"\n style=\"opacity: 0;position: absolute;\">\n </ng-container>\n\n <mat-form-field [appearance]=\"appearance\"\n [class]=\"styleClassFormField\">\n <input matInput\n #input\n *ngIf=\"mask\"\n autocomplete=\"off\"\n upperCase\n lowerCase\n spaceDrop\n [enabledUpperCase]=\"upperCase\"\n [enabledLowerCase]=\"lowerCase\"\n [spaceDrop]=\"spaceDrop\"\n [name]=\"name\"\n [readonly]=\"readonly\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"value\"\n [type]=\"type\"\n [min]=\"min\"\n [max]=\"max\"\n [maxlength]=\"maxlength\"\n [mask]=\"phone ? (_maskPhone | async) : mask\"\n [dropSpecialCharacters]=\"dropSpecialCharacters\"\n [patterns]=\"patterns\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (
|
249
|
+
template: "<div fxLayout=\"column\">\n <mat-label *ngIf=\"label\">\n {{ label }}\n <span *ngIf=\"required && label\"> * </span>\n <gipi-helpful-tip *ngIf=\"tooltip && label\"\n [tooltip]=\"tooltip\">\n </gipi-helpful-tip>\n </mat-label>\n\n <ng-container *ngIf=\"hidePasswordManager && (type === 'password')\">\n <input style=\"opacity: 0;position: absolute;\">\n <input type=\"password\"\n style=\"opacity: 0;position: absolute;\">\n </ng-container>\n\n <mat-form-field [appearance]=\"appearance\"\n [class]=\"styleClassFormField\">\n <input matInput\n #input\n *ngIf=\"mask || phone\"\n autocomplete=\"off\"\n upperCase\n lowerCase\n spaceDrop\n [enabledUpperCase]=\"upperCase\"\n [enabledLowerCase]=\"lowerCase\"\n [spaceDrop]=\"spaceDrop\"\n [name]=\"name\"\n [readonly]=\"readonly\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"value\"\n [type]=\"type\"\n [min]=\"min\"\n [max]=\"max\"\n [maxlength]=\"maxlength\"\n [mask]=\"phone ? (_maskPhone$ | async) : mask\"\n [dropSpecialCharacters]=\"dropSpecialCharacters\"\n [patterns]=\"patterns\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\"\n (keydown)=\"onInputPhoneKeydown($event)\"\n (ngModelChange)=\"onInputPhoneChange($event)\">\n\n <input matInput\n #input\n *ngIf=\"!mask && !phone\"\n [name]=\"name\"\n [readonly]=\"readonly\"\n [placeholder]=\"placeholder\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [(ngModel)]=\"value\"\n autocomplete=\"off\"\n upperCase\n [enabledUpperCase]=\"upperCase\"\n [type]=\"type\"\n [min]=\"min\"\n [max]=\"max\"\n [maxlength]=\"maxlength\"\n [mask]=\"''\"\n spaceDrop\n [spaceDrop]=\"spaceDrop\"\n (focus)=\"onFocus($event)\"\n (blur)=\"onBlur($event)\">\n\n <mat-spinner matPrefix\n *ngIf=\"loading\"\n mode=\"indeterminate\"\n diameter=\"17\">\n </mat-spinner>\n\n <div *ngIf=\"suffixRef\"\n matSuffix\n [class]=\"styleClassSuffix\">\n <ng-template [ngTemplateOutlet]=\"suffixRef\"> </ng-template>\n </div>\n </mat-form-field>\n</div>",
|
228
250
|
providers: [
|
229
251
|
{
|
230
252
|
provide: NG_VALUE_ACCESSOR,
|
@@ -234,9 +256,10 @@ var InputComponent = /** @class */ (function () {
|
|
234
256
|
],
|
235
257
|
styles: ["mat-label span{color:#d14014!important}"]
|
236
258
|
}),
|
237
|
-
__metadata("design:paramtypes", [
|
259
|
+
__metadata("design:paramtypes", [ElementRef,
|
260
|
+
ChangeDetectorRef])
|
238
261
|
], InputComponent);
|
239
262
|
return InputComponent;
|
240
263
|
}());
|
241
264
|
export { InputComponent };
|
242
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdpcGlzaXN0ZW1hcy9uZy1jb3JlLyIsInNvdXJjZXMiOlsic2hhcmVkL2NvbXBvbmVudHMvaW5wdXQvaW5wdXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQWlCLFNBQVMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVKLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBYzFDO0lBMEVJO1FBcEVRLGtCQUFhLEdBQTRCLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWxFLGVBQVUsR0FBNEIsSUFBSSxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7UUFNNUQsWUFBTyxHQUFXLEVBQUUsQ0FBQztRQUVyQix3QkFBbUIsR0FBVyxFQUFFLENBQUM7UUFFakMscUJBQWdCLEdBQVcsRUFBRSxDQUFDO1FBUTlCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFMUIsd0JBQW1CLEdBQVksS0FBSyxDQUFDO1FBRXJDLGNBQVMsR0FBVyxHQUFHLENBQUM7UUFFeEIsU0FBSSxHQUFXLE1BQU0sQ0FBQztRQU10QixlQUFVLEdBQVcsU0FBUyxDQUFDO1FBa0IvQixVQUFLLEdBQVksS0FBSyxDQUFDO1FBRXZCLFlBQU8sR0FBWSxLQUFLLENBQUM7UUFFekIsMEJBQXFCLEdBQVksSUFBSSxDQUFDO1FBRXRDLGNBQVMsR0FBWSxLQUFLLENBQUM7UUFFM0IsY0FBUyxHQUFZ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dENoaWxkLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgZm9yd2FyZFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFBob25lVXRpbCB9IGZyb20gJy4uLy4uLy4uL2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2l0c3MtaW5wdXQnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9pbnB1dC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vaW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKTogdHlwZW9mIElucHV0Q29tcG9uZW50ID0+IElucHV0Q29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIElucHV0Q29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgICBAVmlld0NoaWxkKCdpbnB1dCcsIHsgc3RhdGljOiBmYWxzZSwgcmVhZDogRWxlbWVudFJlZiB9KSBfZWxlbWVudFJlZjogRWxlbWVudFJlZjtcblxuICAgIEBDb250ZW50Q2hpbGQoJ3N1ZmZpeCcsIHsgc3RhdGljOiBmYWxzZSB9KSBzdWZmaXhSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBwcml2YXRlIF9pbnB1dFN1YmplY3Q6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdCgnJyk7XG5cbiAgICBwdWJsaWMgX21hc2tQaG9uZTogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcblxuICAgIEBJbnB1dCgpIG5hbWU6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSB0b29sdGlwOiBzdHJpbmcgPSAnJztcblxuICAgIEBJbnB1dCgpIHN0eWxlQ2xhc3NGb3JtRmllbGQ6IHN0cmluZyA9ICcnO1xuXG4gICAgQElucHV0KCkgc3R5bGVDbGFzc1N1ZmZpeDogc3RyaW5nID0gJyc7XG5cbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBoaWRlUGFzc3dvcmRNYW5hZ2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBtYXhsZW5ndGg6IG51bWJlciA9IDI1MDtcblxuICAgIEBJbnB1dCgpIHR5cGU6IHN0cmluZyA9ICd0ZXh0JztcblxuICAgIEBJbnB1dCgpIG1pbjtcblxuICAgIEBJbnB1dCgpIG1heDtcblxuICAgIEBJbnB1dCgpIGFwcGVhcmFuY2U6IHN0cmluZyA9ICdvdXRsaW5lJztcblxuICAgIEBJbnB1dCgndmFsdWUnKSB2YWw6IGFueTtcbiAgICBnZXQgdmFsdWUoKTogYW55IHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsO1xuICAgIH1cbiAgICBzZXQgdmFsdWUodmFsOiBhbnkpIHtcbiAgICAgICAgaWYgKHRoaXMubG93ZXJDYXNlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbCA9IHRoaXMuY2hlY2tMb3dlcmNhc2UodGhpcy5jaGVja1NwYWNlRHJvcCh2YWwpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmFsID0gdGhpcy5jaGVja1VwcGVyY2FzZSh0aGlzLmNoZWNrU3BhY2VEcm9wKHZhbCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25DaGFuZ2UodGhpcy52YWwpO1xuICAgICAgICB0aGlzLm9uVG91Y2goKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBtYXNrOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsO1xuXG4gICAgQElucHV0KCkgcGhvbmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGxvYWRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGRyb3BTcGVjaWFsQ2hhcmFjdGVyczogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKSB1cHBlckNhc2U6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGxvd2VyQ2FzZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgcGF0dGVybnM6IGFueTtcblxuICAgIEBJbnB1dCgpIHNwYWNlRHJvcDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQE91dHB1dCgpIGZvY3VzOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgQE91dHB1dCgpIGJsdXI6IEV2ZW50RW1pdHRlcjxFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHsgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnBob25lKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnB1dFN1YmplY3QucGlwZShcbiAgICAgICAgICAgICAgICBkZWJvdW5jZVRpbWUoMzAwKVxuICAgICAgICAgICAgKS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX21hc2tQaG9uZS5uZXh0KFBob25lVXRpbC5tYXNrKHZhbHVlKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHsgfVxuXG4gICAgb25DaGFuZ2U6IGFueSA9ICgpID0+IHsgfTtcblxuICAgIG9uVG91Y2g6IGFueSA9ICgpID0+IHsgfTtcblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2ggPSBmbjtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgIH1cblxuICAgIGNoZWNrU3BhY2VEcm9wKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy5zcGFjZURyb3AgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjaGVja1VwcGVyY2FzZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMudXBwZXJDYXNlICYmIHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgY2hlY2tMb3dlcmNhc2UodmFsdWU6IGFueSk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLmxvd2VyQ2FzZSAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIG9uRm9jdXMoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgdGhpcy5mb2N1cy5lbWl0KGV2ZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uQmx1cihldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmJsdXIuZW1pdChldmVudCk7XG4gICAgICAgICAgICB0aGlzLm9uVG91Y2goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSW5wdXRQaG9uZUtleXVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5waG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHZhbHVlID0gUGhvbmVVdGlsLnJlbW92ZUNoYXJhY3RlcnMoKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcblxuICAgICAgICBpZiAoL1xcZC8udGVzdChrZXkpICYmIHZhbHVlLmxlbmd0aCA8IDEyKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXNrUGhvbmUubmV4dCgnMConKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uSW5wdXRQaG9uZUNoYW5nZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5waG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5faW5wdXRTdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgIH1cblxufVxuIl19
|
265
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdpcGlzaXN0ZW1hcy9uZy1jb3JlLyIsInNvdXJjZXMiOlsic2hhcmVkL2NvbXBvbmVudHMvaW5wdXQvaW5wdXQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hLLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBYzdEO0lBa0ZJLHdCQUNXLFVBQXNCLEVBQ3JCLGtCQUFxQztRQUR0QyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3JCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBbUI7UUE5RXpDLG1CQUFjLEdBQTRCLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRW5FLGdCQUFXLEdBQTRCLElBQUksZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBTTdELFlBQU8sR0FBVyxFQUFFLENBQUM7UUFFckIsd0JBQW1CLEdBQVcsRUFBRSxDQUFDO1FBRWpDLHFCQUFnQixHQUFXLEVBQUUsQ0FBQztRQVE5QixhQUFRLEdBQVksS0FBSyxDQUFDO1FBRTFCLHdCQUFtQixHQUFZLEtBQUssQ0FBQztRQUVyQyxjQUFTLEdBQVcsR0FBRyxDQUFDO1FBRXhCLFNBQUksR0FBVyxNQUFNLENB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QUVyQjtRQUFSLEtBQUssRUFBRTs7K0NBQXNCO0lBRXJCO1FBQVIsS0FBSyxFQUFFOztzREFBZ0M7SUFHL0I7UUFBUixLQUFLLEVBQUU7OzsrQ0FFUDtJQW1CUTtRQUFSLEtBQUssRUFBRTs7Z0RBQWlDO0lBRWhDO1FBQVIsS0FBSyxFQUFFOztpREFBd0I7SUFFdkI7UUFBUixLQUFLLEVBQUU7O21EQUEwQjtJQUV6QjtRQUFSLEtBQUssRUFBRTs7aUVBQXVDO0lBRXRDO1FBQVIsS0FBSyxFQUFFOztxREFBNEI7SUFFM0I7UUFBUixLQUFLLEVBQUU7O3FEQUE0QjtJQUUzQjtRQUFSLEtBQUssRUFBRTs7b0RBQWU7SUFFZDtRQUFSLEtBQUssRUFBRTs7cURBQTRCO0lBRTFCO1FBQVQsTUFBTSxFQUFFO2tDQUFRLFlBQVk7aURBQTZCO0lBRWhEO1FBQVQsTUFBTSxFQUFFO2tDQUFPLFlBQVk7Z0RBQTZCO0lBaEZoRCxjQUFjO1FBWjFCLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxZQUFZO1lBQ3RCLDIxRkFBcUM7WUFFckMsU0FBUyxFQUFFO2dCQUNQO29CQUNJLE9BQU8sRUFBRSxpQkFBaUI7b0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsY0FBNkIsT0FBQSxnQkFBYyxFQUFkLENBQWMsQ0FBQztvQkFDcEUsS0FBSyxFQUFFLElBQUk7aUJBQ2Q7YUFDSjs7U0FDSixDQUFDO3lDQW9GeUIsVUFBVTtZQUNELGlCQUFpQjtPQXBGeEMsY0FBYyxDQW1MMUI7SUFBRCxxQkFBQztDQUFBLEFBbkxELElBbUxDO1NBbkxZLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUGhvbmVVdGlsIH0gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9waG9uZS51dGlsJztcbmltcG9ydCB7IFN0cmluZ1V0aWwgfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL3N0cmluZy51dGlsJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdpdHNzLWlucHV0JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vaW5wdXQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2lucHV0LmNvbXBvbmVudC5zY3NzJ10sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCk6IHR5cGVvZiBJbnB1dENvbXBvbmVudCA9PiBJbnB1dENvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBPbkluaXQge1xuXG4gICAgQFZpZXdDaGlsZCgnaW5wdXQnLCB7IHN0YXRpYzogZmFsc2UsIHJlYWQ6IEVsZW1lbnRSZWYgfSkgX2VsZW1lbnRSZWY6IEVsZW1lbnRSZWY7XG5cbiAgICBAQ29udGVudENoaWxkKCdzdWZmaXgnLCB7IHN0YXRpYzogZmFsc2UgfSkgc3VmZml4UmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgcHJpdmF0ZSBfaW5wdXRTdWJqZWN0JDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcblxuICAgIHB1YmxpYyBfbWFza1Bob25lJDogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0KCcnKTtcblxuICAgIEBJbnB1dCgpIG5hbWU6IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGxhYmVsOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSB0b29sdGlwOiBzdHJpbmcgPSAnJztcblxuICAgIEBJbnB1dCgpIHN0eWxlQ2xhc3NGb3JtRmllbGQ6IHN0cmluZyA9ICcnO1xuXG4gICAgQElucHV0KCkgc3R5bGVDbGFzc1N1ZmZpeDogc3RyaW5nID0gJyc7XG5cbiAgICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuXG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIHJlYWRvbmx5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBoaWRlUGFzc3dvcmRNYW5hZ2VyOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBtYXhsZW5ndGg6IG51bWJlciA9IDI1MDtcblxuICAgIEBJbnB1dCgpIHR5cGU6IHN0cmluZyA9ICd0ZXh0JztcblxuICAgIEBJbnB1dCgpIG1pbjogc3RyaW5nIHwgbnVtYmVyO1xuXG4gICAgQElucHV0KCkgbWF4OiBzdHJpbmcgfCBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBhcHBlYXJhbmNlOiBzdHJpbmcgPSAnb3V0bGluZSc7XG5cbiAgICBwcml2YXRlIF92YWx1ZTogYW55O1xuICAgIEBJbnB1dCgpIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XG4gICAgfVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGxldCB2YWx1ZUF1eDogYW55ID0gbnVsbDtcblxuICAgICAgICBpZiAodGhpcy5sb3dlckNhc2UpIHtcbiAgICAgICAgICAgIHZhbHVlQXV4ID0gdGhpcy5jaGVja0xvd2VyY2FzZSh0aGlzLmNoZWNrU3BhY2VEcm9wKHZhbHVlKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YWx1ZUF1eCA9IHRoaXMuY2hlY2tVcHBlcmNhc2UodGhpcy5jaGVja1NwYWNlRHJvcCh2YWx1ZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fdmFsdWUgPSB2YWx1ZUF1eDtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgIT09IHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuX3ZhbHVlKTtcbiAgICAgICAgdGhpcy5vblRvdWNoKCk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgbWFzazogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbDtcblxuICAgIEBJbnB1dCgpIHBob25lOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBkcm9wU3BlY2lhbENoYXJhY3RlcnM6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgQElucHV0KCkgdXBwZXJDYXNlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBsb3dlckNhc2U6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHBhdHRlcm5zOiBhbnk7XG5cbiAgICBASW5wdXQoKSBzcGFjZURyb3A6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBPdXRwdXQoKSBmb2N1czogRXZlbnRFbWl0dGVyPEV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIEBPdXRwdXQoKSBibHVyOiBFdmVudEVtaXR0ZXI8RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHB1YmxpYyBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBwcml2YXRlIF9jaGFuZ2VEZXRlY3RvclJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgKSB7IH1cblxuICAgIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5waG9uZSkge1xuICAgICAgICAgICAgdGhpcy5faW5wdXRTdWJqZWN0JC5waXBlKFxuICAgICAgICAgICAgICAgIGRlYm91bmNlVGltZSgzMDApXG4gICAgICAgICAgICApLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFTdHJpbmdVdGlsLmlzRW1wdHkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX21hc2tQaG9uZSQubmV4dChQaG9uZVV0aWwubWFzayh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25DaGFuZ2U6IGFueSA9ICgpID0+IHsgfTtcblxuICAgIG9uVG91Y2g6IGFueSA9ICgpID0+IHsgfTtcblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2ggPSBmbjtcbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucGhvbmUgJiYgIVN0cmluZ1V0aWwuaXNFbXB0eSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2lucHV0U3ViamVjdCQubmV4dCh2YWx1ZSlcbiAgICAgICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBzZXREaXNhYmxlZFN0YXRlPyhpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgICAgICB0aGlzLl9jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgY2hlY2tTcGFjZURyb3AodmFsdWU6IGFueSk6IGFueSB7XG4gICAgICAgIGlmICh0aGlzLnNwYWNlRHJvcCAmJiB2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1xccy9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGNoZWNrVXBwZXJjYXNlKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgICAgICBpZiAodGhpcy51cHBlckNhc2UgJiYgdmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjaGVja0xvd2VyY2FzZSh2YWx1ZTogYW55KTogYW55IHtcbiAgICAgICAgaWYgKHRoaXMubG93ZXJDYXNlICYmIHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgb25Gb2N1cyhldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzLmVtaXQoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25CbHVyKGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuYmx1ci5lbWl0KGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uSW5wdXRQaG9uZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnBob25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWUgPSBQaG9uZVV0aWwucmVtb3ZlQ2hhcmFjdGVycygoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuXG4gICAgICAgIGlmICgvXFxkLy50ZXN0KGtleSkgJiYgKCh2YWx1ZS50cmltKCkubGVuZ3RoIDwgOCkgfHwgKHZhbHVlLnRyaW0oKS5sZW5ndGggPiAxMikpKSB7XG4gICAgICAgICAgICB0aGlzLl9tYXNrUGhvbmUkLm5leHQoJzAqJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25JbnB1dFBob25lQ2hhbmdlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnBob25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pbnB1dFN1YmplY3QkLm5leHQodmFsdWUpO1xuICAgIH1cblxufVxuIl19
|
package/esm5/shared/components/select-entity-paged/shared/select-search/select-search.component.js
CHANGED
@@ -563,7 +563,7 @@ var SelectSearchComponent = /** @class */ (function () {
|
|
563
563
|
SelectSearchComponent = SelectSearchComponent_1 = __decorate([
|
564
564
|
Component({
|
565
565
|
selector: 'itss-input-search',
|
566
|
-
template: "<!-- Espa\u00E7o reservado para ajustar o deslocamento vertical dos elementos mat-option -->\n<input matInput\n class=\"mat-select-search-input mat-select-search-hidden\" />\n\n<!-- Note: o mat-datepicker-content mat-tab-header \u00E9 necess\u00E1rio para herdar as cores do tema do material, consulte PR n\u00BA 22 -->\n<div #innerSelectSearch\n class=\"mat-select-search-inner mat-typography mat-datepicker-content mat-tab-header\"\n [ngClass]=\"{'mat-select-search-inner-multiple': matSelect.multiple, 'mat-select-search-inner-toggle-all': _isToggleAllCheckboxVisible() }\">\n\n <mat-checkbox *ngIf=\"_isToggleAllCheckboxVisible()\"\n class=\"mat-select-search-toggle-all-checkbox\"\n color=\"primary\"\n [color]=\"matFormField?.color\"\n [disabled]=\"searching\"\n [matTooltip]=\"toggleAllCheckboxTooltipMessage\"\n matTooltipClass=\"ngx-mat-select-search-toggle-all-tooltip\"\n [matTooltipPosition]=\"toggleAllCheckboxTooltipPosition\"\n [(ngModel)]=\"toggleAllCheckboxChecked\"\n [(indeterminate)]=\"toggleAllCheckboxIndeterminate\">\n </mat-checkbox>\n\n <input class=\"mat-select-search-input mat-input-element\"\n autocomplete=\"off\"\n [type]=\"type\"\n [formControl]=\"_formControl\"\n #searchSelectInput\n (keydown)=\"_handleKeydown($event)\"\n (keyup)=\"_handleKeyup($event)\"\n (blur)=\"onBlur()\"\n [placeholder]=\"placeholderLabel\"\n [attr.aria-label]=\"ariaLabel\">\n\n <mat-spinner *ngIf=\"searching\"\n class=\"mat-select-search-spinner\"\n diameter=\"16\">\n </mat-spinner>\n\n <button *ngIf=\"!hideClearSearchButton && value && !searching\"\n mat-icon-button\n aria-label=\"Clear\"\n (click)=\"_reset(true)\"\n class=\"mat-select-search-clear\">\n <ng-content *ngIf=\"clearIcon; else defaultIcon\"\n select=\"[itssSelectSearchClear]\">\n </ng-content>\n\n <ng-template #defaultIcon>\n <mat-icon [svgIcon]=\"closeSvgIcon\">\n {{ !closeSvgIcon ? closeIcon : null }}\n </mat-icon>\n </ng-template>\n </button>\n\n <ng-content select=\".mat-select-search-custom-header-content\"> </ng-content>\n\n <mat-divider> </mat-divider>\n</div>\n\n<div *ngIf=\"(_showNoEntriesFound$ | async) && !searching\"\n class=\"mat-select-search-no-entries-found\">\n <ng-content *ngIf=\"noEntriesFound; else defaultNoEntriesFound\"\n select=\"[itssSelectNoEntriesFound]\">\n </ng-content>\n\n <ng-template #defaultNoEntriesFound>\n {{ noEntriesFoundLabel }}\n </ng-template>\n</div
|
566
|
+
template: "<!-- Espa\u00E7o reservado para ajustar o deslocamento vertical dos elementos mat-option -->\n<input matInput\n class=\"mat-select-search-input mat-select-search-hidden\" />\n\n<!-- Note: o mat-datepicker-content mat-tab-header \u00E9 necess\u00E1rio para herdar as cores do tema do material, consulte PR n\u00BA 22 -->\n<div #innerSelectSearch\n class=\"mat-select-search-inner mat-typography mat-datepicker-content mat-tab-header\"\n [ngClass]=\"{'mat-select-search-inner-multiple': matSelect.multiple, 'mat-select-search-inner-toggle-all': _isToggleAllCheckboxVisible() }\">\n\n <mat-checkbox *ngIf=\"_isToggleAllCheckboxVisible()\"\n class=\"mat-select-search-toggle-all-checkbox\"\n color=\"primary\"\n [color]=\"matFormField?.color\"\n [disabled]=\"searching\"\n [matTooltip]=\"toggleAllCheckboxTooltipMessage\"\n matTooltipClass=\"ngx-mat-select-search-toggle-all-tooltip\"\n [matTooltipPosition]=\"toggleAllCheckboxTooltipPosition\"\n [(ngModel)]=\"toggleAllCheckboxChecked\"\n [(indeterminate)]=\"toggleAllCheckboxIndeterminate\">\n </mat-checkbox>\n\n <input class=\"mat-select-search-input mat-input-element\"\n autocomplete=\"off\"\n [type]=\"type\"\n [formControl]=\"_formControl\"\n #searchSelectInput\n (keydown)=\"_handleKeydown($event)\"\n (keyup)=\"_handleKeyup($event)\"\n (blur)=\"onBlur()\"\n [placeholder]=\"placeholderLabel\"\n [attr.aria-label]=\"ariaLabel\"\n aria-hidden=\"false\">\n\n <mat-spinner *ngIf=\"searching\"\n class=\"mat-select-search-spinner\"\n diameter=\"16\">\n </mat-spinner>\n\n <button *ngIf=\"!hideClearSearchButton && value && !searching\"\n mat-icon-button\n aria-label=\"Clear\"\n (click)=\"_reset(true)\"\n class=\"mat-select-search-clear\">\n <ng-content *ngIf=\"clearIcon; else defaultIcon\"\n select=\"[itssSelectSearchClear]\">\n </ng-content>\n\n <ng-template #defaultIcon>\n <mat-icon [svgIcon]=\"closeSvgIcon\">\n {{ !closeSvgIcon ? closeIcon : null }}\n </mat-icon>\n </ng-template>\n </button>\n\n <ng-content select=\".mat-select-search-custom-header-content\"> </ng-content>\n\n <mat-divider> </mat-divider>\n</div>\n\n<div *ngIf=\"(_showNoEntriesFound$ | async) && !searching\"\n class=\"mat-select-search-no-entries-found\">\n <ng-content *ngIf=\"noEntriesFound; else defaultNoEntriesFound\"\n select=\"[itssSelectNoEntriesFound]\">\n </ng-content>\n\n <ng-template #defaultNoEntriesFound>\n {{ noEntriesFoundLabel }}\n </ng-template>\n</div>",
|
567
567
|
providers: [
|
568
568
|
{
|
569
569
|
provide: NG_VALUE_ACCESSOR,
|
@@ -587,4 +587,4 @@ var SelectSearchComponent = /** @class */ (function () {
|
|
587
587
|
return SelectSearchComponent;
|
588
588
|
}());
|
589
589
|
export { SelectSearchComponent };
|
590
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXNlYXJjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZ2lwaXNpc3RlbWFzL25nLWNvcmUvIiwic291cmNlcyI6WyJzaGFyZWQvY29tcG9uZW50cy9zZWxlY3QtZW50aXR5LXBhZ2VkL3NoYXJlZC9zZWxlY3Qtc2VhcmNoL3NlbGVjdC1zZWFyY2guY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNQLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFB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SUFHckM7UUFBNUQsWUFBWSxDQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO2tDQUFZLDBCQUEwQjs0REFBQztJQUduQztRQUEvRCxZQUFZLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7a0NBQWlCLDZCQUE2QjtpRUFBQztJQS9IckcscUJBQXFCO1FBYmpDLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxtQkFBbUI7WUFDN0IsNnpGQUE2QztZQUU3QyxTQUFTLEVBQUU7Z0JBQ1A7b0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxjQUFvQyxPQUFBLHVCQUFxQixFQUFyQixDQUFxQixDQUFDO29CQUNsRixLQUFLLEVBQUUsSUFBSTtpQkFDZDthQUNKO1lBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O1NBQ2xELENBQUM7UUF3Qk8sV0FBQSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7UUFHakIsV0FBQSxRQUFRLEVBQUUsQ0FBQSxFQUFFLFdBQUEsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzdCLFdBQUEsUUFBUSxFQUFFLENBQUEsRUFBRSxXQUFBLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUNoQyxXQUFBLFFBQVEsRUFBRSxDQUFBLEVBQUUsV0FBQSxNQUFNLENBQUMsa0NBQWtDLENBQUMsQ0FBQTt5Q0FMbEIsU0FBUztZQUNwQixpQkFBaUI7WUFDbkIsYUFBYTtZQUNZLFNBQVM7WUFDSCxZQUFZO09BM0I5RCxxQkFBcUIsQ0E4ZmpDO0lBQUQsNEJBQUM7Q0FBQSxBQTlmRCxJQThmQztTQTlmWSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IEEsIERPV05fQVJST1csIEVORCwgRU5URVIsIEVTQ0FQRSwgSE9NRSwgTklORSwgU1BBQ0UsIFVQX0FSUk9XLCBaLCBaRVJPIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IFZpZXdwb3J0UnVsZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIFF1ZXJ5TGlzdCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkLCBNYXRPcHRpb24sIE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgY29tYmluZUxhdGVzdCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCBmaWx0ZXIsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBJVFNTX1NFTEVDVF9TRUFSQ0hfREVGQVVMVF9PUFRJT05TLCBJdHNzU2VsZWN0U2VhcmNoT3B0aW9ucywgY29uZmlndXJhYmxlRGVmYXVsdE9wdGlvbnMgfSBmcm9tICcuLi9kZWZhdWx0LW9wdGlvbnMnO1xuaW1wb3J0IHsgU2VsZWN0Tm9FbnRyaWVzRm91bmREaXJlY3RpdmUgfSBmcm9tICcuLi9zZWxlY3Qtbm8tZW50cmllcy1mb3VuZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2VsZWN0U2VhcmNoQ2xlYXJEaXJlY3RpdmUgfSBmcm9tICcuLi9zZWxlY3Qtc2VhcmNoLWNsZWFyLmRpcmVjdGl2ZSc7XG5cbi8qKlxuICogRXN0ZSBjb21wb25lbnRlIGZvaSByZWVzY3JpdG8gdXRpbGl6YW5kbyBzZSBkbyBwcm9qZXRvIGEgc2VndWlyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYml0aG9zdC1nbWJoL25neC1tYXQtc2VsZWN0LXNlYXJjaFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2l0c3MtaW5wdXQtc2VhcmNoJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LXNlYXJjaC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LXNlYXJjaC5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpOiB0eXBlb2YgU2VsZWN0U2VhcmNoQ29tcG9uZW50ID0+IFNlbGVjdFNlYXJjaENvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cbiAgICAvLyBWYWxvciBkZSBwZXNxdWlzYSBhdHVhbFxuICAgIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgfVxuXG4gICAgLy8gUmVmZXLDqm5jaWEgw6BzIG9ww6fDtWVzIE1hdFNlbGVjdFxuICAgIHB1YmxpYyBzZXQgX29wdGlvbnMoX29wdGlvbnM6IFF1ZXJ5TGlzdDxNYXRPcHRpb24+KSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnMkLm5leHQoX29wdGlvbnMpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IF9vcHRpb25zKCk6IFF1ZXJ5TGlzdDxNYXRPcHRpb24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnMkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLy8gQWRpY2lvbmEgYSBjbGFzc2UgbWF0LXNlbGVjdC1zZWFyY2gtaW5zaWRlLW1hdC1vcHRpb24gc2UgbyBpdHNzLXNlbGVjdC1zZWFyY2ggZXN0aXZlclxuICAgIC8vIGRlbnRybyBkbyBtYXQtb3B0aW9uXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tYXQtc2VsZWN0LXNlYXJjaC1pbnNpZGUtbWF0LW9wdGlvbicpXG4gICAgZ2V0IGlzSW5zaWRlTWF0T3B0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLm1hdE9wdGlvbjtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChNYXRTZWxlY3QpIHB1YmxpYyBtYXRTZWxlY3Q6IE1hdFNlbGVjdCxcbiAgICAgICAgcHVibGljIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBfdmlld3BvcnRSdWxlcjogVmlld3BvcnRSdWxlcixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChNYXRPcHRpb24pIHB1YmxpYyBtYXRPcHRpb246IE1hdE9wdGlvbiA9IG51bGwsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTWF0Rm9ybUZpZWxkKSBwdWJsaWMgbWF0Rm9ybUZpZWxkOiBNYXRGb3JtRmllbGQgPSBudWxsLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KElUU1NfU0VMRUNUX1NFQVJDSF9ERUZBVUxUX09QVElPTlMpIGRlZmF1bHRPcHRpb25zPzogSXRzc1NlbGVjdFNlYXJjaE9wdGlvbnNcbiAgICApIHtcbiAgICAgICAgdGhpcy5hcHBseURlZmF1bHRPcHRpb25zKGRlZmF1bHRPcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBSw7N0dWxvIGRvIG1hcmNhZG9yIGRlIHBvc2nDp8OjbyBkZSBwZXNxdWlzYVxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyTGFiZWw6IHN0cmluZyA9ICdQZXNxdWlzYXIuLi4nO1xuXG4gICAgLy8gVGlwbyBkbyBjYW1wbyBkZSBlbnRyYWRhIGRlIHBlc3F1aXNhXG4gICAgQElucHV0KCkgdHlwZTogc3RyaW5nID0gJ3RleHQnO1xuXG4gICAgLy8gw41jb25lIGJhc2VhZG8gZW0gZm9udGUgdXNhZG8gcGFyYSBleGliaXIgQ2xvc2UtSWNvblxuICAgIEBJbnB1dCgpIGNsb3NlSWNvbjogc3RyaW5nID0gJ2Nsb3NlJztcblxuICAgIC8vIMONY29uZSBiYXNlYWRvIGVtIFN2ZyB1c2FkbyBwYXJhIGV4aWJpciBDbG9zZS1JY29uLiBTZSBkZWZpbmlkbywgQ2xvc2UtSWNvbiDDqSBzdWJzdGl0dcOtZG9cbiAgICBASW5wdXQoKSBjbG9zZVN2Z0ljb24/OiBzdHJpbmc7XG5cbiAgICAvLyBSw7N0dWxvIGEgc2VyIG1vc3RyYWRvIHF1YW5kbyBuZW5odW1hIGVudHJhZGEgZm9yIGVuY29udHJhZGEuIERlZmluYSBjb21vIG51bG8gc2UgbmVuaHVtYSBtZW5zYWdlbSBkZXZlIHNlciBtb3N0cmFkYVxuICAgIEBJbnB1dCgpIG5vRW50cmllc0ZvdW5kTGFiZWw6IHN0cmluZyA9ICdOZW5odW0gcmVzdWx0YWRvIGVuY29udHJhZG8nO1xuXG4gICAgLyoqXG4gICAgICogU2UgbyBjYW1wbyBkZSBwZXNxdWlzYSBkZXZlIG91IG7Do28gc2VyIGxpbXBvIGFww7NzIG8gbWVudSBzdXNwZW5zbyBzZXIgZmVjaGFkby5cbiAgICAgKiDDmnRpbCBwYXJhIGZpbHRyYWdlbSBkbyBsYWRvIGRvIHNlcnZpZG9yLiBWZWphIFsjM10oaHR0cHM6Ly9naXRodWIuY29tL2JpdGhvc3QtZ21iaC9uZ3gtbWF0LXNlbGVjdC1zZWFyY2gvaXNzdWVzLzMpXG4gICAgICovXG4gICAgQElucHV0KCkgY2xlYXJTZWFyY2hJbnB1dDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvLyBTZSBkZXZlIG1vc3RyYXIgbyBpbmRpY2Fkb3IgZGUgcGVzcXVpc2EgZW0gYW5kYW1lbnRvXG4gICAgQElucHV0KCkgc2VhcmNoaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvLyBEZXNhdGl2YSBvIGZvY28gaW5pY2lhbCBkbyBjYW1wbyBkZSBlbnRyYWRhXG4gICAgQElucHV0KCkgZGlzYWJsZUluaXRpYWxGb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy8gQXRpdmFyIGxpbXBhciBpbnB1dCBhbyBwcmVzc2lvbmFyIGVzY2FwZVxuICAgIEBJbnB1dCgpIGVuYWJsZUNsZWFyT25Fc2NhcGVQcmVzc2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBJbXBlZGUgcXVlIGEgY2hhdmUgaG9tZS9lbmQgc2VqYSBwcm9wYWdhZGEgcGFyYSBtYXQtc2VsZWN0LFxuICAgICAqIHBlcm1pdGluZG8gbW92ZXIgbyBjdXJzb3IgZGVudHJvIGRhIGVudHJhZGEgZGUgcGVzcXVpc2EgZW0gdmV6IGRlIG5hdmVnYXIgcGVsYXMgb3DDp8O1ZXNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwcmV2ZW50SG9tZUVuZEtleVByb3BhZ2F0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvLyBEZXNhdGl2YSBhIHJvbGFnZW0gcGFyYSBhcyBvcMOnw7VlcyBhdGl2YXMgcXVhbmRvIGEgbGlzdGEgZGUgb3DDp8O1ZXMgw6kgYWx0ZXJhZGEuIMOadGlsIHBhcmEgcGVzcXVpc2EgZG8gbGFkbyBkbyBzZXJ2aWRvclxuICAgIEBJbnB1dCgpIGRpc2FibGVTY3JvbGxUb0FjdGl2ZU9uT3B0aW9uc0NoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8vIEFkaWNpb25hIHN1cG9ydGUgYSBsZWl0b3IgZGUgdGVsYSA1MDggcGFyYSBjYWl4YSBkZSBwZXNxdWlzYVxuICAgIEBJbnB1dCgpIGFyaWFMYWJlbDogc3RyaW5nID0gJ1Blc3F1aXNhIHN1c3BlbnNhJztcblxuICAgIC8vIFNlIGRldmUgbW9zdHJhciBhIGNhaXhhIGRlIHNlbGXDp8OjbyBTZWxlY2lvbmFyIHR1ZG8gKHBhcmEgbWF0LXNlbGVjdFttdWx0aT10cnVlXSlcbiAgICBASW5wdXQoKSBzaG93VG9nZ2xlQWxsQ2hlY2tib3g6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8vIFNlbGVjaW9uZSB0dWRvIGNhaXhhIGRlIHNlbGXDp8OjbyBtYXJjYWRhIGVzdGFkb1xuICAgIHByaXZhdGUgX3RvZ2dsZUFsbENoZWNrYm94Q2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHNldCB0b2dnbGVBbGxDaGVja2JveENoZWNrZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdG9nZ2xlQWxsQ2hlY2tib3hDaGVja2VkID0gdmFsdWU7XG4gICAgICAgIHRoaXMudG9nZ2xlQWxsLmVtaXQodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgdG9nZ2xlQWxsQ2hlY2tib3hDaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG9nZ2xlQWxsQ2hlY2tib3hDaGVja2VkO1xuICAgIH1cblxuICAgIC8vIE1hcnF1ZSB0b2RhcyBhcyBjYWl4YXMgZGUgc2VsZcOnw6NvIGVzdGFkbyBpbmRldGVybWluYWRvXG4gICAgcHJpdmF0ZSBfdG9nZ2xlQWxsQ2hlY2tib3hJbmRldGVybWluYXRlOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2V0IHRvZ2dsZUFsbENoZWNrYm94SW5kZXRlcm1pbmF0ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl90b2dnbGVBbGxDaGVja2JveEluZGV0ZXJtaW5hdGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy50b2dnbGVBbGxJbmRldGVybWluYXRlLmVtaXQodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgdG9nZ2xlQWxsQ2hlY2tib3hJbmRldGVybWluYXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG9nZ2xlQWxsQ2hlY2tib3hJbmRldGVybWluYXRlO1xuICAgIH1cblxuICAgIC8vIEV4aWJpciB1bWEgbWVuc2FnZW0gZW0gdW1hIGRpY2EgZGUgZmVycmFtZW50YSBuYSBjYWl4YSBkZSBzZWxlw6fDo28gZGUgYWx0ZXJuYXIgdHVkb1xuICAgIEBJbnB1dCgpIHRvZ2dsZUFsbENoZWNrYm94VG9vbHRpcE1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuXG4gICAgLy8gRGVmaW5hIGEgcG9zacOnw6NvIGRhIGRpY2EgZGUgZmVycmFtZW50YSBuYSBjYWl4YSBkZSBzZWxlw6fDo28gZGUgYWx0ZXJuYXIgdHVkby5cbiAgICBASW5wdXQoKSB0b2dnbGVBbGxDaGVja2JveFRvb2x0aXBQb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdhYm92ZScgfCAnYmVsb3cnIHwgJ2JlZm9yZScgfCAnYWZ0ZXInID0gJ2JlbG93JztcblxuICAgIC8vIE1vc3RyYXIvb2N1bHRhciBvIGJvdMOjbyBsaW1wYXIgcGVzcXVpc2EgZGEgZW50cmFkYSBkZSBwZXNxdWlzYVxuICAgIEBJbnB1dCgpIGhpZGVDbGVhclNlYXJjaEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2VtcHJlIHJlc3RhdXJlIGFzIG9ww6fDtWVzIHNlbGVjaW9uYWRhcyBuYSBzZWxlw6fDo28gQWx0ZXJlIHBhcmEgbyBtb2RvIG11bHRpIChwb3IgZXhlbXBsbywgcGFyYSBjYXJyZWdhbWVudG8gbGVudG8vcm9sYWdlbSBpbmZpbml0YSkuXG4gICAgICogTyBwYWRyw6NvIMOpIGZhbHNvLCBwb3J0YW50bywgYXMgb3DDp8O1ZXMgc2VsZWNpb25hZGFzIHPDo28gcmVzdGF1cmFkYXMgYXBlbmFzIGVucXVhbnRvIGEgZmlsdHJhZ2VtIGVzdMOhIGF0aXZhLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGFsd2F5c1Jlc3RvcmVTZWxlY3RlZE9wdGlvbnNNdWx0aTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy8gRW1pc3NvciBkZSBzYcOtZGEgcGFyYSBlbnZpYXIgYW8gY29tcG9uZW50ZSBwYWkgY29tIGEgYWx0ZXJuw6JuY2lhIGRlIHRvZG9zIG9zIGJvb2xlYW5vc1xuICAgIEBPdXRwdXQoKSB0b2dnbGVBbGw6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KCkgdG9nZ2xlQWxsSW5kZXRlcm1pbmF0ZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLy8gUmVmZXLDqm5jaWEgYW8gY2FtcG8gZGUgZW50cmFkYSBkZSBwZXNxdWlzYVxuICAgIEBWaWV3Q2hpbGQoJ3NlYXJjaFNlbGVjdElucHV0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgc2VhcmNoU2VsZWN0SW5wdXQ6IEVsZW1lbnRSZWY7XG5cbiAgICAvLyBSZWZlcsOqbmNpYSBhbyBjYW1wbyBkZSBlbnRyYWRhIGRlIHBlc3F1aXNhXG4gICAgQFZpZXdDaGlsZCgnaW5uZXJTZWxlY3RTZWFyY2gnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBpbm5lclNlbGVjdFNlYXJjaDogRWxlbWVudFJlZjtcblxuICAgIC8vIFJlZmVyw6puY2lhIGFvIMOtY29uZSBjbGFybyBkZSBlbnRyYWRhIGRlIHBlc3F1aXNhIHBlcnNvbmFsaXphZGFcbiAgICBAQ29udGVudENoaWxkKFNlbGVjdFNlYXJjaENsZWFyRGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UgfSkgY2xlYXJJY29uOiBTZWxlY3RTZWFyY2hDbGVhckRpcmVjdGl2ZTtcblxuICAgIC8vIFJlZmVyw6puY2lhIGFvIGVsZW1lbnRvIHBlcnNvbmFsaXphZG8gc2VtIGVudHJhZGFzIGVuY29udHJhZGFzXG4gICAgQENvbnRlbnRDaGlsZChTZWxlY3ROb0VudHJpZXNGb3VuZERpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlIH0pIG5vRW50cmllc0ZvdW5kOiBTZWxlY3ROb0VudHJpZXNGb3VuZERpcmVjdGl2ZTtcbiAgICBwcml2YXRlIF9sYXN0RXh0ZXJuYWxJbnB1dFZhbHVlOiBzdHJpbmc7XG4gICAgcHVibGljIF9vcHRpb25zJDogQmVoYXZpb3JTdWJqZWN0PFF1ZXJ5TGlzdDxNYXRPcHRpb24+PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVlcnlMaXN0PE1hdE9wdGlvbj4+KG51bGwpO1xuXG4gICAgcHJpdmF0ZSBvcHRpb25zTGlzdCQ6IE9ic2VydmFibGU8TWF0T3B0aW9uW10+ID0gdGhpcy5fb3B0aW9ucyQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChfb3B0aW9uczogUXVlcnlMaXN0PE1hdE9wdGlvbj4pOiBPYnNlcnZhYmxlPGFueT4gPT4gX29wdGlvbnNcbiAgICAgICAgICAgID8gX29wdGlvbnMuY2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgob3B0aW9uczogYW55KTogYW55ID0+IG9wdGlvbnMudG9BcnJheSgpKSxcbiAgICAgICAgICAgICAgICBzdGFydFdpdGg8TWF0T3B0aW9uW10+KF9vcHRpb25zLnRvQXJyYXkoKSksKVxuICAgICAgICAgICAgOiBvZihudWxsKVxuICAgICAgICApXG4gICAgKTtcblxuICAgIHByaXZhdGUgb3B0aW9uc0xlbmd0aCQ6IE9ic2VydmFibGU8bnVtYmVyPiA9IHRoaXMub3B0aW9uc0xpc3QkLnBpcGUoXG4gICAgICAgIG1hcCgob3B0aW9uczogTWF0T3B0aW9uW10pOiBudW1iZXIgPT4gb3B0aW9ucyA/IG9wdGlvbnMubGVuZ3RoIDogMClcbiAgICApO1xuXG4gICAgLy8gVmFsb3JlcyBwcmV2aWFtZW50ZSBzZWxlY2lvbmFkb3MgYW8gdXNhciA8bWF0LXNlbGVjdCBbbXVsdGlwbGVdPVwidHJ1ZVwiPlxuICAgIHByaXZhdGUgcHJldmlvdXNTZWxlY3RlZFZhbHVlczogYW55W107XG5cbiAgICBwdWJsaWMgX2Zvcm1Db250cm9sOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG5cbiAgICAvLyBTZSBkZXZlIG1vc3RyYXIgYSBtZW5zYWdlbSBzZW0gZW50cmFkYXMgZW5jb250cmFkYXNcbiAgICBwdWJsaWMgX3Nob3dOb0VudHJpZXNGb3VuZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLFxuICAgICAgICB0aGlzLm9wdGlvbnNMZW5ndGgkXG4gICAgXSkucGlwZShcbiAgICAgICAgbWFwKChbdmFsdWUsIG9wdGlvbnNMZW5ndGhdOiBbYW55LCBudW1iZXJdKTogYm9vbGVhbiA9PiB0aGlzLm5vRW50cmllc0ZvdW5kTGFiZWwgJiYgdmFsdWVcbiAgICAgICAgICAgICYmIG9wdGlvbnNMZW5ndGggPT09IHRoaXMuZ2V0T3B0aW9uc0xlbmd0aE9mZnNldCgpKVxuICAgICk7XG5cbiAgICAvLyBTdWJqZWN0IGVtaXRpZG8gcXVhbmRvIG8gY29tcG9uZW50ZSBmb2kgZGVzdHJ1w61kb1xuICAgIHByaXZhdGUgX29uRGVzdHJveTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvLyBSZWZlcsOqbmNpYSBhbyBkZXNjZW5kZW50ZSBhdGl2byBwYXJhIHN1cG9ydGUgQVJJQS5cbiAgICBwcml2YXRlIGFjdGl2ZURlc2NlbmRhbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgcHJpdmF0ZSBhcHBseURlZmF1bHRPcHRpb25zKGRlZmF1bHRPcHRpb25zOiBJdHNzU2VsZWN0U2VhcmNoT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBpZiAoIWRlZmF1bHRPcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBjb25maWd1cmFibGVEZWZhdWx0T3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKGRlZmF1bHRPcHRpb25zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAodGhpc1trZXldIGFzIGFueSkgPSBkZWZhdWx0T3B0aW9uc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIERlZmluaXIgY2xhc3NlIGRlIG9ww6fDo28gbWF0IHBlcnNvbmFsaXphZGEgc2UgbyBjb21wb25lbnRlIGZvaSBjb2xvY2FkbyBkZW50cm8gZGUgdW1hIG9ww6fDo28gbWF0XG4gICAgICAgIGlmICh0aGlzLm1hdE9wdGlvbikge1xuICAgICAgICAgICAgdGhpcy5tYXRPcHRpb24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tYXRPcHRpb24uX2dldEhvc3RFbGVtZW50KCkuY2xhc3NMaXN0LmFkZCgnY29udGFpbnMtbWF0LXNlbGVjdC1zZWFyY2gnKTtcbiAgICAgICAgICAgIHRoaXMubWF0T3B0aW9uLl9nZXRIb3N0RWxlbWVudCgpLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignPGl0c3MtaW5wdXQtc2VhcmNoPiBkZXZlIHNlciBjb2xvY2FkbyBkZW50cm8gZGUgdW0gZWxlbWVudG8gPG1hdC1vcHRpb24+Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBRdWFuZG8gbyBwYWluZWwgc3VzcGVuc28gZGUgc2VsZcOnw6NvIMOpIGFiZXJ0byBvdSBmZWNoYWRvXG4gICAgICAgIHRoaXMubWF0U2VsZWN0Lm9wZW5lZENoYW5nZVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZGVsYXkoMSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKG9wZW5lZDogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcGVuZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJbnB1dFdpZHRoKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gRm9jYXIgbyBjYW1wbyBkZSBwZXNxdWlzYSBhbyBhYnJpclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZUluaXRpYWxGb2N1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIExpbXDDoS1sbyBhbyBmZWNoYXJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xlYXJTZWFyY2hJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIERlZmluaXIgbyBwcmltZWlybyBpdGVtIGF0aXZvIGFww7NzIGFzIG9ww6fDtWVzIGFsdGVyYWRhc1xuICAgICAgICB0aGlzLm1hdFNlbGVjdC5vcGVuZWRDaGFuZ2VcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5tYXRTZWxlY3Qub3B0aW9ucztcblxuICAgICAgICAgICAgICAgICAgICAvLyBWYXJpw6F2ZWwgZGUgZmVjaGFtZW50byBwYXJhIHJhc3RyZWFyIGEgcHJpbWVpcmEgb3DDp8OjbyBtYWlzIHJlY2VudGUuXG4gICAgICAgICAgICAgICAgICAgIC8vIFBhcmEgZXZpdGFyIHF1ZSBhIGxpc3RhIHJvbGUgcGFyYSBvIHRvcG8gcXVhbmRvIGFzIG9ww6fDtWVzIHPDo28gYWRpY2lvbmFkYXMgYW8gZmluYWwgZGEgbGlzdGFcbiAgICAgICAgICAgICAgICAgICAgLy8gKHBvciBleGVtcGxvOiByb2xhZ2VtIGluZmluaXRhKSwgY29tcGFyYW1vcyBhcGVuYXMgYXMgYWx0ZXJhw6fDtWVzIG5hcyBwcmltZWlyYXMgb3DDp8O1ZXMgcGFyYVxuICAgICAgICAgICAgICAgICAgICAvLyBkZXRlcm1pbmFyIHNlIGRldmVtb3MgZGVmaW5pciBvIHByaW1laXJvIGl0ZW0gY29tbyBhdGl2by4gSXNzbyBldml0YSBhIHJvbGFnZW0gZGVzbmVjZXNzw6FyaWFcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFyYSBvIHRvcG8gZGEgbGlzdGEgcXVhbmRvIGFzIG9ww6fDtWVzIHPDo28gYW5leGFkYXMsIG1hcyBwZXJtaXRlIHF1ZSBvIHByaW1laXJvIGl0ZW0gZGEgbGlzdGFcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VqYSBkZWZpbmlkbyBjb21vIGF0aXZvIHBvciBwYWRyw6NvIHF1YW5kbyBuw6NvIGjDoSBzZWxlw6fDo28gYXRpdmEuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmV2aW91c0ZpcnN0T3B0aW9uOiBNYXRPcHRpb24gPSB0aGlzLl9vcHRpb25zLnRvQXJyYXkoKVt0aGlzLmdldE9wdGlvbnNMZW5ndGhPZmZzZXQoKV07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuY2hhbmdlc1xuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwKCgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXZpdGFyIG8gZXJybyBcImV4cHJlc3Npb24gaGFzIGJlZW4gY2hhbmdlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydGVyIGEgUXVlcnlMaXN0IGVtIHVtYSBtYXRyaXpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnM6IE1hdE9wdGlvbltdID0gdGhpcy5fb3B0aW9ucy50b0FycmF5KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE8gdmVyZGFkZWlybyBwcmltZWlybyBpdGVtIMOpIGNvbXBlbnNhZG8gcG9yIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRGaXJzdE9wdGlvbjogTWF0T3B0aW9uID0gb3B0aW9uc1t0aGlzLmdldE9wdGlvbnNMZW5ndGhPZmZzZXQoKV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleU1hbmFnZXI6IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPE1hdE9wdGlvbj4gPSB0aGlzLm1hdFNlbGVjdC5fa2V5TWFuYWdlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXlNYW5hZ2VyICYmIHRoaXMubWF0U2VsZWN0LnBhbmVsT3Blbikge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmaW5pciBwcmltZWlybyBpdGVtIGF0aXZvIGUgbGFyZ3VyYSBkZSBlbnRyYWRhXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWZXJpZmlxdWUgc2UgYSBwcmltZWlyYSBvcMOnw6NvIG5lc3NhcyBhbHRlcmHDp8O1ZXMgw6kgZGlmZXJlbnRlIGRhIGFudGVyaW9yLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0T3B0aW9uSXNDaGFuZ2VkOiBib29sZWFuID0gIXRoaXMubWF0U2VsZWN0LmNvbXBhcmVXaXRoKHByZXZpb3VzRmlyc3RPcHRpb24sIGN1cnJlbnRGaXJzdE9wdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDQVNPOiBBIHByaW1laXJhIG9ww6fDo28gw6kgZGlmZXJlbnRlIGFnb3JhLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluZGljYSBxdWUgZGV2ZW1vcyBkZWZpbmktbG8gY29tbyBhdGl2byBlIHJvbGFyIHBhcmEgbyB0b3BvLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdE9wdGlvbklzQ2hhbmdlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAha2V5TWFuYWdlci5hY3RpdmVJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFvcHRpb25zLmZpbmQoKG9wdGlvbjogTWF0T3B0aW9uKTogYm9vbGVhbiA9PiB0aGlzLm1hdFNlbGVjdC5jb21wYXJlV2l0aChvcHRpb24sIGtleU1hbmFnZXIuYWN0aXZlSXRlbSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleU1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWd1YXJkZSBhcyBhbHRlcmHDp8O1ZXMgbmEgbGFyZ3VyYSBkbyBwYWluZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJbnB1dFdpZHRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0dWFsaXplIG5vc3NhIHJlZmVyw6puY2lhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0ZpcnN0T3B0aW9uID0gY3VycmVudEZpcnN0T3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgLy8gQWRpY2lvbmUgb3UgcmVtb3ZhIGEgY2xhc3NlIGNzcyBkZXBlbmRlbmRvIHNlIGRlc2VqYSBtb3N0cmFyIGEgbWVuc2FnZW0gc2VtIGVudHJhZGFzIGVuY29udHJhZGFzXG4gICAgICAgIC8vIG9iczogaXNzbyDDqSBoYWNreVxuICAgICAgICB0aGlzLl9zaG93Tm9FbnRyaWVzRm91bmQkLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KVxuICAgICAgICApLnN1YnNjcmliZSgoc2hvd05vRW50cmllc0ZvdW5kOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAvLyBEZWZpbmlyIG5lbmh1bWEgY2xhc3NlIGRlIGVudHJhZGEgZW5jb250cmFkYSBuYSBtYXQtb3B0aW9uXG4gICAgICAgICAgICBpZiAodGhpcy5tYXRPcHRpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoc2hvd05vRW50cmllc0ZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0T3B0aW9uLl9nZXRIb3N0RWxlbWVudCgpLmNsYXNzTGlzdC5hZGQoJ21hdC1zZWxlY3Qtc2VhcmNoLW5vLWVudHJpZXMtZm91bmQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdE9wdGlvbi5fZ2V0SG9zdEVsZW1lbnQoKS5jbGFzc0xpc3QucmVtb3ZlKCdtYXQtc2VsZWN0LXNlYXJjaC1uby1lbnRyaWVzLWZvdW5kJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZWRpbWVuc2lvbmUgYSBsYXJndXJhIGRlIGVudHJhZGEgcXVhbmRvIGEgdmlld3BvcnQgZm9yIHJlZGltZW5zaW9uYWRhLFxuICAgICAgICAvLyBvdSBzZWphLCBhIGxhcmd1cmEgZG8gYWNpb25hZG9yIHBvZGUgc2VyIHJlZGltZW5zaW9uYWRhLlxuICAgICAgICB0aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdFNlbGVjdC5wYW5lbE9wZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJbnB1dFdpZHRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5pbml0TXVsdGlwbGVIYW5kbGluZygpO1xuXG4gICAgICAgIHRoaXMub3B0aW9uc0xpc3QkLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KVxuICAgICAgICApLnN1YnNjcmliZSgoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAvLyBBdHVhbGl6YXIgdmlzdWFsaXphw6fDo28gcXVhbmRvIGFzIG9ww6fDtWVzIGRpc3BvbsOtdmVpcyBtdWRhcmVtXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlYXJjaGluZykge1xuICAgICAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2wuZW5hYmxlKCk7XG4gICAgICAgICAgICB0aGlzLl9mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveS5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveS5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIG9uVG91Y2hlZDogRnVuY3Rpb24gPSAoXzogYW55KTogdm9pZCA9PiB7IH07XG5cbiAgICBfaXNUb2dnbGVBbGxDaGVja2JveFZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hdFNlbGVjdC5tdWx0aXBsZSAmJiB0aGlzLnNob3dUb2dnbGVBbGxDaGVja2JveDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNYW5pcHVsYSBvIGV2ZW50byBkZSB0ZWNsYSBwcmVzc2lvbmFkYSBjb20gTWF0U2VsZWN0LlxuICAgICAqIFBlcm1pdGUsIHBvciBleC4gc2VsZWNpb25hbmRvIGNvbSBhIHRlY2xhIGVudGVyLCBuYXZlZ2FuZG8gY29tIGFzIHRlY2xhcyBkZSBzZXRhLCBldGMuXG4gICAgICogQHBhcmFtIGV2ZW50XG4gICAgICovXG4gICAgX2hhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gRXZpdGUgYSBwcm9wYWdhw6fDo28gZGUgdG9kb3Mgb3MgY2FyYWN0ZXJlcyBhbGZhbnVtw6lyaWNvcyBwYXJhIGV2aXRhciBwcm9ibGVtYXMgZGUgc2VsZcOnw6NvXG4gICAgICAgIGlmICgoZXZlbnQua2V5ICYmIGV2ZW50LmtleS5sZW5ndGggPT09IDEpIHx8XG4gICAgICAgICAgICAoZXZlbnQua2V5Q29kZSA+PSBBICYmIGV2ZW50LmtleUNvZGUgPD0gWikgfHxcbiAgICAgICAgICAgIChldmVudC5rZXlDb2RlID49IFpFUk8gJiYgZXZlbnQua2V5Q29kZSA8PSBOSU5FKSB8fFxuICAgICAgICAgICAgKGV2ZW50LmtleUNvZGUgPT09IFNQQUNFKVxuICAgICAgICAgICAgfHwgKHRoaXMucHJldmVudEhvbWVFbmRLZXlQcm9wYWdhdGlvbiAmJiAoZXZlbnQua2V5Q29kZSA9PT0gSE9NRSB8fCBldmVudC5rZXlDb2RlID09PSBFTkQpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubWF0U2VsZWN0Lm11bHRpcGxlICYmIGV2ZW50LmtleSAmJiBldmVudC5rZXlDb2RlID09PSBFTlRFUikge1xuICAgICAgICAgICAgLy8gUmVjdXBlcmUgbyBmb2NvIGFww7NzIGEgc2VsZcOnw6NvIG3Dumx0aXBsYSwgcGFyYSBxdWUgcG9zc2Ftb3MgZGlnaXRhciBhaW5kYSBtYWlzXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpOiB2b2lkID0+IHRoaXMuX2ZvY3VzKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FzbyBlc3BlY2lhbCwgc2UgY2xpY2FyIGVtIEVzY2FwZSwgc2UgYSBlbnRyYWRhIGVzdGl2ZXIgdmF6aWEsIGZlY2hlIG8gbWVudSBzdXNwZW5zbywgY2FzbyBjb250csOhcmlvLCBlc3ZhemllIG8gY2FtcG8gZGUgcGVzcXVpc2FcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlQ2xlYXJPbkVzY2FwZVByZXNzZWQgPT09IHRydWUgJiYgZXZlbnQua2V5Q29kZSA9PT0gRVNDQVBFICYmIHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0KHRydWUpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNYW5pcHVsYSBvIGV2ZW50byBkZSBhdGl2YcOnw6NvIGRlIGNoYXZlIGNvbSBNYXRTZWxlY3QuXG4gICAgICogUGVybWl0ZSwgcG9yIGV4LiBvIGFuw7puY2lvIGRvIERlc2NlbmRlbnRlIGF0dWFsbWVudGUgYXRpdm8gcG9yIGxlaXRvcmVzIGRlIHRlbGEuXG4gICAgICovXG4gICAgX2hhbmRsZUtleXVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBVUF9BUlJPVyB8fCBldmVudC5rZXlDb2RlID09PSBET1dOX0FSUk9XKSB7XG4gICAgICAgICAgICBjb25zdCBhcmlhQWN0aXZlRGVzY2VuZGFudElkOiBzdHJpbmcgPSB0aGlzLm1hdFNlbGVjdC5fZ2V0QXJpYUFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSB0aGlzLl9vcHRpb25zLnRvQXJyYXkoKS5maW5kSW5kZXgoKGl0ZW06IE1hdE9wdGlvbik6IGJvb2xlYW4gPT4gaXRlbS5pZCA9PT0gYXJpYUFjdGl2ZURlc2NlbmRhbnRJZCk7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdEFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnQgPSB0aGlzLl9vcHRpb25zLnRvQXJyYXkoKVtpbmRleF0uX2dldEhvc3RFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZWxlY3RJbnB1dC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgYXJpYUFjdGl2ZURlc2NlbmRhbnRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbGFzdEV4dGVybmFsSW5wdXRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgb25CbHVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVuc2VsZWN0QWN0aXZlRGVzY2VuZGFudCgpO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKCh2YWx1ZTogYW55KTogYm9vbGVhbiA9PiB2YWx1ZSAhPT0gdGhpcy5fbGFzdEV4dGVybmFsSW5wdXRWYWx1ZSksXG4gICAgICAgICAgICB0YXAoKCk6IGFueSA9PiB0aGlzLl9sYXN0RXh0ZXJuYWxJbnB1dFZhbHVlID0gdW5kZWZpbmVkKSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpXG4gICAgICAgICkuc3Vic2NyaWJlKGZuKTtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb2NhbGl6YSBvIGNhbXBvIGRlIGVudHJhZGEgZGUgcGVzcXVpc2FcbiAgICAgKi9cbiAgICBwdWJsaWMgX2ZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoU2VsZWN0SW5wdXQgfHwgIXRoaXMubWF0U2VsZWN0LnBhbmVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2FsdmUgZSByZXN0YXVyZSBvIHNjcm9sbFRvcCBkbyBwYWluZWwsIHBvaXMgc2Vyw6EgcmVkZWZpbmlkbyBwb3IgZm9jdXMgKClcbiAgICAgICAgLy8gb2JzOiBpc3NvIMOpIGhhY2t5XG4gICAgICAgIGNvbnN0IHBhbmVsOiBhbnkgPSB0aGlzLm1hdFNlbGVjdC5wYW5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBzY3JvbGxUb3A6IGFueSA9IHBhbmVsLnNjcm9sbFRvcDtcblxuICAgICAgICAvLyBTZXRhIG8gZm9jb1xuICAgICAgICB0aGlzLnNlYXJjaFNlbGVjdElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgICBwYW5lbC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVkZWZpbmUgbyB2YWxvciBkZSBwZXNxdWlzYSBhdHVhbFxuICAgICAqIEBwYXJhbSBmb2N1cyBzZSBkZXZlIGZvY2FyIGFww7NzIGEgcmVkZWZpbmnDp8Ojb1xuICAgICAqL1xuICAgIHB1YmxpYyBfcmVzZXQoZm9jdXM/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Zvcm1Db250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pY2lhbGl6YSBhIG1hbmlwdWxhw6fDo28gPG1hdC1zZWxlY3QgW211bHRpcGxlXT1cInRydWVcIj5cbiAgICAgKiBOb3RhOiBwYXJhIG1lbGhvcmFyIGVzdGUgY8OzZGlnbywgbWF0LXNlbGVjdCBkZXZlIHNlciBlc3RlbmRpZG8gcGFyYSBwZXJtaXRpciBkZXNhYmlsaXRhciBhIHJlZGVmaW5pw6fDo28gZGEgc2VsZcOnw6NvIGR1cmFudGUgYSBmaWx0cmFnZW0uXG4gICAgICovXG4gICAgcHJpdmF0ZSBpbml0TXVsdGlwbGVIYW5kbGluZygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm1hdFNlbGVjdC5uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1hdFNlbGVjdC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIC8vIG5vdGE6IG8gYWNlc3NvIGEgbWF0U2VsZWN0Lm5nQ29udHJvbCAoZW0gdmV6IGRlIG1hdFNlbGVjdC52YWx1ZSAvIG1hdFNlbGVjdC52YWx1ZUNoYW5nZXMpXG4gICAgICAgICAgICAgICAgLy8gw6kgbmVjZXNzw6FyaW8gcGFyYSBmdW5jaW9uYXIgY29ycmV0YW1lbnRlIG5vIG1vZG8gZGUgc2VsZcOnw6NvIG3Dumx0aXBsYS5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdvIG1hdC1zZWxlY3QgY29udGVuZG8gaXRzcy1pbnB1dC1zZWFyY2ggZGV2ZSB0ZXIgdW1hIGRpcmV0aXZhIG5nTW9kZWwgb3UgZm9ybUNvbnRyb2wgcXVhbmRvIG11bHRpcGxlPXRydWUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZSA8bWF0LXNlbGVjdCBbbXVsdGlwbGVdPVwidHJ1ZVwiPlxuICAgICAgICAvLyBhcm1hemVuYXIgdmFsb3JlcyBwcmV2aWFtZW50ZSBzZWxlY2lvbmFkb3MgZSByZXN0YXVyw6EtbG9zIHF1YW5kbyBmb3JlbSBkZXNtYXJjYWRvc1xuICAgICAgICAvLyBwb3JxdWUgYSBvcMOnw6NvIG7Do28gZXN0w6EgZGlzcG9uw612ZWwgZW5xdWFudG8gZXN0YW1vcyBmaWx0cmFuZG9cbiAgICAgICAgdGhpcy5wcmV2aW91c1NlbGVjdGVkVmFsdWVzID0gdGhpcy5tYXRTZWxlY3QubmdDb250cm9sLnZhbHVlO1xuXG4gICAgICAgIHRoaXMubWF0U2VsZWN0Lm5nQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWVzOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdG9yZVNlbGVjdGVkVmFsdWVzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRTZWxlY3QubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmFsd2F5c1Jlc3RvcmVTZWxlY3RlZE9wdGlvbnNNdWx0aSB8fCAodGhpcy5fZm9ybUNvbnRyb2wudmFsdWUgJiYgdGhpcy5fZm9ybUNvbnRyb2wudmFsdWUubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMucHJldmlvdXNTZWxlY3RlZFZhbHVlcyAmJiBBcnJheS5pc0FycmF5KHRoaXMucHJldmlvdXNTZWxlY3RlZFZhbHVlcykpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZXMgfHwgIUFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25WYWx1ZXM6IGFueVtdID0gdGhpcy5tYXRTZWxlY3Qub3B0aW9ucy5tYXAoKG9wdGlvbjogTWF0T3B0aW9uKTogYW55ID0+IG9wdGlvbi52YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNTZWxlY3RlZFZhbHVlcy5mb3JFYWNoKChwcmV2aW91c1ZhbHVlOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlcy5zb21lKCh2OiBhbnkpOiBib29sZWFuID0+IHRoaXMubWF0U2VsZWN0LmNvbXBhcmVXaXRoKHYsIHByZXZpb3VzVmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhb3B0aW9uVmFsdWVzLnNvbWUoKHY6IGFueSk6IGJvb2xlYW4gPT4gdGhpcy5tYXRTZWxlY3QuY29tcGFyZVdpdGgodiwgcHJldmlvdXNWYWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlIHVtIHZhbG9yIHF1ZSBmb2kgc2VsZWNpb25hZG8gYW50ZXMgZm9yIGRlc21hcmNhZG8gZSBuw6NvIGVuY29udHJhZG8gbmFzIG9ww6fDtWVzLCBlbGUgZm9pIGRlc21hcmNhZG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGV2aWRvIMOgIGZpbHRyYWdlbSwgZW50w6NvIHJlc3RhdXJhbW9zLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChwcmV2aW91c1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZVNlbGVjdGVkVmFsdWVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzU2VsZWN0ZWRWYWx1ZXMgPSB2YWx1ZXM7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVzdG9yZVNlbGVjdGVkVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0U2VsZWN0Ll9vbkNoYW5nZSh2YWx1ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBEZWZpbmEgYSBsYXJndXJhIGRvIGlubmVyU2VsZWN0U2VhcmNoIHBhcmEgYWp1c3RhciBhdMOpIG1lc21vIGFzIGJhcnJhcyBkZSByb2xhZ2VtIHBlcnNvbmFsaXphZGFzXG4gICAgICogIEUgYXBvaWFyIHRvZG9zIG9zIHNpc3RlbWFzIGRlIG9wZXJhw6fDo29cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlSW5wdXRXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlubmVyU2VsZWN0U2VhcmNoIHx8ICF0aGlzLmlubmVyU2VsZWN0U2VhcmNoLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLmlubmVyU2VsZWN0U2VhcmNoLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGxldCBwYW5lbEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgICAgICB3aGlsZSAoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdtYXQtc2VsZWN0LXBhbmVsJykpIHtcbiAgICAgICAgICAgICAgICBwYW5lbEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwYW5lbEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5uZXJTZWxlY3RTZWFyY2gubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IHBhbmVsRWxlbWVudC5jbGllbnRXaWR0aCArICdweCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgbyBkZXNsb2NhbWVudG8gcGFyYSBvIGNvbXByaW1lbnRvIHF1ZSBwb2RlIHNlciBjYXVzYWRvIHBlbG8gbWF0T3B0aW9uIG9wY2lvbmFsIHVzYWRvIGNvbW8gdW1hIGVudHJhZGEgZGUgcGVzcXVpc2EuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRPcHRpb25zTGVuZ3RoT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLm1hdE9wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdW5zZWxlY3RBY3RpdmVEZXNjZW5kYW50KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVEZXNjZW5kYW50KSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWFyY2hTZWxlY3RJbnB1dC5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gICAgfVxuXG5cbn1cbiJdfQ==
|
590
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LXNlYXJjaC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZ2lwaXNpc3RlbWFzL25nLWNvcmUvIiwic291cmNlcyI6WyJzaGFyZWQvY29tcG9uZW50cy9zZWxlY3QtZW50aXR5LXBhZ2VkL3NoYXJlZC9zZWxlY3Qtc2VhcmNoL3NlbGVjdC1zZWFyY2guY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFDQSxPQUFPLEVBQUUsQ0FBQyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2hILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNQLE9BQU8sRUFBd0IsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEYsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBYyxPQUFPLEVBQUUsYUFBYSxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFB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SUFHckM7UUFBNUQsWUFBWSxDQUFDLDBCQUEwQixFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDO2tDQUFZLDBCQUEwQjs0REFBQztJQUduQztRQUEvRCxZQUFZLENBQUMsNkJBQTZCLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUM7a0NBQWlCLDZCQUE2QjtpRUFBQztJQS9IckcscUJBQXFCO1FBYmpDLFNBQVMsQ0FBQztZQUNQLFFBQVEsRUFBRSxtQkFBbUI7WUFDN0IsNjFGQUE2QztZQUU3QyxTQUFTLEVBQUU7Z0JBQ1A7b0JBQ0ksT0FBTyxFQUFFLGlCQUFpQjtvQkFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxjQUFvQyxPQUFBLHVCQUFxQixFQUFyQixDQUFxQixDQUFDO29CQUNsRixLQUFLLEVBQUUsSUFBSTtpQkFDZDthQUNKO1lBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O1NBQ2xELENBQUM7UUF3Qk8sV0FBQSxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7UUFHakIsV0FBQSxRQUFRLEVBQUUsQ0FBQSxFQUFFLFdBQUEsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQzdCLFdBQUEsUUFBUSxFQUFFLENBQUEsRUFBRSxXQUFBLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUNoQyxXQUFBLFFBQVEsRUFBRSxDQUFBLEVBQUUsV0FBQSxNQUFNLENBQUMsa0NBQWtDLENBQUMsQ0FBQTt5Q0FMbEIsU0FBUztZQUNwQixpQkFBaUI7WUFDbkIsYUFBYTtZQUNZLFNBQVM7WUFDSCxZQUFZO09BM0I5RCxxQkFBcUIsQ0E4ZmpDO0lBQUQsNEJBQUM7Q0FBQSxBQTlmRCxJQThmQztTQTlmWSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBY3RpdmVEZXNjZW5kYW50S2V5TWFuYWdlciB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9hMTF5JztcbmltcG9ydCB7IEEsIERPV05fQVJST1csIEVORCwgRU5URVIsIEVTQ0FQRSwgSE9NRSwgTklORSwgU1BBQ0UsIFVQX0FSUk9XLCBaLCBaRVJPIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2tleWNvZGVzJztcbmltcG9ydCB7IFZpZXdwb3J0UnVsZXIgfSBmcm9tICdAYW5ndWxhci9jZGsvc2Nyb2xsaW5nJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIFF1ZXJ5TGlzdCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkLCBmb3J3YXJkUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUNvbnRyb2wsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTWF0Rm9ybUZpZWxkLCBNYXRPcHRpb24sIE1hdFNlbGVjdCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgY29tYmluZUxhdGVzdCwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5LCBmaWx0ZXIsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAsIHRha2UsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBJVFNTX1NFTEVDVF9TRUFSQ0hfREVGQVVMVF9PUFRJT05TLCBJdHNzU2VsZWN0U2VhcmNoT3B0aW9ucywgY29uZmlndXJhYmxlRGVmYXVsdE9wdGlvbnMgfSBmcm9tICcuLi9kZWZhdWx0LW9wdGlvbnMnO1xuaW1wb3J0IHsgU2VsZWN0Tm9FbnRyaWVzRm91bmREaXJlY3RpdmUgfSBmcm9tICcuLi9zZWxlY3Qtbm8tZW50cmllcy1mb3VuZC5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgU2VsZWN0U2VhcmNoQ2xlYXJEaXJlY3RpdmUgfSBmcm9tICcuLi9zZWxlY3Qtc2VhcmNoLWNsZWFyLmRpcmVjdGl2ZSc7XG5cbi8qKlxuICogRXN0ZSBjb21wb25lbnRlIGZvaSByZWVzY3JpdG8gdXRpbGl6YW5kbyBzZSBkbyBwcm9qZXRvIGEgc2VndWlyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYml0aG9zdC1nbWJoL25neC1tYXQtc2VsZWN0LXNlYXJjaFxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2l0c3MtaW5wdXQtc2VhcmNoJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LXNlYXJjaC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vc2VsZWN0LXNlYXJjaC5jb21wb25lbnQuc2NzcyddLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpOiB0eXBlb2YgU2VsZWN0U2VhcmNoQ29tcG9uZW50ID0+IFNlbGVjdFNlYXJjaENvbXBvbmVudCksXG4gICAgICAgICAgICBtdWx0aTogdHJ1ZVxuICAgICAgICB9XG4gICAgXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBTZWxlY3RTZWFyY2hDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzLCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG5cbiAgICAvLyBWYWxvciBkZSBwZXNxdWlzYSBhdHVhbFxuICAgIGdldCB2YWx1ZSgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fZm9ybUNvbnRyb2wudmFsdWU7XG4gICAgfVxuXG4gICAgLy8gUmVmZXLDqm5jaWEgw6BzIG9ww6fDtWVzIE1hdFNlbGVjdFxuICAgIHB1YmxpYyBzZXQgX29wdGlvbnMoX29wdGlvbnM6IFF1ZXJ5TGlzdDxNYXRPcHRpb24+KSB7XG4gICAgICAgIHRoaXMuX29wdGlvbnMkLm5leHQoX29wdGlvbnMpO1xuICAgIH1cbiAgICBwdWJsaWMgZ2V0IF9vcHRpb25zKCk6IFF1ZXJ5TGlzdDxNYXRPcHRpb24+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnMkLmdldFZhbHVlKCk7XG4gICAgfVxuXG4gICAgLy8gQWRpY2lvbmEgYSBjbGFzc2UgbWF0LXNlbGVjdC1zZWFyY2gtaW5zaWRlLW1hdC1vcHRpb24gc2UgbyBpdHNzLXNlbGVjdC1zZWFyY2ggZXN0aXZlclxuICAgIC8vIGRlbnRybyBkbyBtYXQtb3B0aW9uXG4gICAgQEhvc3RCaW5kaW5nKCdjbGFzcy5tYXQtc2VsZWN0LXNlYXJjaC1pbnNpZGUtbWF0LW9wdGlvbicpXG4gICAgZ2V0IGlzSW5zaWRlTWF0T3B0aW9uKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gISF0aGlzLm1hdE9wdGlvbjtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQEluamVjdChNYXRTZWxlY3QpIHB1YmxpYyBtYXRTZWxlY3Q6IE1hdFNlbGVjdCxcbiAgICAgICAgcHVibGljIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICAgICAgcHJpdmF0ZSBfdmlld3BvcnRSdWxlcjogVmlld3BvcnRSdWxlcixcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChNYXRPcHRpb24pIHB1YmxpYyBtYXRPcHRpb246IE1hdE9wdGlvbiA9IG51bGwsXG4gICAgICAgIEBPcHRpb25hbCgpIEBJbmplY3QoTWF0Rm9ybUZpZWxkKSBwdWJsaWMgbWF0Rm9ybUZpZWxkOiBNYXRGb3JtRmllbGQgPSBudWxsLFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KElUU1NfU0VMRUNUX1NFQVJDSF9ERUZBVUxUX09QVElPTlMpIGRlZmF1bHRPcHRpb25zPzogSXRzc1NlbGVjdFNlYXJjaE9wdGlvbnNcbiAgICApIHtcbiAgICAgICAgdGhpcy5hcHBseURlZmF1bHRPcHRpb25zKGRlZmF1bHRPcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBSw7N0dWxvIGRvIG1hcmNhZG9yIGRlIHBvc2nDp8OjbyBkZSBwZXNxdWlzYVxuICAgIEBJbnB1dCgpIHBsYWNlaG9sZGVyTGFiZWw6IHN0cmluZyA9ICdQZXNxdWlzYXIuLi4nO1xuXG4gICAgLy8gVGlwbyBkbyBjYW1wbyBkZSBlbnRyYWRhIGRlIHBlc3F1aXNhXG4gICAgQElucHV0KCkgdHlwZTogc3RyaW5nID0gJ3RleHQnO1xuXG4gICAgLy8gw41jb25lIGJhc2VhZG8gZW0gZm9udGUgdXNhZG8gcGFyYSBleGliaXIgQ2xvc2UtSWNvblxuICAgIEBJbnB1dCgpIGNsb3NlSWNvbjogc3RyaW5nID0gJ2Nsb3NlJztcblxuICAgIC8vIMONY29uZSBiYXNlYWRvIGVtIFN2ZyB1c2FkbyBwYXJhIGV4aWJpciBDbG9zZS1JY29uLiBTZSBkZWZpbmlkbywgQ2xvc2UtSWNvbiDDqSBzdWJzdGl0dcOtZG9cbiAgICBASW5wdXQoKSBjbG9zZVN2Z0ljb24/OiBzdHJpbmc7XG5cbiAgICAvLyBSw7N0dWxvIGEgc2VyIG1vc3RyYWRvIHF1YW5kbyBuZW5odW1hIGVudHJhZGEgZm9yIGVuY29udHJhZGEuIERlZmluYSBjb21vIG51bG8gc2UgbmVuaHVtYSBtZW5zYWdlbSBkZXZlIHNlciBtb3N0cmFkYVxuICAgIEBJbnB1dCgpIG5vRW50cmllc0ZvdW5kTGFiZWw6IHN0cmluZyA9ICdOZW5odW0gcmVzdWx0YWRvIGVuY29udHJhZG8nO1xuXG4gICAgLyoqXG4gICAgICogU2UgbyBjYW1wbyBkZSBwZXNxdWlzYSBkZXZlIG91IG7Do28gc2VyIGxpbXBvIGFww7NzIG8gbWVudSBzdXNwZW5zbyBzZXIgZmVjaGFkby5cbiAgICAgKiDDmnRpbCBwYXJhIGZpbHRyYWdlbSBkbyBsYWRvIGRvIHNlcnZpZG9yLiBWZWphIFsjM10oaHR0cHM6Ly9naXRodWIuY29tL2JpdGhvc3QtZ21iaC9uZ3gtbWF0LXNlbGVjdC1zZWFyY2gvaXNzdWVzLzMpXG4gICAgICovXG4gICAgQElucHV0KCkgY2xlYXJTZWFyY2hJbnB1dDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAvLyBTZSBkZXZlIG1vc3RyYXIgbyBpbmRpY2Fkb3IgZGUgcGVzcXVpc2EgZW0gYW5kYW1lbnRvXG4gICAgQElucHV0KCkgc2VhcmNoaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvLyBEZXNhdGl2YSBvIGZvY28gaW5pY2lhbCBkbyBjYW1wbyBkZSBlbnRyYWRhXG4gICAgQElucHV0KCkgZGlzYWJsZUluaXRpYWxGb2N1czogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy8gQXRpdmFyIGxpbXBhciBpbnB1dCBhbyBwcmVzc2lvbmFyIGVzY2FwZVxuICAgIEBJbnB1dCgpIGVuYWJsZUNsZWFyT25Fc2NhcGVQcmVzc2VkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvKipcbiAgICAgKiBJbXBlZGUgcXVlIGEgY2hhdmUgaG9tZS9lbmQgc2VqYSBwcm9wYWdhZGEgcGFyYSBtYXQtc2VsZWN0LFxuICAgICAqIHBlcm1pdGluZG8gbW92ZXIgbyBjdXJzb3IgZGVudHJvIGRhIGVudHJhZGEgZGUgcGVzcXVpc2EgZW0gdmV6IGRlIG5hdmVnYXIgcGVsYXMgb3DDp8O1ZXNcbiAgICAgKi9cbiAgICBASW5wdXQoKSBwcmV2ZW50SG9tZUVuZEtleVByb3BhZ2F0aW9uOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAvLyBEZXNhdGl2YSBhIHJvbGFnZW0gcGFyYSBhcyBvcMOnw7VlcyBhdGl2YXMgcXVhbmRvIGEgbGlzdGEgZGUgb3DDp8O1ZXMgw6kgYWx0ZXJhZGEuIMOadGlsIHBhcmEgcGVzcXVpc2EgZG8gbGFkbyBkbyBzZXJ2aWRvclxuICAgIEBJbnB1dCgpIGRpc2FibGVTY3JvbGxUb0FjdGl2ZU9uT3B0aW9uc0NoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8vIEFkaWNpb25hIHN1cG9ydGUgYSBsZWl0b3IgZGUgdGVsYSA1MDggcGFyYSBjYWl4YSBkZSBwZXNxdWlzYVxuICAgIEBJbnB1dCgpIGFyaWFMYWJlbDogc3RyaW5nID0gJ1Blc3F1aXNhIHN1c3BlbnNhJztcblxuICAgIC8vIFNlIGRldmUgbW9zdHJhciBhIGNhaXhhIGRlIHNlbGXDp8OjbyBTZWxlY2lvbmFyIHR1ZG8gKHBhcmEgbWF0LXNlbGVjdFttdWx0aT10cnVlXSlcbiAgICBASW5wdXQoKSBzaG93VG9nZ2xlQWxsQ2hlY2tib3g6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8vIFNlbGVjaW9uZSB0dWRvIGNhaXhhIGRlIHNlbGXDp8OjbyBtYXJjYWRhIGVzdGFkb1xuICAgIHByaXZhdGUgX3RvZ2dsZUFsbENoZWNrYm94Q2hlY2tlZDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHNldCB0b2dnbGVBbGxDaGVja2JveENoZWNrZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fdG9nZ2xlQWxsQ2hlY2tib3hDaGVja2VkID0gdmFsdWU7XG4gICAgICAgIHRoaXMudG9nZ2xlQWxsLmVtaXQodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgdG9nZ2xlQWxsQ2hlY2tib3hDaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG9nZ2xlQWxsQ2hlY2tib3hDaGVja2VkO1xuICAgIH1cblxuICAgIC8vIE1hcnF1ZSB0b2RhcyBhcyBjYWl4YXMgZGUgc2VsZcOnw6NvIGVzdGFkbyBpbmRldGVybWluYWRvXG4gICAgcHJpdmF0ZSBfdG9nZ2xlQWxsQ2hlY2tib3hJbmRldGVybWluYXRlOiBib29sZWFuID0gZmFsc2U7XG4gICAgQElucHV0KCkgc2V0IHRvZ2dsZUFsbENoZWNrYm94SW5kZXRlcm1pbmF0ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl90b2dnbGVBbGxDaGVja2JveEluZGV0ZXJtaW5hdGUgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy50b2dnbGVBbGxJbmRldGVybWluYXRlLmVtaXQodmFsdWUpO1xuICAgIH1cbiAgICBnZXQgdG9nZ2xlQWxsQ2hlY2tib3hJbmRldGVybWluYXRlKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdG9nZ2xlQWxsQ2hlY2tib3hJbmRldGVybWluYXRlO1xuICAgIH1cblxuICAgIC8vIEV4aWJpciB1bWEgbWVuc2FnZW0gZW0gdW1hIGRpY2EgZGUgZmVycmFtZW50YSBuYSBjYWl4YSBkZSBzZWxlw6fDo28gZGUgYWx0ZXJuYXIgdHVkb1xuICAgIEBJbnB1dCgpIHRvZ2dsZUFsbENoZWNrYm94VG9vbHRpcE1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuXG4gICAgLy8gRGVmaW5hIGEgcG9zacOnw6NvIGRhIGRpY2EgZGUgZmVycmFtZW50YSBuYSBjYWl4YSBkZSBzZWxlw6fDo28gZGUgYWx0ZXJuYXIgdHVkby5cbiAgICBASW5wdXQoKSB0b2dnbGVBbGxDaGVja2JveFRvb2x0aXBQb3NpdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyB8ICdhYm92ZScgfCAnYmVsb3cnIHwgJ2JlZm9yZScgfCAnYWZ0ZXInID0gJ2JlbG93JztcblxuICAgIC8vIE1vc3RyYXIvb2N1bHRhciBvIGJvdMOjbyBsaW1wYXIgcGVzcXVpc2EgZGEgZW50cmFkYSBkZSBwZXNxdWlzYVxuICAgIEBJbnB1dCgpIGhpZGVDbGVhclNlYXJjaEJ1dHRvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICogU2VtcHJlIHJlc3RhdXJlIGFzIG9ww6fDtWVzIHNlbGVjaW9uYWRhcyBuYSBzZWxlw6fDo28gQWx0ZXJlIHBhcmEgbyBtb2RvIG11bHRpIChwb3IgZXhlbXBsbywgcGFyYSBjYXJyZWdhbWVudG8gbGVudG8vcm9sYWdlbSBpbmZpbml0YSkuXG4gICAgICogTyBwYWRyw6NvIMOpIGZhbHNvLCBwb3J0YW50bywgYXMgb3DDp8O1ZXMgc2VsZWNpb25hZGFzIHPDo28gcmVzdGF1cmFkYXMgYXBlbmFzIGVucXVhbnRvIGEgZmlsdHJhZ2VtIGVzdMOhIGF0aXZhLlxuICAgICAqL1xuICAgIEBJbnB1dCgpIGFsd2F5c1Jlc3RvcmVTZWxlY3RlZE9wdGlvbnNNdWx0aTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLy8gRW1pc3NvciBkZSBzYcOtZGEgcGFyYSBlbnZpYXIgYW8gY29tcG9uZW50ZSBwYWkgY29tIGEgYWx0ZXJuw6JuY2lhIGRlIHRvZG9zIG9zIGJvb2xlYW5vc1xuICAgIEBPdXRwdXQoKSB0b2dnbGVBbGw6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgICBAT3V0cHV0KCkgdG9nZ2xlQWxsSW5kZXRlcm1pbmF0ZTogRXZlbnRFbWl0dGVyPGJvb2xlYW4+ID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLy8gUmVmZXLDqm5jaWEgYW8gY2FtcG8gZGUgZW50cmFkYSBkZSBwZXNxdWlzYVxuICAgIEBWaWV3Q2hpbGQoJ3NlYXJjaFNlbGVjdElucHV0JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgc2VhcmNoU2VsZWN0SW5wdXQ6IEVsZW1lbnRSZWY7XG5cbiAgICAvLyBSZWZlcsOqbmNpYSBhbyBjYW1wbyBkZSBlbnRyYWRhIGRlIHBlc3F1aXNhXG4gICAgQFZpZXdDaGlsZCgnaW5uZXJTZWxlY3RTZWFyY2gnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBpbm5lclNlbGVjdFNlYXJjaDogRWxlbWVudFJlZjtcblxuICAgIC8vIFJlZmVyw6puY2lhIGFvIMOtY29uZSBjbGFybyBkZSBlbnRyYWRhIGRlIHBlc3F1aXNhIHBlcnNvbmFsaXphZGFcbiAgICBAQ29udGVudENoaWxkKFNlbGVjdFNlYXJjaENsZWFyRGlyZWN0aXZlLCB7IHN0YXRpYzogZmFsc2UgfSkgY2xlYXJJY29uOiBTZWxlY3RTZWFyY2hDbGVhckRpcmVjdGl2ZTtcblxuICAgIC8vIFJlZmVyw6puY2lhIGFvIGVsZW1lbnRvIHBlcnNvbmFsaXphZG8gc2VtIGVudHJhZGFzIGVuY29udHJhZGFzXG4gICAgQENvbnRlbnRDaGlsZChTZWxlY3ROb0VudHJpZXNGb3VuZERpcmVjdGl2ZSwgeyBzdGF0aWM6IGZhbHNlIH0pIG5vRW50cmllc0ZvdW5kOiBTZWxlY3ROb0VudHJpZXNGb3VuZERpcmVjdGl2ZTtcbiAgICBwcml2YXRlIF9sYXN0RXh0ZXJuYWxJbnB1dFZhbHVlOiBzdHJpbmc7XG4gICAgcHVibGljIF9vcHRpb25zJDogQmVoYXZpb3JTdWJqZWN0PFF1ZXJ5TGlzdDxNYXRPcHRpb24+PiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8UXVlcnlMaXN0PE1hdE9wdGlvbj4+KG51bGwpO1xuXG4gICAgcHJpdmF0ZSBvcHRpb25zTGlzdCQ6IE9ic2VydmFibGU8TWF0T3B0aW9uW10+ID0gdGhpcy5fb3B0aW9ucyQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKChfb3B0aW9uczogUXVlcnlMaXN0PE1hdE9wdGlvbj4pOiBPYnNlcnZhYmxlPGFueT4gPT4gX29wdGlvbnNcbiAgICAgICAgICAgID8gX29wdGlvbnMuY2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgob3B0aW9uczogYW55KTogYW55ID0+IG9wdGlvbnMudG9BcnJheSgpKSxcbiAgICAgICAgICAgICAgICBzdGFydFdpdGg8TWF0T3B0aW9uW10+KF9vcHRpb25zLnRvQXJyYXkoKSksKVxuICAgICAgICAgICAgOiBvZihudWxsKVxuICAgICAgICApXG4gICAgKTtcblxuICAgIHByaXZhdGUgb3B0aW9uc0xlbmd0aCQ6IE9ic2VydmFibGU8bnVtYmVyPiA9IHRoaXMub3B0aW9uc0xpc3QkLnBpcGUoXG4gICAgICAgIG1hcCgob3B0aW9uczogTWF0T3B0aW9uW10pOiBudW1iZXIgPT4gb3B0aW9ucyA/IG9wdGlvbnMubGVuZ3RoIDogMClcbiAgICApO1xuXG4gICAgLy8gVmFsb3JlcyBwcmV2aWFtZW50ZSBzZWxlY2lvbmFkb3MgYW8gdXNhciA8bWF0LXNlbGVjdCBbbXVsdGlwbGVdPVwidHJ1ZVwiPlxuICAgIHByaXZhdGUgcHJldmlvdXNTZWxlY3RlZFZhbHVlczogYW55W107XG5cbiAgICBwdWJsaWMgX2Zvcm1Db250cm9sOiBGb3JtQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCgnJyk7XG5cbiAgICAvLyBTZSBkZXZlIG1vc3RyYXIgYSBtZW5zYWdlbSBzZW0gZW50cmFkYXMgZW5jb250cmFkYXNcbiAgICBwdWJsaWMgX3Nob3dOb0VudHJpZXNGb3VuZCQ6IE9ic2VydmFibGU8Ym9vbGVhbj4gPSBjb21iaW5lTGF0ZXN0KFtcbiAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLFxuICAgICAgICB0aGlzLm9wdGlvbnNMZW5ndGgkXG4gICAgXSkucGlwZShcbiAgICAgICAgbWFwKChbdmFsdWUsIG9wdGlvbnNMZW5ndGhdOiBbYW55LCBudW1iZXJdKTogYm9vbGVhbiA9PiB0aGlzLm5vRW50cmllc0ZvdW5kTGFiZWwgJiYgdmFsdWVcbiAgICAgICAgICAgICYmIG9wdGlvbnNMZW5ndGggPT09IHRoaXMuZ2V0T3B0aW9uc0xlbmd0aE9mZnNldCgpKVxuICAgICk7XG5cbiAgICAvLyBTdWJqZWN0IGVtaXRpZG8gcXVhbmRvIG8gY29tcG9uZW50ZSBmb2kgZGVzdHJ1w61kb1xuICAgIHByaXZhdGUgX29uRGVzdHJveTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICAvLyBSZWZlcsOqbmNpYSBhbyBkZXNjZW5kZW50ZSBhdGl2byBwYXJhIHN1cG9ydGUgQVJJQS5cbiAgICBwcml2YXRlIGFjdGl2ZURlc2NlbmRhbnQ6IEhUTUxFbGVtZW50O1xuXG4gICAgcHJpdmF0ZSBhcHBseURlZmF1bHRPcHRpb25zKGRlZmF1bHRPcHRpb25zOiBJdHNzU2VsZWN0U2VhcmNoT3B0aW9ucyk6IHZvaWQge1xuICAgICAgICBpZiAoIWRlZmF1bHRPcHRpb25zKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBjb25maWd1cmFibGVEZWZhdWx0T3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKGRlZmF1bHRPcHRpb25zLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICAgICAgICAodGhpc1trZXldIGFzIGFueSkgPSBkZWZhdWx0T3B0aW9uc1trZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIC8vIERlZmluaXIgY2xhc3NlIGRlIG9ww6fDo28gbWF0IHBlcnNvbmFsaXphZGEgc2UgbyBjb21wb25lbnRlIGZvaSBjb2xvY2FkbyBkZW50cm8gZGUgdW1hIG9ww6fDo28gbWF0XG4gICAgICAgIGlmICh0aGlzLm1hdE9wdGlvbikge1xuICAgICAgICAgICAgdGhpcy5tYXRPcHRpb24uZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tYXRPcHRpb24uX2dldEhvc3RFbGVtZW50KCkuY2xhc3NMaXN0LmFkZCgnY29udGFpbnMtbWF0LXNlbGVjdC1zZWFyY2gnKTtcbiAgICAgICAgICAgIHRoaXMubWF0T3B0aW9uLl9nZXRIb3N0RWxlbWVudCgpLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignPGl0c3MtaW5wdXQtc2VhcmNoPiBkZXZlIHNlciBjb2xvY2FkbyBkZW50cm8gZGUgdW0gZWxlbWVudG8gPG1hdC1vcHRpb24+Jyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBRdWFuZG8gbyBwYWluZWwgc3VzcGVuc28gZGUgc2VsZcOnw6NvIMOpIGFiZXJ0byBvdSBmZWNoYWRvXG4gICAgICAgIHRoaXMubWF0U2VsZWN0Lm9wZW5lZENoYW5nZVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZGVsYXkoMSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKG9wZW5lZDogYm9vbGVhbik6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcGVuZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJbnB1dFdpZHRoKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gRm9jYXIgbyBjYW1wbyBkZSBwZXNxdWlzYSBhbyBhYnJpclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZUluaXRpYWxGb2N1cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fZm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIExpbXDDoS1sbyBhbyBmZWNoYXJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY2xlYXJTZWFyY2hJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fcmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIC8vIERlZmluaXIgbyBwcmltZWlybyBpdGVtIGF0aXZvIGFww7NzIGFzIG9ww6fDtWVzIGFsdGVyYWRhc1xuICAgICAgICB0aGlzLm1hdFNlbGVjdC5vcGVuZWRDaGFuZ2VcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKCgpOiBPYnNlcnZhYmxlPGFueT4gPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vcHRpb25zID0gdGhpcy5tYXRTZWxlY3Qub3B0aW9ucztcblxuICAgICAgICAgICAgICAgICAgICAvLyBWYXJpw6F2ZWwgZGUgZmVjaGFtZW50byBwYXJhIHJhc3RyZWFyIGEgcHJpbWVpcmEgb3DDp8OjbyBtYWlzIHJlY2VudGUuXG4gICAgICAgICAgICAgICAgICAgIC8vIFBhcmEgZXZpdGFyIHF1ZSBhIGxpc3RhIHJvbGUgcGFyYSBvIHRvcG8gcXVhbmRvIGFzIG9ww6fDtWVzIHPDo28gYWRpY2lvbmFkYXMgYW8gZmluYWwgZGEgbGlzdGFcbiAgICAgICAgICAgICAgICAgICAgLy8gKHBvciBleGVtcGxvOiByb2xhZ2VtIGluZmluaXRhKSwgY29tcGFyYW1vcyBhcGVuYXMgYXMgYWx0ZXJhw6fDtWVzIG5hcyBwcmltZWlyYXMgb3DDp8O1ZXMgcGFyYVxuICAgICAgICAgICAgICAgICAgICAvLyBkZXRlcm1pbmFyIHNlIGRldmVtb3MgZGVmaW5pciBvIHByaW1laXJvIGl0ZW0gY29tbyBhdGl2by4gSXNzbyBldml0YSBhIHJvbGFnZW0gZGVzbmVjZXNzw6FyaWFcbiAgICAgICAgICAgICAgICAgICAgLy8gcGFyYSBvIHRvcG8gZGEgbGlzdGEgcXVhbmRvIGFzIG9ww6fDtWVzIHPDo28gYW5leGFkYXMsIG1hcyBwZXJtaXRlIHF1ZSBvIHByaW1laXJvIGl0ZW0gZGEgbGlzdGFcbiAgICAgICAgICAgICAgICAgICAgLy8gc2VqYSBkZWZpbmlkbyBjb21vIGF0aXZvIHBvciBwYWRyw6NvIHF1YW5kbyBuw6NvIGjDoSBzZWxlw6fDo28gYXRpdmEuXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmV2aW91c0ZpcnN0T3B0aW9uOiBNYXRPcHRpb24gPSB0aGlzLl9vcHRpb25zLnRvQXJyYXkoKVt0aGlzLmdldE9wdGlvbnNMZW5ndGhPZmZzZXQoKV07XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29wdGlvbnMuY2hhbmdlc1xuICAgICAgICAgICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFwKCgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXZpdGFyIG8gZXJybyBcImV4cHJlc3Npb24gaGFzIGJlZW4gY2hhbmdlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ29udmVydGVyIGEgUXVlcnlMaXN0IGVtIHVtYSBtYXRyaXpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnM6IE1hdE9wdGlvbltdID0gdGhpcy5fb3B0aW9ucy50b0FycmF5KCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE8gdmVyZGFkZWlybyBwcmltZWlybyBpdGVtIMOpIGNvbXBlbnNhZG8gcG9yIDFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRGaXJzdE9wdGlvbjogTWF0T3B0aW9uID0gb3B0aW9uc1t0aGlzLmdldE9wdGlvbnNMZW5ndGhPZmZzZXQoKV07XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleU1hbmFnZXI6IEFjdGl2ZURlc2NlbmRhbnRLZXlNYW5hZ2VyPE1hdE9wdGlvbj4gPSB0aGlzLm1hdFNlbGVjdC5fa2V5TWFuYWdlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChrZXlNYW5hZ2VyICYmIHRoaXMubWF0U2VsZWN0LnBhbmVsT3Blbikge1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVmaW5pciBwcmltZWlybyBpdGVtIGF0aXZvIGUgbGFyZ3VyYSBkZSBlbnRyYWRhXG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBWZXJpZmlxdWUgc2UgYSBwcmltZWlyYSBvcMOnw6NvIG5lc3NhcyBhbHRlcmHDp8O1ZXMgw6kgZGlmZXJlbnRlIGRhIGFudGVyaW9yLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpcnN0T3B0aW9uSXNDaGFuZ2VkOiBib29sZWFuID0gIXRoaXMubWF0U2VsZWN0LmNvbXBhcmVXaXRoKHByZXZpb3VzRmlyc3RPcHRpb24sIGN1cnJlbnRGaXJzdE9wdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDQVNPOiBBIHByaW1laXJhIG9ww6fDo28gw6kgZGlmZXJlbnRlIGFnb3JhLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluZGljYSBxdWUgZGV2ZW1vcyBkZWZpbmktbG8gY29tbyBhdGl2byBlIHJvbGFyIHBhcmEgbyB0b3BvLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdE9wdGlvbklzQ2hhbmdlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAha2V5TWFuYWdlci5hY3RpdmVJdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICFvcHRpb25zLmZpbmQoKG9wdGlvbjogTWF0T3B0aW9uKTogYm9vbGVhbiA9PiB0aGlzLm1hdFNlbGVjdC5jb21wYXJlV2l0aChvcHRpb24sIGtleU1hbmFnZXIuYWN0aXZlSXRlbSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleU1hbmFnZXIuc2V0Rmlyc3RJdGVtQWN0aXZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWd1YXJkZSBhcyBhbHRlcmHDp8O1ZXMgbmEgbGFyZ3VyYSBkbyBwYWluZWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJbnB1dFdpZHRoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEF0dWFsaXplIG5vc3NhIHJlZmVyw6puY2lhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0ZpcnN0T3B0aW9uID0gY3VycmVudEZpcnN0T3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgLy8gQWRpY2lvbmUgb3UgcmVtb3ZhIGEgY2xhc3NlIGNzcyBkZXBlbmRlbmRvIHNlIGRlc2VqYSBtb3N0cmFyIGEgbWVuc2FnZW0gc2VtIGVudHJhZGFzIGVuY29udHJhZGFzXG4gICAgICAgIC8vIG9iczogaXNzbyDDqSBoYWNreVxuICAgICAgICB0aGlzLl9zaG93Tm9FbnRyaWVzRm91bmQkLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KVxuICAgICAgICApLnN1YnNjcmliZSgoc2hvd05vRW50cmllc0ZvdW5kOiBib29sZWFuKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAvLyBEZWZpbmlyIG5lbmh1bWEgY2xhc3NlIGRlIGVudHJhZGEgZW5jb250cmFkYSBuYSBtYXQtb3B0aW9uXG4gICAgICAgICAgICBpZiAodGhpcy5tYXRPcHRpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoc2hvd05vRW50cmllc0ZvdW5kKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0T3B0aW9uLl9nZXRIb3N0RWxlbWVudCgpLmNsYXNzTGlzdC5hZGQoJ21hdC1zZWxlY3Qtc2VhcmNoLW5vLWVudHJpZXMtZm91bmQnKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdE9wdGlvbi5fZ2V0SG9zdEVsZW1lbnQoKS5jbGFzc0xpc3QucmVtb3ZlKCdtYXQtc2VsZWN0LXNlYXJjaC1uby1lbnRyaWVzLWZvdW5kJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBSZWRpbWVuc2lvbmUgYSBsYXJndXJhIGRlIGVudHJhZGEgcXVhbmRvIGEgdmlld3BvcnQgZm9yIHJlZGltZW5zaW9uYWRhLFxuICAgICAgICAvLyBvdSBzZWphLCBhIGxhcmd1cmEgZG8gYWNpb25hZG9yIHBvZGUgc2VyIHJlZGltZW5zaW9uYWRhLlxuICAgICAgICB0aGlzLl92aWV3cG9ydFJ1bGVyLmNoYW5nZSgpXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLm1hdFNlbGVjdC5wYW5lbE9wZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVJbnB1dFdpZHRoKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5pbml0TXVsdGlwbGVIYW5kbGluZygpO1xuXG4gICAgICAgIHRoaXMub3B0aW9uc0xpc3QkLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KVxuICAgICAgICApLnN1YnNjcmliZSgoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAvLyBBdHVhbGl6YXIgdmlzdWFsaXphw6fDo28gcXVhbmRvIGFzIG9ww6fDtWVzIGRpc3BvbsOtdmVpcyBtdWRhcmVtXG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNlYXJjaGluZykge1xuICAgICAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2wuZGlzYWJsZSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZm9ybUNvbnRyb2wuZW5hYmxlKCk7XG4gICAgICAgICAgICB0aGlzLl9mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveS5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveS5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIG9uVG91Y2hlZDogRnVuY3Rpb24gPSAoXzogYW55KTogdm9pZCA9PiB7IH07XG5cbiAgICBfaXNUb2dnbGVBbGxDaGVja2JveFZpc2libGUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLm1hdFNlbGVjdC5tdWx0aXBsZSAmJiB0aGlzLnNob3dUb2dnbGVBbGxDaGVja2JveDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNYW5pcHVsYSBvIGV2ZW50byBkZSB0ZWNsYSBwcmVzc2lvbmFkYSBjb20gTWF0U2VsZWN0LlxuICAgICAqIFBlcm1pdGUsIHBvciBleC4gc2VsZWNpb25hbmRvIGNvbSBhIHRlY2xhIGVudGVyLCBuYXZlZ2FuZG8gY29tIGFzIHRlY2xhcyBkZSBzZXRhLCBldGMuXG4gICAgICogQHBhcmFtIGV2ZW50XG4gICAgICovXG4gICAgX2hhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgLy8gRXZpdGUgYSBwcm9wYWdhw6fDo28gZGUgdG9kb3Mgb3MgY2FyYWN0ZXJlcyBhbGZhbnVtw6lyaWNvcyBwYXJhIGV2aXRhciBwcm9ibGVtYXMgZGUgc2VsZcOnw6NvXG4gICAgICAgIGlmICgoZXZlbnQua2V5ICYmIGV2ZW50LmtleS5sZW5ndGggPT09IDEpIHx8XG4gICAgICAgICAgICAoZXZlbnQua2V5Q29kZSA+PSBBICYmIGV2ZW50LmtleUNvZGUgPD0gWikgfHxcbiAgICAgICAgICAgIChldmVudC5rZXlDb2RlID49IFpFUk8gJiYgZXZlbnQua2V5Q29kZSA8PSBOSU5FKSB8fFxuICAgICAgICAgICAgKGV2ZW50LmtleUNvZGUgPT09IFNQQUNFKVxuICAgICAgICAgICAgfHwgKHRoaXMucHJldmVudEhvbWVFbmRLZXlQcm9wYWdhdGlvbiAmJiAoZXZlbnQua2V5Q29kZSA9PT0gSE9NRSB8fCBldmVudC5rZXlDb2RlID09PSBFTkQpKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMubWF0U2VsZWN0Lm11bHRpcGxlICYmIGV2ZW50LmtleSAmJiBldmVudC5rZXlDb2RlID09PSBFTlRFUikge1xuICAgICAgICAgICAgLy8gUmVjdXBlcmUgbyBmb2NvIGFww7NzIGEgc2VsZcOnw6NvIG3Dumx0aXBsYSwgcGFyYSBxdWUgcG9zc2Ftb3MgZGlnaXRhciBhaW5kYSBtYWlzXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpOiB2b2lkID0+IHRoaXMuX2ZvY3VzKCkpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2FzbyBlc3BlY2lhbCwgc2UgY2xpY2FyIGVtIEVzY2FwZSwgc2UgYSBlbnRyYWRhIGVzdGl2ZXIgdmF6aWEsIGZlY2hlIG8gbWVudSBzdXNwZW5zbywgY2FzbyBjb250csOhcmlvLCBlc3ZhemllIG8gY2FtcG8gZGUgcGVzcXVpc2FcbiAgICAgICAgaWYgKHRoaXMuZW5hYmxlQ2xlYXJPbkVzY2FwZVByZXNzZWQgPT09IHRydWUgJiYgZXZlbnQua2V5Q29kZSA9PT0gRVNDQVBFICYmIHRoaXMudmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Jlc2V0KHRydWUpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNYW5pcHVsYSBvIGV2ZW50byBkZSBhdGl2YcOnw6NvIGRlIGNoYXZlIGNvbSBNYXRTZWxlY3QuXG4gICAgICogUGVybWl0ZSwgcG9yIGV4LiBvIGFuw7puY2lvIGRvIERlc2NlbmRlbnRlIGF0dWFsbWVudGUgYXRpdm8gcG9yIGxlaXRvcmVzIGRlIHRlbGEuXG4gICAgICovXG4gICAgX2hhbmRsZUtleXVwKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmIChldmVudC5rZXlDb2RlID09PSBVUF9BUlJPVyB8fCBldmVudC5rZXlDb2RlID09PSBET1dOX0FSUk9XKSB7XG4gICAgICAgICAgICBjb25zdCBhcmlhQWN0aXZlRGVzY2VuZGFudElkOiBzdHJpbmcgPSB0aGlzLm1hdFNlbGVjdC5fZ2V0QXJpYUFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSB0aGlzLl9vcHRpb25zLnRvQXJyYXkoKS5maW5kSW5kZXgoKGl0ZW06IE1hdE9wdGlvbik6IGJvb2xlYW4gPT4gaXRlbS5pZCA9PT0gYXJpYUFjdGl2ZURlc2NlbmRhbnRJZCk7XG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51bnNlbGVjdEFjdGl2ZURlc2NlbmRhbnQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnQgPSB0aGlzLl9vcHRpb25zLnRvQXJyYXkoKVtpbmRleF0uX2dldEhvc3RFbGVtZW50KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmVEZXNjZW5kYW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsICd0cnVlJyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hTZWxlY3RJbnB1dC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50JywgYXJpYUFjdGl2ZURlc2NlbmRhbnRJZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fbGFzdEV4dGVybmFsSW5wdXRWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB0aGlzLl9mb3JtQ29udHJvbC5zZXRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgb25CbHVyKCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVuc2VsZWN0QWN0aXZlRGVzY2VuZGFudCgpO1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Zvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKFxuICAgICAgICAgICAgZmlsdGVyKCh2YWx1ZTogYW55KTogYm9vbGVhbiA9PiB2YWx1ZSAhPT0gdGhpcy5fbGFzdEV4dGVybmFsSW5wdXRWYWx1ZSksXG4gICAgICAgICAgICB0YXAoKCk6IGFueSA9PiB0aGlzLl9sYXN0RXh0ZXJuYWxJbnB1dFZhbHVlID0gdW5kZWZpbmVkKSxcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpXG4gICAgICAgICkuc3Vic2NyaWJlKGZuKTtcbiAgICB9XG5cbiAgICByZWdpc3Rlck9uVG91Y2hlZChmbjogRnVuY3Rpb24pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb2NhbGl6YSBvIGNhbXBvIGRlIGVudHJhZGEgZGUgcGVzcXVpc2FcbiAgICAgKi9cbiAgICBwdWJsaWMgX2ZvY3VzKCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuc2VhcmNoU2VsZWN0SW5wdXQgfHwgIXRoaXMubWF0U2VsZWN0LnBhbmVsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2FsdmUgZSByZXN0YXVyZSBvIHNjcm9sbFRvcCBkbyBwYWluZWwsIHBvaXMgc2Vyw6EgcmVkZWZpbmlkbyBwb3IgZm9jdXMgKClcbiAgICAgICAgLy8gb2JzOiBpc3NvIMOpIGhhY2t5XG4gICAgICAgIGNvbnN0IHBhbmVsOiBhbnkgPSB0aGlzLm1hdFNlbGVjdC5wYW5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBzY3JvbGxUb3A6IGFueSA9IHBhbmVsLnNjcm9sbFRvcDtcblxuICAgICAgICAvLyBTZXRhIG8gZm9jb1xuICAgICAgICB0aGlzLnNlYXJjaFNlbGVjdElucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgICBwYW5lbC5zY3JvbGxUb3AgPSBzY3JvbGxUb3A7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVkZWZpbmUgbyB2YWxvciBkZSBwZXNxdWlzYSBhdHVhbFxuICAgICAqIEBwYXJhbSBmb2N1cyBzZSBkZXZlIGZvY2FyIGFww7NzIGEgcmVkZWZpbmnDp8Ojb1xuICAgICAqL1xuICAgIHB1YmxpYyBfcmVzZXQoZm9jdXM/OiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX2Zvcm1Db250cm9sLnNldFZhbHVlKCcnKTtcbiAgICAgICAgaWYgKGZvY3VzKSB7XG4gICAgICAgICAgICB0aGlzLl9mb2N1cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5pY2lhbGl6YSBhIG1hbmlwdWxhw6fDo28gPG1hdC1zZWxlY3QgW211bHRpcGxlXT1cInRydWVcIj5cbiAgICAgKiBOb3RhOiBwYXJhIG1lbGhvcmFyIGVzdGUgY8OzZGlnbywgbWF0LXNlbGVjdCBkZXZlIHNlciBlc3RlbmRpZG8gcGFyYSBwZXJtaXRpciBkZXNhYmlsaXRhciBhIHJlZGVmaW5pw6fDo28gZGEgc2VsZcOnw6NvIGR1cmFudGUgYSBmaWx0cmFnZW0uXG4gICAgICovXG4gICAgcHJpdmF0ZSBpbml0TXVsdGlwbGVIYW5kbGluZygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm1hdFNlbGVjdC5uZ0NvbnRyb2wpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1hdFNlbGVjdC5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgIC8vIG5vdGE6IG8gYWNlc3NvIGEgbWF0U2VsZWN0Lm5nQ29udHJvbCAoZW0gdmV6IGRlIG1hdFNlbGVjdC52YWx1ZSAvIG1hdFNlbGVjdC52YWx1ZUNoYW5nZXMpXG4gICAgICAgICAgICAgICAgLy8gw6kgbmVjZXNzw6FyaW8gcGFyYSBmdW5jaW9uYXIgY29ycmV0YW1lbnRlIG5vIG1vZG8gZGUgc2VsZcOnw6NvIG3Dumx0aXBsYS5cbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdvIG1hdC1zZWxlY3QgY29udGVuZG8gaXRzcy1pbnB1dC1zZWFyY2ggZGV2ZSB0ZXIgdW1hIGRpcmV0aXZhIG5nTW9kZWwgb3UgZm9ybUNvbnRyb2wgcXVhbmRvIG11bHRpcGxlPXRydWUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBTZSA8bWF0LXNlbGVjdCBbbXVsdGlwbGVdPVwidHJ1ZVwiPlxuICAgICAgICAvLyBhcm1hemVuYXIgdmFsb3JlcyBwcmV2aWFtZW50ZSBzZWxlY2lvbmFkb3MgZSByZXN0YXVyw6EtbG9zIHF1YW5kbyBmb3JlbSBkZXNtYXJjYWRvc1xuICAgICAgICAvLyBwb3JxdWUgYSBvcMOnw6NvIG7Do28gZXN0w6EgZGlzcG9uw612ZWwgZW5xdWFudG8gZXN0YW1vcyBmaWx0cmFuZG9cbiAgICAgICAgdGhpcy5wcmV2aW91c1NlbGVjdGVkVmFsdWVzID0gdGhpcy5tYXRTZWxlY3QubmdDb250cm9sLnZhbHVlO1xuXG4gICAgICAgIHRoaXMubWF0U2VsZWN0Lm5nQ29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgodmFsdWVzOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdG9yZVNlbGVjdGVkVmFsdWVzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tYXRTZWxlY3QubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCh0aGlzLmFsd2F5c1Jlc3RvcmVTZWxlY3RlZE9wdGlvbnNNdWx0aSB8fCAodGhpcy5fZm9ybUNvbnRyb2wudmFsdWUgJiYgdGhpcy5fZm9ybUNvbnRyb2wudmFsdWUubGVuZ3RoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHRoaXMucHJldmlvdXNTZWxlY3RlZFZhbHVlcyAmJiBBcnJheS5pc0FycmF5KHRoaXMucHJldmlvdXNTZWxlY3RlZFZhbHVlcykpIHtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZXMgfHwgIUFycmF5LmlzQXJyYXkodmFsdWVzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25WYWx1ZXM6IGFueVtdID0gdGhpcy5tYXRTZWxlY3Qub3B0aW9ucy5tYXAoKG9wdGlvbjogTWF0T3B0aW9uKTogYW55ID0+IG9wdGlvbi52YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJldmlvdXNTZWxlY3RlZFZhbHVlcy5mb3JFYWNoKChwcmV2aW91c1ZhbHVlOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbHVlcy5zb21lKCh2OiBhbnkpOiBib29sZWFuID0+IHRoaXMubWF0U2VsZWN0LmNvbXBhcmVXaXRoKHYsIHByZXZpb3VzVmFsdWUpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhb3B0aW9uVmFsdWVzLnNvbWUoKHY6IGFueSk6IGJvb2xlYW4gPT4gdGhpcy5tYXRTZWxlY3QuY29tcGFyZVdpdGgodiwgcHJldmlvdXNWYWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlIHVtIHZhbG9yIHF1ZSBmb2kgc2VsZWNpb25hZG8gYW50ZXMgZm9yIGRlc21hcmNhZG8gZSBuw6NvIGVuY29udHJhZG8gbmFzIG9ww6fDtWVzLCBlbGUgZm9pIGRlc21hcmNhZG9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZGV2aWRvIMOgIGZpbHRyYWdlbSwgZW50w6NvIHJlc3RhdXJhbW9zLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXMucHVzaChwcmV2aW91c1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdG9yZVNlbGVjdGVkVmFsdWVzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnByZXZpb3VzU2VsZWN0ZWRWYWx1ZXMgPSB2YWx1ZXM7XG5cbiAgICAgICAgICAgICAgICBpZiAocmVzdG9yZVNlbGVjdGVkVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubWF0U2VsZWN0Ll9vbkNoYW5nZSh2YWx1ZXMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqICBEZWZpbmEgYSBsYXJndXJhIGRvIGlubmVyU2VsZWN0U2VhcmNoIHBhcmEgYWp1c3RhciBhdMOpIG1lc21vIGFzIGJhcnJhcyBkZSByb2xhZ2VtIHBlcnNvbmFsaXphZGFzXG4gICAgICogIEUgYXBvaWFyIHRvZG9zIG9zIHNpc3RlbWFzIGRlIG9wZXJhw6fDo29cbiAgICAgKi9cbiAgICBwdWJsaWMgdXBkYXRlSW5wdXRXaWR0aCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlubmVyU2VsZWN0U2VhcmNoIHx8ICF0aGlzLmlubmVyU2VsZWN0U2VhcmNoLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZWxlbWVudDogSFRNTEVsZW1lbnQgPSB0aGlzLmlubmVyU2VsZWN0U2VhcmNoLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGxldCBwYW5lbEVsZW1lbnQ6IEhUTUxFbGVtZW50O1xuICAgICAgICB3aGlsZSAoZWxlbWVudCA9IGVsZW1lbnQucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdtYXQtc2VsZWN0LXBhbmVsJykpIHtcbiAgICAgICAgICAgICAgICBwYW5lbEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwYW5lbEVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMuaW5uZXJTZWxlY3RTZWFyY2gubmF0aXZlRWxlbWVudC5zdHlsZS53aWR0aCA9IHBhbmVsRWxlbWVudC5jbGllbnRXaWR0aCArICdweCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEZXRlcm1pbmUgbyBkZXNsb2NhbWVudG8gcGFyYSBvIGNvbXByaW1lbnRvIHF1ZSBwb2RlIHNlciBjYXVzYWRvIHBlbG8gbWF0T3B0aW9uIG9wY2lvbmFsIHVzYWRvIGNvbW8gdW1hIGVudHJhZGEgZGUgcGVzcXVpc2EuXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRPcHRpb25zTGVuZ3RoT2Zmc2V0KCk6IG51bWJlciB7XG4gICAgICAgIGlmICh0aGlzLm1hdE9wdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIDE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgdW5zZWxlY3RBY3RpdmVEZXNjZW5kYW50KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5hY3RpdmVEZXNjZW5kYW50KSB7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZURlc2NlbmRhbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZWFyY2hTZWxlY3RJbnB1dC5uYXRpdmVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyk7XG4gICAgfVxuXG5cbn1cbiJdfQ==
|