moh-common-lib
Version:
A library of Angular components, services, and styles for B.C. Government Ministry of Health (MoH).
257 lines (254 loc) • 20.8 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as tslib_1 from "tslib";
import { forwardRef, Component, Input, Output, EventEmitter } from '@angular/core';
import { Person } from '../../models/person.model';
import { Base } from '../../models/base';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
/**
* @record
*/
export function FullNameErrorMsg() { }
if (false) {
/** @type {?|undefined} */
FullNameErrorMsg.prototype.required;
/** @type {?|undefined} */
FullNameErrorMsg.prototype.pattern;
}
/**
* FullNameComponent includes a first, middle, and last name field. If you only
* need an individual field, \@see NameComponent.
*
* **Note** This component is in dev, there are issues around "required"
* TODO - Properly handle "required"
*
* \@example
* <common-full-name [(person)]='person'></common-full-name>
*
* @export
*/
var FullNameComponent = /** @class */ (function (_super) {
tslib_1.__extends(FullNameComponent, _super);
function FullNameComponent() {
var _this = _super.call(this) || this;
_this.personChange = new EventEmitter();
_this.firstNamelabel = 'First Name';
_this.middleNamelabel = 'Middle Name';
_this.lastNamelabel = 'Last Name';
_this.disabled = false;
_this.NameRegEx = '^[a-zA-Z][a-zA-Z\\-.\' ]*$';
// default messages
_this.requiredMsgSeg = 'is required';
_this.pattern = 'Must begin with a letter followed by a letters, hyphen, period, apostrophe, or blank character';
_this._onChange = (/**
* @param {?} _
* @return {?}
*/
function (_) { });
_this._onTouched = (/**
* @return {?}
*/
function () { });
return _this;
}
/**
* @return {?}
*/
FullNameComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
if (this.person) {
this.firstName = this.person.firstName ? this.person.firstName : '';
this.lastName = this.person.lastName ? this.person.lastName : '';
this.middleName = this.person.middleName ? this.person.middleName : '';
}
this.errMsg = {
required: this.requiredMsgSeg,
pattern: this.pattern
};
};
/*ngAfterViewInit(): void {
// https://github.com/angular/angular/issues/24818
this.form.valueChanges.pipe(debounceTime(0)).subscribe((values) => {
this.onChange.emit(values);
this._onChange(values);
this._onTouched();
}
);
}*/
// setFirstName(value: any) {
// this.person.firstName = value;
// this.onChange.emit(this.person);
// this._onChange(this.person);
// this._onTouched();
// }
// setMiddleName(value: any) {
// this.person.middleName = value;
// this.onChange.emit(this.person);
// this._onChange(this.person);
// this._onTouched();
// }
// setLastName(value: any) {
// this.person.lastName = value;
// this.onChange.emit(this.person);
// this._onChange(this.person);
// this._onTouched();
// }
/*ngAfterViewInit(): void {
// https://github.com/angular/angular/issues/24818
this.form.valueChanges.pipe(debounceTime(0)).subscribe((values) => {
this.onChange.emit(values);
this._onChange(values);
this._onTouched();
}
);
}*/
// setFirstName(value: any) {
// this.person.firstName = value;
// this.onChange.emit(this.person);
// this._onChange(this.person);
// this._onTouched();
// }
// setMiddleName(value: any) {
// this.person.middleName = value;
// this.onChange.emit(this.person);
// this._onChange(this.person);
// this._onTouched();
// }
// setLastName(value: any) {
// this.person.lastName = value;
// this.onChange.emit(this.person);
// this._onChange(this.person);
// this._onTouched();
// }
/**
* @param {?} fn
* @return {?}
*/
FullNameComponent.prototype.registerOnChange = /*ngAfterViewInit(): void {
// https://github.com/angular/angular/issues/24818
this.form.valueChanges.pipe(debounceTime(0)).subscribe((values) => {
this.onChange.emit(values);
this._onChange(values);
this._onTouched();
}
);
}*/
// setFirstName(value: any) {
// this.person.firstName = value;
// this.onChange.emit(this.person);
// this._onChange(this.person);
// this._onTouched();
// }
// setMiddleName(value: any) {
// this.person.middleName = value;
// this.onChange.emit(this.person);
// this._onChange(this.person);
// this._onTouched();
// }
// setLastName(value: any) {
// this.person.lastName = value;
// this.onChange.emit(this.person);
// this._onChange(this.person);
// this._onTouched();
// }
/**
* @param {?} fn
* @return {?}
*/
function (fn) {
this._onChange = fn;
};
/**
* @param {?} fn
* @return {?}
*/
FullNameComponent.prototype.registerOnTouched = /**
* @param {?} fn
* @return {?}
*/
function (fn) {
this._onTouched = fn;
};
/**
* @param {?} value
* @return {?}
*/
FullNameComponent.prototype.writeValue = /**
* @param {?} value
* @return {?}
*/
function (value) {
this.person = value;
};
FullNameComponent.decorators = [
{ type: Component, args: [{
selector: 'common-full-name',
template: "<div class=\"form-group col-sm-6 p-sm-0\">\r\n <common-name label=\"First Name\"\r\n [disabled]=\"disabled\"\r\n [(value)]=\"person.firstName\"\r\n objectID=\"first_name\"></common-name>\r\n <!-- (blurEvent)=\"onBlur($event)\" -->\r\n</div>\r\n\r\n<div class=\"form-group col-sm-6 p-sm-0\">\r\n <common-name label=\"Middle Name\"\r\n [disabled]=\"disabled\"\r\n [(value)]=\"person.middleName\"\r\n objectID=\"middle_name\"></common-name>\r\n</div>\r\n\r\n<div class=\"form-group col-sm-6 p-sm-0\">\r\n <common-name label=\"Last Name\"\r\n required\r\n [disabled]=\"disabled\"\r\n [(value)]=\"person.lastName\"\r\n objectID=\"last_name\"></common-name>\r\n</div>\r\n\r\n\r\n<!-- \r\n<div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <div class=\"form-group\"\r\n [ngClass]=\"{'has-error': showError && (firstNameRef.touched && (firstName === undefined || firstName === null))}\">\r\n <label class=\"control-label\" for=\"firstName_{{objectId}}\"\r\n >{{firstNamelabel}}</label>\r\n <input type=\"text\"\r\n [ngModel]=\"firstName\"\r\n name=\"firstName\"\r\n (ngModelChange)=\"setFirstName($event)\"\r\n required\r\n maxlength=\"30\"\r\n [pattern]=\"NameRegEx\"\r\n id=\"firstName_{{objectId}}\" #firstNameRef=\"ngModel\"\r\n class=\"form-control\">\r\n <div *ngIf='showError && (firstNameRef.touched && (firstName === undefined || firstName === null))' role=\"alert\" aria-live=\"assertive\">\r\n <div class=\"text-danger\" *ngIf=\"firstNameRef.errors?.required\"\r\n >{{firstNamelabel}} {{errMsg.required}}</div>\r\n <div class=\"text-danger\" *ngIf=\"firstNameRef.errors?.pattern\"\r\n >{{errMsg.pattern}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"form-group\"\r\n [ngClass]=\"{'has-error': showError && (middleNameRef.touched &&(middleName === undefined || middleName === null))}\">\r\n <label class=\"control-label if-applicable\" for=\"middleName_{{objectId}}\">{{middleNamelabel}}</label>\r\n <input type=\"text\"\r\n name=\"middleName\"\r\n [ngModel]=\"middleName\"\r\n (ngModelChange)=\"setMiddleName($event)\"\r\n id='middleName_{{objectId}}' #middleNameRef=\"ngModel\"\r\n maxlength=\"30\"\r\n [pattern]=\"NameRegEx\"\r\n class=\"form-control\">\r\n <div *ngIf='middleNameRef.touched || showError' role=\"alert\" aria-live=\"assertive\">\r\n <div class=\"text-danger\" *ngIf=\"middleNameRef.errors?.required\"\r\n >{{middleNamelabel}} {{errMsg.required}}</div>\r\n <div class=\"text-danger\" *ngIf=\"middleNameRef.errors?.pattern\"\r\n >{{errMsg.pattern}}</div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <div class=\"form-group\"\r\n [ngClass]=\"{'has-error': showError && (lastNameRef.touched && (lastName === undefined || lastName === null))}\">\r\n <label class=\"control-label\" for=\"lastName_{{objectId}}\" >{{lastNamelabel}}</label>\r\n <input type=\"text\"\r\n name=\"lastName\"\r\n [ngModel]=\"lastName\"\r\n (ngModelChange)=\"setLastName($event)\"\r\n id=\"lastName_{{objectId}}\" #lastNameRef=\"ngModel\"\r\n required\r\n maxlength=\"30\"\r\n [pattern]=\"NameRegEx\"\r\n class=\"form-control\">\r\n <div *ngIf='showError && (lastNameRef.touched && (lastName === undefined || lastName === null))' role=\"alert\" aria-live=\"assertive\">\r\n <div class=\"text-danger\" *ngIf=\"lastNameRef.errors?.required\"\r\n >{{lastNamelabel}} {{errMsg.required}}</div>\r\n <div class=\"text-danger\" *ngIf=\"lastNameRef.errors?.pattern\"\r\n >{{errMsg.pattern}}</div>\r\n </div>\r\n\r\n </div>\r\n </div>\r\n</div> -->\r\n",
providers: [
{ provide: NG_VALUE_ACCESSOR, multi: true, useExisting: forwardRef((/**
* @return {?}
*/
function () { return FullNameComponent; })) }
],
styles: [".form-group{margin-bottom:1.5rem}"]
}] }
];
/** @nocollapse */
FullNameComponent.ctorParameters = function () { return []; };
FullNameComponent.propDecorators = {
person: [{ type: Input }],
personChange: [{ type: Output }],
showError: [{ type: Input }],
firstNamelabel: [{ type: Input }],
middleNamelabel: [{ type: Input }],
lastNamelabel: [{ type: Input }],
disabled: [{ type: Input }]
};
return FullNameComponent;
}(Base));
export { FullNameComponent };
if (false) {
/** @type {?} */
FullNameComponent.prototype.person;
/** @type {?} */
FullNameComponent.prototype.personChange;
/** @type {?} */
FullNameComponent.prototype.showError;
/** @type {?} */
FullNameComponent.prototype.firstNamelabel;
/** @type {?} */
FullNameComponent.prototype.middleNamelabel;
/** @type {?} */
FullNameComponent.prototype.lastNamelabel;
/** @type {?} */
FullNameComponent.prototype.disabled;
/** @type {?} */
FullNameComponent.prototype.firstName;
/** @type {?} */
FullNameComponent.prototype.middleName;
/** @type {?} */
FullNameComponent.prototype.lastName;
/** @type {?} */
FullNameComponent.prototype.NameRegEx;
/** @type {?} */
FullNameComponent.prototype.errMsg;
/**
* @type {?}
* @private
*/
FullNameComponent.prototype.requiredMsgSeg;
/**
* @type {?}
* @private
*/
FullNameComponent.prototype.pattern;
/** @type {?} */
FullNameComponent.prototype._onChange;
/** @type {?} */
FullNameComponent.prototype._onTouched;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsbC1uYW1lLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL21vaC1jb21tb24tbGliLyIsInNvdXJjZXMiOlsibGliL2NvbXBvbmVudHMvZnVsbC1uYW1lL2Z1bGwtbmFtZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUMzRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbkQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ3pDLE9BQU8sRUFBd0IsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7OztBQUd6RSxzQ0FHQzs7O0lBRkMsb0NBQWtCOztJQUNsQixtQ0FBaUI7Ozs7Ozs7Ozs7Ozs7O0FBZW5CO0lBU3VDLDZDQUFJO0lBeUJ6QztRQUFBLFlBQ0UsaUJBQU8sU0FDUjtRQXhCUyxrQkFBWSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFFM0Msb0JBQWMsR0FBVyxZQUFZLENBQUM7UUFDdEMscUJBQWUsR0FBVyxhQUFhLENBQUM7UUFDeEMsbUJBQWEsR0FBVyxXQUFXLENBQUM7UUFDcEMsY0FBUSxHQUFZLEtBQUssQ0FBQztRQU81QixlQUFTLEdBQVcsNEJBQTRCLENBQUM7O1FBSWhELG9CQUFjLEdBQVcsYUFBYSxDQUFDO1FBQ3ZDLGFBQU8sR0FBVyxnR0FBZ0csQ0FBQztRQUVwSCxlQUFTOzs7O1FBQUcsVUFBQyxDQUFNLElBQU0sQ0FBQyxFQUFDO1FBQzNCLGdCQUFVOzs7UUFBRyxjQUFPLENBQUMsRUFBQzs7SUFJN0IsQ0FBQzs7OztJQUVELG9DQUFROzs7SUFBUjtRQUVFLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNmLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDcEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNqRSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1NBQ3hFO1FBRUQsSUFBSSxDQUFDLE1BQU0sR0FBTTtZQUNmLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYztZQUM3QixPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDdEIsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFFSCw2QkFBNkI7SUFDN0IsbUNBQW1DO0lBQ25DLHFDQUFxQztJQUNyQyxpQ0FBaUM7SUFDakMsdUJBQXVCO0lBQ3ZCLElBQUk7SUFFSiw4QkFBOEI7SUFFOUIsb0NBQW9DO0lBQ3BDLHFDQUFxQztJQUNyQyxpQ0FBaUM7SUFDakMsdUJBQXVCO0lBRXZCLElBQUk7SUFFSiw0QkFBNEI7SUFFNUIsa0NBQWtDO0lBQ2xDLHFDQUFxQztJQUNyQyxpQ0FBaUM7SUFDakMsdUJBQXVCO0lBRXZCLElBQUk7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQUVKLDRDQUFnQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFBaEIsVUFBaUIsRUFBTztRQUN0QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUN0QixDQUFDOzs7OztJQUVELDZDQUFpQjs7OztJQUFqQixVQUFrQixFQUFPO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO0lBQ3ZCLENBQUM7Ozs7O0lBRUQsc0NBQVU7Ozs7SUFBVixVQUFXLEtBQVU7UUFDbkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7SUFDdEIsQ0FBQzs7Z0JBbEdGLFNBQVMsU0FBQztvQkFDVCxRQUFRLEVBQUUsa0JBQWtCO29CQUM1QixnL0lBQXlDO29CQUV6QyxTQUFTLEVBQUU7d0JBQ1QsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsVUFBVTs7OzRCQUFDLGNBQU0sT0FBQSxpQkFBaUIsRUFBakIsQ0FBaUIsRUFBRSxFQUFDO3FCQUM5Rjs7aUJBQ0Y7Ozs7O3lCQUlFLEtBQUs7K0JBQ0wsTUFBTTs0QkFDTixLQUFLO2lDQUNMLEtBQUs7a0NBQ0wsS0FBSztnQ0FDTCxLQUFLOzJCQUNMLEtBQUs7O0lBb0ZSLHdCQUFDO0NBQUEsQUFyR0QsQ0FTdUMsSUFBSSxHQTRGMUM7U0E1RlksaUJBQWlCOzs7SUFFNUIsbUNBQXdCOztJQUN4Qix5Q0FBb0Q7O0lBQ3BELHNDQUE0Qjs7SUFDNUIsMkNBQStDOztJQUMvQyw0Q0FBaUQ7O0lBQ2pELDBDQUE2Qzs7SUFDN0MscUNBQW1DOztJQUduQyxzQ0FBbUI7O0lBQ25CLHVDQUFtQjs7SUFDbkIscUNBQWtCOztJQUVsQixzQ0FBd0Q7O0lBRXhELG1DQUFpQzs7Ozs7SUFFakMsMkNBQStDOzs7OztJQUMvQyxvQ0FBMkg7O0lBRTNILHNDQUFrQzs7SUFDbEMsdUNBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9yd2FyZFJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQZXJzb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvcGVyc29uLm1vZGVsJztcclxuaW1wb3J0IHsgQmFzZSB9IGZyb20gJy4uLy4uL21vZGVscy9iYXNlJztcclxuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRnVsbE5hbWVFcnJvck1zZyB7XHJcbiAgcmVxdWlyZWQ/OiBzdHJpbmc7XHJcbiAgcGF0dGVybj86IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiAqIEZ1bGxOYW1lQ29tcG9uZW50IGluY2x1ZGVzIGEgZmlyc3QsIG1pZGRsZSwgYW5kIGxhc3QgbmFtZSBmaWVsZC4gIElmIHlvdSBvbmx5XHJcbiAqIG5lZWQgYW4gaW5kaXZpZHVhbCBmaWVsZCwgQHNlZSBOYW1lQ29tcG9uZW50LlxyXG4gKlxyXG4gKiAqKk5vdGUqKiBUaGlzIGNvbXBvbmVudCBpcyBpbiBkZXYsIHRoZXJlIGFyZSBpc3N1ZXMgYXJvdW5kIFwicmVxdWlyZWRcIlxyXG4gKiBUT0RPIC0gUHJvcGVybHkgaGFuZGxlIFwicmVxdWlyZWRcIlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAgICAgICAgICA8Y29tbW9uLWZ1bGwtbmFtZSBbKHBlcnNvbildPSdwZXJzb24nPjwvY29tbW9uLWZ1bGwtbmFtZT5cclxuICpcclxuICogQGV4cG9ydFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjb21tb24tZnVsbC1uYW1lJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vZnVsbC1uYW1lLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9mdWxsLW5hbWUuY29tcG9uZW50LnNjc3MnXSxcclxuICBwcm92aWRlcnM6IFtcclxuICAgIHsgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsIG11bHRpOiB0cnVlLCB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBGdWxsTmFtZUNvbXBvbmVudCApfVxyXG4gIF1cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBGdWxsTmFtZUNvbXBvbmVudCBleHRlbmRzIEJhc2UgaW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciwgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgcGVyc29uOiBQZXJzb247XHJcbiAgQE91dHB1dCgpIHBlcnNvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8UGVyc29uPigpO1xyXG4gIEBJbnB1dCgpIHNob3dFcnJvcjogYm9vbGVhbjtcclxuICBASW5wdXQoKSBmaXJzdE5hbWVsYWJlbDogc3RyaW5nID0gJ0ZpcnN0IE5hbWUnO1xyXG4gIEBJbnB1dCgpIG1pZGRsZU5hbWVsYWJlbDogc3RyaW5nID0gJ01pZGRsZSBOYW1lJztcclxuICBASW5wdXQoKSBsYXN0TmFtZWxhYmVsOiBzdHJpbmcgPSAnTGFzdCBOYW1lJztcclxuICBASW5wdXQoKSBkaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuXHJcbiAgZmlyc3ROYW1lOiBzdHJpbmcgO1xyXG4gIG1pZGRsZU5hbWU6IHN0cmluZztcclxuICBsYXN0TmFtZTogc3RyaW5nIDtcclxuXHJcbiAgcHVibGljIE5hbWVSZWdFeDogc3RyaW5nID0gJ15bYS16QS1aXVthLXpBLVpcXFxcLS5cXCcgXSokJztcclxuXHJcbiAgcHVibGljIGVyck1zZzogRnVsbE5hbWVFcnJvck1zZyA7XHJcbiAgLy8gZGVmYXVsdCBtZXNzYWdlc1xyXG4gIHByaXZhdGUgcmVxdWlyZWRNc2dTZWc6IHN0cmluZyA9ICdpcyByZXF1aXJlZCc7XHJcbiAgcHJpdmF0ZSBwYXR0ZXJuOiBzdHJpbmcgPSAnTXVzdCBiZWdpbiB3aXRoIGEgbGV0dGVyIGZvbGxvd2VkIGJ5IGEgbGV0dGVycywgaHlwaGVuLCBwZXJpb2QsIGFwb3N0cm9waGUsIG9yIGJsYW5rIGNoYXJhY3Rlcic7XHJcblxyXG4gIHB1YmxpYyBfb25DaGFuZ2UgPSAoXzogYW55KSA9PiB7fTtcclxuICBwdWJsaWMgX29uVG91Y2hlZCA9ICgpID0+IHt9O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuXHJcbiAgICBpZiAodGhpcy5wZXJzb24pIHtcclxuICAgICAgdGhpcy5maXJzdE5hbWUgPSB0aGlzLnBlcnNvbi5maXJzdE5hbWUgPyB0aGlzLnBlcnNvbi5maXJzdE5hbWUgOiAnJztcclxuICAgICAgdGhpcy5sYXN0TmFtZSA9IHRoaXMucGVyc29uLmxhc3ROYW1lID8gdGhpcy5wZXJzb24ubGFzdE5hbWUgOiAnJztcclxuICAgICAgdGhpcy5taWRkbGVOYW1lID0gdGhpcy5wZXJzb24ubWlkZGxlTmFtZSA/IHRoaXMucGVyc29uLm1pZGRsZU5hbWUgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmVyck1zZyA9ICAgIHtcclxuICAgICAgcmVxdWlyZWQ6IHRoaXMucmVxdWlyZWRNc2dTZWcsXHJcbiAgICAgIHBhdHRlcm46IHRoaXMucGF0dGVyblxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8qbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8yNDgxOFxyXG4gICAgICB0aGlzLmZvcm0udmFsdWVDaGFuZ2VzLnBpcGUoZGVib3VuY2VUaW1lKDApKS5zdWJzY3JpYmUoKHZhbHVlcykgPT4ge1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UuZW1pdCh2YWx1ZXMpO1xyXG4gICAgICAgIHRoaXMuX29uQ2hhbmdlKHZhbHVlcyk7XHJcbiAgICAgICAgdGhpcy5fb25Ub3VjaGVkKCk7XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gIH0qL1xyXG5cclxuICAvLyBzZXRGaXJzdE5hbWUodmFsdWU6IGFueSkge1xyXG4gIC8vICAgdGhpcy5wZXJzb24uZmlyc3ROYW1lID0gdmFsdWU7XHJcbiAgLy8gICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5wZXJzb24pO1xyXG4gIC8vICAgdGhpcy5fb25DaGFuZ2UodGhpcy5wZXJzb24pO1xyXG4gIC8vICAgdGhpcy5fb25Ub3VjaGVkKCk7XHJcbiAgLy8gfVxyXG5cclxuICAvLyBzZXRNaWRkbGVOYW1lKHZhbHVlOiBhbnkpIHtcclxuXHJcbiAgLy8gICB0aGlzLnBlcnNvbi5taWRkbGVOYW1lID0gdmFsdWU7XHJcbiAgLy8gICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5wZXJzb24pO1xyXG4gIC8vICAgdGhpcy5fb25DaGFuZ2UodGhpcy5wZXJzb24pO1xyXG4gIC8vICAgdGhpcy5fb25Ub3VjaGVkKCk7XHJcblxyXG4gIC8vIH1cclxuXHJcbiAgLy8gc2V0TGFzdE5hbWUodmFsdWU6IGFueSkge1xyXG5cclxuICAvLyAgIHRoaXMucGVyc29uLmxhc3ROYW1lID0gdmFsdWU7XHJcbiAgLy8gICB0aGlzLm9uQ2hhbmdlLmVtaXQodGhpcy5wZXJzb24pO1xyXG4gIC8vICAgdGhpcy5fb25DaGFuZ2UodGhpcy5wZXJzb24pO1xyXG4gIC8vICAgdGhpcy5fb25Ub3VjaGVkKCk7XHJcblxyXG4gIC8vIH1cclxuXHJcbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogYW55KTogdm9pZCB7XHJcbiAgICB0aGlzLl9vbkNoYW5nZSA9IGZuO1xyXG4gIH1cclxuXHJcbiAgcmVnaXN0ZXJPblRvdWNoZWQoZm46IGFueSk6IHZvaWQge1xyXG4gICAgdGhpcy5fb25Ub3VjaGVkID0gZm47XHJcbiAgfVxyXG5cclxuICB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMucGVyc29uID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuXHJcbn1cclxuIl19