@sumaris-net/ngx-components 1.6.7 → 1.6.9

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.
@@ -178,7 +178,7 @@ export class MatBooleanField {
178
178
  MatBooleanField.decorators = [
179
179
  { type: Component, args: [{
180
180
  selector: 'mat-boolean-field',
181
- template: "<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled {{classList}}\">\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput hidden type=\"text\" readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{(formControl.value == null && 'COMMON.EMPTY_OPTION' || (formControl.value === true && yesLabel) || noLabel) | translate }}</ion-text>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<ng-template #writable>\n <ng-container [ngSwitch]=\"style\">\n\n <!-- Radio -->\n <mat-form-field *ngSwitchCase=\"'radio'\"\n [floatLabel]=\"showRadio && (!floatLabel || floatLabel === 'auto') ? 'always': floatLabel\"\n class=\"mat-boolean-field mat-boolean-field-radio {{classList}}\">\n <mat-label *ngIf=\"placeholder && floatLabel!=='never'\">\n {{placeholder}}\n <span [hidden]=\"showRadio\">({{yesLabel|translate}}/{{'COMMON.NO'|translate}})</span>\n </mat-label>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput #fakeInput type=\"text\" readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\">\n\n <!-- radio button -->\n <mat-radio-group [hidden]=\"!showRadio\"\n [formControl]=\"formControl\"\n (change)=\"onRadioValueChanged($event)\">\n <mat-radio-button #yesButton [value]=\"true\">\n <span>{{yesLabel|translate}}</span>\n </mat-radio-button>&nbsp;\n <mat-radio-button #noButton [value]=\"false\">\n <span>{{noLabel|translate}}</span>\n </mat-radio-button>\n </mat-radio-group>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- Checkbox -->\n <mat-form-field *ngSwitchCase=\"'checkbox'\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-boolean-field mat-boolean-field-checkbox {{classList}}\">\n <mat-label *ngIf=\"placeholder && !showRadio\">\n {{placeholder}}\n </mat-label>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput #matInput\n [formControl]=\"formControl\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\">\n\n <ion-label>&nbsp;</ion-label>\n\n <!-- checkbox, when compact -->\n <mat-checkbox #checkboxButton\n [formControl]=\"formControl\"\n (change)=\"onCheckboxValueChanged($event)\"\n [indeterminate]=\"value===undefined\"\n [hidden]=\"!showRadio\"\n [tabindex]=\"tabindex\">\n </mat-checkbox>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- Buttons -->\n <mat-form-field *ngSwitchCase=\"'button'\"\n [floatLabel]=\"floatLabel === 'never' ? 'never' : 'always'\"\n class=\"mat-boolean-field mat-boolean-field-button {{classList}}\">\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput type=\"text\" hidden\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [required]=\"required\">\n <div class=\"mat-form-field-buttons\"\n [style.--buttons-col-count]=\"buttonsColCount\"\n *ngIf=\"!formControl.disabled; else disabledLabel\">\n <!-- yes -->\n <ion-button class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex\"\n (click)=\"writeValue(true, $event)\"\n (keyup.enter)=\"writeValue(true, $event)\"\n [color]=\"_value == null ? 'tertiary' : (_value === true) ? 'accent' : 'light'\">\n <ion-icon *ngIf=\"showButtonIcons && yesIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{yesLabel|translate}}\n </ion-button>\n\n <!-- No button -->\n <ion-button class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex !== undefined ? (_tabindex + 1) : undefined\"\n (click)=\"writeValue(false, $event)\"\n (keyup.enter)=\"writeValue(false, $event)\"\n [color]=\"_value == null ? 'tertiary' : (_value === false) ? 'accent' : 'light'\">\n <ion-icon *ngIf=\"showButtonIcons && noIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{noLabel|translate}}\n </ion-button>\n </div>\n <ng-template #disabledLabel>\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ng-template>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n </mat-form-field>\n </ng-container>\n\n <div class=\"cdk-visually-hidden\">\n <div #suffix><ng-content select=\"[matSuffix]\"></ng-content></div>\n </div>\n\n</ng-template>\n\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n",
181
+ template: "<mat-form-field *ngIf=\"readonly; else writable\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-form-field-disabled {{classList}}\">\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput hidden type=\"text\" readonly\n [placeholder]=\"placeholder\"\n [formControl]=\"formControl\">\n <ion-text>{{(formControl.value == null && 'COMMON.EMPTY_OPTION' || (formControl.value === true && yesLabel) || noLabel) | translate }}</ion-text>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n</mat-form-field>\n\n<ng-template #writable>\n <ng-container [ngSwitch]=\"style\">\n\n <!-- Radio -->\n <mat-form-field *ngSwitchCase=\"'radio'\"\n [floatLabel]=\"showRadio && (!floatLabel || floatLabel === 'auto') ? 'always': floatLabel\"\n class=\"mat-boolean-field mat-boolean-field-radio {{classList}}\">\n <mat-label *ngIf=\"placeholder && floatLabel!=='never'\">\n {{placeholder}}\n <span [hidden]=\"showRadio\">({{yesLabel|translate}}/{{'COMMON.NO'|translate}})</span>\n </mat-label>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput #fakeInput type=\"text\" readonly=\"true\"\n [formControl]=\"formControl\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\">\n\n <!-- radio button -->\n <mat-radio-group [hidden]=\"!showRadio\"\n [formControl]=\"formControl\"\n (change)=\"onRadioValueChanged($event)\">\n <mat-radio-button #yesButton [value]=\"true\">\n <span>{{yesLabel|translate}}</span>\n </mat-radio-button>&nbsp;\n <mat-radio-button #noButton [value]=\"false\">\n <span>{{noLabel|translate}}</span>\n </mat-radio-button>\n </mat-radio-group>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- Checkbox -->\n <mat-form-field *ngSwitchCase=\"'checkbox'\"\n [floatLabel]=\"floatLabel\"\n class=\"mat-boolean-field mat-boolean-field-checkbox {{classList}}\">\n <mat-label *ngIf=\"placeholder && !showRadio\">\n {{placeholder}}\n </mat-label>\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput #matInput\n [formControl]=\"formControl\"\n (focus)=\"_onFocusFakeInput($event)\"\n [required]=\"required\"\n [class.cdk-visually-hidden]=\"showRadio\"\n [tabindex]=\"tabindex\">\n\n <ion-label>&nbsp;</ion-label>\n\n <!-- checkbox, when compact -->\n <mat-checkbox #checkboxButton\n [formControl]=\"formControl\"\n (change)=\"onCheckboxValueChanged($event)\"\n [indeterminate]=\"value===undefined\"\n [hidden]=\"!showRadio\"\n [tabindex]=\"tabindex\">\n </mat-checkbox>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n </mat-form-field>\n\n <!-- Buttons -->\n <mat-form-field *ngSwitchCase=\"'button'\"\n [floatLabel]=\"floatLabel === 'never' ? 'never' : 'always'\"\n class=\"mat-boolean-field mat-boolean-field-button {{classList}}\">\n <div matPrefix>\n <ng-container *ngTemplateOutlet=\"matPrefixTemplate\"></ng-container>\n </div>\n <input matInput type=\"text\" hidden\n [formControl]=\"formControl\"\n [placeholder]=\"placeholder\"\n [required]=\"required\">\n <div class=\"mat-form-field-buttons\"\n [style.--buttons-col-count]=\"buttonsColCount\"\n *ngIf=\"!formControl.disabled; else disabledLabel\">\n <!-- yes -->\n <ion-button class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex\"\n (click)=\"writeValue(true, $event)\"\n (keyup.enter)=\"writeValue(true, $event)\"\n [color]=\"_value == null ? 'tertiary' : (_value === true) ? 'accent' : 'light'\">\n <ion-icon *ngIf=\"showButtonIcons && yesIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{yesLabel|translate}}\n </ion-button>\n\n <!-- No button -->\n <ion-button class=\"mat-form-field-button\"\n [tabindex]=\"_tabindex !== undefined ? (_tabindex + 1) : undefined\"\n (click)=\"writeValue(false, $event)\"\n (keyup.enter)=\"writeValue(false, $event)\"\n [color]=\"_value == null ? 'tertiary' : (_value === false) ? 'accent' : 'light'\">\n <ion-icon *ngIf=\"showButtonIcons && noIcon; let icon\" slot=\"start\" [name]=\"icon\"></ion-icon>\n {{noLabel|translate}}\n </ion-button>\n </div>\n <ng-template #disabledLabel>\n <ion-label><i translate>COMMON.EMPTY_OPTION</i></ion-label>\n </ng-template>\n\n <mat-error *ngIf=\"formControl.hasError('required')\" translate>ERROR.FIELD_REQUIRED</mat-error>\n <div matSuffix>\n <ng-container *ngTemplateOutlet=\"matSuffixTemplate\"></ng-container>\n </div>\n\n </mat-form-field>\n </ng-container>\n\n</ng-template>\n\n\n<ng-template #matPrefixTemplate>\n <ng-content select=\"[matPrefix]\"></ng-content>\n</ng-template>\n<ng-template #matSuffixTemplate>\n <ng-content select=\"[matSuffix]\"></ng-content>\n</ng-template>\n",
182
182
  providers: [
183
183
  DEFAULT_VALUE_ACCESSOR
184
184
  ],
@@ -216,8 +216,7 @@ MatBooleanField.propDecorators = {
216
216
  yesButton: [{ type: ViewChild, args: ['yesButton',] }],
217
217
  noButton: [{ type: ViewChild, args: ['noButton',] }],
218
218
  checkboxButton: [{ type: ViewChild, args: ['checkboxButton',] }],
219
- fakeInput: [{ type: ViewChild, args: ['fakeInput',] }],
220
- suffixDiv: [{ type: ViewChild, args: ['suffix', { static: false },] }]
219
+ fakeInput: [{ type: ViewChild, args: ['fakeInput',] }]
221
220
  };
222
221
  export { ɵ0 };
223
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuYm9vbGVhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2Jvb2xlYW4vbWF0ZXJpYWwuYm9vbGVhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFFdkIsT0FBTyxFQUF1QixXQUFXLEVBQWUsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUNySCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQU0xRCxNQUFNLHNCQUFzQixHQUFhO0lBQ3ZDLE9BQU8sRUFBRSxpQkFBaUI7SUFDMUIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxlQUFlLENBQUM7SUFDOUMsS0FBSyxFQUFFLElBQUk7Q0FDWixDQUFDO0FBR0YsTUFBTSxJQUFJLEdBQUcsR0FBRyxFQUFFO0FBQ2xCLENBQUMsQ0FBQzs7QUFXRixNQUFNLE9BQU8sZUFBZTtJQThEMUIsWUFDVSxTQUEyQixFQUMzQixXQUF3QixFQUN4QixFQUFxQixFQUNULFlBQWdDO1FBSDVDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBQ3hCLE9BQUUsR0FBRixFQUFFLENBQW1CO1FBQ1QsaUJBQVksR0FBWixZQUFZLENBQW9CO1FBakU5QyxzQkFBaUIsR0FBcUIsSUFBSSxDQUFDO1FBQzNDLHVCQUFrQixHQUFlLElBQUksQ0FBQztRQUN0QyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBS3pCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFVCxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBSWpCLGVBQVUsR0FBbUIsTUFBTSxDQUFDO1FBQ3BDLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFDakIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUNqQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBSWhCLGFBQVEsR0FBRyxZQUFZLENBQUM7UUFDeEIsWUFBTyxHQUFHLFdBQVcsQ0FBQztRQUN0QixvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixZQUFPLEdBQUcsV0FBVyxDQUFDO1FBQ3RCLFdBQU0sR0FBRyxPQUFPLENBQUM7UUFHMUIsaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBR3ZDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBYyxDQUFDO0lBb0NwQyxDQUFDO0lBbENMLElBQWEsUUFBUSxDQUFDLEtBQWE7UUFDakMsSUFBSSxJQUFJLENBQUMsU0FBUyxLQUFLLEtBQUssRUFBRTtZQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7U0FDekM7SUFDSCxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUVELElBQ0ksS0FBSyxDQUFDLENBQU07UUFDZCxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1lBQ2hCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQjtJQUNILENBQUM7SUFlRCxRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBZ0IsQ0FBQztRQUNwSixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVc7WUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDRGQUE0RixDQUFDLENBQUM7UUFFckksSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVqRSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzNCLElBQUksQ0FBQyxlQUFlLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDMUQ7UUFFRCwwQ0FBMEM7UUFDMUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxDQUFDO1FBRWhFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQsVUFBVSxDQUFDLEtBQVUsRUFBRSxLQUFlO1FBQ3BDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPO1FBRTFCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ3ZFLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDM0IsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO2FBQ3pDO1NBQ0Y7UUFDRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUV0QixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssUUFBUSxFQUFFO1lBQzNCLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFO2dCQUNwQyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxLQUFLLEVBQUUsRUFBQyxTQUFTLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztnQkFDdkQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQy9CO1lBQ0QsSUFBSSxLQUFLO2dCQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzFDO1FBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFPO1FBQ3RCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEVBQU87UUFDdkIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUMvQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBbUI7UUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxVQUFVLENBQUM7SUFDN0IsQ0FBQztJQUdELE9BQU8sQ0FBQyxLQUFpQjtRQUN2QixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDMUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLEtBQWlCO1FBQ2pDLEtBQUssQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUV2QixzQkFBc0I7UUFDdEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQzVDO1FBRUQsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDdEIsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUN4QjtpQkFDSSxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxFQUFFLENBQUM7YUFDN0I7WUFDRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDeEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQXFCO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFFBQVE7WUFBRSxPQUFPLENBQUMsdUJBQXVCO1FBQ2xELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUMxQixJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0lBRUQsc0JBQXNCLENBQUMsS0FBd0I7UUFDN0MsSUFBSSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sQ0FBQyx1QkFBdUI7UUFDbEQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO0lBQ3hCLENBQUM7SUFFRCwwQkFBMEI7SUFFbEIsY0FBYztRQUNwQixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFO1lBQzVCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztTQUMzQjtJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGNBQWM7UUFDcEIsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLEtBQUssQ0FBQyxDQUFDO1lBQUUsT0FBTztRQUUzRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7YUFDNUM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDeEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDeEQ7U0FDRjtRQUNELElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNGLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQy9GO2FBQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFO1lBQzlCLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDakc7UUFDRCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUdPLFlBQVk7UUFDbEIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN6QixDQUFDOzs7WUF6TkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxtQkFBbUI7Z0JBQzdCLHFuTUFBc0M7Z0JBRXRDLFNBQVMsRUFBRTtvQkFDVCxzQkFBc0I7aUJBQ3ZCO2dCQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNOzthQUNoRDs7O1lBekJPLGdCQUFnQjtZQURNLFdBQVc7WUFadkMsaUJBQWlCO1lBWXFDLGtCQUFrQix1QkE2RnJFLFFBQVE7Ozt1QkF4RFYsS0FBSzswQkFDTCxLQUFLOzhCQUNMLEtBQUs7MEJBQ0wsS0FBSzt5QkFDTCxLQUFLO3VCQUNMLEtBQUs7dUJBQ0wsS0FBSztzQkFDTCxLQUFLO29CQUNMLEtBQUs7OEJBQ0wsS0FBSzt3QkFDTCxLQUFLLFNBQUMsT0FBTzt1QkFDYixLQUFLO3NCQUNMLEtBQUs7OEJBQ0wsS0FBSztzQkFDTCxLQUFLO3FCQUNMLEtBQUs7MkJBRUwsTUFBTSxTQUFDLGFBQWE7cUJBR3BCLE1BQU07dUJBR04sS0FBSztvQkFlTCxLQUFLO3dCQVFMLFNBQVMsU0FBQyxXQUFXO3VCQUNyQixTQUFTLFNBQUMsVUFBVTs2QkFDcEIsU0FBUyxTQUFDLGdCQUFnQjt3QkFDMUIsU0FBUyxTQUFDLFdBQVc7d0JBQ3JCLFNBQVMsU0FBQyxRQUFRLEVBQUUsRUFBQyxNQUFNLEVBQUUsS0FBSyxFQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uSW5pdCxcbiAgT3B0aW9uYWwsXG4gIE91dHB1dCwgUHJvdmlkZXIsIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkLCBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zsb2F0TGFiZWxUeXBlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7Q29udHJvbFZhbHVlQWNjZXNzb3IsIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbCwgRm9ybUdyb3VwRGlyZWN0aXZlLCBOR19WQUxVRV9BQ0NFU1NPUn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7aXNOaWwsIGlzTm90TmlsLCB0b051bWJlcn0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7SW5wdXRFbGVtZW50fSBmcm9tICcuLi8uLi9pbnB1dHMnO1xuaW1wb3J0IHtNYXRSYWRpb0J1dHRvbiwgTWF0UmFkaW9DaGFuZ2V9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3JhZGlvJztcbmltcG9ydCB7TWF0Q2hlY2tib3gsIE1hdENoZWNrYm94Q2hhbmdlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jaGVja2JveCc7XG5pbXBvcnQge01hdERhdGVTaG9ydH0gZnJvbSAnLi4vZGF0ZXRpbWUvbWF0ZXJpYWwuZGF0ZXNob3J0JztcblxuY29uc3QgREVGQVVMVF9WQUxVRV9BQ0NFU1NPUjogUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNYXRCb29sZWFuRmllbGQpLFxuICBtdWx0aTogdHJ1ZVxufTtcblxuXG5jb25zdCBub29wID0gKCkgPT4ge1xufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbWF0LWJvb2xlYW4tZmllbGQnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWF0ZXJpYWwuYm9vbGVhbi5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vbWF0ZXJpYWwuYm9vbGVhbi5zY3NzJ10sXG4gIHByb3ZpZGVyczogW1xuICAgIERFRkFVTFRfVkFMVUVfQUNDRVNTT1JcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTWF0Qm9vbGVhbkZpZWxkIGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgSW5wdXRFbGVtZW50IHtcbiAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX29uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfd3JpdGluZyA9IGZhbHNlO1xuXG4gIF92YWx1ZTogYm9vbGVhbjtcbiAgX3RhYmluZGV4OiBudW1iZXI7XG5cbiAgc2hvd1JhZGlvID0gZmFsc2U7XG5cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgZm9ybUNvbnRyb2w6IEZvcm1Db250cm9sO1xuICBASW5wdXQoKSBmb3JtQ29udHJvbE5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgQElucHV0KCkgZmxvYXRMYWJlbDogRmxvYXRMYWJlbFR5cGUgPSAnYXV0byc7XG4gIEBJbnB1dCgpIHJlYWRvbmx5ID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlcXVpcmVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGNvbXBhY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgc3R5bGU6ICdyYWRpbycgfCAnY2hlY2tib3gnIHwgJ2J1dHRvbic7XG4gIEBJbnB1dCgpIGJ1dHRvbnNDb2xDb3VudDogbnVtYmVyO1xuICBASW5wdXQoJ2NsYXNzJykgY2xhc3NMaXN0OiBzdHJpbmc7XG4gIEBJbnB1dCgpIHllc0xhYmVsID0gJ0NPTU1PTi5ZRVMnO1xuICBASW5wdXQoKSBub0xhYmVsID0gJ0NPTU1PTi5OTyc7XG4gIEBJbnB1dCgpIHNob3dCdXR0b25JY29ucyA9IHRydWU7XG4gIEBJbnB1dCgpIHllc0ljb24gPSAnY2hlY2ttYXJrJztcbiAgQElucHV0KCkgbm9JY29uID0gJ2Nsb3NlJztcblxuICBAT3V0cHV0KCdrZXl1cC5lbnRlcicpXG4gIG9uUHJlc3NFbnRlciA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIEBPdXRwdXQoKVxuICBvbkJsdXIgPSBuZXcgRXZlbnRFbWl0dGVyPEZvY3VzRXZlbnQ+KCk7XG5cbiAgQElucHV0KCkgc2V0IHRhYmluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fdGFiaW5kZXggIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl90YWJpbmRleCA9IHZhbHVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVRhYkluZGV4KCkpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90YWJpbmRleDtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIEBJbnB1dCgpXG4gIHNldCB2YWx1ZSh2OiBhbnkpIHtcbiAgICBpZiAodiAhPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdjtcbiAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sodik7XG4gICAgfVxuICB9XG5cbiAgQFZpZXdDaGlsZCgneWVzQnV0dG9uJykgeWVzQnV0dG9uOiBNYXRSYWRpb0J1dHRvbjtcbiAgQFZpZXdDaGlsZCgnbm9CdXR0b24nKSBub0J1dHRvbjogTWF0UmFkaW9CdXR0b247XG4gIEBWaWV3Q2hpbGQoJ2NoZWNrYm94QnV0dG9uJykgY2hlY2tib3hCdXR0b246IE1hdENoZWNrYm94O1xuICBAVmlld0NoaWxkKCdmYWtlSW5wdXQnKSBmYWtlSW5wdXQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3N1ZmZpeCcsIHtzdGF0aWM6IGZhbHNlfSkgc3VmZml4RGl2OiBFbGVtZW50UmVmO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBPcHRpb25hbCgpIHByaXZhdGUgZm9ybUdyb3VwRGlyOiBGb3JtR3JvdXBEaXJlY3RpdmVcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICB0aGlzLmZvcm1Db250cm9sID0gdGhpcy5mb3JtQ29udHJvbCB8fCB0aGlzLmZvcm1Db250cm9sTmFtZSAmJiB0aGlzLmZvcm1Hcm91cERpciAmJiB0aGlzLmZvcm1Hcm91cERpci5mb3JtLmdldCh0aGlzLmZvcm1Db250cm9sTmFtZSkgYXMgRm9ybUNvbnRyb2w7XG4gICAgaWYgKCF0aGlzLmZvcm1Db250cm9sKSB0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgbWFuZGF0b3J5IGF0dHJpYnV0ZSBcXCdmb3JtQ29udHJvbFxcJyBvciBcXCdmb3JtQ29udHJvbE5hbWVcXCcgaW4gPG1hdC1ib29sZWFuLWZpZWxkPi4nKTtcblxuICAgIHRoaXMuc3R5bGUgPSB0aGlzLnN0eWxlIHx8ICh0aGlzLmNvbXBhY3QgPyAnY2hlY2tib3gnIDogJ3JhZGlvJyk7XG5cbiAgICBpZiAodGhpcy5zdHlsZSA9PT0gJ2J1dHRvbicpIHtcbiAgICAgIHRoaXMuYnV0dG9uc0NvbENvdW50ID0gdG9OdW1iZXIodGhpcy5idXR0b25zQ29sQ291bnQsIDIpO1xuICAgIH1cblxuICAgIC8vIEZvcmNlIHNob3cgcmFkaW8gaWYgbGFiZWwgYWx3YXlzIG9uIHRvcFxuICAgIHRoaXMuc2hvd1JhZGlvID0gdGhpcy5zaG93UmFkaW8gfHwgdGhpcy5mbG9hdExhYmVsID09PSAnYWx3YXlzJztcblxuICAgIHRoaXMudXBkYXRlVGFiSW5kZXgoKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUodmFsdWU6IGFueSwgZXZlbnQ/OiBVSUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dyaXRpbmcpIHJldHVybjtcblxuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy5fdmFsdWUpIHtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gICAgICB0aGlzLnNob3dSYWRpbyA9IHRoaXMuZmxvYXRMYWJlbCA9PT0gJ2Fsd2F5cycgfHwgaXNOb3ROaWwodGhpcy5fdmFsdWUpO1xuICAgICAgaWYgKGlzTm90TmlsKHRoaXMudGFiaW5kZXgpKSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVUYWJJbmRleCgpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuc3R5bGUgPT09ICdidXR0b24nKSB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKHZhbHVlLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKHZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChldmVudCkgdGhpcy5vblByZXNzRW50ZXIuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gIH1cblxuXG4gIF9vbkJsdXIoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICB0aGlzLmNoZWNrSWZUb3VjaGVkKCk7XG4gICAgdGhpcy5vbkJsdXIuZW1pdChldmVudCk7XG4gIH1cblxuICBfb25Gb2N1c0Zha2VJbnB1dChldmVudDogRm9jdXNFdmVudCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAvLyBIaWRlIHRoZSBmYWtlIGlucHV0XG4gICAgaWYgKHRoaXMuZmFrZUlucHV0KSB7XG4gICAgICB0aGlzLmZha2VJbnB1dC5uYXRpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IC0xO1xuICAgIH1cblxuICAgIC8vIEZvY3VzIG9uIGZpcnN0IGJ1dHRvblxuICAgIHRoaXMuZm9jdXMoKTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIHRoaXMuc2hvd1JhZGlvID0gdHJ1ZTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnllc0J1dHRvbikge1xuICAgICAgICB0aGlzLnllc0J1dHRvbi5mb2N1cygpO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAodGhpcy5jaGVja2JveEJ1dHRvbikge1xuICAgICAgICB0aGlzLmNoZWNrYm94QnV0dG9uLmZvY3VzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KCk7XG4gICAgfSk7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uUmFkaW9WYWx1ZUNoYW5nZWQoZXZlbnQ6IE1hdFJhZGlvQ2hhbmdlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3dyaXRpbmcpIHJldHVybjsgLy8gU2tpcCBpZiBjYWxsIGJ5IHNlbGZcbiAgICB0aGlzLl93cml0aW5nID0gdHJ1ZTtcbiAgICB0aGlzLl92YWx1ZSA9IGV2ZW50LnZhbHVlO1xuICAgIHRoaXMuY2hlY2tJZlRvdWNoZWQoKTtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKGV2ZW50LnZhbHVlKTtcbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gIH1cblxuICBvbkNoZWNrYm94VmFsdWVDaGFuZ2VkKGV2ZW50OiBNYXRDaGVja2JveENoYW5nZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93cml0aW5nKSByZXR1cm47IC8vIFNraXAgaWYgY2FsbCBieSBzZWxmXG4gICAgdGhpcy5fd3JpdGluZyA9IHRydWU7XG4gICAgdGhpcy5fdmFsdWUgPSBldmVudC5jaGVja2VkO1xuICAgIHRoaXMuY2hlY2tJZlRvdWNoZWQoKTtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKGV2ZW50LmNoZWNrZWQpO1xuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSBjaGVja0lmVG91Y2hlZCgpIHtcbiAgICBpZiAodGhpcy5mb3JtQ29udHJvbC50b3VjaGVkKSB7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSwgYmVjYXVzZSwgdGhpcyBjb21wb25lbnQgaGFzIGEgdGVtcG9yYXJ5IGNvbXBvbmVudCBkaXNwbGF5ZWQgYmVmb3JlIHRoZSBmaXJzdCBmb2N1cyBldmVudFxuICAgKi9cbiAgcHJpdmF0ZSB1cGRhdGVUYWJJbmRleCgpIHtcbiAgICBpZiAoaXNOaWwodGhpcy5fdGFiaW5kZXgpIHx8IHRoaXMuX3RhYmluZGV4ID09PSAtMSkgcmV0dXJuO1xuXG4gICAgaWYgKHRoaXMuZmFrZUlucHV0KSB7XG4gICAgICBpZiAodGhpcy5zaG93UmFkaW8pIHtcbiAgICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IC0xO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdoaWRkZW4nKTtcbiAgICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IHRoaXMuX3RhYmluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy55ZXNCdXR0b24pIHtcbiAgICAgIHRoaXMueWVzQnV0dG9uLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IHRoaXMuc2hvd1JhZGlvID8gdGhpcy5fdGFiaW5kZXggOiAtMTtcbiAgICAgIHRoaXMubm9CdXR0b24uX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gdGhpcy5zaG93UmFkaW8gPyB0aGlzLl90YWJpbmRleCArIDEgOiAtMTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuY2hlY2tib3hCdXR0b24pIHtcbiAgICAgIHRoaXMuY2hlY2tib3hCdXR0b24uX2lucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnRhYkluZGV4ID0gdGhpcy5zaG93UmFkaW8gPyB0aGlzLl90YWJpbmRleCA6IC0xO1xuICAgIH1cbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cblxuICBwcml2YXRlIG1hcmtGb3JDaGVjaygpIHtcbiAgICB0aGlzLmNkLm1hcmtGb3JDaGVjaygpO1xuICB9XG59XG5cbiJdfQ==
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuYm9vbGVhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2Jvb2xlYW4vbWF0ZXJpYWwuYm9vbGVhbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQVksU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxMLE9BQU8sRUFBd0IsV0FBVyxFQUFlLGtCQUFrQixFQUFFLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFLNUQsTUFBTSxzQkFBc0IsR0FBYTtJQUN2QyxPQUFPLEVBQUUsaUJBQWlCO0lBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsZUFBZSxDQUFDO0lBQzlDLEtBQUssRUFBRSxJQUFJO0NBQ1osQ0FBQztBQUdGLE1BQU0sSUFBSSxHQUFHLEdBQUcsRUFBRTtBQUNsQixDQUFDLENBQUM7O0FBV0YsTUFBTSxPQUFPLGVBQWU7SUE2RDFCLFlBQ1UsU0FBMkIsRUFDM0IsV0FBd0IsRUFDeEIsRUFBcUIsRUFDVCxZQUFnQztRQUg1QyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMzQixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQUNULGlCQUFZLEdBQVosWUFBWSxDQUFvQjtRQWhFOUMsc0JBQWlCLEdBQXFCLElBQUksQ0FBQztRQUMzQyx1QkFBa0IsR0FBZSxJQUFJLENBQUM7UUFDdEMsYUFBUSxHQUFHLEtB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QUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIGZvcndhcmRSZWYsIElucHV0LCBPbkluaXQsIE9wdGlvbmFsLCBPdXRwdXQsIFByb3ZpZGVyLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZsb2F0TGFiZWxUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sLCBGb3JtR3JvdXBEaXJlY3RpdmUsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgaXNOaWwsIGlzTm90TmlsLCB0b051bWJlciB9IGZyb20gJy4uLy4uL2Z1bmN0aW9ucyc7XG5pbXBvcnQgeyBJbnB1dEVsZW1lbnQgfSBmcm9tICcuLi8uLi9pbnB1dHMnO1xuaW1wb3J0IHsgTWF0UmFkaW9CdXR0b24sIE1hdFJhZGlvQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvcmFkaW8nO1xuaW1wb3J0IHsgTWF0Q2hlY2tib3gsIE1hdENoZWNrYm94Q2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY2hlY2tib3gnO1xuXG5jb25zdCBERUZBVUxUX1ZBTFVFX0FDQ0VTU09SOiBQcm92aWRlciA9IHtcbiAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IE1hdEJvb2xlYW5GaWVsZCksXG4gIG11bHRpOiB0cnVlXG59O1xuXG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtYm9vbGVhbi1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC5ib29sZWFuLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYXRlcmlhbC5ib29sZWFuLnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgREVGQVVMVF9WQUxVRV9BQ0NFU1NPUlxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNYXRCb29sZWFuRmllbGQgaW1wbGVtZW50cyBPbkluaXQsIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBJbnB1dEVsZW1lbnQge1xuICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF93cml0aW5nID0gZmFsc2U7XG5cbiAgX3ZhbHVlOiBib29sZWFuO1xuICBfdGFiaW5kZXg6IG51bWJlcjtcblxuICBzaG93UmFkaW8gPSBmYWxzZTtcblxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2w7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBmbG9hdExhYmVsOiBGbG9hdExhYmVsVHlwZSA9ICdhdXRvJztcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcbiAgQElucHV0KCkgY29tcGFjdCA9IGZhbHNlO1xuICBASW5wdXQoKSBzdHlsZTogJ3JhZGlvJyB8ICdjaGVja2JveCcgfCAnYnV0dG9uJztcbiAgQElucHV0KCkgYnV0dG9uc0NvbENvdW50OiBudW1iZXI7XG4gIEBJbnB1dCgnY2xhc3MnKSBjbGFzc0xpc3Q6IHN0cmluZztcbiAgQElucHV0KCkgeWVzTGFiZWwgPSAnQ09NTU9OLllFUyc7XG4gIEBJbnB1dCgpIG5vTGFiZWwgPSAnQ09NTU9OLk5PJztcbiAgQElucHV0KCkgc2hvd0J1dHRvbkljb25zID0gdHJ1ZTtcbiAgQElucHV0KCkgeWVzSWNvbiA9ICdjaGVja21hcmsnO1xuICBASW5wdXQoKSBub0ljb24gPSAnY2xvc2UnO1xuXG4gIEBPdXRwdXQoJ2tleXVwLmVudGVyJylcbiAgb25QcmVzc0VudGVyID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgQE91dHB1dCgpXG4gIG9uQmx1ciA9IG5ldyBFdmVudEVtaXR0ZXI8Rm9jdXNFdmVudD4oKTtcblxuICBASW5wdXQoKSBzZXQgdGFiaW5kZXgodmFsdWU6IG51bWJlcikge1xuICAgIGlmICh0aGlzLl90YWJpbmRleCAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuX3RhYmluZGV4ID0gdmFsdWU7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlVGFiSW5kZXgoKSk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHRhYmluZGV4KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYmluZGV4O1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xuICB9XG5cbiAgQElucHV0KClcbiAgc2V0IHZhbHVlKHY6IGFueSkge1xuICAgIGlmICh2ICE9PSB0aGlzLl92YWx1ZSkge1xuICAgICAgdGhpcy5fdmFsdWUgPSB2O1xuICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh2KTtcbiAgICB9XG4gIH1cblxuICBAVmlld0NoaWxkKCd5ZXNCdXR0b24nKSB5ZXNCdXR0b246IE1hdFJhZGlvQnV0dG9uO1xuICBAVmlld0NoaWxkKCdub0J1dHRvbicpIG5vQnV0dG9uOiBNYXRSYWRpb0J1dHRvbjtcbiAgQFZpZXdDaGlsZCgnY2hlY2tib3hCdXR0b24nKSBjaGVja2JveEJ1dHRvbjogTWF0Q2hlY2tib3g7XG4gIEBWaWV3Q2hpbGQoJ2Zha2VJbnB1dCcpIGZha2VJbnB1dDogRWxlbWVudFJlZjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1Hcm91cERpcjogRm9ybUdyb3VwRGlyZWN0aXZlXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2wgfHwgdGhpcy5mb3JtQ29udHJvbE5hbWUgJiYgdGhpcy5mb3JtR3JvdXBEaXIgJiYgdGhpcy5mb3JtR3JvdXBEaXIuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpIGFzIEZvcm1Db250cm9sO1xuICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgXFwnZm9ybUNvbnRyb2xcXCcgb3IgXFwnZm9ybUNvbnRyb2xOYW1lXFwnIGluIDxtYXQtYm9vbGVhbi1maWVsZD4uJyk7XG5cbiAgICB0aGlzLnN0eWxlID0gdGhpcy5zdHlsZSB8fCAodGhpcy5jb21wYWN0ID8gJ2NoZWNrYm94JyA6ICdyYWRpbycpO1xuXG4gICAgaWYgKHRoaXMuc3R5bGUgPT09ICdidXR0b24nKSB7XG4gICAgICB0aGlzLmJ1dHRvbnNDb2xDb3VudCA9IHRvTnVtYmVyKHRoaXMuYnV0dG9uc0NvbENvdW50LCAyKTtcbiAgICB9XG5cbiAgICAvLyBGb3JjZSBzaG93IHJhZGlvIGlmIGxhYmVsIGFsd2F5cyBvbiB0b3BcbiAgICB0aGlzLnNob3dSYWRpbyA9IHRoaXMuc2hvd1JhZGlvIHx8IHRoaXMuZmxvYXRMYWJlbCA9PT0gJ2Fsd2F5cyc7XG5cbiAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnksIGV2ZW50PzogVUlFdmVudCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93cml0aW5nKSByZXR1cm47XG5cbiAgICB0aGlzLl93cml0aW5nID0gdHJ1ZTtcbiAgICBpZiAodmFsdWUgIT09IHRoaXMuX3ZhbHVlKSB7XG4gICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuICAgICAgdGhpcy5zaG93UmFkaW8gPSB0aGlzLmZsb2F0TGFiZWwgPT09ICdhbHdheXMnIHx8IGlzTm90TmlsKHRoaXMuX3ZhbHVlKTtcbiAgICAgIGlmIChpc05vdE5pbCh0aGlzLnRhYmluZGV4KSkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlVGFiSW5kZXgoKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3dyaXRpbmcgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnN0eWxlID09PSAnYnV0dG9uJykge1xuICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLmZvcm1Db250cm9sLnZhbHVlKSB7XG4gICAgICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh2YWx1ZSwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQpIHRoaXMub25QcmVzc0VudGVyLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICB9XG5cblxuICBfb25CbHVyKGV2ZW50OiBGb2N1c0V2ZW50KSB7XG4gICAgdGhpcy5jaGVja0lmVG91Y2hlZCgpO1xuICAgIHRoaXMub25CbHVyLmVtaXQoZXZlbnQpO1xuICB9XG5cbiAgX29uRm9jdXNGYWtlSW5wdXQoZXZlbnQ6IEZvY3VzRXZlbnQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgLy8gSGlkZSB0aGUgZmFrZSBpbnB1dFxuICAgIGlmICh0aGlzLmZha2VJbnB1dCkge1xuICAgICAgdGhpcy5mYWtlSW5wdXQubmF0aXZlRWxlbWVudC5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTtcbiAgICAgIHRoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICB9XG5cbiAgICAvLyBGb2N1cyBvbiBmaXJzdCBidXR0b25cbiAgICB0aGlzLmZvY3VzKCk7XG4gIH1cblxuICBmb2N1cygpIHtcbiAgICB0aGlzLnNob3dSYWRpbyA9IHRydWU7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy55ZXNCdXR0b24pIHtcbiAgICAgICAgdGhpcy55ZXNCdXR0b24uZm9jdXMoKTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRoaXMuY2hlY2tib3hCdXR0b24pIHtcbiAgICAgICAgdGhpcy5jaGVja2JveEJ1dHRvbi5mb2N1cygpO1xuICAgICAgfVxuICAgICAgdGhpcy51cGRhdGVUYWJJbmRleCgpO1xuICAgIH0pO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvblJhZGlvVmFsdWVDaGFuZ2VkKGV2ZW50OiBNYXRSYWRpb0NoYW5nZSk6IHZvaWQge1xuICAgIGlmICh0aGlzLl93cml0aW5nKSByZXR1cm47IC8vIFNraXAgaWYgY2FsbCBieSBzZWxmXG4gICAgdGhpcy5fd3JpdGluZyA9IHRydWU7XG4gICAgdGhpcy5fdmFsdWUgPSBldmVudC52YWx1ZTtcbiAgICB0aGlzLmNoZWNrSWZUb3VjaGVkKCk7XG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayhldmVudC52YWx1ZSk7XG4gICAgdGhpcy5fd3JpdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgb25DaGVja2JveFZhbHVlQ2hhbmdlZChldmVudDogTWF0Q2hlY2tib3hDaGFuZ2UpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fd3JpdGluZykgcmV0dXJuOyAvLyBTa2lwIGlmIGNhbGwgYnkgc2VsZlxuICAgIHRoaXMuX3dyaXRpbmcgPSB0cnVlO1xuICAgIHRoaXMuX3ZhbHVlID0gZXZlbnQuY2hlY2tlZDtcbiAgICB0aGlzLmNoZWNrSWZUb3VjaGVkKCk7XG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayhldmVudC5jaGVja2VkKTtcbiAgICB0aGlzLl93cml0aW5nID0gZmFsc2U7XG4gIH1cblxuICAvKiAtLSBwcml2YXRlIG1ldGhvZCAtLSAqL1xuXG4gIHByaXZhdGUgY2hlY2tJZlRvdWNoZWQoKSB7XG4gICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wudG91Y2hlZCkge1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHRoaXMuX29uVG91Y2hlZENhbGxiYWNrKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgYSBzcGVjaWFsIGNhc2UsIGJlY2F1c2UsIHRoaXMgY29tcG9uZW50IGhhcyBhIHRlbXBvcmFyeSBjb21wb25lbnQgZGlzcGxheWVkIGJlZm9yZSB0aGUgZmlyc3QgZm9jdXMgZXZlbnRcbiAgICovXG4gIHByaXZhdGUgdXBkYXRlVGFiSW5kZXgoKSB7XG4gICAgaWYgKGlzTmlsKHRoaXMuX3RhYmluZGV4KSB8fCB0aGlzLl90YWJpbmRleCA9PT0gLTEpIHJldHVybjtcblxuICAgIGlmICh0aGlzLmZha2VJbnB1dCkge1xuICAgICAgaWYgKHRoaXMuc2hvd1JhZGlvKSB7XG4gICAgICAgIHRoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7XG4gICAgICAgIHRoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnQudGFiSW5kZXggPSAtMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7XG4gICAgICAgIHRoaXMuZmFrZUlucHV0Lm5hdGl2ZUVsZW1lbnQudGFiSW5kZXggPSB0aGlzLl90YWJpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMueWVzQnV0dG9uKSB7XG4gICAgICB0aGlzLnllc0J1dHRvbi5faW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQudGFiSW5kZXggPSB0aGlzLnNob3dSYWRpbyA/IHRoaXMuX3RhYmluZGV4IDogLTE7XG4gICAgICB0aGlzLm5vQnV0dG9uLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IHRoaXMuc2hvd1JhZGlvID8gdGhpcy5fdGFiaW5kZXggKyAxIDogLTE7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNoZWNrYm94QnV0dG9uKSB7XG4gICAgICB0aGlzLmNoZWNrYm94QnV0dG9uLl9pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC50YWJJbmRleCA9IHRoaXMuc2hvd1JhZGlvID8gdGhpcy5fdGFiaW5kZXggOiAtMTtcbiAgICB9XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG5cbiAgcHJpdmF0ZSBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuXG4iXX0=
@@ -159,44 +159,6 @@ export class MatDate {
159
159
  this.markForCheck();
160
160
  this._onChangeCallback(dateStr);
161
161
  }
162
- updatePattern(pattern) {
163
- pattern = pattern !== 'COMMON.DATE_PATTERN' ? pattern : 'L';
164
- if (this.displayPattern !== pattern) {
165
- this.displayPattern = pattern;
166
- this.dayPattern = pattern;
167
- this.markForCheck();
168
- }
169
- }
170
- onFormChange(dayValue) {
171
- if (this.writing)
172
- return; // Skip if call by self
173
- this.writing = true;
174
- // Make to remove placeholder chars
175
- while (dayValue && dayValue.indexOf(this.placeholderChar) !== -1) {
176
- dayValue = dayValue.replace(this.placeholderChar, '');
177
- }
178
- let date;
179
- // Parse day string
180
- date = dayValue && this.dateAdapter.parse(dayValue, this.dayPattern) || null;
181
- // Reset time
182
- date = date && date.utc(true).hour(0).minute(0).seconds(0).millisecond(0);
183
- // update date picker
184
- this._value = date && this.dateAdapter.parse(date.clone(), DATE_ISO_PATTERN);
185
- // Get the model value
186
- const dateStr = date && date.isValid() && this.dateAdapter.format(date, DATE_ISO_PATTERN).replace('+00:00', 'Z') || date;
187
- //console.debug("[mat-date-time] Setting date: ", dateStr);
188
- this.formControl.patchValue(dateStr, { emitEvent: false });
189
- //this.formControl.updateValueAndValidity();
190
- this.writing = false;
191
- this.markForCheck();
192
- this._onChangeCallback(dateStr);
193
- }
194
- checkIfTouched() {
195
- if (this.dayControl.touched) {
196
- this.markForCheck();
197
- this._onTouchedCallback();
198
- }
199
- }
200
162
  openDatePickerIfMobile(event, datePicker) {
201
163
  return __awaiter(this, void 0, void 0, function* () {
202
164
  if (!this.mobile || event.defaultPrevented)
@@ -236,7 +198,45 @@ export class MatDate {
236
198
  }
237
199
  });
238
200
  }
239
- /* -- protected method -- */
201
+ /* -- private method -- */
202
+ updatePattern(pattern) {
203
+ pattern = pattern !== 'COMMON.DATE_PATTERN' ? pattern : 'L';
204
+ if (this.displayPattern !== pattern) {
205
+ this.displayPattern = pattern;
206
+ this.dayPattern = pattern;
207
+ this.markForCheck();
208
+ }
209
+ }
210
+ onFormChange(dayValue) {
211
+ if (this.writing)
212
+ return; // Skip if call by self
213
+ this.writing = true;
214
+ // Make to remove placeholder chars
215
+ while (dayValue && dayValue.indexOf(this.placeholderChar) !== -1) {
216
+ dayValue = dayValue.replace(this.placeholderChar, '');
217
+ }
218
+ let date;
219
+ // Parse day string
220
+ date = dayValue && this.dateAdapter.parse(dayValue, this.dayPattern) || null;
221
+ // Reset time
222
+ date = date && date.utc(true).hour(0).minute(0).seconds(0).millisecond(0);
223
+ // update date picker
224
+ this._value = date && this.dateAdapter.parse(date.clone(), DATE_ISO_PATTERN);
225
+ // Get the model value
226
+ const dateStr = date && date.isValid() && this.dateAdapter.format(date, DATE_ISO_PATTERN).replace('+00:00', 'Z') || date;
227
+ //console.debug("[mat-date-time] Setting date: ", dateStr);
228
+ this.formControl.patchValue(dateStr, { emitEvent: false });
229
+ //this.formControl.updateValueAndValidity();
230
+ this.writing = false;
231
+ this.markForCheck();
232
+ this._onChangeCallback(dateStr);
233
+ }
234
+ checkIfTouched() {
235
+ if (this.dayControl.touched) {
236
+ this.markForCheck();
237
+ this._onTouchedCallback();
238
+ }
239
+ }
240
240
  waitKeyboardHide(waitKeyboardDelay) {
241
241
  return __awaiter(this, void 0, void 0, function* () {
242
242
  if (!this.keyboard || !this.keyboard.isVisible)
@@ -304,4 +304,4 @@ MatDate.propDecorators = {
304
304
  matInputs: [{ type: ViewChildren, args: ['matInput',] }]
305
305
  };
306
306
  export { ɵ0 };
307
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuZGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2RhdGV0aW1lL21hdGVyaWFsLmRhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsS0FBSyxFQUVMLFFBQVEsRUFFUixTQUFTLEVBQ1QsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBR0wsV0FBVyxFQUVYLGtCQUFrQixFQUNsQixpQkFBaUIsRUFFakIsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFDLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLHNCQUFzQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDbkcsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBZSxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHbkQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlC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LFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQUU7Z0JBQzNDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsQ0FBQztZQUNsRCxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyxZQUFZO1FBQ3BCLElBQUksQ0FBQyxFQUFFLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDekIsQ0FBQzs7O1lBdFVGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO2dCQUMxQiwwNEdBQW1DO2dCQUVuQyxTQUFTLEVBQUU7b0JBQ1Qsc0JBQXNCO2lCQUN2QjtnQkFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDaEQ7OztZQTVDTyxRQUFRO1lBc0JSLFdBQVc7WUFYWCxnQkFBZ0I7WUFQdEIsV0FBVztZQWZYLGlCQUFpQjtZQTJCWCxRQUFRLHVCQXNGWCxRQUFRO1lBaEdYLGtCQUFrQix1QkFpR2YsUUFBUTs7O3VCQXpDVixLQUFLOzBCQUNMLEtBQUs7OEJBQ0wsS0FBSzswQkFDTCxLQUFLO3lCQUNMLEtBQUs7dUJBQ0wsS0FBSzt1QkFDTCxLQUFLO3NCQUNMLEtBQUs7OEJBQ0wsS0FBSzt3QkFDTCxLQUFLO3VCQUVMLEtBQUs7d0JBV0wsS0FBSzt3QkFFTCxLQUFLO3lCQUVMLFNBQVMsU0FBQyxZQUFZO3dCQUV0QixZQUFZLFNBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBJbnB1dCwgT25EZXN0cm95LFxuICBPbkluaXQsXG4gIE9wdGlvbmFsLCBQcm92aWRlcixcbiAgUXVlcnlMaXN0LFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7UGxhdGZvcm19IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7XG4gIEFic3RyYWN0Q29udHJvbCxcbiAgQ29udHJvbFZhbHVlQWNjZXNzb3IsXG4gIEZvcm1CdWlsZGVyLFxuICBGb3JtQ29udHJvbCxcbiAgRm9ybUdyb3VwRGlyZWN0aXZlLFxuICBOR19WQUxVRV9BQ0NFU1NPUixcbiAgVmFsaWRhdGlvbkVycm9ycyxcbiAgVmFsaWRhdG9yc1xufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtNb21lbnR9IGZyb20gJ21vbWVudCc7XG5pbXBvcnQge0RBVEVfSVNPX1BBVFRFUk4sIERFRkFVTFRfUExBQ0VIT0xERVJfQ0hBUiwgS0VZQk9BUkRfSElERV9ERUxBWV9NU30gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcbmltcG9ydCB7U2hhcmVkVmFsaWRhdG9yc30gZnJvbSAnLi4vLi4vdmFsaWRhdG9yL3ZhbGlkYXRvcnMnO1xuaW1wb3J0IHtzbGVlcCwgaXNOaWwsIGlzTmlsT3JCbGFuaywgdG9Cb29sZWFufSBmcm9tICcuLi8uLi9mdW5jdGlvbnMnO1xuaW1wb3J0IHtLZXlib2FyZH0gZnJvbSAnQGlvbmljLW5hdGl2ZS9rZXlib2FyZC9uZ3gnO1xuaW1wb3J0IHtmaWx0ZXIsIGZpcnN0fSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge0lucHV0RWxlbWVudCwgc2V0VGFiSW5kZXh9IGZyb20gJy4uLy4uL2lucHV0cyc7XG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcbmltcG9ydCB7RmxvYXRMYWJlbFR5cGV9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2Zvcm0tZmllbGQnO1xuaW1wb3J0IHtNYXREYXRlcGlja2VyLCBNYXREYXRlcGlja2VySW5wdXRFdmVudH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGF0ZXBpY2tlcic7XG5pbXBvcnQge0RhdGVBZGFwdGVyfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9jb3JlJztcbmltcG9ydCB7aXNGb2N1c2FibGVFbGVtZW50fSBmcm9tICcuLi8uLi9mb2N1c2FibGUnO1xuaW1wb3J0IHt0b0RhdGVJU09TdHJpbmd9IGZyb20gJy4uLy4uL2RhdGVzJztcblxuY29uc3QgREVGQVVMVF9WQUxVRV9BQ0NFU1NPUjogUHJvdmlkZXIgPSB7XG4gIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNYXREYXRlKSxcbiAgbXVsdGk6IHRydWVcbn07XG5cbmNvbnN0IERBWV9NQVNLID0gWy9cXGQvLCAvXFxkLywgJy8nLCAvXFxkLywgL1xcZC8sICcvJywgL1xcZC8sIC9cXGQvLCAvXFxkLywgL1xcZC9dO1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ21hdC1kYXRlLWZpZWxkJyxcbiAgdGVtcGxhdGVVcmw6ICcuL21hdGVyaWFsLmRhdGUuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21hdGVyaWFsLmRhdGUuc2NzcyddLFxuICBwcm92aWRlcnM6IFtcbiAgICBERUZBVUxUX1ZBTFVFX0FDQ0VTU09SLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBNYXREYXRlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBJbnB1dEVsZW1lbnQge1xuICBwcml2YXRlIF9vbkNoYW5nZUNhbGxiYWNrOiAoXzogYW55KSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfb25Ub3VjaGVkQ2FsbGJhY2s6ICgpID0+IHZvaWQgPSBub29wO1xuICBwcml2YXRlIF9zdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByb3RlY3RlZCB3cml0aW5nID0gdHJ1ZTtcbiAgcHJvdGVjdGVkIGRpc2FibGluZyA9IGZhbHNlO1xuICBwcm90ZWN0ZWQgX3RhYmluZGV4OiBudW1iZXI7XG4gIHByb3RlY3RlZCBrZXlib2FyZEhpZGVEZWxheTogbnVtYmVyO1xuXG4gIG1vYmlsZTogYm9vbGVhbjtcbiAgZGF5Q29udHJvbDogQWJzdHJhY3RDb250cm9sO1xuICBkaXNwbGF5UGF0dGVybjogc3RyaW5nO1xuICBkYXlQYXR0ZXJuOiBzdHJpbmc7XG4gIF92YWx1ZTogTW9tZW50O1xuICBsb2NhbGU6IHN0cmluZztcbiAgZGF5TWFzayA9IERBWV9NQVNLO1xuXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sOiBGb3JtQ29udHJvbDtcbiAgQElucHV0KCkgZm9ybUNvbnRyb2xOYW1lOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIEBJbnB1dCgpIGZsb2F0TGFiZWw6IEZsb2F0TGFiZWxUeXBlID0gJ2F1dG8nO1xuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xuICBASW5wdXQoKSByZXF1aXJlZDogYm9vbGVhbjtcbiAgQElucHV0KCkgY29tcGFjdCA9IGZhbHNlO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlckNoYXI6IHN0cmluZyA9IERFRkFVTFRfUExBQ0VIT0xERVJfQ0hBUjtcbiAgQElucHV0KCkgYXV0b2ZvY3VzID0gZmFsc2U7XG5cbiAgQElucHV0KCkgc2V0IHRhYmluZGV4KHZhbHVlOiBudW1iZXIpIHtcbiAgICBpZiAodGhpcy5fdGFiaW5kZXggIT09IHZhbHVlKSB7XG4gICAgICB0aGlzLl90YWJpbmRleCA9IHZhbHVlO1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVRhYkluZGV4KCkpO1xuICAgIH1cbiAgfVxuXG4gIGdldCB0YWJpbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl90YWJpbmRleDtcbiAgfVxuXG4gIEBJbnB1dCgpIHN0YXJ0RGF0ZTogRGF0ZTtcblxuICBASW5wdXQoKSBjbGVhcmFibGUgPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdkYXRlUGlja2VyJykgZGF0ZVBpY2tlcjogTWF0RGF0ZXBpY2tlcjxNb21lbnQ+O1xuXG4gIEBWaWV3Q2hpbGRyZW4oJ21hdElucHV0JykgbWF0SW5wdXRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZj47XG5cbiAgZ2V0IHZhbHVlKCk6IGFueSB7XG4gICAgcmV0dXJuIHRvRGF0ZUlTT1N0cmluZyh0aGlzLl92YWx1ZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBkYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8TW9tZW50PixcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGtleWJvYXJkOiBLZXlib2FyZCxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGZvcm1Hcm91cERpcjogRm9ybUdyb3VwRGlyZWN0aXZlLFxuICApIHtcbiAgICAvLyBXb3JrYXJvdW5kIGJlY2F1c2UgaW9uLWRhdGV0aW1lIGhhcyBpc3N1ZSAoZG8gbm90IHJldHVybmVkIGEgSVNPIGRhdGUpXG4gICAgdGhpcy5tb2JpbGUgPSBwbGF0Zm9ybS5pcygnbW9iaWxlJyk7XG4gICAgdGhpcy5rZXlib2FyZEhpZGVEZWxheSA9IHRoaXMubW9iaWxlICYmIEtFWUJPQVJEX0hJREVfREVMQVlfTVMgfHwgMDtcblxuICAgIHRoaXMubG9jYWxlID0gKHRyYW5zbGF0ZS5jdXJyZW50TGFuZyB8fCB0cmFuc2xhdGUuZGVmYXVsdExhbmcpLnN1YnN0cigwLCAyKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuXG4gICAgdGhpcy5mb3JtQ29udHJvbCA9IHRoaXMuZm9ybUNvbnRyb2wgfHwgdGhpcy5mb3JtQ29udHJvbE5hbWUgJiYgdGhpcy5mb3JtR3JvdXBEaXIgJiYgdGhpcy5mb3JtR3JvdXBEaXIuZm9ybS5nZXQodGhpcy5mb3JtQ29udHJvbE5hbWUpIGFzIEZvcm1Db250cm9sO1xuICAgIGlmICghdGhpcy5mb3JtQ29udHJvbCkgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIG1hbmRhdG9yeSBhdHRyaWJ1dGUgXFwnZm9ybUNvbnRyb2xcXCcgb3IgXFwnZm9ybUNvbnRyb2xOYW1lXFwnIGluIDxtYXQtZGF0ZS1maWVsZD4uJyk7XG5cbiAgICB0aGlzLnJlcXVpcmVkID0gdG9Cb29sZWFuKHRoaXMucmVxdWlyZWQsIHRoaXMuZm9ybUNvbnRyb2wudmFsaWRhdG9yID09PSBWYWxpZGF0b3JzLnJlcXVpcmVkKTtcblxuICAgIC8vIFJlZGlyZWN0IGVycm9ycyBmcm9tIG1haW4gY29udHJvbCwgaW50byBkYXkgc3ViIGNvbnRyb2xcbiAgICBjb25zdCAkZXJyb3IgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFZhbGlkYXRpb25FcnJvcnM+KG51bGwpO1xuICAgIHRoaXMuZGF5Q29udHJvbCA9IHRoaXMuZm9ybUJ1aWxkZXIuY29udHJvbChudWxsLCAoKSA9PiAkZXJyb3IuZ2V0VmFsdWUoKSk7XG5cbiAgICAvLyBBZGQgY3VzdG9tICd2YWxpZERhdGUnIHZhbGlkYXRvclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyh0aGlzLnJlcXVpcmVkID8gW1ZhbGlkYXRvcnMucmVxdWlyZWQsIFNoYXJlZFZhbGlkYXRvcnMudmFsaWREYXRlXSA6IFNoYXJlZFZhbGlkYXRvcnMudmFsaWREYXRlKTtcblxuICAgIC8vIEdldCBwYXR0ZXJucyB0byBkaXNwbGF5IGRhdGVcbiAgICB0aGlzLnVwZGF0ZVBhdHRlcm4odGhpcy50cmFuc2xhdGUuaW5zdGFudCgnQ09NTU9OLkRBVEVfUEFUVEVSTicpKTtcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0KCdDT01NT04uREFURV9QQVRURVJOJylcbiAgICAgICAgLnN1YnNjcmliZSgocGF0dGVybikgPT4gdGhpcy51cGRhdGVQYXR0ZXJuKHBhdHRlcm4pKVxuICAgICk7XG5cbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5kYXlDb250cm9sLnZhbHVlQ2hhbmdlc1xuICAgICAgIC5zdWJzY3JpYmUoKHZhbHVlKSA9PiB0aGlzLm9uRm9ybUNoYW5nZSh2YWx1ZSkpKTtcblxuICAgIC8vIExpc3RlbiBzdGF0dXMgY2hhbmdlcyBvdXRzaWRlIHRoZSBjb21wb25lbnQgKGUuZy4gd2hlbiBzZXRFcnJvcnMoKSBpcyBjYWxsaW5nIG9uIHRoZSBmb3JtQ29udHJvbClcbiAgICB0aGlzLl9zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zdGF0dXNDaGFuZ2VzXG4gICAgICAgIC5waXBlKGZpbHRlcigoKSA9PiAhdGhpcy5yZWFkb25seSAmJiAhdGhpcy53cml0aW5nICYmICF0aGlzLmRpc2FibGluZykpIC8vIFNraXBcbiAgICAgICAgLnN1YnNjcmliZSgoc3RhdHVzKSA9PiB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA9PT0gJ0lOVkFMSUQnKSB7XG4gICAgICAgICAgICAkZXJyb3IubmV4dCh0aGlzLmZvcm1Db250cm9sLmVycm9ycyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYgKHN0YXR1cyA9PT0gJ1ZBTElEJykge1xuICAgICAgICAgICAgJGVycm9yLm5leHQobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZGF5Q29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHtvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICAgIH0pKTtcblxuICAgIHRoaXMudXBkYXRlVGFiSW5kZXgoKTtcblxuICAgIHRoaXMud3JpdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMud3JpdGluZykgcmV0dXJuO1xuXG4gICAgLy8gY29uc29sZS5kZWJ1ZygnW21hdC1kYXRlXSB3cml0ZVZhbHVlOicsIG9iaik7XG5cbiAgICBpZiAoaXNOaWxPckJsYW5rKG9iaikpIHtcbiAgICAgIHRoaXMud3JpdGluZyA9IHRydWU7XG4gICAgICB0aGlzLmRheUNvbnRyb2wucGF0Y2hWYWx1ZShudWxsLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgICAgdGhpcy5fdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICBpZiAodGhpcy5mb3JtQ29udHJvbC52YWx1ZSkge1xuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUobnVsbCwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayhudWxsKTtcbiAgICAgIH1cbiAgICAgIHRoaXMud3JpdGluZyA9IGZhbHNlO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2Uob2JqLCBEQVRFX0lTT19QQVRURVJOKTtcbiAgICBpZiAoIXRoaXMuX3ZhbHVlKSB7IC8vIGludmFsaWQgZGF0ZVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMud3JpdGluZyA9IHRydWU7XG5cbiAgICAvLyBTZXQgZm9ybSB2YWx1ZVxuICAgIHRoaXMuZGF5Q29udHJvbC5wYXRjaFZhbHVlKHRoaXMuZGF0ZUFkYXB0ZXIuZm9ybWF0KHRoaXMuX3ZhbHVlLmNsb25lKCkuc3RhcnRPZignZGF5JyksIHRoaXMuZGF5UGF0dGVybiksIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgdGhpcy53cml0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHJlZ2lzdGVyT25Ub3VjaGVkKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjayA9IGZuO1xuICB9XG5cbiAgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuZGlzYWJsaW5nKSByZXR1cm47XG5cbiAgICB0aGlzLmRpc2FibGluZyA9IHRydWU7XG4gICAgdGhpcy5kaXNhYmxlZCA9IGlzRGlzYWJsZWQ7XG4gICAgaWYgKGlzRGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuZGF5Q29udHJvbC5kaXNhYmxlKHtvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRheUNvbnRyb2wuZW5hYmxlKHtvbmx5U2VsZjogdHJ1ZSwgZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIH1cbiAgICB0aGlzLmRpc2FibGluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uRGF0ZVBpY2tlckNoYW5nZShldmVudDogTWF0RGF0ZXBpY2tlcklucHV0RXZlbnQ8TW9tZW50Pik6IHZvaWQge1xuICAgIGlmICh0aGlzLndyaXRpbmcgfHwgIShldmVudCAmJiBldmVudC52YWx1ZSkpIHJldHVybjsgLy8gU2tpcCBpZiBjYWxsIGJ5IHNlbGZcbiAgICB0aGlzLndyaXRpbmcgPSB0cnVlO1xuXG4gICAgbGV0IGRhdGUgPSBldmVudC52YWx1ZTtcbiAgICBkYXRlID0gdHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnICYmIHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2UoZGF0ZSwgREFURV9JU09fUEFUVEVSTikgfHwgZGF0ZTtcbiAgICBsZXQgZGF5O1xuXG4gICAgLy8gYXZvaWQgdG8gaGF2ZSBUWiBvZmZzZXRcbiAgICBkYXRlID0gZGF0ZSAmJiBkYXRlLnV0Yyh0cnVlKS5ob3VyKDApLm1pbnV0ZSgwKS5zZWNvbmRzKDApLm1pbGxpc2Vjb25kKDApO1xuICAgIGRheSA9IGRhdGUgJiYgZGF0ZS5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpO1xuXG4gICAgLy8gdXBkYXRlIGRheSB2YWx1ZVxuICAgIHRoaXMuZGF5Q29udHJvbC5zZXRWYWx1ZShkYXRlICYmIHRoaXMuZGF0ZUFkYXB0ZXIuZm9ybWF0KGRheSwgdGhpcy5kYXlQYXR0ZXJuKSwge2VtaXRFdmVudDogZmFsc2V9KTtcblxuICAgIC8vIEdldCB0aGUgbW9kZWwgdmFsdWVcbiAgICBjb25zdCBkYXRlU3RyID0gZGF0ZSAmJiB0aGlzLmRhdGVBZGFwdGVyLmZvcm1hdChkYXRlLCBEQVRFX0lTT19QQVRURVJOKS5yZXBsYWNlKCcrMDA6MDAnLCAnWicpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShkYXRlU3RyLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIHRoaXMud3JpdGluZyA9IGZhbHNlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG5cbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrKGRhdGVTdHIpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVQYXR0ZXJuKHBhdHRlcm46IHN0cmluZykge1xuICAgIHBhdHRlcm4gPSBwYXR0ZXJuICE9PSAnQ09NTU9OLkRBVEVfUEFUVEVSTicgPyBwYXR0ZXJuIDogJ0wnO1xuICAgIGlmICh0aGlzLmRpc3BsYXlQYXR0ZXJuICE9PSBwYXR0ZXJuKSB7XG4gICAgICB0aGlzLmRpc3BsYXlQYXR0ZXJuID0gcGF0dGVybjtcbiAgICAgIHRoaXMuZGF5UGF0dGVybiA9IHBhdHRlcm47XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25Gb3JtQ2hhbmdlKGRheVZhbHVlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMud3JpdGluZykgcmV0dXJuOyAvLyBTa2lwIGlmIGNhbGwgYnkgc2VsZlxuICAgIHRoaXMud3JpdGluZyA9IHRydWU7XG5cbiAgICAvLyBNYWtlIHRvIHJlbW92ZSBwbGFjZWhvbGRlciBjaGFyc1xuICAgIHdoaWxlIChkYXlWYWx1ZSAmJiBkYXlWYWx1ZS5pbmRleE9mKHRoaXMucGxhY2Vob2xkZXJDaGFyKSAhPT0gLTEpIHtcbiAgICAgIGRheVZhbHVlID0gZGF5VmFsdWUucmVwbGFjZSh0aGlzLnBsYWNlaG9sZGVyQ2hhciwgJycpO1xuICAgIH1cblxuICAgIGxldCBkYXRlOiBNb21lbnQ7XG5cbiAgICAvLyBQYXJzZSBkYXkgc3RyaW5nXG4gICAgZGF0ZSA9IGRheVZhbHVlICYmIHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2UoZGF5VmFsdWUsIHRoaXMuZGF5UGF0dGVybikgfHwgbnVsbDtcblxuICAgIC8vIFJlc2V0IHRpbWVcbiAgICBkYXRlID0gZGF0ZSAmJiBkYXRlLnV0Yyh0cnVlKS5ob3VyKDApLm1pbnV0ZSgwKS5zZWNvbmRzKDApLm1pbGxpc2Vjb25kKDApO1xuXG4gICAgLy8gdXBkYXRlIGRhdGUgcGlja2VyXG4gICAgdGhpcy5fdmFsdWUgPSBkYXRlICYmIHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2UoZGF0ZS5jbG9uZSgpLCBEQVRFX0lTT19QQVRURVJOKTtcblxuICAgIC8vIEdldCB0aGUgbW9kZWwgdmFsdWVcbiAgICBjb25zdCBkYXRlU3RyID0gZGF0ZSAmJiBkYXRlLmlzVmFsaWQoKSAmJiB0aGlzLmRhdGVBZGFwdGVyLmZvcm1hdChkYXRlLCBEQVRFX0lTT19QQVRURVJOKS5yZXBsYWNlKCcrMDA6MDAnLCAnWicpIHx8IGRhdGU7XG4gICAgLy9jb25zb2xlLmRlYnVnKFwiW21hdC1kYXRlLXRpbWVdIFNldHRpbmcgZGF0ZTogXCIsIGRhdGVTdHIpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShkYXRlU3RyLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIC8vdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgdGhpcy53cml0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcblxuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soZGF0ZVN0cik7XG4gIH1cblxuXG5cbiAgY2hlY2tJZlRvdWNoZWQoKSB7XG4gICAgaWYgKHRoaXMuZGF5Q29udHJvbC50b3VjaGVkKSB7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2soKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBvcGVuRGF0ZVBpY2tlcklmTW9iaWxlKGV2ZW50OiBVSUV2ZW50LCBkYXRlUGlja2VyPzogTWF0RGF0ZXBpY2tlcjxhbnk+KSB7XG4gICAgaWYgKCF0aGlzLm1vYmlsZSB8fCBldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG5cbiAgICB0aGlzLnByZXZlbnRFdmVudChldmVudCk7XG5cbiAgICAvLyBNYWtlIHN1cmUgdGhlIGtleWJvYXJkIGlzIGNsb3NlZFxuICAgIGF3YWl0IHRoaXMud2FpdEtleWJvYXJkSGlkZShmYWxzZSk7XG5cbiAgICAvLyBPcGVuIHRoZSBwaWNrZXJcbiAgICB0aGlzLm9wZW5EYXRlUGlja2VyKG51bGwsIGRhdGVQaWNrZXIpO1xuICB9XG5cbiAgcHVibGljIG9wZW5EYXRlUGlja2VyKGV2ZW50PzogVUlFdmVudCwgZGF0ZVBpY2tlcj86IE1hdERhdGVwaWNrZXI8YW55Pikge1xuICAgIGRhdGVQaWNrZXIgPSBkYXRlUGlja2VyIHx8IHRoaXMuZGF0ZVBpY2tlcjtcbiAgICBpZiAoZGF0ZVBpY2tlcikge1xuXG4gICAgICBpZiAoZXZlbnQpIHRoaXMucHJldmVudEV2ZW50KGV2ZW50KTtcblxuICAgICAgaWYgKCFkYXRlUGlja2VyLm9wZW5lZCkge1xuICAgICAgICBkYXRlUGlja2VyLm9wZW4oKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcmV2ZW50RXZlbnQoZXZlbnQ6IFVJRXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50KSByZXR1cm47XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoZXZlbnQuc3RvcFByb3BhZ2F0aW9uKSBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICBldmVudC5yZXR1cm5WYWx1ZSA9IGZhbHNlO1xuICB9XG5cbiAgZm9jdXMoKSB7XG4gICAgaWYgKCF0aGlzLm1hdElucHV0cy5sZW5ndGgpIHJldHVybjtcblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgZWxlbWVudFJlZiA9IHRoaXMubWF0SW5wdXRzWzBdOyAvLyBnZXQgdGhlIGZpcnN0IGVsZW1lbnRcbiAgICAgIGlmIChpc0ZvY3VzYWJsZUVsZW1lbnQoZWxlbWVudFJlZikpIHtcbiAgICAgICAgZWxlbWVudFJlZi5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyogLS0gcHJvdGVjdGVkIG1ldGhvZCAtLSAqL1xuXG4gIHByb3RlY3RlZCBhc3luYyB3YWl0S2V5Ym9hcmRIaWRlKHdhaXRLZXlib2FyZERlbGF5OiBib29sZWFuKSB7XG5cbiAgICBpZiAoIXRoaXMua2V5Ym9hcmQgfHwgIXRoaXMua2V5Ym9hcmQuaXNWaXNpYmxlKSByZXR1cm47IC8vIG9rLCBhbHJlYWR5IGhpZGRlbiAob3Igbm90IGFjY2Vzc2libGUpXG5cbiAgICAvLyBGb3JjZSBrZXlib2FyZCB0byBiZSBoaWRlXG4gICAgdGhpcy5rZXlib2FyZC5oaWRlKCk7XG5cbiAgICAvLyBXYWl0IGhpZGUgb2NjdXJcbiAgICBhd2FpdCB0aGlzLmtleWJvYXJkLm9uS2V5Ym9hcmRIaWRlKCkucGlwZShmaXJzdCgpKS50b1Byb21pc2UoKTtcblxuICAgIC8vIFdhaXQgYW4gYWRkaXRpb25hbCBkZWxheSBpZiBuZWVkIChkZXBlbmRpbmcgb24gdGhlIE9TKVxuICAgIGlmICh0aGlzLmtleWJvYXJkSGlkZURlbGF5ID4gMCAmJiB3YWl0S2V5Ym9hcmREZWxheSkge1xuICAgICAgYXdhaXQgc2xlZXAodGhpcy5rZXlib2FyZEhpZGVEZWxheSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHVwZGF0ZVRhYkluZGV4KCkge1xuICAgIGlmIChpc05pbCh0aGlzLl90YWJpbmRleCkgfHwgdGhpcy5fdGFiaW5kZXggPT09IC0xKSByZXR1cm47IC8vIHNraXBcblxuICAgIC8vIEZvY3VzIHRvIGZpcnN0IGlucHV0XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLm1hdElucHV0cy5mb3JFYWNoKChlbGVtZW50UmVmLCBpbmRleCkgPT4ge1xuICAgICAgICBzZXRUYWJJbmRleChlbGVtZW50UmVmLCB0aGlzLl90YWJpbmRleCArIGluZGV4KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuXG4iXX0=
307
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0ZXJpYWwuZGF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvc2hhcmVkL21hdGVyaWFsL2RhdGV0aW1lL21hdGVyaWFsLmRhdGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsS0FBSyxFQUVMLFFBQVEsRUFFUixTQUFTLEVBQ1QsWUFBWSxFQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBR0wsV0FBVyxFQUVYLGtCQUFrQixFQUNsQixpQkFBaUIsRUFFakIsVUFBVSxFQUNYLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFckQsT0FBTyxFQUFDLGdCQUFnQixFQUFFLHdCQUF3QixFQUFFLHNCQUFzQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDbkcsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBZSxXQUFXLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFDdkQsT0FBTyxFQUFDLGVBQWUsRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFHbkQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLHdCQUF3QixDQUFDO0FBQ25ELE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLGlC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QyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFO2dCQUMzQyxXQUFXLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUM7WUFDbEQsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDdEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sWUFBWTtRQUNsQixJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pCLENBQUM7OztZQXJVRixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtnQkFDMUIsMDRHQUFtQztnQkFFbkMsU0FBUyxFQUFFO29CQUNULHNCQUFzQjtpQkFDdkI7Z0JBQ0QsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07O2FBQ2hEOzs7WUE1Q08sUUFBUTtZQXNCUixXQUFXO1lBWFgsZ0JBQWdCO1lBUHRCLFdBQVc7WUFmWCxpQkFBaUI7WUEyQlgsUUFBUSx1QkFzRlgsUUFBUTtZQWhHWCxrQkFBa0IsdUJBaUdmLFFBQVE7Ozt1QkF6Q1YsS0FBSzswQkFDTCxLQUFLOzhCQUNMLEtBQUs7MEJBQ0wsS0FBSzt5QkFDTCxLQUFLO3VCQUNMLEtBQUs7dUJBQ0wsS0FBSztzQkFDTCxLQUFLOzhCQUNMLEtBQUs7d0JBQ0wsS0FBSzt1QkFFTCxLQUFLO3dCQVdMLEtBQUs7d0JBRUwsS0FBSzt5QkFFTCxTQUFTLFNBQUMsWUFBWTt3QkFFdEIsWUFBWSxTQUFDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCwgUHJvdmlkZXIsXG4gIFF1ZXJ5TGlzdCxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW5cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1BsYXRmb3JtfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQge1xuICBBYnN0cmFjdENvbnRyb2wsXG4gIENvbnRyb2xWYWx1ZUFjY2Vzc29yLFxuICBGb3JtQnVpbGRlcixcbiAgRm9ybUNvbnRyb2wsXG4gIEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgTkdfVkFMVUVfQUNDRVNTT1IsXG4gIFZhbGlkYXRpb25FcnJvcnMsXG4gIFZhbGlkYXRvcnNcbn0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7TW9tZW50fSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtEQVRFX0lTT19QQVRURVJOLCBERUZBVUxUX1BMQUNFSE9MREVSX0NIQVIsIEtFWUJPQVJEX0hJREVfREVMQVlfTVN9IGZyb20gJy4uLy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1NoYXJlZFZhbGlkYXRvcnN9IGZyb20gJy4uLy4uL3ZhbGlkYXRvci92YWxpZGF0b3JzJztcbmltcG9ydCB7c2xlZXAsIGlzTmlsLCBpc05pbE9yQmxhbmssIHRvQm9vbGVhbn0gZnJvbSAnLi4vLi4vZnVuY3Rpb25zJztcbmltcG9ydCB7S2V5Ym9hcmR9IGZyb20gJ0Bpb25pYy1uYXRpdmUva2V5Ym9hcmQvbmd4JztcbmltcG9ydCB7ZmlsdGVyLCBmaXJzdH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtJbnB1dEVsZW1lbnQsIHNldFRhYkluZGV4fSBmcm9tICcuLi8uLi9pbnB1dHMnO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0Zsb2F0TGFiZWxUeXBlfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9mb3JtLWZpZWxkJztcbmltcG9ydCB7TWF0RGF0ZXBpY2tlciwgTWF0RGF0ZXBpY2tlcklucHV0RXZlbnR9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RhdGVwaWNrZXInO1xuaW1wb3J0IHtEYXRlQWRhcHRlcn0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvY29yZSc7XG5pbXBvcnQge2lzRm9jdXNhYmxlRWxlbWVudH0gZnJvbSAnLi4vLi4vZm9jdXNhYmxlJztcbmltcG9ydCB7dG9EYXRlSVNPU3RyaW5nfSBmcm9tICcuLi8uLi9kYXRlcyc7XG5cbmNvbnN0IERFRkFVTFRfVkFMVUVfQUNDRVNTT1I6IFByb3ZpZGVyID0ge1xuICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWF0RGF0ZSksXG4gIG11bHRpOiB0cnVlXG59O1xuXG5jb25zdCBEQVlfTUFTSyA9IFsvXFxkLywgL1xcZC8sICcvJywgL1xcZC8sIC9cXGQvLCAnLycsIC9cXGQvLCAvXFxkLywgL1xcZC8sIC9cXGQvXTtcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdtYXQtZGF0ZS1maWVsZCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tYXRlcmlhbC5kYXRlLmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tYXRlcmlhbC5kYXRlLnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAgREVGQVVMVF9WQUxVRV9BQ0NFU1NPUixcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTWF0RGF0ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciwgSW5wdXRFbGVtZW50IHtcbiAgcHJpdmF0ZSBfb25DaGFuZ2VDYWxsYmFjazogKF86IGFueSkgPT4gdm9pZCA9IG5vb3A7XG4gIHByaXZhdGUgX29uVG91Y2hlZENhbGxiYWNrOiAoKSA9PiB2b2lkID0gbm9vcDtcbiAgcHJpdmF0ZSBfc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcm90ZWN0ZWQgd3JpdGluZyA9IHRydWU7XG4gIHByb3RlY3RlZCBkaXNhYmxpbmcgPSBmYWxzZTtcbiAgcHJvdGVjdGVkIF90YWJpbmRleDogbnVtYmVyO1xuICBwcm90ZWN0ZWQga2V5Ym9hcmRIaWRlRGVsYXk6IG51bWJlcjtcblxuICBtb2JpbGU6IGJvb2xlYW47XG4gIGRheUNvbnRyb2w6IEFic3RyYWN0Q29udHJvbDtcbiAgZGlzcGxheVBhdHRlcm46IHN0cmluZztcbiAgZGF5UGF0dGVybjogc3RyaW5nO1xuICBfdmFsdWU6IE1vbWVudDtcbiAgbG9jYWxlOiBzdHJpbmc7XG4gIGRheU1hc2sgPSBEQVlfTUFTSztcblxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuICBASW5wdXQoKSBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2w7XG4gIEBJbnB1dCgpIGZvcm1Db250cm9sTmFtZTogc3RyaW5nO1xuICBASW5wdXQoKSBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBASW5wdXQoKSBmbG9hdExhYmVsOiBGbG9hdExhYmVsVHlwZSA9ICdhdXRvJztcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcbiAgQElucHV0KCkgcmVxdWlyZWQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGNvbXBhY3QgPSBmYWxzZTtcbiAgQElucHV0KCkgcGxhY2Vob2xkZXJDaGFyOiBzdHJpbmcgPSBERUZBVUxUX1BMQUNFSE9MREVSX0NIQVI7XG4gIEBJbnB1dCgpIGF1dG9mb2N1cyA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpIHNldCB0YWJpbmRleCh2YWx1ZTogbnVtYmVyKSB7XG4gICAgaWYgKHRoaXMuX3RhYmluZGV4ICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5fdGFiaW5kZXggPSB2YWx1ZTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy51cGRhdGVUYWJJbmRleCgpKTtcbiAgICB9XG4gIH1cblxuICBnZXQgdGFiaW5kZXgoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fdGFiaW5kZXg7XG4gIH1cblxuICBASW5wdXQoKSBzdGFydERhdGU6IERhdGU7XG5cbiAgQElucHV0KCkgY2xlYXJhYmxlID0gZmFsc2U7XG5cbiAgQFZpZXdDaGlsZCgnZGF0ZVBpY2tlcicpIGRhdGVQaWNrZXI6IE1hdERhdGVwaWNrZXI8TW9tZW50PjtcblxuICBAVmlld0NoaWxkcmVuKCdtYXRJbnB1dCcpIG1hdElucHV0czogUXVlcnlMaXN0PEVsZW1lbnRSZWY+O1xuXG4gIGdldCB2YWx1ZSgpOiBhbnkge1xuICAgIHJldHVybiB0b0RhdGVJU09TdHJpbmcodGhpcy5fdmFsdWUpO1xuICB9XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcGxhdGZvcm06IFBsYXRmb3JtLFxuICAgIHByaXZhdGUgZGF0ZUFkYXB0ZXI6IERhdGVBZGFwdGVyPE1vbWVudD4sXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmb3JtQnVpbGRlcjogRm9ybUJ1aWxkZXIsXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBrZXlib2FyZDogS2V5Ym9hcmQsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtR3JvdXBEaXI6IEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgKSB7XG4gICAgLy8gV29ya2Fyb3VuZCBiZWNhdXNlIGlvbi1kYXRldGltZSBoYXMgaXNzdWUgKGRvIG5vdCByZXR1cm5lZCBhIElTTyBkYXRlKVxuICAgIHRoaXMubW9iaWxlID0gcGxhdGZvcm0uaXMoJ21vYmlsZScpO1xuICAgIHRoaXMua2V5Ym9hcmRIaWRlRGVsYXkgPSB0aGlzLm1vYmlsZSAmJiBLRVlCT0FSRF9ISURFX0RFTEFZX01TIHx8IDA7XG5cbiAgICB0aGlzLmxvY2FsZSA9ICh0cmFuc2xhdGUuY3VycmVudExhbmcgfHwgdHJhbnNsYXRlLmRlZmF1bHRMYW5nKS5zdWJzdHIoMCwgMik7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcblxuICAgIHRoaXMuZm9ybUNvbnRyb2wgPSB0aGlzLmZvcm1Db250cm9sIHx8IHRoaXMuZm9ybUNvbnRyb2xOYW1lICYmIHRoaXMuZm9ybUdyb3VwRGlyICYmIHRoaXMuZm9ybUdyb3VwRGlyLmZvcm0uZ2V0KHRoaXMuZm9ybUNvbnRyb2xOYW1lKSBhcyBGb3JtQ29udHJvbDtcbiAgICBpZiAoIXRoaXMuZm9ybUNvbnRyb2wpIHRocm93IG5ldyBFcnJvcignTWlzc2luZyBtYW5kYXRvcnkgYXR0cmlidXRlIFxcJ2Zvcm1Db250cm9sXFwnIG9yIFxcJ2Zvcm1Db250cm9sTmFtZVxcJyBpbiA8bWF0LWRhdGUtZmllbGQ+LicpO1xuXG4gICAgdGhpcy5yZXF1aXJlZCA9IHRvQm9vbGVhbih0aGlzLnJlcXVpcmVkLCB0aGlzLmZvcm1Db250cm9sLnZhbGlkYXRvciA9PT0gVmFsaWRhdG9ycy5yZXF1aXJlZCk7XG5cbiAgICAvLyBSZWRpcmVjdCBlcnJvcnMgZnJvbSBtYWluIGNvbnRyb2wsIGludG8gZGF5IHN1YiBjb250cm9sXG4gICAgY29uc3QgJGVycm9yID0gbmV3IEJlaGF2aW9yU3ViamVjdDxWYWxpZGF0aW9uRXJyb3JzPihudWxsKTtcbiAgICB0aGlzLmRheUNvbnRyb2wgPSB0aGlzLmZvcm1CdWlsZGVyLmNvbnRyb2wobnVsbCwgKCkgPT4gJGVycm9yLmdldFZhbHVlKCkpO1xuXG4gICAgLy8gQWRkIGN1c3RvbSAndmFsaWREYXRlJyB2YWxpZGF0b3JcbiAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbGlkYXRvcnModGhpcy5yZXF1aXJlZCA/IFtWYWxpZGF0b3JzLnJlcXVpcmVkLCBTaGFyZWRWYWxpZGF0b3JzLnZhbGlkRGF0ZV0gOiBTaGFyZWRWYWxpZGF0b3JzLnZhbGlkRGF0ZSk7XG5cbiAgICAvLyBHZXQgcGF0dGVybnMgdG8gZGlzcGxheSBkYXRlXG4gICAgdGhpcy51cGRhdGVQYXR0ZXJuKHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ0NPTU1PTi5EQVRFX1BBVFRFUk4nKSk7XG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMudHJhbnNsYXRlLmdldCgnQ09NTU9OLkRBVEVfUEFUVEVSTicpXG4gICAgICAgIC5zdWJzY3JpYmUoKHBhdHRlcm4pID0+IHRoaXMudXBkYXRlUGF0dGVybihwYXR0ZXJuKSlcbiAgICApO1xuXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuZGF5Q29udHJvbC52YWx1ZUNoYW5nZXNcbiAgICAgICAuc3Vic2NyaWJlKCh2YWx1ZSkgPT4gdGhpcy5vbkZvcm1DaGFuZ2UodmFsdWUpKSk7XG5cbiAgICAvLyBMaXN0ZW4gc3RhdHVzIGNoYW5nZXMgb3V0c2lkZSB0aGUgY29tcG9uZW50IChlLmcuIHdoZW4gc2V0RXJyb3JzKCkgaXMgY2FsbGluZyBvbiB0aGUgZm9ybUNvbnRyb2wpXG4gICAgdGhpcy5fc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgICAucGlwZShmaWx0ZXIoKCkgPT4gIXRoaXMucmVhZG9ubHkgJiYgIXRoaXMud3JpdGluZyAmJiAhdGhpcy5kaXNhYmxpbmcpKSAvLyBTa2lwXG4gICAgICAgIC5zdWJzY3JpYmUoKHN0YXR1cykgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdJTlZBTElEJykge1xuICAgICAgICAgICAgJGVycm9yLm5leHQodGhpcy5mb3JtQ29udHJvbC5lcnJvcnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmIChzdGF0dXMgPT09ICdWQUxJRCcpIHtcbiAgICAgICAgICAgICRlcnJvci5uZXh0KG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmRheUNvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7b25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9KSk7XG5cbiAgICB0aGlzLnVwZGF0ZVRhYkluZGV4KCk7XG5cbiAgICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgd3JpdGVWYWx1ZShvYmo6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLndyaXRpbmcpIHJldHVybjtcblxuICAgIC8vIGNvbnNvbGUuZGVidWcoJ1ttYXQtZGF0ZV0gd3JpdGVWYWx1ZTonLCBvYmopO1xuXG4gICAgaWYgKGlzTmlsT3JCbGFuayhvYmopKSB7XG4gICAgICB0aGlzLndyaXRpbmcgPSB0cnVlO1xuICAgICAgdGhpcy5kYXlDb250cm9sLnBhdGNoVmFsdWUobnVsbCwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgaWYgKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgdGhpcy5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKG51bGwsIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG4gICAgICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2sobnVsbCk7XG4gICAgICB9XG4gICAgICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fdmFsdWUgPSB0aGlzLmRhdGVBZGFwdGVyLnBhcnNlKG9iaiwgREFURV9JU09fUEFUVEVSTik7XG4gICAgaWYgKCF0aGlzLl92YWx1ZSkgeyAvLyBpbnZhbGlkIGRhdGVcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLndyaXRpbmcgPSB0cnVlO1xuXG4gICAgLy8gU2V0IGZvcm0gdmFsdWVcbiAgICB0aGlzLmRheUNvbnRyb2wucGF0Y2hWYWx1ZSh0aGlzLmRhdGVBZGFwdGVyLmZvcm1hdCh0aGlzLl92YWx1ZS5jbG9uZSgpLnN0YXJ0T2YoJ2RheScpLCB0aGlzLmRheVBhdHRlcm4pLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIHRoaXMud3JpdGluZyA9IGZhbHNlO1xuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICByZWdpc3Rlck9uQ2hhbmdlKGZuOiBhbnkpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZUNhbGxiYWNrID0gZm47XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5fb25Ub3VjaGVkQ2FsbGJhY2sgPSBmbjtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGluZykgcmV0dXJuO1xuXG4gICAgdGhpcy5kaXNhYmxpbmcgPSB0cnVlO1xuICAgIHRoaXMuZGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICAgIGlmIChpc0Rpc2FibGVkKSB7XG4gICAgICB0aGlzLmRheUNvbnRyb2wuZGlzYWJsZSh7b25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kYXlDb250cm9sLmVuYWJsZSh7b25seVNlbGY6IHRydWUsIGVtaXRFdmVudDogZmFsc2V9KTtcbiAgICB9XG4gICAgdGhpcy5kaXNhYmxpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBvbkRhdGVQaWNrZXJDaGFuZ2UoZXZlbnQ6IE1hdERhdGVwaWNrZXJJbnB1dEV2ZW50PE1vbWVudD4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy53cml0aW5nIHx8ICEoZXZlbnQgJiYgZXZlbnQudmFsdWUpKSByZXR1cm47IC8vIFNraXAgaWYgY2FsbCBieSBzZWxmXG4gICAgdGhpcy53cml0aW5nID0gdHJ1ZTtcblxuICAgIGxldCBkYXRlID0gZXZlbnQudmFsdWU7XG4gICAgZGF0ZSA9IHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJyAmJiB0aGlzLmRhdGVBZGFwdGVyLnBhcnNlKGRhdGUsIERBVEVfSVNPX1BBVFRFUk4pIHx8IGRhdGU7XG4gICAgbGV0IGRheTtcblxuICAgIC8vIGF2b2lkIHRvIGhhdmUgVFogb2Zmc2V0XG4gICAgZGF0ZSA9IGRhdGUgJiYgZGF0ZS51dGModHJ1ZSkuaG91cigwKS5taW51dGUoMCkuc2Vjb25kcygwKS5taWxsaXNlY29uZCgwKTtcbiAgICBkYXkgPSBkYXRlICYmIGRhdGUuY2xvbmUoKS5zdGFydE9mKCdkYXknKTtcblxuICAgIC8vIHVwZGF0ZSBkYXkgdmFsdWVcbiAgICB0aGlzLmRheUNvbnRyb2wuc2V0VmFsdWUoZGF0ZSAmJiB0aGlzLmRhdGVBZGFwdGVyLmZvcm1hdChkYXksIHRoaXMuZGF5UGF0dGVybiksIHtlbWl0RXZlbnQ6IGZhbHNlfSk7XG5cbiAgICAvLyBHZXQgdGhlIG1vZGVsIHZhbHVlXG4gICAgY29uc3QgZGF0ZVN0ciA9IGRhdGUgJiYgdGhpcy5kYXRlQWRhcHRlci5mb3JtYXQoZGF0ZSwgREFURV9JU09fUEFUVEVSTikucmVwbGFjZSgnKzAwOjAwJywgJ1onKTtcbiAgICB0aGlzLmZvcm1Db250cm9sLnBhdGNoVmFsdWUoZGF0ZVN0ciwge2VtaXRFdmVudDogZmFsc2V9KTtcbiAgICB0aGlzLndyaXRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgdGhpcy5fb25DaGFuZ2VDYWxsYmFjayhkYXRlU3RyKTtcbiAgfVxuXG5cbiAgYXN5bmMgb3BlbkRhdGVQaWNrZXJJZk1vYmlsZShldmVudDogVUlFdmVudCwgZGF0ZVBpY2tlcj86IE1hdERhdGVwaWNrZXI8YW55Pikge1xuICAgIGlmICghdGhpcy5tb2JpbGUgfHwgZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuXG4gICAgdGhpcy5wcmV2ZW50RXZlbnQoZXZlbnQpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBrZXlib2FyZCBpcyBjbG9zZWRcbiAgICBhd2FpdCB0aGlzLndhaXRLZXlib2FyZEhpZGUoZmFsc2UpO1xuXG4gICAgLy8gT3BlbiB0aGUgcGlja2VyXG4gICAgdGhpcy5vcGVuRGF0ZVBpY2tlcihudWxsLCBkYXRlUGlja2VyKTtcbiAgfVxuXG4gIHB1YmxpYyBvcGVuRGF0ZVBpY2tlcihldmVudD86IFVJRXZlbnQsIGRhdGVQaWNrZXI/OiBNYXREYXRlcGlja2VyPGFueT4pIHtcbiAgICBkYXRlUGlja2VyID0gZGF0ZVBpY2tlciB8fCB0aGlzLmRhdGVQaWNrZXI7XG4gICAgaWYgKGRhdGVQaWNrZXIpIHtcblxuICAgICAgaWYgKGV2ZW50KSB0aGlzLnByZXZlbnRFdmVudChldmVudCk7XG5cbiAgICAgIGlmICghZGF0ZVBpY2tlci5vcGVuZWQpIHtcbiAgICAgICAgZGF0ZVBpY2tlci5vcGVuKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJldmVudEV2ZW50KGV2ZW50OiBVSUV2ZW50KSB7XG4gICAgaWYgKCFldmVudCkgcmV0dXJuO1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgfVxuXG4gIGZvY3VzKCkge1xuICAgIGlmICghdGhpcy5tYXRJbnB1dHMubGVuZ3RoKSByZXR1cm47XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnRSZWYgPSB0aGlzLm1hdElucHV0c1swXTsgLy8gZ2V0IHRoZSBmaXJzdCBlbGVtZW50XG4gICAgICBpZiAoaXNGb2N1c2FibGVFbGVtZW50KGVsZW1lbnRSZWYpKSB7XG4gICAgICAgIGVsZW1lbnRSZWYuZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qIC0tIHByaXZhdGUgbWV0aG9kIC0tICovXG5cbiAgcHJpdmF0ZSB1cGRhdGVQYXR0ZXJuKHBhdHRlcm46IHN0cmluZykge1xuICAgIHBhdHRlcm4gPSBwYXR0ZXJuICE9PSAnQ09NTU9OLkRBVEVfUEFUVEVSTicgPyBwYXR0ZXJuIDogJ0wnO1xuICAgIGlmICh0aGlzLmRpc3BsYXlQYXR0ZXJuICE9PSBwYXR0ZXJuKSB7XG4gICAgICB0aGlzLmRpc3BsYXlQYXR0ZXJuID0gcGF0dGVybjtcbiAgICAgIHRoaXMuZGF5UGF0dGVybiA9IHBhdHRlcm47XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgb25Gb3JtQ2hhbmdlKGRheVZhbHVlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMud3JpdGluZykgcmV0dXJuOyAvLyBTa2lwIGlmIGNhbGwgYnkgc2VsZlxuICAgIHRoaXMud3JpdGluZyA9IHRydWU7XG5cbiAgICAvLyBNYWtlIHRvIHJlbW92ZSBwbGFjZWhvbGRlciBjaGFyc1xuICAgIHdoaWxlIChkYXlWYWx1ZSAmJiBkYXlWYWx1ZS5pbmRleE9mKHRoaXMucGxhY2Vob2xkZXJDaGFyKSAhPT0gLTEpIHtcbiAgICAgIGRheVZhbHVlID0gZGF5VmFsdWUucmVwbGFjZSh0aGlzLnBsYWNlaG9sZGVyQ2hhciwgJycpO1xuICAgIH1cblxuICAgIGxldCBkYXRlOiBNb21lbnQ7XG5cbiAgICAvLyBQYXJzZSBkYXkgc3RyaW5nXG4gICAgZGF0ZSA9IGRheVZhbHVlICYmIHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2UoZGF5VmFsdWUsIHRoaXMuZGF5UGF0dGVybikgfHwgbnVsbDtcblxuICAgIC8vIFJlc2V0IHRpbWVcbiAgICBkYXRlID0gZGF0ZSAmJiBkYXRlLnV0Yyh0cnVlKS5ob3VyKDApLm1pbnV0ZSgwKS5zZWNvbmRzKDApLm1pbGxpc2Vjb25kKDApO1xuXG4gICAgLy8gdXBkYXRlIGRhdGUgcGlja2VyXG4gICAgdGhpcy5fdmFsdWUgPSBkYXRlICYmIHRoaXMuZGF0ZUFkYXB0ZXIucGFyc2UoZGF0ZS5jbG9uZSgpLCBEQVRFX0lTT19QQVRURVJOKTtcblxuICAgIC8vIEdldCB0aGUgbW9kZWwgdmFsdWVcbiAgICBjb25zdCBkYXRlU3RyID0gZGF0ZSAmJiBkYXRlLmlzVmFsaWQoKSAmJiB0aGlzLmRhdGVBZGFwdGVyLmZvcm1hdChkYXRlLCBEQVRFX0lTT19QQVRURVJOKS5yZXBsYWNlKCcrMDA6MDAnLCAnWicpIHx8IGRhdGU7XG4gICAgLy9jb25zb2xlLmRlYnVnKFwiW21hdC1kYXRlLXRpbWVdIFNldHRpbmcgZGF0ZTogXCIsIGRhdGVTdHIpO1xuICAgIHRoaXMuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZShkYXRlU3RyLCB7ZW1pdEV2ZW50OiBmYWxzZX0pO1xuICAgIC8vdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgdGhpcy53cml0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5tYXJrRm9yQ2hlY2soKTtcblxuICAgIHRoaXMuX29uQ2hhbmdlQ2FsbGJhY2soZGF0ZVN0cik7XG4gIH1cblxuICBjaGVja0lmVG91Y2hlZCgpIHtcbiAgICBpZiAodGhpcy5kYXlDb250cm9sLnRvdWNoZWQpIHtcbiAgICAgIHRoaXMubWFya0ZvckNoZWNrKCk7XG4gICAgICB0aGlzLl9vblRvdWNoZWRDYWxsYmFjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgd2FpdEtleWJvYXJkSGlkZSh3YWl0S2V5Ym9hcmREZWxheTogYm9vbGVhbikge1xuXG4gICAgaWYgKCF0aGlzLmtleWJvYXJkIHx8ICF0aGlzLmtleWJvYXJkLmlzVmlzaWJsZSkgcmV0dXJuOyAvLyBvaywgYWxyZWFkeSBoaWRkZW4gKG9yIG5vdCBhY2Nlc3NpYmxlKVxuXG4gICAgLy8gRm9yY2Uga2V5Ym9hcmQgdG8gYmUgaGlkZVxuICAgIHRoaXMua2V5Ym9hcmQuaGlkZSgpO1xuXG4gICAgLy8gV2FpdCBoaWRlIG9jY3VyXG4gICAgYXdhaXQgdGhpcy5rZXlib2FyZC5vbktleWJvYXJkSGlkZSgpLnBpcGUoZmlyc3QoKSkudG9Qcm9taXNlKCk7XG5cbiAgICAvLyBXYWl0IGFuIGFkZGl0aW9uYWwgZGVsYXkgaWYgbmVlZCAoZGVwZW5kaW5nIG9uIHRoZSBPUylcbiAgICBpZiAodGhpcy5rZXlib2FyZEhpZGVEZWxheSA+IDAgJiYgd2FpdEtleWJvYXJkRGVsYXkpIHtcbiAgICAgIGF3YWl0IHNsZWVwKHRoaXMua2V5Ym9hcmRIaWRlRGVsYXkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGFiSW5kZXgoKSB7XG4gICAgaWYgKGlzTmlsKHRoaXMuX3RhYmluZGV4KSB8fCB0aGlzLl90YWJpbmRleCA9PT0gLTEpIHJldHVybjsgLy8gc2tpcFxuXG4gICAgLy8gRm9jdXMgdG8gZmlyc3QgaW5wdXRcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMubWF0SW5wdXRzLmZvckVhY2goKGVsZW1lbnRSZWYsIGluZGV4KSA9PiB7XG4gICAgICAgIHNldFRhYkluZGV4KGVsZW1lbnRSZWYsIHRoaXMuX3RhYmluZGV4ICsgaW5kZXgpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXJrRm9yQ2hlY2soKSB7XG4gICAgdGhpcy5jZC5tYXJrRm9yQ2hlY2soKTtcbiAgfVxufVxuXG4iXX0=