ng-ptplibraries
Version:
192 lines (188 loc) • 14.9 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, Input, forwardRef } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { CountriesService } from '../../services/countries.service';
import { find } from 'lodash';
export class PTPPhoneNumberComponent {
/**
* @param {?} countriesService
*/
constructor(countriesService) {
this.countriesService = countriesService;
this.countryCode = null;
this.countries = null;
this.selectedCountry = null;
this.propagateChange = (_) => { };
this.onTouched = () => { };
}
/**
* @return {?}
*/
ngOnInit() {
this.initializeCountries();
}
/**
* @return {?}
*/
get phoneNumber() {
return this._phoneNumber;
}
/**
* @param {?} val
* @return {?}
*/
set phoneNumber(val) {
this._phoneNumber = val;
this.propagateChange(this._phoneNumber);
}
/**
* Resets Phone number component
* @return {?}
*/
reset() {
this.initializeCountries();
this._phoneNumber = null;
this.propagateChange(this._phoneNumber);
}
/**
* @param {?} value
* @return {?}
*/
writeValue(value) {
if (value !== undefined) {
this.phoneNumber = value;
}
}
/**
* @param {?} fn
* @return {?}
*/
registerOnChange(fn) {
this.propagateChange = fn;
}
/**
* @param {?} fn
* @return {?}
*/
registerOnTouched(fn) {
this.onTouched = fn;
}
/**
* @param {?} country
* @return {?}
*/
getCountry(country) {
this.selectedCountry = country;
this.countryCode = this.selectedCountry.callingCodes[0];
this.propagateChange(this._phoneNumber);
}
/**
* @return {?}
*/
getPhoneNumber() {
return '+(' + this.countryCode + ')' + this._phoneNumber;
}
/**
* @return {?}
*/
initializeCountries() {
this.countriesService.GetCountries()
.subscribe(res => {
this.countries = res;
this.selectedCountry = find(res, { alpha2Code: 'US' });
this.countryCode = this.selectedCountry.callingCodes[0];
}, err => {
console.log(err);
});
}
}
PTPPhoneNumberComponent.decorators = [
{ type: Component, args: [{
selector: 'ptp-phonenumber-field',
template: `<label>{{ label }}</label>
<div class="input-group">
<div class="input-group-prepend">
<button class="btn btn-light btn-sm dropdown-toggle border" type="button" data-toggle="dropdown">
<img src="{{ selectedCountry?.flag }}" style="width: 2em"> +{{ selectedCountry?.callingCodes }} </button>
<div class="dropdown-menu pb-0" style="width: 115%;">
<li class="p-2 border-right-1">
<input type="text" class="form-control form-control-sm" placeholder="Search" [(ngModel)]="searchCountry">
</li>
<div style="height: 200px; overflow-y: scroll;">
<div *ngFor="let country of countries | searchfilter: searchCountry as result">
<li style="cursor: pointer;" class="dropdown-item p-2" (click)="getCountry(country)">
<img src="{{ country.flag }}" style="width: 2em"> {{ country.name }}
<span class="text-dark">(+{{ country.callingCodes }})</span>
</li>
</div>
</div>
</div>
</div>
<input type="text" class="form-control form-control-sm"
maxlength="15"
[numberOnly]="true"
[(ngModel)]="phoneNumber"
[ngClass]="{'is-invalid': validators?.required && isTouched }"
(blur)="onTouched($event)"
data-toggle="popover"
data-trigger="focus"
[attr.data-content]="helpMessage"
placeholder="{{placeholder}}"
>
<div *ngIf="validators?.required && isTouched" class="invalid-feedback">
{{ validators?.required }}
</div>
</div>
`,
// tslint:disable-next-line:use-host-property-decorator
host: { '(blur)': 'onTouched($event)' },
providers: [
{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => PTPPhoneNumberComponent), multi: true }
]
},] },
];
/** @nocollapse */
PTPPhoneNumberComponent.ctorParameters = () => [
{ type: CountriesService }
];
PTPPhoneNumberComponent.propDecorators = {
_phoneNumber: [{ type: Input, args: ['phoneNumber',] }],
searchCountry: [{ type: Input, args: ['searchCountry',] }],
validators: [{ type: Input }],
isTouched: [{ type: Input }],
helpMessage: [{ type: Input, args: ['helpMessage',] }],
placeholder: [{ type: Input, args: ['placeholder',] }],
label: [{ type: Input, args: ['label',] }]
};
if (false) {
/** @type {?} */
PTPPhoneNumberComponent.prototype.countryCode;
/** @type {?} */
PTPPhoneNumberComponent.prototype.countries;
/** @type {?} */
PTPPhoneNumberComponent.prototype.selectedCountry;
/** @type {?} */
PTPPhoneNumberComponent.prototype._phoneNumber;
/** @type {?} */
PTPPhoneNumberComponent.prototype.searchCountry;
/** @type {?} */
PTPPhoneNumberComponent.prototype.validators;
/** @type {?} */
PTPPhoneNumberComponent.prototype.isTouched;
/** @type {?} */
PTPPhoneNumberComponent.prototype.helpMessage;
/** @type {?} */
PTPPhoneNumberComponent.prototype.placeholder;
/** @type {?} */
PTPPhoneNumberComponent.prototype.label;
/** @type {?} */
PTPPhoneNumberComponent.prototype.propagateChange;
/** @type {?} */
PTPPhoneNumberComponent.prototype.onTouched;
/** @type {?} */
PTPPhoneNumberComponent.prototype.countriesService;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtbnVtYmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL25nLXB0cGxpYnJhcmllcy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL3Bob25lbnVtYmVyLWZpZWxkL3Bob25lLW51bWJlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRSxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDcEUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLFFBQVEsQ0FBQztBQWtEOUIsTUFBTSxPQUFPLHVCQUF1Qjs7OztJQW1CaEMsWUFDWTtRQUFBLHFCQUFnQixHQUFoQixnQkFBZ0I7UUFsQjVCLG1CQUFjLElBQUksQ0FBQztRQUNuQixpQkFBWSxJQUFJLENBQUM7UUFDakIsdUJBQWtCLElBQUksQ0FBQztRQVl2Qix1QkFBa0IsQ0FBQyxDQUFNLEVBQUUsRUFBRSxJQUFJLENBQUM7UUFDbEMsaUJBQWlCLEdBQUcsRUFBRSxJQUFJLENBQUM7S0FJdkI7Ozs7SUFFSixRQUFRO1FBQ0osSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7S0FDOUI7Ozs7SUFFRCxJQUFJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7S0FDNUI7Ozs7O0lBRUQsSUFBSSxXQUFXLENBQUMsR0FBRztRQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsR0FBRyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBQzNDOzs7OztJQUdELEtBQUs7UUFDRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUMzQzs7Ozs7SUFFRCxVQUFVLENBQUMsS0FBVTtRQUNqQixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7WUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7U0FDNUI7S0FDSjs7Ozs7SUFFRCxnQkFBZ0IsQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7S0FDN0I7Ozs7O0lBRUQsaUJBQWlCLENBQUMsRUFBRTtRQUNoQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztLQUN2Qjs7Ozs7SUFFRCxVQUFVLENBQUMsT0FBZTtRQUN0QixJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQztRQUMvQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBQzNDOzs7O0lBRUQsY0FBYztRQUNWLE9BQU8sSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7S0FDNUQ7Ozs7SUFFRCxtQkFBbUI7UUFDZixJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFO2FBQy9CLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNiLElBQUksQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDM0QsRUFBRSxHQUFHLENBQUMsRUFBRTtZQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDcEIsQ0FBQyxDQUFDO0tBQ1Y7OztZQTNISixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLHVCQUF1QjtnQkFDakMsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBcUNiOztnQkFFRyxJQUFJLEVBQUUsRUFBQyxRQUFRLEVBQUUsbUJBQW1CLEVBQUM7Z0JBQ3JDLFNBQVMsRUFBRTtvQkFDUCxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtpQkFDdEc7YUFDSjs7OztZQWpEUSxnQkFBZ0I7OzsyQkEwRHBCLEtBQUssU0FBQyxhQUFhOzRCQUNuQixLQUFLLFNBQUMsZUFBZTt5QkFFckIsS0FBSzt3QkFDTCxLQUFLOzBCQUNMLEtBQUssU0FBQyxhQUFhOzBCQUNuQixLQUFLLFNBQUMsYUFBYTtvQkFDbkIsS0FBSyxTQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIGZvcndhcmRSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbnRyb2xWYWx1ZUFjY2Vzc29yLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IENvdW50cmllc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb3VudHJpZXMuc2VydmljZSc7XG5pbXBvcnQgeyBmaW5kIH0gZnJvbSAnbG9kYXNoJztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3B0cC1waG9uZW51bWJlci1maWVsZCcsXG4gICAgdGVtcGxhdGU6IGA8bGFiZWw+e3sgbGFiZWwgfX08L2xhYmVsPlxuPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwLXByZXBlbmRcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG4tbGlnaHQgYnRuLXNtIGRyb3Bkb3duLXRvZ2dsZSBib3JkZXJcIiB0eXBlPVwiYnV0dG9uXCIgZGF0YS10b2dnbGU9XCJkcm9wZG93blwiPlxuICAgICAgICAgICAgPGltZyBzcmM9XCJ7eyBzZWxlY3RlZENvdW50cnk/LmZsYWcgfX1cIiBzdHlsZT1cIndpZHRoOiAyZW1cIj4mbmJzcDsre3sgc2VsZWN0ZWRDb3VudHJ5Py5jYWxsaW5nQ29kZXMgfX0gPC9idXR0b24+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1tZW51IHBiLTBcIiBzdHlsZT1cIndpZHRoOiAxMTUlO1wiPlxuICAgICAgICAgICAgPGxpIGNsYXNzPVwicC0yIGJvcmRlci1yaWdodC0xXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtXCIgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIiBbKG5nTW9kZWwpXT1cInNlYXJjaENvdW50cnlcIj5cbiAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwiaGVpZ2h0OiAyMDBweDsgb3ZlcmZsb3cteTogc2Nyb2xsO1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGNvdW50cnkgb2YgY291bnRyaWVzIHwgc2VhcmNoZmlsdGVyOiBzZWFyY2hDb3VudHJ5IGFzIHJlc3VsdFwiPlxuICAgICAgICAgICAgICAgICAgICA8bGkgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXI7XCIgY2xhc3M9XCJkcm9wZG93bi1pdGVtIHAtMlwiIChjbGljayk9XCJnZXRDb3VudHJ5KGNvdW50cnkpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHNyYz1cInt7IGNvdW50cnkuZmxhZyB9fVwiIHN0eWxlPVwid2lkdGg6IDJlbVwiPiZuYnNwOyB7eyBjb3VudHJ5Lm5hbWUgfX0mbmJzcDsmbmJzcDtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYXJrXCI+KCt7eyBjb3VudHJ5LmNhbGxpbmdDb2RlcyB9fSk8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj4gIFxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc21cIiBcbiAgICBtYXhsZW5ndGg9XCIxNVwiXG4gICAgW251bWJlck9ubHldPVwidHJ1ZVwiXG4gICAgWyhuZ01vZGVsKV09XCJwaG9uZU51bWJlclwiIFxuICAgIFtuZ0NsYXNzXT1cInsnaXMtaW52YWxpZCc6IHZhbGlkYXRvcnM/LnJlcXVpcmVkICYmIGlzVG91Y2hlZCB9XCIgXG4gICAgKGJsdXIpPVwib25Ub3VjaGVkKCRldmVudClcIlxuICAgIGRhdGEtdG9nZ2xlPVwicG9wb3ZlclwiIFxuICAgIGRhdGEtdHJpZ2dlcj1cImZvY3VzXCIgXG4gICAgW2F0dHIuZGF0YS1jb250ZW50XT1cImhlbHBNZXNzYWdlXCIgXG4gICAgcGxhY2Vob2xkZXI9XCJ7e3BsYWNlaG9sZGVyfX1cIlxuICAgID5cbiAgICA8ZGl2ICpuZ0lmPVwidmFsaWRhdG9ycz8ucmVxdWlyZWQgJiYgaXNUb3VjaGVkXCIgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCI+XG4gICAgICAgIHt7IHZhbGlkYXRvcnM/LnJlcXVpcmVkIH19XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG5cblxuYCxcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dXNlLWhvc3QtcHJvcGVydHktZGVjb3JhdG9yXG4gICAgaG9zdDogeycoYmx1ciknOiAnb25Ub3VjaGVkKCRldmVudCknfSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgeyBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUiwgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUFRQUGhvbmVOdW1iZXJDb21wb25lbnQpLCBtdWx0aTogdHJ1ZSB9XG4gICAgXVxufSlcblxuZXhwb3J0IGNsYXNzIFBUUFBob25lTnVtYmVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBDb250cm9sVmFsdWVBY2Nlc3NvciAge1xuXG4gICAgY291bnRyeUNvZGUgPSBudWxsO1xuICAgIGNvdW50cmllcyA9IG51bGw7XG4gICAgc2VsZWN0ZWRDb3VudHJ5ID0gbnVsbDtcblxuICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1pbnB1dC1yZW5hbWVcbiAgICBASW5wdXQoJ3Bob25lTnVtYmVyJykgX3Bob25lTnVtYmVyO1xuICAgIEBJbnB1dCgnc2VhcmNoQ291bnRyeScpIHNlYXJjaENvdW50cnk7XG5cbiAgICBASW5wdXQoKSBwdWJsaWMgdmFsaWRhdG9yczogYW55O1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpc1RvdWNoZWQ6IGJvb2xlYW47XG4gICAgQElucHV0KCdoZWxwTWVzc2FnZScpIHB1YmxpYyBoZWxwTWVzc2FnZTogc3RyaW5nO1xuICAgIEBJbnB1dCgncGxhY2Vob2xkZXInKSBwdWJsaWMgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgICBASW5wdXQoJ2xhYmVsJykgcHVibGljIGxhYmVsOiBzdHJpbmc7XG5cbiAgICBwcm9wYWdhdGVDaGFuZ2UgPSAoXzogYW55KSA9PiB7IH07XG4gICAgb25Ub3VjaGVkOiBhbnkgPSAoKSA9PiB7IH07XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBjb3VudHJpZXNTZXJ2aWNlOiBDb3VudHJpZXNTZXJ2aWNlXG4gICAgKSB7fVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbGl6ZUNvdW50cmllcygpO1xuICAgIH1cblxuICAgIGdldCBwaG9uZU51bWJlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bob25lTnVtYmVyO1xuICAgIH1cblxuICAgIHNldCBwaG9uZU51bWJlcih2YWwpIHtcbiAgICAgICAgdGhpcy5fcGhvbmVOdW1iZXIgPSB2YWw7XG4gICAgICAgIHRoaXMucHJvcGFnYXRlQ2hhbmdlKHRoaXMuX3Bob25lTnVtYmVyKTtcbiAgICB9XG5cbiAgICAvKiogUmVzZXRzIFBob25lIG51bWJlciBjb21wb25lbnQgKi9cbiAgICByZXNldCgpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplQ291bnRyaWVzKCk7XG4gICAgICAgIHRoaXMuX3Bob25lTnVtYmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5wcm9wYWdhdGVDaGFuZ2UodGhpcy5fcGhvbmVOdW1iZXIpO1xuICAgIH1cblxuICAgIHdyaXRlVmFsdWUodmFsdWU6IGFueSkge1xuICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5waG9uZU51bWJlciA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVnaXN0ZXJPbkNoYW5nZShmbikge1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSA9IGZuO1xuICAgIH1cblxuICAgIHJlZ2lzdGVyT25Ub3VjaGVkKGZuKSB7XG4gICAgICAgIHRoaXMub25Ub3VjaGVkID0gZm47XG4gICAgfVxuXG4gICAgZ2V0Q291bnRyeShjb3VudHJ5OiBPYmplY3QpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZENvdW50cnkgPSBjb3VudHJ5O1xuICAgICAgICB0aGlzLmNvdW50cnlDb2RlID0gdGhpcy5zZWxlY3RlZENvdW50cnkuY2FsbGluZ0NvZGVzWzBdO1xuICAgICAgICB0aGlzLnByb3BhZ2F0ZUNoYW5nZSh0aGlzLl9waG9uZU51bWJlcik7XG4gICAgfVxuXG4gICAgZ2V0UGhvbmVOdW1iZXIoKSB7XG4gICAgICAgIHJldHVybiAnKygnICsgdGhpcy5jb3VudHJ5Q29kZSArICcpJyArIHRoaXMuX3Bob25lTnVtYmVyO1xuICAgIH1cblxuICAgIGluaXRpYWxpemVDb3VudHJpZXMoKSB7XG4gICAgICAgIHRoaXMuY291bnRyaWVzU2VydmljZS5HZXRDb3VudHJpZXMoKVxuICAgICAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY291bnRyaWVzID0gcmVzO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5ID0gZmluZChyZXMsIHsgYWxwaGEyQ29kZTogJ1VTJyB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50cnlDb2RlID0gdGhpcy5zZWxlY3RlZENvdW50cnkuY2FsbGluZ0NvZGVzWzBdO1xuICAgICAgICAgICAgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhlcnIpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG59XG4iXX0=