valtech-components 4.0.23 → 4.0.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/molecules/check-input/check-input.component.mjs +3 -3
- package/esm2022/lib/components/organisms/form/form.component.mjs +3 -3
- package/esm2022/lib/services/app-version/app-version.service.mjs +69 -44
- package/esm2022/lib/services/app-version/config.mjs +61 -19
- package/esm2022/lib/services/app-version/index.mjs +2 -2
- package/esm2022/lib/services/app-version/types.mjs +1 -1
- package/esm2022/lib/version.mjs +2 -2
- package/fesm2022/valtech-components.mjs +127 -63
- package/fesm2022/valtech-components.mjs.map +1 -1
- package/lib/components/atoms/rights-footer/rights-footer.component.d.ts +2 -2
- package/lib/components/molecules/cta-card/cta-card.component.d.ts +1 -1
- package/lib/components/molecules/features-list/features-list.component.d.ts +1 -1
- package/lib/components/molecules/metric-card/metric-card.component.d.ts +1 -1
- package/lib/components/organisms/article/article.component.d.ts +4 -4
- package/lib/components/organisms/auth-cta/auth-cta.component.d.ts +1 -1
- package/lib/components/organisms/landing-steps/landing-steps.component.d.ts +1 -1
- package/lib/components/organisms/member-import-modal/member-import-modal.component.d.ts +1 -1
- package/lib/services/app-version/app-version.service.d.ts +15 -8
- package/lib/services/app-version/config.d.ts +30 -16
- package/lib/services/app-version/index.d.ts +1 -1
- package/lib/services/app-version/types.d.ts +34 -0
- package/lib/version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -65,7 +65,7 @@ export class CheckInputComponent {
|
|
|
65
65
|
<ion-checkbox [formControl]="resolvedProps.control" [labelPlacement]="resolvedProps.labelPlacement || 'end'">
|
|
66
66
|
{{ getDisplayLabel() }}
|
|
67
67
|
</ion-checkbox>
|
|
68
|
-
`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonCheckbox, selector: "ion-checkbox", inputs: ["checked", "color", "disabled", "errorText", "helperText", "indeterminate", "justify", "labelPlacement", "mode", "name", "value"] }] }); }
|
|
68
|
+
`, isInline: true, styles: ["ion-checkbox{white-space:normal;align-items:flex-start}ion-checkbox::part(label){white-space:normal;overflow:visible;text-overflow:unset}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: IonCheckbox, selector: "ion-checkbox", inputs: ["checked", "color", "disabled", "errorText", "helperText", "indeterminate", "justify", "labelPlacement", "mode", "name", "value"] }] }); }
|
|
69
69
|
}
|
|
70
70
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CheckInputComponent, decorators: [{
|
|
71
71
|
type: Component,
|
|
@@ -73,10 +73,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
73
73
|
<ion-checkbox [formControl]="resolvedProps.control" [labelPlacement]="resolvedProps.labelPlacement || 'end'">
|
|
74
74
|
{{ getDisplayLabel() }}
|
|
75
75
|
</ion-checkbox>
|
|
76
|
-
|
|
76
|
+
`, styles: ["ion-checkbox{white-space:normal;align-items:flex-start}ion-checkbox::part(label){white-space:normal;overflow:visible;text-overflow:unset}\n"] }]
|
|
77
77
|
}], propDecorators: { preset: [{
|
|
78
78
|
type: Input
|
|
79
79
|
}], props: [{
|
|
80
80
|
type: Input
|
|
81
81
|
}] } });
|
|
82
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2staW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy9jaGVjay1pbnB1dC9jaGVjay1pbnB1dC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBb0MsTUFBTSxlQUFlLENBQUM7QUFDM0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7O0FBYzFEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxPQUFPLG1CQUFtQjtJQTFCaEM7UUEyQlUsWUFBTyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQVd4Qzs7Ozs7O1dBTUc7UUFDTSxVQUFLLEdBQTJCLEVBQUUsQ0FBQztRQUU1Qzs7V0FFRztRQUNILGtCQUFhLEdBQWtCLEVBQW1CLENBQUM7S0E4QnBEO0lBNUJDLFFBQVE7UUFDTixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELFdBQVcsQ0FBQyxPQUFzQjtRQUNoQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUMxQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSyxZQUFZO1FBQ2xCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNO1lBQzdCLENBQUMsQ0FBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBNEI7WUFDekUsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVQLElBQUksQ0FBQyxhQUFhLEdBQUc7WUFDbkIsR0FBRyxXQUFXO1lBQ2QsR0FBRyxJQUFJLENBQUMsS0FBSztTQUNHLENBQUM7SUFDckIsQ0FBQztJQUVELGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQztJQUM5RSxDQUFDOytHQXJEVSxtQkFBbUI7bUdBQW5CLG1CQUFtQiw4SUF0QnBCOzs7O0dBSVQsb05BTFMsWUFBWSw4QkFBRSxtQkFBbUIsMFRBQUUsV0FBVzs7NEZBdUI3QyxtQkFBbUI7a0JBMUIvQixTQUFTOytCQUNFLGlCQUFpQixjQUNmLElBQUksV0FDUCxDQUFDLFlBQVksRUFBRSxtQkFBbUIsRUFBRSxXQUFXLENBQUMsWUFDL0M7Ozs7R0FJVDs4QkE0QlEsTUFBTTtzQkFBZCxLQUFLO2dCQVNHLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb21wb25lbnQsIGluamVjdCwgSW5wdXQsIE9uQ2hhbmdlcywgT25Jbml0LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgSW9uQ2hlY2tib3ggfSBmcm9tICdAaW9uaWMvYW5ndWxhci9zdGFuZGFsb25lJztcbmltcG9ydCB7IFByZXNldFNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wcmVzZXRzJztcbmltcG9ydCB7IElucHV0TWV0YWRhdGEgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3ZhbC1jaGVjay1pbnB1dCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIElvbkNoZWNrYm94XSxcbiAgdGVtcGxhdGU6IGBcbiAgICA8aW9uLWNoZWNrYm94IFtmb3JtQ29udHJvbF09XCJyZXNvbHZlZFByb3BzLmNvbnRyb2xcIiBbbGFiZWxQbGFjZW1lbnRdPVwicmVzb2x2ZWRQcm9wcy5sYWJlbFBsYWNlbWVudCB8fCAnZW5kJ1wiPlxuICAgICAge3sgZ2V0RGlzcGxheUxhYmVsKCkgfX1cbiAgICA8L2lvbi1jaGVja2JveD5cbiAgYCxcbiAgc3R5bGVVcmxzOiBbJy4vY2hlY2staW5wdXQuY29tcG9uZW50LnNjc3MnXSxcbn0pXG4vKipcbiAqIHZhbC1jaGVjay1pbnB1dFxuICpcbiAqIEEgY2hlY2tib3ggaW5wdXQgZm9yIGJvb2xlYW4gdmFsdWVzLCBpbnRlZ3JhdGVkIHdpdGggQW5ndWxhciBmb3Jtcy5cbiAqIFN1cHBvcnRzIHByZXNldHMgZm9yIHJldXNhYmxlIGNvbmZpZ3VyYXRpb25zLlxuICpcbiAqIEBleGFtcGxlIFdpdGggcHJlc2V0IChyZWNvbW1lbmRlZCk6XG4gKiA8dmFsLWNoZWNrLWlucHV0IHByZXNldD1cImZvcm0tZmllbGRcIiBbcHJvcHNdPVwieyBjb250cm9sOiBteUNvbnRyb2wsIGxhYmVsOiAnSSBhZ3JlZScgfVwiPjwvdmFsLWNoZWNrLWlucHV0PlxuICpcbiAqIEBleGFtcGxlIFN0YXRpYyAoYmFja3dhcmRzIGNvbXBhdGlibGUpOlxuICogPHZhbC1jaGVjay1pbnB1dCBbcHJvcHNdPVwieyBjb250cm9sOiBteUNvbnRyb2wsIGxhYmVsOiAnSSBhZ3JlZScgfVwiPjwvdmFsLWNoZWNrLWlucHV0PlxuICpcbiAqIEBpbnB1dCBwcmVzZXQ6IHN0cmluZyAtIE5hbWUgb2YgcHJlc2V0IHRvIGFwcGx5XG4gKiBAaW5wdXQgcHJvcHM6IElucHV0TWV0YWRhdGEgLSBDb25maWd1cmF0aW9uIGZvciB0aGUgY2hlY2tib3ggKGZvcm0gY29udHJvbCwgbGFiZWwsIGV0Yy4pXG4gKi9cbmV4cG9ydCBjbGFzcyBDaGVja0lucHV0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBwcml2YXRlIHByZXNldHMgPSBpbmplY3QoUHJlc2V0U2VydmljZSk7XG5cbiAgLyoqXG4gICAqIFByZXNldCBuYW1lIHRvIGFwcGx5LiBQcmVzZXRzIGRlZmluZSByZXVzYWJsZSBjaGVja2JveCBjb25maWd1cmF0aW9uc1xuICAgKiB0aGF0IGNhbiBiZSByZWdpc3RlcmVkIGF0IGFwcCBsZXZlbCB2aWEgcHJvdmlkZVZhbHRlY2hQcmVzZXRzKCkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIDx2YWwtY2hlY2staW5wdXQgcHJlc2V0PVwiZm9ybS1maWVsZFwiIFtwcm9wc109XCJ7IGNvbnRyb2w6IGN0cmwgfVwiPjwvdmFsLWNoZWNrLWlucHV0PlxuICAgKi9cbiAgQElucHV0KCkgcHJlc2V0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbnB1dCBjb25maWd1cmF0aW9uIG9iamVjdC4gVmFsdWVzIGhlcmUgb3ZlcnJpZGUgcHJlc2V0IHZhbHVlcy5cbiAgICogQHR5cGUge0lucHV0TWV0YWRhdGF9XG4gICAqIEBwcm9wZXJ0eSBjb250cm9sIC0gVGhlIEFuZ3VsYXIgRm9ybUNvbnRyb2wgZm9yIHRoZSBjaGVja2JveC5cbiAgICogQHByb3BlcnR5IGxhYmVsIC0gU3RhdGljIGxhYmVsIHRleHQuXG4gICAqIEBwcm9wZXJ0eSBsYWJlbFBsYWNlbWVudCAtIFBvc2l0aW9uIG9mIGxhYmVsICgnc3RhcnQnIHwgJ2VuZCcpLiBEZWZhdWx0OiAnZW5kJy5cbiAgICovXG4gIEBJbnB1dCgpIHByb3BzOiBQYXJ0aWFsPElucHV0TWV0YWRhdGE+ID0ge307XG5cbiAgLyoqXG4gICAqIFJlc29sdmVkIHByb3BzIGFmdGVyIG1lcmdpbmcgcHJlc2V0ICsgZXhwbGljaXQgcHJvcHMuXG4gICAqL1xuICByZXNvbHZlZFByb3BzOiBJbnB1dE1ldGFkYXRhID0ge30gYXMgSW5wdXRNZXRhZGF0YTtcblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLnJlc29sdmVQcm9wcygpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydwcmVzZXQnXSB8fCBjaGFuZ2VzWydwcm9wcyddKSB7XG4gICAgICB0aGlzLnJlc29sdmVQcm9wcygpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXJnZSBwcmVzZXQgY29uZmlndXJhdGlvbiB3aXRoIGV4cGxpY2l0IHByb3BzLlxuICAgKiBFeHBsaWNpdCBwcm9wcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciBwcmVzZXQgdmFsdWVzLlxuICAgKi9cbiAgcHJpdmF0ZSByZXNvbHZlUHJvcHMoKTogdm9pZCB7XG4gICAgY29uc3QgcHJlc2V0UHJvcHMgPSB0aGlzLnByZXNldFxuICAgICAgPyAodGhpcy5wcmVzZXRzLmdldCgnY2hlY2tJbnB1dCcsIHRoaXMucHJlc2V0KSBhcyBQYXJ0aWFsPElucHV0TWV0YWRhdGE+KVxuICAgICAgOiB7fTtcblxuICAgIHRoaXMucmVzb2x2ZWRQcm9wcyA9IHtcbiAgICAgIC4uLnByZXNldFByb3BzLFxuICAgICAgLi4udGhpcy5wcm9wcyxcbiAgICB9IGFzIElucHV0TWV0YWRhdGE7XG4gIH1cblxuICBnZXREaXNwbGF5TGFiZWwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlZFByb3BzLmxhYmVsIHx8IHRoaXMucmVzb2x2ZWRQcm9wcy5jb250ZW50RmFsbGJhY2sgfHwgJyc7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -437,7 +437,7 @@ export class FormComponent {
|
|
|
437
437
|
<val-textarea-input [props]="getTextareaProp(f)"></val-textarea-input>
|
|
438
438
|
}
|
|
439
439
|
@case (types.CHECK) {
|
|
440
|
-
<val-check-input></val-check-input>
|
|
440
|
+
<val-check-input [props]="getFieldProp(f)"></val-check-input>
|
|
441
441
|
}
|
|
442
442
|
@case (types.COMMENT) {
|
|
443
443
|
<val-comment-input [props]="getFieldProp(f)"></val-comment-input>
|
|
@@ -586,7 +586,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
586
586
|
<val-textarea-input [props]="getTextareaProp(f)"></val-textarea-input>
|
|
587
587
|
}
|
|
588
588
|
@case (types.CHECK) {
|
|
589
|
-
<val-check-input></val-check-input>
|
|
589
|
+
<val-check-input [props]="getFieldProp(f)"></val-check-input>
|
|
590
590
|
}
|
|
591
591
|
@case (types.COMMENT) {
|
|
592
592
|
<val-comment-input [props]="getFieldProp(f)"></val-comment-input>
|
|
@@ -681,4 +681,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
681
681
|
}], onSelectChange: [{
|
|
682
682
|
type: Output
|
|
683
683
|
}] } });
|
|
684
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2Zvcm0vZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBR1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBdUMsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBRXhGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNoRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFB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QUNaLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsc0JBQXNCO3dCQUN0QixtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLHFCQUFxQjt3QkFDckIsa0JBQWtCO3dCQUNsQixrQkFBa0I7d0JBQ2xCLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixzQkFBc0I7d0JBQ3RCLGlCQUFpQjt3QkFDakIscUJBQXFCO3dCQUNyQiwwQkFBMEI7d0JBQzFCLHVCQUF1Qjt3QkFDdkIsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLDJCQUEyQjt3QkFDM0Isc0JBQXNCO3dCQUN0QiwyQkFBMkI7d0JBQzNCLG1CQUFtQjtxQkFDcEIsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNIVDt5R0FLRCxLQUFLO3NCQURKLEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxNQUFNO2dCQUlQLFNBQVM7c0JBRFIsTUFBTTtnQkFJUCxjQUFjO3NCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBEb0NoZWNrLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzQXRFbmQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdXRpbHMvZG9tJztcbmltcG9ydCB7IERpc3BsYXlDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9kaXNwbGF5L2Rpc3BsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IERpdmlkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9kaXZpZGVyL2RpdmlkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2J1dHRvbi1ncm91cC9idXR0b24tZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IENoZWNrSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvY2hlY2staW5wdXQvY2hlY2staW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1lbnRJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9jb21tZW50LWlucHV0L2NvbW1lbnQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVQaWNrZXJNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9kYXRlLXBpY2tlci90eXBlcyc7XG5pbXBvcnQgeyBGaWxlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZmlsZS1pbnB1dC9maWxlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIaW50Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2hpbnQvaGludC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnVtYmVyRnJvbVRvQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL251bWJlci1mcm9tLXRvL251bWJlci1mcm9tLXRvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXNzd29yZElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3Bhc3N3b3JkLWlucHV0L3Bhc3N3b3JkLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQaW5JbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9waW4taW5wdXQvcGluLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSYWRpb0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3JhZGlvLWlucHV0L3JhZGlvLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9zZWxlY3QtaW5wdXQvc2VsZWN0LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3RTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvc2VsZWN0LXNlYXJjaC9zZWxlY3Qtc2VhcmNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNdWx0aVNlbGVjdFNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9tdWx0aS1zZWxlY3Qtc2VhcmNoL211bHRpLXNlbGVjdC1zZWFyY2guY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy90ZXh0LWlucHV0L3RleHQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRhcmVhSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvdGV4dGFyZWEtaW5wdXQvdGV4dGFyZWEtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRhcmVhSW5wdXRNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy90ZXh0YXJlYS1pbnB1dC90eXBlcyc7XG5pbXBvcnQgeyBQaG9uZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3Bob25lLWlucHV0L3Bob25lLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb2dnbGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy90b2dnbGUtaW5wdXQvdG9nZ2xlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDaGVja2JveFJhZGlvSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvY2hlY2tib3gtcmFkaW8taW5wdXQvY2hlY2tib3gtcmFkaW8taW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFVzZXJuYW1lSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvdXNlcm5hbWUtaW5wdXQvdXNlcm5hbWUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFVzZXJuYW1lSW5wdXRNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy91c2VybmFtZS1pbnB1dC90eXBlcyc7XG5pbXBvcnQgeyBBdHRhY2htZW50VXBsb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi9hdHRhY2htZW50LXVwbG9hZGVyL2F0dGFjaG1lbnQtdXBsb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEF0dGFjaG1lbnRJdGVtIH0gZnJvbSAnLi4vYXR0YWNobWVudC11cGxvYWRlci90eXBlcyc7XG5pbXBvcnQgeyBCdXR0b25NZXRhZGF0YSwgQ29tcG9uZW50U3RhdGVzLCBGb3JtTWV0YWRhdGEsIEZvcm1TdWJtaXQsIElucHV0TWV0YWRhdGEsIElucHV0VHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWZvcm0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRGlzcGxheUNvbXBvbmVudCxcbiAgICBUaXRsZUNvbXBvbmVudCxcbiAgICBUZXh0SW5wdXRDb21wb25lbnQsXG4gICAgVGV4dGFyZWFJbnB1dENvbXBvbmVudCxcbiAgICBDaGVja0lucHV0Q29tcG9uZW50LFxuICAgIEJ1dHRvbkdyb3VwQ29tcG9uZW50LFxuICAgIERpdmlkZXJDb21wb25lbnQsXG4gICAgSGludENvbXBvbmVudCxcbiAgICBDb21tZW50SW5wdXRDb21wb25lbnQsXG4gICAgRGF0ZUlucHV0Q29tcG9uZW50LFxuICAgIEZpbGVJbnB1dENvbXBvbmVudCxcbiAgICBOdW1iZXJGcm9tVG9Db21wb25lbnQsXG4gICAgUmFkaW9JbnB1dENvbXBvbmVudCxcbiAgICBQYXNzd29yZElucHV0Q29tcG9uZW50LFxuICAgIFBpbklucHV0Q29tcG9uZW50LFxuICAgIFNlbGVjdFNlYXJjaENvbXBvbmVudCxcbiAgICBNdWx0aVNlbGVjdFNlYXJjaENvbXBvbmVudCxcbiAgICBTZWFyY2hTZWxlY3RvckNvbXBvbmVudCxcbiAgICBQaG9uZUlucHV0Q29tcG9uZW50LFxuICAgIFRvZ2dsZUlucHV0Q29tcG9uZW50LFxuICAgIENoZWNrYm94UmFkaW9JbnB1dENvbXBvbmVudCxcbiAgICBVc2VybmFtZUlucHV0Q29tcG9uZW50LFxuICAgIEF0dGFjaG1lbnRVcGxvYWRlckNvbXBvbmVudCxcbiAgICBEYXRlUGlja2VyQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiBbc3R5bGUuLS12YWwtZm9ybS1maWVsZC1nYXBdPVwicHJvcHMuZmllbGRTcGFjaW5nICE9IG51bGwgPyBwcm9wcy5maWVsZFNwYWNpbmcgKyAncHgnIDogbnVsbFwiPlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgICAgIEBpZiAocHJvcHMubmFtZSkge1xuICAgICAgICAgIDx2YWwtZGlzcGxheVxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgY29udGVudDogcHJvcHMubmFtZSxcbiAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID48L3ZhbC1kaXNwbGF5PlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKHMgb2YgcHJvcHMuc2VjdGlvbnM7IHRyYWNrIHMubmFtZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgICA8dmFsLXRpdGxlIFtwcm9wc109XCJ7IGNvbnRlbnQ6IHMubmFtZSwgc2l6ZTogJ2xhcmdlJywgY29sb3I6ICcnLCBib2xkOiBmYWxzZSB9XCI+PC92YWwtdGl0bGU+XG4gICAgICAgICAgICBAZm9yIChmIG9mIHMuZmllbGRzOyB0cmFjayBmLm5hbWUpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0XCIgW2F0dHIuZGF0YS10ZXN0aWRdPVwiZi50b2tlblwiPlxuICAgICAgICAgICAgICAgIEBpZiAoZi50eXBlICE9PSB0eXBlcy5QSE9ORSAmJiBmLnR5cGUgIT09IHR5cGVzLkhBTkRMRSAmJiBmLnR5cGUgIT09IHR5cGVzLkFUVEFDSE1FTlQpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgW2F0dHIuaWRdPVwibGFiZWxJZChmKVwiPlxuICAgICAgICAgICAgICAgICAgICA8dmFsLXRpdGxlIFtwcm9wc109XCJ7IGNvbnRlbnQ6IGYubGFiZWwsIHNpemU6ICdzbWFsbCcsIGNvbG9yOiAnZGFyaycsIGJvbGQ6IGZhbHNlIH1cIj48L3ZhbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGYuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmllbGQtZGVzY3JpcHRpb25cIj57eyBmLmRlc2NyaXB0aW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAc3dpdGNoIChmLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5URVhUKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtdGV4dC1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5URVhUQVJFQSkge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLXRleHRhcmVhLWlucHV0IFtwcm9wc109XCJnZXRUZXh0YXJlYVByb3AoZilcIj48L3ZhbC10ZXh0YXJlYS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5DSEVDSykge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLWNoZWNrLWlucHV0PjwvdmFsLWNoZWNrLWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLkNPTU1FTlQpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1jb21tZW50LWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1jb21tZW50LWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLkRBVEUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1kYXRlLWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1kYXRlLWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLkVNQUlMKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwiZ2V0VGV4dElucHV0UHJvcChmLCAnZW1haWwnKVwiPjwvdmFsLXRleHQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuRklMRSkge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLWZpbGUtaW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLWZpbGUtaW5wdXQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuSE9VUikge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cImdldFRleHRJbnB1dFByb3AoZiwgJ3RpbWUnKVwiPjwvdmFsLXRleHQtaW5wdXQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuTlVNQkVSKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwiZ2V0VGV4dElucHV0UHJvcChmLCAnbnVtYmVyJylcIj48L3ZhbC10ZXh0LWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLk5VTUJFUl9GUk9NX1RPKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtbnVtYmVyLWZyb20tdG8gW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLW51bWJlci1mcm9tLXRvPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLlBBU1NXT1JEKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtcGFzc3dvcmQtaW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLXBhc3N3b3JkLWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLlBJTl9DT0RFKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtcGluLWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1waW4taW5wdXQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuUkFESU8pIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1yYWRpby1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtcmFkaW8taW5wdXQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuU0VMRUNUKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtc2VsZWN0LWlucHV0IFtwcm9wc109XCJnZXRTZWxlY3RQcm9wKGYpXCI+PC92YWwtc2VsZWN0LWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLlNFQVJDSF9TRUxFQ1QpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1zZWxlY3Qtc2VhcmNoIFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1zZWxlY3Qtc2VhcmNoPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLk1VTFRJX1NFTEVDVCkge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLW11bHRpLXNlbGVjdC1zZWFyY2ggW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLW11bHRpLXNlbGVjdC1zZWFyY2g+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuUEhPTkUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1waG9uZS1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtcGhvbmUtaW5wdXQ+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuSEFORExFKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtdXNlcm5hbWUtaW5wdXQgW3Byb3BzXT1cImdldFVzZXJuYW1lUHJvcChmKVwiPjwvdmFsLXVzZXJuYW1lLWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLlRPR0dMRSkge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLXRvZ2dsZS1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtdG9nZ2xlLWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLkNIRUNLQk9YX1JBRElPKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtY2hlY2tib3gtcmFkaW8taW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLWNoZWNrYm94LXJhZGlvLWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLkFUVEFDSE1FTlQpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1hdHRhY2htZW50LXVwbG9hZGVyXG4gICAgICAgICAgICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgaGludDogZi5oaW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkRm46IGYudXBsb2FkRm4sXG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZi5zdGF0ZSA9PT0gc3RhdGVzLkRJU0FCTEVEIHx8IGYuc3RhdGUgPT09IHN0YXRlcy5XT1JLSU5HLFxuICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgIChhdHRhY2htZW50c0NoYW5nZSk9XCJvbkF0dGFjaG1lbnRDaGFuZ2UoZi5uYW1lLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvdmFsLWF0dGFjaG1lbnQtdXBsb2FkZXI+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBAY2FzZSAodHlwZXMuREFURV9QSUNLRVIpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1kYXRlLXBpY2tlciBbcHJvcHNdPVwiZ2V0RGF0ZVBpY2tlclByb3AoZilcIj48L3ZhbC1kYXRlLXBpY2tlcj5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPHZhbC1oaW50IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIiBbaWRdPVwiZXJyb3JJZChmKVwiPjwvdmFsLWhpbnQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgPHZhbC1kaXZpZGVyIFtwcm9wc109XCJ7IGZpbGw6ICdzb2xpZCcsIHNpemU6ICdtZWRpdW0nLCBjb2xvcjogJ21lZGl1bScgfVwiPjwvdmFsLWRpdmlkZXI+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgQGlmICghcHJvcHMuY29udHJvbGxlZCkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWJtaXQtYWN0aW9uc1wiIFtjbGFzcy5zdWJtaXQtYWN0aW9ucy0tc3RpY2t5XT1cInByb3BzLnN0aWNreUZvb3RlclwiPlxuICAgICAgICAgICAgPHZhbC1idXR0b24tZ3JvdXBcbiAgICAgICAgICAgICAgW3Byb3BzXT1cInsgYnV0dG9uczogYWN0aW9ucywgcG9zaXRpb246ICdjZW50ZXInLCBjb2x1bW5lZDogZmFsc2UgfVwiXG4gICAgICAgICAgICAgIChvbkNsaWNrKT1cInN1Ym1pdEhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICA+PC92YWwtYnV0dG9uLWdyb3VwPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA8L2Zvcm0+XG4gICAgPC9kaXY+XG4gIGAsXG4gIHN0eWxlVXJsczogWycuL2Zvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBEb0NoZWNrIHtcbiAgQElucHV0KClcbiAgcHJvcHM6IEZvcm1NZXRhZGF0YTtcblxuICBAT3V0cHV0KClcbiAgb25TdWJtaXQgPSBuZXcgRXZlbnRFbWl0dGVyPEZvcm1TdWJtaXQ+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uSW52YWxpZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBAT3V0cHV0KClcbiAgb25TZWxlY3RDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZmllbGQ6IHN0cmluZzsgdmFsdWU6IGFueSB9PigpO1xuXG4gIGZvcm06IEZvcm1Hcm91cDtcbiAgdHlwZXMgPSBJbnB1dFR5cGU7XG4gIHN0YXRlcyA9IENvbXBvbmVudFN0YXRlcztcblxuICAvKipcbiAgICogVmFsb3IgYWN0dWFsIGRlbCBmb3JtIChgZm9ybS5nZXRSYXdWYWx1ZSgpYCksIGFjdHVhbGl6YWRvIGVuIGNhZGFcbiAgICogYHZhbHVlQ2hhbmdlc2AuIFBlbnNhZG8gcGFyYSBlbCBtb2RvIGBjb250cm9sbGVkYDogZWwgaG9zdCBsbyBsZWUgdsOtYVxuICAgKiBgQFZpZXdDaGlsZChGb3JtQ29tcG9uZW50KWAgc2luIHRvY2FyIGVsIEZvcm1Hcm91cCBkaXJlY3RvLiBFbiBtb2RvIG5vcm1hbFxuICAgKiB0YW1iacOpbiBlc3TDoSBkaXNwb25pYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWUgPSBzaWduYWw8UmVjb3JkPHN0cmluZywgYW55Pj4oe30pO1xuXG4gIC8qKlxuICAgKiBFc3RhZG8gZGUgdmFsaWRleiBkZWwgZm9ybSwgYWN0dWFsaXphZG8gZW4gY2FkYSBgc3RhdHVzQ2hhbmdlc2AuIFBhcmEgcXVlXG4gICAqIGVsIGhvc3QgKHdpemFyZCkgaGFiaWxpdGUvZGVzaGFiaWxpdGUgc3UgYm90w7NuIFwiU2lndWllbnRlXCIuXG4gICAqL1xuICByZWFkb25seSB2YWxpZCA9IHNpZ25hbChmYWxzZSk7XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xuXG4gIHByaXZhdGUgYWN0aW9uc0NhY2hlOiBCdXR0b25NZXRhZGF0YVtdID0gW107XG5cbiAgLy8gTWVtbyBkZSBnZXRGaWVsZFByb3AvZ2V0VXNlcm5hbWVQcm9wIHBvciByZWZlcmVuY2lhIGRlIGZpZWxkIOKAlCBldml0YVxuICAvLyBjcmVhciB1biBudWV2byBvYmpldG8gcHJvcHMgcG9yIGtleXN0cm9rZSAoY2FkYSBDRCBjeWNsZSBpbnZvY2Fyw61hIGVsXG4gIC8vIHRlbXBsYXRlIGJpbmRpbmcsIG11bHRpcGxpY2FuZG8gcmUtcmVuZGVycyBlbiBjYXNjYWRhIHBvciAjIGZpZWxkcykuXG4gIC8vIFdlYWtNYXA6IHNpIGxhIHJlZmVyZW5jaWEgZGVsIGZpZWxkIGNhbWJpYSwgZWwgY2FjaGUgc2UgbGliZXJhLlxuICBwcml2YXRlIGZpZWxkUHJvcE1lbW8gPSBuZXcgV2Vha01hcDxJbnB1dE1ldGFkYXRhLCBJbnB1dE1ldGFkYXRhPigpO1xuICBwcml2YXRlIHVzZXJuYW1lUHJvcE1lbW8gPSBuZXcgV2Vha01hcDxJbnB1dE1ldGFkYXRhLCBVc2VybmFtZUlucHV0TWV0YWRhdGE+KCk7XG4gIHByaXZhdGUgdGV4dGFyZWFQcm9wTWVtbyA9IG5ldyBXZWFrTWFwPElucHV0TWV0YWRhdGEsIFRleHRhcmVhSW5wdXRNZXRhZGF0YT4oKTtcbiAgcHJpdmF0ZSBzZWxlY3RQcm9wTWVtbyA9IG5ldyBXZWFrTWFwPElucHV0TWV0YWRhdGEsIElucHV0TWV0YWRhdGE+KCk7XG4gIC8vIE1lbW8gZGUgcHJvcHMgY29uIHVuIGlucHV0VHlwZSBIVE1MIGlueWVjdGFkbyAoRU1BSUwvTlVNQkVSL0hPVVIgY29sYXBzYWRvc1xuICAvLyBlbiB2YWwtdGV4dC1pbnB1dCkuIENsYXZlIHBvciBmaWVsZCBwYXJhIGNvbnNlcnZhciBpZGVudGlkYWQgZGUgcmVmZXJlbmNpYS5cbiAgcHJpdmF0ZSB0ZXh0SW5wdXRQcm9wTWVtbyA9IG5ldyBXZWFrTWFwPElucHV0TWV0YWRhdGEsIElucHV0TWV0YWRhdGE+KCk7XG4gIHByaXZhdGUgZGF0ZVBpY2tlclByb3BNZW1vID0gbmV3IFdlYWtNYXA8SW5wdXRNZXRhZGF0YSwgRGF0ZVBpY2tlck1ldGFkYXRhPigpO1xuXG4gIC8vIElkcyBlc3RhYmxlcyBwb3IgZmllbGQgcGFyYSBlbCB3aXJpbmcgZGUgYWNjZXNpYmlsaWRhZCBsYWJlbOKGlGlucHV04oaUZXJyb3IuXG4gIC8vIEVzdGFibGVzIGVudHJlIENEIGN5Y2xlcyAobWVtb2l6YWRvcyBwb3IgcmVmZXJlbmNpYSBkZSBmaWVsZCkg4oaSIGFyaWEtKiBubyBwYXJwYWRlYS5cbiAgcHJpdmF0ZSBmaWVsZElkTWVtbyA9IG5ldyBXZWFrTWFwPElucHV0TWV0YWRhdGEsIHsgbGFiZWxJZDogc3RyaW5nOyBlcnJvcklkOiBzdHJpbmcgfT4oKTtcbiAgcHJpdmF0ZSBmaWVsZFVpZCA9IDA7XG5cbiAgLy8gRXN0YWRvIHByZXZpbyBwYXJhIGRldGVjdGFyIGNhbWJpb3MgZW4gbmdEb0NoZWNrXG4gIHByaXZhdGUgcHJldmlvdXNTdGF0ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIHByZXZpb3VzVXBsb2FkaW5nQ291bnQgPSAwO1xuXG4gIC8vIENhbXBvcyBBVFRBQ0hNRU5UIGNvbiB1cGxvYWRzIGVuIGN1cnNvIOKAlCBibG9xdWVhIHN1Ym1pdCArIERFU0hBQklMSVRBIGVsXG4gIC8vIGJvdMOzbiAobm8gbG9hZGluZzogZWwgc3Bpbm5lciBzZSByZXNlcnZhIHBhcmEgZWwgc3VibWl0IHJlYWwgZGVsIGZvcm0pLlxuICBwcml2YXRlIHVwbG9hZGluZ0ZpZWxkcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgZm9ybUNvbnRyb2xzID0ge307XG4gICAgdGhpcy5wcm9wcy5zZWN0aW9ucy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xuICAgICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgIC8vIEhvbnJhIGBmaWVsZC52YWx1ZWAgYWwgY29uc3RydWlyIGVsIEZvcm1Hcm91cCBwYXJhIHF1ZSBjb250cm9sZXMgdGlwb1xuICAgICAgICAvLyBIQU5ETEUgKHF1ZSBjb25zdW1lbiBlbCBjb250cm9sIGRpcmVjdG8gdmlhIFtmb3JtQ29udHJvbF0pIHJlY2liYW4gZWxcbiAgICAgICAgLy8gdmFsb3IgaW5pY2lhbCBzaW4gcXVlIGVsIGNhbGxlciB0ZW5nYSBxdWUgcGF0Y2hWYWx1ZSBwb3N0LW1vdW50LlxuICAgICAgICAvLyBFbCBoZWxwZXIgYXBwbHlEZWZhdWx0VmFsdWVUb0NvbnRyb2wgKHZhbC10ZXh0LWlucHV0IGV0Yy4pIHNpZ3VlXG4gICAgICAgIC8vIGZ1bmNpb25hbmRvIOKAlCBlc2NyaWJlIHNvYnJlIHVuIGNvbnRyb2wgeWEgaW5pY2lhbGl6YWRvLCBpZGVtcG90ZW50ZS5cbiAgICAgICAgY29uc3QgaW5pdGlhbFZhbHVlID0gZmllbGQudmFsdWUgPz8gbnVsbDtcbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IHRoaXMudHlwZXMuTlVNQkVSX0ZST01fVE8pIHtcbiAgICAgICAgICAvLyBDcmVhciBkb3MgY29udHJvbGVzIHBhcmEgY2FtcG9zIE5VTUJFUl9GUk9NX1RPXG4gICAgICAgICAgZm9ybUNvbnRyb2xzW2Ake2ZpZWxkLm5hbWV9X2Zyb21gXSA9IFtpbml0aWFsVmFsdWUsIGZpZWxkLnZhbGlkYXRvcnMgfHwgW11dO1xuICAgICAgICAgIGZvcm1Db250cm9sc1tgJHtmaWVsZC5uYW1lfV90b2BdID0gW2luaXRpYWxWYWx1ZSwgZmllbGQudmFsaWRhdG9ycyB8fCBbXV07XG4gICAgICAgIH0gZWxzZSBpZiAoZmllbGQudHlwZSA9PT0gdGhpcy50eXBlcy5BVFRBQ0hNRU5UKSB7XG4gICAgICAgICAgZm9ybUNvbnRyb2xzW2ZpZWxkLm5hbWVdID0gW1tdLCBmaWVsZC52YWxpZGF0b3JzIHx8IFtdXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmb3JtQ29udHJvbHNbZmllbGQubmFtZV0gPSBbaW5pdGlhbFZhbHVlLCBmaWVsZC52YWxpZGF0b3JzIHx8IFtdXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cChmb3JtQ29udHJvbHMpO1xuICAgIHRoaXMucHJvcHMuc2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzXG4gICAgICAgIC5maWx0ZXIoXG4gICAgICAgICAgeCA9PlxuICAgICAgICAgICAgeC50eXBlID09PSB0aGlzLnR5cGVzLlNFTEVDVCB8fFxuICAgICAgICAgICAgeC50eXBlID09PSB0aGlzLnR5cGVzLlRFWFQgfHxcbiAgICAgICAgICAgIHgudHlwZSA9PT0gdGhpcy50eXBlcy5TRUFSQ0hfU0VMRUNUIHx8XG4gICAgICAgICAgICB4LnR5cGUgPT09IHRoaXMudHlwZXMuTVVMVElfU0VMRUNUXG4gICAgICAgIClcbiAgICAgICAgLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgIHRoaXMudHJhY2tTZWxlY3RDaGFuZ2VzKGZpZWxkLm5hbWUpO1xuICAgICAgICB9KTtcbiAgICB9KTtcblxuICAgIC8vIEVzdGFkbyByZWFjdGl2byBww7pibGljbyAodmFsdWUvdmFsaWQpIOKAlCBhY3R1YWxpemFkbyBwb3Igc3VzY3JpcGNpw7NuIFJ4SlMsXG4gICAgLy8gTk8gZGVudHJvIGRlIHVuIGVmZmVjdDogc2V0ZWFyIHNpZ25hbHMgYWPDoSBlcyBzZWd1cm8gKG5vIGRpc3BhcmEgTkcwNjAwKS5cbiAgICB0aGlzLnZhbHVlLnNldCh0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSk7XG4gICAgdGhpcy52YWxpZC5zZXQodGhpcy5mb3JtLnZhbGlkKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB0aGlzLnZhbHVlLnNldCh0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSkpKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCh0aGlzLmZvcm0uc3RhdHVzQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy52YWxpZC5zZXQodGhpcy5mb3JtLnZhbGlkKSkpO1xuXG4gICAgdGhpcy5zeW5jRmllbGRDb250cm9sU3RhdGVzKCk7XG4gICAgdGhpcy51cGRhdGVBY3Rpb25zQ2FjaGUoKTtcbiAgICB0aGlzLnByZXZpb3VzU3RhdGUgPSB0aGlzLnByb3BzLnN0YXRlO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIC8vIEN1YW5kbyBwcm9wcyBjYW1iaWEsIHJlY29uc3RydWlyIGVsIGNhY2hlXG4gICAgaWYgKGNoYW5nZXNbJ3Byb3BzJ10gJiYgdGhpcy5mb3JtKSB7XG4gICAgICB0aGlzLnN5bmNGaWVsZENvbnRyb2xTdGF0ZXMoKTtcbiAgICAgIHRoaXMudXBkYXRlQWN0aW9uc0NhY2hlKCk7XG4gICAgICB0aGlzLnByZXZpb3VzU3RhdGUgPSB0aGlzLnByb3BzLnN0YXRlO1xuICAgIH1cbiAgfVxuXG4gIG5nRG9DaGVjaygpIHtcbiAgICAvLyBEZXRlY3RhciBjYW1iaW9zIGVuIGVsIGVzdGFkbyBkZWwgZm9ybXVsYXJpbyAobXV0YWNpw7NuIHNpbiBjYW1iaWFyIHJlZmVyZW5jaWEpXG4gICAgY29uc3QgdXBsb2FkaW5nQ291bnQgPSB0aGlzLnVwbG9hZGluZ0ZpZWxkcy5zaXplO1xuICAgIGlmIChcbiAgICAgIHRoaXMuZm9ybSAmJlxuICAgICAgdGhpcy5wcm9wcyAmJlxuICAgICAgKHRoaXMucHJvcHMuc3RhdGUgIT09IHRoaXMucHJldmlvdXNTdGF0ZSB8fCB1cGxvYWRpbmdDb3VudCAhPT0gdGhpcy5wcmV2aW91c1VwbG9hZGluZ0NvdW50KVxuICAgICkge1xuICAgICAgdGhpcy5wcmV2aW91c1N0YXRlID0gdGhpcy5wcm9wcy5zdGF0ZTtcbiAgICAgIHRoaXMucHJldmlvdXNVcGxvYWRpbmdDb3VudCA9IHVwbG9hZGluZ0NvdW50O1xuICAgICAgdGhpcy51cGRhdGVBY3Rpb25zQ2FjaGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3luY2hyb25pemVzIGZvcm0gY29udHJvbCBkaXNhYmxlZC9lbmFibGVkIHN0YXRlIHdpdGggZmllbGQgbWV0YWRhdGEuXG4gICAqL1xuICBwcml2YXRlIHN5bmNGaWVsZENvbnRyb2xTdGF0ZXMoKSB7XG4gICAgdGhpcy5wcm9wcy5zZWN0aW9ucy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xuICAgICAgc2VjdGlvbi5maWVsZHMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSB0aGlzLnR5cGVzLkFUVEFDSE1FTlQpIHJldHVybjtcbiAgICAgICAgaWYgKGZpZWxkLnR5cGUgPT09IHRoaXMudHlwZXMuTlVNQkVSX0ZST01fVE8pIHtcbiAgICAgICAgICBjb25zdCBmcm9tQ29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbChgJHtmaWVsZC5uYW1lfV9mcm9tYCk7XG4gICAgICAgICAgY29uc3QgdG9Db250cm9sID0gdGhpcy5nZXRDb250cm9sKGAke2ZpZWxkLm5hbWV9X3RvYCk7XG5cbiAgICAgICAgICBpZiAoZmllbGQuc3RhdGUgPT09IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRCkge1xuICAgICAgICAgICAgZnJvbUNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB0b0NvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZyb21Db250cm9sLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB0b0NvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbChmaWVsZC5uYW1lKTtcbiAgICAgICAgICBpZiAoZmllbGQuc3RhdGUgPT09IENvbXBvbmVudFN0YXRlcy5ESVNBQkxFRCkge1xuICAgICAgICAgICAgY29udHJvbC5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWN0dWFsaXphIGVsIGNhY2hlIGRlIGFjdGlvbnMgYmFzYWRvIGVuIGVsIGVzdGFkbyBhY3R1YWwgZGVsIGZvcm0uXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZUFjdGlvbnNDYWNoZSgpIHtcbiAgICAvLyBFbiBtb2RvIGNvbnRyb2xsZWQgKG8gc2luIHN1Ym1pdCkgbm8gaGF5IGJvdMOzbiBwcm9waW8gcXVlIGNhY2hlYXIuXG4gICAgaWYgKCF0aGlzLnByb3BzLmFjdGlvbnMpIHtcbiAgICAgIHRoaXMuYWN0aW9uc0NhY2hlID0gW107XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBhY3Rpb25TdGF0ZSA9IHRoaXMucHJvcHMuYWN0aW9ucy5zdGF0ZTtcblxuICAgIGlmICh0aGlzLnByb3BzLnN0YXRlID09PSBDb21wb25lbnRTdGF0ZXMuV09SS0lORykge1xuICAgICAgLy8gU3VibWl0IHJlYWwgZGVsIGZvcm0gZW4gY3Vyc28g4oaSIGJvdMOzbiBlbiBsb2FkaW5nIChzcGlubmVyKS5cbiAgICAgIGFjdGlvblN0YXRlID0gQ29tcG9uZW50U3RhdGVzLldPUktJTkc7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXRlID09PSBDb21wb25lbnRTdGF0ZXMuRElTQUJMRUQgfHwgdGhpcy51cGxvYWRpbmdGaWVsZHMuc2l6ZSA+IDApIHtcbiAgICAgIC8vIFN1YmlkYSBkZSBhZGp1bnRvIGVuIGN1cnNvIOKGkiBERVNIQUJJTElUQVIgZWwgc3VibWl0LCBOTyBsb2FkaW5nOiB0b2RhdsOtYVxuICAgICAgLy8gbm8gc2UgZXN0w6EgZW52aWFuZG8gZWwgZm9ybSwgc29sbyBzdWJpZW5kbyB1biBhcmNoaXZvLiBVbiBzcGlubmVyIGFjw6FcbiAgICAgIC8vIGNvbmZ1bmRlIChwYXJlY2UgcXVlIGVsIGZvcm0gc2UgZXN0w6EgZW52aWFuZG8pLlxuICAgICAgYWN0aW9uU3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRElTQUJMRUQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnN0YXRlID09PSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRCB8fCB0aGlzLmZvcm0/LnZhbGlkKSB7XG4gICAgICBhY3Rpb25TdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5FTkFCTEVEO1xuICAgIH1cblxuICAgIHRoaXMuYWN0aW9uc0NhY2hlID0gW3sgLi4udGhpcy5wcm9wcy5hY3Rpb25zLCBzdGF0ZTogYWN0aW9uU3RhdGUgfV07XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICAvLyBDbGVhbnVwIHN1YnNjcmlwdGlvbnMgdG8gYXZvaWQgbWVtb3J5IGxlYWtzXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLmZvckVhY2goc3ViID0+IHN1Yi51bnN1YnNjcmliZSgpKTtcbiAgfVxuXG4gIHRyYWNrU2VsZWN0Q2hhbmdlcyhmaWVsZE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woZmllbGROYW1lKTtcbiAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBjb250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5vblNlbGVjdENoYW5nZS5lbWl0KHsgZmllbGQ6IGZpZWxkTmFtZSwgdmFsdWUgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goc3Vic2NyaXB0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIHN1Ym1pdEhhbmRsZXIodG9rZW4/OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy51cGxvYWRpbmdGaWVsZHMuc2l6ZSA+IDApIHJldHVybjtcbiAgICBpZiAoIXRoaXMuZm9ybS52YWxpZCkge1xuICAgICAgdGhpcy5mb3JtLm1hcmtBbGxBc1RvdWNoZWQoKTtcbiAgICAgIHRoaXMub25JbnZhbGlkLmVtaXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5vblN1Ym1pdC5lbWl0KHsgZmllbGRzOiB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKSwgdG9rZW4gfSk7XG4gIH1cblxuICBvbkF0dGFjaG1lbnRDaGFuZ2UoZmllbGROYW1lOiBzdHJpbmcsIGl0ZW1zOiBBdHRhY2htZW50SXRlbVtdKTogdm9pZCB7XG4gICAgY29uc3QgcmVhZHlVcmxzID0gaXRlbXMuZmlsdGVyKGEgPT4gYS5zdGF0dXMgPT09ICdyZWFkeScgJiYgYS51cmwpLm1hcChhID0+IGEudXJsISk7XG4gICAgdGhpcy5mb3JtLmdldChmaWVsZE5hbWUpPy5zZXRWYWx1ZShyZWFkeVVybHMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICBpZiAoaXRlbXMuc29tZShhID0+IGEuc3RhdHVzID09PSAndXBsb2FkaW5nJykpIHtcbiAgICAgIHRoaXMudXBsb2FkaW5nRmllbGRzLmFkZChmaWVsZE5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwbG9hZGluZ0ZpZWxkcy5kZWxldGUoZmllbGROYW1lKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb250cm9sKGZpZWxkOiBzdHJpbmcpOiBGb3JtQ29udHJvbCB7XG4gICAgcmV0dXJuIHRoaXMuRm9ybS5nZXQoZmllbGQpIGFzIEZvcm1Db250cm9sO1xuICB9XG5cbiAgLyoqXG4gICAqIElkcyBlc3RhYmxlcyAobGFiZWwgKyBlcnJvcikgcGFyYSB1biBmaWVsZC4gTWVtb2l6YWRvcyBwb3IgcmVmZXJlbmNpYSBwYXJhXG4gICAqIHF1ZSBlbCB3aXJpbmcgYGFyaWEtbGFiZWxsZWRieWAgLyBgYXJpYS1kZXNjcmliZWRieWAgbm8gY2FtYmllIGVudHJlIGNpY2xvc1xuICAgKiBkZSBjaGFuZ2UgZGV0ZWN0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSBmaWVsZElkcyhmaWVsZDogSW5wdXRNZXRhZGF0YSk6IHsgbGFiZWxJZDogc3RyaW5nOyBlcnJvcklkOiBzdHJpbmcgfSB7XG4gICAgbGV0IGlkcyA9IHRoaXMuZmllbGRJZE1lbW8uZ2V0KGZpZWxkKTtcbiAgICBpZiAoIWlkcykge1xuICAgICAgY29uc3QgYmFzZSA9IGB2YWwtZm9ybS1maWVsZC0ke3RoaXMuZmllbGRVaWQrK31gO1xuICAgICAgaWRzID0geyBsYWJlbElkOiBgJHtiYXNlfS1sYWJlbGAsIGVycm9ySWQ6IGAke2Jhc2V9LWVycm9yYCB9O1xuICAgICAgdGhpcy5maWVsZElkTWVtby5zZXQoZmllbGQsIGlkcyk7XG4gICAgfVxuICAgIHJldHVybiBpZHM7XG4gIH1cblxuICAvKiogSWQgZGVsIGxhYmVsIHZpc2libGUgZGVsIGNhbXBvIChjb25zdW1pZG8gcG9yIGVsIHRlbXBsYXRlICsgZWwgaW5wdXQpLiAqL1xuICBsYWJlbElkKGZpZWxkOiBJbnB1dE1ldGFkYXRhKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZElkcyhmaWVsZCkubGFiZWxJZDtcbiAgfVxuXG4gIC8qKiBJZCBkZWwgY29udGVuZWRvciBkZSBlcnJvciAoYHZhbC1oaW50YCkgZGVsIGNhbXBvLiAqL1xuICBlcnJvcklkKGZpZWxkOiBJbnB1dE1ldGFkYXRhKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZElkcyhmaWVsZCkuZXJyb3JJZDtcbiAgfVxuXG4gIGdldEZpZWxkUHJvcChmaWVsZDogSW5wdXRNZXRhZGF0YSk6IElucHV0TWV0YWRhdGEge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuZmllbGRQcm9wTWVtby5nZXQoZmllbGQpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgICBpZiAoIWZpZWxkLnRva2VuKSB7XG4gICAgICBmaWVsZC50b2tlbiA9IGBpbnB1dC0ke2ZpZWxkLnR5cGV9LSR7ZmllbGQubmFtZX1gO1xuICAgIH1cblxuICAgIGNvbnN0IGlkcyA9IHRoaXMuZmllbGRJZHMoZmllbGQpO1xuXG4gICAgbGV0IHJlc3VsdDogSW5wdXRNZXRhZGF0YTtcbiAgICBpZiAoZmllbGQudHlwZSA9PT0gdGhpcy50eXBlcy5OVU1CRVJfRlJPTV9UTykge1xuICAgICAgY29uc3QgZnJvbUNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woYCR7ZmllbGQubmFtZX1fZnJvbWApO1xuICAgICAgY29uc3QgdG9Db250cm9sID0gdGhpcy5nZXRDb250cm9sKGAke2ZpZWxkLm5hbWV9X3RvYCk7XG4gICAgICByZXN1bHQgPSB7IC4uLmZpZWxkLCBmcm9tQ29udHJvbCwgdG9Db250cm9sLCBjb250cm9sOiB1bmRlZmluZWQsIGxhYmVsSWQ6IGlkcy5sYWJlbElkLCBlcnJvcklkOiBpZHMuZXJyb3JJZCB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRDb250cm9sKGZpZWxkLm5hbWUpO1xuICAgICAgcmVzdWx0ID0geyAuLi5maWVsZCwgY29udHJvbCwgbGFiZWxJZDogaWRzLmxhYmVsSWQsIGVycm9ySWQ6IGlkcy5lcnJvcklkIH07XG4gICAgfVxuICAgIHRoaXMuZmllbGRQcm9wTWVtby5zZXQoZmllbGQsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGFwdGVyIHBhcmEgbG9zIHRpcG9zIGNvbGFwc2Fkb3MgZW4gYHZhbC10ZXh0LWlucHV0YCAoRU1BSUwvTlVNQkVSL0hPVVIpLlxuICAgKiBSZXVzYSBgZ2V0RmllbGRQcm9wYCAoY29uIHN1IGNvbnRyb2wgKyB3aXJpbmcgZGUgaWRzKSBlIGlueWVjdGEgZWwgYGlucHV0VHlwZWBcbiAgICogSFRNTCBuYXRpdm8uIE1lbW9pemFkbyBwb3IgcmVmZXJlbmNpYSBkZSBmaWVsZCBwYXJhIG5vIHJvbXBlciBsYSBpZGVudGlkYWQuXG4gICAqL1xuICBnZXRUZXh0SW5wdXRQcm9wKGZpZWxkOiBJbnB1dE1ldGFkYXRhLCBpbnB1dFR5cGU6IE5vbk51bGxhYmxlPElucHV0TWV0YWRhdGFbJ2lucHV0VHlwZSddPik6IElucHV0TWV0YWRhdGEge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMudGV4dElucHV0UHJvcE1lbW8uZ2V0KGZpZWxkKTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuXG4gICAgY29uc3QgYmFzZSA9IHRoaXMuZ2V0RmllbGRQcm9wKGZpZWxkKTtcbiAgICBjb25zdCByZXN1bHQ6IElucHV0TWV0YWRhdGEgPSB7IC4uLmJhc2UsIGlucHV0VHlwZSB9O1xuICAgIHRoaXMudGV4dElucHV0UHJvcE1lbW8uc2V0KGZpZWxkLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQWRhcHRlciBwYXJhIFNFTEVDVCDigJQgaWd1YWwgcXVlIGBnZXRGaWVsZFByb3BgIHBlcm8gbGltcGlhIGBsYWJlbGAuXG4gICAqIHZhbC1mb3JtIHlhIHJlbmRlcml6YSBlbCB0w610dWxvIGRlbCBjYW1wbyBjb24gYDx2YWwtdGl0bGU+YCBhcnJpYmEgZGVsIGlucHV0O1xuICAgKiBzaSBhZGVtw6FzIHBhc8OhcmFtb3MgYGxhYmVsYCBhbCBgPGlvbi1zZWxlY3Q+YCwgZXN0ZSBsbyBwaW50YSBERU5UUk8gZGVsIHBpbGxcbiAgICog4oaSIHJlZHVuZGFuY2lhIHZpc3VhbCAoXCJUaXBvXCIgZG9zIHZlY2VzKS4gUmV1c2EgZWwgbWlzbW8gbWVtbyAoY29uIGxhIGVudHJhZGFcbiAgICogeWEgbGFiZWwtc3RyaXBwZWQpIHBhcmEgbm8gcm9tcGVyIGxhIGlkZW50aWRhZCBkZSByZWZlcmVuY2lhLlxuICAgKi9cbiAgZ2V0U2VsZWN0UHJvcChmaWVsZDogSW5wdXRNZXRhZGF0YSk6IElucHV0TWV0YWRhdGEge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuc2VsZWN0UHJvcE1lbW8uZ2V0KGZpZWxkKTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuXG4gICAgY29uc3QgYmFzZSA9IHRoaXMuZ2V0RmllbGRQcm9wKGZpZWxkKTtcbiAgICBjb25zdCByZXN1bHQ6IElucHV0TWV0YWRhdGEgPSB7IC4uLmJhc2UsIGxhYmVsOiAnJyB9O1xuICAgIHRoaXMuc2VsZWN0UHJvcE1lbW8uc2V0KGZpZWxkLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQWRhcHRlciDigJQgY29udmllcnRlIHVuIGBJbnB1dE1ldGFkYXRhYCAoY29uIHR5cGU9SEFORExFKSBhIGBVc2VybmFtZUlucHV0TWV0YWRhdGFgLlxuICAgKiBFbCBjaGVjayBkZSBkaXNwb25pYmlsaWRhZCBzZSByZXN1ZWx2ZSBkZW50cm8gZGVsIGNvbXBvbmVudCAoQXV0aFNlcnZpY2UgaW55ZWN0YWRvKTtcbiAgICogZWwgY2FsbGVyIHB1ZWRlIHNvYnJlc2NyaWJpcmxvIHBhc2FuZG8gYGZpZWxkLmVycm9yc2AgbyB1biBgVXNlcm5hbWVJbnB1dE1ldGFkYXRhYFxuICAgKiBjdXN0b20gdXNhbmRvIHR5cGU9VEVYVCBzaSBuZWNlc2l0YSBvdHJhIGZ1ZW50ZSBkZSB0cnV0aC5cbiAgICovXG4gIGdldFVzZXJuYW1lUHJvcChmaWVsZDogSW5wdXRNZXRhZGF0YSk6IFVzZXJuYW1lSW5wdXRNZXRhZGF0YSB7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy51c2VybmFtZVByb3BNZW1vLmdldChmaWVsZCk7XG4gICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcblxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woZmllbGQubmFtZSk7XG4gICAgY29uc3QgcmVzdWx0OiBVc2VybmFtZUlucHV0TWV0YWRhdGEgPSB7XG4gICAgICBjb250cm9sOiBjb250cm9sIGFzIEZvcm1Db250cm9sPHN0cmluZz4sXG4gICAgICBsYWJlbDogZmllbGQubGFiZWwsXG4gICAgICBoaW50OiBmaWVsZC5oaW50LFxuICAgICAgcGxhY2Vob2xkZXI6IGZpZWxkLnBsYWNlaG9sZGVyLFxuICAgICAgbWluTGVuZ3RoOiBmaWVsZC5yYW5nZT8ubWluLFxuICAgICAgbWF4TGVuZ3RoOiBmaWVsZC5yYW5nZT8ubWF4LFxuICAgICAgZXJyb3JzOiBmaWVsZC5lcnJvcnMsXG4gICAgICBzdGF0ZTogZmllbGQuc3RhdGUsXG4gICAgfTtcbiAgICB0aGlzLnVzZXJuYW1lUHJvcE1lbW8uc2V0KGZpZWxkLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQWRhcHRlciDigJQgY29udmllcnRlIHVuIGBJbnB1dE1ldGFkYXRhYCAoY29uIHR5cGU9REFURV9QSUNLRVIpIGEgYERhdGVQaWNrZXJNZXRhZGF0YWAuXG4gICAqIGxhYmVsL2hpbnQgc2Ugb21pdGVuIOKAlCB2YWwtZm9ybSBsb3MgcmVuZGVyaXphIHbDrWEgLmZpZWxkLW5hbWUvLmZpZWxkLWRlc2NyaXB0aW9uLlxuICAgKi9cbiAgZ2V0RGF0ZVBpY2tlclByb3AoZmllbGQ6IElucHV0TWV0YWRhdGEpOiBEYXRlUGlja2VyTWV0YWRhdGEge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuZGF0ZVBpY2tlclByb3BNZW1vLmdldChmaWVsZCk7XG4gICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcblxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woZmllbGQubmFtZSkgYXMgRm9ybUNvbnRyb2w8c3RyaW5nIHwgbnVsbD47XG4gICAgY29uc3QgcmVzdWx0OiBEYXRlUGlja2VyTWV0YWRhdGEgPSB7XG4gICAgICBjb250cm9sLFxuICAgICAgcGxhY2Vob2xkZXI6IGZpZWxkLnBsYWNlaG9sZGVyIHx8IHVuZGVmaW5lZCxcbiAgICAgIHRva2VuOiBmaWVsZC50b2tlbixcbiAgICB9O1xuICAgIHRoaXMuZGF0ZVBpY2tlclByb3BNZW1vLnNldChmaWVsZCwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkYXB0ZXIg4oCUIGNvbnZpZXJ0ZSB1biBgSW5wdXRNZXRhZGF0YWAgKGNvbiB0eXBlPVRFWFRBUkVBKSBhIGBUZXh0YXJlYUlucHV0TWV0YWRhdGFgLlxuICAgKiBEZWZhdWx0cyBzZW5zYXRvczogYXV0b0dyb3cgKyBjb3VudGVyIGhhYmlsaXRhZG8sIDQtMTIgcm93cy5cbiAgICovXG4gIGdldFRleHRhcmVhUHJvcChmaWVsZDogSW5wdXRNZXRhZGF0YSk6IFRleHRhcmVhSW5wdXRNZXRhZGF0YSB7XG4gICAgY29uc3QgY2FjaGVkID0gdGhpcy50ZXh0YXJlYVByb3BNZW1vLmdldChmaWVsZCk7XG4gICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcblxuICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woZmllbGQubmFtZSk7XG4gICAgY29uc3QgcmVzdWx0OiBUZXh0YXJlYUlucHV0TWV0YWRhdGEgPSB7XG4gICAgICBjb250cm9sOiBjb250cm9sIGFzIEZvcm1Db250cm9sPHN0cmluZz4sXG4gICAgICBuYW1lOiBmaWVsZC5uYW1lLFxuICAgICAgLy8gbGFiZWwgdmFjw61vIOKAlCB2YWwtZm9ybSB5YSByZW5kZXJpemEgZWwgdMOtdHVsbyBjb24gPHZhbC10aXRsZT4gYXJyaWJhIGRlbFxuICAgICAgLy8gaW5wdXQuIFBhc2FybG8gYWwgPGlvbi10ZXh0YXJlYT4gZHVwbGljYXLDrWEgZWwgdGV4dG8gKFwiRGVzY3JpcGNpw7NuXCIgeDIpLlxuICAgICAgbGFiZWw6ICcnLFxuICAgICAgaGludDogZmllbGQuaGludCxcbiAgICAgIHBsYWNlaG9sZGVyOiBmaWVsZC5wbGFjZWhvbGRlcixcbiAgICAgIGF1dG9Hcm93OiB0cnVlLFxuICAgICAgbWluUm93czogNCxcbiAgICAgIG1heFJvd3M6IDEyLFxuICAgICAgbWF4TGVuZ3RoOiBmaWVsZC5yYW5nZT8ubWF4ID8/IDIwMDAsXG4gICAgICBzaG93Q291bnRlcjogdHJ1ZSxcbiAgICAgIGNvdW50ZXJGb3JtYXQ6ICdjdXJyZW50JyxcbiAgICAgIGZpbGw6ICdvdXRsaW5lJyxcbiAgICAgIGVycm9yczogZmllbGQuZXJyb3JzLFxuICAgICAgc3RhdGU6IGZpZWxkLnN0YXRlLFxuICAgIH07XG4gICAgdGhpcy50ZXh0YXJlYVByb3BNZW1vLnNldChmaWVsZCwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgZ2V0IGlzQXRFbmRPZkZvcm0oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGlzQXRFbmQodGhpcy5lbGVtZW50UmVmKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdWVyemEgbW9zdHJhciBsb3MgZXJyb3JlcyBkZSB2YWxpZGFjacOzbiAobWFyY2EgdG9kb3MgbG9zIGNvbnRyb2xlcyBjb21vXG4gICAqIHRvdWNoZWQpIHkgZGV2dWVsdmUgc2kgZWwgZm9ybSBlcyB2w6FsaWRvLiBQZW5zYWRvIHBhcmEgZWwgbW9kbyBgY29udHJvbGxlZGA6XG4gICAqIGVsIGhvc3QgbG8gaW52b2NhIGVuIHN1IFwiU2lndWllbnRlXCIgcGFyYSBnYXRlYXIgbGEgbmF2ZWdhY2nDs24gZGVsIHdpemFyZC5cbiAgICovXG4gIHZhbGlkYXRlKCk6IGJvb2xlYW4ge1xuICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgcmV0dXJuIHRoaXMuZm9ybS52YWxpZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXJjYSB0b2RvcyBsb3MgY29udHJvbGVzIGNvbW8gdG91Y2hlZCAobXVlc3RyYSBlcnJvcmVzKSBzaW4gZGV2b2x2ZXIgbmFkYS5cbiAgICogQWxpYXMgc2Vtw6FudGljbyBkZSBsYSBwcmltZXJhIG1pdGFkIGRlIGB2YWxpZGF0ZSgpYC5cbiAgICovXG4gIG1hcmtBbGxUb3VjaGVkKCk6IHZvaWQge1xuICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gIH1cblxuICBnZXQgRm9ybSgpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLmZvcm07XG4gIH1cblxuICBnZXQgRm9ybVN0YXRlKCk6IHsgZm9ybTogRm9ybUdyb3VwOyBkYXRhOiBGb3JtTWV0YWRhdGEgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZvcm06IHRoaXMuRm9ybSxcbiAgICAgIGRhdGE6IHRoaXMucHJvcHMsXG4gICAgfTtcbiAgfVxuXG4gIGdldCBhY3Rpb25zKCk6IEJ1dHRvbk1ldGFkYXRhW10ge1xuICAgIC8vIFJldG9ybmFyIGRlbCBjYWNoZSBwYXJhIGV2aXRhciBjcmVhciBudWV2b3Mgb2JqZXRvcyBlbiBjYWRhIGNpY2xvIGRlIGNoYW5nZSBkZXRlY3Rpb25cbiAgICByZXR1cm4gdGhpcy5hY3Rpb25zQ2FjaGU7XG4gIH1cbn1cbiJdfQ==
|
|
684
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2NvbXBvbmVudHMvb3JnYW5pc21zL2Zvcm0vZm9ybS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFDTCxTQUFTLEVBR1QsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBRU4sTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBdUMsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUxRixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDekUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFEQUFxRCxDQUFDO0FBQzNGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3hGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzlGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBRXhGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUNwRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUNoRyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFB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QUNaLG1CQUFtQjt3QkFDbkIsZ0JBQWdCO3dCQUNoQixjQUFjO3dCQUNkLGtCQUFrQjt3QkFDbEIsc0JBQXNCO3dCQUN0QixtQkFBbUI7d0JBQ25CLG9CQUFvQjt3QkFDcEIsZ0JBQWdCO3dCQUNoQixhQUFhO3dCQUNiLHFCQUFxQjt3QkFDckIsa0JBQWtCO3dCQUNsQixrQkFBa0I7d0JBQ2xCLHFCQUFxQjt3QkFDckIsbUJBQW1CO3dCQUNuQixzQkFBc0I7d0JBQ3RCLGlCQUFpQjt3QkFDakIscUJBQXFCO3dCQUNyQiwwQkFBMEI7d0JBQzFCLHVCQUF1Qjt3QkFDdkIsbUJBQW1CO3dCQUNuQixvQkFBb0I7d0JBQ3BCLDJCQUEyQjt3QkFDM0Isc0JBQXNCO3dCQUN0QiwyQkFBMkI7d0JBQzNCLG1CQUFtQjtxQkFDcEIsWUFDUzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQXNIVDt5R0FLRCxLQUFLO3NCQURKLEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxNQUFNO2dCQUlQLFNBQVM7c0JBRFIsTUFBTTtnQkFJUCxjQUFjO3NCQURiLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBEb0NoZWNrLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uSW5pdCxcbiAgT3V0cHV0LFxuICBTaW1wbGVDaGFuZ2VzLFxuICBzaWduYWwsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGlzQXRFbmQgfSBmcm9tICcuLi8uLi8uLi9zaGFyZWQvdXRpbHMvZG9tJztcbmltcG9ydCB7IERpc3BsYXlDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9kaXNwbGF5L2Rpc3BsYXkuY29tcG9uZW50JztcbmltcG9ydCB7IERpdmlkZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hdG9tcy9kaXZpZGVyL2RpdmlkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IFRpdGxlQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vYXRvbXMvdGl0bGUvdGl0bGUuY29tcG9uZW50JztcbmltcG9ydCB7IEJ1dHRvbkdyb3VwQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2J1dHRvbi1ncm91cC9idXR0b24tZ3JvdXAuY29tcG9uZW50JztcbmltcG9ydCB7IENoZWNrSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvY2hlY2staW5wdXQvY2hlY2staW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IENvbW1lbnRJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9jb21tZW50LWlucHV0L2NvbW1lbnQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9kYXRlLWlucHV0L2RhdGUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVQaWNrZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZGF0ZS1waWNrZXIvZGF0ZS1waWNrZXIuY29tcG9uZW50JztcbmltcG9ydCB7IERhdGVQaWNrZXJNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9kYXRlLXBpY2tlci90eXBlcyc7XG5pbXBvcnQgeyBGaWxlSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvZmlsZS1pbnB1dC9maWxlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBIaW50Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL2hpbnQvaGludC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTnVtYmVyRnJvbVRvQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL251bWJlci1mcm9tLXRvL251bWJlci1mcm9tLXRvLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQYXNzd29yZElucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3Bhc3N3b3JkLWlucHV0L3Bhc3N3b3JkLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQaW5JbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9waW4taW5wdXQvcGluLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBSYWRpb0lucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3JhZGlvLWlucHV0L3JhZGlvLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWFyY2hTZWxlY3RvckNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9zZWxlY3QtaW5wdXQvc2VsZWN0LWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBTZWxlY3RTZWFyY2hDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvc2VsZWN0LXNlYXJjaC9zZWxlY3Qtc2VhcmNoLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNdWx0aVNlbGVjdFNlYXJjaENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy9tdWx0aS1zZWxlY3Qtc2VhcmNoL211bHRpLXNlbGVjdC1zZWFyY2guY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy90ZXh0LWlucHV0L3RleHQtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRhcmVhSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvdGV4dGFyZWEtaW5wdXQvdGV4dGFyZWEtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFRleHRhcmVhSW5wdXRNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy90ZXh0YXJlYS1pbnB1dC90eXBlcyc7XG5pbXBvcnQgeyBQaG9uZUlucHV0Q29tcG9uZW50IH0gZnJvbSAnLi4vLi4vbW9sZWN1bGVzL3Bob25lLWlucHV0L3Bob25lLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUb2dnbGVJbnB1dENvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy90b2dnbGUtaW5wdXQvdG9nZ2xlLWlucHV0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDaGVja2JveFJhZGlvSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvY2hlY2tib3gtcmFkaW8taW5wdXQvY2hlY2tib3gtcmFkaW8taW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFVzZXJuYW1lSW5wdXRDb21wb25lbnQgfSBmcm9tICcuLi8uLi9tb2xlY3VsZXMvdXNlcm5hbWUtaW5wdXQvdXNlcm5hbWUtaW5wdXQuY29tcG9uZW50JztcbmltcG9ydCB7IFVzZXJuYW1lSW5wdXRNZXRhZGF0YSB9IGZyb20gJy4uLy4uL21vbGVjdWxlcy91c2VybmFtZS1pbnB1dC90eXBlcyc7XG5pbXBvcnQgeyBBdHRhY2htZW50VXBsb2FkZXJDb21wb25lbnQgfSBmcm9tICcuLi9hdHRhY2htZW50LXVwbG9hZGVyL2F0dGFjaG1lbnQtdXBsb2FkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IEF0dGFjaG1lbnRJdGVtIH0gZnJvbSAnLi4vYXR0YWNobWVudC11cGxvYWRlci90eXBlcyc7XG5pbXBvcnQgeyBCdXR0b25NZXRhZGF0YSwgQ29tcG9uZW50U3RhdGVzLCBGb3JtTWV0YWRhdGEsIEZvcm1TdWJtaXQsIElucHV0TWV0YWRhdGEsIElucHV0VHlwZSB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmFsLWZvcm0nLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgRGlzcGxheUNvbXBvbmVudCxcbiAgICBUaXRsZUNvbXBvbmVudCxcbiAgICBUZXh0SW5wdXRDb21wb25lbnQsXG4gICAgVGV4dGFyZWFJbnB1dENvbXBvbmVudCxcbiAgICBDaGVja0lucHV0Q29tcG9uZW50LFxuICAgIEJ1dHRvbkdyb3VwQ29tcG9uZW50LFxuICAgIERpdmlkZXJDb21wb25lbnQsXG4gICAgSGludENvbXBvbmVudCxcbiAgICBDb21tZW50SW5wdXRDb21wb25lbnQsXG4gICAgRGF0ZUlucHV0Q29tcG9uZW50LFxuICAgIEZpbGVJbnB1dENvbXBvbmVudCxcbiAgICBOdW1iZXJGcm9tVG9Db21wb25lbnQsXG4gICAgUmFkaW9JbnB1dENvbXBvbmVudCxcbiAgICBQYXNzd29yZElucHV0Q29tcG9uZW50LFxuICAgIFBpbklucHV0Q29tcG9uZW50LFxuICAgIFNlbGVjdFNlYXJjaENvbXBvbmVudCxcbiAgICBNdWx0aVNlbGVjdFNlYXJjaENvbXBvbmVudCxcbiAgICBTZWFyY2hTZWxlY3RvckNvbXBvbmVudCxcbiAgICBQaG9uZUlucHV0Q29tcG9uZW50LFxuICAgIFRvZ2dsZUlucHV0Q29tcG9uZW50LFxuICAgIENoZWNrYm94UmFkaW9JbnB1dENvbXBvbmVudCxcbiAgICBVc2VybmFtZUlucHV0Q29tcG9uZW50LFxuICAgIEF0dGFjaG1lbnRVcGxvYWRlckNvbXBvbmVudCxcbiAgICBEYXRlUGlja2VyQ29tcG9uZW50LFxuICBdLFxuICB0ZW1wbGF0ZTogYFxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIiBbc3R5bGUuLS12YWwtZm9ybS1maWVsZC1nYXBdPVwicHJvcHMuZmllbGRTcGFjaW5nICE9IG51bGwgPyBwcm9wcy5maWVsZFNwYWNpbmcgKyAncHgnIDogbnVsbFwiPlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gICAgICAgIEBpZiAocHJvcHMubmFtZSkge1xuICAgICAgICAgIDx2YWwtZGlzcGxheVxuICAgICAgICAgICAgW3Byb3BzXT1cIntcbiAgICAgICAgICAgICAgY29udGVudDogcHJvcHMubmFtZSxcbiAgICAgICAgICAgICAgY29sb3I6ICdkYXJrJyxcbiAgICAgICAgICAgICAgc2l6ZTogJ3NtYWxsJyxcbiAgICAgICAgICAgIH1cIlxuICAgICAgICAgID48L3ZhbC1kaXNwbGF5PlxuICAgICAgICB9XG4gICAgICAgIEBmb3IgKHMgb2YgcHJvcHMuc2VjdGlvbnM7IHRyYWNrIHMubmFtZSkge1xuICAgICAgICAgIDxkaXYgY2xhc3M9XCJzZWN0aW9uXCI+XG4gICAgICAgICAgICA8dmFsLXRpdGxlIFtwcm9wc109XCJ7IGNvbnRlbnQ6IHMubmFtZSwgc2l6ZTogJ2xhcmdlJywgY29sb3I6ICcnLCBib2xkOiBmYWxzZSB9XCI+PC92YWwtdGl0bGU+XG4gICAgICAgICAgICBAZm9yIChmIG9mIHMuZmllbGRzOyB0cmFjayBmLm5hbWUpIHtcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0XCIgW2F0dHIuZGF0YS10ZXN0aWRdPVwiZi50b2tlblwiPlxuICAgICAgICAgICAgICAgIEBpZiAoZi50eXBlICE9PSB0eXBlcy5QSE9ORSAmJiBmLnR5cGUgIT09IHR5cGVzLkhBTkRMRSAmJiBmLnR5cGUgIT09IHR5cGVzLkFUVEFDSE1FTlQpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgW2F0dHIuaWRdPVwibGFiZWxJZChmKVwiPlxuICAgICAgICAgICAgICAgICAgICA8dmFsLXRpdGxlIFtwcm9wc109XCJ7IGNvbnRlbnQ6IGYubGFiZWwsIHNpemU6ICdzbWFsbCcsIGNvbG9yOiAnZGFyaycsIGJvbGQ6IGZhbHNlIH1cIj48L3ZhbC10aXRsZT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAaWYgKGYuZGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmllbGQtZGVzY3JpcHRpb25cIj57eyBmLmRlc2NyaXB0aW9uIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBAc3dpdGNoIChmLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5URVhUKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtdGV4dC1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtdGV4dC1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5URVhUQVJFQSkge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLXRleHRhcmVhLWlucHV0IFtwcm9wc109XCJnZXRUZXh0YXJlYVByb3AoZilcIj48L3ZhbC10ZXh0YXJlYS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5DSEVDSykge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLWNoZWNrLWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1jaGVjay1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5DT01NRU5UKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtY29tbWVudC1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtY29tbWVudC1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5EQVRFKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtZGF0ZS1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtZGF0ZS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5FTUFJTCkge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cImdldFRleHRJbnB1dFByb3AoZiwgJ2VtYWlsJylcIj48L3ZhbC10ZXh0LWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLkZJTEUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1maWxlLWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1maWxlLWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLkhPVVIpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC10ZXh0LWlucHV0IFtwcm9wc109XCJnZXRUZXh0SW5wdXRQcm9wKGYsICd0aW1lJylcIj48L3ZhbC10ZXh0LWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLk5VTUJFUikge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLXRleHQtaW5wdXQgW3Byb3BzXT1cImdldFRleHRJbnB1dFByb3AoZiwgJ251bWJlcicpXCI+PC92YWwtdGV4dC1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5OVU1CRVJfRlJPTV9UTykge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLW51bWJlci1mcm9tLXRvIFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1udW1iZXItZnJvbS10bz5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5QQVNTV09SRCkge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLXBhc3N3b3JkLWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1wYXNzd29yZC1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5QSU5fQ09ERSkge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLXBpbi1pbnB1dCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtcGluLWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLlJBRElPKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtcmFkaW8taW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLXJhZGlvLWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLlNFTEVDVCkge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLXNlbGVjdC1pbnB1dCBbcHJvcHNdPVwiZ2V0U2VsZWN0UHJvcChmKVwiPjwvdmFsLXNlbGVjdC1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5TRUFSQ0hfU0VMRUNUKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtc2VsZWN0LXNlYXJjaCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCI+PC92YWwtc2VsZWN0LXNlYXJjaD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5NVUxUSV9TRUxFQ1QpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC1tdWx0aS1zZWxlY3Qtc2VhcmNoIFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1tdWx0aS1zZWxlY3Qtc2VhcmNoPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLlBIT05FKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtcGhvbmUtaW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLXBob25lLWlucHV0PlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLkhBTkRMRSkge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLXVzZXJuYW1lLWlucHV0IFtwcm9wc109XCJnZXRVc2VybmFtZVByb3AoZilcIj48L3ZhbC11c2VybmFtZS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5UT0dHTEUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHZhbC10b2dnbGUtaW5wdXQgW3Byb3BzXT1cImdldEZpZWxkUHJvcChmKVwiPjwvdmFsLXRvZ2dsZS1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5DSEVDS0JPWF9SQURJTykge1xuICAgICAgICAgICAgICAgICAgICA8dmFsLWNoZWNrYm94LXJhZGlvLWlucHV0IFtwcm9wc109XCJnZXRGaWVsZFByb3AoZilcIj48L3ZhbC1jaGVja2JveC1yYWRpby1pbnB1dD5cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIEBjYXNlICh0eXBlcy5BVFRBQ0hNRU5UKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtYXR0YWNobWVudC11cGxvYWRlclxuICAgICAgICAgICAgICAgICAgICAgIFtwcm9wc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZi5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpbnQ6IGYuaGludCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwbG9hZEZuOiBmLnVwbG9hZEZuLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGYuc3RhdGUgPT09IHN0YXRlcy5ESVNBQkxFRCB8fCBmLnN0YXRlID09PSBzdGF0ZXMuV09SS0lORyxcbiAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAoYXR0YWNobWVudHNDaGFuZ2UpPVwib25BdHRhY2htZW50Q2hhbmdlKGYubmFtZSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgID48L3ZhbC1hdHRhY2htZW50LXVwbG9hZGVyPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgQGNhc2UgKHR5cGVzLkRBVEVfUElDS0VSKSB7XG4gICAgICAgICAgICAgICAgICAgIDx2YWwtZGF0ZS1waWNrZXIgW3Byb3BzXT1cImdldERhdGVQaWNrZXJQcm9wKGYpXCI+PC92YWwtZGF0ZS1waWNrZXI+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDx2YWwtaGludCBbcHJvcHNdPVwiZ2V0RmllbGRQcm9wKGYpXCIgW2lkXT1cImVycm9ySWQoZilcIj48L3ZhbC1oaW50PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDx2YWwtZGl2aWRlciBbcHJvcHNdPVwieyBmaWxsOiAnc29saWQnLCBzaXplOiAnbWVkaXVtJywgY29sb3I6ICdtZWRpdW0nIH1cIj48L3ZhbC1kaXZpZGVyPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIXByb3BzLmNvbnRyb2xsZWQpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwic3VibWl0LWFjdGlvbnNcIiBbY2xhc3Muc3VibWl0LWFjdGlvbnMtLXN0aWNreV09XCJwcm9wcy5zdGlja3lGb290ZXJcIj5cbiAgICAgICAgICAgIDx2YWwtYnV0dG9uLWdyb3VwXG4gICAgICAgICAgICAgIFtwcm9wc109XCJ7IGJ1dHRvbnM6IGFjdGlvbnMsIHBvc2l0aW9uOiAnY2VudGVyJywgY29sdW1uZWQ6IGZhbHNlIH1cIlxuICAgICAgICAgICAgICAob25DbGljayk9XCJzdWJtaXRIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgPjwvdmFsLWJ1dHRvbi1ncm91cD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuICBgLFxuICBzdHlsZVVybHM6IFsnLi9mb3JtLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgRG9DaGVjayB7XG4gIEBJbnB1dCgpXG4gIHByb3BzOiBGb3JtTWV0YWRhdGE7XG5cbiAgQE91dHB1dCgpXG4gIG9uU3VibWl0ID0gbmV3IEV2ZW50RW1pdHRlcjxGb3JtU3VibWl0PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkludmFsaWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uU2VsZWN0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGZpZWxkOiBzdHJpbmc7IHZhbHVlOiBhbnkgfT4oKTtcblxuICBmb3JtOiBGb3JtR3JvdXA7XG4gIHR5cGVzID0gSW5wdXRUeXBlO1xuICBzdGF0ZXMgPSBDb21wb25lbnRTdGF0ZXM7XG5cbiAgLyoqXG4gICAqIFZhbG9yIGFjdHVhbCBkZWwgZm9ybSAoYGZvcm0uZ2V0UmF3VmFsdWUoKWApLCBhY3R1YWxpemFkbyBlbiBjYWRhXG4gICAqIGB2YWx1ZUNoYW5nZXNgLiBQZW5zYWRvIHBhcmEgZWwgbW9kbyBgY29udHJvbGxlZGA6IGVsIGhvc3QgbG8gbGVlIHbDrWFcbiAgICogYEBWaWV3Q2hpbGQoRm9ybUNvbXBvbmVudClgIHNpbiB0b2NhciBlbCBGb3JtR3JvdXAgZGlyZWN0by4gRW4gbW9kbyBub3JtYWxcbiAgICogdGFtYmnDqW4gZXN0w6EgZGlzcG9uaWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlID0gc2lnbmFsPFJlY29yZDxzdHJpbmcsIGFueT4+KHt9KTtcblxuICAvKipcbiAgICogRXN0YWRvIGRlIHZhbGlkZXogZGVsIGZvcm0sIGFjdHVhbGl6YWRvIGVuIGNhZGEgYHN0YXR1c0NoYW5nZXNgLiBQYXJhIHF1ZVxuICAgKiBlbCBob3N0ICh3aXphcmQpIGhhYmlsaXRlL2Rlc2hhYmlsaXRlIHN1IGJvdMOzbiBcIlNpZ3VpZW50ZVwiLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsaWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10gPSBbXTtcblxuICBwcml2YXRlIGFjdGlvbnNDYWNoZTogQnV0dG9uTWV0YWRhdGFbXSA9IFtdO1xuXG4gIC8vIE1lbW8gZGUgZ2V0RmllbGRQcm9wL2dldFVzZXJuYW1lUHJvcCBwb3IgcmVmZXJlbmNpYSBkZSBmaWVsZCDigJQgZXZpdGFcbiAgLy8gY3JlYXIgdW4gbnVldm8gb2JqZXRvIHByb3BzIHBvciBrZXlzdHJva2UgKGNhZGEgQ0QgY3ljbGUgaW52b2NhcsOtYSBlbFxuICAvLyB0ZW1wbGF0ZSBiaW5kaW5nLCBtdWx0aXBsaWNhbmRvIHJlLXJlbmRlcnMgZW4gY2FzY2FkYSBwb3IgIyBmaWVsZHMpLlxuICAvLyBXZWFrTWFwOiBzaSBsYSByZWZlcmVuY2lhIGRlbCBmaWVsZCBjYW1iaWEsIGVsIGNhY2hlIHNlIGxpYmVyYS5cbiAgcHJpdmF0ZSBmaWVsZFByb3BNZW1vID0gbmV3IFdlYWtNYXA8SW5wdXRNZXRhZGF0YSwgSW5wdXRNZXRhZGF0YT4oKTtcbiAgcHJpdmF0ZSB1c2VybmFtZVByb3BNZW1vID0gbmV3IFdlYWtNYXA8SW5wdXRNZXRhZGF0YSwgVXNlcm5hbWVJbnB1dE1ldGFkYXRhPigpO1xuICBwcml2YXRlIHRleHRhcmVhUHJvcE1lbW8gPSBuZXcgV2Vha01hcDxJbnB1dE1ldGFkYXRhLCBUZXh0YXJlYUlucHV0TWV0YWRhdGE+KCk7XG4gIHByaXZhdGUgc2VsZWN0UHJvcE1lbW8gPSBuZXcgV2Vha01hcDxJbnB1dE1ldGFkYXRhLCBJbnB1dE1ldGFkYXRhPigpO1xuICAvLyBNZW1vIGRlIHByb3BzIGNvbiB1biBpbnB1dFR5cGUgSFRNTCBpbnllY3RhZG8gKEVNQUlML05VTUJFUi9IT1VSIGNvbGFwc2Fkb3NcbiAgLy8gZW4gdmFsLXRleHQtaW5wdXQpLiBDbGF2ZSBwb3IgZmllbGQgcGFyYSBjb25zZXJ2YXIgaWRlbnRpZGFkIGRlIHJlZmVyZW5jaWEuXG4gIHByaXZhdGUgdGV4dElucHV0UHJvcE1lbW8gPSBuZXcgV2Vha01hcDxJbnB1dE1ldGFkYXRhLCBJbnB1dE1ldGFkYXRhPigpO1xuICBwcml2YXRlIGRhdGVQaWNrZXJQcm9wTWVtbyA9IG5ldyBXZWFrTWFwPElucHV0TWV0YWRhdGEsIERhdGVQaWNrZXJNZXRhZGF0YT4oKTtcblxuICAvLyBJZHMgZXN0YWJsZXMgcG9yIGZpZWxkIHBhcmEgZWwgd2lyaW5nIGRlIGFjY2VzaWJpbGlkYWQgbGFiZWzihpRpbnB1dOKGlGVycm9yLlxuICAvLyBFc3RhYmxlcyBlbnRyZSBDRCBjeWNsZXMgKG1lbW9pemFkb3MgcG9yIHJlZmVyZW5jaWEgZGUgZmllbGQpIOKGkiBhcmlhLSogbm8gcGFycGFkZWEuXG4gIHByaXZhdGUgZmllbGRJZE1lbW8gPSBuZXcgV2Vha01hcDxJbnB1dE1ldGFkYXRhLCB7IGxhYmVsSWQ6IHN0cmluZzsgZXJyb3JJZDogc3RyaW5nIH0+KCk7XG4gIHByaXZhdGUgZmllbGRVaWQgPSAwO1xuXG4gIC8vIEVzdGFkbyBwcmV2aW8gcGFyYSBkZXRlY3RhciBjYW1iaW9zIGVuIG5nRG9DaGVja1xuICBwcml2YXRlIHByZXZpb3VzU3RhdGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBwcmV2aW91c1VwbG9hZGluZ0NvdW50ID0gMDtcblxuICAvLyBDYW1wb3MgQVRUQUNITUVOVCBjb24gdXBsb2FkcyBlbiBjdXJzbyDigJQgYmxvcXVlYSBzdWJtaXQgKyBERVNIQUJJTElUQSBlbFxuICAvLyBib3TDs24gKG5vIGxvYWRpbmc6IGVsIHNwaW5uZXIgc2UgcmVzZXJ2YSBwYXJhIGVsIHN1Ym1pdCByZWFsIGRlbCBmb3JtKS5cbiAgcHJpdmF0ZSB1cGxvYWRpbmdGaWVsZHMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGNvbnN0IGZvcm1Db250cm9scyA9IHt9O1xuICAgIHRoaXMucHJvcHMuc2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAvLyBIb25yYSBgZmllbGQudmFsdWVgIGFsIGNvbnN0cnVpciBlbCBGb3JtR3JvdXAgcGFyYSBxdWUgY29udHJvbGVzIHRpcG9cbiAgICAgICAgLy8gSEFORExFIChxdWUgY29uc3VtZW4gZWwgY29udHJvbCBkaXJlY3RvIHZpYSBbZm9ybUNvbnRyb2xdKSByZWNpYmFuIGVsXG4gICAgICAgIC8vIHZhbG9yIGluaWNpYWwgc2luIHF1ZSBlbCBjYWxsZXIgdGVuZ2EgcXVlIHBhdGNoVmFsdWUgcG9zdC1tb3VudC5cbiAgICAgICAgLy8gRWwgaGVscGVyIGFwcGx5RGVmYXVsdFZhbHVlVG9Db250cm9sICh2YWwtdGV4dC1pbnB1dCBldGMuKSBzaWd1ZVxuICAgICAgICAvLyBmdW5jaW9uYW5kbyDigJQgZXNjcmliZSBzb2JyZSB1biBjb250cm9sIHlhIGluaWNpYWxpemFkbywgaWRlbXBvdGVudGUuXG4gICAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IGZpZWxkLnZhbHVlID8/IG51bGw7XG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSB0aGlzLnR5cGVzLk5VTUJFUl9GUk9NX1RPKSB7XG4gICAgICAgICAgLy8gQ3JlYXIgZG9zIGNvbnRyb2xlcyBwYXJhIGNhbXBvcyBOVU1CRVJfRlJPTV9UT1xuICAgICAgICAgIGZvcm1Db250cm9sc1tgJHtmaWVsZC5uYW1lfV9mcm9tYF0gPSBbaW5pdGlhbFZhbHVlLCBmaWVsZC52YWxpZGF0b3JzIHx8IFtdXTtcbiAgICAgICAgICBmb3JtQ29udHJvbHNbYCR7ZmllbGQubmFtZX1fdG9gXSA9IFtpbml0aWFsVmFsdWUsIGZpZWxkLnZhbGlkYXRvcnMgfHwgW11dO1xuICAgICAgICB9IGVsc2UgaWYgKGZpZWxkLnR5cGUgPT09IHRoaXMudHlwZXMuQVRUQUNITUVOVCkge1xuICAgICAgICAgIGZvcm1Db250cm9sc1tmaWVsZC5uYW1lXSA9IFtbXSwgZmllbGQudmFsaWRhdG9ycyB8fCBbXV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9ybUNvbnRyb2xzW2ZpZWxkLm5hbWVdID0gW2luaXRpYWxWYWx1ZSwgZmllbGQudmFsaWRhdG9ycyB8fCBbXV07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoZm9ybUNvbnRyb2xzKTtcbiAgICB0aGlzLnByb3BzLnNlY3Rpb25zLmZvckVhY2goc2VjdGlvbiA9PiB7XG4gICAgICBzZWN0aW9uLmZpZWxkc1xuICAgICAgICAuZmlsdGVyKFxuICAgICAgICAgIHggPT5cbiAgICAgICAgICAgIHgudHlwZSA9PT0gdGhpcy50eXBlcy5TRUxFQ1QgfHxcbiAgICAgICAgICAgIHgudHlwZSA9PT0gdGhpcy50eXBlcy5URVhUIHx8XG4gICAgICAgICAgICB4LnR5cGUgPT09IHRoaXMudHlwZXMuU0VBUkNIX1NFTEVDVCB8fFxuICAgICAgICAgICAgeC50eXBlID09PSB0aGlzLnR5cGVzLk1VTFRJX1NFTEVDVFxuICAgICAgICApXG4gICAgICAgIC5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICB0aGlzLnRyYWNrU2VsZWN0Q2hhbmdlcyhmaWVsZC5uYW1lKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBFc3RhZG8gcmVhY3Rpdm8gcMO6YmxpY28gKHZhbHVlL3ZhbGlkKSDigJQgYWN0dWFsaXphZG8gcG9yIHN1c2NyaXBjacOzbiBSeEpTLFxuICAgIC8vIE5PIGRlbnRybyBkZSB1biBlZmZlY3Q6IHNldGVhciBzaWduYWxzIGFjw6EgZXMgc2VndXJvIChubyBkaXNwYXJhIE5HMDYwMCkuXG4gICAgdGhpcy52YWx1ZS5zZXQodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpO1xuICAgIHRoaXMudmFsaWQuc2V0KHRoaXMuZm9ybS52YWxpZCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5mb3JtLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4gdGhpcy52YWx1ZS5zZXQodGhpcy5mb3JtLmdldFJhd1ZhbHVlKCkpKSk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2godGhpcy5mb3JtLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHRoaXMudmFsaWQuc2V0KHRoaXMuZm9ybS52YWxpZCkpKTtcblxuICAgIHRoaXMuc3luY0ZpZWxkQ29udHJvbFN0YXRlcygpO1xuICAgIHRoaXMudXBkYXRlQWN0aW9uc0NhY2hlKCk7XG4gICAgdGhpcy5wcmV2aW91c1N0YXRlID0gdGhpcy5wcm9wcy5zdGF0ZTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAvLyBDdWFuZG8gcHJvcHMgY2FtYmlhLCByZWNvbnN0cnVpciBlbCBjYWNoZVxuICAgIGlmIChjaGFuZ2VzWydwcm9wcyddICYmIHRoaXMuZm9ybSkge1xuICAgICAgdGhpcy5zeW5jRmllbGRDb250cm9sU3RhdGVzKCk7XG4gICAgICB0aGlzLnVwZGF0ZUFjdGlvbnNDYWNoZSgpO1xuICAgICAgdGhpcy5wcmV2aW91c1N0YXRlID0gdGhpcy5wcm9wcy5zdGF0ZTtcbiAgICB9XG4gIH1cblxuICBuZ0RvQ2hlY2soKSB7XG4gICAgLy8gRGV0ZWN0YXIgY2FtYmlvcyBlbiBlbCBlc3RhZG8gZGVsIGZvcm11bGFyaW8gKG11dGFjacOzbiBzaW4gY2FtYmlhciByZWZlcmVuY2lhKVxuICAgIGNvbnN0IHVwbG9hZGluZ0NvdW50ID0gdGhpcy51cGxvYWRpbmdGaWVsZHMuc2l6ZTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmZvcm0gJiZcbiAgICAgIHRoaXMucHJvcHMgJiZcbiAgICAgICh0aGlzLnByb3BzLnN0YXRlICE9PSB0aGlzLnByZXZpb3VzU3RhdGUgfHwgdXBsb2FkaW5nQ291bnQgIT09IHRoaXMucHJldmlvdXNVcGxvYWRpbmdDb3VudClcbiAgICApIHtcbiAgICAgIHRoaXMucHJldmlvdXNTdGF0ZSA9IHRoaXMucHJvcHMuc3RhdGU7XG4gICAgICB0aGlzLnByZXZpb3VzVXBsb2FkaW5nQ291bnQgPSB1cGxvYWRpbmdDb3VudDtcbiAgICAgIHRoaXMudXBkYXRlQWN0aW9uc0NhY2hlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFN5bmNocm9uaXplcyBmb3JtIGNvbnRyb2wgZGlzYWJsZWQvZW5hYmxlZCBzdGF0ZSB3aXRoIGZpZWxkIG1ldGFkYXRhLlxuICAgKi9cbiAgcHJpdmF0ZSBzeW5jRmllbGRDb250cm9sU3RhdGVzKCkge1xuICAgIHRoaXMucHJvcHMuc2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uID0+IHtcbiAgICAgIHNlY3Rpb24uZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICBpZiAoZmllbGQudHlwZSA9PT0gdGhpcy50eXBlcy5BVFRBQ0hNRU5UKSByZXR1cm47XG4gICAgICAgIGlmIChmaWVsZC50eXBlID09PSB0aGlzLnR5cGVzLk5VTUJFUl9GUk9NX1RPKSB7XG4gICAgICAgICAgY29uc3QgZnJvbUNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woYCR7ZmllbGQubmFtZX1fZnJvbWApO1xuICAgICAgICAgIGNvbnN0IHRvQ29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbChgJHtmaWVsZC5uYW1lfV90b2ApO1xuXG4gICAgICAgICAgaWYgKGZpZWxkLnN0YXRlID09PSBDb21wb25lbnRTdGF0ZXMuRElTQUJMRUQpIHtcbiAgICAgICAgICAgIGZyb21Db250cm9sLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgdG9Db250cm9sLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmcm9tQ29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgdG9Db250cm9sLmVuYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSB0aGlzLmdldENvbnRyb2woZmllbGQubmFtZSk7XG4gICAgICAgICAgaWYgKGZpZWxkLnN0YXRlID09PSBDb21wb25lbnRTdGF0ZXMuRElTQUJMRUQpIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRyb2wuZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFjdHVhbGl6YSBlbCBjYWNoZSBkZSBhY3Rpb25zIGJhc2FkbyBlbiBlbCBlc3RhZG8gYWN0dWFsIGRlbCBmb3JtLlxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVBY3Rpb25zQ2FjaGUoKSB7XG4gICAgLy8gRW4gbW9kbyBjb250cm9sbGVkIChvIHNpbiBzdWJtaXQpIG5vIGhheSBib3TDs24gcHJvcGlvIHF1ZSBjYWNoZWFyLlxuICAgIGlmICghdGhpcy5wcm9wcy5hY3Rpb25zKSB7XG4gICAgICB0aGlzLmFjdGlvbnNDYWNoZSA9IFtdO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgYWN0aW9uU3RhdGUgPSB0aGlzLnByb3BzLmFjdGlvbnMuc3RhdGU7XG5cbiAgICBpZiAodGhpcy5wcm9wcy5zdGF0ZSA9PT0gQ29tcG9uZW50U3RhdGVzLldPUktJTkcpIHtcbiAgICAgIC8vIFN1Ym1pdCByZWFsIGRlbCBmb3JtIGVuIGN1cnNvIOKGkiBib3TDs24gZW4gbG9hZGluZyAoc3Bpbm5lcikuXG4gICAgICBhY3Rpb25TdGF0ZSA9IENvbXBvbmVudFN0YXRlcy5XT1JLSU5HO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0ZSA9PT0gQ29tcG9uZW50U3RhdGVzLkRJU0FCTEVEIHx8IHRoaXMudXBsb2FkaW5nRmllbGRzLnNpemUgPiAwKSB7XG4gICAgICAvLyBTdWJpZGEgZGUgYWRqdW50byBlbiBjdXJzbyDihpIgREVTSEFCSUxJVEFSIGVsIHN1Ym1pdCwgTk8gbG9hZGluZzogdG9kYXbDrWFcbiAgICAgIC8vIG5vIHNlIGVzdMOhIGVudmlhbmRvIGVsIGZvcm0sIHNvbG8gc3ViaWVuZG8gdW4gYXJjaGl2by4gVW4gc3Bpbm5lciBhY8OhXG4gICAgICAvLyBjb25mdW5kZSAocGFyZWNlIHF1ZSBlbCBmb3JtIHNlIGVzdMOhIGVudmlhbmRvKS5cbiAgICAgIGFjdGlvblN0YXRlID0gQ29tcG9uZW50U3RhdGVzLkRJU0FCTEVEO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5zdGF0ZSA9PT0gQ29tcG9uZW50U3RhdGVzLkVOQUJMRUQgfHwgdGhpcy5mb3JtPy52YWxpZCkge1xuICAgICAgYWN0aW9uU3RhdGUgPSBDb21wb25lbnRTdGF0ZXMuRU5BQkxFRDtcbiAgICB9XG5cbiAgICB0aGlzLmFjdGlvbnNDYWNoZSA9IFt7IC4uLnRoaXMucHJvcHMuYWN0aW9ucywgc3RhdGU6IGFjdGlvblN0YXRlIH1dO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgLy8gQ2xlYW51cCBzdWJzY3JpcHRpb25zIHRvIGF2b2lkIG1lbW9yeSBsZWFrc1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHN1YiA9PiBzdWIudW5zdWJzY3JpYmUoKSk7XG4gIH1cblxuICB0cmFja1NlbGVjdENoYW5nZXMoZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRDb250cm9sKGZpZWxkTmFtZSk7XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gY29udHJvbC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMub25TZWxlY3RDaGFuZ2UuZW1pdCh7IGZpZWxkOiBmaWVsZE5hbWUsIHZhbHVlIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKHN1YnNjcmlwdGlvbik7XG4gIH1cblxuICBhc3luYyBzdWJtaXRIYW5kbGVyKHRva2VuPzogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMudXBsb2FkaW5nRmllbGRzLnNpemUgPiAwKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLmZvcm0udmFsaWQpIHtcbiAgICAgIHRoaXMuZm9ybS5tYXJrQWxsQXNUb3VjaGVkKCk7XG4gICAgICB0aGlzLm9uSW52YWxpZC5lbWl0KCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMub25TdWJtaXQuZW1pdCh7IGZpZWxkczogdGhpcy5mb3JtLmdldFJhd1ZhbHVlKCksIHRva2VuIH0pO1xuICB9XG5cbiAgb25BdHRhY2htZW50Q2hhbmdlKGZpZWxkTmFtZTogc3RyaW5nLCBpdGVtczogQXR0YWNobWVudEl0ZW1bXSk6IHZvaWQge1xuICAgIGNvbnN0IHJlYWR5VXJscyA9IGl0ZW1zLmZpbHRlcihhID0+IGEuc3RhdHVzID09PSAncmVhZHknICYmIGEudXJsKS5tYXAoYSA9PiBhLnVybCEpO1xuICAgIHRoaXMuZm9ybS5nZXQoZmllbGROYW1lKT8uc2V0VmFsdWUocmVhZHlVcmxzLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgaWYgKGl0ZW1zLnNvbWUoYSA9PiBhLnN0YXR1cyA9PT0gJ3VwbG9hZGluZycpKSB7XG4gICAgICB0aGlzLnVwbG9hZGluZ0ZpZWxkcy5hZGQoZmllbGROYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGxvYWRpbmdGaWVsZHMuZGVsZXRlKGZpZWxkTmFtZSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0Q29udHJvbChmaWVsZDogc3RyaW5nKTogRm9ybUNvbnRyb2wge1xuICAgIHJldHVybiB0aGlzLkZvcm0uZ2V0KGZpZWxkKSBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBJZHMgZXN0YWJsZXMgKGxhYmVsICsgZXJyb3IpIHBhcmEgdW4gZmllbGQuIE1lbW9pemFkb3MgcG9yIHJlZmVyZW5jaWEgcGFyYVxuICAgKiBxdWUgZWwgd2lyaW5nIGBhcmlhLWxhYmVsbGVkYnlgIC8gYGFyaWEtZGVzY3JpYmVkYnlgIG5vIGNhbWJpZSBlbnRyZSBjaWNsb3NcbiAgICogZGUgY2hhbmdlIGRldGVjdGlvbi5cbiAgICovXG4gIHByaXZhdGUgZmllbGRJZHMoZmllbGQ6IElucHV0TWV0YWRhdGEpOiB7IGxhYmVsSWQ6IHN0cmluZzsgZXJyb3JJZDogc3RyaW5nIH0ge1xuICAgIGxldCBpZHMgPSB0aGlzLmZpZWxkSWRNZW1vLmdldChmaWVsZCk7XG4gICAgaWYgKCFpZHMpIHtcbiAgICAgIGNvbnN0IGJhc2UgPSBgdmFsLWZvcm0tZmllbGQtJHt0aGlzLmZpZWxkVWlkKyt9YDtcbiAgICAgIGlkcyA9IHsgbGFiZWxJZDogYCR7YmFzZX0tbGFiZWxgLCBlcnJvcklkOiBgJHtiYXNlfS1lcnJvcmAgfTtcbiAgICAgIHRoaXMuZmllbGRJZE1lbW8uc2V0KGZpZWxkLCBpZHMpO1xuICAgIH1cbiAgICByZXR1cm4gaWRzO1xuICB9XG5cbiAgLyoqIElkIGRlbCBsYWJlbCB2aXNpYmxlIGRlbCBjYW1wbyAoY29uc3VtaWRvIHBvciBlbCB0ZW1wbGF0ZSArIGVsIGlucHV0KS4gKi9cbiAgbGFiZWxJZChmaWVsZDogSW5wdXRNZXRhZGF0YSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRJZHMoZmllbGQpLmxhYmVsSWQ7XG4gIH1cblxuICAvKiogSWQgZGVsIGNvbnRlbmVkb3IgZGUgZXJyb3IgKGB2YWwtaGludGApIGRlbCBjYW1wby4gKi9cbiAgZXJyb3JJZChmaWVsZDogSW5wdXRNZXRhZGF0YSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZmllbGRJZHMoZmllbGQpLmVycm9ySWQ7XG4gIH1cblxuICBnZXRGaWVsZFByb3AoZmllbGQ6IElucHV0TWV0YWRhdGEpOiBJbnB1dE1ldGFkYXRhIHtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmZpZWxkUHJvcE1lbW8uZ2V0KGZpZWxkKTtcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkO1xuXG4gICAgaWYgKCFmaWVsZC50b2tlbikge1xuICAgICAgZmllbGQudG9rZW4gPSBgaW5wdXQtJHtmaWVsZC50eXBlfS0ke2ZpZWxkLm5hbWV9YDtcbiAgICB9XG5cbiAgICBjb25zdCBpZHMgPSB0aGlzLmZpZWxkSWRzKGZpZWxkKTtcblxuICAgIGxldCByZXN1bHQ6IElucHV0TWV0YWRhdGE7XG4gICAgaWYgKGZpZWxkLnR5cGUgPT09IHRoaXMudHlwZXMuTlVNQkVSX0ZST01fVE8pIHtcbiAgICAgIGNvbnN0IGZyb21Db250cm9sID0gdGhpcy5nZXRDb250cm9sKGAke2ZpZWxkLm5hbWV9X2Zyb21gKTtcbiAgICAgIGNvbnN0IHRvQ29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbChgJHtmaWVsZC5uYW1lfV90b2ApO1xuICAgICAgcmVzdWx0ID0geyAuLi5maWVsZCwgZnJvbUNvbnRyb2wsIHRvQ29udHJvbCwgY29udHJvbDogdW5kZWZpbmVkLCBsYWJlbElkOiBpZHMubGFiZWxJZCwgZXJyb3JJZDogaWRzLmVycm9ySWQgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgY29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbChmaWVsZC5uYW1lKTtcbiAgICAgIHJlc3VsdCA9IHsgLi4uZmllbGQsIGNvbnRyb2wsIGxhYmVsSWQ6IGlkcy5sYWJlbElkLCBlcnJvcklkOiBpZHMuZXJyb3JJZCB9O1xuICAgIH1cbiAgICB0aGlzLmZpZWxkUHJvcE1lbW8uc2V0KGZpZWxkLCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogQWRhcHRlciBwYXJhIGxvcyB0aXBvcyBjb2xhcHNhZG9zIGVuIGB2YWwtdGV4dC1pbnB1dGAgKEVNQUlML05VTUJFUi9IT1VSKS5cbiAgICogUmV1c2EgYGdldEZpZWxkUHJvcGAgKGNvbiBzdSBjb250cm9sICsgd2lyaW5nIGRlIGlkcykgZSBpbnllY3RhIGVsIGBpbnB1dFR5cGVgXG4gICAqIEhUTUwgbmF0aXZvLiBNZW1vaXphZG8gcG9yIHJlZmVyZW5jaWEgZGUgZmllbGQgcGFyYSBubyByb21wZXIgbGEgaWRlbnRpZGFkLlxuICAgKi9cbiAgZ2V0VGV4dElucHV0UHJvcChmaWVsZDogSW5wdXRNZXRhZGF0YSwgaW5wdXRUeXBlOiBOb25OdWxsYWJsZTxJbnB1dE1ldGFkYXRhWydpbnB1dFR5cGUnXT4pOiBJbnB1dE1ldGFkYXRhIHtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnRleHRJbnB1dFByb3BNZW1vLmdldChmaWVsZCk7XG4gICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcblxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLmdldEZpZWxkUHJvcChmaWVsZCk7XG4gICAgY29uc3QgcmVzdWx0OiBJbnB1dE1ldGFkYXRhID0geyAuLi5iYXNlLCBpbnB1dFR5cGUgfTtcbiAgICB0aGlzLnRleHRJbnB1dFByb3BNZW1vLnNldChmaWVsZCwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkYXB0ZXIgcGFyYSBTRUxFQ1Qg4oCUIGlndWFsIHF1ZSBgZ2V0RmllbGRQcm9wYCBwZXJvIGxpbXBpYSBgbGFiZWxgLlxuICAgKiB2YWwtZm9ybSB5YSByZW5kZXJpemEgZWwgdMOtdHVsbyBkZWwgY2FtcG8gY29uIGA8dmFsLXRpdGxlPmAgYXJyaWJhIGRlbCBpbnB1dDtcbiAgICogc2kgYWRlbcOhcyBwYXPDoXJhbW9zIGBsYWJlbGAgYWwgYDxpb24tc2VsZWN0PmAsIGVzdGUgbG8gcGludGEgREVOVFJPIGRlbCBwaWxsXG4gICAqIOKGkiByZWR1bmRhbmNpYSB2aXN1YWwgKFwiVGlwb1wiIGRvcyB2ZWNlcykuIFJldXNhIGVsIG1pc21vIG1lbW8gKGNvbiBsYSBlbnRyYWRhXG4gICAqIHlhIGxhYmVsLXN0cmlwcGVkKSBwYXJhIG5vIHJvbXBlciBsYSBpZGVudGlkYWQgZGUgcmVmZXJlbmNpYS5cbiAgICovXG4gIGdldFNlbGVjdFByb3AoZmllbGQ6IElucHV0TWV0YWRhdGEpOiBJbnB1dE1ldGFkYXRhIHtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLnNlbGVjdFByb3BNZW1vLmdldChmaWVsZCk7XG4gICAgaWYgKGNhY2hlZCkgcmV0dXJuIGNhY2hlZDtcblxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLmdldEZpZWxkUHJvcChmaWVsZCk7XG4gICAgY29uc3QgcmVzdWx0OiBJbnB1dE1ldGFkYXRhID0geyAuLi5iYXNlLCBsYWJlbDogJycgfTtcbiAgICB0aGlzLnNlbGVjdFByb3BNZW1vLnNldChmaWVsZCwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkYXB0ZXIg4oCUIGNvbnZpZXJ0ZSB1biBgSW5wdXRNZXRhZGF0YWAgKGNvbiB0eXBlPUhBTkRMRSkgYSBgVXNlcm5hbWVJbnB1dE1ldGFkYXRhYC5cbiAgICogRWwgY2hlY2sgZGUgZGlzcG9uaWJpbGlkYWQgc2UgcmVzdWVsdmUgZGVudHJvIGRlbCBjb21wb25lbnQgKEF1dGhTZXJ2aWNlIGlueWVjdGFkbyk7XG4gICAqIGVsIGNhbGxlciBwdWVkZSBzb2JyZXNjcmliaXJsbyBwYXNhbmRvIGBmaWVsZC5lcnJvcnNgIG8gdW4gYFVzZXJuYW1lSW5wdXRNZXRhZGF0YWBcbiAgICogY3VzdG9tIHVzYW5kbyB0eXBlPVRFWFQgc2kgbmVjZXNpdGEgb3RyYSBmdWVudGUgZGUgdHJ1dGguXG4gICAqL1xuICBnZXRVc2VybmFtZVByb3AoZmllbGQ6IElucHV0TWV0YWRhdGEpOiBVc2VybmFtZUlucHV0TWV0YWRhdGEge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMudXNlcm5hbWVQcm9wTWVtby5nZXQoZmllbGQpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRDb250cm9sKGZpZWxkLm5hbWUpO1xuICAgIGNvbnN0IHJlc3VsdDogVXNlcm5hbWVJbnB1dE1ldGFkYXRhID0ge1xuICAgICAgY29udHJvbDogY29udHJvbCBhcyBGb3JtQ29udHJvbDxzdHJpbmc+LFxuICAgICAgbGFiZWw6IGZpZWxkLmxhYmVsLFxuICAgICAgaGludDogZmllbGQuaGludCxcbiAgICAgIHBsYWNlaG9sZGVyOiBmaWVsZC5wbGFjZWhvbGRlcixcbiAgICAgIG1pbkxlbmd0aDogZmllbGQucmFuZ2U/Lm1pbixcbiAgICAgIG1heExlbmd0aDogZmllbGQucmFuZ2U/Lm1heCxcbiAgICAgIGVycm9yczogZmllbGQuZXJyb3JzLFxuICAgICAgc3RhdGU6IGZpZWxkLnN0YXRlLFxuICAgIH07XG4gICAgdGhpcy51c2VybmFtZVByb3BNZW1vLnNldChmaWVsZCwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkYXB0ZXIg4oCUIGNvbnZpZXJ0ZSB1biBgSW5wdXRNZXRhZGF0YWAgKGNvbiB0eXBlPURBVEVfUElDS0VSKSBhIGBEYXRlUGlja2VyTWV0YWRhdGFgLlxuICAgKiBsYWJlbC9oaW50IHNlIG9taXRlbiDigJQgdmFsLWZvcm0gbG9zIHJlbmRlcml6YSB2w61hIC5maWVsZC1uYW1lLy5maWVsZC1kZXNjcmlwdGlvbi5cbiAgICovXG4gIGdldERhdGVQaWNrZXJQcm9wKGZpZWxkOiBJbnB1dE1ldGFkYXRhKTogRGF0ZVBpY2tlck1ldGFkYXRhIHtcbiAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmRhdGVQaWNrZXJQcm9wTWVtby5nZXQoZmllbGQpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRDb250cm9sKGZpZWxkLm5hbWUpIGFzIEZvcm1Db250cm9sPHN0cmluZyB8IG51bGw+O1xuICAgIGNvbnN0IHJlc3VsdDogRGF0ZVBpY2tlck1ldGFkYXRhID0ge1xuICAgICAgY29udHJvbCxcbiAgICAgIHBsYWNlaG9sZGVyOiBmaWVsZC5wbGFjZWhvbGRlciB8fCB1bmRlZmluZWQsXG4gICAgICB0b2tlbjogZmllbGQudG9rZW4sXG4gICAgfTtcbiAgICB0aGlzLmRhdGVQaWNrZXJQcm9wTWVtby5zZXQoZmllbGQsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGFwdGVyIOKAlCBjb252aWVydGUgdW4gYElucHV0TWV0YWRhdGFgIChjb24gdHlwZT1URVhUQVJFQSkgYSBgVGV4dGFyZWFJbnB1dE1ldGFkYXRhYC5cbiAgICogRGVmYXVsdHMgc2Vuc2F0b3M6IGF1dG9Hcm93ICsgY291bnRlciBoYWJpbGl0YWRvLCA0LTEyIHJvd3MuXG4gICAqL1xuICBnZXRUZXh0YXJlYVByb3AoZmllbGQ6IElucHV0TWV0YWRhdGEpOiBUZXh0YXJlYUlucHV0TWV0YWRhdGEge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMudGV4dGFyZWFQcm9wTWVtby5nZXQoZmllbGQpO1xuICAgIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5nZXRDb250cm9sKGZpZWxkLm5hbWUpO1xuICAgIGNvbnN0IHJlc3VsdDogVGV4dGFyZWFJbnB1dE1ldGFkYXRhID0ge1xuICAgICAgY29udHJvbDogY29udHJvbCBhcyBGb3JtQ29udHJvbDxzdHJpbmc+LFxuICAgICAgbmFtZTogZmllbGQubmFtZSxcbiAgICAgIC8vIGxhYmVsIHZhY8OtbyDigJQgdmFsLWZvcm0geWEgcmVuZGVyaXphIGVsIHTDrXR1bG8gY29uIDx2YWwtdGl0bGU+IGFycmliYSBkZWxcbiAgICAgIC8vIGlucHV0LiBQYXNhcmxvIGFsIDxpb24tdGV4dGFyZWE+IGR1cGxpY2Fyw61hIGVsIHRleHRvIChcIkRlc2NyaXBjacOzblwiIHgyKS5cbiAgICAgIGxhYmVsOiAnJyxcbiAgICAgIGhpbnQ6IGZpZWxkLmhpbnQsXG4gICAgICBwbGFjZWhvbGRlcjogZmllbGQucGxhY2Vob2xkZXIsXG4gICAgICBhdXRvR3JvdzogdHJ1ZSxcbiAgICAgIG1pblJvd3M6IDQsXG4gICAgICBtYXhSb3dzOiAxMixcbiAgICAgIG1heExlbmd0aDogZmllbGQucmFuZ2U/Lm1heCA/PyAyMDAwLFxuICAgICAgc2hvd0NvdW50ZXI6IHRydWUsXG4gICAgICBjb3VudGVyRm9ybWF0OiAnY3VycmVudCcsXG4gICAgICBmaWxsOiAnb3V0bGluZScsXG4gICAgICBlcnJvcnM6IGZpZWxkLmVycm9ycyxcbiAgICAgIHN0YXRlOiBmaWVsZC5zdGF0ZSxcbiAgICB9O1xuICAgIHRoaXMudGV4dGFyZWFQcm9wTWVtby5zZXQoZmllbGQsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGdldCBpc0F0RW5kT2ZGb3JtKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0F0RW5kKHRoaXMuZWxlbWVudFJlZik7XG4gIH1cblxuICAvKipcbiAgICogRnVlcnphIG1vc3RyYXIgbG9zIGVycm9yZXMgZGUgdmFsaWRhY2nDs24gKG1hcmNhIHRvZG9zIGxvcyBjb250cm9sZXMgY29tb1xuICAgKiB0b3VjaGVkKSB5IGRldnVlbHZlIHNpIGVsIGZvcm0gZXMgdsOhbGlkby4gUGVuc2FkbyBwYXJhIGVsIG1vZG8gYGNvbnRyb2xsZWRgOlxuICAgKiBlbCBob3N0IGxvIGludm9jYSBlbiBzdSBcIlNpZ3VpZW50ZVwiIHBhcmEgZ2F0ZWFyIGxhIG5hdmVnYWNpw7NuIGRlbCB3aXphcmQuXG4gICAqL1xuICB2YWxpZGF0ZSgpOiBib29sZWFuIHtcbiAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICAgIHJldHVybiB0aGlzLmZvcm0udmFsaWQ7XG4gIH1cblxuICAvKipcbiAgICogTWFyY2EgdG9kb3MgbG9zIGNvbnRyb2xlcyBjb21vIHRvdWNoZWQgKG11ZXN0cmEgZXJyb3Jlcykgc2luIGRldm9sdmVyIG5hZGEuXG4gICAqIEFsaWFzIHNlbcOhbnRpY28gZGUgbGEgcHJpbWVyYSBtaXRhZCBkZSBgdmFsaWRhdGUoKWAuXG4gICAqL1xuICBtYXJrQWxsVG91Y2hlZCgpOiB2b2lkIHtcbiAgICB0aGlzLmZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xuICB9XG5cbiAgZ2V0IEZvcm0oKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtO1xuICB9XG5cbiAgZ2V0IEZvcm1TdGF0ZSgpOiB7IGZvcm06IEZvcm1Hcm91cDsgZGF0YTogRm9ybU1ldGFkYXRhIH0ge1xuICAgIHJldHVybiB7XG4gICAgICBmb3JtOiB0aGlzLkZvcm0sXG4gICAgICBkYXRhOiB0aGlzLnByb3BzLFxuICAgIH07XG4gIH1cblxuICBnZXQgYWN0aW9ucygpOiBCdXR0b25NZXRhZGF0YVtdIHtcbiAgICAvLyBSZXRvcm5hciBkZWwgY2FjaGUgcGFyYSBldml0YXIgY3JlYXIgbnVldm9zIG9iamV0b3MgZW4gY2FkYSBjaWNsbyBkZSBjaGFuZ2UgZGV0ZWN0aW9uXG4gICAgcmV0dXJuIHRoaXMuYWN0aW9uc0NhY2hlO1xuICB9XG59XG4iXX0=
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* AppVersionService
|
|
3
3
|
*
|
|
4
|
-
* Verificación de versión de la app para PWA / web.
|
|
4
|
+
* Verificación de versión de la app para PWA / web / Capacitor.
|
|
5
5
|
*
|
|
6
|
-
* Unifica
|
|
6
|
+
* Unifica tres señales para detectar actualizaciones:
|
|
7
7
|
*
|
|
8
8
|
* 1. `SwUpdate` (`@angular/service-worker`) — el evento `VERSION_READY` indica
|
|
9
9
|
* que un bundle nuevo fue descargado y está listo para activarse. Solo está
|
|
@@ -15,9 +15,12 @@
|
|
|
15
15
|
* (última versión publicada) y `minVersion` (versión mínima soportada).
|
|
16
16
|
* Se usa para la política de actualización obligatoria (hard gate).
|
|
17
17
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
18
|
+
* 3. `AppVersionRemotePlugin` (HTTP) — alternativa a AppConfigService para apps
|
|
19
|
+
* sin Firebase. Provisto via `provideValtechAppVersionHttp`. Expone el mismo
|
|
20
|
+
* contrato (`version` / `minVersion`). Se chequea en los mismos intervalos
|
|
21
|
+
* que el SW.
|
|
22
|
+
*
|
|
23
|
+
* Las tres dependencias se inyectan como opcionales.
|
|
21
24
|
*/
|
|
22
25
|
import { DOCUMENT } from '@angular/common';
|
|
23
26
|
import { DestroyRef, Injectable, computed, inject, signal } from '@angular/core';
|
|
@@ -25,8 +28,8 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
|
25
28
|
import { SwUpdate } from '@angular/service-worker';
|
|
26
29
|
import { filter, interval } from 'rxjs';
|
|
27
30
|
import { AppConfigService } from '../app-config/app-config.service';
|
|
28
|
-
import { APP_VERSION_PLATFORM_PLUGIN, VALTECH_APP_VERSION } from './config';
|
|
29
|
-
import { DEFAULT_APP_VERSION_SERVICE_CONFIG } from './types';
|
|
31
|
+
import { APP_VERSION_PLATFORM_PLUGIN, APP_VERSION_REMOTE_PLUGIN, VALTECH_APP_VERSION } from './config';
|
|
32
|
+
import { DEFAULT_APP_VERSION_SERVICE_CONFIG, } from './types';
|
|
30
33
|
import * as i0 from "@angular/core";
|
|
31
34
|
/**
|
|
32
35
|
* Compara dos versiones semver. Retorna true si `a` es estrictamente menor
|
|
@@ -52,15 +55,17 @@ export class AppVersionService {
|
|
|
52
55
|
this.swUpdate = inject(SwUpdate, { optional: true });
|
|
53
56
|
/** AppConfigService es opcional: la app puede no wirearlo. */
|
|
54
57
|
this.appConfig = inject(AppConfigService, { optional: true });
|
|
55
|
-
this.serviceConfig = inject(VALTECH_APP_VERSION, {
|
|
56
|
-
optional: true,
|
|
57
|
-
});
|
|
58
|
+
this.serviceConfig = inject(VALTECH_APP_VERSION, { optional: true });
|
|
58
59
|
/** Plugin nativo opcional: provisto por apps Capacitor para Play Store / App Store. */
|
|
59
60
|
this.platformPlugin = inject(APP_VERSION_PLATFORM_PLUGIN, { optional: true });
|
|
61
|
+
/** Plugin HTTP opcional: alternativa a AppConfigService para apps sin Firebase. */
|
|
62
|
+
this.remotePlugin = inject(APP_VERSION_REMOTE_PLUGIN, { optional: true });
|
|
60
63
|
this.document = inject(DOCUMENT);
|
|
61
64
|
this.destroyRef = inject(DestroyRef);
|
|
62
65
|
/** True cuando el SW reportó un bundle nuevo listo (`VERSION_READY`). */
|
|
63
66
|
this.swUpdateReady = signal(false);
|
|
67
|
+
/** Config remota cargada por el plugin HTTP. Null hasta que carga o si no hay plugin. */
|
|
68
|
+
this.remoteConfig = signal(null);
|
|
64
69
|
/**
|
|
65
70
|
* True cuando el usuario descartó el banner de actualización opcional.
|
|
66
71
|
* El banner obligatorio (`update-required`) ignora este flag.
|
|
@@ -76,33 +81,36 @@ export class AppVersionService {
|
|
|
76
81
|
*/
|
|
77
82
|
this.currentVersion = computed(() => this.serviceConfig?.currentVersion ?? '0.0.0');
|
|
78
83
|
/**
|
|
79
|
-
* Última versión publicada según el config remoto.
|
|
80
|
-
* `null` si
|
|
84
|
+
* Última versión publicada según el config remoto (AppConfigService o plugin HTTP).
|
|
85
|
+
* `null` si ninguna fuente está disponible o aún no cargó.
|
|
81
86
|
*/
|
|
82
|
-
this.latestVersion = computed(() => this.appConfig?.remoteVersion() ?? null);
|
|
87
|
+
this.latestVersion = computed(() => this.appConfig?.remoteVersion() ?? this.remoteConfig()?.version ?? null);
|
|
83
88
|
/**
|
|
84
89
|
* Estado de la versión:
|
|
85
|
-
* - `update-required` — la versión local quedó por debajo de `minVersion
|
|
86
|
-
*
|
|
87
|
-
* - `update-available` — el SW descargó un bundle nuevo (`VERSION_READY`)
|
|
88
|
-
* o `AppConfigService.hasUpdate` es true.
|
|
90
|
+
* - `update-required` — la versión local quedó por debajo de `minVersion`. Hard gate.
|
|
91
|
+
* - `update-available` — SW bundle listo, AppConfigService o plugin HTTP detectaron versión nueva.
|
|
89
92
|
* - `up-to-date` — en cualquier otro caso.
|
|
90
93
|
*/
|
|
91
94
|
this.status = computed(() => {
|
|
92
|
-
// 1. Hard gate — minVersion del
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
return 'update-required';
|
|
97
|
-
}
|
|
95
|
+
// 1. Hard gate — minVersion de AppConfigService o del plugin HTTP.
|
|
96
|
+
const minVersion = this.appConfig?.appConfig()?.minVersion ?? this.remoteConfig()?.minVersion;
|
|
97
|
+
if (minVersion && isVersionLower(this.currentVersion(), minVersion)) {
|
|
98
|
+
return 'update-required';
|
|
98
99
|
}
|
|
99
|
-
// 2. Update opcional — SW bundle listo o
|
|
100
|
-
|
|
100
|
+
// 2. Update opcional — SW bundle listo, AppConfig, o plugin HTTP más nuevo.
|
|
101
|
+
const remoteLatest = this.remoteConfig()?.version;
|
|
102
|
+
const hasRemoteUpdate = remoteLatest
|
|
103
|
+
? isVersionLower(this.currentVersion(), remoteLatest)
|
|
104
|
+
: false;
|
|
105
|
+
if (this.swUpdateReady() || this.appConfig?.hasUpdate() || hasRemoteUpdate) {
|
|
101
106
|
return 'update-available';
|
|
102
107
|
}
|
|
103
108
|
return 'up-to-date';
|
|
104
109
|
});
|
|
105
110
|
this.wireServiceWorker();
|
|
111
|
+
if (this.remotePlugin) {
|
|
112
|
+
this.wireRemotePlugin();
|
|
113
|
+
}
|
|
106
114
|
}
|
|
107
115
|
// ===========================================================================
|
|
108
116
|
// MÉTODOS PÚBLICOS
|
|
@@ -138,18 +146,15 @@ export class AppVersionService {
|
|
|
138
146
|
this._dismissed.set(true);
|
|
139
147
|
}
|
|
140
148
|
/**
|
|
141
|
-
* Fuerza un chequeo
|
|
142
|
-
* No-op si el SW no está habilitado.
|
|
149
|
+
* Fuerza un chequeo: SW + plugin HTTP (si existe).
|
|
143
150
|
*/
|
|
144
151
|
async checkNow() {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
console.warn('[AppVersionService] checkForUpdate failed:', err);
|
|
152
|
-
}
|
|
152
|
+
await Promise.all([
|
|
153
|
+
this.swUpdate?.isEnabled
|
|
154
|
+
? this.swUpdate.checkForUpdate().catch(err => console.warn('[AppVersionService] checkForUpdate failed:', err))
|
|
155
|
+
: undefined,
|
|
156
|
+
this.remotePlugin ? this.loadRemoteConfig() : undefined,
|
|
157
|
+
]);
|
|
153
158
|
}
|
|
154
159
|
// ===========================================================================
|
|
155
160
|
// PRIVADO
|
|
@@ -174,24 +179,44 @@ export class AppVersionService {
|
|
|
174
179
|
console.error('[AppVersionService] SW unrecoverable — reloading:', event.reason);
|
|
175
180
|
this.document.defaultView?.location.reload();
|
|
176
181
|
});
|
|
177
|
-
// Chequeo periódico.
|
|
178
182
|
const intervalMs = this.serviceConfig?.checkIntervalMs ?? DEFAULT_APP_VERSION_SERVICE_CONFIG.checkIntervalMs;
|
|
179
183
|
interval(intervalMs)
|
|
180
184
|
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
181
185
|
.subscribe(() => void this.checkNow());
|
|
182
|
-
// Chequeo al volver la app a foreground.
|
|
183
186
|
const onVisible = () => {
|
|
184
|
-
if (this.document.visibilityState === 'visible')
|
|
187
|
+
if (this.document.visibilityState === 'visible')
|
|
185
188
|
void this.checkNow();
|
|
186
|
-
}
|
|
187
189
|
};
|
|
188
190
|
this.document.addEventListener('visibilitychange', onVisible);
|
|
189
|
-
this.destroyRef.onDestroy(() =>
|
|
190
|
-
this.document.removeEventListener('visibilitychange', onVisible);
|
|
191
|
-
});
|
|
192
|
-
// Chequeo inicial.
|
|
191
|
+
this.destroyRef.onDestroy(() => this.document.removeEventListener('visibilitychange', onVisible));
|
|
193
192
|
void this.checkNow();
|
|
194
193
|
}
|
|
194
|
+
/**
|
|
195
|
+
* Carga config remota via plugin HTTP al inicio, en foreground y en el intervalo periódico.
|
|
196
|
+
* Solo se llama si `remotePlugin` está provisto.
|
|
197
|
+
*/
|
|
198
|
+
wireRemotePlugin() {
|
|
199
|
+
void this.loadRemoteConfig();
|
|
200
|
+
const intervalMs = this.serviceConfig?.checkIntervalMs ?? DEFAULT_APP_VERSION_SERVICE_CONFIG.checkIntervalMs;
|
|
201
|
+
interval(intervalMs)
|
|
202
|
+
.pipe(takeUntilDestroyed(this.destroyRef))
|
|
203
|
+
.subscribe(() => void this.loadRemoteConfig());
|
|
204
|
+
const onVisible = () => {
|
|
205
|
+
if (this.document.visibilityState === 'visible')
|
|
206
|
+
void this.loadRemoteConfig();
|
|
207
|
+
};
|
|
208
|
+
this.document.addEventListener('visibilitychange', onVisible);
|
|
209
|
+
this.destroyRef.onDestroy(() => this.document.removeEventListener('visibilitychange', onVisible));
|
|
210
|
+
}
|
|
211
|
+
async loadRemoteConfig() {
|
|
212
|
+
try {
|
|
213
|
+
const config = await this.remotePlugin.getRemoteConfig();
|
|
214
|
+
this.remoteConfig.set(config);
|
|
215
|
+
}
|
|
216
|
+
catch (err) {
|
|
217
|
+
console.warn('[AppVersionService] remote config fetch failed:', err);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
195
220
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppVersionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
196
221
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AppVersionService, providedIn: 'root' }); }
|
|
197
222
|
}
|
|
@@ -199,4 +224,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
199
224
|
type: Injectable,
|
|
200
225
|
args: [{ providedIn: 'root' }]
|
|
201
226
|
}], ctorParameters: () => [] });
|
|
202
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXZlcnNpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvYXBwLXZlcnNpb24vYXBwLXZlcnNpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FvQkc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQVUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUM1RSxPQUFPLEVBQThDLGtDQUFrQyxFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUV6Rzs7O0dBR0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUMxQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMs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QUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDdkIsQ0FBQztRQUNILENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbkUsQ0FBQyxDQUFDLENBQUM7UUFFSCxtQkFBbUI7UUFDbkIsS0FBSyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdkIsQ0FBQzsrR0E3S1UsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FESixNQUFNOzs0RkFDbkIsaUJBQWlCO2tCQUQ3QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXBwVmVyc2lvblNlcnZpY2VcbiAqXG4gKiBWZXJpZmljYWNpw7NuIGRlIHZlcnNpw7NuIGRlIGxhIGFwcCBwYXJhIFBXQSAvIHdlYi5cbiAqXG4gKiBVbmlmaWNhIGRvcyBzZcOxYWxlcyBwYXJhIGRldGVjdGFyIGFjdHVhbGl6YWNpb25lczpcbiAqXG4gKiAxLiBgU3dVcGRhdGVgIChgQGFuZ3VsYXIvc2VydmljZS13b3JrZXJgKSDigJQgZWwgZXZlbnRvIGBWRVJTSU9OX1JFQURZYCBpbmRpY2FcbiAqICAgIHF1ZSB1biBidW5kbGUgbnVldm8gZnVlIGRlc2NhcmdhZG8geSBlc3TDoSBsaXN0byBwYXJhIGFjdGl2YXJzZS4gU29sbyBlc3TDoVxuICogICAgZGlzcG9uaWJsZSBjdWFuZG8gZWwgc2VydmljZSB3b3JrZXIgZXN0w6EgcmVnaXN0cmFkbyAoYnVpbGQgZGUgcHJvZHVjY2nDs24pLlxuICogICAgQWRlbcOhcyBzZSBjaGVxdWVhIHByb2FjdGl2YW1lbnRlIGNhZGEgYGNoZWNrSW50ZXJ2YWxNc2AgeSBjYWRhIHZleiBxdWUgbGFcbiAqICAgIGFwcCB2dWVsdmUgYSBmb3JlZ3JvdW5kIChgdmlzaWJpbGl0eWNoYW5nZWApLlxuICpcbiAqIDIuIGBBcHBDb25maWdTZXJ2aWNlYCAoY29uZmlnIHJlbW90byBlbiBGaXJlc3RvcmUpIOKAlCBleHBvbmUgYHZlcnNpb25gXG4gKiAgICAow7psdGltYSB2ZXJzacOzbiBwdWJsaWNhZGEpIHkgYG1pblZlcnNpb25gICh2ZXJzacOzbiBtw61uaW1hIHNvcG9ydGFkYSkuXG4gKiAgICBTZSB1c2EgcGFyYSBsYSBwb2zDrXRpY2EgZGUgYWN0dWFsaXphY2nDs24gb2JsaWdhdG9yaWEgKGhhcmQgZ2F0ZSkuXG4gKlxuICogQW1iYXMgZGVwZW5kZW5jaWFzIHNlIGlueWVjdGFuIGNvbW8gb3BjaW9uYWxlczogZWwgc2VydmljaW8gZGVncmFkYSBjb25cbiAqIGdyYWNpYSBzaSBlbCBTVyBubyBlc3TDoSBoYWJpbGl0YWRvIChkZXYgbW9kZSkgbyBzaSBgQXBwQ29uZmlnU2VydmljZWAgbm9cbiAqIGVzdMOhIHdpcmVhZG8gZW4gbGEgYXBwLlxuICovXG5cbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERlc3Ryb3lSZWYsIEluamVjdGFibGUsIFNpZ25hbCwgY29tcHV0ZWQsIGluamVjdCwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBTd1VwZGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL3NlcnZpY2Utd29ya2VyJztcbmltcG9ydCB7IGZpbHRlciwgaW50ZXJ2YWwgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQXBwQ29uZmlnU2VydmljZSB9IGZyb20gJy4uL2FwcC1jb25maWcvYXBwLWNvbmZpZy5zZXJ2aWNlJztcbmltcG9ydCB7IEFQUF9WRVJTSU9OX1BMQVRGT1JNX1BMVUdJTiwgVkFMVEVDSF9BUFBfVkVSU0lPTiB9IGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IEFwcFZlcnNpb25QbGF0Zm9ybVBsdWdpbiwgQXBwVmVyc2lvblN0YXR1cywgREVGQVVMVF9BUFBfVkVSU0lPTl9TRVJWSUNFX0NPTkZJRyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIENvbXBhcmEgZG9zIHZlcnNpb25lcyBzZW12ZXIuIFJldG9ybmEgdHJ1ZSBzaSBgYWAgZXMgZXN0cmljdGFtZW50ZSBtZW5vclxuICogcXVlIGBiYC4gVG9sZXJhbnRlIGEgbG9uZ2l0dWRlcyBkaXN0aW50YXMgeSBhIHBhcnRlcyBubyBudW3DqXJpY2FzLlxuICovXG5mdW5jdGlvbiBpc1ZlcnNpb25Mb3dlcihhOiBzdHJpbmcsIGI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwYSA9IGEuc3BsaXQoJy4nKS5tYXAobiA9PiBOdW1iZXIobikgfHwgMCk7XG4gIGNvbnN0IHBiID0gYi5zcGxpdCgnLicpLm1hcChuID0+IE51bWJlcihuKSB8fCAwKTtcbiAgY29uc3QgbGVuID0gTWF0aC5tYXgocGEubGVuZ3RoLCBwYi5sZW5ndGgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCB4ID0gcGFbaV0gfHwgMDtcbiAgICBjb25zdCB5ID0gcGJbaV0gfHwgMDtcbiAgICBpZiAoeCA8IHkpIHJldHVybiB0cnVlO1xuICAgIGlmICh4ID4geSkgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFwcFZlcnNpb25TZXJ2aWNlIHtcbiAgLyoqIFN3VXBkYXRlIHNvbG8gZXhpc3RlIHNpIGVsIFNXIGVzdMOhIHJlZ2lzdHJhZG8gKHByb2QgYnVpbGQpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN3VXBkYXRlID0gaW5qZWN0KFN3VXBkYXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAvKiogQXBwQ29uZmlnU2VydmljZSBlcyBvcGNpb25hbDogbGEgYXBwIHB1ZWRlIG5vIHdpcmVhcmxvLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGFwcENvbmZpZyA9IGluamVjdChBcHBDb25maWdTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlcnZpY2VDb25maWcgPSBpbmplY3QoVkFMVEVDSF9BUFBfVkVSU0lPTiwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcbiAgLyoqIFBsdWdpbiBuYXRpdm8gb3BjaW9uYWw6IHByb3Zpc3RvIHBvciBhcHBzIENhcGFjaXRvciBwYXJhIFBsYXkgU3RvcmUgLyBBcHAgU3RvcmUuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1QbHVnaW4gPSBpbmplY3Q8QXBwVmVyc2lvblBsYXRmb3JtUGx1Z2luPihcbiAgICBBUFBfVkVSU0lPTl9QTEFURk9STV9QTFVHSU4sXG4gICAgeyBvcHRpb25hbDogdHJ1ZSB9XG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgLyoqIFRydWUgY3VhbmRvIGVsIFNXIHJlcG9ydMOzIHVuIGJ1bmRsZSBudWV2byBsaXN0byAoYFZFUlNJT05fUkVBRFlgKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzd1VwZGF0ZVJlYWR5ID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKipcbiAgICogVHJ1ZSBjdWFuZG8gZWwgdXN1YXJpbyBkZXNjYXJ0w7MgZWwgYmFubmVyIGRlIGFjdHVhbGl6YWNpw7NuIG9wY2lvbmFsLlxuICAgKiBFbCBiYW5uZXIgb2JsaWdhdG9yaW8gKGB1cGRhdGUtcmVxdWlyZWRgKSBpZ25vcmEgZXN0ZSBmbGFnLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzbWlzc2VkID0gc2lnbmFsKGZhbHNlKTtcbiAgcmVhZG9ubHkgZGlzbWlzc2VkOiBTaWduYWw8Ym9vbGVhbj4gPSB0aGlzLl9kaXNtaXNzZWQuYXNSZWFkb25seSgpO1xuXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAvLyBTSUdOQUxTIFDDmkJMSUNPU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogVmVyc2nDs24gbG9jYWwgZGVsIGJ1aWxkIGFjdHVhbCBkZSBsYSBhcHAuXG4gICAqIFByb3ZpZW5lIGRlbCBwcm92aWRlciBgcHJvdmlkZVZhbHRlY2hBcHBWZXJzaW9uKHsgY3VycmVudFZlcnNpb24gfSlgLlxuICAgKi9cbiAgcmVhZG9ubHkgY3VycmVudFZlcnNpb246IFNpZ25hbDxzdHJpbmc+ID0gY29tcHV0ZWQoXG4gICAgKCkgPT4gdGhpcy5zZXJ2aWNlQ29uZmlnPy5jdXJyZW50VmVyc2lvbiA/PyAnMC4wLjAnXG4gICk7XG5cbiAgLyoqXG4gICAqIMOabHRpbWEgdmVyc2nDs24gcHVibGljYWRhIHNlZ8O6biBlbCBjb25maWcgcmVtb3RvLlxuICAgKiBgbnVsbGAgc2kgYEFwcENvbmZpZ1NlcnZpY2VgIG5vIGVzdMOhIGRpc3BvbmlibGUgbyBhw7puIG5vIGNhcmfDsy5cbiAgICovXG4gIHJlYWRvbmx5IGxhdGVzdFZlcnNpb246IFNpZ25hbDxzdHJpbmcgfCBudWxsPiA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuYXBwQ29uZmlnPy5yZW1vdGVWZXJzaW9uKCkgPz8gbnVsbFxuICApO1xuXG4gIC8qKlxuICAgKiBFc3RhZG8gZGUgbGEgdmVyc2nDs246XG4gICAqIC0gYHVwZGF0ZS1yZXF1aXJlZGAg4oCUIGxhIHZlcnNpw7NuIGxvY2FsIHF1ZWTDsyBwb3IgZGViYWpvIGRlIGBtaW5WZXJzaW9uYFxuICAgKiAgIGRlbCBjb25maWcgcmVtb3RvLiBIYXJkIGdhdGUuIFNvbG8gc2kgYEFwcENvbmZpZ1NlcnZpY2VgIHRpZW5lIGRhdG9zLlxuICAgKiAtIGB1cGRhdGUtYXZhaWxhYmxlYCDigJQgZWwgU1cgZGVzY2FyZ8OzIHVuIGJ1bmRsZSBudWV2byAoYFZFUlNJT05fUkVBRFlgKVxuICAgKiAgIG8gYEFwcENvbmZpZ1NlcnZpY2UuaGFzVXBkYXRlYCBlcyB0cnVlLlxuICAgKiAtIGB1cC10by1kYXRlYCDigJQgZW4gY3VhbHF1aWVyIG90cm8gY2Fzby5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1czogU2lnbmFsPEFwcFZlcnNpb25TdGF0dXM+ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIC8vIDEuIEhhcmQgZ2F0ZSDigJQgbWluVmVyc2lvbiBkZWwgY29uZmlnIHJlbW90by5cbiAgICBpZiAodGhpcy5hcHBDb25maWcpIHtcbiAgICAgIGNvbnN0IG1pblZlcnNpb24gPSB0aGlzLmFwcENvbmZpZy5hcHBDb25maWcoKT8ubWluVmVyc2lvbjtcbiAgICAgIGlmIChtaW5WZXJzaW9uICYmIGlzVmVyc2lvbkxvd2VyKHRoaXMuY3VycmVudFZlcnNpb24oKSwgbWluVmVyc2lvbikpIHtcbiAgICAgICAgcmV0dXJuICd1cGRhdGUtcmVxdWlyZWQnO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIuIFVwZGF0ZSBvcGNpb25hbCDigJQgU1cgYnVuZGxlIGxpc3RvIG8gY29uZmlnIHJlbW90byBtw6FzIG51ZXZvLlxuICAgIGlmICh0aGlzLnN3VXBkYXRlUmVhZHkoKSB8fCB0aGlzLmFwcENvbmZpZz8uaGFzVXBkYXRlKCkpIHtcbiAgICAgIHJldHVybiAndXBkYXRlLWF2YWlsYWJsZSc7XG4gICAgfVxuXG4gICAgcmV0dXJuICd1cC10by1kYXRlJztcbiAgfSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy53aXJlU2VydmljZVdvcmtlcigpO1xuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIE3DiVRPRE9TIFDDmkJMSUNPU1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogQXBsaWNhIGxhIGFjdHVhbGl6YWNpw7NuIHBlbmRpZW50ZS5cbiAgICpcbiAgICogU2kgaGF5IHVuIHBsdWdpbiBkZSBwbGF0YWZvcm1hIChuYXRpdm8vQ2FwYWNpdG9yKSwgZGVsZWdhIGVuIMOpbCAoZWouIFBsYXkgU3RvcmUpLlxuICAgKiBTaSBubywgYWN0aXZhIGxhIHZlcnNpw7NuIFNXIHNpIGVzdMOhIGRpc3BvbmlibGUgeSByZWNhcmdhIGxhIHDDoWdpbmEuXG4gICAqL1xuICBhc3luYyBhcHBseVVwZGF0ZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5wbGF0Zm9ybVBsdWdpbikge1xuICAgICAgYXdhaXQgdGhpcy5wbGF0Zm9ybVBsdWdpbi5hcHBseVVwZGF0ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAodGhpcy5zd1VwZGF0ZT8uaXNFbmFibGVkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuc3dVcGRhdGUuYWN0aXZhdGVVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnNvbGUud2FybignW0FwcFZlcnNpb25TZXJ2aWNlXSBhY3RpdmF0ZVVwZGF0ZSBmYWlsZWQ6JywgZXJyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlldz8ubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERlc2NhcnRhIGVsIGJhbm5lciBkZSBhY3R1YWxpemFjacOzbiBvcGNpb25hbC5cbiAgICogTm8gdGllbmUgZWZlY3RvIHNvYnJlIGVsIGVzdGFkbyBgdXBkYXRlLXJlcXVpcmVkYCAoaGFyZCBnYXRlKS5cbiAgICovXG4gIGRpc21pc3MoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzbWlzc2VkLnNldCh0cnVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdWVyemEgdW4gY2hlcXVlbyBkZSBhY3R1YWxpemFjacOzbiBkZWwgc2VydmljZSB3b3JrZXIuXG4gICAqIE5vLW9wIHNpIGVsIFNXIG5vIGVzdMOhIGhhYmlsaXRhZG8uXG4gICAqL1xuICBhc3luYyBjaGVja05vdygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoIXRoaXMuc3dVcGRhdGU/LmlzRW5hYmxlZCkgcmV0dXJuO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnN3VXBkYXRlLmNoZWNrRm9yVXBkYXRlKCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tBcHBWZXJzaW9uU2VydmljZV0gY2hlY2tGb3JVcGRhdGUgZmFpbGVkOicsIGVycik7XG4gICAgfVxuICB9XG5cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gIC8vIFBSSVZBRE9cbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFN1c2NyaWJlIGB2ZXJzaW9uVXBkYXRlc2AsIHByb2dyYW1hIGNoZXF1ZW9zIHBlcmnDs2RpY29zIHkgcmVhY2Npb25hIGFsXG4gICAqIHZvbHZlciBsYSBhcHAgYSBmb3JlZ3JvdW5kLiBTb2xvIGFjdMO6YSBzaSBlbCBTVyBlc3TDoSBoYWJpbGl0YWRvLlxuICAgKi9cbiAgcHJpdmF0ZSB3aXJlU2VydmljZVdvcmtlcigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc3dVcGRhdGU/LmlzRW5hYmxlZCkgcmV0dXJuO1xuXG4gICAgLy8gQnVuZGxlIG51ZXZvIGRlc2NhcmdhZG8geSBsaXN0by5cbiAgICB0aGlzLnN3VXBkYXRlLnZlcnNpb25VcGRhdGVzXG4gICAgICAucGlwZShcbiAgICAgICAgZmlsdGVyKGV2dCA9PiBldnQudHlwZSA9PT0gJ1ZFUlNJT05fUkVBRFknKSxcbiAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5zd1VwZGF0ZVJlYWR5LnNldCh0cnVlKSk7XG5cbiAgICAvLyBTVyBlbiBlc3RhZG8gaXJyZWN1cGVyYWJsZSDigJQgbGEgY2FjaMOpIGRlbCBzZXJ2aWNlIHdvcmtlciBzZSBjb3Jyb21wacOzIG9cbiAgICAvLyBmdWUgcGFyY2lhbG1lbnRlIGV2aWN0YWRhIChjb23Dum4gZW4gUFdBcyBzdGFuZGFsb25lIGRlIGlPUyB0cmFzIGRlcGxveXNcbiAgICAvLyByZXBldGlkb3MpLiBMYSBhcHAgbm8gcHVlZGUgY2FyZ2FyIHN1cyBhc3NldHMg4oaSIHBhbnRhbGxhIGVuIGJsYW5jby5cbiAgICAvLyBSZWN1cGVyYWNpw7NuIHJlY29tZW5kYWRhIHBvciBBbmd1bGFyOiByZWNhcmdhciBwYXJhIHRyYWVyIHRvZG8gZnJlc2NvXG4gICAgLy8gZGVzZGUgbGEgcmVkLlxuICAgIHRoaXMuc3dVcGRhdGUudW5yZWNvdmVyYWJsZS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgY29uc29sZS5lcnJvcignW0FwcFZlcnNpb25TZXJ2aWNlXSBTVyB1bnJlY292ZXJhYmxlIOKAlCByZWxvYWRpbmc6JywgZXZlbnQucmVhc29uKTtcbiAgICAgIHRoaXMuZG9jdW1lbnQuZGVmYXVsdFZpZXc/LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgIH0pO1xuXG4gICAgLy8gQ2hlcXVlbyBwZXJpw7NkaWNvLlxuICAgIGNvbnN0IGludGVydmFsTXMgPVxuICAgICAgdGhpcy5zZXJ2aWNlQ29uZmlnPy5jaGVja0ludGVydmFsTXMgPz8gREVGQVVMVF9BUFBfVkVSU0lPTl9TRVJWSUNFX0NPTkZJRy5jaGVja0ludGVydmFsTXM7XG5cbiAgICBpbnRlcnZhbChpbnRlcnZhbE1zKVxuICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHZvaWQgdGhpcy5jaGVja05vdygpKTtcblxuICAgIC8vIENoZXF1ZW8gYWwgdm9sdmVyIGxhIGFwcCBhIGZvcmVncm91bmQuXG4gICAgY29uc3Qgb25WaXNpYmxlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKHRoaXMuZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSAndmlzaWJsZScpIHtcbiAgICAgICAgdm9pZCB0aGlzLmNoZWNrTm93KCk7XG4gICAgICB9XG4gICAgfTtcbiAgICB0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2libGUpO1xuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4ge1xuICAgICAgdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgb25WaXNpYmxlKTtcbiAgICB9KTtcblxuICAgIC8vIENoZXF1ZW8gaW5pY2lhbC5cbiAgICB2b2lkIHRoaXMuY2hlY2tOb3coKTtcbiAgfVxufVxuIl19
|
|
227
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLXZlcnNpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvc2VydmljZXMvYXBwLXZlcnNpb24vYXBwLXZlcnNpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFFSCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQVUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekYsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXhDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSx5QkFBeUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN2RyxPQUFPLEVBS0wsa0NBQWtDLEdBQ25DLE1BQU0sU0FBUyxDQUFDOztBQUVqQjs7O0dBR0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxDQUFTLEVBQUUsQ0FBUztJQUMxQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUNqRCxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMs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NUYsUUFBUSxDQUFDLFVBQVUsQ0FBQzthQUNqQixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ3pDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFFakQsTUFBTSxTQUFTLEdBQUcsR0FBUyxFQUFFO1lBQzNCLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxlQUFlLEtBQUssU0FBUztnQkFBRSxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2hGLENBQUMsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFTyxLQUFLLENBQUMsZ0JBQWdCO1FBQzVCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUMxRCxJQUFJLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUMsaURBQWlELEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDdkUsQ0FBQztJQUNILENBQUM7K0dBaE5VLGlCQUFpQjttSEFBakIsaUJBQWlCLGNBREosTUFBTTs7NEZBQ25CLGlCQUFpQjtrQkFEN0IsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEFwcFZlcnNpb25TZXJ2aWNlXG4gKlxuICogVmVyaWZpY2FjacOzbiBkZSB2ZXJzacOzbiBkZSBsYSBhcHAgcGFyYSBQV0EgLyB3ZWIgLyBDYXBhY2l0b3IuXG4gKlxuICogVW5pZmljYSB0cmVzIHNlw7FhbGVzIHBhcmEgZGV0ZWN0YXIgYWN0dWFsaXphY2lvbmVzOlxuICpcbiAqIDEuIGBTd1VwZGF0ZWAgKGBAYW5ndWxhci9zZXJ2aWNlLXdvcmtlcmApIOKAlCBlbCBldmVudG8gYFZFUlNJT05fUkVBRFlgIGluZGljYVxuICogICAgcXVlIHVuIGJ1bmRsZSBudWV2byBmdWUgZGVzY2FyZ2FkbyB5IGVzdMOhIGxpc3RvIHBhcmEgYWN0aXZhcnNlLiBTb2xvIGVzdMOhXG4gKiAgICBkaXNwb25pYmxlIGN1YW5kbyBlbCBzZXJ2aWNlIHdvcmtlciBlc3TDoSByZWdpc3RyYWRvIChidWlsZCBkZSBwcm9kdWNjacOzbikuXG4gKiAgICBBZGVtw6FzIHNlIGNoZXF1ZWEgcHJvYWN0aXZhbWVudGUgY2FkYSBgY2hlY2tJbnRlcnZhbE1zYCB5IGNhZGEgdmV6IHF1ZSBsYVxuICogICAgYXBwIHZ1ZWx2ZSBhIGZvcmVncm91bmQgKGB2aXNpYmlsaXR5Y2hhbmdlYCkuXG4gKlxuICogMi4gYEFwcENvbmZpZ1NlcnZpY2VgIChjb25maWcgcmVtb3RvIGVuIEZpcmVzdG9yZSkg4oCUIGV4cG9uZSBgdmVyc2lvbmBcbiAqICAgICjDumx0aW1hIHZlcnNpw7NuIHB1YmxpY2FkYSkgeSBgbWluVmVyc2lvbmAgKHZlcnNpw7NuIG3DrW5pbWEgc29wb3J0YWRhKS5cbiAqICAgIFNlIHVzYSBwYXJhIGxhIHBvbMOtdGljYSBkZSBhY3R1YWxpemFjacOzbiBvYmxpZ2F0b3JpYSAoaGFyZCBnYXRlKS5cbiAqXG4gKiAzLiBgQXBwVmVyc2lvblJlbW90ZVBsdWdpbmAgKEhUVFApIOKAlCBhbHRlcm5hdGl2YSBhIEFwcENvbmZpZ1NlcnZpY2UgcGFyYSBhcHBzXG4gKiAgICBzaW4gRmlyZWJhc2UuIFByb3Zpc3RvIHZpYSBgcHJvdmlkZVZhbHRlY2hBcHBWZXJzaW9uSHR0cGAuIEV4cG9uZSBlbCBtaXNtb1xuICogICAgY29udHJhdG8gKGB2ZXJzaW9uYCAvIGBtaW5WZXJzaW9uYCkuIFNlIGNoZXF1ZWEgZW4gbG9zIG1pc21vcyBpbnRlcnZhbG9zXG4gKiAgICBxdWUgZWwgU1cuXG4gKlxuICogTGFzIHRyZXMgZGVwZW5kZW5jaWFzIHNlIGlueWVjdGFuIGNvbW8gb3BjaW9uYWxlcy5cbiAqL1xuXG5pbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEZXN0cm95UmVmLCBJbmplY3RhYmxlLCBTaWduYWwsIGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgU3dVcGRhdGUgfSBmcm9tICdAYW5ndWxhci9zZXJ2aWNlLXdvcmtlcic7XG5pbXBvcnQgeyBmaWx0ZXIsIGludGVydmFsIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFwcENvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi9hcHAtY29uZmlnL2FwcC1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBBUFBfVkVSU0lPTl9QTEFURk9STV9QTFVHSU4sIEFQUF9WRVJTSU9OX1JFTU9URV9QTFVHSU4sIFZBTFRFQ0hfQVBQX1ZFUlNJT04gfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQge1xuICBBcHBWZXJzaW9uUGxhdGZvcm1QbHVnaW4sXG4gIEFwcFZlcnNpb25SZW1vdGVDb25maWcsXG4gIEFwcFZlcnNpb25SZW1vdGVQbHVnaW4sXG4gIEFwcFZlcnNpb25TdGF0dXMsXG4gIERFRkFVTFRfQVBQX1ZFUlNJT05fU0VSVklDRV9DT05GSUcsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIENvbXBhcmEgZG9zIHZlcnNpb25lcyBzZW12ZXIuIFJldG9ybmEgdHJ1ZSBzaSBgYWAgZXMgZXN0cmljdGFtZW50ZSBtZW5vclxuICogcXVlIGBiYC4gVG9sZXJhbnRlIGEgbG9uZ2l0dWRlcyBkaXN0aW50YXMgeSBhIHBhcnRlcyBubyBudW3DqXJpY2FzLlxuICovXG5mdW5jdGlvbiBpc1ZlcnNpb25Mb3dlcihhOiBzdHJpbmcsIGI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBjb25zdCBwYSA9IGEuc3BsaXQoJy4nKS5tYXAobiA9PiBOdW1iZXIobikgfHwgMCk7XG4gIGNvbnN0IHBiID0gYi5zcGxpdCgnLicpLm1hcChuID0+IE51bWJlcihuKSB8fCAwKTtcbiAgY29uc3QgbGVuID0gTWF0aC5tYXgocGEubGVuZ3RoLCBwYi5sZW5ndGgpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCB4ID0gcGFbaV0gfHwgMDtcbiAgICBjb25zdCB5ID0gcGJbaV0gfHwgMDtcbiAgICBpZiAoeCA8IHkpIHJldHVybiB0cnVlO1xuICAgIGlmICh4ID4geSkgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEFwcFZlcnNpb25TZXJ2aWNlIHtcbiAgLyoqIFN3VXBkYXRlIHNvbG8gZXhpc3RlIHNpIGVsIFNXIGVzdMOhIHJlZ2lzdHJhZG8gKHByb2QgYnVpbGQpLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHN3VXBkYXRlID0gaW5qZWN0KFN3VXBkYXRlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICAvKiogQXBwQ29uZmlnU2VydmljZSBlcyBvcGNpb25hbDogbGEgYXBwIHB1ZWRlIG5vIHdpcmVhcmxvLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGFwcENvbmZpZyA9IGluamVjdChBcHBDb25maWdTZXJ2aWNlLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuICBwcml2YXRlIHJlYWRvbmx5IHNlcnZpY2VDb25maWcgPSBpbmplY3QoVkFMVEVDSF9BUFBfVkVSU0lPTiwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgLyoqIFBsdWdpbiBuYXRpdm8gb3BjaW9uYWw6IHByb3Zpc3RvIHBvciBhcHBzIENhcGFjaXRvciBwYXJhIFBsYXkgU3RvcmUgLyBBcHAgU3RvcmUuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGxhdGZvcm1QbHVnaW4gPSBpbmplY3Q8QXBwVmVyc2lvblBsYXRmb3JtUGx1Z2luPihcbiAgICBBUFBfVkVSU0lPTl9QTEFURk9STV9QTFVHSU4sXG4gICAgeyBvcHRpb25hbDogdHJ1ZSB9XG4gICk7XG4gIC8qKiBQbHVnaW4gSFRUUCBvcGNpb25hbDogYWx0ZXJuYXRpdmEgYSBBcHBDb25maWdTZXJ2aWNlIHBhcmEgYXBwcyBzaW4gRmlyZWJhc2UuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVtb3RlUGx1Z2luID0gaW5qZWN0PEFwcFZlcnNpb25SZW1vdGVQbHVnaW4+KFxuICAgIEFQUF9WRVJTSU9OX1JFTU9URV9QTFVHSU4sXG4gICAgeyBvcHRpb25hbDogdHJ1ZSB9XG4gICk7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgLyoqIFRydWUgY3VhbmRvIGVsIFNXIHJlcG9ydMOzIHVuIGJ1bmRsZSBudWV2byBsaXN0byAoYFZFUlNJT05fUkVBRFlgKS4gKi9cbiAgcHJpdmF0ZSByZWFkb25seSBzd1VwZGF0ZVJlYWR5ID0gc2lnbmFsKGZhbHNlKTtcblxuICAvKiogQ29uZmlnIHJlbW90YSBjYXJnYWRhIHBvciBlbCBwbHVnaW4gSFRUUC4gTnVsbCBoYXN0YSBxdWUgY2FyZ2EgbyBzaSBubyBoYXkgcGx1Z2luLiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHJlbW90ZUNvbmZpZyA9IHNpZ25hbDxBcHBWZXJzaW9uUmVtb3RlQ29uZmlnIHwgbnVsbD4obnVsbCk7XG5cbiAgLyoqXG4gICAqIFRydWUgY3VhbmRvIGVsIHVzdWFyaW8gZGVzY2FydMOzIGVsIGJhbm5lciBkZSBhY3R1YWxpemFjacOzbiBvcGNpb25hbC5cbiAgICogRWwgYmFubmVyIG9ibGlnYXRvcmlvIChgdXBkYXRlLXJlcXVpcmVkYCkgaWdub3JhIGVzdGUgZmxhZy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc21pc3NlZCA9IHNpZ25hbChmYWxzZSk7XG4gIHJlYWRvbmx5IGRpc21pc3NlZDogU2lnbmFsPGJvb2xlYW4+ID0gdGhpcy5fZGlzbWlzc2VkLmFzUmVhZG9ubHkoKTtcblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gU0lHTkFMUyBQw5pCTElDT1NcbiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgLyoqXG4gICAqIFZlcnNpw7NuIGxvY2FsIGRlbCBidWlsZCBhY3R1YWwgZGUgbGEgYXBwLlxuICAgKiBQcm92aWVuZSBkZWwgcHJvdmlkZXIgYHByb3ZpZGVWYWx0ZWNoQXBwVmVyc2lvbih7IGN1cnJlbnRWZXJzaW9uIH0pYC5cbiAgICovXG4gIHJlYWRvbmx5IGN1cnJlbnRWZXJzaW9uOiBTaWduYWw8c3RyaW5nPiA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuc2VydmljZUNvbmZpZz8uY3VycmVudFZlcnNpb24gPz8gJzAuMC4wJ1xuICApO1xuXG4gIC8qKlxuICAgKiDDmmx0aW1hIHZlcnNpw7NuIHB1YmxpY2FkYSBzZWfDum4gZWwgY29uZmlnIHJlbW90byAoQXBwQ29uZmlnU2VydmljZSBvIHBsdWdpbiBIVFRQKS5cbiAgICogYG51bGxgIHNpIG5pbmd1bmEgZnVlbnRlIGVzdMOhIGRpc3BvbmlibGUgbyBhw7puIG5vIGNhcmfDsy5cbiAgICovXG4gIHJlYWRvbmx5IGxhdGVzdFZlcnNpb246IFNpZ25hbDxzdHJpbmcgfCBudWxsPiA9IGNvbXB1dGVkKFxuICAgICgpID0+IHRoaXMuYXBwQ29uZmlnPy5yZW1vdGVWZXJzaW9uKCkgPz8gdGhpcy5yZW1vdGVDb25maWcoKT8udmVyc2lvbiA/PyBudWxsXG4gICk7XG5cbiAgLyoqXG4gICAqIEVzdGFkbyBkZSBsYSB2ZXJzacOzbjpcbiAgICogLSBgdXBkYXRlLXJlcXVpcmVkYCDigJQgbGEgdmVyc2nDs24gbG9jYWwgcXVlZMOzIHBvciBkZWJham8gZGUgYG1pblZlcnNpb25gLiBIYXJkIGdhdGUuXG4gICAqIC0gYHVwZGF0ZS1hdmFpbGFibGVgIOKAlCBTVyBidW5kbGUgbGlzdG8sIEFwcENvbmZpZ1NlcnZpY2UgbyBwbHVnaW4gSFRUUCBkZXRlY3Rhcm9uIHZlcnNpw7NuIG51ZXZhLlxuICAgKiAtIGB1cC10by1kYXRlYCDigJQgZW4gY3VhbHF1aWVyIG90cm8gY2Fzby5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1czogU2lnbmFsPEFwcFZlcnNpb25TdGF0dXM+ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIC8vIDEuIEhhcmQgZ2F0ZSDigJQgbWluVmVyc2lvbiBkZSBBcHBDb25maWdTZXJ2aWNlIG8gZGVsIHBsdWdpbiBIVFRQLlxuICAgIGNvbnN0IG1pblZlcnNpb24gPVxuICAgICAgdGhpcy5hcHBDb25maWc/LmFwcENvbmZpZygpPy5taW5WZXJzaW9uID8/IHRoaXMucmVtb3RlQ29uZmlnKCk/Lm1pblZlcnNpb247XG4gICAgaWYgKG1pblZlcnNpb24gJiYgaXNWZXJzaW9uTG93ZXIodGhpcy5jdXJyZW50VmVyc2lvbigpLCBtaW5WZXJzaW9uKSkge1xuICAgICAgcmV0dXJuICd1cGRhdGUtcmVxdWlyZWQnO1xuICAgIH1cblxuICAgIC8vIDIuIFVwZGF0ZSBvcGNpb25hbCDigJQgU1cgYnVuZGxlIGxpc3RvLCBBcHBDb25maWcsIG8gcGx1Z2luIEhUVFAgbcOhcyBudWV2by5cbiAgICBjb25zdCByZW1vdGVMYXRlc3QgPSB0aGlzLnJlbW90ZUNvbmZpZygpPy52ZXJzaW9uO1xuICAgIGNvbnN0IGhhc1JlbW90ZVVwZGF0ZSA9IHJlbW90ZUxhdGVzdFxuICAgICAgPyBpc1ZlcnNpb25Mb3dlcih0aGlzLmN1cnJlbnRWZXJzaW9uKCksIHJlbW90ZUxhdGVzdClcbiAgICAgIDogZmFsc2U7XG5cbiAgICBpZiAodGhpcy5zd1VwZGF0ZVJlYWR5KCkgfHwgdGhpcy5hcHBDb25maWc/Lmhhc1VwZGF0ZSgpIHx8IGhhc1JlbW90ZVVwZGF0ZSkge1xuICAgICAgcmV0dXJuICd1cGRhdGUtYXZhaWxhYmxlJztcbiAgICB9XG5cbiAgICByZXR1cm4gJ3VwLXRvLWRhdGUnO1xuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLndpcmVTZXJ2aWNlV29ya2VyKCk7XG4gICAgaWYgKHRoaXMucmVtb3RlUGx1Z2luKSB7XG4gICAgICB0aGlzLndpcmVSZW1vdGVQbHVnaW4oKTtcbiAgICB9XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gTcOJVE9ET1MgUMOaQkxJQ09TXG4gIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gIC8qKlxuICAgKiBBcGxpY2EgbGEgYWN0dWFsaXphY2nDs24gcGVuZGllbnRlLlxuICAgKlxuICAgKiBTaSBoYXkgdW4gcGx1Z2luIGRlIHBsYXRhZm9ybWEgKG5hdGl2by9DYXBhY2l0b3IpLCBkZWxlZ2EgZW4gw6lsIChlai4gUGxheSBTdG9yZSkuXG4gICAqIFNpIG5vLCBhY3RpdmEgbGEgdmVyc2nDs24gU1cgc2kgZXN0w6EgZGlzcG9uaWJsZSB5IHJlY2FyZ2EgbGEgcMOhZ2luYS5cbiAgICovXG4gIGFzeW5jIGFwcGx5VXBkYXRlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnBsYXRmb3JtUGx1Z2luKSB7XG4gICAgICBhd2FpdCB0aGlzLnBsYXRmb3JtUGx1Z2luLmFwcGx5VXBkYXRlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0aGlzLnN3VXBkYXRlPy5pc0VuYWJsZWQpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5zd1VwZGF0ZS5hY3RpdmF0ZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS53YXJuKCdbQXBwVmVyc2lvblNlcnZpY2VdIGFjdGl2YXRlVXBkYXRlIGZhaWxlZDonLCBlcnIpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3Py5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVzY2FydGEgZWwgYmFubmVyIGRlIGFjdHVhbGl6YWNpw7NuIG9wY2lvbmFsLlxuICAgKiBObyB0aWVuZSBlZmVjdG8gc29icmUgZWwgZXN0YWRvIGB1cGRhdGUtcmVxdWlyZWRgIChoYXJkIGdhdGUpLlxuICAgKi9cbiAgZGlzbWlzcygpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNtaXNzZWQuc2V0KHRydWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZ1ZXJ6YSB1biBjaGVxdWVvOiBTVyArIHBsdWdpbiBIVFRQIChzaSBleGlzdGUpLlxuICAgKi9cbiAgYXN5bmMgY2hlY2tOb3coKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5zd1VwZGF0ZT8uaXNFbmFibGVkXG4gICAgICAgID8gdGhpcy5zd1VwZGF0ZS5jaGVja0ZvclVwZGF0ZSgpLmNhdGNoKGVyciA9PlxuICAgICAgICAgICAgY29uc29sZS53YXJuKCdbQXBwVmVyc2lvblNlcnZpY2VdIGNoZWNrRm9yVXBkYXRlIGZhaWxlZDonLCBlcnIpXG4gICAgICAgICAgKVxuICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIHRoaXMucmVtb3RlUGx1Z2luID8gdGhpcy5sb2FkUmVtb3RlQ29uZmlnKCkgOiB1bmRlZmluZWQsXG4gICAgXSk7XG4gIH1cblxuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgLy8gUFJJVkFET1xuICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAvKipcbiAgICogU3VzY3JpYmUgYHZlcnNpb25VcGRhdGVzYCwgcHJvZ3JhbWEgY2hlcXVlb3MgcGVyacOzZGljb3MgeSByZWFjY2lvbmEgYWxcbiAgICogdm9sdmVyIGxhIGFwcCBhIGZvcmVncm91bmQuIFNvbG8gYWN0w7phIHNpIGVsIFNXIGVzdMOhIGhhYmlsaXRhZG8uXG4gICAqL1xuICBwcml2YXRlIHdpcmVTZXJ2aWNlV29ya2VyKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zd1VwZGF0ZT8uaXNFbmFibGVkKSByZXR1cm47XG5cbiAgICAvLyBCdW5kbGUgbnVldm8gZGVzY2FyZ2FkbyB5IGxpc3RvLlxuICAgIHRoaXMuc3dVcGRhdGUudmVyc2lvblVwZGF0ZXNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoZXZ0ID0+IGV2dC50eXBlID09PSAnVkVSU0lPTl9SRUFEWScpLFxuICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLnN3VXBkYXRlUmVhZHkuc2V0KHRydWUpKTtcblxuICAgIC8vIFNXIGVuIGVzdGFkbyBpcnJlY3VwZXJhYmxlIOKAlCBsYSBjYWNow6kgZGVsIHNlcnZpY2Ugd29ya2VyIHNlIGNvcnJvbXBpw7Mgb1xuICAgIC8vIGZ1ZSBwYXJjaWFsbWVudGUgZXZpY3RhZGEgKGNvbcO6biBlbiBQV0FzIHN0YW5kYWxvbmUgZGUgaU9TIHRyYXMgZGVwbG95c1xuICAgIC8vIHJlcGV0aWRvcykuIExhIGFwcCBubyBwdWVkZSBjYXJnYXIgc3VzIGFzc2V0cyDihpIgcGFudGFsbGEgZW4gYmxhbmNvLlxuICAgIC8vIFJlY3VwZXJhY2nDs24gcmVjb21lbmRhZGEgcG9yIEFuZ3VsYXI6IHJlY2FyZ2FyIHBhcmEgdHJhZXIgdG9kbyBmcmVzY29cbiAgICAvLyBkZXNkZSBsYSByZWQuXG4gICAgdGhpcy5zd1VwZGF0ZS51bnJlY292ZXJhYmxlLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbQXBwVmVyc2lvblNlcnZpY2VdIFNXIHVucmVjb3ZlcmFibGUg4oCUIHJlbG9hZGluZzonLCBldmVudC5yZWFzb24pO1xuICAgICAgdGhpcy5kb2N1bWVudC5kZWZhdWx0Vmlldz8ubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnRlcnZhbE1zID1cbiAgICAgIHRoaXMuc2VydmljZUNvbmZpZz8uY2hlY2tJbnRlcnZhbE1zID8/IERFRkFVTFRfQVBQX1ZFUlNJT05fU0VSVklDRV9DT05GSUcuY2hlY2tJbnRlcnZhbE1zO1xuXG4gICAgaW50ZXJ2YWwoaW50ZXJ2YWxNcylcbiAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB2b2lkIHRoaXMuY2hlY2tOb3coKSk7XG5cbiAgICBjb25zdCBvblZpc2libGUgPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykgdm9pZCB0aGlzLmNoZWNrTm93KCk7XG4gICAgfTtcbiAgICB0aGlzLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2libGUpO1xuICAgIHRoaXMuZGVzdHJveVJlZi5vbkRlc3Ryb3koKCkgPT4gdGhpcy5kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgb25WaXNpYmxlKSk7XG5cbiAgICB2b2lkIHRoaXMuY2hlY2tOb3coKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXJnYSBjb25maWcgcmVtb3RhIHZpYSBwbHVnaW4gSFRUUCBhbCBpbmljaW8sIGVuIGZvcmVncm91bmQgeSBlbiBlbCBpbnRlcnZhbG8gcGVyacOzZGljby5cbiAgICogU29sbyBzZSBsbGFtYSBzaSBgcmVtb3RlUGx1Z2luYCBlc3TDoSBwcm92aXN0by5cbiAgICovXG4gIHByaXZhdGUgd2lyZVJlbW90ZVBsdWdpbigpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMubG9hZFJlbW90ZUNvbmZpZygpO1xuXG4gICAgY29uc3QgaW50ZXJ2YWxNcyA9XG4gICAgICB0aGlzLnNlcnZpY2VDb25maWc/LmNoZWNrSW50ZXJ2YWxNcyA/PyBERUZBVUxUX0FQUF9WRVJTSU9OX1NFUlZJQ0VfQ09ORklHLmNoZWNrSW50ZXJ2YWxNcztcblxuICAgIGludGVydmFsKGludGVydmFsTXMpXG4gICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdm9pZCB0aGlzLmxvYWRSZW1vdGVDb25maWcoKSk7XG5cbiAgICBjb25zdCBvblZpc2libGUgPSAoKTogdm9pZCA9PiB7XG4gICAgICBpZiAodGhpcy5kb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPT09ICd2aXNpYmxlJykgdm9pZCB0aGlzLmxvYWRSZW1vdGVDb25maWcoKTtcbiAgICB9O1xuICAgIHRoaXMuZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIG9uVmlzaWJsZSk7XG4gICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB0aGlzLmRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvblZpc2libGUpKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJlbW90ZUNvbmZpZygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgY29uZmlnID0gYXdhaXQgdGhpcy5yZW1vdGVQbHVnaW4hLmdldFJlbW90ZUNvbmZpZygpO1xuICAgICAgdGhpcy5yZW1vdGVDb25maWcuc2V0KGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tBcHBWZXJzaW9uU2VydmljZV0gcmVtb3RlIGNvbmZpZyBmZXRjaCBmYWlsZWQ6JywgZXJyKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|