@aggdirect/coolmap-services 1.2.3 → 1.3.1

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.
@@ -0,0 +1,90 @@
1
+ export class Route {
2
+ index = 0;
3
+ type;
4
+ // Job Code
5
+ customer_contact;
6
+ customer_name;
7
+ delivery_contact;
8
+ delivery_lat;
9
+ delivery_location;
10
+ delivery_lon;
11
+ driver_list;
12
+ material;
13
+ order_number;
14
+ pickup_lat;
15
+ pickup_location;
16
+ pickup_lon;
17
+ project;
18
+ total_count;
19
+ unit;
20
+ values;
21
+ job_id;
22
+ isSelected;
23
+ date;
24
+ // Add Route
25
+ created_at;
26
+ created_by_name;
27
+ customer_id;
28
+ delivery_lat_lng;
29
+ estimated_distance;
30
+ estimated_time;
31
+ materials_id;
32
+ path;
33
+ pickup_lat_lng;
34
+ route_id;
35
+ route_name;
36
+ unit_id;
37
+ note;
38
+ materialLabel;
39
+ isActive;
40
+ prevent;
41
+ }
42
+ export const EstinationData = ['estimated_distance', 'estimated_time'];
43
+ export var EstinationEnum;
44
+ (function (EstinationEnum) {
45
+ EstinationEnum["estimated_distance"] = "miles";
46
+ EstinationEnum["estimated_time"] = "time";
47
+ })(EstinationEnum || (EstinationEnum = {}));
48
+ export const JobCodeOverviewData = ['order_number', 'customer_name', 'project', 'unit', 'material', 'customer_contact', 'delivery_contact', 'pickup_location', 'delivery_location'];
49
+ export var JobCodeOverviewEnum;
50
+ (function (JobCodeOverviewEnum) {
51
+ JobCodeOverviewEnum["material"] = "Material";
52
+ JobCodeOverviewEnum["order_number"] = "Job Code";
53
+ JobCodeOverviewEnum["customer_name"] = "Customer";
54
+ JobCodeOverviewEnum["customer_contact"] = "Customer Contact";
55
+ JobCodeOverviewEnum["delivery_contact"] = "Delivery Contact";
56
+ JobCodeOverviewEnum["project"] = "Project Name";
57
+ JobCodeOverviewEnum["unit"] = "Job Type";
58
+ JobCodeOverviewEnum["pickup_location"] = "Pickup";
59
+ JobCodeOverviewEnum["delivery_location"] = "Delivery";
60
+ })(JobCodeOverviewEnum || (JobCodeOverviewEnum = {}));
61
+ export const DriversmsCardKey = ['order_number', 'date', 'values', 'material', 'unit', 'pickup_location', 'delivery_location'];
62
+ export var DriverSmsCardEnum;
63
+ (function (DriverSmsCardEnum) {
64
+ DriverSmsCardEnum["order_number"] = "Jobcode";
65
+ DriverSmsCardEnum["date"] = "Date";
66
+ DriverSmsCardEnum["values"] = "Total tasks";
67
+ DriverSmsCardEnum["material"] = "Material";
68
+ DriverSmsCardEnum["unit"] = "Unit";
69
+ DriverSmsCardEnum["pickup_location"] = "Pickup Address";
70
+ DriverSmsCardEnum["delivery_location"] = "Delivery Address";
71
+ })(DriverSmsCardEnum || (DriverSmsCardEnum = {}));
72
+ export class PopupData {
73
+ coordinate;
74
+ pickup;
75
+ jobCode;
76
+ customer;
77
+ drop;
78
+ routeType;
79
+ title;
80
+ material;
81
+ type;
82
+ }
83
+ export class CoolmapConfigModel {
84
+ analyticsRESTURL;
85
+ RESTURLPrefix;
86
+ repository;
87
+ mapboxStyle;
88
+ mapboxAccessToken;
89
+ }
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAtc2VydmljZXMvc3JjL2xpYi9zZXJ2aWNlL2RhdGEtbW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsTUFBTSxPQUFPLEtBQUs7SUFDaEIsS0FBSyxHQUFXLENBQUMsQ0FBQztJQUNsQixJQUFJLENBQWlCO0lBQ3JCLFdBQVc7SUFDWCxnQkFBZ0IsQ0FBaUI7SUFDakMsYUFBYSxDQUFpQjtJQUM5QixnQkFBZ0IsQ0FBaUI7SUFDakMsWUFBWSxDQUFpQjtJQUM3QixpQkFBaUIsQ0FBNkI7SUFDOUMsWUFBWSxDQUFpQjtJQUM3QixXQUFXLENBQWM7SUFDekIsUUFBUSxDQUFpQjtJQUN6QixZQUFZLENBQWlCO0lBQzdCLFVBQVUsQ0FBaUI7SUFDM0IsZUFBZSxDQUE2QjtJQUM1QyxVQUFVLENBQWlCO0lBQzNCLE9BQU8sQ0FBaUI7SUFDeEIsV0FBVyxDQUFVO0lBQ3JCLElBQUksQ0FBaUI7SUFDckIsTUFBTSxDQUFNO0lBQ1osTUFBTSxDQUFVO0lBQ2hCLFVBQVUsQ0FBVztJQUNyQixJQUFJLENBQVU7SUFDZCxZQUFZO0lBQ1osVUFBVSxDQUFpQjtJQUMzQixlQUFlLENBQWlCO0lBQ2hDLFdBQVcsQ0FBaUI7SUFDNUIsZ0JBQWdCLENBQWlCO0lBQ2pDLGtCQUFrQixDQUFpQjtJQUNuQyxjQUFjLENBQWlCO0lBQy9CLFlBQVksQ0FBaUI7SUFDN0IsSUFBSSxDQUFvQjtJQUN4QixjQUFjLENBQWlCO0lBQy9CLFFBQVEsQ0FBaUI7SUFDekIsVUFBVSxDQUFpQjtJQUMzQixPQUFPLENBQWlCO0lBQ3hCLElBQUksQ0FBaUI7SUFDckIsYUFBYSxDQUFpQjtJQUM5QixRQUFRLENBQVc7SUFDbkIsT0FBTyxDQUFXO0NBQ25CO0FBRUQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsb0JBQW9CLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQTtBQUN0RSxNQUFNLENBQU4sSUFBWSxjQUdYO0FBSEQsV0FBWSxjQUFjO0lBQ3hCLDhDQUE0QixDQUFBO0lBQzVCLHlDQUF1QixDQUFBO0FBQ3pCLENBQUMsRUFIVyxjQUFjLEtBQWQsY0FBYyxRQUd6QjtBQUVELE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsY0FBYyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxrQkFBa0IsRUFBRSxrQkFBa0IsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsQ0FBQyxDQUFBO0FBQ25MLE1BQU0sQ0FBTixJQUFZLG1CQVVYO0FBVkQsV0FBWSxtQkFBbUI7SUFDN0IsNENBQXFCLENBQUE7SUFDckIsZ0RBQXlCLENBQUE7SUFDekIsaURBQTBCLENBQUE7SUFDMUIsNERBQXFDLENBQUE7SUFDckMsNERBQXFDLENBQUE7SUFDckMsK0NBQXdCLENBQUE7SUFDeEIsd0NBQWlCLENBQUE7SUFDakIsaURBQTBCLENBQUE7SUFDMUIscURBQThCLENBQUE7QUFDaEMsQ0FBQyxFQVZXLG1CQUFtQixLQUFuQixtQkFBbUIsUUFVOUI7QUFFRCxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLGNBQWMsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQTtBQUM5SCxNQUFNLENBQU4sSUFBWSxpQkFRWDtBQVJELFdBQVksaUJBQWlCO0lBQzNCLDZDQUF3QixDQUFBO0lBQ3hCLGtDQUFhLENBQUE7SUFDYiwyQ0FBc0IsQ0FBQTtJQUN0QiwwQ0FBcUIsQ0FBQTtJQUNyQixrQ0FBYSxDQUFBO0lBQ2IsdURBQWtDLENBQUE7SUFDbEMsMkRBQXNDLENBQUE7QUFDeEMsQ0FBQyxFQVJXLGlCQUFpQixLQUFqQixpQkFBaUIsUUFRNUI7QUFFRCxNQUFNLE9BQU8sU0FBUztJQUNwQixVQUFVLENBQW1CO0lBQzdCLE1BQU0sQ0FBZ0I7SUFDdEIsT0FBTyxDQUFpQjtJQUN4QixRQUFRLENBQWlCO0lBQ3pCLElBQUksQ0FBZ0I7SUFDcEIsU0FBUyxDQUFnQjtJQUN6QixLQUFLLENBQWdCO0lBQ3JCLFFBQVEsQ0FBZ0I7SUFDeEIsSUFBSSxDQUFnQjtDQUNyQjtBQUVELE1BQU0sT0FBTyxrQkFBa0I7SUFDN0IsZ0JBQWdCLENBQWdCO0lBQ2hDLGFBQWEsQ0FBZ0I7SUFDN0IsVUFBVSxDQUFnQjtJQUMxQixXQUFXLENBQWdCO0lBQzNCLGlCQUFpQixDQUFnQjtDQUNsQyIsInNvdXJjZXNDb250ZW50IjpbIlxuZXhwb3J0IGNsYXNzIFJvdXRlIHtcbiAgaW5kZXg6IG51bWJlciA9IDA7XG4gIHR5cGU/OiBzdHJpbmcgfCBudWxsO1xuICAvLyBKb2IgQ29kZVxuICBjdXN0b21lcl9jb250YWN0Pzogc3RyaW5nIHwgbnVsbDtcbiAgY3VzdG9tZXJfbmFtZT86IHN0cmluZyB8IG51bGw7XG4gIGRlbGl2ZXJ5X2NvbnRhY3Q/OiBzdHJpbmcgfCBudWxsO1xuICBkZWxpdmVyeV9sYXQ/OiBudW1iZXIgfCBudWxsO1xuICBkZWxpdmVyeV9sb2NhdGlvbj86IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIGRlbGl2ZXJ5X2xvbj86IG51bWJlciB8IG51bGw7XG4gIGRyaXZlcl9saXN0PzogQXJyYXk8YW55PjtcbiAgbWF0ZXJpYWw/OiBzdHJpbmcgfCBudWxsO1xuICBvcmRlcl9udW1iZXI/OiBzdHJpbmcgfCBudWxsO1xuICBwaWNrdXBfbGF0PzogbnVtYmVyIHwgbnVsbDtcbiAgcGlja3VwX2xvY2F0aW9uPzogc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZDtcbiAgcGlja3VwX2xvbj86IG51bWJlciB8IG51bGw7XG4gIHByb2plY3Q/OiBzdHJpbmcgfCBudWxsO1xuICB0b3RhbF9jb3VudD86IG51bWJlcjtcbiAgdW5pdD86IHN0cmluZyB8IG51bGw7XG4gIHZhbHVlczogYW55O1xuICBqb2JfaWQ/OiBzdHJpbmc7XG4gIGlzU2VsZWN0ZWQ/OiBib29sZWFuO1xuICBkYXRlPzogc3RyaW5nO1xuICAvLyBBZGQgUm91dGVcbiAgY3JlYXRlZF9hdD86IHN0cmluZyB8IG51bGw7XG4gIGNyZWF0ZWRfYnlfbmFtZT86IHN0cmluZyB8IG51bGw7XG4gIGN1c3RvbWVyX2lkPzogc3RyaW5nIHwgbnVsbDtcbiAgZGVsaXZlcnlfbGF0X2xuZz86IHN0cmluZyB8IG51bGw7XG4gIGVzdGltYXRlZF9kaXN0YW5jZT86IHN0cmluZyB8IG51bGw7XG4gIGVzdGltYXRlZF90aW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgbWF0ZXJpYWxzX2lkPzogc3RyaW5nIHwgbnVsbDtcbiAgcGF0aD86IFtudW1iZXIsIG51bWJlcl07XG4gIHBpY2t1cF9sYXRfbG5nPzogc3RyaW5nIHwgbnVsbDtcbiAgcm91dGVfaWQ/OiBzdHJpbmcgfCBudWxsO1xuICByb3V0ZV9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgdW5pdF9pZD86IHN0cmluZyB8IG51bGw7XG4gIG5vdGU/OiBzdHJpbmcgfCBudWxsO1xuICBtYXRlcmlhbExhYmVsPzogc3RyaW5nIHwgbnVsbDtcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuICBwcmV2ZW50PzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IEVzdGluYXRpb25EYXRhID0gWydlc3RpbWF0ZWRfZGlzdGFuY2UnLCAnZXN0aW1hdGVkX3RpbWUnXVxuZXhwb3J0IGVudW0gRXN0aW5hdGlvbkVudW0ge1xuICBlc3RpbWF0ZWRfZGlzdGFuY2UgPSBcIm1pbGVzXCIsXG4gIGVzdGltYXRlZF90aW1lID0gXCJ0aW1lXCJcbn1cblxuZXhwb3J0IGNvbnN0IEpvYkNvZGVPdmVydmlld0RhdGEgPSBbJ29yZGVyX251bWJlcicsICdjdXN0b21lcl9uYW1lJywgJ3Byb2plY3QnLCAndW5pdCcsICdtYXRlcmlhbCcsICdjdXN0b21lcl9jb250YWN0JywgJ2RlbGl2ZXJ5X2NvbnRhY3QnLCAncGlja3VwX2xvY2F0aW9uJywgJ2RlbGl2ZXJ5X2xvY2F0aW9uJ11cbmV4cG9ydCBlbnVtIEpvYkNvZGVPdmVydmlld0VudW0ge1xuICBtYXRlcmlhbCA9IFwiTWF0ZXJpYWxcIixcbiAgb3JkZXJfbnVtYmVyID0gXCJKb2IgQ29kZVwiLFxuICBjdXN0b21lcl9uYW1lID0gXCJDdXN0b21lclwiLFxuICBjdXN0b21lcl9jb250YWN0ID0gXCJDdXN0b21lciBDb250YWN0XCIsXG4gIGRlbGl2ZXJ5X2NvbnRhY3QgPSBcIkRlbGl2ZXJ5IENvbnRhY3RcIixcbiAgcHJvamVjdCA9IFwiUHJvamVjdCBOYW1lXCIsXG4gIHVuaXQgPSBcIkpvYiBUeXBlXCIsXG4gIHBpY2t1cF9sb2NhdGlvbiA9IFwiUGlja3VwXCIsXG4gIGRlbGl2ZXJ5X2xvY2F0aW9uID0gXCJEZWxpdmVyeVwiLFxufVxuXG5leHBvcnQgY29uc3QgRHJpdmVyc21zQ2FyZEtleSA9IFsnb3JkZXJfbnVtYmVyJywgJ2RhdGUnLCAndmFsdWVzJywgJ21hdGVyaWFsJywgJ3VuaXQnLCAncGlja3VwX2xvY2F0aW9uJywgJ2RlbGl2ZXJ5X2xvY2F0aW9uJ11cbmV4cG9ydCBlbnVtIERyaXZlclNtc0NhcmRFbnVtIHtcbiAgb3JkZXJfbnVtYmVyID0gJ0pvYmNvZGUnLFxuICBkYXRlID0gJ0RhdGUnLFxuICB2YWx1ZXMgPSAnVG90YWwgdGFza3MnLFxuICBtYXRlcmlhbCA9ICdNYXRlcmlhbCcsXG4gIHVuaXQgPSAnVW5pdCcsXG4gIHBpY2t1cF9sb2NhdGlvbiA9ICdQaWNrdXAgQWRkcmVzcycsXG4gIGRlbGl2ZXJ5X2xvY2F0aW9uID0gJ0RlbGl2ZXJ5IEFkZHJlc3MnXG59XG5cbmV4cG9ydCBjbGFzcyBQb3B1cERhdGEge1xuICBjb29yZGluYXRlOiBbbnVtYmVyLCBudW1iZXJdO1xuICBwaWNrdXA6IHN0cmluZyB8IG51bGw7XG4gIGpvYkNvZGU/OiBzdHJpbmcgfCBudWxsO1xuICBjdXN0b21lcj86IHN0cmluZyB8IG51bGw7XG4gIGRyb3A6IHN0cmluZyB8IG51bGw7XG4gIHJvdXRlVHlwZTogc3RyaW5nIHwgbnVsbDtcbiAgdGl0bGU6IHN0cmluZyB8IG51bGw7XG4gIG1hdGVyaWFsOiBzdHJpbmcgfCBudWxsO1xuICB0eXBlOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgY2xhc3MgQ29vbG1hcENvbmZpZ01vZGVsIHtcbiAgYW5hbHl0aWNzUkVTVFVSTDogc3RyaW5nIHwgbnVsbDtcbiAgUkVTVFVSTFByZWZpeDogc3RyaW5nIHwgbnVsbDtcbiAgcmVwb3NpdG9yeTogc3RyaW5nIHwgbnVsbDtcbiAgbWFwYm94U3R5bGU6IHN0cmluZyB8IG51bGw7XG4gIG1hcGJveEFjY2Vzc1Rva2VuOiBzdHJpbmcgfCBudWxsO1xufVxuXG5leHBvcnQgZGVjbGFyZSBjbGFzcyBDdXN0b21lclJlcG9EZXRhaWxzTW9kZWwge1xuICBjdXN0b21lcjogQ3VzdG9tZXJEZXRhaWxzTW9kZWwgfCBudWxsO1xuICBwcm9qZWN0SWQ6IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBkZWNsYXJlIGNsYXNzIEN1c3RvbWVyRGV0YWlsc01vZGVsIHtcbiAgaWQ6IHN0cmluZyB8IG51bGw7XG4gIG5hbWU6IHN0cmluZyB8IG51bGw7XG59XG4iXX0=
@@ -0,0 +1,293 @@
1
+ import { Injectable, Inject } from '@angular/core';
2
+ import { BehaviorSubject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@angular/common/http";
5
+ import * as i2 from "@angular/material/snack-bar";
6
+ import * as i3 from "./data-model";
7
+ export class UtilsService {
8
+ http;
9
+ snackBar;
10
+ config;
11
+ analyticsRESTURL = '';
12
+ RESTURLPrefix = '';
13
+ pickupOptions = [];
14
+ destOptions = [];
15
+ ownerOptions = [];
16
+ customerOptions = [];
17
+ unitOptions = [];
18
+ materialOptions = [];
19
+ jcodeOptions = [];
20
+ driverOption = [];
21
+ truckingCompanayOption = [];
22
+ routeNameOptions = [];
23
+ preventnavChange = new BehaviorSubject(false);
24
+ navChangeObserve = this.preventnavChange.asObservable();
25
+ clearViewRouteforJobCode = new BehaviorSubject(false);
26
+ clearViewRouteforJobCodeObserve = this.clearViewRouteforJobCode.asObservable();
27
+ preVentJobdetailclose = new BehaviorSubject(false);
28
+ getpreVentJobdetailclose = this.preVentJobdetailclose.asObservable();
29
+ routeDetailsUtility = new BehaviorSubject({});
30
+ getrouteDetailsUtility = this.routeDetailsUtility.asObservable();
31
+ removeMapEntity = new BehaviorSubject({});
32
+ removeMapEntityUtility = this.removeMapEntity.asObservable();
33
+ dict = new Map();
34
+ unitsList;
35
+ materialsList;
36
+ materialsListForCustomer;
37
+ customersList;
38
+ constructor(http, snackBar, config) {
39
+ this.http = http;
40
+ this.snackBar = snackBar;
41
+ this.config = config;
42
+ this.analyticsRESTURL = config.analyticsRESTURL;
43
+ this.RESTURLPrefix = config.RESTURLPrefix;
44
+ }
45
+ getDateFormat(strVal, seprater) {
46
+ seprater = seprater ? seprater : '-';
47
+ const mydate = strVal;
48
+ return mydate?.getFullYear() + seprater + ((mydate ? mydate.getMonth() : 0) + 1) + seprater + mydate?.getDate();
49
+ }
50
+ getData(path) { return this.http.get(`${this.analyticsRESTURL}${this.config.repository}/${path}`); }
51
+ postdata(path, data) { return this.http.post(`${this.analyticsRESTURL}${this.config.repository}/${path}`, data); }
52
+ postDataWithRestUrl(path, data) { return this.http.post(`${this.RESTURLPrefix}${path}`, data); }
53
+ fetchAutoCompleteLocations(keyword) {
54
+ return this.http.get(`https://api.mapbox.com/geocoding/v5/mapbox.places/${keyword}.json?access_token=${this.config.mapboxAccessToken}&country=US`);
55
+ }
56
+ openSnackBar(message, className) {
57
+ this.snackBar.open(message, '', {
58
+ duration: 5000, verticalPosition: 'top', horizontalPosition: 'center', panelClass: [className ? className : 'default']
59
+ });
60
+ }
61
+ makeOptions(item) {
62
+ if (item.order_number) {
63
+ (this.jcodeOptions.findIndex((elem) => elem.job_id === item.job_id) === -1) ? this.jcodeOptions.push({ job_code: item.order_number, job_id: item.job_id }) : null;
64
+ if (item.driver_list && item.driver_list?.length > 0) {
65
+ item.driver_list.forEach((driver) => {
66
+ this.driverOption.findIndex(elem => elem === driver['driver_name']) === -1 ? this.driverOption.push(driver['driver_name']) : null;
67
+ this.truckingCompanayOption.findIndex(elem => elem === driver['trucking_company']) === -1 ? this.truckingCompanayOption.push(driver['trucking_company']) : null;
68
+ });
69
+ }
70
+ }
71
+ ((this.pickupOptions.findIndex((elem) => elem === item.pickup_location)) === -1) ? this.pickupOptions.push(item.pickup_location) : null;
72
+ ((this.destOptions.findIndex((elem) => elem === item.delivery_location)) === -1) ? this.destOptions.push(item.delivery_location) : null;
73
+ (this.customerOptions.findIndex((customer) => customer === item.customer_name) === -1) ? this.customerOptions.push(item.customer_name) : null;
74
+ (this.unitOptions.findIndex((elem) => elem === item.unit) === -1) ? this.unitOptions.push(item.unit) : null;
75
+ (this.materialOptions.findIndex((elem) => elem === item.material) === -1) ? this.materialOptions.push(item.material) : null;
76
+ if (item.route_name)
77
+ this.routeNameOptions.findIndex(elem => elem === item.route_name) === -1 ? this.routeNameOptions.push(item.route_name) : null;
78
+ }
79
+ filter(value, filters) {
80
+ if (typeof value !== 'string') {
81
+ return [];
82
+ }
83
+ const filterValue = value.toLowerCase();
84
+ if (filterValue === '') {
85
+ return [];
86
+ }
87
+ const searchResults = [];
88
+ this.unitOptions.map(unit => {
89
+ if (unit.toLowerCase().includes(filterValue)) {
90
+ searchResults.push({ "type": "unit", "label": unit, "value": unit });
91
+ }
92
+ });
93
+ this.customerOptions.map(unit => {
94
+ if (unit.toLowerCase().includes(filterValue)) {
95
+ searchResults.push({ "type": "customer", "label": unit, "value": unit });
96
+ }
97
+ });
98
+ this.materialOptions.map(unit => {
99
+ if (unit.toLowerCase().includes(filterValue)) {
100
+ searchResults.push({ "type": "material", "label": unit, "value": unit });
101
+ }
102
+ });
103
+ this.pickupOptions.map(unit => {
104
+ if (unit.toLowerCase().includes(filterValue)) {
105
+ searchResults.push({ "type": "pickup location", "label": unit, "value": unit });
106
+ }
107
+ });
108
+ this.destOptions.map(unit => {
109
+ if (unit.toLowerCase().includes(filterValue)) {
110
+ searchResults.push({ "type": "destination location", "label": unit, "value": unit });
111
+ }
112
+ });
113
+ this.jcodeOptions.map(unit => {
114
+ if (unit.job_code.toLowerCase().includes(filterValue)) {
115
+ searchResults.push({ "type": "job", "label": unit['job_code'], "value": unit });
116
+ }
117
+ });
118
+ this.driverOption.map(unit => {
119
+ if (unit.toLowerCase().includes(filterValue)) {
120
+ searchResults.push({ "type": "Driver", "label": unit, "value": unit });
121
+ }
122
+ });
123
+ this.truckingCompanayOption.map(unit => {
124
+ if (unit.toLowerCase().includes(filterValue)) {
125
+ searchResults.push({ "type": "Trucking Company", "label": unit, "value": unit });
126
+ }
127
+ });
128
+ this.routeNameOptions.map(unit => {
129
+ if (unit.toLowerCase().includes(filterValue)) {
130
+ searchResults.push({ "type": "Route name", "label": unit, "value": unit });
131
+ }
132
+ });
133
+ const searchDict = {};
134
+ filters.map((filter) => {
135
+ searchDict[filter['name'] + filter['type']] = filter;
136
+ });
137
+ const furtherFilter = [];
138
+ searchResults.map(search => {
139
+ if ((search['label'] + search['type']) in searchDict) { }
140
+ else {
141
+ furtherFilter.push(search);
142
+ }
143
+ });
144
+ return furtherFilter;
145
+ }
146
+ getSearchResults(list, filterval) {
147
+ return list.filter(element => {
148
+ const result_list_boolean = [];
149
+ if (filterval.length > 0) {
150
+ if (filterval[0]['type'] === 'unit') {
151
+ result_list_boolean.push(filterval[0]['name'] === element[filterval[0]['type']]);
152
+ }
153
+ if (filterval[0]['type'] === 'customer') {
154
+ result_list_boolean.push(filterval[0]['name'] === element['customer_name']);
155
+ }
156
+ if (filterval[0]['type'] === 'material') {
157
+ result_list_boolean.push(filterval[0]['name'] === element[filterval[0]['type']]);
158
+ }
159
+ if (filterval[0]['type'] === 'pickup location') {
160
+ result_list_boolean.push(filterval[0]['name'] === element['pickup_location']);
161
+ }
162
+ if (filterval[0]['type'] === 'destination location') {
163
+ result_list_boolean.push(filterval[0]['name'] === element['delivery_location']);
164
+ }
165
+ if (filterval[0]['type'] === 'job') {
166
+ result_list_boolean.push(filterval[0]['name'] === element['order_number']);
167
+ }
168
+ if (filterval[0]['type'] === 'Route name') {
169
+ result_list_boolean.push(filterval[0]['name'] === element['route_name']);
170
+ }
171
+ if (filterval[0]['type'] === 'Driver') {
172
+ const index = element.driver_list?.findIndex(ele => { return filterval[0]['name'] === ele['driver_name']; });
173
+ if (index !== -1)
174
+ result_list_boolean.push(true);
175
+ }
176
+ if (filterval[0]['type'] === 'Trucking Company') {
177
+ const index = element.driver_list?.findIndex(ele => { return filterval[0]['name'] === ele['trucking_company']; });
178
+ if (index !== -1)
179
+ result_list_boolean.push(true);
180
+ }
181
+ }
182
+ if (result_list_boolean.length > 0) {
183
+ return result_list_boolean.reduce((prev, curr) => prev && curr);
184
+ }
185
+ return false;
186
+ });
187
+ }
188
+ clearOptions() {
189
+ this.pickupOptions = [];
190
+ this.destOptions = [];
191
+ this.ownerOptions = [];
192
+ this.customerOptions = [];
193
+ this.unitOptions = [];
194
+ this.materialOptions = [];
195
+ this.jcodeOptions = [];
196
+ this.routeNameOptions = [];
197
+ }
198
+ setdictValue(key, value) {
199
+ this.dict.set(key, value);
200
+ }
201
+ getdictValue(key) {
202
+ return JSON.parse(this.dict.get(key));
203
+ }
204
+ removedictValue(key) {
205
+ this.dict.delete(key);
206
+ }
207
+ conveySearchIcon(value) {
208
+ if (value && typeof (value) !== 'object')
209
+ return true;
210
+ return false;
211
+ }
212
+ fetchUnitsList() {
213
+ return new Promise((resolve, reject) => {
214
+ if (!this.unitsList) {
215
+ this.getData('unit/list/view').subscribe((res) => {
216
+ if (res) {
217
+ this.unitsList = res.data;
218
+ resolve(this.unitsList);
219
+ }
220
+ });
221
+ }
222
+ else {
223
+ resolve(this.unitsList);
224
+ }
225
+ });
226
+ }
227
+ fetchMaterialsList() {
228
+ return new Promise((resolve, reject) => {
229
+ if (!this.materialsList) {
230
+ this.getData('material/list/view').subscribe(((res) => {
231
+ res.data.sort((a, b) => a.material.localeCompare(b.material));
232
+ this.materialsList = res.data;
233
+ resolve(this.materialsList);
234
+ }));
235
+ }
236
+ else {
237
+ resolve(this.materialsList);
238
+ }
239
+ });
240
+ }
241
+ fetchMaterialsListForCustomer() {
242
+ return new Promise((resolve, reject) => {
243
+ if (!this.materialsListForCustomer) {
244
+ this.getData('material/list/view').subscribe(((res) => {
245
+ let meterialListDetails = [];
246
+ res.data.map((item) => {
247
+ if (item.sub.length > 0) {
248
+ item.sub.map((subItem) => {
249
+ if (subItem.add_to_marketplace) {
250
+ subItem.material = item.material;
251
+ subItem.material_id = item.material_id;
252
+ subItem.label = item.material + ' | ' + subItem.sub_material;
253
+ meterialListDetails.push(subItem);
254
+ }
255
+ });
256
+ }
257
+ });
258
+ meterialListDetails.sort((a, b) => a.label.localeCompare(b.label));
259
+ this.materialsListForCustomer = meterialListDetails;
260
+ resolve(this.materialsListForCustomer);
261
+ }));
262
+ }
263
+ else {
264
+ resolve(this.materialsListForCustomer);
265
+ }
266
+ });
267
+ }
268
+ fetchCustomersList() {
269
+ return new Promise((resolve, reject) => {
270
+ if (!this.customersList) {
271
+ this.getData('company/list/view').subscribe((res) => {
272
+ if (res) {
273
+ this.customersList = res.data;
274
+ resolve(this.customersList);
275
+ }
276
+ });
277
+ }
278
+ else {
279
+ resolve(this.customersList);
280
+ }
281
+ });
282
+ }
283
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: UtilsService, deps: [{ token: i1.HttpClient }, { token: i2.MatSnackBar }, { token: 'memberData' }], target: i0.ɵɵFactoryTarget.Injectable });
284
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: UtilsService, providedIn: 'root' });
285
+ }
286
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: UtilsService, decorators: [{
287
+ type: Injectable,
288
+ args: [{ providedIn: 'root' }]
289
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.MatSnackBar }, { type: i3.CoolmapConfigModel, decorators: [{
290
+ type: Inject,
291
+ args: ['memberData']
292
+ }] }] });
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvb2xtYXAtc2VydmljZXMvc3JjL2xpYi9zZXJ2aWNlL3V0aWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFbkQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQzs7Ozs7QUFJdkMsTUFBTSxPQUFPLFlBQVk7SUE0Qko7SUFBeUI7SUFDWjtJQTVCaEMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0lBQ3RCLGFBQWEsR0FBRyxFQUFFLENBQUM7SUFDbkIsYUFBYSxHQUFVLEVBQUUsQ0FBQztJQUMxQixXQUFXLEdBQVUsRUFBRSxDQUFDO0lBQ3hCLFlBQVksR0FBVSxFQUFFLENBQUM7SUFDekIsZUFBZSxHQUFVLEVBQUUsQ0FBQztJQUM1QixXQUFXLEdBQVUsRUFBRSxDQUFDO0lBQ3hCLGVBQWUsR0FBVSxFQUFFLENBQUM7SUFDNUIsWUFBWSxHQUFVLEVBQUUsQ0FBQztJQUN6QixZQUFZLEdBQVUsRUFBRSxDQUFDO0lBQ3pCLHNCQUFzQixHQUFVLEVBQUUsQ0FBQztJQUNuQyxnQkFBZ0IsR0FBVSxFQUFFLENBQUM7SUFDdEIsZ0JBQWdCLEdBQUcsSUFBSSxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDckQsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3hELHdCQUF3QixHQUFHLElBQUksZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RELCtCQUErQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMvRSxxQkFBcUIsR0FBRyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNuRCx3QkFBd0IsR0FBRyxJQUFJLENB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QyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDeEksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3hJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDOUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUM1RyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMs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QWEsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO29CQUN2RCxJQUFJLEdBQUcsRUFBRTt3QkFBRSxJQUFJLENBQUMsYUFBYSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7d0JBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztxQkFBRTtnQkFDMUUsQ0FBQyxDQUFDLENBQUE7YUFDSDtpQkFBTTtnQkFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQzdCO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO3VHQWpRVSxZQUFZLHVFQTZCYixZQUFZOzJHQTdCWCxZQUFZLGNBREMsTUFBTTs7MkZBQ25CLFlBQVk7a0JBRHhCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkE4QjdCLE1BQU07MkJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc25hY2stYmFyJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29vbG1hcENvbmZpZ01vZGVsLCBSb3V0ZSB9IGZyb20gJy4vZGF0YS1tb2RlbCc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVXRpbHNTZXJ2aWNlIHtcbiAgYW5hbHl0aWNzUkVTVFVSTCA9ICcnO1xuICBSRVNUVVJMUHJlZml4ID0gJyc7XG4gIHBpY2t1cE9wdGlvbnM6IGFueVtdID0gW107XG4gIGRlc3RPcHRpb25zOiBhbnlbXSA9IFtdO1xuICBvd25lck9wdGlvbnM6IGFueVtdID0gW107XG4gIGN1c3RvbWVyT3B0aW9uczogYW55W10gPSBbXTtcbiAgdW5pdE9wdGlvbnM6IGFueVtdID0gW107XG4gIG1hdGVyaWFsT3B0aW9uczogYW55W10gPSBbXTtcbiAgamNvZGVPcHRpb25zOiBhbnlbXSA9IFtdO1xuICBkcml2ZXJPcHRpb246IGFueVtdID0gW107XG4gIHRydWNraW5nQ29tcGFuYXlPcHRpb246IGFueVtdID0gW107XG4gIHJvdXRlTmFtZU9wdGlvbnM6IGFueVtdID0gW107XG4gIHB1YmxpYyBwcmV2ZW50bmF2Q2hhbmdlID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIG5hdkNoYW5nZU9ic2VydmUgPSB0aGlzLnByZXZlbnRuYXZDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG4gIGNsZWFyVmlld1JvdXRlZm9ySm9iQ29kZSA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBjbGVhclZpZXdSb3V0ZWZvckpvYkNvZGVPYnNlcnZlID0gdGhpcy5jbGVhclZpZXdSb3V0ZWZvckpvYkNvZGUuYXNPYnNlcnZhYmxlKCk7XG4gIHByZVZlbnRKb2JkZXRhaWxjbG9zZSA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xuICBnZXRwcmVWZW50Sm9iZGV0YWlsY2xvc2UgPSB0aGlzLnByZVZlbnRKb2JkZXRhaWxjbG9zZS5hc09ic2VydmFibGUoKTtcbiAgcm91dGVEZXRhaWxzVXRpbGl0eSA9IG5ldyBCZWhhdmlvclN1YmplY3Qoe30pO1xuICBnZXRyb3V0ZURldGFpbHNVdGlsaXR5ID0gdGhpcy5yb3V0ZURldGFpbHNVdGlsaXR5LmFzT2JzZXJ2YWJsZSgpO1xuICByZW1vdmVNYXBFbnRpdHkgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHt9KTtcbiAgcmVtb3ZlTWFwRW50aXR5VXRpbGl0eSA9IHRoaXMucmVtb3ZlTWFwRW50aXR5LmFzT2JzZXJ2YWJsZSgpO1xuICBkaWN0ID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgdW5pdHNMaXN0OiBhbnk7XG4gIG1hdGVyaWFsc0xpc3Q6IGFueTtcbiAgbWF0ZXJpYWxzTGlzdEZvckN1c3RvbWVyOiBhbnk7XG4gIGN1c3RvbWVyc0xpc3Q6IGFueTtcbiAgY29uc3RydWN0b3IocHVibGljIGh0dHA6IEh0dHBDbGllbnQsIHB1YmxpYyBzbmFja0JhcjogTWF0U25hY2tCYXIsXG4gICAgQEluamVjdCgnbWVtYmVyRGF0YScpIHByaXZhdGUgY29uZmlnOiBDb29sbWFwQ29uZmlnTW9kZWwpIHtcbiAgICB0aGlzLmFuYWx5dGljc1JFU1RVUkwgPSBjb25maWcuYW5hbHl0aWNzUkVTVFVSTDtcbiAgICB0aGlzLlJFU1RVUkxQcmVmaXggPSBjb25maWcuUkVTVFVSTFByZWZpeDtcbiAgfVxuICBnZXREYXRlRm9ybWF0KHN0clZhbDogRGF0ZSB8IG51bGwsIHNlcHJhdGVyPzogc3RyaW5nKSB7XG4gICAgc2VwcmF0ZXIgPSBzZXByYXRlciA/IHNlcHJhdGVyIDogJy0nO1xuICAgIGNvbnN0IG15ZGF0ZSA9IHN0clZhbDtcbiAgICByZXR1cm4gbXlkYXRlPy5nZXRGdWxsWWVhcigpICsgc2VwcmF0ZXIgKyAoKG15ZGF0ZSA/IG15ZGF0ZS5nZXRNb250aCgpIDogMCkgKyAxKSArIHNlcHJhdGVyICsgbXlkYXRlPy5nZXREYXRlKCk7XG4gIH1cbiAgZ2V0RGF0YShwYXRoOiBzdHJpbmcpIHsgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYCR7dGhpcy5hbmFseXRpY3NSRVNUVVJMfSR7dGhpcy5jb25maWcucmVwb3NpdG9yeX0vJHtwYXRofWApIH1cbiAgcG9zdGRhdGEocGF0aDogc3RyaW5nLCBkYXRhOiBhbnkpIHsgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuYW5hbHl0aWNzUkVTVFVSTH0ke3RoaXMuY29uZmlnLnJlcG9zaXRvcnl9LyR7cGF0aH1gLCBkYXRhKSB9XG4gIHBvc3REYXRhV2l0aFJlc3RVcmwocGF0aDogc3RyaW5nLCBkYXRhOiBhbnkpIHsgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KGAke3RoaXMuUkVTVFVSTFByZWZpeH0ke3BhdGh9YCwgZGF0YSkgfVxuICBmZXRjaEF1dG9Db21wbGV0ZUxvY2F0aW9ucyhrZXl3b3JkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChgaHR0cHM6Ly9hcGkubWFwYm94LmNvbS9nZW9jb2RpbmcvdjUvbWFwYm94LnBsYWNlcy8ke2tleXdvcmR9Lmpzb24/YWNjZXNzX3Rva2VuPSR7dGhpcy5jb25maWcubWFwYm94QWNjZXNzVG9rZW59JmNvdW50cnk9VVNgKVxuICB9XG4gIG9wZW5TbmFja0JhcihtZXNzYWdlOiBzdHJpbmcsIGNsYXNzTmFtZT86IHN0cmluZykge1xuICAgIHRoaXMuc25hY2tCYXIub3BlbihtZXNzYWdlLCAnJywge1xuICAgICAgZHVyYXRpb246IDUwMDAsIHZlcnRpY2FsUG9zaXRpb246ICd0b3AnLCBob3Jpem9udGFsUG9zaXRpb246ICdjZW50ZXInLCBwYW5lbENsYXNzOiBbY2xhc3NOYW1lID8gY2xhc3NOYW1lIDogJ2RlZmF1bHQnXVxuICAgIH0pO1xuICB9XG5cbiAgbWFrZU9wdGlvbnMoaXRlbTogUm91dGUpIHtcbiAgICBpZiAoaXRlbS5vcmRlcl9udW1iZXIpIHtcbiAgICAgICh0aGlzLmpjb2RlT3B0aW9ucy5maW5kSW5kZXgoKGVsZW0pID0+IGVsZW0uam9iX2lkID09PSBpdGVtLmpvYl9pZCkgPT09IC0xKSA/IHRoaXMuamNvZGVPcHRpb25zLnB1c2goeyBqb2JfY29kZTogaXRlbS5vcmRlcl9udW1iZXIsIGpvYl9pZDogaXRlbS5qb2JfaWQgfSkgOiBudWxsO1xuICAgICAgaWYgKGl0ZW0uZHJpdmVyX2xpc3QgJiYgaXRlbS5kcml2ZXJfbGlzdD8ubGVuZ3RoID4gMCkge1xuICAgICAgICBpdGVtLmRyaXZlcl9saXN0LmZvckVhY2goKGRyaXZlcikgPT4ge1xuICAgICAgICAgIHRoaXMuZHJpdmVyT3B0aW9uLmZpbmRJbmRleChlbGVtID0+IGVsZW0gPT09IGRyaXZlclsnZHJpdmVyX25hbWUnXSkgPT09IC0xID8gdGhpcy5kcml2ZXJPcHRpb24ucHVzaChkcml2ZXJbJ2RyaXZlcl9uYW1lJ10pIDogbnVsbDtcbiAgICAgICAgICB0aGlzLnRydWNraW5nQ29tcGFuYXlPcHRpb24uZmluZEluZGV4KGVsZW0gPT4gZWxlbSA9PT0gZHJpdmVyWyd0cnVja2luZ19jb21wYW55J10pID09PSAtMSA/IHRoaXMudHJ1Y2tpbmdDb21wYW5heU9wdGlvbi5wdXNoKGRyaXZlclsndHJ1Y2tpbmdfY29tcGFueSddKSA6IG51bGw7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgICAoKHRoaXMucGlja3VwT3B0aW9ucy5maW5kSW5kZXgoKGVsZW0pID0+IGVsZW0gPT09IGl0ZW0ucGlja3VwX2xvY2F0aW9uKSkgPT09IC0xKSA/IHRoaXMucGlja3VwT3B0aW9ucy5wdXNoKGl0ZW0ucGlja3VwX2xvY2F0aW9uKSA6IG51bGw7XG4gICAgKCh0aGlzLmRlc3RPcHRpb25zLmZpbmRJbmRleCgoZWxlbSkgPT4gZWxlbSA9PT0gaXRlbS5kZWxpdmVyeV9sb2NhdGlvbikpID09PSAtMSkgPyB0aGlzLmRlc3RPcHRpb25zLnB1c2goaXRlbS5kZWxpdmVyeV9sb2NhdGlvbikgOiBudWxsO1xuICAgICh0aGlzLmN1c3RvbWVyT3B0aW9ucy5maW5kSW5kZXgoKGN1c3RvbWVyKSA9PiBjdXN0b21lciA9PT0gaXRlbS5jdXN0b21lcl9uYW1lKSA9PT0gLTEpID8gdGhpcy5jdXN0b21lck9wdGlvbnMucHVzaChpdGVtLmN1c3RvbWVyX25hbWUpIDogbnVsbDtcbiAgICAodGhpcy51bml0T3B0aW9ucy5maW5kSW5kZXgoKGVsZW0pID0+IGVsZW0gPT09IGl0ZW0udW5pdCkgPT09IC0xKSA/IHRoaXMudW5pdE9wdGlvbnMucHVzaChpdGVtLnVuaXQpIDogbnVsbDtcbiAgICAodGhpcy5tYXRlcmlhbE9wdGlvbnMuZmluZEluZGV4KChlbGVtKSA9PiBlbGVtID09PSBpdGVtLm1hdGVyaWFsKSA9PT0gLTEpID8gdGhpcy5tYXRlcmlhbE9wdGlvbnMucHVzaChpdGVtLm1hdGVyaWFsKSA6IG51bGw7XG4gICAgaWYgKGl0ZW0ucm91dGVfbmFtZSkgdGhpcy5yb3V0ZU5hbWVPcHRpb25zLmZpbmRJbmRleChlbGVtID0+IGVsZW0gPT09IGl0ZW0ucm91dGVfbmFtZSkgPT09IC0xID8gdGhpcy5yb3V0ZU5hbWVPcHRpb25zLnB1c2goaXRlbS5yb3V0ZV9uYW1lKSA6IG51bGw7XG4gIH1cblxuICBmaWx0ZXIodmFsdWU6IHN0cmluZywgZmlsdGVyczogYW55KSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHsgcmV0dXJuIFtdIH1cbiAgICBjb25zdCBmaWx0ZXJWYWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKGZpbHRlclZhbHVlID09PSAnJykgeyByZXR1cm4gW10gfVxuICAgIGNvbnN0IHNlYXJjaFJlc3VsdHM6IGFueVtdID0gW107XG4gICAgdGhpcy51bml0T3B0aW9ucy5tYXAodW5pdCA9PiB7XG4gICAgICBpZiAodW5pdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSkge1xuICAgICAgICBzZWFyY2hSZXN1bHRzLnB1c2goeyBcInR5cGVcIjogXCJ1bml0XCIsIFwibGFiZWxcIjogdW5pdCwgXCJ2YWx1ZVwiOiB1bml0IH0pXG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5jdXN0b21lck9wdGlvbnMubWFwKHVuaXQgPT4ge1xuICAgICAgaWYgKHVuaXQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpIHtcbiAgICAgICAgc2VhcmNoUmVzdWx0cy5wdXNoKHsgXCJ0eXBlXCI6IFwiY3VzdG9tZXJcIiwgXCJsYWJlbFwiOiB1bml0LCBcInZhbHVlXCI6IHVuaXQgfSlcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm1hdGVyaWFsT3B0aW9ucy5tYXAodW5pdCA9PiB7XG4gICAgICBpZiAodW5pdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSkge1xuICAgICAgICBzZWFyY2hSZXN1bHRzLnB1c2goeyBcInR5cGVcIjogXCJtYXRlcmlhbFwiLCBcImxhYmVsXCI6IHVuaXQsIFwidmFsdWVcIjogdW5pdCB9KVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucGlja3VwT3B0aW9ucy5tYXAodW5pdCA9PiB7XG4gICAgICBpZiAodW5pdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSkge1xuICAgICAgICBzZWFyY2hSZXN1bHRzLnB1c2goeyBcInR5cGVcIjogXCJwaWNrdXAgbG9jYXRpb25cIiwgXCJsYWJlbFwiOiB1bml0LCBcInZhbHVlXCI6IHVuaXQgfSlcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmRlc3RPcHRpb25zLm1hcCh1bml0ID0+IHtcbiAgICAgIGlmICh1bml0LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyVmFsdWUpKSB7XG4gICAgICAgIHNlYXJjaFJlc3VsdHMucHVzaCh7IFwidHlwZVwiOiBcImRlc3RpbmF0aW9uIGxvY2F0aW9uXCIsIFwibGFiZWxcIjogdW5pdCwgXCJ2YWx1ZVwiOiB1bml0IH0pXG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5qY29kZU9wdGlvbnMubWFwKHVuaXQgPT4ge1xuICAgICAgaWYgKHVuaXQuam9iX2NvZGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpIHtcbiAgICAgICAgc2VhcmNoUmVzdWx0cy5wdXNoKHsgXCJ0eXBlXCI6IFwiam9iXCIsIFwibGFiZWxcIjogdW5pdFsnam9iX2NvZGUnXSwgXCJ2YWx1ZVwiOiB1bml0IH0pXG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5kcml2ZXJPcHRpb24ubWFwKHVuaXQgPT4ge1xuICAgICAgaWYgKHVuaXQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpIHtcbiAgICAgICAgc2VhcmNoUmVzdWx0cy5wdXNoKHsgXCJ0eXBlXCI6IFwiRHJpdmVyXCIsIFwibGFiZWxcIjogdW5pdCwgXCJ2YWx1ZVwiOiB1bml0IH0pXG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLnRydWNraW5nQ29tcGFuYXlPcHRpb24ubWFwKHVuaXQgPT4ge1xuICAgICAgaWYgKHVuaXQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhmaWx0ZXJWYWx1ZSkpIHtcbiAgICAgICAgc2VhcmNoUmVzdWx0cy5wdXNoKHsgXCJ0eXBlXCI6IFwiVHJ1Y2tpbmcgQ29tcGFueVwiLCBcImxhYmVsXCI6IHVuaXQsIFwidmFsdWVcIjogdW5pdCB9KVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMucm91dGVOYW1lT3B0aW9ucy5tYXAodW5pdCA9PiB7XG4gICAgICBpZiAodW5pdC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGZpbHRlclZhbHVlKSkge1xuICAgICAgICBzZWFyY2hSZXN1bHRzLnB1c2goeyBcInR5cGVcIjogXCJSb3V0ZSBuYW1lXCIsIFwibGFiZWxcIjogdW5pdCwgXCJ2YWx1ZVwiOiB1bml0IH0pXG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3Qgc2VhcmNoRGljdDogYW55ID0ge31cbiAgICBmaWx0ZXJzLm1hcCgoZmlsdGVyOiB7IFt4OiBzdHJpbmddOiBhbnk7IH0pID0+IHtcbiAgICAgIHNlYXJjaERpY3RbZmlsdGVyWyduYW1lJ10gKyBmaWx0ZXJbJ3R5cGUnXV0gPSBmaWx0ZXI7XG4gICAgfSlcbiAgICBjb25zdCBmdXJ0aGVyRmlsdGVyOiBhbnlbXSA9IFtdO1xuICAgIHNlYXJjaFJlc3VsdHMubWFwKHNlYXJjaCA9PiB7XG4gICAgICBpZiAoKHNlYXJjaFsnbGFiZWwnXSArIHNlYXJjaFsndHlwZSddKSBpbiBzZWFyY2hEaWN0KSB7IH1cbiAgICAgIGVsc2UgeyBmdXJ0aGVyRmlsdGVyLnB1c2goc2VhcmNoKSB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGZ1cnRoZXJGaWx0ZXI7XG4gIH1cblxuICBnZXRTZWFyY2hSZXN1bHRzKGxpc3Q6IFJvdXRlW10sIGZpbHRlcnZhbDogYW55KTogYW55IHtcbiAgICByZXR1cm4gbGlzdC5maWx0ZXIoZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCByZXN1bHRfbGlzdF9ib29sZWFuID0gW11cbiAgICAgIGlmIChmaWx0ZXJ2YWwubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoZmlsdGVydmFsWzBdWyd0eXBlJ10gPT09ICd1bml0Jykge1xuICAgICAgICAgIHJlc3VsdF9saXN0X2Jvb2xlYW4ucHVzaChmaWx0ZXJ2YWxbMF1bJ25hbWUnXSA9PT0gZWxlbWVudFtmaWx0ZXJ2YWxbMF1bJ3R5cGUnXSBhcyBrZXlvZiBSb3V0ZV0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaWx0ZXJ2YWxbMF1bJ3R5cGUnXSA9PT0gJ2N1c3RvbWVyJykge1xuICAgICAgICAgIHJlc3VsdF9saXN0X2Jvb2xlYW4ucHVzaChmaWx0ZXJ2YWxbMF1bJ25hbWUnXSA9PT0gZWxlbWVudFsnY3VzdG9tZXJfbmFtZSddKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVydmFsWzBdWyd0eXBlJ10gPT09ICdtYXRlcmlhbCcpIHtcbiAgICAgICAgICByZXN1bHRfbGlzdF9ib29sZWFuLnB1c2goZmlsdGVydmFsWzBdWyduYW1lJ10gPT09IGVsZW1lbnRbZmlsdGVydmFsWzBdWyd0eXBlJ10gYXMga2V5b2YgUm91dGVdKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVydmFsWzBdWyd0eXBlJ10gPT09ICdwaWNrdXAgbG9jYXRpb24nKSB7XG4gICAgICAgICAgcmVzdWx0X2xpc3RfYm9vbGVhbi5wdXNoKGZpbHRlcnZhbFswXVsnbmFtZSddID09PSBlbGVtZW50WydwaWNrdXBfbG9jYXRpb24nXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnZhbFswXVsndHlwZSddID09PSAnZGVzdGluYXRpb24gbG9jYXRpb24nKSB7XG4gICAgICAgICAgcmVzdWx0X2xpc3RfYm9vbGVhbi5wdXNoKGZpbHRlcnZhbFswXVsnbmFtZSddID09PSBlbGVtZW50WydkZWxpdmVyeV9sb2NhdGlvbiddKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVydmFsWzBdWyd0eXBlJ10gPT09ICdqb2InKSB7XG4gICAgICAgICAgcmVzdWx0X2xpc3RfYm9vbGVhbi5wdXNoKGZpbHRlcnZhbFswXVsnbmFtZSddID09PSBlbGVtZW50WydvcmRlcl9udW1iZXInXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnZhbFswXVsndHlwZSddID09PSAnUm91dGUgbmFtZScpIHtcbiAgICAgICAgICByZXN1bHRfbGlzdF9ib29sZWFuLnB1c2goZmlsdGVydmFsWzBdWyduYW1lJ10gPT09IGVsZW1lbnRbJ3JvdXRlX25hbWUnXSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbHRlcnZhbFswXVsndHlwZSddID09PSAnRHJpdmVyJykge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gZWxlbWVudC5kcml2ZXJfbGlzdD8uZmluZEluZGV4KGVsZSA9PiB7IHJldHVybiBmaWx0ZXJ2YWxbMF1bJ25hbWUnXSA9PT0gZWxlWydkcml2ZXJfbmFtZSddIH0pO1xuICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpIHJlc3VsdF9saXN0X2Jvb2xlYW4ucHVzaCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVydmFsWzBdWyd0eXBlJ10gPT09ICdUcnVja2luZyBDb21wYW55Jykge1xuICAgICAgICAgIGNvbnN0IGluZGV4ID0gZWxlbWVudC5kcml2ZXJfbGlzdD8uZmluZEluZGV4KGVsZSA9PiB7IHJldHVybiBmaWx0ZXJ2YWxbMF1bJ25hbWUnXSA9PT0gZWxlWyd0cnVja2luZ19jb21wYW55J10gfSk7XG4gICAgICAgICAgaWYgKGluZGV4ICE9PSAtMSkgcmVzdWx0X2xpc3RfYm9vbGVhbi5wdXNoKHRydWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0X2xpc3RfYm9vbGVhbi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiByZXN1bHRfbGlzdF9ib29sZWFuLnJlZHVjZSgocHJldiwgY3VycikgPT4gcHJldiAmJiBjdXJyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9KTtcbiAgfVxuXG4gIGNsZWFyT3B0aW9ucygpIHtcbiAgICB0aGlzLnBpY2t1cE9wdGlvbnMgPSBbXTtcbiAgICB0aGlzLmRlc3RPcHRpb25zID0gW107XG4gICAgdGhpcy5vd25lck9wdGlvbnMgPSBbXTtcbiAgICB0aGlzLmN1c3RvbWVyT3B0aW9ucyA9IFtdO1xuICAgIHRoaXMudW5pdE9wdGlvbnMgPSBbXTtcbiAgICB0aGlzLm1hdGVyaWFsT3B0aW9ucyA9IFtdO1xuICAgIHRoaXMuamNvZGVPcHRpb25zID0gW107XG4gICAgdGhpcy5yb3V0ZU5hbWVPcHRpb25zID0gW107XG4gIH1cbiAgc2V0ZGljdFZhbHVlKGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5kaWN0LnNldChrZXksIHZhbHVlKTtcbiAgfVxuICBnZXRkaWN0VmFsdWUoa2V5OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLmRpY3QuZ2V0KGtleSkpO1xuICB9XG4gIHJlbW92ZWRpY3RWYWx1ZShrZXk6IHN0cmluZykge1xuICAgIHRoaXMuZGljdC5kZWxldGUoa2V5KTtcbiAgfVxuICBjb252ZXlTZWFyY2hJY29uKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mICh2YWx1ZSkgIT09ICdvYmplY3QnKSByZXR1cm4gdHJ1ZTtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBmZXRjaFVuaXRzTGlzdCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnVuaXRzTGlzdCkge1xuICAgICAgICB0aGlzLmdldERhdGEoJ3VuaXQvbGlzdC92aWV3Jykuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChyZXMpIHsgdGhpcy51bml0c0xpc3QgPSByZXMuZGF0YTsgcmVzb2x2ZSh0aGlzLnVuaXRzTGlzdCk7IH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUodGhpcy51bml0c0xpc3QpO1xuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmZXRjaE1hdGVyaWFsc0xpc3QoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghdGhpcy5tYXRlcmlhbHNMaXN0KSB7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgnbWF0ZXJpYWwvbGlzdC92aWV3Jykuc3Vic2NyaWJlKCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICByZXMuZGF0YS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gYS5tYXRlcmlhbC5sb2NhbGVDb21wYXJlKGIubWF0ZXJpYWwpKVxuICAgICAgICAgIHRoaXMubWF0ZXJpYWxzTGlzdCA9IHJlcy5kYXRhXG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLm1hdGVyaWFsc0xpc3QpO1xuICAgICAgICB9KSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUodGhpcy5tYXRlcmlhbHNMaXN0KTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG4gIGZldGNoTWF0ZXJpYWxzTGlzdEZvckN1c3RvbWVyKCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIXRoaXMubWF0ZXJpYWxzTGlzdEZvckN1c3RvbWVyKSB7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgnbWF0ZXJpYWwvbGlzdC92aWV3Jykuc3Vic2NyaWJlKCgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBsZXQgbWV0ZXJpYWxMaXN0RGV0YWlscyA9IFtdXG4gICAgICAgICAgcmVzLmRhdGEubWFwKChpdGVtOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGlmIChpdGVtLnN1Yi5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIGl0ZW0uc3ViLm1hcCgoc3ViSXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdWJJdGVtLmFkZF90b19tYXJrZXRwbGFjZSkge1xuICAgICAgICAgICAgICAgICAgc3ViSXRlbS5tYXRlcmlhbCA9IGl0ZW0ubWF0ZXJpYWw7XG4gICAgICAgICAgICAgICAgICBzdWJJdGVtLm1hdGVyaWFsX2lkID0gaXRlbS5tYXRlcmlhbF9pZDtcbiAgICAgICAgICAgICAgICAgIHN1Ykl0ZW0ubGFiZWwgPSBpdGVtLm1hdGVyaWFsICsgJyB8ICcgKyBzdWJJdGVtLnN1Yl9tYXRlcmlhbDtcbiAgICAgICAgICAgICAgICAgIG1ldGVyaWFsTGlzdERldGFpbHMucHVzaChzdWJJdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgbWV0ZXJpYWxMaXN0RGV0YWlscy5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4gYS5sYWJlbC5sb2NhbGVDb21wYXJlKGIubGFiZWwpKTtcbiAgICAgICAgICB0aGlzLm1hdGVyaWFsc0xpc3RGb3JDdXN0b21lciA9IG1ldGVyaWFsTGlzdERldGFpbHM7XG4gICAgICAgICAgcmVzb2x2ZSh0aGlzLm1hdGVyaWFsc0xpc3RGb3JDdXN0b21lcik7XG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzb2x2ZSh0aGlzLm1hdGVyaWFsc0xpc3RGb3JDdXN0b21lcik7XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZldGNoQ3VzdG9tZXJzTGlzdCgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmN1c3RvbWVyc0xpc3QpIHtcbiAgICAgICAgdGhpcy5nZXREYXRhKCdjb21wYW55L2xpc3QvdmlldycpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAocmVzKSB7IHRoaXMuY3VzdG9tZXJzTGlzdCA9IHJlcy5kYXRhOyByZXNvbHZlKHRoaXMuY3VzdG9tZXJzTGlzdCk7IH1cbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUodGhpcy5jdXN0b21lcnNMaXN0KTtcbiAgICAgIH1cbiAgICB9KVxuICB9XG59Il19