UNPKG

@asoftwareworld/form-builder-pro

Version:

ASW Form Builder Pro 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 b

164 lines 23.3 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.8", ngImport: i0, type: GoogleMapService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GoogleMapService, providedIn: 'root' }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.8", ngImport: i0, type: GoogleMapService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ29vZ2xlLW1hcC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvZm9ybS1jb250cm9sL2dwcy9nb29nbGUtbWFwLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBQ0gsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFNM0MsTUFBTSxPQUFPLGdCQUFnQjtJQUN6QixtQkFBbUIsQ0FBTTtJQUNqQixRQUFRLENBQU07SUFDdEIsZUFBZSxHQUFVLEVBQUUsQ0FBQztJQUM1QixRQUFRLENBQVU7SUFDbEIsU0FBUyxDQUFVO0lBQ25CLGFBQWEsQ0FBTTtJQUVuQixrQkFBa0I7UUFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsUUFBUSxHQUFHLGlCQUFpQixDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsaUJBQWlCLENBQUM7UUFDbkMsSUFBSSxhQUFhLElBQUksU0FBUyxFQUFFLENBQUM7WUFDN0IsU0FBUyxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO2dCQUNsRCxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3hGLElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDM0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNuRCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUM7SUFDTCxDQUFDO0lBRUQsaUJBQWlCO1FBQ2IsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDekYsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDMUIsTUFBTSxjQUFjLEdBQVUsRUFBRSxDQUFDO1FBQ2pDLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDbkMsTUFBTSxZQUFZLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMzRSxNQUFNLE9BQU8sR0FBRztnQkFDWixRQUFRLEVBQUUsWUFBWTtnQkFDdEIsTUFBTSxFQUFFLElBQUk7Z0JBQ1osS0FBSyxFQUFFLENBQUMsZUFBZSxDQUFDO2dCQUN4QixNQUFNLEVBQUUsVUFBVTthQUNyQixDQUFDO1lBQ0YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBYyxFQUFFLE1BQVcsRUFBRSxFQUFFO2dCQUNyRSxJQUFJLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDdkQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO3dCQUNwQixNQUFNLE9BQU8sR0FBRzs0QkFDWixFQUFFLEVBQUUsT0FBTyxDQUFDLFFBQVE7NEJBQ3BCLEtBQUssRUFBRSxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksR0FBRyxPQUFPLENBQUMsUUFBUTs0QkFDN0MsS0FBSyxFQUFFLE9BQU8sQ0FBQyxJQUFJOzRCQUNuQixXQUFXLEVBQUUsT0FBTyxDQUFDLFFBQVE7NEJBQzdCLFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7NEJBQ3pDLFNBQVMsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUU7NEJBQzFDLElBQUksRUFBRSxxRUFBcUU7eUJBQzlFLENBQUM7d0JBQ0YsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDakMsQ0FBQyxDQUFDLENBQUM7b0JBQ0gsSUFBSSxDQUFDLGVBQWUsR0FBRyxjQUFjLENBQUM7b0JBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ2xDLENBQUM7cUJBQU0sQ0FBQztvQkFDSixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ25CLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELG1CQUFtQixDQUFDLEtBQWE7UUFDN0IsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUN4RSxNQUFNLE9BQU8sR0FBRztZQUNaLEtBQUssRUFBRSxLQUFLO1NBQ2YsQ0FBQztRQUNGLElBQUksYUFBYSxHQUFVLEVBQUUsQ0FBQztRQUM5QixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFjLEVBQUUsTUFBVyxFQUFFLEVBQUU7Z0JBQ2xGLElBQUksTUFBTSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsSUFBSSxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUM3RSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7d0JBQ3BCLE1BQU0sT0FBTyxHQUFHOzRCQUNaLEVBQUUsRUFBRSxPQUFPLENBQUMsUUFBUTs0QkFDcEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxTQUFTLEdBQUcsSUFBSSxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxjQUFjOzRCQUNwRyxLQUFLLEVBQUUsT0FBTyxDQUFDLHFCQUFxQixDQUFDLFNBQVM7NEJBQzlDLFdBQVcsRUFBRSxPQUFPLENBQUMscUJBQXFCLENBQUMsY0FBYzs0QkFDekQsSUFBSSxFQUFFLHFFQUFxRTt5QkFDOUUsQ0FBQzt3QkFDRixhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNoQyxDQUFDLENBQUMsQ0FBQztvQkFDSCxJQUFJLENBQUMsZUFBZSxHQUFHLGFBQWEsQ0FBQztvQkFDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDbEMsQ0FBQztxQkFBTSxJQUFJLE1BQU0sS0FBSyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztvQkFDeEUsYUFBYSxHQUFHLEVBQUUsQ0FBQztvQkFDbkIsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2dCQUMzQixDQUFDO1lBQ0wsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNkLENBQUM7SUFFRCxVQUFVLENBQUMsUUFBZ0IsRUFBRSxTQUFpQjtRQUMxQyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMxQixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUNqQjtnQkFDSSxRQUFRLEVBQUU7b0JBQ04sR0FBRyxFQUFFLFFBQVE7b0JBQ2IsR0FBRyxFQUFFLFNBQVM7aUJBQ2pCO2FBQ0osRUFDRCxDQUFDLE9BQWMsRUFBRSxNQUFjLEVBQUUsRUFBRTtnQkFDL0IsSUFBSSxNQUFNLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsRUFBRSxFQUFFLENBQUM7b0JBQzNDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDM0IsTUFBTSxPQUFPLEdBQUc7d0JBQ1osRUFBRSxFQUFFLE9BQU8sQ0FBQyxRQUFRO3dCQUNwQixLQUFLLEVBQUUsT0FBTyxDQUFDLGlCQUFpQjt3QkFDaEMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxpQkFBaUI7d0JBQ2hDLFdBQVcsRUFBRSxPQUFPLENBQUMsaUJBQWlCO3dCQUN0QyxJQUFJLEVBQUUscUVBQXFFO3dCQUMzRSxRQUFRO3dCQUNSLFNBQVM7cUJBQ1osQ0FBQztvQkFDRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDbkMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDbEMsQ0FBQztxQkFBTSxDQUFDO29CQUNKLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDbkIsQ0FBQztZQUNMLENBQUMsQ0FDSixDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRUQsVUFBVSxDQUFDLElBQVM7UUFDaEIsSUFBSSxHQUFHLENBQUM7UUFDUixJQUFJLEdBQUcsQ0FBQztRQUNSLE9BQU8sSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDbkMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLEVBQUUsRUFBRSxDQUFDLE9BQWtGLEVBQUUsTUFBVyxFQUFFLEVBQUU7Z0JBQ2xMLElBQUksTUFBTSxLQUFLLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUN2RCxHQUFHLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQ3RDLEdBQUcsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztvQkFDdEMsTUFBTSxPQUFPLEdBQUc7d0JBQ1osRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO3dCQUNYLEtBQUssRUFBRSxJQUFJLENBQUMsS0FBSzt3QkFDakIsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLO3dCQUNqQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7d0JBQzdCLFFBQVEsRUFBRSxHQUFHO3dCQUNiLFNBQVMsRUFBRSxHQUFHO3dCQUNkLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtxQkFDbEIsQ0FBQztvQkFDRixPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3JCLENBQUM7cUJBQU0sQ0FBQztvQkFDSixNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ25CLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2QsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFhO1FBQ2xCLE1BQU0sT0FBTyxHQUFHLFlBQVksQ0FBQztRQUM3QixJQUFJLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDaEMsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7dUdBckpRLGdCQUFnQjsyR0FBaEIsZ0JBQWdCLGNBRmIsTUFBTTs7MkZBRVQsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBBU1cgKEEgU29mdHdhcmUgV29ybGQpIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGVcbiAqL1xuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuZGVjbGFyZSBjb25zdCBnb29nbGU6IGFueTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBHb29nbGVNYXBTZXJ2aWNlIHtcbiAgICBhdXRvY29tcGxldGVTZXJ2aWNlOiBhbnk7XG4gICAgcHJpdmF0ZSBnZW9Db2RlcjogYW55O1xuICAgIHNlYXJjaGVkQWRkcmVzczogYW55W10gPSBbXTtcbiAgICBsYXRpdHVkZSE6IG51bWJlcjtcbiAgICBsb25naXR1ZGUhOiBudW1iZXI7XG4gICAgcGxhY2VzU2VydmljZTogYW55O1xuXG4gICAgc2V0Q3VycmVudExvY2F0aW9uKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmdlb0NvZGVyID0gbmV3IGdvb2dsZS5tYXBzLkdlb2NvZGVyKCk7XG4gICAgICAgIHRoaXMubGF0aXR1ZGUgPSAzMS42NzQzMTQ3MDY1MDY5NztcbiAgICAgICAgdGhpcy5sb25naXR1ZGUgPSA3NS42NDM0NDgwMjMyOTUxNDtcbiAgICAgICAgaWYgKCdnZW9sb2NhdGlvbicgaW4gbmF2aWdhdG9yKSB7XG4gICAgICAgICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKChwb3NpdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubGF0aXR1ZGUgPSBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUgPyBwb3NpdGlvbi5jb29yZHMubGF0aXR1ZGUgOiAzMS42NzQzMTQ3MDY1MDY5NztcbiAgICAgICAgICAgICAgICB0aGlzLmxvbmdpdHVkZSA9IHBvc2l0aW9uLmNvb3Jkcy5sb25naXR1ZGUgPyBwb3NpdGlvbi5jb29yZHMubG9uZ2l0dWRlIDogNzUuNjQzNDQ4MDIzMjk1MTQ7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRBZGRyZXNzKHRoaXMubGF0aXR1ZGUsIHRoaXMubG9uZ2l0dWRlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0TmVhcmVzdEFkZHJlc3MoKTogUHJvbWlzZTxhbnk+IHtcbiAgICAgICAgdGhpcy5wbGFjZXNTZXJ2aWNlID0gbmV3IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpKTtcbiAgICAgICAgdGhpcy5zZXRDdXJyZW50TG9jYXRpb24oKTtcbiAgICAgICAgY29uc3QgbmVhcmVzdEFkZHJlc3M6IGFueVtdID0gW107XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1c2VyTG9jYXRpb24gPSBuZXcgZ29vZ2xlLm1hcHMuTGF0TG5nKHRoaXMubGF0aXR1ZGUsIHRoaXMubG9uZ2l0dWRlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb246IHVzZXJMb2NhdGlvbixcbiAgICAgICAgICAgICAgICByYWRpdXM6IDE1MDAsXG4gICAgICAgICAgICAgICAgdHlwZXM6IFsnZXN0YWJsaXNobWVudCddLFxuICAgICAgICAgICAgICAgIHJhbmtieTogJ2Rpc3RhbmNlJ1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMucGxhY2VzU2VydmljZS5uZWFyYnlTZWFyY2gocmVxdWVzdCwgKG9wdGlvbnM6IGFueVtdLCBzdGF0dXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgPT09IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZXNTZXJ2aWNlU3RhdHVzLk9LKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMubWFwKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGRyZXNzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBlbGVtZW50LnBsYWNlX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlbGVtZW50Lm5hbWUgKyAnLCAnICsgZWxlbWVudC52aWNpbml0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogZWxlbWVudC5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NOYW1lOiBlbGVtZW50LnZpY2luaXR5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhdGl0dWRlOiBlbGVtZW50Lmdlb21ldHJ5LmxvY2F0aW9uLmxhdCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdpdHVkZTogZWxlbWVudC5nZW9tZXRyeS5sb2NhdGlvbi5sbmcoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnaHR0cHM6Ly9tYXBzLmdzdGF0aWMuY29tL2NvbnN1bWVyL2ltYWdlcy9pY29ucy8yeC9wbGFjZV9ncmV5NjUwLnBuZydcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICBuZWFyZXN0QWRkcmVzcy5wdXNoKGFkZHJlc3MpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWFyY2hlZEFkZHJlc3MgPSBuZWFyZXN0QWRkcmVzcztcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNlYXJjaGVkQWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHN0YXR1cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pLnRoZW4oKTtcbiAgICB9XG5cbiAgICBnZXRRdWVyeVByZWRpY3Rpb25zKHF1ZXJ5OiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICB0aGlzLmF1dG9jb21wbGV0ZVNlcnZpY2UgPSBuZXcgZ29vZ2xlLm1hcHMucGxhY2VzLkF1dG9jb21wbGV0ZVNlcnZpY2UoKTtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICAgICAgICAgIGlucHV0OiBxdWVyeVxuICAgICAgICB9O1xuICAgICAgICBsZXQgcmVzdWx0QWRkcmVzczogYW55W10gPSBbXTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYXV0b2NvbXBsZXRlU2VydmljZS5nZXRRdWVyeVByZWRpY3Rpb25zKHJlcXVlc3QsIChvcHRpb25zOiBhbnlbXSwgc3RhdHVzOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VzU2VydmljZVN0YXR1cy5PSyAmJiBvcHRpb25zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5tYXAoKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFkZHJlc3MgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGVsZW1lbnQucGxhY2VfaWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGVsZW1lbnQuc3RydWN0dXJlZF9mb3JtYXR0aW5nLm1haW5fdGV4dCArICcsICcgKyBlbGVtZW50LnN0cnVjdHVyZWRfZm9ybWF0dGluZy5zZWNvbmRhcnlfdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogZWxlbWVudC5zdHJ1Y3R1cmVkX2Zvcm1hdHRpbmcubWFpbl90ZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NOYW1lOiBlbGVtZW50LnN0cnVjdHVyZWRfZm9ybWF0dGluZy5zZWNvbmRhcnlfdGV4dCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiAnaHR0cHM6Ly9tYXBzLmdzdGF0aWMuY29tL2NvbnN1bWVyL2ltYWdlcy9pY29ucy8yeC9wbGFjZV9ncmV5NjUwLnBuZydcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRBZGRyZXNzLnB1c2goYWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaGVkQWRkcmVzcyA9IHJlc3VsdEFkZHJlc3M7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUodGhpcy5zZWFyY2hlZEFkZHJlc3MpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09PSBnb29nbGUubWFwcy5wbGFjZXMuUGxhY2VzU2VydmljZVN0YXR1cy5aRVJPX1JFU1VMVFMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0QWRkcmVzcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlc3VsdEFkZHJlc3MpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KS50aGVuKCk7XG4gICAgfVxuXG4gICAgZ2V0QWRkcmVzcyhsYXRpdHVkZTogbnVtYmVyLCBsb25naXR1ZGU6IG51bWJlcik6IFByb21pc2U8YW55PiB7XG4gICAgICAgIHRoaXMuZ2VvQ29kZXIgPSBuZXcgZ29vZ2xlLm1hcHMuR2VvY29kZXIoKTtcbiAgICAgICAgdGhpcy5zZWFyY2hlZEFkZHJlc3MgPSBbXTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZ2VvQ29kZXIuZ2VvY29kZShcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYXQ6IGxhdGl0dWRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG5nOiBsb25naXR1ZGVcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgKHJlc3VsdHM6IGFueVtdLCBzdGF0dXM6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09PSBnb29nbGUubWFwcy5HZW9jb2RlclN0YXR1cy5PSykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHJlc3VsdHNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhZGRyZXNzID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBlbGVtZW50LnBsYWNlX2lkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBlbGVtZW50LmZvcm1hdHRlZF9hZGRyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsaWFzOiBlbGVtZW50LmZvcm1hdHRlZF9hZGRyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NOYW1lOiBlbGVtZW50LmZvcm1hdHRlZF9hZGRyZXNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdodHRwczovL21hcHMuZ3N0YXRpYy5jb20vY29uc3VtZXIvaW1hZ2VzL2ljb25zLzJ4L3BsYWNlX2dyZXk2NTAucG5nJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXRpdHVkZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25naXR1ZGVcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaGVkQWRkcmVzcy5wdXNoKGFkZHJlc3MpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLnNlYXJjaGVkQWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3Qoc3RhdHVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pLnRoZW4oKTtcbiAgICB9XG5cbiAgICBnZXREZXRhaWxzKGRhdGE6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGxldCBsYXQ7XG4gICAgICAgIGxldCBsbmc7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICB0aGlzLnBsYWNlc1NlcnZpY2UuZ2V0RGV0YWlscyh7IHBsYWNlSWQ6IGRhdGEuaWQsIGZpZWxkczogWydnZW9tZXRyeScsICdpY29uJ10gfSwgKGRldGFpbHM6IHsgZ2VvbWV0cnk6IHsgbG9jYXRpb246IHsgbGF0OiAoKSA9PiBhbnk7IGxuZzogKCkgPT4gYW55IH0gfTsgaWNvbjogYW55IH0sIHN0YXR1czogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PT0gZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlc1NlcnZpY2VTdGF0dXMuT0spIHtcbiAgICAgICAgICAgICAgICAgICAgbGF0ID0gZGV0YWlscy5nZW9tZXRyeS5sb2NhdGlvbi5sYXQoKTtcbiAgICAgICAgICAgICAgICAgICAgbG5nID0gZGV0YWlscy5nZW9tZXRyeS5sb2NhdGlvbi5sbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRkcmVzcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBkYXRhLmlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGRhdGEubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGlhczogZGF0YS5hbGlhcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3NOYW1lOiBkYXRhLmFkZHJlc3NOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGF0aXR1ZGU6IGxhdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdpdHVkZTogbG5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogZGF0YS5pY29uXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoYWRkcmVzcyk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHN0YXR1cyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pLnRoZW4oKTtcbiAgICB9XG5cbiAgICBpc0xldHRlcih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGxldHRlcnMgPSAvW2EteiBBLVpdL2c7XG4gICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5tYXRjaChsZXR0ZXJzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbiJdfQ==