UNPKG

@asoftwareworld/form-builder

Version:

ASW Form Builder helps you with rapid development and designed web forms which includes several controls. The key feature of Form Builder is to make your content attractive and effective. We can customize our control at run time and preview the same befor

164 lines 23.8 kB
/** * @license * Copyright ASW (A Software World) All Rights Reserved. * * Use of this source code is governed by an MIT-style license that can be * found in the LICENSE file */ import { Injectable } from '@angular/core'; import * as i0 from "@angular/core"; export class GoogleMapService { autocompleteService; geoCoder; searchedAddress = []; latitude; longitude; placesService; setCurrentLocation() { this.geoCoder = new google.maps.Geocoder(); this.latitude = 31.67431470650697; this.longitude = 75.64344802329514; if ('geolocation' in navigator) { navigator.geolocation.getCurrentPosition((position) => { this.latitude = position.coords.latitude ? position.coords.latitude : 31.67431470650697; this.longitude = position.coords.longitude ? position.coords.longitude : 75.64344802329514; this.getAddress(this.latitude, this.longitude); }); } } getNearestAddress() { this.placesService = new google.maps.places.PlacesService(document.createElement('div')); this.setCurrentLocation(); const nearestAddress = []; return new Promise((resolve, reject) => { const userLocation = new google.maps.LatLng(this.latitude, this.longitude); const request = { location: userLocation, radius: 1500, types: ['establishment'], rankby: 'distance' }; this.placesService.nearbySearch(request, (options, status) => { if (status === google.maps.places.PlacesServiceStatus.OK) { options.map(element => { const address = { id: element.place_id, label: element.name + ', ' + element.vicinity, alias: element.name, addressName: element.vicinity, latitude: element.geometry.location.lat(), longitude: element.geometry.location.lng(), icon: 'https://maps.gstatic.com/consumer/images/icons/2x/place_grey650.png' }; nearestAddress.push(address); }); this.searchedAddress = nearestAddress; resolve(this.searchedAddress); } else { reject(status); } }); }).then(); } getQueryPredictions(query) { this.autocompleteService = new google.maps.places.AutocompleteService(); const request = { input: query }; let resultAddress = []; return new Promise((resolve, reject) => { this.autocompleteService.getQueryPredictions(request, (options, status) => { if (status === google.maps.places.PlacesServiceStatus.OK && options.length > 0) { options.map(element => { const address = { id: element.place_id, label: element.structured_formatting.main_text + ', ' + element.structured_formatting.secondary_text, alias: element.structured_formatting.main_text, addressName: element.structured_formatting.secondary_text, icon: 'https://maps.gstatic.com/consumer/images/icons/2x/place_grey650.png' }; resultAddress.push(address); }); this.searchedAddress = resultAddress; resolve(this.searchedAddress); } else if (status === google.maps.places.PlacesServiceStatus.ZERO_RESULTS) { resultAddress = []; resolve(resultAddress); } }); }).then(); } getAddress(latitude, longitude) { this.geoCoder = new google.maps.Geocoder(); this.searchedAddress = []; return new Promise((resolve, reject) => { this.geoCoder.geocode({ location: { lat: latitude, lng: longitude } }, (results, status) => { if (status === google.maps.GeocoderStatus.OK) { const element = results[0]; const address = { id: element.place_id, label: element.formatted_address, alias: element.formatted_address, addressName: element.formatted_address, icon: 'https://maps.gstatic.com/consumer/images/icons/2x/place_grey650.png', latitude, longitude, }; this.searchedAddress.push(address); resolve(this.searchedAddress); } else { reject(status); } }); }).then(); } getDetails(data) { let lat; let lng; return new Promise((resolve, reject) => { this.placesService.getDetails({ placeId: data.id, fields: ['geometry', 'icon'] }, (details, status) => { if (status === google.maps.places.PlacesServiceStatus.OK) { lat = details.geometry.location.lat(); lng = details.geometry.location.lng(); const address = { id: data.id, label: data.label, alias: data.alias, addressName: data.addressName, latitude: lat, longitude: lng, icon: data.icon }; resolve(address); } else { reject(status); } }); }).then(); } isLetter(value) { const letters = /[a-z A-Z]/g; if (value && value.match(letters)) { return false; } return true; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: GoogleMapService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: GoogleMapService, providedIn: 'root' }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: GoogleMapService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZm9ybS1jb250cm9sL2dwcy9nb29nbGUtbWFwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNM0MsTUFBTSxPQUFPLGdCQUFnQjtJQUN6QixtQkFBbUIsQ0FBTTtJQUNqQixRQUFRLENBQU07SUFDdEIsZUFBZSxHQUFVLEVBQUUsQ0FBQztJQUM1QixRQUFRLENBQVU7SUFDbEIsU0FBUyxDQUFVO0lBQ25CLGFBQWEsQ0FBTTtJQUVuQixrQkFBa0I7UUFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLGlCQUFpQixDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUM7UUFDbkMsSUFBSSxhQUFhLElBQUksU0FBUyxFQUFFLENBQUM7WUFDN0IsU0FBUyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNsRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3hGLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDM0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENB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b2Z0d2FyZSBXb3JsZCkgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cclxuICpcclxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcclxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZVxyXG4gKi9cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5kZWNsYXJlIGNvbnN0IGdvb2dsZTogYW55O1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHb29nbGVNYXBTZXJ2aWNlIHtcclxuICAgIGF1dG9jb21wbGV0ZVNlcnZpY2U6IGFueTtcclxuICAgIHByaXZhdGUgZ2VvQ29kZXI6IGFueTtcclxuICAgIHNlYXJjaGVkQWRkcmVzczogYW55W10gPSBbXTtcclxuICAgIGxhdGl0dWRlITogbnVtYmVyO1xyXG4gICAgbG9uZ2l0dWRlITogbnVtYmVyO1xyXG4gICAgcGxhY2VzU2VydmljZTogYW55O1xyXG5cclxuICAgIHNldEN1cnJlbnRMb2NhdGlvbigpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmdlb0NvZGVyID0gbmV3IGdvb2dsZS5tYXBzLkdlb2NvZGVyKCk7XHJcbiAgICAgICAgdGhpcy5sYXRpdHVkZSA9IDMxLjY3NDMxNDcwNjUwNjk3O1xyXG4gICAgICAgIHRoaXMubG9uZ2l0dWRlID0gNzUuNjQzNDQ4MDIzMjk1MTQ7XHJcbiAgICAgICAgaWYgKCdnZW9sb2NhdGlvbicgaW4gbmF2aWdhdG9yKSB7XHJcbiAgICAgICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKHBvc2l0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxhdGl0dWRlID0gcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlID8gcG9zaXRpb24uY29vcmRzLmxhdGl0dWRlIDogMzEuNjc0MzE0NzA2NTA2OTc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUgPyBwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlIDogNzUuNjQzNDQ4MDIzMjk1MTQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldEFkZHJlc3ModGhpcy5sYXRpdHVkZSwgdGhpcy5sb25naXR1ZGUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TmVhcmVzdEFkZHJlc3MoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICB0aGlzLnBsYWNlc1NlcnZpY2UgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2UoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JykpO1xyXG4gICAgICAgIHRoaXMuc2V0Q3VycmVudExvY2F0aW9uKCk7XHJcbiAgICAgICAgY29uc3QgbmVhcmVzdEFkZHJlc3M6IGFueVtdID0gW107XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdXNlckxvY2F0aW9uID0gbmV3IGdvb2dsZS5tYXBzLkxhdExuZyh0aGlzLmxhdGl0dWRlLCB0aGlzLmxvbmdpdHVkZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogdXNlckxvY2F0aW9uLFxyXG4gICAgICAgICAgICAgICAgcmFkaXVzOiAxNTAwLFxyXG4gICAgICAgICAgICAgICAgdHlwZXM6IFsnZXN0YWJsaXNobWVudCddLFxyXG4gICAgICAgICAgICAgICAgcmFua2J5OiAnZGlzdGFuY2UnXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMucGxhY2VzU2VydmljZS5uZWFyYnlTZWFyY2goXHJcbiAgICAgICAgICAgICAgICByZXF1ZXN0LFxyXG4gICAgICAgICAgICAgICAgKG9wdGlvbnM6IGFueVtdLCBzdGF0dXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlU3RhdHVzLk9LKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubWFwKGVsZW1lbnQgPT4gIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVsZW1lbnQucGxhY2VfaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGVsZW1lbnQubmFtZSArICcsICcgKyBlbGVtZW50LnZpY2luaXR5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzOiBlbGVtZW50Lm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzc05hbWU6IGVsZW1lbnQudmljaW5pdHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0aXR1ZGU6IGVsZW1lbnQuZ2VvbWV0cnkubG9jYXRpb24ubGF0KCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ2l0dWRlOiBlbGVtZW50Lmdlb21ldHJ5LmxvY2F0aW9uLmxuZygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdodHRwczovL21hcHMuZ3N0YXRpYy5jb20vY29uc3VtZXIvaW1hZ2VzL2ljb25zLzJ4L3BsYWNlX2dyZXk2NTAucG5nJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5lYXJlc3RBZGRyZXNzLnB1c2goYWRkcmVzcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaGVkQWRkcmVzcyA9IG5lYXJlc3RBZGRyZXNzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc2VhcmNoZWRBZGRyZXNzKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3Qoc3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KS50aGVuKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UXVlcnlQcmVkaWN0aW9ucyhxdWVyeTogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVNlcnZpY2UgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZVNlcnZpY2UoKTtcclxuICAgICAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICBpbnB1dDogcXVlcnlcclxuICAgICAgICB9O1xyXG4gICAgICAgIGxldCByZXN1bHRBZGRyZXNzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU2VydmljZS5nZXRRdWVyeVByZWRpY3Rpb25zKHJlcXVlc3QsIChvcHRpb25zOiBhbnlbXSwgc3RhdHVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlU3RhdHVzLk9LICYmIG9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubWFwKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGRyZXNzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVsZW1lbnQucGxhY2VfaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogZWxlbWVudC5zdHJ1Y3R1cmVkX2Zvcm1hdHRpbmcubWFpbl90ZXh0ICsgJywgJyArIGVsZW1lbnQuc3RydWN0dXJlZF9mb3JtYXR0aW5nLnNlY29uZGFyeV90ZXh0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXM6IGVsZW1lbnQuc3RydWN0dXJlZF9mb3JtYXR0aW5nLm1haW5fdGV4dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NOYW1lOiBlbGVtZW50LnN0cnVjdHVyZWRfZm9ybWF0dGluZy5zZWNvbmRhcnlfdGV4dCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdodHRwczovL21hcHMuZ3N0YXRpYy5jb20vY29uc3VtZXIvaW1hZ2VzL2ljb25zLzJ4L3BsYWNlX2dyZXk2NTAucG5nJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRBZGRyZXNzLnB1c2goYWRkcmVzcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hlZEFkZHJlc3MgPSByZXN1bHRBZGRyZXNzO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zZWFyY2hlZEFkZHJlc3MpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdHVzID09PSBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VzU2VydmljZVN0YXR1cy5aRVJPX1JFU1VMVFMpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRBZGRyZXNzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHRBZGRyZXNzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSkudGhlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEFkZHJlc3MobGF0aXR1ZGU6IG51bWJlciwgbG9uZ2l0dWRlOiBudW1iZXIpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHRoaXMuZ2VvQ29kZXIgPSBuZXcgZ29vZ2xlLm1hcHMuR2VvY29kZXIoKTtcclxuICAgICAgICB0aGlzLnNlYXJjaGVkQWRkcmVzcyA9IFtdO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2VvQ29kZXIuZ2VvY29kZSh7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjoge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhdDogbGF0aXR1ZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgbG5nOiBsb25naXR1ZGVcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSwgKHJlc3VsdHM6IGFueVtdLCBzdGF0dXM6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gZ29vZ2xlLm1hcHMuR2VvY29kZXJTdGF0dXMuT0spIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gcmVzdWx0c1swXTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGRyZXNzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogZWxlbWVudC5wbGFjZV9pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGVsZW1lbnQuZm9ybWF0dGVkX2FkZHJlc3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzOiBlbGVtZW50LmZvcm1hdHRlZF9hZGRyZXNzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzTmFtZTogZWxlbWVudC5mb3JtYXR0ZWRfYWRkcmVzcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJ2h0dHBzOi8vbWFwcy5nc3RhdGljLmNvbS9jb25zdW1lci9pbWFnZXMvaWNvbnMvMngvcGxhY2VfZ3JleTY1MC5wbmcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXRpdHVkZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ2l0dWRlLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hlZEFkZHJlc3MucHVzaChhZGRyZXNzKTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc2VhcmNoZWRBZGRyZXNzKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pLnRoZW4oKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREZXRhaWxzKGRhdGE6IGFueSk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgbGV0IGxhdDtcclxuICAgICAgICBsZXQgbG5nO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGxhY2VzU2VydmljZS5nZXREZXRhaWxzKHsgcGxhY2VJZDogZGF0YS5pZCwgZmllbGRzOiBbJ2dlb21ldHJ5JywgJ2ljb24nXSB9LFxyXG4gICAgICAgICAgICAgICAgKGRldGFpbHM6IHsgZ2VvbWV0cnk6IHsgbG9jYXRpb246IHsgbGF0OiAoKSA9PiBhbnk7IGxuZzogKCkgPT4gYW55OyB9OyB9OyBpY29uOiBhbnk7IH0sIHN0YXR1czogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2VTdGF0dXMuT0spIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGF0ID0gZGV0YWlscy5nZW9tZXRyeS5sb2NhdGlvbi5sYXQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG5nID0gZGV0YWlscy5nZW9tZXRyeS5sb2NhdGlvbi5sbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRkcmVzcyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBkYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGRhdGEubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogZGF0YS5hbGlhcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NOYW1lOiBkYXRhLmFkZHJlc3NOYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF0aXR1ZGU6IGxhdCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdpdHVkZTogbG5nLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogZGF0YS5pY29uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYWRkcmVzcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSkudGhlbigpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTGV0dGVyKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBsZXR0ZXJzID0gL1thLXogQS1aXS9nO1xyXG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5tYXRjaChsZXR0ZXJzKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==