tango-app-ui-manage-stores 3.0.53-dev → 3.0.54-dev
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.
- package/esm2022/lib/components/add-stores-form/add-stores-form.component.mjs +118 -95
- package/esm2022/lib/components/add-stores-form/store-popup/store-popup.component.mjs +27 -0
- package/esm2022/lib/components/group-details/group-details.component.mjs +81 -32
- package/esm2022/lib/components/tango-manage-stores/store-alert-popup/store-alert-popup.component.mjs +3 -3
- package/esm2022/lib/tango-manage-stores.module.mjs +6 -3
- package/fesm2022/tango-app-ui-manage-stores.mjs +220 -126
- package/fesm2022/tango-app-ui-manage-stores.mjs.map +1 -1
- package/lib/components/add-stores-form/add-stores-form.component.d.ts +4 -1
- package/lib/components/add-stores-form/store-popup/store-popup.component.d.ts +13 -0
- package/lib/components/group-details/group-details.component.d.ts +12 -1
- package/lib/tango-manage-stores.module.d.ts +9 -8
- package/package.json +1 -1
|
@@ -5,17 +5,20 @@ import dayjs from "dayjs";
|
|
|
5
5
|
import "dayjs/locale/en";
|
|
6
6
|
import utc from "dayjs/plugin/utc";
|
|
7
7
|
import timezone from "dayjs/plugin/timezone";
|
|
8
|
+
import { StorePopupComponent } from "./store-popup/store-popup.component";
|
|
8
9
|
import * as i0 from "@angular/core";
|
|
9
10
|
import * as i1 from "@angular/forms";
|
|
10
|
-
import * as i2 from "
|
|
11
|
-
import * as i3 from "
|
|
12
|
-
import * as i4 from "
|
|
13
|
-
import * as i5 from "@angular/
|
|
14
|
-
import * as i6 from "@angular
|
|
11
|
+
import * as i2 from "@ng-bootstrap/ng-bootstrap";
|
|
12
|
+
import * as i3 from "../../services/stores.service";
|
|
13
|
+
import * as i4 from "tango-app-ui-shared";
|
|
14
|
+
import * as i5 from "@angular/router";
|
|
15
|
+
import * as i6 from "@angular/common";
|
|
16
|
+
import * as i7 from "@angular-magic/ngx-gp-autocomplete";
|
|
15
17
|
dayjs.extend(utc);
|
|
16
18
|
dayjs.extend(timezone);
|
|
17
19
|
export class AddStoresFormComponent {
|
|
18
20
|
fb;
|
|
21
|
+
modalService;
|
|
19
22
|
storesService;
|
|
20
23
|
ts;
|
|
21
24
|
router;
|
|
@@ -52,8 +55,9 @@ export class AddStoresFormComponent {
|
|
|
52
55
|
this.storeForm.get("pincode")?.setValue(pincode);
|
|
53
56
|
}
|
|
54
57
|
}
|
|
55
|
-
constructor(fb, storesService, ts, router) {
|
|
58
|
+
constructor(fb, modalService, storesService, ts, router) {
|
|
56
59
|
this.fb = fb;
|
|
60
|
+
this.modalService = modalService;
|
|
57
61
|
this.storesService = storesService;
|
|
58
62
|
this.ts = ts;
|
|
59
63
|
this.router = router;
|
|
@@ -174,95 +178,103 @@ export class AddStoresFormComponent {
|
|
|
174
178
|
this.storeForm.get("spocDetails").removeAt(index);
|
|
175
179
|
}
|
|
176
180
|
onSubmit() {
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
if (res.data.store && res.data.store.storeId) {
|
|
238
|
-
this.storesService
|
|
239
|
-
.createInfraTicket({
|
|
240
|
-
storeId: res.data.store.storeId,
|
|
241
|
-
Date: new Date().toISOString().split("T")[0],
|
|
242
|
-
issueType: "installation",
|
|
243
|
-
})
|
|
244
|
-
.subscribe({
|
|
245
|
-
next: (res) => { },
|
|
246
|
-
error: () => { },
|
|
247
|
-
});
|
|
181
|
+
const modalRef = this.modalService.open(StorePopupComponent, { centered: true, size: 'md' });
|
|
182
|
+
modalRef.componentInstance.storeName = this.storeForm.value.storeName;
|
|
183
|
+
modalRef.result.then((result) => {
|
|
184
|
+
if (result) {
|
|
185
|
+
if (result === 'submit') {
|
|
186
|
+
const inValidControls = this.logInvalidControls;
|
|
187
|
+
if (inValidControls.includes('storeName') || inValidControls.includes('address') || inValidControls.includes('country') || inValidControls.includes('state') || inValidControls.includes('city') || inValidControls.includes('pincode')) {
|
|
188
|
+
this.select = 'store_info';
|
|
189
|
+
}
|
|
190
|
+
else if (inValidControls.includes('timeZone') || inValidControls.includes('open') || inValidControls.includes('close') || this.storeForm.hasError('invalidTimeRange')) {
|
|
191
|
+
this.select = 'config';
|
|
192
|
+
}
|
|
193
|
+
else if (inValidControls.includes('spocDetails')) {
|
|
194
|
+
this.select = 'contact';
|
|
195
|
+
}
|
|
196
|
+
this.submitted = true;
|
|
197
|
+
if (this.storeForm.valid) {
|
|
198
|
+
let store = {
|
|
199
|
+
storeName: this.storeForm.value.storeName,
|
|
200
|
+
clientId: this.storeForm.value.clientId,
|
|
201
|
+
businessType: this.storeForm.value.businessType,
|
|
202
|
+
storeType: {
|
|
203
|
+
type: this.storeForm.value.storeType_type,
|
|
204
|
+
name: this.storeForm.value?.storeType_name,
|
|
205
|
+
},
|
|
206
|
+
storeProfile: {
|
|
207
|
+
storeCode: this.storeForm.value?.storeCode,
|
|
208
|
+
address: this.storeForm.value?.address,
|
|
209
|
+
country: this.storeForm.value?.country,
|
|
210
|
+
state: this.storeForm.value?.state,
|
|
211
|
+
city: this.storeForm.value?.city,
|
|
212
|
+
pincode: this.storeForm.value?.pincode,
|
|
213
|
+
timeZone: this.storeForm.value?.timeZone,
|
|
214
|
+
open: this.dayjs(`1991-01-01 ${this.storeForm.value?.open}`, 'YYYY-MM-DD HH:mm').format("HH:mm:ss"),
|
|
215
|
+
close: this.dayjs(`1991-01-01 ${this.storeForm.value?.close}`, 'YYYY-MM-DD HH:mm').format("HH:mm:ss"),
|
|
216
|
+
},
|
|
217
|
+
// edge: {
|
|
218
|
+
// camDetails: {
|
|
219
|
+
// cameras: this.storeForm.value?.cameras,
|
|
220
|
+
// },
|
|
221
|
+
// },
|
|
222
|
+
spocDetails: [
|
|
223
|
+
{
|
|
224
|
+
name: this.storeForm.value?.spocDetails[0].name,
|
|
225
|
+
email: this.storeForm.value?.spocDetails[0].email,
|
|
226
|
+
contact: this.storeForm.value?.spocDetails[0].contact,
|
|
227
|
+
designation: this.storeForm.value?.spocDetails[0].designation,
|
|
228
|
+
},
|
|
229
|
+
],
|
|
230
|
+
storeConnectionId: this.storeForm.value?.storeConnectionId,
|
|
231
|
+
};
|
|
232
|
+
if (this.storeForm.value.spocDetails.length > 1) {
|
|
233
|
+
for (let i = 1; i < this.storeForm.value.spocDetails.length; i++) {
|
|
234
|
+
store.spocDetails.push({
|
|
235
|
+
name: this.storeForm.value?.spocDetails[i].name,
|
|
236
|
+
email: this.storeForm.value?.spocDetails[i].email,
|
|
237
|
+
contact: this.storeForm.value?.spocDetails[i].contact,
|
|
238
|
+
designation: this.storeForm.value?.spocDetails[i].designation,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
248
241
|
}
|
|
249
|
-
this.
|
|
242
|
+
this.storesService.createStore(store).subscribe({
|
|
243
|
+
next: (res) => {
|
|
244
|
+
if (res && res.code === 200 && res.status === "success") {
|
|
245
|
+
this.ts.getSuccessToast("Store Created Successfully!");
|
|
246
|
+
if (res.data.store && res.data.store.storeId) {
|
|
247
|
+
this.storesService
|
|
248
|
+
.createInfraTicket({
|
|
249
|
+
storeId: res.data.store.storeId,
|
|
250
|
+
Date: new Date().toISOString().split("T")[0],
|
|
251
|
+
issueType: "installation",
|
|
252
|
+
})
|
|
253
|
+
.subscribe({
|
|
254
|
+
next: (res) => { },
|
|
255
|
+
error: () => { },
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
this.router.navigate(["/manage/stores"]);
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
this.ts.getErrorToast("Unable to create store!");
|
|
262
|
+
}
|
|
263
|
+
},
|
|
264
|
+
error: (error) => {
|
|
265
|
+
this.ts.getErrorToast(error?.error?.error?.error ? error?.error?.error?.error : "Unable to create Store!");
|
|
266
|
+
if (error?.error?.error?.error === 'StoreName already exists') {
|
|
267
|
+
this.isStoreNameExist = true;
|
|
268
|
+
this.select = 'store_info';
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
});
|
|
250
272
|
}
|
|
251
273
|
else {
|
|
252
|
-
this.ts.getErrorToast("Unable to create store!");
|
|
253
|
-
}
|
|
254
|
-
},
|
|
255
|
-
error: (error) => {
|
|
256
|
-
this.ts.getErrorToast(error?.error?.error?.error ? error?.error?.error?.error : "Unable to create Store!");
|
|
257
|
-
if (error?.error?.error?.error === 'StoreName already exists') {
|
|
258
|
-
this.isStoreNameExist = true;
|
|
259
|
-
this.select = 'store_info';
|
|
260
274
|
}
|
|
261
275
|
}
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
else {
|
|
265
|
-
}
|
|
276
|
+
}
|
|
277
|
+
});
|
|
266
278
|
}
|
|
267
279
|
navigateToAddStore() {
|
|
268
280
|
this.router.navigate(["/manage/stores/addition-method"]);
|
|
@@ -285,14 +297,25 @@ export class AddStoresFormComponent {
|
|
|
285
297
|
}
|
|
286
298
|
return invalidControls;
|
|
287
299
|
}
|
|
288
|
-
|
|
289
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: AddStoresFormComponent, selector: "lib-add-stores-form", viewQueries: [{ propertyName: "placesRef", first: true, predicate: ["ngxPlaces"], descendants: true }], ngImport: i0, template: "<div class=\"row mt-3 mb-6\">\r\n <div class=\"col-md-3 col-lg-3 col-xl-3 col-xxl-3\" id=\"left-container\">\r\n <div class=\"card card-flush h-100 mb-0\">\r\n <!--begin::Aside content-->\r\n <div class=\"card-body px-5\">\r\n <div\r\n class=\"menu menu-column menu-rounded menu-state-bg menu-state-title-primary menu-state-icon-primary menu-state-bullet-primary\">\r\n <!--begin::Menu item-->\r\n <div class=\"menu-item my-2\">\r\n <!--begin::Inbox-->\r\n <span class=\"menu-link pe-none\" [ngClass]=\"{ 'active': select === 'store_info' }\">\r\n <span class=\"menu-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path stroke=\"currentColor\"\r\n d=\"M3.08995 6.88369L3.02401 6.98669C2.30358 8.25557 3.06101 9.87945 4.46464 10.0662C4.58627 10.0811 4.70112 10.0892 4.8145 10.0892C5.55255 10.0892 6.20523 9.77229 6.65953 9.27917L7.21286 8.67854L7.76432 9.28089C8.21367 9.77171 8.8652 10.0892 9.60776 10.0892C10.3471 10.0892 11.0022 9.77137 11.4512 9.28089L12.0044 8.67665L12.5576 9.28089C13.0066 9.77137 13.6617 10.0892 14.401 10.0892C15.1404 10.0892 15.7954 9.77137 16.2445 9.28089L16.7977 8.67665L17.3508 9.28089C17.7999 9.77137 18.4549 10.0892 19.1943 10.0892C19.3041 10.0892 19.4223 10.0811 19.5433 10.0663C20.9772 9.87168 21.7355 8.16387 20.9155 6.88419C20.9154 6.88413 20.9154 6.88407 20.9154 6.88402L18.8056 3.59429L18.8056 3.59429L18.8046 3.59282C18.7582 3.52002 18.6649 3.46423 18.5584 3.46423H5.44307C5.3365 3.46423 5.24326 3.52002 5.19681 3.59282L5.19619 3.59379L3.08995 6.88369ZM4.81818 12.7499C4.71644 12.7499 4.616 12.7468 4.5169 12.741V16.6428V18.9642C4.5169 19.8211 5.22663 20.5357 6.11942 20.5357H17.882C18.7748 20.5357 19.4845 19.8211 19.4845 18.9642V16.6428V12.7415C19.3874 12.747 19.2893 12.7499 19.1906 12.7499C19.0022 12.7499 18.8157 12.7398 18.632 12.7202V16.6428V17.3928H17.882H6.11942H5.36942V16.6428V12.721C5.18866 12.74 5.00472 12.7499 4.81818 12.7499Z\" />\r\n </svg></span>\r\n <span class=\"menu-title fw-bold \">Store Info</span>\r\n </span>\r\n <!--end::Inbox-->\r\n </div>\r\n <div class=\"menu-item my-2\">\r\n <!--begin::Inbox-->\r\n <span class=\"menu-link pe-none\" [ngClass]=\"{ 'active': select === 'config' }\">\r\n <span class=\"menu-icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_1017_22270)\">\r\n <path\r\n d=\"M12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15Z\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M19.4 15C19.2669 15.3016 19.2272 15.6362 19.286 15.9606C19.3448 16.285 19.4995 16.5843 19.73 16.82L19.79 16.88C19.976 17.0657 20.1235 17.2863 20.2241 17.5291C20.3248 17.7719 20.3766 18.0322 20.3766 18.295C20.3766 18.5578 20.3248 18.8181 20.2241 19.0609C20.1235 19.3037 19.976 19.5243 19.79 19.71C19.6043 19.896 19.3837 20.0435 19.1409 20.1441C18.8981 20.2448 18.6378 20.2966 18.375 20.2966C18.1122 20.2966 17.8519 20.2448 17.6091 20.1441C17.3663 20.0435 17.1457 19.896 16.96 19.71L16.9 19.65C16.6643 19.4195 16.365 19.2648 16.0406 19.206C15.7162 19.1472 15.3816 19.1869 15.08 19.32C14.7842 19.4468 14.532 19.6572 14.3543 19.9255C14.1766 20.1938 14.0813 20.5082 14.08 20.83V21C14.08 21.5304 13.8693 22.0391 13.4942 22.4142C13.1191 22.7893 12.6104 23 12.08 23C11.5496 23 11.0409 22.7893 10.6658 22.4142C10.2907 22.0391 10.08 21.5304 10.08 21V20.91C10.0723 20.579 9.96512 20.258 9.77251 19.9887C9.5799 19.7194 9.31074 19.5143 9 19.4C8.69838 19.2669 8.36381 19.2272 8.03941 19.286C7.71502 19.3448 7.41568 19.4995 7.18 19.73L7.12 19.79C6.93425 19.976 6.71368 20.1235 6.47088 20.2241C6.22808 20.3248 5.96783 20.3766 5.705 20.3766C5.44217 20.3766 5.18192 20.3248 4.93912 20.2241C4.69632 20.1235 4.47575 19.976 4.29 19.79C4.10405 19.6043 3.95653 19.3837 3.85588 19.1409C3.75523 18.8981 3.70343 18.6378 3.70343 18.375C3.70343 18.1122 3.75523 17.8519 3.85588 17.6091C3.95653 17.3663 4.10405 17.1457 4.29 16.96L4.35 16.9C4.58054 16.6643 4.73519 16.365 4.794 16.0406C4.85282 15.7162 4.81312 15.3816 4.68 15.08C4.55324 14.7842 4.34276 14.532 4.07447 14.3543C3.80618 14.1766 3.49179 14.0813 3.17 14.08H3C2.46957 14.08 1.96086 13.8693 1.58579 13.4942C1.21071 13.1191 1 12.6104 1 12.08C1 11.5496 1.21071 11.0409 1.58579 10.6658C1.96086 10.2907 2.46957 10.08 3 10.08H3.09C3.42099 10.0723 3.742 9.96512 4.0113 9.77251C4.28059 9.5799 4.48572 9.31074 4.6 9C4.73312 8.69838 4.77282 8.36381 4.714 8.03941C4.65519 7.71502 4.50054 7.41568 4.27 7.18L4.21 7.12C4.02405 6.93425 3.87653 6.71368 3.77588 6.47088C3.67523 6.22808 3.62343 5.96783 3.62343 5.705C3.62343 5.44217 3.67523 5.18192 3.77588 4.93912C3.87653 4.69632 4.02405 4.47575 4.21 4.29C4.39575 4.10405 4.61632 3.95653 4.85912 3.85588C5.10192 3.75523 5.36217 3.70343 5.625 3.70343C5.88783 3.70343 6.14808 3.75523 6.39088 3.85588C6.63368 3.95653 6.85425 4.10405 7.04 4.29L7.1 4.35C7.33568 4.58054 7.63502 4.73519 7.95941 4.794C8.28381 4.85282 8.61838 4.81312 8.92 4.68H9C9.29577 4.55324 9.54802 4.34276 9.72569 4.07447C9.90337 3.80618 9.99872 3.49179 10 3.17V3C10 2.46957 10.2107 1.96086 10.5858 1.58579C10.9609 1.21071 11.4696 1 12 1C12.5304 1 13.0391 1.21071 13.4142 1.58579C13.7893 1.96086 14 2.46957 14 3V3.09C14.0013 3.41179 14.0966 3.72618 14.2743 3.99447C14.452 4.26276 14.7042 4.47324 15 4.6C15.3016 4.73312 15.6362 4.77282 15.9606 4.714C16.285 4.65519 16.5843 4.50054 16.82 4.27L16.88 4.21C17.0657 4.02405 17.2863 3.87653 17.5291 3.77588C17.7719 3.67523 18.0322 3.62343 18.295 3.62343C18.5578 3.62343 18.8181 3.67523 19.0609 3.77588C19.3037 3.87653 19.5243 4.02405 19.71 4.21C19.896 4.39575 20.0435 4.61632 20.1441 4.85912C20.2448 5.10192 20.2966 5.36217 20.2966 5.625C20.2966 5.88783 20.2448 6.14808 20.1441 6.39088C20.0435 6.63368 19.896 6.85425 19.71 7.04L19.65 7.1C19.4195 7.33568 19.2648 7.63502 19.206 7.95941C19.1472 8.28381 19.1869 8.61838 19.32 8.92V9C19.4468 9.29577 19.6572 9.54802 19.9255 9.72569C20.1938 9.90337 20.5082 9.99872 20.83 10H21C21.5304 10 22.0391 10.2107 22.4142 10.5858C22.7893 10.9609 23 11.4696 23 12C23 12.5304 22.7893 13.0391 22.4142 13.4142C22.0391 13.7893 21.5304 14 21 14H20.91C20.5882 14.0013 20.2738 14.0966 20.0055 14.2743C19.7372 14.452 19.5268 14.7042 19.4 15Z\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1017_22270\">\r\n <rect width=\"24\" height=\"24\" fill=\"currentColor\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"menu-title fw-bold \">Store Configuration</span>\r\n </span>\r\n <!--end::Inbox-->\r\n </div>\r\n\r\n <!--end::Menu item-->\r\n\r\n\r\n <!--begin::Menu item-->\r\n <div class=\"menu-item my-2\">\r\n <!--begin::Draft-->\r\n <span class=\"menu-link pe-none\" [ngClass]=\"{ 'active': select === 'contact' }\">\r\n <span class=\"menu-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M17 21V19C17 17.9391 16.5786 16.9217 15.8284 16.1716C15.0783 15.4214 14.0609 15 13 15H5C3.93913 15 2.92172 15.4214 2.17157 16.1716C1.42143 16.9217 1 17.9391 1 19V21M23 21V19C22.9993 18.1137 22.7044 17.2528 22.1614 16.5523C21.6184 15.8519 20.8581 15.3516 20 15.13M16 3.13C16.8604 3.3503 17.623 3.8507 18.1676 4.55231C18.7122 5.25392 19.0078 6.11683 19.0078 7.005C19.0078 7.89317 18.7122 8.75608 18.1676 9.45769C17.623 10.1593 16.8604 10.6597 16 10.88M13 7C13 9.20914 11.2091 11 9 11C6.79086 11 5 9.20914 5 7C5 4.79086 6.79086 3 9 3C11.2091 3 13 4.79086 13 7Z\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <span class=\"menu-title fw-bold \">Contact Details</span>\r\n </span>\r\n <!--end::Draft-->\r\n </div>\r\n <!--end::Menu item-->\r\n <!--begin::Menu item-->\r\n <div class=\"menu-item my-2\">\r\n <!--begin::Trash-->\r\n <span class=\"menu-link pe-none\" [ngClass]=\"{ 'active': select === 'review'}\">\r\n <span class=\"menu-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M6 1C5.20435 1 4.44129 1.31607 3.87868 1.87868C3.31607 2.44129 3 3.20435 3 4V20C3 20.7957 3.31607 21.5587 3.87868 22.1213C4.44129 22.6839 5.20435 23 6 23H12H18C18.7957 23 19.5587 22.6839 20.1213 22.1213C20.6839 21.5587 21 20.7957 21 20V16.4208L19 18.4208V20C19 20.2652 18.8946 20.5196 18.7071 20.7071C18.5196 20.8946 18.2652 21 18 21H16.4208L15.3286 22.0922L12 23L12.5455 21H6C5.73478 21 5.48043 20.8946 5.29289 20.7071C5.10536 20.5196 5 20.2652 5 20V4C5 3.73478 5.10536 3.48043 5.29289 3.29289C5.48043 3.10536 5.73478 3 6 3H12V9C12 9.55228 12.4477 10 13 10H19V13.5792L21 11.5792V9C21 8.73478 20.8946 8.48043 20.7071 8.29289L13.7071 1.29289C13.5196 1.10536 13.2652 1 13 1H6ZM17.5858 8L14 4.41421V8H17.5858Z\"\r\n fill=\"currentColor\" />\r\n <path\r\n d=\"M20.0779 11.5014C20.2369 11.3424 20.4256 11.2163 20.6333 11.1303C20.8409 11.0443 21.0635 11 21.2883 11C21.5131 11 21.7357 11.0443 21.9434 11.1303C22.151 11.2163 22.3397 11.3424 22.4987 11.5014C22.6576 11.6603 22.7837 11.849 22.8698 12.0567C22.9558 12.2644 23.0001 12.487 23.0001 12.7117C23.0001 12.9365 22.9558 13.1591 22.8698 13.3668C22.7837 13.5745 22.6576 13.7632 22.4987 13.9221L15.3286 22.0923L12 23.0001L12.9078 19.6715L20.0779 11.5014Z\"\r\n stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <span class=\"menu-title fw-bold \">Review & Submit</span>\r\n </span>\r\n <!--end::Trash-->\r\n </div>\r\n <!--end::Menu item-->\r\n\r\n\r\n </div>\r\n </div>\r\n <!--end::Menu-->\r\n </div>\r\n </div>\r\n <div class=\"col-md-9 col-lg-9 col-xl-9 col-xxl-9\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-bottom-0\">\r\n <h1\r\n class=\"page-heading d-flex text-dark fw-bold fs-2 flex-column justify-content-center my-0 sub-head\">\r\n <span *ngIf=\"select === 'store_info'\">Enter Your Store Details</span>\r\n <span *ngIf=\"select === 'config'\">Enter Your Store Configuration</span>\r\n <span *ngIf=\"select === 'contact'\">Enter Primary SPOC details</span>\r\n <span *ngIf=\"select === 'review'\">Review & submit</span>\r\n </h1>\r\n <div [hidden]=\"select !== 'contact'\" class=\"card-toolbar\">\r\n <button (click)=\"addAltSpoc()\" class=\"btn btn-light-primary1 btn-sm\"><svg class=\"me-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"14\" viewBox=\"0 0 18 14\" fill=\"none\">\r\n <path\r\n d=\"M2.7 3.5C2.7 2.57174 3.07928 1.6815 3.75442 1.02513C4.42955 0.368749 5.34522 0 6.3 0C7.25478 0 8.17045 0.368749 8.84558 1.02513C9.52072 1.6815 9.9 2.57174 9.9 3.5C9.9 4.42826 9.52072 5.3185 8.84558 5.97487C8.17045 6.63125 7.25478 7 6.3 7C5.34522 7 4.42955 6.63125 3.75442 5.97487C3.07928 5.3185 2.7 4.42826 2.7 3.5ZM0 13.1879C0 10.4945 2.24437 8.3125 5.01469 8.3125H7.58531C10.3556 8.3125 12.6 10.4945 12.6 13.1879C12.6 13.6363 12.2259 14 11.7647 14H0.835312C0.374063 14 0 13.6363 0 13.1879ZM14.175 8.53125V6.78125H12.375C12.0009 6.78125 11.7 6.48867 11.7 6.125C11.7 5.76133 12.0009 5.46875 12.375 5.46875H14.175V3.71875C14.175 3.35508 14.4759 3.0625 14.85 3.0625C15.2241 3.0625 15.525 3.35508 15.525 3.71875V5.46875H17.325C17.6991 5.46875 18 5.76133 18 6.125C18 6.48867 17.6991 6.78125 17.325 6.78125H15.525V8.53125C15.525 8.89492 15.2241 9.1875 14.85 9.1875C14.4759 9.1875 14.175 8.89492 14.175 8.53125Z\"\r\n fill=\"#00A3FF\" />\r\n </svg>Add Alternate SPOC</button>\r\n </div>\r\n </div>\r\n <div class=\"card-body pt-1\">\r\n <form [formGroup]=\"storeForm\">\r\n <!-- Store Info Start -->\r\n <div [hidden]=\"select !== 'store_info'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12 col-lg-6 mb-5\">\r\n <label for=\"storeName\" class=\"form-label\">Store Name <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"storeName\" formControlName=\"storeName\" (input)=\"isStoreNameExist = false\"\r\n [ngClass]=\"{ 'is-invalid':(storeForm.get('storeName')?.invalid || isStoreNameExist) && (storeForm.get('storeName')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('storeName')?.touched || submitted) && storeForm.get('storeName')?.hasError('required')\">\r\n Store Name is required.\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('storeName')?.touched || submitted) && isStoreNameExist\">\r\n Store Name already exists.\r\n </small>\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 mb-5\">\r\n <label for=\"storeCode\" class=\"form-label\">Store Code / Ref Code (optional)</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"storeCode\" formControlName=\"storeCode\">\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 mb-5\">\r\n <label for=\"businessType\" class=\"form-label\">Business Type <span class=\"alert-required\">*</span></label>\r\n <select class=\"form-select\" id=\"businessType\" formControlName=\"businessType\">\r\n <option value=\"COCO\">COCO</option>\r\n <option value=\"COFO\">COFO</option>\r\n <option value=\"FOFO\">FOFO</option>\r\n <option value=\"FOCO\">FOCO</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 mb-5\">\r\n <label for=\"storeType\" class=\"form-label\">Store Type <span class=\"alert-required\">*</span></label>\r\n <select class=\"form-select\" id=\"storeType\" formControlName=\"storeType_type\">\r\n <option value=\"High Street\">High Street</option>\r\n <option value=\"Mall Store\">Mall</option>\r\n <option value=\"Kiosk\">Kiosk</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-12 mb-5\" *ngIf=\"storeForm.get('storeType_type')?.value === 'Mall Store'\">\r\n <label for=\"mallName\" class=\"form-label\">Enter Mall Name </label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"mallName\" formControlName=\"storeType_name\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('storeType_name')?.invalid && (storeForm.get('storeType_name')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('storeType_name')?.touched || submitted) && storeForm.get('storeType_name')?.hasError('required')\">\r\n Mall Name is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-12 mb-5\">\r\n <label for=\"address\" class=\"form-label\">Address <span class=\"alert-required\">*</span></label>\r\n <input type=\"text\" class=\"form-control\" id=\"address\" formControlName=\"address\" #placesRef=\"ngx-places\" ngx-gp-autocomplete (onAddressChange)=\"handleAddressChange($event)\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('address')?.invalid && (storeForm.get('address')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('address')?.touched || submitted) && storeForm.get('address')?.hasError('required')\">\r\n Address is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"country\" class=\"form-label\">Country <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"country\" formControlName=\"country\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('country')?.invalid && (storeForm.get('country')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('country')?.touched || submitted) && storeForm.get('country')?.hasError('required')\">\r\n Country is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"state\" class=\"form-label\">State <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"state\" formControlName=\"state\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('state')?.invalid && (storeForm.get('state')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('state')?.touched || submitted) && storeForm.get('state')?.hasError('required')\">\r\n State is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"city\" class=\"form-label\">City / Town <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"city\" formControlName=\"city\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('city')?.invalid && (storeForm.get('city')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('city')?.touched || submitted) && storeForm.get('city')?.hasError('required')\">\r\n City is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"pincode\" class=\"form-label\">Pin / Zip Code <span class=\"alert-required\">*</span> </label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"pincode\" formControlName=\"pincode\" maxlength=\"6\" minlength=\"5\" (keypress)=\"omit_special_char($event)\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('pincode')?.invalid && (storeForm.get('pincode')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('pincode')?.touched || submitted) && storeForm.get('pincode')?.hasError('required')\">\r\n Pincode is required.\r\n </small>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12 text-end\">\r\n <button type=\"button\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\" (click)=\"navigateToAddStore()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"validateStoreInfo() === true\"\r\n (click)=\"goToConfiguration()\">Next</button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Store Info End -->\r\n\r\n <!-- Store Configuration Start -->\r\n <div [hidden]=\"select !== 'config'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"timeZone\" class=\"form-label\">Time Zone</label>\r\n <!-- <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"timeZone\" formControlName=\"timeZone\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('timeZone')?.invalid && storeForm.get('timeZone')?.touched}\"> -->\r\n <select class=\"form-select\" id=\"timeZone\" formControlName=\"timeZone\">\r\n <option *ngFor=\"let timezone of timezones\" [value]=\"timezone\">{{ timezone }}</option>\r\n </select>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('timeZone')?.touched || submitted) && storeForm.get('timeZone')?.hasError('required')\">\r\n Time Zone is required.\r\n </small>\r\n </div>\r\n <!-- <div class=\"col-md-6 mb-5\">\r\n <label for=\"noOfCameras\" class=\"form-label\">No of Cameras</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"noOfCameras\" formControlName=\"cameras\" (keypress)=\"omit_special_char($event)\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('cameras')?.invalid && storeForm.get('cameras')?.touched}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"storeForm.get('cameras')?.touched && storeForm.get('cameras')?.hasError('required')\">\r\n No of Cameras is required.\r\n </small>\r\n </div> -->\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"storeOpenTime\" class=\"form-label\">Store Open Time</label>\r\n <input autocomplete=\"off\" type=\"time\" class=\"form-control\" id=\"storeOpenTime\" formControlName=\"open\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('open')?.invalid && (storeForm.get('open')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('open')?.touched || submitted) && storeForm.get('open')?.hasError('required')\">\r\n Store Open Time is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"storeCloseTime\" class=\"form-label\">Store Close Time</label>\r\n <input autocomplete=\"off\" type=\"time\" class=\"form-control\" id=\"storeCloseTime\" formControlName=\"close\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('close')?.invalid && (storeForm.get('close')?.touched || submitted) || storeForm.hasError('invalidTimeRange')}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('close')?.touched || submitted) && storeForm.get('close')?.hasError('required')\">\r\n Store Close Time is required.\r\n </small>\r\n <small class=\"my-2\" *ngIf=\"storeForm.hasError('invalidTimeRange') && (storeForm.get('open')?.touched || storeForm.get('close')?.touched || submitted)\">\r\n Opening time must be before closing time.\r\n </small>\r\n </div>\r\n </div>\r\n <div class=\"row mt-20\">\r\n <div class=\"col-12 text-end mt-15\">\r\n <button type=\"button\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\" (click)=\"navigateToAddStore()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"storeForm.get('timeZone')?.invalid && storeForm.get('open')?.invalid && storeForm.get('close')?.invalid\" (click)=\"goToContact()\">Next</button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Store Configuration End -->\r\n\r\n <!-- Store Contact Start -->\r\n <div [hidden]=\"select !== 'contact'\">\r\n <div class=\"row\">\r\n <ng-container formArrayName=\"spocDetails\">\r\n <ng-container *ngFor=\"let spocDetail of getspocDetailsControls(); let i = index\" [formGroupName]=\"i\">\r\n <div *ngIf=\"i!==0\" class=\"d-flex justify-content-between align-items-center my-6\">\r\n <ng-container >\r\n <span class=\"fw-bold fs-4\">Alternate SPOC {{i}}</span>\r\n <span (click)=\"delAltSpoc()\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_2250_30650)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M12.5 13.9998H14.1667M14.1667 13.9998H27.5M14.1667 13.9998V25.6665C14.1667 26.1085 14.3423 26.5325 14.6548 26.845C14.9674 27.1576 15.3913 27.3332 15.8333 27.3332H24.1667C24.6087 27.3332 25.0326 27.1576 25.3452 26.845C25.6577 26.5325 25.8333 26.1085 25.8333 25.6665V13.9998H14.1667ZM16.6667 13.9998V12.3332C16.6667 11.8911 16.8423 11.4672 17.1548 11.1547C17.4674 10.8421 17.8913 10.6665 18.3333 10.6665H21.6667C22.1087 10.6665 22.5326 10.8421 22.8452 11.1547C23.1577 11.4672 23.3333 11.8911 23.3333 12.3332V13.9998M18.3333 18.1665V23.1665M21.6667 18.1665V23.1665\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2250_30650\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_2250_30650\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2250_30650\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"contactName\" class=\"form-label\">Name</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"contactName\" formControlName=\"name\"\r\n [ngClass]=\"{ 'is-invalid':spocDetail.get('name')?.invalid && (spocDetail.get('name')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(spocDetail.get('name')?.touched || submitted) && spocDetail.get('name')?.hasError('required')\">\r\n Name is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"contactEmail\" class=\"form-label\">Email</label>\r\n <input autocomplete=\"off\" type=\"email\" class=\"form-control\" id=\"contactEmail\" formControlName=\"email\"\r\n pattern=\"^([a-zA-Z0-9_\\-\\.]+)@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-zA-Z]{2,3})$\"\r\n [ngClass]=\"{ 'is-invalid':spocDetail.get('email')?.invalid && (spocDetail.get('email')?.touched || submitted)}\">\r\n <ng-container *ngIf=\"(spocDetail.get('email')?.touched || submitted)\">\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('email')?.hasError('required')\">\r\n Email is required.\r\n </small>\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('email')?.hasError('minlength')\">\r\n Email must be at least 3 characters long.\r\n </small>\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('email')?.hasError('maxlength')\">\r\n Email must be not more than 100 characters long.\r\n </small>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"contactNumber\" class=\"form-label\">Contact Number</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"contactNumber\" minlength=\"10\" maxlength=\"13\"\r\n (keypress)=\"omit_special_char($event)\" formControlName=\"contact\"\r\n [ngClass]=\"{ 'is-invalid':spocDetail.get('contact')?.invalid && (spocDetail.get('contact')?.touched || submitted )}\">\r\n <ng-container *ngIf=\"(spocDetail.get('contact')?.touched || submitted)\">\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('contact')?.hasError('required')\">\r\n Contact is required.\r\n </small>\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('contact')?.hasError('minlength')\">\r\n Contact must be at least 10 digits.\r\n </small>\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('contact')?.hasError('maxlength')\">\r\n Contact must be not more than 13 digits.\r\n </small>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"designation\" class=\"form-label\">Designation (optional)</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"designation\" formControlName=\"designation\">\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <div class=\"col-md-12 mb-5\">\r\n <h1 class=\"sub-head\">Enter Store Connection Details</h1>\r\n </div>\r\n <div class=\"col-md-12 mb-5\">\r\n <label for=\"anyDeskID\" class=\"form-label\">AnyDesk ID / TeamViewer ID (optional)</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"anyDeskID\"\r\n formControlName=\"storeConnectionId\">\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12 text-end\">\r\n <button type=\"button\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\" (click)=\"navigateToAddStore()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"storeForm.get('spocDetails')?.invalid\" (click)=\"goToReview()\">Next</button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Store Contact End -->\r\n\r\n <!-- Review & Submit Start -->\r\n <div [hidden]=\"select !== 'review'\">\r\n <div class=\"fs-4 fw-bold text-hover-primary sub-title text-gray-600 m-0 cursor-pointer\">Store\r\n Info\r\n </div>\r\n <div class=\"card-body p-9\">\r\n\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Name</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">{{storeForm.get('storeName')?.value ?\r\n storeForm.get('storeName')?.value : 'NA'}}</span>\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Code</label>\r\n <div class=\"col-lg-9 fv-row\"><span\r\n class=\"fw-bold fs-6 text-review-val\">{{storeForm.get('storeCode')?.value ?\r\n storeForm.get('storeCode')?.value: 'NA'}}</span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Business Type</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bold fs-6 text-review-val text-hover-primary\">\r\n {{storeForm.get('businessType')?.value ? storeForm.get('businessType')?.value :\r\n 'NA'}} </span>\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Type\r\n <!-- <i data-bs-toggle=\"tooltip\"\r\n title=\"Phone number must be active\" class=\"fas fa-exclamation-circle ms-1 fs-7\"></i> -->\r\n </label>\r\n <div class=\"col-lg-9 d-flex align-items-center\">\r\n <span\r\n class=\"fw-bolder fs-6 me-2 text-review-val\">{{storeForm.get('storeType_type')?.value\r\n ? storeForm.get('storeType_type')?.value : 'NA'}}</span>\r\n <!-- <span class=\"badge badge-success\">Verified</span> -->\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\"\r\n *ngIf=\"storeForm.get('storeType_type')?.value && storeForm.get('storeType_type')?.value === 'Mall Store'\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\"> Mall Name</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">{{storeForm.get('storeType_name')?.value\r\n ? storeForm.get('storeType_name')?.value : 'NA'}}</span>\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Address</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">\r\n <ng-container>\r\n {{storeForm.get('address')?.value ? storeForm.get('address')?.value : 'NA'}}\r\n </ng-container>\r\n </span>\r\n </div>\r\n </div>\r\n <!-- <div class=\"row mb-10\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Allow Changes</label>\r\n <div class=\"col-lg-9\"><span class=\"fw-bold fs-6\">Yes</span></div>\r\n </div> -->\r\n\r\n </div>\r\n <div class=\"fs-4 fw-bold text-hover-primary sub-title text-gray-600 m-0 cursor-pointer\">Store\r\n Configuration</div>\r\n <div class=\"card-body p-9\">\r\n\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Time Zone</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">{{storeForm.get('timeZone')?.value ?\r\n storeForm.get('timeZone')?.value : 'NA'}}</span>\r\n </div>\r\n </div>\r\n <!-- <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">No of Cameras</label>\r\n <div class=\"col-lg-9 fv-row\"><span\r\n class=\"fw-bold fs-6 text-review-val\">{{storeForm.get('cameras')?.value ?\r\n storeForm.get('cameras')?.value : 'NA'}}</span>\r\n </div>\r\n </div> -->\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Open Time</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bold fs-6 text-review-val text-hover-primary\">{{storeForm.get('open')?.value\r\n ? storeForm.get('open')?.value : 'NA'}}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Close Time</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">{{storeForm.get('close')?.value ?\r\n storeForm.get('close')?.value : 'NA'}}</span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"fs-4 fw-bold text-hover-primary sub-title text-gray-600 m-0 cursor-pointer\">Contact\r\n Details</div>\r\n <div class=\"card-body row px-9 pt-3 pb-4\">\r\n <div class=\"table-responsive col-md-12 col-lg-12 col-xl-9 col-xxl-8\">\r\n <table class=\"table align-middle gy-6\">\r\n <tbody class=\"fs-6 fw-bold\"> \r\n <ng-container formArrayName=\"spocDetails\">\r\n <ng-container *ngFor=\"let spoc of getspocDetailsControls();let i=index;\">\r\n <tr>\r\n <td>Spoc {{i+1}}</td>\r\n <td><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path\r\n d=\"M15 15.75V14.25C15 13.4544 14.6839 12.6913 14.1213 12.1287C13.5587 11.5661 12.7956 11.25 12 11.25H6C5.20435 11.25 4.44129 11.5661 3.87868 12.1287C3.31607 12.6913 3 13.4544 3 14.25V15.75M12 5.25C12 6.90685 10.6569 8.25 9 8.25C7.34315 8.25 6 6.90685 6 5.25C6 3.59315 7.34315 2.25 9 2.25C10.6569 2.25 12 3.59315 12 5.25Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2\">{{getspocDetailsValues(i)?.name ?\r\n getspocDetailsValues(i)?.name : 'NA' }}</span></td>\r\n <td><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1_80373)\">\r\n <path\r\n d=\"M12 6.00002V9.75002C12 10.3468 12.2371 10.9191 12.659 11.341C13.081 11.763 13.6533 12 14.25 12C14.8467 12 15.419 11.763 15.841 11.341C16.263 10.9191 16.5 10.3468 16.5 9.75002V9.00002C16.4999 7.30729 15.9272 5.66438 14.875 4.33842C13.8227 3.01246 12.3529 2.08144 10.7045 1.69675C9.05605 1.31205 7.32596 1.4963 5.79552 2.21955C4.26508 2.94279 3.02431 4.16249 2.27495 5.68032C1.5256 7.19814 1.31173 8.92483 1.66813 10.5796C2.02453 12.2344 2.93024 13.7199 4.23798 14.7947C5.54572 15.8695 7.17858 16.4703 8.87106 16.4994C10.5635 16.5285 12.2161 15.9842 13.56 14.955M12 9.00002C12 10.6569 10.6569 12 9.00001 12C7.34315 12 6.00001 10.6569 6.00001 9.00002C6.00001 7.34317 7.34315 6.00002 9.00001 6.00002C10.6569 6.00002 12 7.34317 12 9.00002Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1_80373\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"ms-2\">{{getspocDetailsValues(i)?.email ?\r\n getspocDetailsValues(i)?.email : 'NA' }}</span></td>\r\n <td><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1_80376)\">\r\n <path\r\n d=\"M16.5001 12.6901V14.9401C16.5009 15.1489 16.4581 15.3557 16.3745 15.5471C16.2908 15.7385 16.168 15.9103 16.0141 16.0515C15.8602 16.1927 15.6785 16.3002 15.4806 16.3671C15.2828 16.434 15.0731 16.4589 14.8651 16.4401C12.5572 16.1893 10.3403 15.4007 8.39257 14.1376C6.58044 12.9861 5.04407 11.4497 3.89257 9.63757C2.62506 7.68098 1.83625 5.45332 1.59007 3.13507C1.57133 2.92767 1.59598 2.71864 1.66245 2.52129C1.72892 2.32394 1.83575 2.14259 1.97615 1.98879C2.11654 1.83499 2.28743 1.7121 2.47792 1.62796C2.6684 1.54382 2.87433 1.50027 3.08257 1.50007H5.33257C5.69655 1.49649 6.04942 1.62538 6.32539 1.86272C6.60137 2.10006 6.78163 2.42966 6.83257 2.79007C6.92754 3.51012 7.10366 4.21712 7.35757 4.89757C7.45848 5.16602 7.48032 5.45776 7.4205 5.73823C7.36069 6.01871 7.22172 6.27616 7.02007 6.48007L6.06757 7.43257C7.13524 9.31023 8.68991 10.8649 10.5676 11.9326L11.5201 10.9801C11.724 10.7784 11.9814 10.6395 12.2619 10.5796C12.5424 10.5198 12.8341 10.5417 13.1026 10.6426C13.783 10.8965 14.49 11.0726 15.2101 11.1676C15.5744 11.219 15.9071 11.4025 16.145 11.6832C16.3828 11.9639 16.5092 12.3223 16.5001 12.6901Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1_80376\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"ms-2\">{{getspocDetailsValues(i)?.contact ?\r\n getspocDetailsValues(i)?.contact : 'NA' }}</span></td>\r\n </tr>\r\n </ng-container>\r\n </ng-container>\r\n <tr>\r\n <td>AnyDesk ID\r\n <td>\r\n <span class=\"ms-2\">{{storeForm.get('storeConnectionId')?.value ?\r\n storeForm.get('storeConnectionId')?.value : 'NA' }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"text-end\">\r\n <button type=\"button\" (click)=\"goToStoreInfo()\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\">Edit</button>\r\n <button type=\"button\" (click)=\"onSubmit()\"\r\n class=\"btn btn-primary\">Submit</button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Review & Submit End -->\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".kiwi{fill:#344054}.kiwi.active{fill:#009bf3}.menu-title{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:16px!important;font-weight:500!important;line-height:24px}.menu-state-bg .menu-item .menu-link.active{border-radius:6px!important;background:var(--Primary-50, #EAF8FF)!important;padding:8px 16px}.menu-state-title-primary .menu-item .menu-link.active .menu-title{color:var(--Primary-700, #009BF3)!important}.menu-state-bg .menu-item:not(.here) .menu-link:hover:not(.disabled):not(.active):not(.here) .menu-icon{color:#414b66!important}.menu-state-icon-primary .menu-item .menu-link.active .menu-icon,.menu-state-icon-primary .menu-item .menu-link.active .menu-icon .svg-icon,.menu-state-icon-primary .menu-item .menu-link.active .menu-icon i{color:#009bf3!important}.sub-title{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:18px!important;font-style:normal;font-weight:500!important;line-height:28px}.text-muted-review{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-style:normal;font-weight:500!important;line-height:20px}.text-review-val{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:600!important;line-height:20px}.align-middle{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-weight:500!important;line-height:20px}td{padding:0!important}.invalid-feedback,small{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:400!important;line-height:20px}.is-invalid{border-radius:8px!important;border:1px solid var(--Error-300, #FDA29B)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;padding-right:calc(1.5em + .75rem)!important;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzIyMDFfMjA5NTApIj4KPHBhdGggZD0iTTcuOTk5NjcgNS4zMzM5OFY4LjAwMDY1TTcuOTk5NjcgMTAuNjY3M0g4LjAwNjM0TTE0LjY2NjMgOC4wMDA2NUMxNC42NjYzIDExLjY4MjYgMTEuNjgxNiAxNC42NjczIDcuOTk5NjcgMTQuNjY3M0M0LjMxNzc4IDE0LjY2NzMgMS4zMzMwMSAxMS42ODI2IDEuMzMzMDEgOC4wMDA2NUMxLjMzMzAxIDQuMzE4NzUgNC4zMTc3OCAxLjMzMzk4IDcuOTk5NjcgMS4zMzM5OEMxMS42ODE2IDEuMzMzOTggMTQuNjY2MyA0LjMxODc1IDE0LjY2NjMgOC4wMDA2NVoiIHN0cm9rZT0iI0YwNDQzOCIgc3Ryb2tlLXdpZHRoPSIxLjMzMzMzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8yMjAxXzIwOTUwIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=)!important;background-repeat:no-repeat!important;background-position:right calc(.375em + .1875rem) center!important;background-size:calc(.75em + .375rem) calc(.75em + .375rem)!important}::ng-deep .swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;min-width:2em;height:0em;margin:0 .5em 0 0}::ng-deep .listitem{display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.5rem 1rem;background-color:#f3f6f9;margin-top:.75rem;border-radius:.42rem}::ng-deep .toasttitile{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}::ng-deep .list{overflow-y:auto}::ng-deep .listitemlabel{font-size:13px!important;font-weight:600;font-family:Inter;color:#7e8299}::ng-deep .swal2-container{padding:.4em!important}::ng-deep .swal2-icon{border:1px solid white!important}::ng-deep body.swal2-toast-shown .swal2-container{width:500px!important}::ng-deep .swal2-popup.swal2-toast{border-left:4px solid #009EF7}::ng-deep .swal2-popup.swal2-toast .swal2-title{margin:9px 5px auto!important}::ng-deep .label{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}.spocArea{overflow-y:scroll;max-height:60vh;padding:0;margin:0}::ng-deep .spocArea::-webkit-scrollbar-thumb{-webkit-border-radius:10px!important;border-radius:10px!important;background:var(--gray-100, #eaeaea)!important;height:50px!important}::ng-deep .spocArea::-webkit-scrollbar{width:10px!important}::ng-deep .spocArea::-webkit-scrollbar-track{background:none!important;box-shadow:none!important}.sub-head{color:var(--Gray-900, #101828)!important;font-size:18px!important;font-weight:600!important;line-height:28px}.form-label{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:500!important;line-height:20px}.btn-primary{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:16px!important;font-weight:600;line-height:24px}.btn-outline{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:16px!important;font-weight:600!important;line-height:24px}.btn-light-primary1{border-radius:8px;border:1px solid var(--Primary-50, #EAF8FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px}.alert-required{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:500!important;line-height:20px}\n"], dependencies: [{ kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i6.NgxGpAutocompleteDirective, selector: "[ngx-gp-autocomplete]", inputs: ["options"], outputs: ["onAddressChange"], exportAs: ["ngx-places"] }] });
|
|
300
|
+
navigateToBack(label) {
|
|
301
|
+
if (label == "config") {
|
|
302
|
+
this.select = "store_info";
|
|
303
|
+
}
|
|
304
|
+
else if (label == "contact") {
|
|
305
|
+
this.select = "config";
|
|
306
|
+
}
|
|
307
|
+
else if (label == "review") {
|
|
308
|
+
this.select = "contact";
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: AddStoresFormComponent, deps: [{ token: i1.FormBuilder }, { token: i2.NgbModal }, { token: i3.StoresService }, { token: i4.ToastService }, { token: i5.Router }], target: i0.ɵɵFactoryTarget.Component });
|
|
312
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.11", type: AddStoresFormComponent, selector: "lib-add-stores-form", viewQueries: [{ propertyName: "placesRef", first: true, predicate: ["ngxPlaces"], descendants: true }], ngImport: i0, template: "<div class=\"row mt-3 mb-6\">\r\n <div class=\"col-md-3 col-lg-3 col-xl-3 col-xxl-3\" id=\"left-container\">\r\n <div class=\"card card-flush h-100 mb-0\">\r\n <!--begin::Aside content-->\r\n <div class=\"card-body px-5\">\r\n <div\r\n class=\"menu menu-column menu-rounded menu-state-bg menu-state-title-primary menu-state-icon-primary menu-state-bullet-primary\">\r\n <!--begin::Menu item-->\r\n <div class=\"menu-item my-2\">\r\n <!--begin::Inbox-->\r\n <span class=\"menu-link pe-none\" [ngClass]=\"{ 'active': select === 'store_info' }\">\r\n <span class=\"menu-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path stroke=\"currentColor\"\r\n d=\"M3.08995 6.88369L3.02401 6.98669C2.30358 8.25557 3.06101 9.87945 4.46464 10.0662C4.58627 10.0811 4.70112 10.0892 4.8145 10.0892C5.55255 10.0892 6.20523 9.77229 6.65953 9.27917L7.21286 8.67854L7.76432 9.28089C8.21367 9.77171 8.8652 10.0892 9.60776 10.0892C10.3471 10.0892 11.0022 9.77137 11.4512 9.28089L12.0044 8.67665L12.5576 9.28089C13.0066 9.77137 13.6617 10.0892 14.401 10.0892C15.1404 10.0892 15.7954 9.77137 16.2445 9.28089L16.7977 8.67665L17.3508 9.28089C17.7999 9.77137 18.4549 10.0892 19.1943 10.0892C19.3041 10.0892 19.4223 10.0811 19.5433 10.0663C20.9772 9.87168 21.7355 8.16387 20.9155 6.88419C20.9154 6.88413 20.9154 6.88407 20.9154 6.88402L18.8056 3.59429L18.8056 3.59429L18.8046 3.59282C18.7582 3.52002 18.6649 3.46423 18.5584 3.46423H5.44307C5.3365 3.46423 5.24326 3.52002 5.19681 3.59282L5.19619 3.59379L3.08995 6.88369ZM4.81818 12.7499C4.71644 12.7499 4.616 12.7468 4.5169 12.741V16.6428V18.9642C4.5169 19.8211 5.22663 20.5357 6.11942 20.5357H17.882C18.7748 20.5357 19.4845 19.8211 19.4845 18.9642V16.6428V12.7415C19.3874 12.747 19.2893 12.7499 19.1906 12.7499C19.0022 12.7499 18.8157 12.7398 18.632 12.7202V16.6428V17.3928H17.882H6.11942H5.36942V16.6428V12.721C5.18866 12.74 5.00472 12.7499 4.81818 12.7499Z\" />\r\n </svg></span>\r\n <span class=\"menu-title fw-bold \">Store Info</span>\r\n </span>\r\n <!--end::Inbox-->\r\n </div>\r\n <div class=\"menu-item my-2\">\r\n <!--begin::Inbox-->\r\n <span class=\"menu-link pe-none\" [ngClass]=\"{ 'active': select === 'config' }\">\r\n <span class=\"menu-icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_1017_22270)\">\r\n <path\r\n d=\"M12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15Z\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M19.4 15C19.2669 15.3016 19.2272 15.6362 19.286 15.9606C19.3448 16.285 19.4995 16.5843 19.73 16.82L19.79 16.88C19.976 17.0657 20.1235 17.2863 20.2241 17.5291C20.3248 17.7719 20.3766 18.0322 20.3766 18.295C20.3766 18.5578 20.3248 18.8181 20.2241 19.0609C20.1235 19.3037 19.976 19.5243 19.79 19.71C19.6043 19.896 19.3837 20.0435 19.1409 20.1441C18.8981 20.2448 18.6378 20.2966 18.375 20.2966C18.1122 20.2966 17.8519 20.2448 17.6091 20.1441C17.3663 20.0435 17.1457 19.896 16.96 19.71L16.9 19.65C16.6643 19.4195 16.365 19.2648 16.0406 19.206C15.7162 19.1472 15.3816 19.1869 15.08 19.32C14.7842 19.4468 14.532 19.6572 14.3543 19.9255C14.1766 20.1938 14.0813 20.5082 14.08 20.83V21C14.08 21.5304 13.8693 22.0391 13.4942 22.4142C13.1191 22.7893 12.6104 23 12.08 23C11.5496 23 11.0409 22.7893 10.6658 22.4142C10.2907 22.0391 10.08 21.5304 10.08 21V20.91C10.0723 20.579 9.96512 20.258 9.77251 19.9887C9.5799 19.7194 9.31074 19.5143 9 19.4C8.69838 19.2669 8.36381 19.2272 8.03941 19.286C7.71502 19.3448 7.41568 19.4995 7.18 19.73L7.12 19.79C6.93425 19.976 6.71368 20.1235 6.47088 20.2241C6.22808 20.3248 5.96783 20.3766 5.705 20.3766C5.44217 20.3766 5.18192 20.3248 4.93912 20.2241C4.69632 20.1235 4.47575 19.976 4.29 19.79C4.10405 19.6043 3.95653 19.3837 3.85588 19.1409C3.75523 18.8981 3.70343 18.6378 3.70343 18.375C3.70343 18.1122 3.75523 17.8519 3.85588 17.6091C3.95653 17.3663 4.10405 17.1457 4.29 16.96L4.35 16.9C4.58054 16.6643 4.73519 16.365 4.794 16.0406C4.85282 15.7162 4.81312 15.3816 4.68 15.08C4.55324 14.7842 4.34276 14.532 4.07447 14.3543C3.80618 14.1766 3.49179 14.0813 3.17 14.08H3C2.46957 14.08 1.96086 13.8693 1.58579 13.4942C1.21071 13.1191 1 12.6104 1 12.08C1 11.5496 1.21071 11.0409 1.58579 10.6658C1.96086 10.2907 2.46957 10.08 3 10.08H3.09C3.42099 10.0723 3.742 9.96512 4.0113 9.77251C4.28059 9.5799 4.48572 9.31074 4.6 9C4.73312 8.69838 4.77282 8.36381 4.714 8.03941C4.65519 7.71502 4.50054 7.41568 4.27 7.18L4.21 7.12C4.02405 6.93425 3.87653 6.71368 3.77588 6.47088C3.67523 6.22808 3.62343 5.96783 3.62343 5.705C3.62343 5.44217 3.67523 5.18192 3.77588 4.93912C3.87653 4.69632 4.02405 4.47575 4.21 4.29C4.39575 4.10405 4.61632 3.95653 4.85912 3.85588C5.10192 3.75523 5.36217 3.70343 5.625 3.70343C5.88783 3.70343 6.14808 3.75523 6.39088 3.85588C6.63368 3.95653 6.85425 4.10405 7.04 4.29L7.1 4.35C7.33568 4.58054 7.63502 4.73519 7.95941 4.794C8.28381 4.85282 8.61838 4.81312 8.92 4.68H9C9.29577 4.55324 9.54802 4.34276 9.72569 4.07447C9.90337 3.80618 9.99872 3.49179 10 3.17V3C10 2.46957 10.2107 1.96086 10.5858 1.58579C10.9609 1.21071 11.4696 1 12 1C12.5304 1 13.0391 1.21071 13.4142 1.58579C13.7893 1.96086 14 2.46957 14 3V3.09C14.0013 3.41179 14.0966 3.72618 14.2743 3.99447C14.452 4.26276 14.7042 4.47324 15 4.6C15.3016 4.73312 15.6362 4.77282 15.9606 4.714C16.285 4.65519 16.5843 4.50054 16.82 4.27L16.88 4.21C17.0657 4.02405 17.2863 3.87653 17.5291 3.77588C17.7719 3.67523 18.0322 3.62343 18.295 3.62343C18.5578 3.62343 18.8181 3.67523 19.0609 3.77588C19.3037 3.87653 19.5243 4.02405 19.71 4.21C19.896 4.39575 20.0435 4.61632 20.1441 4.85912C20.2448 5.10192 20.2966 5.36217 20.2966 5.625C20.2966 5.88783 20.2448 6.14808 20.1441 6.39088C20.0435 6.63368 19.896 6.85425 19.71 7.04L19.65 7.1C19.4195 7.33568 19.2648 7.63502 19.206 7.95941C19.1472 8.28381 19.1869 8.61838 19.32 8.92V9C19.4468 9.29577 19.6572 9.54802 19.9255 9.72569C20.1938 9.90337 20.5082 9.99872 20.83 10H21C21.5304 10 22.0391 10.2107 22.4142 10.5858C22.7893 10.9609 23 11.4696 23 12C23 12.5304 22.7893 13.0391 22.4142 13.4142C22.0391 13.7893 21.5304 14 21 14H20.91C20.5882 14.0013 20.2738 14.0966 20.0055 14.2743C19.7372 14.452 19.5268 14.7042 19.4 15Z\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1017_22270\">\r\n <rect width=\"24\" height=\"24\" fill=\"currentColor\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"menu-title fw-bold \">Store Configuration</span>\r\n </span>\r\n <!--end::Inbox-->\r\n </div>\r\n\r\n <!--end::Menu item-->\r\n\r\n\r\n <!--begin::Menu item-->\r\n <div class=\"menu-item my-2\">\r\n <!--begin::Draft-->\r\n <span class=\"menu-link pe-none\" [ngClass]=\"{ 'active': select === 'contact' }\">\r\n <span class=\"menu-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M17 21V19C17 17.9391 16.5786 16.9217 15.8284 16.1716C15.0783 15.4214 14.0609 15 13 15H5C3.93913 15 2.92172 15.4214 2.17157 16.1716C1.42143 16.9217 1 17.9391 1 19V21M23 21V19C22.9993 18.1137 22.7044 17.2528 22.1614 16.5523C21.6184 15.8519 20.8581 15.3516 20 15.13M16 3.13C16.8604 3.3503 17.623 3.8507 18.1676 4.55231C18.7122 5.25392 19.0078 6.11683 19.0078 7.005C19.0078 7.89317 18.7122 8.75608 18.1676 9.45769C17.623 10.1593 16.8604 10.6597 16 10.88M13 7C13 9.20914 11.2091 11 9 11C6.79086 11 5 9.20914 5 7C5 4.79086 6.79086 3 9 3C11.2091 3 13 4.79086 13 7Z\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <span class=\"menu-title fw-bold \">Contact Details</span>\r\n </span>\r\n <!--end::Draft-->\r\n </div>\r\n <!--end::Menu item-->\r\n <!--begin::Menu item-->\r\n <div class=\"menu-item my-2\">\r\n <!--begin::Trash-->\r\n <span class=\"menu-link pe-none\" [ngClass]=\"{ 'active': select === 'review'}\">\r\n <span class=\"menu-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M6 1C5.20435 1 4.44129 1.31607 3.87868 1.87868C3.31607 2.44129 3 3.20435 3 4V20C3 20.7957 3.31607 21.5587 3.87868 22.1213C4.44129 22.6839 5.20435 23 6 23H12H18C18.7957 23 19.5587 22.6839 20.1213 22.1213C20.6839 21.5587 21 20.7957 21 20V16.4208L19 18.4208V20C19 20.2652 18.8946 20.5196 18.7071 20.7071C18.5196 20.8946 18.2652 21 18 21H16.4208L15.3286 22.0922L12 23L12.5455 21H6C5.73478 21 5.48043 20.8946 5.29289 20.7071C5.10536 20.5196 5 20.2652 5 20V4C5 3.73478 5.10536 3.48043 5.29289 3.29289C5.48043 3.10536 5.73478 3 6 3H12V9C12 9.55228 12.4477 10 13 10H19V13.5792L21 11.5792V9C21 8.73478 20.8946 8.48043 20.7071 8.29289L13.7071 1.29289C13.5196 1.10536 13.2652 1 13 1H6ZM17.5858 8L14 4.41421V8H17.5858Z\"\r\n fill=\"currentColor\" />\r\n <path\r\n d=\"M20.0779 11.5014C20.2369 11.3424 20.4256 11.2163 20.6333 11.1303C20.8409 11.0443 21.0635 11 21.2883 11C21.5131 11 21.7357 11.0443 21.9434 11.1303C22.151 11.2163 22.3397 11.3424 22.4987 11.5014C22.6576 11.6603 22.7837 11.849 22.8698 12.0567C22.9558 12.2644 23.0001 12.487 23.0001 12.7117C23.0001 12.9365 22.9558 13.1591 22.8698 13.3668C22.7837 13.5745 22.6576 13.7632 22.4987 13.9221L15.3286 22.0923L12 23.0001L12.9078 19.6715L20.0779 11.5014Z\"\r\n stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <span class=\"menu-title fw-bold \">Review & Submit</span>\r\n </span>\r\n <!--end::Trash-->\r\n </div>\r\n <!--end::Menu item-->\r\n\r\n\r\n </div>\r\n </div>\r\n <!--end::Menu-->\r\n </div>\r\n </div>\r\n <div class=\"col-md-9 col-lg-9 col-xl-9 col-xxl-9\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-bottom-0\">\r\n <h1\r\n class=\"page-heading d-flex text-dark fw-bold fs-2 flex-column justify-content-center my-0 sub-head\">\r\n <span *ngIf=\"select === 'store_info'\">Enter Your Store Details</span>\r\n <span *ngIf=\"select === 'config'\">Enter Your Store Configuration</span>\r\n <span *ngIf=\"select === 'contact'\">Enter Primary SPOC details</span>\r\n <span *ngIf=\"select === 'review'\">Review & submit</span>\r\n </h1>\r\n <div [hidden]=\"select !== 'contact'\" class=\"card-toolbar\">\r\n <button (click)=\"addAltSpoc()\" class=\"btn btn-light-primary1 btn-sm\"><svg class=\"me-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"14\" viewBox=\"0 0 18 14\" fill=\"none\">\r\n <path\r\n d=\"M2.7 3.5C2.7 2.57174 3.07928 1.6815 3.75442 1.02513C4.42955 0.368749 5.34522 0 6.3 0C7.25478 0 8.17045 0.368749 8.84558 1.02513C9.52072 1.6815 9.9 2.57174 9.9 3.5C9.9 4.42826 9.52072 5.3185 8.84558 5.97487C8.17045 6.63125 7.25478 7 6.3 7C5.34522 7 4.42955 6.63125 3.75442 5.97487C3.07928 5.3185 2.7 4.42826 2.7 3.5ZM0 13.1879C0 10.4945 2.24437 8.3125 5.01469 8.3125H7.58531C10.3556 8.3125 12.6 10.4945 12.6 13.1879C12.6 13.6363 12.2259 14 11.7647 14H0.835312C0.374063 14 0 13.6363 0 13.1879ZM14.175 8.53125V6.78125H12.375C12.0009 6.78125 11.7 6.48867 11.7 6.125C11.7 5.76133 12.0009 5.46875 12.375 5.46875H14.175V3.71875C14.175 3.35508 14.4759 3.0625 14.85 3.0625C15.2241 3.0625 15.525 3.35508 15.525 3.71875V5.46875H17.325C17.6991 5.46875 18 5.76133 18 6.125C18 6.48867 17.6991 6.78125 17.325 6.78125H15.525V8.53125C15.525 8.89492 15.2241 9.1875 14.85 9.1875C14.4759 9.1875 14.175 8.89492 14.175 8.53125Z\"\r\n fill=\"#00A3FF\" />\r\n </svg>Add Alternate SPOC</button>\r\n </div>\r\n </div>\r\n <div class=\"card-body pt-1\">\r\n <form [formGroup]=\"storeForm\">\r\n <!-- Store Info Start -->\r\n <div [hidden]=\"select !== 'store_info'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12 col-lg-6 mb-5\">\r\n <label for=\"storeName\" class=\"form-label\">Store Name <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"storeName\" formControlName=\"storeName\" (input)=\"isStoreNameExist = false\"\r\n [ngClass]=\"{ 'is-invalid':(storeForm.get('storeName')?.invalid || isStoreNameExist) && (storeForm.get('storeName')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('storeName')?.touched || submitted) && storeForm.get('storeName')?.hasError('required')\">\r\n Store Name is required.\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('storeName')?.touched || submitted) && isStoreNameExist\">\r\n Store Name already exists.\r\n </small>\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 mb-5\">\r\n <label for=\"storeCode\" class=\"form-label\">Store Code / Ref Code (optional)</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"storeCode\" formControlName=\"storeCode\">\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 mb-5\">\r\n <label for=\"businessType\" class=\"form-label\">Business Type <span class=\"alert-required\">*</span></label>\r\n <select class=\"form-select\" id=\"businessType\" formControlName=\"businessType\">\r\n <option value=\"COCO\">COCO</option>\r\n <option value=\"COFO\">COFO</option>\r\n <option value=\"FOFO\">FOFO</option>\r\n <option value=\"FOCO\">FOCO</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 mb-5\">\r\n <label for=\"storeType\" class=\"form-label\">Store Type <span class=\"alert-required\">*</span></label>\r\n <select class=\"form-select\" id=\"storeType\" formControlName=\"storeType_type\">\r\n <option value=\"High Street\">High Street</option>\r\n <option value=\"Mall Store\">Mall</option>\r\n <option value=\"Kiosk\">Kiosk</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-12 mb-5\" *ngIf=\"storeForm.get('storeType_type')?.value === 'Mall Store'\">\r\n <label for=\"mallName\" class=\"form-label\">Enter Mall Name </label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"mallName\" formControlName=\"storeType_name\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('storeType_name')?.invalid && (storeForm.get('storeType_name')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('storeType_name')?.touched || submitted) && storeForm.get('storeType_name')?.hasError('required')\">\r\n Mall Name is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-12 mb-5\">\r\n <label for=\"address\" class=\"form-label\">Address <span class=\"alert-required\">*</span></label>\r\n <input type=\"text\" class=\"form-control\" id=\"address\" formControlName=\"address\" #placesRef=\"ngx-places\" ngx-gp-autocomplete (onAddressChange)=\"handleAddressChange($event)\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('address')?.invalid && (storeForm.get('address')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('address')?.touched || submitted) && storeForm.get('address')?.hasError('required')\">\r\n Address is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"country\" class=\"form-label\">Country <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"country\" formControlName=\"country\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('country')?.invalid && (storeForm.get('country')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('country')?.touched || submitted) && storeForm.get('country')?.hasError('required')\">\r\n Country is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"state\" class=\"form-label\">State <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"state\" formControlName=\"state\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('state')?.invalid && (storeForm.get('state')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('state')?.touched || submitted) && storeForm.get('state')?.hasError('required')\">\r\n State is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"city\" class=\"form-label\">City / Town <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"city\" formControlName=\"city\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('city')?.invalid && (storeForm.get('city')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('city')?.touched || submitted) && storeForm.get('city')?.hasError('required')\">\r\n City is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"pincode\" class=\"form-label\">Pin / Zip Code <span class=\"alert-required\">*</span> </label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"pincode\" formControlName=\"pincode\" maxlength=\"6\" minlength=\"5\" (keypress)=\"omit_special_char($event)\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('pincode')?.invalid && (storeForm.get('pincode')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('pincode')?.touched || submitted) && storeForm.get('pincode')?.hasError('required')\">\r\n Pincode is required.\r\n </small>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12 text-end\">\r\n <button type=\"button\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\" (click)=\"navigateToAddStore()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"validateStoreInfo() === true\"\r\n (click)=\"goToConfiguration()\">Next</button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Store Info End -->\r\n\r\n <!-- Store Configuration Start -->\r\n <div [hidden]=\"select !== 'config'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"timeZone\" class=\"form-label\">Time Zone <span class=\"alert-required\">*</span></label>\r\n <!-- <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"timeZone\" formControlName=\"timeZone\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('timeZone')?.invalid && storeForm.get('timeZone')?.touched}\"> -->\r\n <select class=\"form-select\" id=\"timeZone\" formControlName=\"timeZone\">\r\n <option *ngFor=\"let timezone of timezones\" [value]=\"timezone\">{{ timezone }}</option>\r\n </select>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('timeZone')?.touched || submitted) && storeForm.get('timeZone')?.hasError('required')\">\r\n Time Zone is required.\r\n </small>\r\n </div>\r\n <!-- <div class=\"col-md-6 mb-5\">\r\n <label for=\"noOfCameras\" class=\"form-label\">No of Cameras</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"noOfCameras\" formControlName=\"cameras\" (keypress)=\"omit_special_char($event)\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('cameras')?.invalid && storeForm.get('cameras')?.touched}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"storeForm.get('cameras')?.touched && storeForm.get('cameras')?.hasError('required')\">\r\n No of Cameras is required.\r\n </small>\r\n </div> -->\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"storeOpenTime\" class=\"form-label\">Store Open Time <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"time\" class=\"form-control\" id=\"storeOpenTime\" formControlName=\"open\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('open')?.invalid && (storeForm.get('open')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('open')?.touched || submitted) && storeForm.get('open')?.hasError('required')\">\r\n Store Open Time is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"storeCloseTime\" class=\"form-label\">Store Close Time <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"time\" class=\"form-control\" id=\"storeCloseTime\" formControlName=\"close\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('close')?.invalid && (storeForm.get('close')?.touched || submitted) || storeForm.hasError('invalidTimeRange')}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('close')?.touched || submitted) && storeForm.get('close')?.hasError('required')\">\r\n Store Close Time is required.\r\n </small>\r\n <small class=\"my-2\" *ngIf=\"storeForm.hasError('invalidTimeRange') && (storeForm.get('open')?.touched || storeForm.get('close')?.touched || submitted)\">\r\n Opening time must be before closing time.\r\n </small>\r\n </div>\r\n </div>\r\n <div class=\"row mt-20\">\r\n <div class=\"col-2 mt-10\">\r\n <button type=\"button\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\" (click)=\"navigateToBack('config')\">Back</button>\r\n </div>\r\n <div class=\"col-10 text-end mt-10\">\r\n <!-- <button type=\"button\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\" (click)=\"navigateToAddStore()\">Cancel</button> -->\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"storeForm.get('timeZone')?.invalid && storeForm.get('open')?.invalid && storeForm.get('close')?.invalid\" (click)=\"goToContact()\">Next</button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Store Configuration End -->\r\n\r\n <!-- Store Contact Start -->\r\n <div [hidden]=\"select !== 'contact'\">\r\n <div class=\"row\">\r\n <ng-container formArrayName=\"spocDetails\">\r\n <ng-container *ngFor=\"let spocDetail of getspocDetailsControls(); let i = index\" [formGroupName]=\"i\">\r\n <div *ngIf=\"i!==0\" class=\"d-flex justify-content-between align-items-center my-6\">\r\n <ng-container >\r\n <span class=\"fw-bold fs-4\">Alternate SPOC {{i}}</span>\r\n <span (click)=\"delAltSpoc()\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_2250_30650)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M12.5 13.9998H14.1667M14.1667 13.9998H27.5M14.1667 13.9998V25.6665C14.1667 26.1085 14.3423 26.5325 14.6548 26.845C14.9674 27.1576 15.3913 27.3332 15.8333 27.3332H24.1667C24.6087 27.3332 25.0326 27.1576 25.3452 26.845C25.6577 26.5325 25.8333 26.1085 25.8333 25.6665V13.9998H14.1667ZM16.6667 13.9998V12.3332C16.6667 11.8911 16.8423 11.4672 17.1548 11.1547C17.4674 10.8421 17.8913 10.6665 18.3333 10.6665H21.6667C22.1087 10.6665 22.5326 10.8421 22.8452 11.1547C23.1577 11.4672 23.3333 11.8911 23.3333 12.3332V13.9998M18.3333 18.1665V23.1665M21.6667 18.1665V23.1665\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2250_30650\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_2250_30650\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2250_30650\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"contactName\" class=\"form-label\">Name <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"contactName\" formControlName=\"name\"\r\n [ngClass]=\"{ 'is-invalid':spocDetail.get('name')?.invalid && (spocDetail.get('name')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(spocDetail.get('name')?.touched || submitted) && spocDetail.get('name')?.hasError('required')\">\r\n Name is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"contactEmail\" class=\"form-label\">Email <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"email\" class=\"form-control\" id=\"contactEmail\" formControlName=\"email\"\r\n pattern=\"^([a-zA-Z0-9_\\-\\.]+)@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-zA-Z]{2,3})$\"\r\n [ngClass]=\"{ 'is-invalid':spocDetail.get('email')?.invalid && (spocDetail.get('email')?.touched || submitted)}\">\r\n <ng-container *ngIf=\"(spocDetail.get('email')?.touched || submitted)\">\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('email')?.hasError('required')\">\r\n Email is required.\r\n </small>\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('email')?.hasError('minlength')\">\r\n Email must be at least 3 characters long.\r\n </small>\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('email')?.hasError('maxlength')\">\r\n Email must be not more than 100 characters long.\r\n </small>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"contactNumber\" class=\"form-label\">Contact Number <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"contactNumber\" minlength=\"10\" maxlength=\"13\"\r\n (keypress)=\"omit_special_char($event)\" formControlName=\"contact\"\r\n [ngClass]=\"{ 'is-invalid':spocDetail.get('contact')?.invalid && (spocDetail.get('contact')?.touched || submitted )}\">\r\n <ng-container *ngIf=\"(spocDetail.get('contact')?.touched || submitted)\">\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('contact')?.hasError('required')\">\r\n Contact is required.\r\n </small>\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('contact')?.hasError('minlength')\">\r\n Contact must be at least 10 digits.\r\n </small>\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('contact')?.hasError('maxlength')\">\r\n Contact must be not more than 13 digits.\r\n </small>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"designation\" class=\"form-label\">Designation (optional)</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"designation\" formControlName=\"designation\">\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <div class=\"col-md-12 mb-5\">\r\n <h1 class=\"sub-head\">Enter Store Connection Details</h1>\r\n </div>\r\n <div class=\"col-md-12 mb-5\">\r\n <label for=\"anyDeskID\" class=\"form-label\">AnyDesk ID / TeamViewer ID (optional)</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"anyDeskID\"\r\n formControlName=\"storeConnectionId\">\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-2 mt-10\">\r\n <button type=\"button\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\" (click)=\"navigateToBack('contact')\">Back</button>\r\n </div>\r\n <div class=\"col-10 text-end mt-10\">\r\n <!-- <button type=\"button\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\" (click)=\"navigateToAddStore()\">Cancel</button> -->\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"storeForm.get('spocDetails')?.invalid\" (click)=\"goToReview()\">Next</button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Store Contact End -->\r\n\r\n <!-- Review & Submit Start -->\r\n <div [hidden]=\"select !== 'review'\">\r\n <div class=\"fs-4 fw-bold text-hover-primary sub-title text-gray-600 m-0 cursor-pointer\">Store\r\n Info\r\n </div>\r\n <div class=\"card-body p-9\">\r\n\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Name</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">{{storeForm.get('storeName')?.value ?\r\n storeForm.get('storeName')?.value : 'NA'}}</span>\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Code</label>\r\n <div class=\"col-lg-9 fv-row\"><span\r\n class=\"fw-bold fs-6 text-review-val\">{{storeForm.get('storeCode')?.value ?\r\n storeForm.get('storeCode')?.value: 'NA'}}</span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Business Type</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bold fs-6 text-review-val text-hover-primary\">\r\n {{storeForm.get('businessType')?.value ? storeForm.get('businessType')?.value :\r\n 'NA'}} </span>\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Type\r\n <!-- <i data-bs-toggle=\"tooltip\"\r\n title=\"Phone number must be active\" class=\"fas fa-exclamation-circle ms-1 fs-7\"></i> -->\r\n </label>\r\n <div class=\"col-lg-9 d-flex align-items-center\">\r\n <span\r\n class=\"fw-bolder fs-6 me-2 text-review-val\">{{storeForm.get('storeType_type')?.value\r\n ? storeForm.get('storeType_type')?.value : 'NA'}}</span>\r\n <!-- <span class=\"badge badge-success\">Verified</span> -->\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\"\r\n *ngIf=\"storeForm.get('storeType_type')?.value && storeForm.get('storeType_type')?.value === 'Mall Store'\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\"> Mall Name</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">{{storeForm.get('storeType_name')?.value\r\n ? storeForm.get('storeType_name')?.value : 'NA'}}</span>\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Address</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">\r\n <ng-container>\r\n {{storeForm.get('address')?.value ? storeForm.get('address')?.value : 'NA'}}\r\n </ng-container>\r\n </span>\r\n </div>\r\n </div>\r\n <!-- <div class=\"row mb-10\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Allow Changes</label>\r\n <div class=\"col-lg-9\"><span class=\"fw-bold fs-6\">Yes</span></div>\r\n </div> -->\r\n\r\n </div>\r\n <div class=\"fs-4 fw-bold text-hover-primary sub-title text-gray-600 m-0 cursor-pointer\">Store\r\n Configuration</div>\r\n <div class=\"card-body p-9\">\r\n\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Time Zone</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">{{storeForm.get('timeZone')?.value ?\r\n storeForm.get('timeZone')?.value : 'NA'}}</span>\r\n </div>\r\n </div>\r\n <!-- <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">No of Cameras</label>\r\n <div class=\"col-lg-9 fv-row\"><span\r\n class=\"fw-bold fs-6 text-review-val\">{{storeForm.get('cameras')?.value ?\r\n storeForm.get('cameras')?.value : 'NA'}}</span>\r\n </div>\r\n </div> -->\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Open Time</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bold fs-6 text-review-val text-hover-primary\">{{storeForm.get('open')?.value\r\n ? storeForm.get('open')?.value : 'NA'}}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Close Time</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">{{storeForm.get('close')?.value ?\r\n storeForm.get('close')?.value : 'NA'}}</span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"fs-4 fw-bold text-hover-primary sub-title text-gray-600 m-0 cursor-pointer\">Contact\r\n Details</div>\r\n <div class=\"card-body row px-9 pt-3 pb-4\">\r\n <div class=\"table-responsive col-md-12 col-lg-12 col-xl-9 col-xxl-8\">\r\n <table class=\"table align-middle gy-6\">\r\n <tbody class=\"fs-6 fw-bold\"> \r\n <ng-container formArrayName=\"spocDetails\">\r\n <ng-container *ngFor=\"let spoc of getspocDetailsControls();let i=index;\">\r\n <tr>\r\n <td>Spoc {{i+1}}</td>\r\n <td><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path\r\n d=\"M15 15.75V14.25C15 13.4544 14.6839 12.6913 14.1213 12.1287C13.5587 11.5661 12.7956 11.25 12 11.25H6C5.20435 11.25 4.44129 11.5661 3.87868 12.1287C3.31607 12.6913 3 13.4544 3 14.25V15.75M12 5.25C12 6.90685 10.6569 8.25 9 8.25C7.34315 8.25 6 6.90685 6 5.25C6 3.59315 7.34315 2.25 9 2.25C10.6569 2.25 12 3.59315 12 5.25Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2\">{{getspocDetailsValues(i)?.name ?\r\n getspocDetailsValues(i)?.name : 'NA' }}</span></td>\r\n <td><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1_80373)\">\r\n <path\r\n d=\"M12 6.00002V9.75002C12 10.3468 12.2371 10.9191 12.659 11.341C13.081 11.763 13.6533 12 14.25 12C14.8467 12 15.419 11.763 15.841 11.341C16.263 10.9191 16.5 10.3468 16.5 9.75002V9.00002C16.4999 7.30729 15.9272 5.66438 14.875 4.33842C13.8227 3.01246 12.3529 2.08144 10.7045 1.69675C9.05605 1.31205 7.32596 1.4963 5.79552 2.21955C4.26508 2.94279 3.02431 4.16249 2.27495 5.68032C1.5256 7.19814 1.31173 8.92483 1.66813 10.5796C2.02453 12.2344 2.93024 13.7199 4.23798 14.7947C5.54572 15.8695 7.17858 16.4703 8.87106 16.4994C10.5635 16.5285 12.2161 15.9842 13.56 14.955M12 9.00002C12 10.6569 10.6569 12 9.00001 12C7.34315 12 6.00001 10.6569 6.00001 9.00002C6.00001 7.34317 7.34315 6.00002 9.00001 6.00002C10.6569 6.00002 12 7.34317 12 9.00002Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1_80373\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"ms-2\">{{getspocDetailsValues(i)?.email ?\r\n getspocDetailsValues(i)?.email : 'NA' }}</span></td>\r\n <td><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1_80376)\">\r\n <path\r\n d=\"M16.5001 12.6901V14.9401C16.5009 15.1489 16.4581 15.3557 16.3745 15.5471C16.2908 15.7385 16.168 15.9103 16.0141 16.0515C15.8602 16.1927 15.6785 16.3002 15.4806 16.3671C15.2828 16.434 15.0731 16.4589 14.8651 16.4401C12.5572 16.1893 10.3403 15.4007 8.39257 14.1376C6.58044 12.9861 5.04407 11.4497 3.89257 9.63757C2.62506 7.68098 1.83625 5.45332 1.59007 3.13507C1.57133 2.92767 1.59598 2.71864 1.66245 2.52129C1.72892 2.32394 1.83575 2.14259 1.97615 1.98879C2.11654 1.83499 2.28743 1.7121 2.47792 1.62796C2.6684 1.54382 2.87433 1.50027 3.08257 1.50007H5.33257C5.69655 1.49649 6.04942 1.62538 6.32539 1.86272C6.60137 2.10006 6.78163 2.42966 6.83257 2.79007C6.92754 3.51012 7.10366 4.21712 7.35757 4.89757C7.45848 5.16602 7.48032 5.45776 7.4205 5.73823C7.36069 6.01871 7.22172 6.27616 7.02007 6.48007L6.06757 7.43257C7.13524 9.31023 8.68991 10.8649 10.5676 11.9326L11.5201 10.9801C11.724 10.7784 11.9814 10.6395 12.2619 10.5796C12.5424 10.5198 12.8341 10.5417 13.1026 10.6426C13.783 10.8965 14.49 11.0726 15.2101 11.1676C15.5744 11.219 15.9071 11.4025 16.145 11.6832C16.3828 11.9639 16.5092 12.3223 16.5001 12.6901Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1_80376\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"ms-2\">{{getspocDetailsValues(i)?.contact ?\r\n getspocDetailsValues(i)?.contact : 'NA' }}</span></td>\r\n </tr>\r\n </ng-container>\r\n </ng-container>\r\n <tr>\r\n <td>AnyDesk ID\r\n <td>\r\n <span class=\"ms-2\">{{storeForm.get('storeConnectionId')?.value ?\r\n storeForm.get('storeConnectionId')?.value : 'NA' }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-2 mt-10\">\r\n <button type=\"button\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\" (click)=\"navigateToBack('review')\">Back</button>\r\n </div>\r\n <div class=\"col-10 text-end mt-10\">\r\n <!-- <div class=\"text-end\"> -->\r\n <!-- <button type=\"button\" (click)=\"goToStoreInfo()\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\">Edit</button> -->\r\n <button type=\"button\" (click)=\"onSubmit()\"\r\n class=\"btn btn-primary\">Create Store</button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Review & Submit End -->\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".kiwi{fill:#344054}.kiwi.active{fill:#009bf3}.menu-title{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:16px!important;font-weight:500!important;line-height:24px}.menu-state-bg .menu-item .menu-link.active{border-radius:6px!important;background:var(--Primary-50, #EAF8FF)!important;padding:8px 16px}.menu-state-title-primary .menu-item .menu-link.active .menu-title{color:var(--Primary-700, #009BF3)!important}.menu-state-bg .menu-item:not(.here) .menu-link:hover:not(.disabled):not(.active):not(.here) .menu-icon{color:#414b66!important}.menu-state-icon-primary .menu-item .menu-link.active .menu-icon,.menu-state-icon-primary .menu-item .menu-link.active .menu-icon .svg-icon,.menu-state-icon-primary .menu-item .menu-link.active .menu-icon i{color:#009bf3!important}.sub-title{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:18px!important;font-style:normal;font-weight:500!important;line-height:28px}.text-muted-review{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-style:normal;font-weight:500!important;line-height:20px}.text-review-val{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:600!important;line-height:20px}.align-middle{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-weight:500!important;line-height:20px}td{padding:0!important}.invalid-feedback,small{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:400!important;line-height:20px}.is-invalid{border-radius:8px!important;border:1px solid var(--Error-300, #FDA29B)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;padding-right:calc(1.5em + .75rem)!important;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzIyMDFfMjA5NTApIj4KPHBhdGggZD0iTTcuOTk5NjcgNS4zMzM5OFY4LjAwMDY1TTcuOTk5NjcgMTAuNjY3M0g4LjAwNjM0TTE0LjY2NjMgOC4wMDA2NUMxNC42NjYzIDExLjY4MjYgMTEuNjgxNiAxNC42NjczIDcuOTk5NjcgMTQuNjY3M0M0LjMxNzc4IDE0LjY2NzMgMS4zMzMwMSAxMS42ODI2IDEuMzMzMDEgOC4wMDA2NUMxLjMzMzAxIDQuMzE4NzUgNC4zMTc3OCAxLjMzMzk4IDcuOTk5NjcgMS4zMzM5OEMxMS42ODE2IDEuMzMzOTggMTQuNjY2MyA0LjMxODc1IDE0LjY2NjMgOC4wMDA2NVoiIHN0cm9rZT0iI0YwNDQzOCIgc3Ryb2tlLXdpZHRoPSIxLjMzMzMzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8yMjAxXzIwOTUwIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=)!important;background-repeat:no-repeat!important;background-position:right calc(.375em + .1875rem) center!important;background-size:calc(.75em + .375rem) calc(.75em + .375rem)!important}::ng-deep .swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;min-width:2em;height:0em;margin:0 .5em 0 0}::ng-deep .listitem{display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.5rem 1rem;background-color:#f3f6f9;margin-top:.75rem;border-radius:.42rem}::ng-deep .toasttitile{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}::ng-deep .list{overflow-y:auto}::ng-deep .listitemlabel{font-size:13px!important;font-weight:600;font-family:Inter;color:#7e8299}::ng-deep .swal2-container{padding:.4em!important}::ng-deep .swal2-icon{border:1px solid white!important}::ng-deep body.swal2-toast-shown .swal2-container{width:500px!important}::ng-deep .swal2-popup.swal2-toast{border-left:4px solid #009EF7}::ng-deep .swal2-popup.swal2-toast .swal2-title{margin:9px 5px auto!important}::ng-deep .label{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}.spocArea{overflow-y:scroll;max-height:60vh;padding:0;margin:0}::ng-deep .spocArea::-webkit-scrollbar-thumb{-webkit-border-radius:10px!important;border-radius:10px!important;background:var(--gray-100, #eaeaea)!important;height:50px!important}::ng-deep .spocArea::-webkit-scrollbar{width:10px!important}::ng-deep .spocArea::-webkit-scrollbar-track{background:none!important;box-shadow:none!important}.sub-head{color:var(--Gray-900, #101828)!important;font-size:18px!important;font-weight:600!important;line-height:28px}.form-label{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:500!important;line-height:20px}.btn-primary{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:16px!important;font-weight:600;line-height:24px}.btn-outline{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:16px!important;font-weight:600!important;line-height:24px}.btn-light-primary1{border-radius:8px;border:1px solid var(--Primary-50, #EAF8FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px}.alert-required{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:500!important;line-height:20px}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1.NgSelectOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.ɵNgSelectMultipleOption, selector: "option", inputs: ["ngValue", "value"] }, { kind: "directive", type: i1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1.SelectControlValueAccessor, selector: "select:not([multiple])[formControlName],select:not([multiple])[formControl],select:not([multiple])[ngModel]", inputs: ["compareWith"] }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.MinLengthValidator, selector: "[minlength][formControlName],[minlength][formControl],[minlength][ngModel]", inputs: ["minlength"] }, { kind: "directive", type: i1.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i1.FormGroupName, selector: "[formGroupName]", inputs: ["formGroupName"] }, { kind: "directive", type: i1.FormArrayName, selector: "[formArrayName]", inputs: ["formArrayName"] }, { kind: "directive", type: i7.NgxGpAutocompleteDirective, selector: "[ngx-gp-autocomplete]", inputs: ["options"], outputs: ["onAddressChange"], exportAs: ["ngx-places"] }] });
|
|
290
313
|
}
|
|
291
314
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: AddStoresFormComponent, decorators: [{
|
|
292
315
|
type: Component,
|
|
293
|
-
args: [{ selector: "lib-add-stores-form", template: "<div class=\"row mt-3 mb-6\">\r\n <div class=\"col-md-3 col-lg-3 col-xl-3 col-xxl-3\" id=\"left-container\">\r\n <div class=\"card card-flush h-100 mb-0\">\r\n <!--begin::Aside content-->\r\n <div class=\"card-body px-5\">\r\n <div\r\n class=\"menu menu-column menu-rounded menu-state-bg menu-state-title-primary menu-state-icon-primary menu-state-bullet-primary\">\r\n <!--begin::Menu item-->\r\n <div class=\"menu-item my-2\">\r\n <!--begin::Inbox-->\r\n <span class=\"menu-link pe-none\" [ngClass]=\"{ 'active': select === 'store_info' }\">\r\n <span class=\"menu-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path stroke=\"currentColor\"\r\n d=\"M3.08995 6.88369L3.02401 6.98669C2.30358 8.25557 3.06101 9.87945 4.46464 10.0662C4.58627 10.0811 4.70112 10.0892 4.8145 10.0892C5.55255 10.0892 6.20523 9.77229 6.65953 9.27917L7.21286 8.67854L7.76432 9.28089C8.21367 9.77171 8.8652 10.0892 9.60776 10.0892C10.3471 10.0892 11.0022 9.77137 11.4512 9.28089L12.0044 8.67665L12.5576 9.28089C13.0066 9.77137 13.6617 10.0892 14.401 10.0892C15.1404 10.0892 15.7954 9.77137 16.2445 9.28089L16.7977 8.67665L17.3508 9.28089C17.7999 9.77137 18.4549 10.0892 19.1943 10.0892C19.3041 10.0892 19.4223 10.0811 19.5433 10.0663C20.9772 9.87168 21.7355 8.16387 20.9155 6.88419C20.9154 6.88413 20.9154 6.88407 20.9154 6.88402L18.8056 3.59429L18.8056 3.59429L18.8046 3.59282C18.7582 3.52002 18.6649 3.46423 18.5584 3.46423H5.44307C5.3365 3.46423 5.24326 3.52002 5.19681 3.59282L5.19619 3.59379L3.08995 6.88369ZM4.81818 12.7499C4.71644 12.7499 4.616 12.7468 4.5169 12.741V16.6428V18.9642C4.5169 19.8211 5.22663 20.5357 6.11942 20.5357H17.882C18.7748 20.5357 19.4845 19.8211 19.4845 18.9642V16.6428V12.7415C19.3874 12.747 19.2893 12.7499 19.1906 12.7499C19.0022 12.7499 18.8157 12.7398 18.632 12.7202V16.6428V17.3928H17.882H6.11942H5.36942V16.6428V12.721C5.18866 12.74 5.00472 12.7499 4.81818 12.7499Z\" />\r\n </svg></span>\r\n <span class=\"menu-title fw-bold \">Store Info</span>\r\n </span>\r\n <!--end::Inbox-->\r\n </div>\r\n <div class=\"menu-item my-2\">\r\n <!--begin::Inbox-->\r\n <span class=\"menu-link pe-none\" [ngClass]=\"{ 'active': select === 'config' }\">\r\n <span class=\"menu-icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_1017_22270)\">\r\n <path\r\n d=\"M12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15Z\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M19.4 15C19.2669 15.3016 19.2272 15.6362 19.286 15.9606C19.3448 16.285 19.4995 16.5843 19.73 16.82L19.79 16.88C19.976 17.0657 20.1235 17.2863 20.2241 17.5291C20.3248 17.7719 20.3766 18.0322 20.3766 18.295C20.3766 18.5578 20.3248 18.8181 20.2241 19.0609C20.1235 19.3037 19.976 19.5243 19.79 19.71C19.6043 19.896 19.3837 20.0435 19.1409 20.1441C18.8981 20.2448 18.6378 20.2966 18.375 20.2966C18.1122 20.2966 17.8519 20.2448 17.6091 20.1441C17.3663 20.0435 17.1457 19.896 16.96 19.71L16.9 19.65C16.6643 19.4195 16.365 19.2648 16.0406 19.206C15.7162 19.1472 15.3816 19.1869 15.08 19.32C14.7842 19.4468 14.532 19.6572 14.3543 19.9255C14.1766 20.1938 14.0813 20.5082 14.08 20.83V21C14.08 21.5304 13.8693 22.0391 13.4942 22.4142C13.1191 22.7893 12.6104 23 12.08 23C11.5496 23 11.0409 22.7893 10.6658 22.4142C10.2907 22.0391 10.08 21.5304 10.08 21V20.91C10.0723 20.579 9.96512 20.258 9.77251 19.9887C9.5799 19.7194 9.31074 19.5143 9 19.4C8.69838 19.2669 8.36381 19.2272 8.03941 19.286C7.71502 19.3448 7.41568 19.4995 7.18 19.73L7.12 19.79C6.93425 19.976 6.71368 20.1235 6.47088 20.2241C6.22808 20.3248 5.96783 20.3766 5.705 20.3766C5.44217 20.3766 5.18192 20.3248 4.93912 20.2241C4.69632 20.1235 4.47575 19.976 4.29 19.79C4.10405 19.6043 3.95653 19.3837 3.85588 19.1409C3.75523 18.8981 3.70343 18.6378 3.70343 18.375C3.70343 18.1122 3.75523 17.8519 3.85588 17.6091C3.95653 17.3663 4.10405 17.1457 4.29 16.96L4.35 16.9C4.58054 16.6643 4.73519 16.365 4.794 16.0406C4.85282 15.7162 4.81312 15.3816 4.68 15.08C4.55324 14.7842 4.34276 14.532 4.07447 14.3543C3.80618 14.1766 3.49179 14.0813 3.17 14.08H3C2.46957 14.08 1.96086 13.8693 1.58579 13.4942C1.21071 13.1191 1 12.6104 1 12.08C1 11.5496 1.21071 11.0409 1.58579 10.6658C1.96086 10.2907 2.46957 10.08 3 10.08H3.09C3.42099 10.0723 3.742 9.96512 4.0113 9.77251C4.28059 9.5799 4.48572 9.31074 4.6 9C4.73312 8.69838 4.77282 8.36381 4.714 8.03941C4.65519 7.71502 4.50054 7.41568 4.27 7.18L4.21 7.12C4.02405 6.93425 3.87653 6.71368 3.77588 6.47088C3.67523 6.22808 3.62343 5.96783 3.62343 5.705C3.62343 5.44217 3.67523 5.18192 3.77588 4.93912C3.87653 4.69632 4.02405 4.47575 4.21 4.29C4.39575 4.10405 4.61632 3.95653 4.85912 3.85588C5.10192 3.75523 5.36217 3.70343 5.625 3.70343C5.88783 3.70343 6.14808 3.75523 6.39088 3.85588C6.63368 3.95653 6.85425 4.10405 7.04 4.29L7.1 4.35C7.33568 4.58054 7.63502 4.73519 7.95941 4.794C8.28381 4.85282 8.61838 4.81312 8.92 4.68H9C9.29577 4.55324 9.54802 4.34276 9.72569 4.07447C9.90337 3.80618 9.99872 3.49179 10 3.17V3C10 2.46957 10.2107 1.96086 10.5858 1.58579C10.9609 1.21071 11.4696 1 12 1C12.5304 1 13.0391 1.21071 13.4142 1.58579C13.7893 1.96086 14 2.46957 14 3V3.09C14.0013 3.41179 14.0966 3.72618 14.2743 3.99447C14.452 4.26276 14.7042 4.47324 15 4.6C15.3016 4.73312 15.6362 4.77282 15.9606 4.714C16.285 4.65519 16.5843 4.50054 16.82 4.27L16.88 4.21C17.0657 4.02405 17.2863 3.87653 17.5291 3.77588C17.7719 3.67523 18.0322 3.62343 18.295 3.62343C18.5578 3.62343 18.8181 3.67523 19.0609 3.77588C19.3037 3.87653 19.5243 4.02405 19.71 4.21C19.896 4.39575 20.0435 4.61632 20.1441 4.85912C20.2448 5.10192 20.2966 5.36217 20.2966 5.625C20.2966 5.88783 20.2448 6.14808 20.1441 6.39088C20.0435 6.63368 19.896 6.85425 19.71 7.04L19.65 7.1C19.4195 7.33568 19.2648 7.63502 19.206 7.95941C19.1472 8.28381 19.1869 8.61838 19.32 8.92V9C19.4468 9.29577 19.6572 9.54802 19.9255 9.72569C20.1938 9.90337 20.5082 9.99872 20.83 10H21C21.5304 10 22.0391 10.2107 22.4142 10.5858C22.7893 10.9609 23 11.4696 23 12C23 12.5304 22.7893 13.0391 22.4142 13.4142C22.0391 13.7893 21.5304 14 21 14H20.91C20.5882 14.0013 20.2738 14.0966 20.0055 14.2743C19.7372 14.452 19.5268 14.7042 19.4 15Z\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1017_22270\">\r\n <rect width=\"24\" height=\"24\" fill=\"currentColor\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"menu-title fw-bold \">Store Configuration</span>\r\n </span>\r\n <!--end::Inbox-->\r\n </div>\r\n\r\n <!--end::Menu item-->\r\n\r\n\r\n <!--begin::Menu item-->\r\n <div class=\"menu-item my-2\">\r\n <!--begin::Draft-->\r\n <span class=\"menu-link pe-none\" [ngClass]=\"{ 'active': select === 'contact' }\">\r\n <span class=\"menu-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M17 21V19C17 17.9391 16.5786 16.9217 15.8284 16.1716C15.0783 15.4214 14.0609 15 13 15H5C3.93913 15 2.92172 15.4214 2.17157 16.1716C1.42143 16.9217 1 17.9391 1 19V21M23 21V19C22.9993 18.1137 22.7044 17.2528 22.1614 16.5523C21.6184 15.8519 20.8581 15.3516 20 15.13M16 3.13C16.8604 3.3503 17.623 3.8507 18.1676 4.55231C18.7122 5.25392 19.0078 6.11683 19.0078 7.005C19.0078 7.89317 18.7122 8.75608 18.1676 9.45769C17.623 10.1593 16.8604 10.6597 16 10.88M13 7C13 9.20914 11.2091 11 9 11C6.79086 11 5 9.20914 5 7C5 4.79086 6.79086 3 9 3C11.2091 3 13 4.79086 13 7Z\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <span class=\"menu-title fw-bold \">Contact Details</span>\r\n </span>\r\n <!--end::Draft-->\r\n </div>\r\n <!--end::Menu item-->\r\n <!--begin::Menu item-->\r\n <div class=\"menu-item my-2\">\r\n <!--begin::Trash-->\r\n <span class=\"menu-link pe-none\" [ngClass]=\"{ 'active': select === 'review'}\">\r\n <span class=\"menu-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M6 1C5.20435 1 4.44129 1.31607 3.87868 1.87868C3.31607 2.44129 3 3.20435 3 4V20C3 20.7957 3.31607 21.5587 3.87868 22.1213C4.44129 22.6839 5.20435 23 6 23H12H18C18.7957 23 19.5587 22.6839 20.1213 22.1213C20.6839 21.5587 21 20.7957 21 20V16.4208L19 18.4208V20C19 20.2652 18.8946 20.5196 18.7071 20.7071C18.5196 20.8946 18.2652 21 18 21H16.4208L15.3286 22.0922L12 23L12.5455 21H6C5.73478 21 5.48043 20.8946 5.29289 20.7071C5.10536 20.5196 5 20.2652 5 20V4C5 3.73478 5.10536 3.48043 5.29289 3.29289C5.48043 3.10536 5.73478 3 6 3H12V9C12 9.55228 12.4477 10 13 10H19V13.5792L21 11.5792V9C21 8.73478 20.8946 8.48043 20.7071 8.29289L13.7071 1.29289C13.5196 1.10536 13.2652 1 13 1H6ZM17.5858 8L14 4.41421V8H17.5858Z\"\r\n fill=\"currentColor\" />\r\n <path\r\n d=\"M20.0779 11.5014C20.2369 11.3424 20.4256 11.2163 20.6333 11.1303C20.8409 11.0443 21.0635 11 21.2883 11C21.5131 11 21.7357 11.0443 21.9434 11.1303C22.151 11.2163 22.3397 11.3424 22.4987 11.5014C22.6576 11.6603 22.7837 11.849 22.8698 12.0567C22.9558 12.2644 23.0001 12.487 23.0001 12.7117C23.0001 12.9365 22.9558 13.1591 22.8698 13.3668C22.7837 13.5745 22.6576 13.7632 22.4987 13.9221L15.3286 22.0923L12 23.0001L12.9078 19.6715L20.0779 11.5014Z\"\r\n stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <span class=\"menu-title fw-bold \">Review & Submit</span>\r\n </span>\r\n <!--end::Trash-->\r\n </div>\r\n <!--end::Menu item-->\r\n\r\n\r\n </div>\r\n </div>\r\n <!--end::Menu-->\r\n </div>\r\n </div>\r\n <div class=\"col-md-9 col-lg-9 col-xl-9 col-xxl-9\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-bottom-0\">\r\n <h1\r\n class=\"page-heading d-flex text-dark fw-bold fs-2 flex-column justify-content-center my-0 sub-head\">\r\n <span *ngIf=\"select === 'store_info'\">Enter Your Store Details</span>\r\n <span *ngIf=\"select === 'config'\">Enter Your Store Configuration</span>\r\n <span *ngIf=\"select === 'contact'\">Enter Primary SPOC details</span>\r\n <span *ngIf=\"select === 'review'\">Review & submit</span>\r\n </h1>\r\n <div [hidden]=\"select !== 'contact'\" class=\"card-toolbar\">\r\n <button (click)=\"addAltSpoc()\" class=\"btn btn-light-primary1 btn-sm\"><svg class=\"me-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"14\" viewBox=\"0 0 18 14\" fill=\"none\">\r\n <path\r\n d=\"M2.7 3.5C2.7 2.57174 3.07928 1.6815 3.75442 1.02513C4.42955 0.368749 5.34522 0 6.3 0C7.25478 0 8.17045 0.368749 8.84558 1.02513C9.52072 1.6815 9.9 2.57174 9.9 3.5C9.9 4.42826 9.52072 5.3185 8.84558 5.97487C8.17045 6.63125 7.25478 7 6.3 7C5.34522 7 4.42955 6.63125 3.75442 5.97487C3.07928 5.3185 2.7 4.42826 2.7 3.5ZM0 13.1879C0 10.4945 2.24437 8.3125 5.01469 8.3125H7.58531C10.3556 8.3125 12.6 10.4945 12.6 13.1879C12.6 13.6363 12.2259 14 11.7647 14H0.835312C0.374063 14 0 13.6363 0 13.1879ZM14.175 8.53125V6.78125H12.375C12.0009 6.78125 11.7 6.48867 11.7 6.125C11.7 5.76133 12.0009 5.46875 12.375 5.46875H14.175V3.71875C14.175 3.35508 14.4759 3.0625 14.85 3.0625C15.2241 3.0625 15.525 3.35508 15.525 3.71875V5.46875H17.325C17.6991 5.46875 18 5.76133 18 6.125C18 6.48867 17.6991 6.78125 17.325 6.78125H15.525V8.53125C15.525 8.89492 15.2241 9.1875 14.85 9.1875C14.4759 9.1875 14.175 8.89492 14.175 8.53125Z\"\r\n fill=\"#00A3FF\" />\r\n </svg>Add Alternate SPOC</button>\r\n </div>\r\n </div>\r\n <div class=\"card-body pt-1\">\r\n <form [formGroup]=\"storeForm\">\r\n <!-- Store Info Start -->\r\n <div [hidden]=\"select !== 'store_info'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12 col-lg-6 mb-5\">\r\n <label for=\"storeName\" class=\"form-label\">Store Name <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"storeName\" formControlName=\"storeName\" (input)=\"isStoreNameExist = false\"\r\n [ngClass]=\"{ 'is-invalid':(storeForm.get('storeName')?.invalid || isStoreNameExist) && (storeForm.get('storeName')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('storeName')?.touched || submitted) && storeForm.get('storeName')?.hasError('required')\">\r\n Store Name is required.\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('storeName')?.touched || submitted) && isStoreNameExist\">\r\n Store Name already exists.\r\n </small>\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 mb-5\">\r\n <label for=\"storeCode\" class=\"form-label\">Store Code / Ref Code (optional)</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"storeCode\" formControlName=\"storeCode\">\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 mb-5\">\r\n <label for=\"businessType\" class=\"form-label\">Business Type <span class=\"alert-required\">*</span></label>\r\n <select class=\"form-select\" id=\"businessType\" formControlName=\"businessType\">\r\n <option value=\"COCO\">COCO</option>\r\n <option value=\"COFO\">COFO</option>\r\n <option value=\"FOFO\">FOFO</option>\r\n <option value=\"FOCO\">FOCO</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 mb-5\">\r\n <label for=\"storeType\" class=\"form-label\">Store Type <span class=\"alert-required\">*</span></label>\r\n <select class=\"form-select\" id=\"storeType\" formControlName=\"storeType_type\">\r\n <option value=\"High Street\">High Street</option>\r\n <option value=\"Mall Store\">Mall</option>\r\n <option value=\"Kiosk\">Kiosk</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-12 mb-5\" *ngIf=\"storeForm.get('storeType_type')?.value === 'Mall Store'\">\r\n <label for=\"mallName\" class=\"form-label\">Enter Mall Name </label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"mallName\" formControlName=\"storeType_name\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('storeType_name')?.invalid && (storeForm.get('storeType_name')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('storeType_name')?.touched || submitted) && storeForm.get('storeType_name')?.hasError('required')\">\r\n Mall Name is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-12 mb-5\">\r\n <label for=\"address\" class=\"form-label\">Address <span class=\"alert-required\">*</span></label>\r\n <input type=\"text\" class=\"form-control\" id=\"address\" formControlName=\"address\" #placesRef=\"ngx-places\" ngx-gp-autocomplete (onAddressChange)=\"handleAddressChange($event)\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('address')?.invalid && (storeForm.get('address')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('address')?.touched || submitted) && storeForm.get('address')?.hasError('required')\">\r\n Address is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"country\" class=\"form-label\">Country <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"country\" formControlName=\"country\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('country')?.invalid && (storeForm.get('country')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('country')?.touched || submitted) && storeForm.get('country')?.hasError('required')\">\r\n Country is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"state\" class=\"form-label\">State <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"state\" formControlName=\"state\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('state')?.invalid && (storeForm.get('state')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('state')?.touched || submitted) && storeForm.get('state')?.hasError('required')\">\r\n State is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"city\" class=\"form-label\">City / Town <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"city\" formControlName=\"city\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('city')?.invalid && (storeForm.get('city')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('city')?.touched || submitted) && storeForm.get('city')?.hasError('required')\">\r\n City is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"pincode\" class=\"form-label\">Pin / Zip Code <span class=\"alert-required\">*</span> </label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"pincode\" formControlName=\"pincode\" maxlength=\"6\" minlength=\"5\" (keypress)=\"omit_special_char($event)\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('pincode')?.invalid && (storeForm.get('pincode')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('pincode')?.touched || submitted) && storeForm.get('pincode')?.hasError('required')\">\r\n Pincode is required.\r\n </small>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12 text-end\">\r\n <button type=\"button\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\" (click)=\"navigateToAddStore()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"validateStoreInfo() === true\"\r\n (click)=\"goToConfiguration()\">Next</button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Store Info End -->\r\n\r\n <!-- Store Configuration Start -->\r\n <div [hidden]=\"select !== 'config'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"timeZone\" class=\"form-label\">Time Zone</label>\r\n <!-- <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"timeZone\" formControlName=\"timeZone\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('timeZone')?.invalid && storeForm.get('timeZone')?.touched}\"> -->\r\n <select class=\"form-select\" id=\"timeZone\" formControlName=\"timeZone\">\r\n <option *ngFor=\"let timezone of timezones\" [value]=\"timezone\">{{ timezone }}</option>\r\n </select>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('timeZone')?.touched || submitted) && storeForm.get('timeZone')?.hasError('required')\">\r\n Time Zone is required.\r\n </small>\r\n </div>\r\n <!-- <div class=\"col-md-6 mb-5\">\r\n <label for=\"noOfCameras\" class=\"form-label\">No of Cameras</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"noOfCameras\" formControlName=\"cameras\" (keypress)=\"omit_special_char($event)\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('cameras')?.invalid && storeForm.get('cameras')?.touched}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"storeForm.get('cameras')?.touched && storeForm.get('cameras')?.hasError('required')\">\r\n No of Cameras is required.\r\n </small>\r\n </div> -->\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"storeOpenTime\" class=\"form-label\">Store Open Time</label>\r\n <input autocomplete=\"off\" type=\"time\" class=\"form-control\" id=\"storeOpenTime\" formControlName=\"open\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('open')?.invalid && (storeForm.get('open')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('open')?.touched || submitted) && storeForm.get('open')?.hasError('required')\">\r\n Store Open Time is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"storeCloseTime\" class=\"form-label\">Store Close Time</label>\r\n <input autocomplete=\"off\" type=\"time\" class=\"form-control\" id=\"storeCloseTime\" formControlName=\"close\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('close')?.invalid && (storeForm.get('close')?.touched || submitted) || storeForm.hasError('invalidTimeRange')}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('close')?.touched || submitted) && storeForm.get('close')?.hasError('required')\">\r\n Store Close Time is required.\r\n </small>\r\n <small class=\"my-2\" *ngIf=\"storeForm.hasError('invalidTimeRange') && (storeForm.get('open')?.touched || storeForm.get('close')?.touched || submitted)\">\r\n Opening time must be before closing time.\r\n </small>\r\n </div>\r\n </div>\r\n <div class=\"row mt-20\">\r\n <div class=\"col-12 text-end mt-15\">\r\n <button type=\"button\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\" (click)=\"navigateToAddStore()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"storeForm.get('timeZone')?.invalid && storeForm.get('open')?.invalid && storeForm.get('close')?.invalid\" (click)=\"goToContact()\">Next</button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Store Configuration End -->\r\n\r\n <!-- Store Contact Start -->\r\n <div [hidden]=\"select !== 'contact'\">\r\n <div class=\"row\">\r\n <ng-container formArrayName=\"spocDetails\">\r\n <ng-container *ngFor=\"let spocDetail of getspocDetailsControls(); let i = index\" [formGroupName]=\"i\">\r\n <div *ngIf=\"i!==0\" class=\"d-flex justify-content-between align-items-center my-6\">\r\n <ng-container >\r\n <span class=\"fw-bold fs-4\">Alternate SPOC {{i}}</span>\r\n <span (click)=\"delAltSpoc()\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_2250_30650)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M12.5 13.9998H14.1667M14.1667 13.9998H27.5M14.1667 13.9998V25.6665C14.1667 26.1085 14.3423 26.5325 14.6548 26.845C14.9674 27.1576 15.3913 27.3332 15.8333 27.3332H24.1667C24.6087 27.3332 25.0326 27.1576 25.3452 26.845C25.6577 26.5325 25.8333 26.1085 25.8333 25.6665V13.9998H14.1667ZM16.6667 13.9998V12.3332C16.6667 11.8911 16.8423 11.4672 17.1548 11.1547C17.4674 10.8421 17.8913 10.6665 18.3333 10.6665H21.6667C22.1087 10.6665 22.5326 10.8421 22.8452 11.1547C23.1577 11.4672 23.3333 11.8911 23.3333 12.3332V13.9998M18.3333 18.1665V23.1665M21.6667 18.1665V23.1665\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2250_30650\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_2250_30650\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2250_30650\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"contactName\" class=\"form-label\">Name</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"contactName\" formControlName=\"name\"\r\n [ngClass]=\"{ 'is-invalid':spocDetail.get('name')?.invalid && (spocDetail.get('name')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(spocDetail.get('name')?.touched || submitted) && spocDetail.get('name')?.hasError('required')\">\r\n Name is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"contactEmail\" class=\"form-label\">Email</label>\r\n <input autocomplete=\"off\" type=\"email\" class=\"form-control\" id=\"contactEmail\" formControlName=\"email\"\r\n pattern=\"^([a-zA-Z0-9_\\-\\.]+)@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-zA-Z]{2,3})$\"\r\n [ngClass]=\"{ 'is-invalid':spocDetail.get('email')?.invalid && (spocDetail.get('email')?.touched || submitted)}\">\r\n <ng-container *ngIf=\"(spocDetail.get('email')?.touched || submitted)\">\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('email')?.hasError('required')\">\r\n Email is required.\r\n </small>\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('email')?.hasError('minlength')\">\r\n Email must be at least 3 characters long.\r\n </small>\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('email')?.hasError('maxlength')\">\r\n Email must be not more than 100 characters long.\r\n </small>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"contactNumber\" class=\"form-label\">Contact Number</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"contactNumber\" minlength=\"10\" maxlength=\"13\"\r\n (keypress)=\"omit_special_char($event)\" formControlName=\"contact\"\r\n [ngClass]=\"{ 'is-invalid':spocDetail.get('contact')?.invalid && (spocDetail.get('contact')?.touched || submitted )}\">\r\n <ng-container *ngIf=\"(spocDetail.get('contact')?.touched || submitted)\">\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('contact')?.hasError('required')\">\r\n Contact is required.\r\n </small>\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('contact')?.hasError('minlength')\">\r\n Contact must be at least 10 digits.\r\n </small>\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('contact')?.hasError('maxlength')\">\r\n Contact must be not more than 13 digits.\r\n </small>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"designation\" class=\"form-label\">Designation (optional)</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"designation\" formControlName=\"designation\">\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <div class=\"col-md-12 mb-5\">\r\n <h1 class=\"sub-head\">Enter Store Connection Details</h1>\r\n </div>\r\n <div class=\"col-md-12 mb-5\">\r\n <label for=\"anyDeskID\" class=\"form-label\">AnyDesk ID / TeamViewer ID (optional)</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"anyDeskID\"\r\n formControlName=\"storeConnectionId\">\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12 text-end\">\r\n <button type=\"button\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\" (click)=\"navigateToAddStore()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"storeForm.get('spocDetails')?.invalid\" (click)=\"goToReview()\">Next</button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Store Contact End -->\r\n\r\n <!-- Review & Submit Start -->\r\n <div [hidden]=\"select !== 'review'\">\r\n <div class=\"fs-4 fw-bold text-hover-primary sub-title text-gray-600 m-0 cursor-pointer\">Store\r\n Info\r\n </div>\r\n <div class=\"card-body p-9\">\r\n\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Name</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">{{storeForm.get('storeName')?.value ?\r\n storeForm.get('storeName')?.value : 'NA'}}</span>\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Code</label>\r\n <div class=\"col-lg-9 fv-row\"><span\r\n class=\"fw-bold fs-6 text-review-val\">{{storeForm.get('storeCode')?.value ?\r\n storeForm.get('storeCode')?.value: 'NA'}}</span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Business Type</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bold fs-6 text-review-val text-hover-primary\">\r\n {{storeForm.get('businessType')?.value ? storeForm.get('businessType')?.value :\r\n 'NA'}} </span>\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Type\r\n <!-- <i data-bs-toggle=\"tooltip\"\r\n title=\"Phone number must be active\" class=\"fas fa-exclamation-circle ms-1 fs-7\"></i> -->\r\n </label>\r\n <div class=\"col-lg-9 d-flex align-items-center\">\r\n <span\r\n class=\"fw-bolder fs-6 me-2 text-review-val\">{{storeForm.get('storeType_type')?.value\r\n ? storeForm.get('storeType_type')?.value : 'NA'}}</span>\r\n <!-- <span class=\"badge badge-success\">Verified</span> -->\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\"\r\n *ngIf=\"storeForm.get('storeType_type')?.value && storeForm.get('storeType_type')?.value === 'Mall Store'\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\"> Mall Name</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">{{storeForm.get('storeType_name')?.value\r\n ? storeForm.get('storeType_name')?.value : 'NA'}}</span>\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Address</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">\r\n <ng-container>\r\n {{storeForm.get('address')?.value ? storeForm.get('address')?.value : 'NA'}}\r\n </ng-container>\r\n </span>\r\n </div>\r\n </div>\r\n <!-- <div class=\"row mb-10\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Allow Changes</label>\r\n <div class=\"col-lg-9\"><span class=\"fw-bold fs-6\">Yes</span></div>\r\n </div> -->\r\n\r\n </div>\r\n <div class=\"fs-4 fw-bold text-hover-primary sub-title text-gray-600 m-0 cursor-pointer\">Store\r\n Configuration</div>\r\n <div class=\"card-body p-9\">\r\n\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Time Zone</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">{{storeForm.get('timeZone')?.value ?\r\n storeForm.get('timeZone')?.value : 'NA'}}</span>\r\n </div>\r\n </div>\r\n <!-- <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">No of Cameras</label>\r\n <div class=\"col-lg-9 fv-row\"><span\r\n class=\"fw-bold fs-6 text-review-val\">{{storeForm.get('cameras')?.value ?\r\n storeForm.get('cameras')?.value : 'NA'}}</span>\r\n </div>\r\n </div> -->\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Open Time</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bold fs-6 text-review-val text-hover-primary\">{{storeForm.get('open')?.value\r\n ? storeForm.get('open')?.value : 'NA'}}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Close Time</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">{{storeForm.get('close')?.value ?\r\n storeForm.get('close')?.value : 'NA'}}</span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"fs-4 fw-bold text-hover-primary sub-title text-gray-600 m-0 cursor-pointer\">Contact\r\n Details</div>\r\n <div class=\"card-body row px-9 pt-3 pb-4\">\r\n <div class=\"table-responsive col-md-12 col-lg-12 col-xl-9 col-xxl-8\">\r\n <table class=\"table align-middle gy-6\">\r\n <tbody class=\"fs-6 fw-bold\"> \r\n <ng-container formArrayName=\"spocDetails\">\r\n <ng-container *ngFor=\"let spoc of getspocDetailsControls();let i=index;\">\r\n <tr>\r\n <td>Spoc {{i+1}}</td>\r\n <td><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path\r\n d=\"M15 15.75V14.25C15 13.4544 14.6839 12.6913 14.1213 12.1287C13.5587 11.5661 12.7956 11.25 12 11.25H6C5.20435 11.25 4.44129 11.5661 3.87868 12.1287C3.31607 12.6913 3 13.4544 3 14.25V15.75M12 5.25C12 6.90685 10.6569 8.25 9 8.25C7.34315 8.25 6 6.90685 6 5.25C6 3.59315 7.34315 2.25 9 2.25C10.6569 2.25 12 3.59315 12 5.25Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2\">{{getspocDetailsValues(i)?.name ?\r\n getspocDetailsValues(i)?.name : 'NA' }}</span></td>\r\n <td><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1_80373)\">\r\n <path\r\n d=\"M12 6.00002V9.75002C12 10.3468 12.2371 10.9191 12.659 11.341C13.081 11.763 13.6533 12 14.25 12C14.8467 12 15.419 11.763 15.841 11.341C16.263 10.9191 16.5 10.3468 16.5 9.75002V9.00002C16.4999 7.30729 15.9272 5.66438 14.875 4.33842C13.8227 3.01246 12.3529 2.08144 10.7045 1.69675C9.05605 1.31205 7.32596 1.4963 5.79552 2.21955C4.26508 2.94279 3.02431 4.16249 2.27495 5.68032C1.5256 7.19814 1.31173 8.92483 1.66813 10.5796C2.02453 12.2344 2.93024 13.7199 4.23798 14.7947C5.54572 15.8695 7.17858 16.4703 8.87106 16.4994C10.5635 16.5285 12.2161 15.9842 13.56 14.955M12 9.00002C12 10.6569 10.6569 12 9.00001 12C7.34315 12 6.00001 10.6569 6.00001 9.00002C6.00001 7.34317 7.34315 6.00002 9.00001 6.00002C10.6569 6.00002 12 7.34317 12 9.00002Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1_80373\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"ms-2\">{{getspocDetailsValues(i)?.email ?\r\n getspocDetailsValues(i)?.email : 'NA' }}</span></td>\r\n <td><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1_80376)\">\r\n <path\r\n d=\"M16.5001 12.6901V14.9401C16.5009 15.1489 16.4581 15.3557 16.3745 15.5471C16.2908 15.7385 16.168 15.9103 16.0141 16.0515C15.8602 16.1927 15.6785 16.3002 15.4806 16.3671C15.2828 16.434 15.0731 16.4589 14.8651 16.4401C12.5572 16.1893 10.3403 15.4007 8.39257 14.1376C6.58044 12.9861 5.04407 11.4497 3.89257 9.63757C2.62506 7.68098 1.83625 5.45332 1.59007 3.13507C1.57133 2.92767 1.59598 2.71864 1.66245 2.52129C1.72892 2.32394 1.83575 2.14259 1.97615 1.98879C2.11654 1.83499 2.28743 1.7121 2.47792 1.62796C2.6684 1.54382 2.87433 1.50027 3.08257 1.50007H5.33257C5.69655 1.49649 6.04942 1.62538 6.32539 1.86272C6.60137 2.10006 6.78163 2.42966 6.83257 2.79007C6.92754 3.51012 7.10366 4.21712 7.35757 4.89757C7.45848 5.16602 7.48032 5.45776 7.4205 5.73823C7.36069 6.01871 7.22172 6.27616 7.02007 6.48007L6.06757 7.43257C7.13524 9.31023 8.68991 10.8649 10.5676 11.9326L11.5201 10.9801C11.724 10.7784 11.9814 10.6395 12.2619 10.5796C12.5424 10.5198 12.8341 10.5417 13.1026 10.6426C13.783 10.8965 14.49 11.0726 15.2101 11.1676C15.5744 11.219 15.9071 11.4025 16.145 11.6832C16.3828 11.9639 16.5092 12.3223 16.5001 12.6901Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1_80376\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"ms-2\">{{getspocDetailsValues(i)?.contact ?\r\n getspocDetailsValues(i)?.contact : 'NA' }}</span></td>\r\n </tr>\r\n </ng-container>\r\n </ng-container>\r\n <tr>\r\n <td>AnyDesk ID\r\n <td>\r\n <span class=\"ms-2\">{{storeForm.get('storeConnectionId')?.value ?\r\n storeForm.get('storeConnectionId')?.value : 'NA' }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"text-end\">\r\n <button type=\"button\" (click)=\"goToStoreInfo()\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\">Edit</button>\r\n <button type=\"button\" (click)=\"onSubmit()\"\r\n class=\"btn btn-primary\">Submit</button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Review & Submit End -->\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".kiwi{fill:#344054}.kiwi.active{fill:#009bf3}.menu-title{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:16px!important;font-weight:500!important;line-height:24px}.menu-state-bg .menu-item .menu-link.active{border-radius:6px!important;background:var(--Primary-50, #EAF8FF)!important;padding:8px 16px}.menu-state-title-primary .menu-item .menu-link.active .menu-title{color:var(--Primary-700, #009BF3)!important}.menu-state-bg .menu-item:not(.here) .menu-link:hover:not(.disabled):not(.active):not(.here) .menu-icon{color:#414b66!important}.menu-state-icon-primary .menu-item .menu-link.active .menu-icon,.menu-state-icon-primary .menu-item .menu-link.active .menu-icon .svg-icon,.menu-state-icon-primary .menu-item .menu-link.active .menu-icon i{color:#009bf3!important}.sub-title{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:18px!important;font-style:normal;font-weight:500!important;line-height:28px}.text-muted-review{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-style:normal;font-weight:500!important;line-height:20px}.text-review-val{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:600!important;line-height:20px}.align-middle{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-weight:500!important;line-height:20px}td{padding:0!important}.invalid-feedback,small{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:400!important;line-height:20px}.is-invalid{border-radius:8px!important;border:1px solid var(--Error-300, #FDA29B)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;padding-right:calc(1.5em + .75rem)!important;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzIyMDFfMjA5NTApIj4KPHBhdGggZD0iTTcuOTk5NjcgNS4zMzM5OFY4LjAwMDY1TTcuOTk5NjcgMTAuNjY3M0g4LjAwNjM0TTE0LjY2NjMgOC4wMDA2NUMxNC42NjYzIDExLjY4MjYgMTEuNjgxNiAxNC42NjczIDcuOTk5NjcgMTQuNjY3M0M0LjMxNzc4IDE0LjY2NzMgMS4zMzMwMSAxMS42ODI2IDEuMzMzMDEgOC4wMDA2NUMxLjMzMzAxIDQuMzE4NzUgNC4zMTc3OCAxLjMzMzk4IDcuOTk5NjcgMS4zMzM5OEMxMS42ODE2IDEuMzMzOTggMTQuNjY2MyA0LjMxODc1IDE0LjY2NjMgOC4wMDA2NVoiIHN0cm9rZT0iI0YwNDQzOCIgc3Ryb2tlLXdpZHRoPSIxLjMzMzMzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8yMjAxXzIwOTUwIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=)!important;background-repeat:no-repeat!important;background-position:right calc(.375em + .1875rem) center!important;background-size:calc(.75em + .375rem) calc(.75em + .375rem)!important}::ng-deep .swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;min-width:2em;height:0em;margin:0 .5em 0 0}::ng-deep .listitem{display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.5rem 1rem;background-color:#f3f6f9;margin-top:.75rem;border-radius:.42rem}::ng-deep .toasttitile{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}::ng-deep .list{overflow-y:auto}::ng-deep .listitemlabel{font-size:13px!important;font-weight:600;font-family:Inter;color:#7e8299}::ng-deep .swal2-container{padding:.4em!important}::ng-deep .swal2-icon{border:1px solid white!important}::ng-deep body.swal2-toast-shown .swal2-container{width:500px!important}::ng-deep .swal2-popup.swal2-toast{border-left:4px solid #009EF7}::ng-deep .swal2-popup.swal2-toast .swal2-title{margin:9px 5px auto!important}::ng-deep .label{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}.spocArea{overflow-y:scroll;max-height:60vh;padding:0;margin:0}::ng-deep .spocArea::-webkit-scrollbar-thumb{-webkit-border-radius:10px!important;border-radius:10px!important;background:var(--gray-100, #eaeaea)!important;height:50px!important}::ng-deep .spocArea::-webkit-scrollbar{width:10px!important}::ng-deep .spocArea::-webkit-scrollbar-track{background:none!important;box-shadow:none!important}.sub-head{color:var(--Gray-900, #101828)!important;font-size:18px!important;font-weight:600!important;line-height:28px}.form-label{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:500!important;line-height:20px}.btn-primary{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:16px!important;font-weight:600;line-height:24px}.btn-outline{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:16px!important;font-weight:600!important;line-height:24px}.btn-light-primary1{border-radius:8px;border:1px solid var(--Primary-50, #EAF8FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px}.alert-required{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:500!important;line-height:20px}\n"] }]
|
|
294
|
-
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.
|
|
316
|
+
args: [{ selector: "lib-add-stores-form", template: "<div class=\"row mt-3 mb-6\">\r\n <div class=\"col-md-3 col-lg-3 col-xl-3 col-xxl-3\" id=\"left-container\">\r\n <div class=\"card card-flush h-100 mb-0\">\r\n <!--begin::Aside content-->\r\n <div class=\"card-body px-5\">\r\n <div\r\n class=\"menu menu-column menu-rounded menu-state-bg menu-state-title-primary menu-state-icon-primary menu-state-bullet-primary\">\r\n <!--begin::Menu item-->\r\n <div class=\"menu-item my-2\">\r\n <!--begin::Inbox-->\r\n <span class=\"menu-link pe-none\" [ngClass]=\"{ 'active': select === 'store_info' }\">\r\n <span class=\"menu-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path stroke=\"currentColor\"\r\n d=\"M3.08995 6.88369L3.02401 6.98669C2.30358 8.25557 3.06101 9.87945 4.46464 10.0662C4.58627 10.0811 4.70112 10.0892 4.8145 10.0892C5.55255 10.0892 6.20523 9.77229 6.65953 9.27917L7.21286 8.67854L7.76432 9.28089C8.21367 9.77171 8.8652 10.0892 9.60776 10.0892C10.3471 10.0892 11.0022 9.77137 11.4512 9.28089L12.0044 8.67665L12.5576 9.28089C13.0066 9.77137 13.6617 10.0892 14.401 10.0892C15.1404 10.0892 15.7954 9.77137 16.2445 9.28089L16.7977 8.67665L17.3508 9.28089C17.7999 9.77137 18.4549 10.0892 19.1943 10.0892C19.3041 10.0892 19.4223 10.0811 19.5433 10.0663C20.9772 9.87168 21.7355 8.16387 20.9155 6.88419C20.9154 6.88413 20.9154 6.88407 20.9154 6.88402L18.8056 3.59429L18.8056 3.59429L18.8046 3.59282C18.7582 3.52002 18.6649 3.46423 18.5584 3.46423H5.44307C5.3365 3.46423 5.24326 3.52002 5.19681 3.59282L5.19619 3.59379L3.08995 6.88369ZM4.81818 12.7499C4.71644 12.7499 4.616 12.7468 4.5169 12.741V16.6428V18.9642C4.5169 19.8211 5.22663 20.5357 6.11942 20.5357H17.882C18.7748 20.5357 19.4845 19.8211 19.4845 18.9642V16.6428V12.7415C19.3874 12.747 19.2893 12.7499 19.1906 12.7499C19.0022 12.7499 18.8157 12.7398 18.632 12.7202V16.6428V17.3928H17.882H6.11942H5.36942V16.6428V12.721C5.18866 12.74 5.00472 12.7499 4.81818 12.7499Z\" />\r\n </svg></span>\r\n <span class=\"menu-title fw-bold \">Store Info</span>\r\n </span>\r\n <!--end::Inbox-->\r\n </div>\r\n <div class=\"menu-item my-2\">\r\n <!--begin::Inbox-->\r\n <span class=\"menu-link pe-none\" [ngClass]=\"{ 'active': select === 'config' }\">\r\n <span class=\"menu-icon\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"\r\n fill=\"none\">\r\n <g clip-path=\"url(#clip0_1017_22270)\">\r\n <path\r\n d=\"M12 15C13.6569 15 15 13.6569 15 12C15 10.3431 13.6569 9 12 9C10.3431 9 9 10.3431 9 12C9 13.6569 10.3431 15 12 15Z\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n <path\r\n d=\"M19.4 15C19.2669 15.3016 19.2272 15.6362 19.286 15.9606C19.3448 16.285 19.4995 16.5843 19.73 16.82L19.79 16.88C19.976 17.0657 20.1235 17.2863 20.2241 17.5291C20.3248 17.7719 20.3766 18.0322 20.3766 18.295C20.3766 18.5578 20.3248 18.8181 20.2241 19.0609C20.1235 19.3037 19.976 19.5243 19.79 19.71C19.6043 19.896 19.3837 20.0435 19.1409 20.1441C18.8981 20.2448 18.6378 20.2966 18.375 20.2966C18.1122 20.2966 17.8519 20.2448 17.6091 20.1441C17.3663 20.0435 17.1457 19.896 16.96 19.71L16.9 19.65C16.6643 19.4195 16.365 19.2648 16.0406 19.206C15.7162 19.1472 15.3816 19.1869 15.08 19.32C14.7842 19.4468 14.532 19.6572 14.3543 19.9255C14.1766 20.1938 14.0813 20.5082 14.08 20.83V21C14.08 21.5304 13.8693 22.0391 13.4942 22.4142C13.1191 22.7893 12.6104 23 12.08 23C11.5496 23 11.0409 22.7893 10.6658 22.4142C10.2907 22.0391 10.08 21.5304 10.08 21V20.91C10.0723 20.579 9.96512 20.258 9.77251 19.9887C9.5799 19.7194 9.31074 19.5143 9 19.4C8.69838 19.2669 8.36381 19.2272 8.03941 19.286C7.71502 19.3448 7.41568 19.4995 7.18 19.73L7.12 19.79C6.93425 19.976 6.71368 20.1235 6.47088 20.2241C6.22808 20.3248 5.96783 20.3766 5.705 20.3766C5.44217 20.3766 5.18192 20.3248 4.93912 20.2241C4.69632 20.1235 4.47575 19.976 4.29 19.79C4.10405 19.6043 3.95653 19.3837 3.85588 19.1409C3.75523 18.8981 3.70343 18.6378 3.70343 18.375C3.70343 18.1122 3.75523 17.8519 3.85588 17.6091C3.95653 17.3663 4.10405 17.1457 4.29 16.96L4.35 16.9C4.58054 16.6643 4.73519 16.365 4.794 16.0406C4.85282 15.7162 4.81312 15.3816 4.68 15.08C4.55324 14.7842 4.34276 14.532 4.07447 14.3543C3.80618 14.1766 3.49179 14.0813 3.17 14.08H3C2.46957 14.08 1.96086 13.8693 1.58579 13.4942C1.21071 13.1191 1 12.6104 1 12.08C1 11.5496 1.21071 11.0409 1.58579 10.6658C1.96086 10.2907 2.46957 10.08 3 10.08H3.09C3.42099 10.0723 3.742 9.96512 4.0113 9.77251C4.28059 9.5799 4.48572 9.31074 4.6 9C4.73312 8.69838 4.77282 8.36381 4.714 8.03941C4.65519 7.71502 4.50054 7.41568 4.27 7.18L4.21 7.12C4.02405 6.93425 3.87653 6.71368 3.77588 6.47088C3.67523 6.22808 3.62343 5.96783 3.62343 5.705C3.62343 5.44217 3.67523 5.18192 3.77588 4.93912C3.87653 4.69632 4.02405 4.47575 4.21 4.29C4.39575 4.10405 4.61632 3.95653 4.85912 3.85588C5.10192 3.75523 5.36217 3.70343 5.625 3.70343C5.88783 3.70343 6.14808 3.75523 6.39088 3.85588C6.63368 3.95653 6.85425 4.10405 7.04 4.29L7.1 4.35C7.33568 4.58054 7.63502 4.73519 7.95941 4.794C8.28381 4.85282 8.61838 4.81312 8.92 4.68H9C9.29577 4.55324 9.54802 4.34276 9.72569 4.07447C9.90337 3.80618 9.99872 3.49179 10 3.17V3C10 2.46957 10.2107 1.96086 10.5858 1.58579C10.9609 1.21071 11.4696 1 12 1C12.5304 1 13.0391 1.21071 13.4142 1.58579C13.7893 1.96086 14 2.46957 14 3V3.09C14.0013 3.41179 14.0966 3.72618 14.2743 3.99447C14.452 4.26276 14.7042 4.47324 15 4.6C15.3016 4.73312 15.6362 4.77282 15.9606 4.714C16.285 4.65519 16.5843 4.50054 16.82 4.27L16.88 4.21C17.0657 4.02405 17.2863 3.87653 17.5291 3.77588C17.7719 3.67523 18.0322 3.62343 18.295 3.62343C18.5578 3.62343 18.8181 3.67523 19.0609 3.77588C19.3037 3.87653 19.5243 4.02405 19.71 4.21C19.896 4.39575 20.0435 4.61632 20.1441 4.85912C20.2448 5.10192 20.2966 5.36217 20.2966 5.625C20.2966 5.88783 20.2448 6.14808 20.1441 6.39088C20.0435 6.63368 19.896 6.85425 19.71 7.04L19.65 7.1C19.4195 7.33568 19.2648 7.63502 19.206 7.95941C19.1472 8.28381 19.1869 8.61838 19.32 8.92V9C19.4468 9.29577 19.6572 9.54802 19.9255 9.72569C20.1938 9.90337 20.5082 9.99872 20.83 10H21C21.5304 10 22.0391 10.2107 22.4142 10.5858C22.7893 10.9609 23 11.4696 23 12C23 12.5304 22.7893 13.0391 22.4142 13.4142C22.0391 13.7893 21.5304 14 21 14H20.91C20.5882 14.0013 20.2738 14.0966 20.0055 14.2743C19.7372 14.452 19.5268 14.7042 19.4 15Z\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1017_22270\">\r\n <rect width=\"24\" height=\"24\" fill=\"currentColor\" />\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n\r\n </span>\r\n <span class=\"menu-title fw-bold \">Store Configuration</span>\r\n </span>\r\n <!--end::Inbox-->\r\n </div>\r\n\r\n <!--end::Menu item-->\r\n\r\n\r\n <!--begin::Menu item-->\r\n <div class=\"menu-item my-2\">\r\n <!--begin::Draft-->\r\n <span class=\"menu-link pe-none\" [ngClass]=\"{ 'active': select === 'contact' }\">\r\n <span class=\"menu-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path\r\n d=\"M17 21V19C17 17.9391 16.5786 16.9217 15.8284 16.1716C15.0783 15.4214 14.0609 15 13 15H5C3.93913 15 2.92172 15.4214 2.17157 16.1716C1.42143 16.9217 1 17.9391 1 19V21M23 21V19C22.9993 18.1137 22.7044 17.2528 22.1614 16.5523C21.6184 15.8519 20.8581 15.3516 20 15.13M16 3.13C16.8604 3.3503 17.623 3.8507 18.1676 4.55231C18.7122 5.25392 19.0078 6.11683 19.0078 7.005C19.0078 7.89317 18.7122 8.75608 18.1676 9.45769C17.623 10.1593 16.8604 10.6597 16 10.88M13 7C13 9.20914 11.2091 11 9 11C6.79086 11 5 9.20914 5 7C5 4.79086 6.79086 3 9 3C11.2091 3 13 4.79086 13 7Z\"\r\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <span class=\"menu-title fw-bold \">Contact Details</span>\r\n </span>\r\n <!--end::Draft-->\r\n </div>\r\n <!--end::Menu item-->\r\n <!--begin::Menu item-->\r\n <div class=\"menu-item my-2\">\r\n <!--begin::Trash-->\r\n <span class=\"menu-link pe-none\" [ngClass]=\"{ 'active': select === 'review'}\">\r\n <span class=\"menu-icon\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\"\r\n d=\"M6 1C5.20435 1 4.44129 1.31607 3.87868 1.87868C3.31607 2.44129 3 3.20435 3 4V20C3 20.7957 3.31607 21.5587 3.87868 22.1213C4.44129 22.6839 5.20435 23 6 23H12H18C18.7957 23 19.5587 22.6839 20.1213 22.1213C20.6839 21.5587 21 20.7957 21 20V16.4208L19 18.4208V20C19 20.2652 18.8946 20.5196 18.7071 20.7071C18.5196 20.8946 18.2652 21 18 21H16.4208L15.3286 22.0922L12 23L12.5455 21H6C5.73478 21 5.48043 20.8946 5.29289 20.7071C5.10536 20.5196 5 20.2652 5 20V4C5 3.73478 5.10536 3.48043 5.29289 3.29289C5.48043 3.10536 5.73478 3 6 3H12V9C12 9.55228 12.4477 10 13 10H19V13.5792L21 11.5792V9C21 8.73478 20.8946 8.48043 20.7071 8.29289L13.7071 1.29289C13.5196 1.10536 13.2652 1 13 1H6ZM17.5858 8L14 4.41421V8H17.5858Z\"\r\n fill=\"currentColor\" />\r\n <path\r\n d=\"M20.0779 11.5014C20.2369 11.3424 20.4256 11.2163 20.6333 11.1303C20.8409 11.0443 21.0635 11 21.2883 11C21.5131 11 21.7357 11.0443 21.9434 11.1303C22.151 11.2163 22.3397 11.3424 22.4987 11.5014C22.6576 11.6603 22.7837 11.849 22.8698 12.0567C22.9558 12.2644 23.0001 12.487 23.0001 12.7117C23.0001 12.9365 22.9558 13.1591 22.8698 13.3668C22.7837 13.5745 22.6576 13.7632 22.4987 13.9221L15.3286 22.0923L12 23.0001L12.9078 19.6715L20.0779 11.5014Z\"\r\n stroke=\"currentColor\" stroke-width=\"1.6\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg></span>\r\n <span class=\"menu-title fw-bold \">Review & Submit</span>\r\n </span>\r\n <!--end::Trash-->\r\n </div>\r\n <!--end::Menu item-->\r\n\r\n\r\n </div>\r\n </div>\r\n <!--end::Menu-->\r\n </div>\r\n </div>\r\n <div class=\"col-md-9 col-lg-9 col-xl-9 col-xxl-9\">\r\n <div class=\"card\">\r\n <div class=\"card-header border-bottom-0\">\r\n <h1\r\n class=\"page-heading d-flex text-dark fw-bold fs-2 flex-column justify-content-center my-0 sub-head\">\r\n <span *ngIf=\"select === 'store_info'\">Enter Your Store Details</span>\r\n <span *ngIf=\"select === 'config'\">Enter Your Store Configuration</span>\r\n <span *ngIf=\"select === 'contact'\">Enter Primary SPOC details</span>\r\n <span *ngIf=\"select === 'review'\">Review & submit</span>\r\n </h1>\r\n <div [hidden]=\"select !== 'contact'\" class=\"card-toolbar\">\r\n <button (click)=\"addAltSpoc()\" class=\"btn btn-light-primary1 btn-sm\"><svg class=\"me-2\"\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"14\" viewBox=\"0 0 18 14\" fill=\"none\">\r\n <path\r\n d=\"M2.7 3.5C2.7 2.57174 3.07928 1.6815 3.75442 1.02513C4.42955 0.368749 5.34522 0 6.3 0C7.25478 0 8.17045 0.368749 8.84558 1.02513C9.52072 1.6815 9.9 2.57174 9.9 3.5C9.9 4.42826 9.52072 5.3185 8.84558 5.97487C8.17045 6.63125 7.25478 7 6.3 7C5.34522 7 4.42955 6.63125 3.75442 5.97487C3.07928 5.3185 2.7 4.42826 2.7 3.5ZM0 13.1879C0 10.4945 2.24437 8.3125 5.01469 8.3125H7.58531C10.3556 8.3125 12.6 10.4945 12.6 13.1879C12.6 13.6363 12.2259 14 11.7647 14H0.835312C0.374063 14 0 13.6363 0 13.1879ZM14.175 8.53125V6.78125H12.375C12.0009 6.78125 11.7 6.48867 11.7 6.125C11.7 5.76133 12.0009 5.46875 12.375 5.46875H14.175V3.71875C14.175 3.35508 14.4759 3.0625 14.85 3.0625C15.2241 3.0625 15.525 3.35508 15.525 3.71875V5.46875H17.325C17.6991 5.46875 18 5.76133 18 6.125C18 6.48867 17.6991 6.78125 17.325 6.78125H15.525V8.53125C15.525 8.89492 15.2241 9.1875 14.85 9.1875C14.4759 9.1875 14.175 8.89492 14.175 8.53125Z\"\r\n fill=\"#00A3FF\" />\r\n </svg>Add Alternate SPOC</button>\r\n </div>\r\n </div>\r\n <div class=\"card-body pt-1\">\r\n <form [formGroup]=\"storeForm\">\r\n <!-- Store Info Start -->\r\n <div [hidden]=\"select !== 'store_info'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-12 col-lg-6 mb-5\">\r\n <label for=\"storeName\" class=\"form-label\">Store Name <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"storeName\" formControlName=\"storeName\" (input)=\"isStoreNameExist = false\"\r\n [ngClass]=\"{ 'is-invalid':(storeForm.get('storeName')?.invalid || isStoreNameExist) && (storeForm.get('storeName')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('storeName')?.touched || submitted) && storeForm.get('storeName')?.hasError('required')\">\r\n Store Name is required.\r\n </small>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('storeName')?.touched || submitted) && isStoreNameExist\">\r\n Store Name already exists.\r\n </small>\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 mb-5\">\r\n <label for=\"storeCode\" class=\"form-label\">Store Code / Ref Code (optional)</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"storeCode\" formControlName=\"storeCode\">\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 mb-5\">\r\n <label for=\"businessType\" class=\"form-label\">Business Type <span class=\"alert-required\">*</span></label>\r\n <select class=\"form-select\" id=\"businessType\" formControlName=\"businessType\">\r\n <option value=\"COCO\">COCO</option>\r\n <option value=\"COFO\">COFO</option>\r\n <option value=\"FOFO\">FOFO</option>\r\n <option value=\"FOCO\">FOCO</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-12 col-lg-6 mb-5\">\r\n <label for=\"storeType\" class=\"form-label\">Store Type <span class=\"alert-required\">*</span></label>\r\n <select class=\"form-select\" id=\"storeType\" formControlName=\"storeType_type\">\r\n <option value=\"High Street\">High Street</option>\r\n <option value=\"Mall Store\">Mall</option>\r\n <option value=\"Kiosk\">Kiosk</option>\r\n </select>\r\n </div>\r\n <div class=\"col-md-12 mb-5\" *ngIf=\"storeForm.get('storeType_type')?.value === 'Mall Store'\">\r\n <label for=\"mallName\" class=\"form-label\">Enter Mall Name </label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"mallName\" formControlName=\"storeType_name\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('storeType_name')?.invalid && (storeForm.get('storeType_name')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('storeType_name')?.touched || submitted) && storeForm.get('storeType_name')?.hasError('required')\">\r\n Mall Name is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-12 mb-5\">\r\n <label for=\"address\" class=\"form-label\">Address <span class=\"alert-required\">*</span></label>\r\n <input type=\"text\" class=\"form-control\" id=\"address\" formControlName=\"address\" #placesRef=\"ngx-places\" ngx-gp-autocomplete (onAddressChange)=\"handleAddressChange($event)\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('address')?.invalid && (storeForm.get('address')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('address')?.touched || submitted) && storeForm.get('address')?.hasError('required')\">\r\n Address is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"country\" class=\"form-label\">Country <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"country\" formControlName=\"country\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('country')?.invalid && (storeForm.get('country')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('country')?.touched || submitted) && storeForm.get('country')?.hasError('required')\">\r\n Country is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"state\" class=\"form-label\">State <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"state\" formControlName=\"state\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('state')?.invalid && (storeForm.get('state')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('state')?.touched || submitted) && storeForm.get('state')?.hasError('required')\">\r\n State is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"city\" class=\"form-label\">City / Town <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"city\" formControlName=\"city\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('city')?.invalid && (storeForm.get('city')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('city')?.touched || submitted) && storeForm.get('city')?.hasError('required')\">\r\n City is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"pincode\" class=\"form-label\">Pin / Zip Code <span class=\"alert-required\">*</span> </label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"pincode\" formControlName=\"pincode\" maxlength=\"6\" minlength=\"5\" (keypress)=\"omit_special_char($event)\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('pincode')?.invalid && (storeForm.get('pincode')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('pincode')?.touched || submitted) && storeForm.get('pincode')?.hasError('required')\">\r\n Pincode is required.\r\n </small>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12 text-end\">\r\n <button type=\"button\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\" (click)=\"navigateToAddStore()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"validateStoreInfo() === true\"\r\n (click)=\"goToConfiguration()\">Next</button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Store Info End -->\r\n\r\n <!-- Store Configuration Start -->\r\n <div [hidden]=\"select !== 'config'\">\r\n <div class=\"row\">\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"timeZone\" class=\"form-label\">Time Zone <span class=\"alert-required\">*</span></label>\r\n <!-- <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"timeZone\" formControlName=\"timeZone\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('timeZone')?.invalid && storeForm.get('timeZone')?.touched}\"> -->\r\n <select class=\"form-select\" id=\"timeZone\" formControlName=\"timeZone\">\r\n <option *ngFor=\"let timezone of timezones\" [value]=\"timezone\">{{ timezone }}</option>\r\n </select>\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('timeZone')?.touched || submitted) && storeForm.get('timeZone')?.hasError('required')\">\r\n Time Zone is required.\r\n </small>\r\n </div>\r\n <!-- <div class=\"col-md-6 mb-5\">\r\n <label for=\"noOfCameras\" class=\"form-label\">No of Cameras</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"noOfCameras\" formControlName=\"cameras\" (keypress)=\"omit_special_char($event)\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('cameras')?.invalid && storeForm.get('cameras')?.touched}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"storeForm.get('cameras')?.touched && storeForm.get('cameras')?.hasError('required')\">\r\n No of Cameras is required.\r\n </small>\r\n </div> -->\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"storeOpenTime\" class=\"form-label\">Store Open Time <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"time\" class=\"form-control\" id=\"storeOpenTime\" formControlName=\"open\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('open')?.invalid && (storeForm.get('open')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('open')?.touched || submitted) && storeForm.get('open')?.hasError('required')\">\r\n Store Open Time is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"storeCloseTime\" class=\"form-label\">Store Close Time <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"time\" class=\"form-control\" id=\"storeCloseTime\" formControlName=\"close\"\r\n [ngClass]=\"{ 'is-invalid':storeForm.get('close')?.invalid && (storeForm.get('close')?.touched || submitted) || storeForm.hasError('invalidTimeRange')}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(storeForm.get('close')?.touched || submitted) && storeForm.get('close')?.hasError('required')\">\r\n Store Close Time is required.\r\n </small>\r\n <small class=\"my-2\" *ngIf=\"storeForm.hasError('invalidTimeRange') && (storeForm.get('open')?.touched || storeForm.get('close')?.touched || submitted)\">\r\n Opening time must be before closing time.\r\n </small>\r\n </div>\r\n </div>\r\n <div class=\"row mt-20\">\r\n <div class=\"col-2 mt-10\">\r\n <button type=\"button\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\" (click)=\"navigateToBack('config')\">Back</button>\r\n </div>\r\n <div class=\"col-10 text-end mt-10\">\r\n <!-- <button type=\"button\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\" (click)=\"navigateToAddStore()\">Cancel</button> -->\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"storeForm.get('timeZone')?.invalid && storeForm.get('open')?.invalid && storeForm.get('close')?.invalid\" (click)=\"goToContact()\">Next</button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Store Configuration End -->\r\n\r\n <!-- Store Contact Start -->\r\n <div [hidden]=\"select !== 'contact'\">\r\n <div class=\"row\">\r\n <ng-container formArrayName=\"spocDetails\">\r\n <ng-container *ngFor=\"let spocDetail of getspocDetailsControls(); let i = index\" [formGroupName]=\"i\">\r\n <div *ngIf=\"i!==0\" class=\"d-flex justify-content-between align-items-center my-6\">\r\n <ng-container >\r\n <span class=\"fw-bold fs-4\">Alternate SPOC {{i}}</span>\r\n <span (click)=\"delAltSpoc()\">\r\n <svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g filter=\"url(#filter0_d_2250_30650)\">\r\n <rect x=\"2\" y=\"1\" width=\"36\" height=\"36\" rx=\"8\" fill=\"white\" />\r\n <rect x=\"2.5\" y=\"1.5\" width=\"35\" height=\"35\" rx=\"7.5\" stroke=\"#D0D5DD\" />\r\n <path\r\n d=\"M12.5 13.9998H14.1667M14.1667 13.9998H27.5M14.1667 13.9998V25.6665C14.1667 26.1085 14.3423 26.5325 14.6548 26.845C14.9674 27.1576 15.3913 27.3332 15.8333 27.3332H24.1667C24.6087 27.3332 25.0326 27.1576 25.3452 26.845C25.6577 26.5325 25.8333 26.1085 25.8333 25.6665V13.9998H14.1667ZM16.6667 13.9998V12.3332C16.6667 11.8911 16.8423 11.4672 17.1548 11.1547C17.4674 10.8421 17.8913 10.6665 18.3333 10.6665H21.6667C22.1087 10.6665 22.5326 10.8421 22.8452 11.1547C23.1577 11.4672 23.3333 11.8911 23.3333 12.3332V13.9998M18.3333 18.1665V23.1665M21.6667 18.1665V23.1665\"\r\n stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <filter id=\"filter0_d_2250_30650\" x=\"0\" y=\"0\" width=\"40\" height=\"40\"\r\n filterUnits=\"userSpaceOnUse\" color-interpolation-filters=\"sRGB\">\r\n <feFlood flood-opacity=\"0\" result=\"BackgroundImageFix\" />\r\n <feColorMatrix in=\"SourceAlpha\" type=\"matrix\"\r\n values=\"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\" result=\"hardAlpha\" />\r\n <feOffset dy=\"1\" />\r\n <feGaussianBlur stdDeviation=\"1\" />\r\n <feColorMatrix type=\"matrix\"\r\n values=\"0 0 0 0 0.0627451 0 0 0 0 0.0941176 0 0 0 0 0.156863 0 0 0 0.05 0\" />\r\n <feBlend mode=\"normal\" in2=\"BackgroundImageFix\" result=\"effect1_dropShadow_2250_30650\" />\r\n <feBlend mode=\"normal\" in=\"SourceGraphic\" in2=\"effect1_dropShadow_2250_30650\"\r\n result=\"shape\" />\r\n </filter>\r\n </defs>\r\n </svg>\r\n </span>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"contactName\" class=\"form-label\">Name <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"contactName\" formControlName=\"name\"\r\n [ngClass]=\"{ 'is-invalid':spocDetail.get('name')?.invalid && (spocDetail.get('name')?.touched || submitted)}\">\r\n <small class=\"invalid-feedback\"\r\n *ngIf=\"(spocDetail.get('name')?.touched || submitted) && spocDetail.get('name')?.hasError('required')\">\r\n Name is required.\r\n </small>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"contactEmail\" class=\"form-label\">Email <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"email\" class=\"form-control\" id=\"contactEmail\" formControlName=\"email\"\r\n pattern=\"^([a-zA-Z0-9_\\-\\.]+)@[a-z0-9-]+(\\.[a-z0-9-]+)*(\\.[a-zA-Z]{2,3})$\"\r\n [ngClass]=\"{ 'is-invalid':spocDetail.get('email')?.invalid && (spocDetail.get('email')?.touched || submitted)}\">\r\n <ng-container *ngIf=\"(spocDetail.get('email')?.touched || submitted)\">\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('email')?.hasError('required')\">\r\n Email is required.\r\n </small>\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('email')?.hasError('minlength')\">\r\n Email must be at least 3 characters long.\r\n </small>\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('email')?.hasError('maxlength')\">\r\n Email must be not more than 100 characters long.\r\n </small>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"contactNumber\" class=\"form-label\">Contact Number <span class=\"alert-required\">*</span></label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"contactNumber\" minlength=\"10\" maxlength=\"13\"\r\n (keypress)=\"omit_special_char($event)\" formControlName=\"contact\"\r\n [ngClass]=\"{ 'is-invalid':spocDetail.get('contact')?.invalid && (spocDetail.get('contact')?.touched || submitted )}\">\r\n <ng-container *ngIf=\"(spocDetail.get('contact')?.touched || submitted)\">\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('contact')?.hasError('required')\">\r\n Contact is required.\r\n </small>\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('contact')?.hasError('minlength')\">\r\n Contact must be at least 10 digits.\r\n </small>\r\n <small class=\"invalid-feedback\" *ngIf=\"spocDetail.get('contact')?.hasError('maxlength')\">\r\n Contact must be not more than 13 digits.\r\n </small>\r\n </ng-container>\r\n </div>\r\n <div class=\"col-md-6 mb-5\">\r\n <label for=\"designation\" class=\"form-label\">Designation (optional)</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"designation\" formControlName=\"designation\">\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n <div class=\"col-md-12 mb-5\">\r\n <h1 class=\"sub-head\">Enter Store Connection Details</h1>\r\n </div>\r\n <div class=\"col-md-12 mb-5\">\r\n <label for=\"anyDeskID\" class=\"form-label\">AnyDesk ID / TeamViewer ID (optional)</label>\r\n <input autocomplete=\"off\" type=\"text\" class=\"form-control\" id=\"anyDeskID\"\r\n formControlName=\"storeConnectionId\">\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-2 mt-10\">\r\n <button type=\"button\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\" (click)=\"navigateToBack('contact')\">Back</button>\r\n </div>\r\n <div class=\"col-10 text-end mt-10\">\r\n <!-- <button type=\"button\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\" (click)=\"navigateToAddStore()\">Cancel</button> -->\r\n <button type=\"button\" class=\"btn btn-primary\" [disabled]=\"storeForm.get('spocDetails')?.invalid\" (click)=\"goToReview()\">Next</button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Store Contact End -->\r\n\r\n <!-- Review & Submit Start -->\r\n <div [hidden]=\"select !== 'review'\">\r\n <div class=\"fs-4 fw-bold text-hover-primary sub-title text-gray-600 m-0 cursor-pointer\">Store\r\n Info\r\n </div>\r\n <div class=\"card-body p-9\">\r\n\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Name</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">{{storeForm.get('storeName')?.value ?\r\n storeForm.get('storeName')?.value : 'NA'}}</span>\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Code</label>\r\n <div class=\"col-lg-9 fv-row\"><span\r\n class=\"fw-bold fs-6 text-review-val\">{{storeForm.get('storeCode')?.value ?\r\n storeForm.get('storeCode')?.value: 'NA'}}</span>\r\n </div>\r\n </div>\r\n \r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Business Type</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bold fs-6 text-review-val text-hover-primary\">\r\n {{storeForm.get('businessType')?.value ? storeForm.get('businessType')?.value :\r\n 'NA'}} </span>\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Type\r\n <!-- <i data-bs-toggle=\"tooltip\"\r\n title=\"Phone number must be active\" class=\"fas fa-exclamation-circle ms-1 fs-7\"></i> -->\r\n </label>\r\n <div class=\"col-lg-9 d-flex align-items-center\">\r\n <span\r\n class=\"fw-bolder fs-6 me-2 text-review-val\">{{storeForm.get('storeType_type')?.value\r\n ? storeForm.get('storeType_type')?.value : 'NA'}}</span>\r\n <!-- <span class=\"badge badge-success\">Verified</span> -->\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\"\r\n *ngIf=\"storeForm.get('storeType_type')?.value && storeForm.get('storeType_type')?.value === 'Mall Store'\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\"> Mall Name</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">{{storeForm.get('storeType_name')?.value\r\n ? storeForm.get('storeType_name')?.value : 'NA'}}</span>\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Address</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">\r\n <ng-container>\r\n {{storeForm.get('address')?.value ? storeForm.get('address')?.value : 'NA'}}\r\n </ng-container>\r\n </span>\r\n </div>\r\n </div>\r\n <!-- <div class=\"row mb-10\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Allow Changes</label>\r\n <div class=\"col-lg-9\"><span class=\"fw-bold fs-6\">Yes</span></div>\r\n </div> -->\r\n\r\n </div>\r\n <div class=\"fs-4 fw-bold text-hover-primary sub-title text-gray-600 m-0 cursor-pointer\">Store\r\n Configuration</div>\r\n <div class=\"card-body p-9\">\r\n\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Time Zone</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">{{storeForm.get('timeZone')?.value ?\r\n storeForm.get('timeZone')?.value : 'NA'}}</span>\r\n </div>\r\n </div>\r\n <!-- <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">No of Cameras</label>\r\n <div class=\"col-lg-9 fv-row\"><span\r\n class=\"fw-bold fs-6 text-review-val\">{{storeForm.get('cameras')?.value ?\r\n storeForm.get('cameras')?.value : 'NA'}}</span>\r\n </div>\r\n </div> -->\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Open Time</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bold fs-6 text-review-val text-hover-primary\">{{storeForm.get('open')?.value\r\n ? storeForm.get('open')?.value : 'NA'}}\r\n </span>\r\n </div>\r\n </div>\r\n <div class=\"row mb-7\">\r\n <label class=\"col-lg-3 fw-bold text-muted-review\">Store Close Time</label>\r\n <div class=\"col-lg-9\"><span\r\n class=\"fw-bolder fs-6 text-review-val\">{{storeForm.get('close')?.value ?\r\n storeForm.get('close')?.value : 'NA'}}</span>\r\n </div>\r\n </div>\r\n\r\n </div>\r\n <div class=\"fs-4 fw-bold text-hover-primary sub-title text-gray-600 m-0 cursor-pointer\">Contact\r\n Details</div>\r\n <div class=\"card-body row px-9 pt-3 pb-4\">\r\n <div class=\"table-responsive col-md-12 col-lg-12 col-xl-9 col-xxl-8\">\r\n <table class=\"table align-middle gy-6\">\r\n <tbody class=\"fs-6 fw-bold\"> \r\n <ng-container formArrayName=\"spocDetails\">\r\n <ng-container *ngFor=\"let spoc of getspocDetailsControls();let i=index;\">\r\n <tr>\r\n <td>Spoc {{i+1}}</td>\r\n <td><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path\r\n d=\"M15 15.75V14.25C15 13.4544 14.6839 12.6913 14.1213 12.1287C13.5587 11.5661 12.7956 11.25 12 11.25H6C5.20435 11.25 4.44129 11.5661 3.87868 12.1287C3.31607 12.6913 3 13.4544 3 14.25V15.75M12 5.25C12 6.90685 10.6569 8.25 9 8.25C7.34315 8.25 6 6.90685 6 5.25C6 3.59315 7.34315 2.25 9 2.25C10.6569 2.25 12 3.59315 12 5.25Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </svg><span class=\"ms-2\">{{getspocDetailsValues(i)?.name ?\r\n getspocDetailsValues(i)?.name : 'NA' }}</span></td>\r\n <td><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1_80373)\">\r\n <path\r\n d=\"M12 6.00002V9.75002C12 10.3468 12.2371 10.9191 12.659 11.341C13.081 11.763 13.6533 12 14.25 12C14.8467 12 15.419 11.763 15.841 11.341C16.263 10.9191 16.5 10.3468 16.5 9.75002V9.00002C16.4999 7.30729 15.9272 5.66438 14.875 4.33842C13.8227 3.01246 12.3529 2.08144 10.7045 1.69675C9.05605 1.31205 7.32596 1.4963 5.79552 2.21955C4.26508 2.94279 3.02431 4.16249 2.27495 5.68032C1.5256 7.19814 1.31173 8.92483 1.66813 10.5796C2.02453 12.2344 2.93024 13.7199 4.23798 14.7947C5.54572 15.8695 7.17858 16.4703 8.87106 16.4994C10.5635 16.5285 12.2161 15.9842 13.56 14.955M12 9.00002C12 10.6569 10.6569 12 9.00001 12C7.34315 12 6.00001 10.6569 6.00001 9.00002C6.00001 7.34317 7.34315 6.00002 9.00001 6.00002C10.6569 6.00002 12 7.34317 12 9.00002Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1_80373\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"ms-2\">{{getspocDetailsValues(i)?.email ?\r\n getspocDetailsValues(i)?.email : 'NA' }}</span></td>\r\n <td><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1_80376)\">\r\n <path\r\n d=\"M16.5001 12.6901V14.9401C16.5009 15.1489 16.4581 15.3557 16.3745 15.5471C16.2908 15.7385 16.168 15.9103 16.0141 16.0515C15.8602 16.1927 15.6785 16.3002 15.4806 16.3671C15.2828 16.434 15.0731 16.4589 14.8651 16.4401C12.5572 16.1893 10.3403 15.4007 8.39257 14.1376C6.58044 12.9861 5.04407 11.4497 3.89257 9.63757C2.62506 7.68098 1.83625 5.45332 1.59007 3.13507C1.57133 2.92767 1.59598 2.71864 1.66245 2.52129C1.72892 2.32394 1.83575 2.14259 1.97615 1.98879C2.11654 1.83499 2.28743 1.7121 2.47792 1.62796C2.6684 1.54382 2.87433 1.50027 3.08257 1.50007H5.33257C5.69655 1.49649 6.04942 1.62538 6.32539 1.86272C6.60137 2.10006 6.78163 2.42966 6.83257 2.79007C6.92754 3.51012 7.10366 4.21712 7.35757 4.89757C7.45848 5.16602 7.48032 5.45776 7.4205 5.73823C7.36069 6.01871 7.22172 6.27616 7.02007 6.48007L6.06757 7.43257C7.13524 9.31023 8.68991 10.8649 10.5676 11.9326L11.5201 10.9801C11.724 10.7784 11.9814 10.6395 12.2619 10.5796C12.5424 10.5198 12.8341 10.5417 13.1026 10.6426C13.783 10.8965 14.49 11.0726 15.2101 11.1676C15.5744 11.219 15.9071 11.4025 16.145 11.6832C16.3828 11.9639 16.5092 12.3223 16.5001 12.6901Z\"\r\n stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" />\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1_80376\">\r\n <rect width=\"18\" height=\"18\" fill=\"white\" />\r\n </clipPath>\r\n </defs>\r\n </svg><span class=\"ms-2\">{{getspocDetailsValues(i)?.contact ?\r\n getspocDetailsValues(i)?.contact : 'NA' }}</span></td>\r\n </tr>\r\n </ng-container>\r\n </ng-container>\r\n <tr>\r\n <td>AnyDesk ID\r\n <td>\r\n <span class=\"ms-2\">{{storeForm.get('storeConnectionId')?.value ?\r\n storeForm.get('storeConnectionId')?.value : 'NA' }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-2 mt-10\">\r\n <button type=\"button\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\" (click)=\"navigateToBack('review')\">Back</button>\r\n </div>\r\n <div class=\"col-10 text-end mt-10\">\r\n <!-- <div class=\"text-end\"> -->\r\n <!-- <button type=\"button\" (click)=\"goToStoreInfo()\"\r\n class=\"btn btn-default mx-3 btn-outline btn-outline-default rounded-3\">Edit</button> -->\r\n <button type=\"button\" (click)=\"onSubmit()\"\r\n class=\"btn btn-primary\">Create Store</button>\r\n </div>\r\n </div>\r\n </div>\r\n <!-- Review & Submit End -->\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n</div>", styles: [".kiwi{fill:#344054}.kiwi.active{fill:#009bf3}.menu-title{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:16px!important;font-weight:500!important;line-height:24px}.menu-state-bg .menu-item .menu-link.active{border-radius:6px!important;background:var(--Primary-50, #EAF8FF)!important;padding:8px 16px}.menu-state-title-primary .menu-item .menu-link.active .menu-title{color:var(--Primary-700, #009BF3)!important}.menu-state-bg .menu-item:not(.here) .menu-link:hover:not(.disabled):not(.active):not(.here) .menu-icon{color:#414b66!important}.menu-state-icon-primary .menu-item .menu-link.active .menu-icon,.menu-state-icon-primary .menu-item .menu-link.active .menu-icon .svg-icon,.menu-state-icon-primary .menu-item .menu-link.active .menu-icon i{color:#009bf3!important}.sub-title{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:18px!important;font-style:normal;font-weight:500!important;line-height:28px}.text-muted-review{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-style:normal;font-weight:500!important;line-height:20px}.text-review-val{color:var(--Gray-700, #344054)!important;font-family:Inter;font-size:14px!important;font-weight:600!important;line-height:20px}.align-middle{color:var(--Gray-500, #667085)!important;font-family:Inter;font-size:14px!important;font-weight:500!important;line-height:20px}td{padding:0!important}.invalid-feedback,small{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:400!important;line-height:20px}.is-invalid{border-radius:8px!important;border:1px solid var(--Error-300, #FDA29B)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;padding-right:calc(1.5em + .75rem)!important;background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgY2xpcC1wYXRoPSJ1cmwoI2NsaXAwXzIyMDFfMjA5NTApIj4KPHBhdGggZD0iTTcuOTk5NjcgNS4zMzM5OFY4LjAwMDY1TTcuOTk5NjcgMTAuNjY3M0g4LjAwNjM0TTE0LjY2NjMgOC4wMDA2NUMxNC42NjYzIDExLjY4MjYgMTEuNjgxNiAxNC42NjczIDcuOTk5NjcgMTQuNjY3M0M0LjMxNzc4IDE0LjY2NzMgMS4zMzMwMSAxMS42ODI2IDEuMzMzMDEgOC4wMDA2NUMxLjMzMzAxIDQuMzE4NzUgNC4zMTc3OCAxLjMzMzk4IDcuOTk5NjcgMS4zMzM5OEMxMS42ODE2IDEuMzMzOTggMTQuNjY2MyA0LjMxODc1IDE0LjY2NjMgOC4wMDA2NVoiIHN0cm9rZT0iI0YwNDQzOCIgc3Ryb2tlLXdpZHRoPSIxLjMzMzMzIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KPC9nPgo8ZGVmcz4KPGNsaXBQYXRoIGlkPSJjbGlwMF8yMjAxXzIwOTUwIj4KPHJlY3Qgd2lkdGg9IjE2IiBoZWlnaHQ9IjE2IiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=)!important;background-repeat:no-repeat!important;background-position:right calc(.375em + .1875rem) center!important;background-size:calc(.75em + .375rem) calc(.75em + .375rem)!important}::ng-deep .swal2-popup.swal2-toast .swal2-icon{grid-column:1;grid-row:1/99;align-self:center;min-width:2em;height:0em;margin:0 .5em 0 0}::ng-deep .listitem{display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.5rem 1rem;background-color:#f3f6f9;margin-top:.75rem;border-radius:.42rem}::ng-deep .toasttitile{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}::ng-deep .list{overflow-y:auto}::ng-deep .listitemlabel{font-size:13px!important;font-weight:600;font-family:Inter;color:#7e8299}::ng-deep .swal2-container{padding:.4em!important}::ng-deep .swal2-icon{border:1px solid white!important}::ng-deep body.swal2-toast-shown .swal2-container{width:500px!important}::ng-deep .swal2-popup.swal2-toast{border-left:4px solid #009EF7}::ng-deep .swal2-popup.swal2-toast .swal2-title{margin:9px 5px auto!important}::ng-deep .label{color:#3f4254;font-family:Inter;font-size:14px;font-style:normal;font-weight:600;line-height:140%}.spocArea{overflow-y:scroll;max-height:60vh;padding:0;margin:0}::ng-deep .spocArea::-webkit-scrollbar-thumb{-webkit-border-radius:10px!important;border-radius:10px!important;background:var(--gray-100, #eaeaea)!important;height:50px!important}::ng-deep .spocArea::-webkit-scrollbar{width:10px!important}::ng-deep .spocArea::-webkit-scrollbar-track{background:none!important;box-shadow:none!important}.sub-head{color:var(--Gray-900, #101828)!important;font-size:18px!important;font-weight:600!important;line-height:28px}.form-label{color:var(--Gray-700, #344054)!important;font-size:14px!important;font-weight:500!important;line-height:20px}.btn-primary{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--White, #FFF)!important;font-size:16px!important;font-weight:600;line-height:24px}.btn-outline{border-radius:8px!important;border:1px solid var(--Gray-300, #D0D5DD)!important;background:var(--White, #FFF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Gray-700, #344054)!important;font-size:16px!important;font-weight:600!important;line-height:24px}.btn-light-primary1{border-radius:8px;border:1px solid var(--Primary-50, #EAF8FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important;color:var(--Primary-700, #009BF3)!important;font-size:14px!important;font-weight:600!important;line-height:20px}.alert-required{color:var(--Error-500, #F04438)!important;font-size:14px!important;font-weight:500!important;line-height:20px}\n"] }]
|
|
317
|
+
}], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.NgbModal }, { type: i3.StoresService }, { type: i4.ToastService }, { type: i5.Router }], propDecorators: { placesRef: [{
|
|
295
318
|
type: ViewChild,
|
|
296
319
|
args: ["ngxPlaces"]
|
|
297
320
|
}] } });
|
|
298
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXN0b3Jlcy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1zdG9yZXMvc3JjL2xpYi9jb21wb25lbnRzL2FkZC1zdG9yZXMtZm9ybS9hZGQtc3RvcmVzLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXN0b3Jlcy9zcmMvbGliL2NvbXBvbmVudHMvYWRkLXN0b3Jlcy1mb3JtL2FkZC1zdG9yZXMtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTBCLFVBQVUsRUFBZ0QsTUFBTSxnQkFBZ0IsQ0FBQztBQUtsSCxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBRzFDLE9BQVEsS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMzQixPQUFPLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFDO0FBQ25DLE9BQU8sUUFBUSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7OztBQUM3QyxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7QUFTdkIsTUFBTSxPQUFPLHNCQUFzQjtJQW9DdkI7SUFDQTtJQUNBO0lBQ0E7SUF0Q2MsU0FBUyxDQUE2QjtJQUU5RCxNQUFNLEdBQUcsWUFBWSxDQUFDO0lBQ3RCLFNBQVMsQ0FBWTtJQUNyQixPQUFPLENBQVM7SUFDaEIsU0FBUyxDQUFRO0lBQ2pCLGNBQWMsQ0FBTTtJQUNwQixLQUFLLEdBQUcsS0FBSyxDQUFDO0lBQ2QsU0FBUyxDQUFRO0lBQ2pCLGdCQUFnQixDQUFRO0lBR2pCLG1CQUFtQixDQUFD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SUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFNBQVMsR0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ25DLENBQUM7SUFFRixJQUFJLGtCQUFrQjtRQUNuQixNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDM0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUM7UUFDekMsS0FBSyxNQUFNLElBQUksSUFBSSxRQUFRLEVBQUU7WUFDM0IsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO2dCQUMxQixlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO2FBQzVCO1NBQ0Y7UUFDRCxPQUFPLGVBQWUsQ0FBQTtJQUN4QixDQUFDO3dHQTFTVSxzQkFBc0I7NEZBQXRCLHNCQUFzQixtS0MzQm5DLGdscERBcWlCTTs7NEZEMWdCTyxzQkFBc0I7a0JBTGxDLFNBQVM7K0JBQ0UscUJBQXFCOzRKQUtQLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIE9uSW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1BcnJheSwgVmFsaWRhdG9ycywgRm9ybUdyb3VwLCBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcclxuaW1wb3J0IHsgU3RvcmVzU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yZXMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBIdHRwRXJyb3JSZXNwb25zZSB9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQgeyBTdG9yZVJlc3BvbnNlIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvc3RvcmUuaW50ZXJmYWNlXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0ICogYXMgbW9tZW50IGZyb20gJ21vbWVudC10aW1lem9uZSc7XHJcbmltcG9ydCB7IE5neEdwQXV0b2NvbXBsZXRlRGlyZWN0aXZlIH0gZnJvbSBcIkBhbmd1bGFyLW1hZ2ljL25neC1ncC1hdXRvY29tcGxldGUvbGliL25neC1ncC1hdXRvY29tcGxldGUuZGlyZWN0aXZlXCI7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktc2hhcmVkXCI7XHJcbmltcG9ydCAgZGF5anMgZnJvbSBcImRheWpzXCI7XHJcbmltcG9ydCBcImRheWpzL2xvY2FsZS9lblwiO1xyXG5pbXBvcnQgdXRjIGZyb20gXCJkYXlqcy9wbHVnaW4vdXRjXCI7XHJcbmltcG9ydCB0aW1lem9uZSBmcm9tIFwiZGF5anMvcGx1Z2luL3RpbWV6b25lXCI7XHJcbmRheWpzLmV4dGVuZCh1dGMpO1xyXG5kYXlqcy5leHRlbmQodGltZXpvbmUpO1xyXG5cclxuZGVjbGFyZSB2YXIgJDogYW55O1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6IFwibGliLWFkZC1zdG9yZXMtZm9ybVwiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vYWRkLXN0b3Jlcy1mb3JtLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9hZGQtc3RvcmVzLWZvcm0uY29tcG9uZW50LnNjc3NcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIEFkZFN0b3Jlc0Zvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBWaWV3Q2hpbGQoXCJuZ3hQbGFjZXNcIikgcGxhY2VzUmVmOiBOZ3hHcEF1dG9jb21wbGV0ZURpcmVjdGl2ZTtcclxuXHJcbiAgc2VsZWN0ID0gXCJzdG9yZV9pbmZvXCI7XHJcbiAgc3RvcmVGb3JtOiBGb3JtR3JvdXA7XHJcbiAgc3RvcmVJZDogc3RyaW5nO1xyXG4gIHRpbWV6b25lczogYW55W107XHJcbiAgJGhlYWRlckZpbHRlcnM6IGFueTtcclxuICBkYXlqcyA9IGRheWpzO1xyXG4gIHN1Ym1pdHRlZDpib29sZWFuXHJcbiAgaXNTdG9yZU5hbWVFeGlzdDpib29sZWFuXHJcblxyXG5cclxuICBwdWJsaWMgaGFuZGxlQWRkcmVzc0NoYW5nZShwbGFjZTogZ29vZ2xlLm1hcHMucGxhY2VzLlBsYWNlUmVzdWx0IHwgYW55KSB7XHJcbiAgICBpZiAocGxhY2UuZ2VvbWV0cnkpIHtcclxuICAgICAgbGV0IGNvdW50cnkgPSBcIlwiLCBjaXR5ID0gXCJcIiwgc3RhdGUgPSBcIlwiLCBwaW5jb2RlID0gXCJcIjtcclxuICAgICAgcGxhY2UuYWRkcmVzc19jb21wb25lbnRzLmZvckVhY2goKGNvbXBvbmVudDogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKGNvbXBvbmVudC50eXBlcy5pbmNsdWRlcyhcImNvdW50cnlcIikpIHtcclxuICAgICAgICAgIGNvdW50cnkgPSBjb21wb25lbnQubG9uZ19uYW1lO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29tcG9uZW50LnR5cGVzLmluY2x1ZGVzKFwibG9jYWxpdHlcIikpIHtcclxuICAgICAgICAgIGNpdHkgPSBjb21wb25lbnQubG9uZ19uYW1lO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29tcG9uZW50LnR5cGVzLmluY2x1ZGVzKFwiYWRtaW5pc3RyYXRpdmVfYXJlYV9sZXZlbF8xXCIpKSB7XHJcbiAgICAgICAgICBzdGF0ZSA9IGNvbXBvbmVudC5sb25nX25hbWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjb21wb25lbnQudHlwZXMuaW5jbHVkZXMoXCJwb3N0YWxfY29kZVwiKSkge1xyXG4gICAgICAgICAgcGluY29kZSA9IGNvbXBvbmVudC5sb25nX25hbWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5zdG9yZUZvcm0uZ2V0KCdhZGRyZXNzJyk/LnNldFZhbHVlKHBsYWNlLmZvcm1hdHRlZF9hZGRyZXNzKTtcclxuICAgICAgdGhpcy5zdG9yZUZvcm0uZ2V0KFwiY291bnRyeVwiKT8uc2V0VmFsdWUoY291bnRyeSk7XHJcbiAgICAgIHRoaXMuc3RvcmVGb3JtLmdldChcImNpdHlcIik/LnNldFZhbHVlKGNpdHkpO1xyXG4gICAgICB0aGlzLnN0b3JlRm9ybS5nZXQoXCJzdGF0ZVwiKT8uc2V0VmFsdWUoc3RhdGUpO1xyXG4gICAgICB0aGlzLnN0b3JlRm9ybS5nZXQoXCJwaW5jb2RlXCIpPy5zZXRWYWx1ZShwaW5jb2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIHN0b3Jlc1NlcnZpY2U6IFN0b3Jlc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRzOiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXHJcbiAgKSB7XHJcbiAgICBsZXQgZGF0YTphbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdoZWFkZXItZmlsdGVycycpIHx8ICcnKTtcclxuICAgIGxldCB1c2VyOmFueSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3VzZXItaW5mbycpIHx8ICcnKTtcclxuICAgIHRoaXMuJGhlYWRlckZpbHRlcnMgPSBkYXRhID8gZGF0YSA6IHVzZXI7XHJcbiAgICB0aGlzLmdldEFsbFRpbWV6b25lcygpO1xyXG4gICAgdGhpcy5jcmVhdGVGb3JtKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHt9XHJcblxyXG4gIC8vIHNldHRpbmd2YWx1ZShsYWJlbDogYW55KSB7XHJcbiAgICAvLyBpZiAobGFiZWwgPT0gXCJzdG9yZV9pbmZvXCIpIHtcclxuICAgIC8vICAgdGhpcy5zZWxlY3QgPSBcInN0b3JlX2luZm9cIjtcclxuICAgIC8vIH0gZWxzZSBpZiAobGFiZWwgPT0gXCJjb25maWdcIikge1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdCA9IFwiY29uZmlnXCI7XHJcbiAgICAvLyB9IGVsc2UgaWYgKGxhYmVsID09IFwic3RvcmVfbG9jXCIpIHtcclxuICAgIC8vICAgdGhpcy5zZWxlY3QgPSBcInN0b3JlX2xvY1wiO1xyXG4gICAgLy8gfSBlbHNlIGlmIChsYWJlbCA9PSBcImNvbnRhY3RcIikge1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdCA9IFwiY29udGFjdFwiO1xyXG4gICAgLy8gfSBlbHNlIGlmIChsYWJlbCA9PSBcInJldmlld1wiKSB7XHJcbiAgICAvLyAgIHRoaXMuc2VsZWN0ID0gXCJyZXZpZXdcIjtcclxuICAgIC8vIH1cclxuICAvLyB9XHJcblxyXG4gIGNyZWF0ZUZvcm0oKSB7XHJcbiAgICB0aGlzLnN0b3JlRm9ybSA9IHRoaXMuZmIuZ3JvdXAoXHJcbiAgICAgIHtcclxuICAgICAgICBzdG9yZU5hbWU6IFtcIlwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICBjbGllbnRJZDogW3RoaXMuJGhlYWRlckZpbHRlcnM/LmNsaWVudCA/IHRoaXMuJGhlYWRlckZpbHRlcnM/LmNsaWVudCA6dGhpcy4kaGVhZGVyRmlsdGVycz8uY2xpZW50SWQsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIGJ1c2luZXNzVHlwZTogW1wiQ09DT1wiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICBzdG9yZVR5cGVfdHlwZTogW1wiSGlnaCBTdHJlZXRcIiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgc3RvcmVUeXBlX25hbWU6IFtcIlwiXSxcclxuICAgICAgICBzdG9yZUNvZGU6IFtcIlwiXSxcclxuICAgICAgICBhZGRyZXNzOiBbXCJcIiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgY291bnRyeTogW1wiXCIsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIHN0YXRlOiBbXCJcIiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgY2l0eTogW1wiXCIsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIHBpbmNvZGU6IFtcIlwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICB0aW1lWm9uZTogW1wiQXNpYS9Lb2xrYXRhXCIsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIG9wZW46IFtcIjEwOjAwXCIsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIGNsb3NlOiBbXCIyMDowMFwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAvLyBjYW1lcmFzOiBbMCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgc3BvY0RldGFpbHM6IHRoaXMuZmIuYXJyYXkoW3RoaXMuY3JlYXRlU3BvY0RldGFpbCgpXSksXHJcbiAgICAgICAgc3RvcmVDb25uZWN0aW9uSWQ6IFtcIlwiXSxcclxuICAgICAgfSxcclxuICAgICAgeyB2YWxpZGF0b3JzOiB0aGlzLnRpbWVSYW5nZVZhbGlkYXRvciB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdmFsaWRhdGVTdG9yZUluZm8oKXtcclxuICAgIGlmKHRoaXMuc3RvcmVGb3JtLmdldChcInN0b3JlTmFtZVwiKT8udmFsaWQgJiYgdGhpcy5zdG9yZUZvcm0uZ2V0KFwiYnVzaW5lc3NUeXBlXCIpPy52YWxpZFxyXG4gICAgICYmIHRoaXMuc3RvcmVGb3JtLmdldChcInN0b3JlVHlwZV90eXBlXCIpPy52YWxpZCAmJiB0aGlzLnN0b3JlRm9ybS5nZXQoXCJhZGRyZXNzXCIpPy52YWxpZFxyXG4gICAgICYmIHRoaXMuc3RvcmVGb3JtLmdldChcImNvdW50cnlcIik/LnZhbGlkICYmIHRoaXMuc3RvcmVGb3JtLmdldChcInN0YXRlXCIpPy52YWxpZFxyXG4gICAgICYmIHRoaXMuc3RvcmVGb3JtLmdldChcImNpdHlcIik/LnZhbGlkICYmIHRoaXMuc3RvcmVGb3JtLmdldChcInBpbmNvZGVcIik/LnZhbGlkKXtcclxuICAgICAgcmV0dXJuIGZhbHNlXHJcbiAgICAgfWVsc2V7IHJldHVybiB0cnVlIH1cclxuICB9XHJcblxyXG4gIHRpbWVSYW5nZVZhbGlkYXRvcihjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XHJcbiAgICBjb25zdCBvcGVuVGltZSA9IGNvbnRyb2wuZ2V0KFwib3BlblwiKT8udmFsdWU7XHJcbiAgICBjb25zdCBjbG9zZVRpbWUgPSBjb250cm9sLmdldChcImNsb3NlXCIpPy52YWx1ZTtcclxuICAgIGlmIChvcGVuVGltZSAmJiBjbG9zZVRpbWUgJiYgb3BlblRpbWUgPj0gY2xvc2VUaW1lKSB7XHJcbiAgICAgIHJldHVybiB7IGludmFsaWRUaW1lUmFuZ2U6IHRydWUgfTtcclxuICAgIH0gICAgXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGNyZWF0ZVNwb2NEZXRhaWwoKTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgbmFtZTogW1wiXCIsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBlbWFpbDogW1xyXG4gICAgICAgIFwiXCIsXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgIFZhbGlkYXRvcnMuZW1haWwsXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgxMDApLFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgoMyksXHJcbiAgICAgICAgXSxcclxuICAgICAgXSxcclxuICAgICAgY29udGFjdDogW1xyXG4gICAgICAgIFwiXCIsXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEzKSxcclxuICAgICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDEwKSxcclxuICAgICAgICBdLFxyXG4gICAgICBdLFxyXG4gICAgICBkZXNpZ25hdGlvbjogW1wiXCJdLFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIFxyXG4gIGdldHNwb2NEZXRhaWxzQ29udHJvbHMoKSB7XHJcbiAgICByZXR1cm4gKHRoaXMuc3RvcmVGb3JtLmdldChcInNwb2NEZXRhaWxzXCIpIGFzIEZvcm1BcnJheSkuY29udHJvbHM7XHJcbiAgfVxyXG5cclxuICBnZXRzcG9jRGV0YWlsc1ZhbHVlcyhpOiBudW1iZXIpIHtcclxuICAgIHJldHVybiAodGhpcy5zdG9yZUZvcm0uZ2V0KFwic3BvY0RldGFpbHNcIikgYXMgRm9ybUFycmF5KS5hdChpKS52YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldFN0b3JlUHJvZmlsZSgpOiBGb3JtR3JvdXAge1xyXG4gICAgcmV0dXJuIHRoaXMuc3RvcmVGb3JtLmdldChcInN0b3JlUHJvZmlsZVwiKSBhcyBGb3JtR3JvdXA7XHJcbiAgfVxyXG5cclxuICBnb1RvU3RvcmVJbmZvKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3QgPSBcInN0b3JlX2luZm9cIjtcclxuICB9XHJcblxyXG4gIGdvVG9Db25maWd1cmF0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3QgPSBcImNvbmZpZ1wiO1xyXG4gIH1cclxuXHJcbiAgZ29Ub0NvbnRhY3QoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdCA9IFwiY29udGFjdFwiO1xyXG4gIH1cclxuXHJcbiAgZ29Ub1JldmlldygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ID0gXCJyZXZpZXdcIjtcclxuICB9XHJcblxyXG4gIGFkZFNwb2NEZXRhaWwoKSB7XHJcbiAgICAodGhpcy5zdG9yZUZvcm0uZ2V0KFwic3BvY0RldGFpbHNcIikgYXMgRm9ybUFycmF5KS5wdXNoKFxyXG4gICAgICB0aGlzLmNyZWF0ZVNwb2NEZXRhaWwoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGFkZEFsdFNwb2MoKSB7XHJcbiAgICAodGhpcy5zdG9yZUZvcm0uZ2V0KFwic3BvY0RldGFpbHNcIikgYXMgRm9ybUFycmF5KS5wdXNoKFxyXG4gICAgICB0aGlzLmNyZWF0ZVNwb2NEZXRhaWwoKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGRlbEFsdFNwb2MoKSB7XHJcbiAgICAodGhpcy5zdG9yZUZvcm0uZ2V0KFwic3BvY0RldGFpbHNcIikgYXMgRm9ybUFycmF5KS5yZW1vdmVBdCgxKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVNwb2NEZXRhaWwoaW5kZXg6IG51bWJlcikge1xyXG4gICAgKHRoaXMuc3RvcmVGb3JtLmdldChcInNwb2NEZXRhaWxzXCIpIGFzIEZvcm1BcnJheSkucmVtb3ZlQXQoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgb25TdWJtaXQoKSB7XHJcbiAgICBjb25zdCBpblZhbGlkQ29udHJvbHMgPSB0aGlzLmxvZ0ludmFsaWRDb250cm9sc1xyXG4gICAgaWYoaW5WYWxpZENvbnRyb2xzLmluY2x1ZGVzKCdzdG9yZU5hbWUnKSB8fCBpblZhbGlkQ29udHJvbHMuaW5jbHVkZXMoJ2FkZHJlc3MnKSB8fCBpblZhbGlkQ29udHJvbHMuaW5jbHVkZXMoJ2NvdW50cnknKSB8fCBpblZhbGlkQ29udHJvbHMuaW5jbHVkZXMoJ3N0YXRlJykgfHwgaW5WYWxpZENvbnRyb2xzLmluY2x1ZGVzKCdjaXR5JykgfHwgaW5WYWxpZENvbnRyb2xzLmluY2x1ZGVzKCdwaW5jb2RlJykpe1xyXG4gICAgICB0aGlzLnNlbGVjdCA9ICdzdG9yZV9pbmZvJ1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYoaW5WYWxpZENvbnRyb2xzLmluY2x1ZGVzKCd0aW1lWm9uZScpIHx8IGluVmFsaWRDb250cm9scy5pbmNsdWRlcygnb3BlbicpIHx8IGluVmFsaWRDb250cm9scy5pbmNsdWRlcygnY2xvc2UnKSB8fCB0aGlzLnN0b3JlRm9ybS5oYXNFcnJvcignaW52YWxpZFRpbWVSYW5nZScpKXtcclxuICAgICAgdGhpcy5zZWxlY3QgPSAnY29uZmlnJ1xyXG4gICAgfVxyXG5cclxuICAgIGVsc2UgaWYoaW5WYWxpZENvbnRyb2xzLmluY2x1ZGVzKCdzcG9jRGV0YWlscycpKXtcclxuICAgICAgdGhpcy5zZWxlY3QgPSAnY29udGFjdCdcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnN1Ym1pdHRlZCA9IHRydWVcclxuICAgIFxyXG4gICAgaWYgKHRoaXMuc3RvcmVGb3JtLnZhbGlkKSB7XHJcbiAgICAgIGxldCBzdG9yZTogU3RvcmVSZXNwb25zZSA9IHtcclxuICAgICAgICBzdG9yZU5hbWU6IHRoaXMuc3RvcmVGb3JtLnZhbHVlLnN0b3JlTmFtZSxcclxuICAgICAgICBjbGllbnRJZDogdGhpcy5zdG9yZUZvcm0udmFsdWUuY2xpZW50SWQsXHJcbiAgICAgICAgYnVzaW5lc3NUeXBlOiB0aGlzLnN0b3JlRm9ybS52YWx1ZS5idXNpbmVzc1R5cGUsXHJcbiAgICAgICAgc3RvcmVUeXBlOiB7XHJcbiAgICAgICAgICB0eXBlOiB0aGlzLnN0b3JlRm9ybS52YWx1ZS5zdG9yZVR5cGVfdHlwZSxcclxuICAgICAgICAgIG5hbWU6IHRoaXMuc3RvcmVGb3JtLnZhbHVlPy5zdG9yZVR5cGVfbmFtZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0b3JlUHJvZmlsZToge1xyXG4gICAgICAgICAgc3RvcmVDb2RlOiB0aGlzLnN0b3JlRm9ybS52YWx1ZT8uc3RvcmVDb2RlLFxyXG4gICAgICAgICAgYWRkcmVzczogdGhpcy5zdG9yZUZvcm0udmFsdWU/LmFkZHJlc3MsXHJcbiAgICAgICAgICBjb3VudHJ5OiB0aGlzLnN0b3JlRm9ybS52YWx1ZT8uY291bnRyeSxcclxuICAgICAgICAgIHN0YXRlOiB0aGlzLnN0b3JlRm9ybS52YWx1ZT8uc3RhdGUsXHJcbiAgICAgICAgICBjaXR5OiB0aGlzLnN0b3JlRm9ybS52YWx1ZT8uY2l0eSxcclxuICAgICAgICAgIHBpbmNvZGU6IHRoaXMuc3RvcmVGb3JtLnZhbHVlPy5waW5jb2RlLFxyXG4gICAgICAgICAgdGltZVpvbmU6IHRoaXMuc3RvcmVGb3JtLnZhbHVlPy50aW1lWm9uZSxcclxuICAgICAgICAgIG9wZW46IHRoaXMuZGF5anMoYDE5OTEtMDEtMDEgJHt0aGlzLnN0b3JlRm9ybS52YWx1ZT8ub3Blbn1gLCdZWVlZLU1NLUREIEhIOm1tJykuZm9ybWF0KFwiSEg6bW06c3NcIiksXHJcbiAgICAgICAgICBjbG9zZTogdGhpcy5kYXlqcyhgMTk5MS0wMS0wMSAke3RoaXMuc3RvcmVGb3JtLnZhbHVlPy5jbG9zZX1gLCdZWVlZLU1NLUREIEhIOm1tJykuZm9ybWF0KFwiSEg6bW06c3NcIiksXHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlZGdlOiB7XHJcbiAgICAgICAgLy8gICBjYW1EZXRhaWxzOiB7XHJcbiAgICAgICAgLy8gICAgIGNhbWVyYXM6IHRoaXMuc3RvcmVGb3JtLnZhbHVlPy5jYW1lcmFzLFxyXG4gICAgICAgIC8vICAgfSxcclxuICAgICAgICAvLyB9LFxyXG4gICAgICAgIHNwb2NEZXRhaWxzOiBbXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuc3RvcmVGb3JtLnZhbHVlPy5zcG9jRGV0YWlsc1swXS5uYW1lLFxyXG4gICAgICAgICAgICBlbWFpbDogdGhpcy5zdG9yZUZvcm0udmFsdWU/LnNwb2NEZXRhaWxzWzBdLmVtYWlsLFxyXG4gICAgICAgICAgICBjb250YWN0OiB0aGlzLnN0b3JlRm9ybS52YWx1ZT8uc3BvY0RldGFpbHNbMF0uY29udGFjdCxcclxuICAgICAgICAgICAgZGVzaWduYXRpb246IHRoaXMuc3RvcmVGb3JtLnZhbHVlPy5zcG9jRGV0YWlsc1swXS5kZXNpZ25hdGlvbixcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgXSxcclxuICAgICAgICBzdG9yZUNvbm5lY3Rpb25JZDogdGhpcy5zdG9yZUZvcm0udmFsdWU/LnN0b3JlQ29ubmVjdGlvbklkLFxyXG4gICAgICB9O1xyXG4gICAgICBpZiAodGhpcy5zdG9yZUZvcm0udmFsdWUuc3BvY0RldGFpbHMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGZvcihsZXQgaT0xO2k8dGhpcy5zdG9yZUZvcm0udmFsdWUuc3BvY0RldGFpbHMubGVuZ3RoO2krKykge1xyXG4gICAgICAgICAgc3RvcmUuc3BvY0RldGFpbHMucHVzaCh7XHJcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuc3RvcmVGb3JtLnZhbHVlPy5zcG9jRGV0YWlsc1tpXS5uYW1lLFxyXG4gICAgICAgICAgICBlbWFpbDogdGhpcy5zdG9yZUZvcm0udmFsdWU/LnNwb2NEZXRhaWxzW2ldLmVtYWlsLFxyXG4gICAgICAgICAgICBjb250YWN0OiB0aGlzLnN0b3JlRm9ybS52YWx1ZT8uc3BvY0RldGFpbHNbaV0uY29udGFjdCxcclxuICAgICAgICAgICAgZGVzaWduYXRpb246IHRoaXMuc3RvcmVGb3JtLnZhbHVlPy5zcG9jRGV0YWlsc1tpXS5kZXNpZ25hdGlvbixcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zdG9yZXNTZXJ2aWNlLmNyZWF0ZVN0b3JlKHN0b3JlKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PT0gMjAwICYmIHJlcy5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XHJcbiAgICAgICAgICAgIHRoaXMudHMuZ2V0U3VjY2Vzc1RvYXN0KFwiU3RvcmUgQ3JlYXRlZCBTdWNjZXNzZnVsbHkhXCIpO1xyXG4gICAgICAgICAgICBpZiAocmVzLmRhdGEuc3RvcmUgJiYgcmVzLmRhdGEuc3RvcmUuc3RvcmVJZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuc3RvcmVzU2VydmljZVxyXG4gICAgICAgICAgICAgICAgLmNyZWF0ZUluZnJhVGlja2V0KHtcclxuICAgICAgICAgICAgICAgICAgc3RvcmVJZDogcmVzLmRhdGEuc3RvcmUuc3RvcmVJZCxcclxuICAgICAgICAgICAgICAgICAgRGF0ZTogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSxcclxuICAgICAgICAgICAgICAgICAgaXNzdWVUeXBlOiBcImluc3RhbGxhdGlvblwiLFxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHt9LFxyXG4gICAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge30sXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvbWFuYWdlL3N0b3Jlc1wiXSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoXCJVbmFibGUgdG8gY3JlYXRlIHN0b3JlIVwiKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50cy5nZXRFcnJvclRvYXN0KGVycm9yPy5lcnJvcj8uZXJyb3I/LmVycm9yID8gZXJyb3I/LmVycm9yPy5lcnJvcj8uZXJyb3I6IFwiVW5hYmxlIHRvIGNyZWF0ZSBTdG9yZSFcIik7XHJcbiAgICAgICAgaWYoZXJyb3I/LmVycm9yPy5lcnJvcj8uZXJyb3IgPT09ICdTdG9yZU5hbWUgYWxyZWFkeSBleGlzdHMnKXtcclxuICAgICAgICAgIHRoaXMuaXNTdG9yZU5hbWVFeGlzdCA9IHRydWVcclxuICAgICAgICAgIHRoaXMuc2VsZWN0ID0gJ3N0b3JlX2luZm8nXHJcbiAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgfSBlbHNlIHtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9BZGRTdG9yZSgpIHtcclxuICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9tYW5hZ2Uvc3RvcmVzL2FkZGl0aW9uLW1ldGhvZFwiXSk7XHJcbiAgfVxyXG5cclxuICBvbWl0X3NwZWNpYWxfY2hhcihldmVudDogYW55KSB7XHJcbiAgICB2YXIgaztcclxuICAgIGsgPSBldmVudC5jaGFyQ29kZTsgLy8gICAgICAgICBrID0gZXZlbnQua2V5Q29kZTsgIChCb3RoIGNhbiBiZSB1c2VkKVxyXG4gICAgcmV0dXJuIGsgPT0gOCB8fCBrID09IDMyIHx8IChrID49IDQ4ICYmIGsgPD0gNTcpO1xyXG4gIH1cclxuXHJcbiAgZ2V0QWxsVGltZXpvbmVzKCkge1xyXG4gICAgdGhpcy50aW1lem9uZXM9bW9tZW50LnR6Lm5hbWVzKCk7XHJcbiAgfVxyXG5cclxuIGdldCBsb2dJbnZhbGlkQ29udHJvbHMoKSB7XHJcbiAgICBjb25zdCBpbnZhbGlkQ29udHJvbHMgPSBbXTtcclxuICAgIGNvbnN0IGNvbnRyb2xzID0gdGhpcy5zdG9yZUZvcm0uY29udHJvbHM7XHJcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gY29udHJvbHMpIHtcclxuICAgICAgaWYgKGNvbnRyb2xzW25hbWVdLmludmFsaWQpIHtcclxuICAgICAgICBpbnZhbGlkQ29udHJvbHMucHVzaChuYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGludmFsaWRDb250cm9sc1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicm93IG10LTMgbWItNlwiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIGNvbC1sZy0zIGNvbC14bC0zIGNvbC14eGwtM1wiIGlkPVwibGVmdC1jb250YWluZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZCBjYXJkLWZsdXNoIGgtMTAwIG1iLTBcIj5cclxuICAgICAgICAgICAgPCEtLWJlZ2luOjpBc2lkZSBjb250ZW50LS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHgtNVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWVudSBtZW51LWNvbHVtbiBtZW51LXJvdW5kZWQgbWVudS1zdGF0ZS1iZyBtZW51LXN0YXRlLXRpdGxlLXByaW1hcnkgbWVudS1zdGF0ZS1pY29uLXByaW1hcnkgbWVudS1zdGF0ZS1idWxsZXQtcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS1iZWdpbjo6TWVudSBpdGVtLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtaXRlbSBteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1iZWdpbjo6SW5ib3gtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcGUtbm9uZVwiIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IHNlbGVjdCA9PT0gJ3N0b3JlX2luZm8nIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1pY29uXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTMuMDg5OTUgNi44ODM2OUwzLjAyNDAxIDYuOTg2NjlDMi4zMDM1OCA4LjI1NTU3IDMuMDYxMDEgOS44Nzk0NSA0LjQ2NDY0IDEwLjA2NjJDNC41ODYyNyAxMC4wODExIDQuNzAxMTIgMTAuMDg5MiA0LjgxNDUgMTAuMDg5MkM1LjU1MjU1IDEwLjA4OTIgNi4yMDUyMyA5Ljc3MjI5IDYuNjU5NTMgOS4yNzkxN0w3LjIxMjg2IDguNjc4NTRMNy43NjQzMiA5LjI4MDg5QzguMjEzNjcgOS43NzE3MSA4Ljg2NTIgMTAuMDg5MiA5LjYwNzc2IDEwLjA4OTJDMTAuMzQ3MSAxMC4wODkyIDExLjAwMjIgOS43NzEzNyAxMS40NTEyIDkuMjgwODlMMTIuMDA0NCA4LjY3NjY1TDEyLjU1NzYgOS4yODA4OUMxMy4wMDY2IDkuNzcxMzcgMTMuNjYxNyAxMC4wODkyIDE0LjQwMSAxMC4wODkyQzE1LjE0MDQgMTAuMDg5MiAxNS43OTU0IDkuNzcxMzcgMTYuMjQ0NSA5LjI4MDg5TDE2Ljc5NzcgOC42NzY2NUwxNy4zNTA4IDkuMjgwODlDMTcuNzk5OSA5Ljc3MTM3IDE4LjQ1NDkgMTAuMDg5MiAxOS4xOTQzIDEwLjA4OTJDMTkuMzA0MSAxMC4wODkyIDE5LjQyMjMgMTAuMDgxMSAxOS41NDMzIDEwLjA2NjNDMjAuOTc3MiA5Ljg3MTY4IDIxLjczNTUgOC4xNjM4NyAyMC45MTU1IDYuODg0MTlDMjAuOTE1NCA2Ljg4NDEzIDIwLjkxNTQgNi44ODQwNyAyMC45MTU0IDYuODg0MDJMMTguODA1NiAzLjU5NDI5TDE4LjgwNTYgMy41OTQyOUwxOC44MDQ2IDMuNTkyODJDMTguNzU4MiAzLjUyMDAyIDE4LjY2NDkgMy40NjQyMyAxOC41NTg0IDMuNDY0MjNINS40NDMwN0M1LjMzNjUgMy40NjQyMyA1LjI0MzI2IDMuNTIwMDIgNS4xOTY4MSAzLjU5MjgyTDUuMTk2MTkgMy41OTM3OUwzLjA4OTk1IDYuODgzNjlaTTQuODE4MTggMTIuNzQ5OUM0LjcxNjQ0IDEyLjc0OTkgNC42MTYgMTIuNzQ2OCA0LjUxNjkgMTIuNzQxVjE2LjY0MjhWMTguOTY0MkM0LjUxNjkgMTkuODIxMSA1LjIyNjYzIDIwLjUzNTcgNi4xMTk0MiAyMC41MzU3SDE3Ljg4MkMxOC43NzQ4IDIwLjUzNTcgMTkuNDg0NSAxOS44MjExIDE5LjQ4NDUgMTguOTY0MlYxNi42NDI4VjEyLjc0MTVDMTkuMzg3NCAxMi43NDcgMTkuMjg5MyAxMi43NDk5IDE5LjE5MDYgMTIuNzQ5OUMxOS4wMDIyIDEyLjc0OTkgMTguODE1NyAxMi43Mzk4IDE4LjYzMiAxMi43MjAyVjE2LjY0MjhWMTcuMzkyOEgxNy44ODJINi4xMTk0Mkg1LjM2OTQyVjE2LjY0MjhWMTIuNzIxQzUuMTg4NjYgMTIuNzQgNS4wMDQ3MiAxMi43NDk5IDQuODE4MTggMTIuNzQ5OVpcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS10aXRsZSBmdy1ib2xkIFwiPlN0b3JlIEluZm88L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWVuZDo6SW5ib3gtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1pdGVtIG15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpJbmJveC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtbGluayBwZS1ub25lXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogc2VsZWN0ID09PSAnY29uZmlnJyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtaWNvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzEwMTdfMjIyNzApXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIgMTVDMTMuNjU2OSAxNSAxNSAxMy42NTY5IDE1IDEyQzE1IDEwLjM0MzEgMTMuNjU2OSA5IDEyIDlDMTAuMzQzMSA5IDkgMTAuMzQzMSA5IDEyQzkgMTMuNjU2OSAxMC4zNDMxIDE1IDEyIDE1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xOS40IDE1QzE5LjI2NjkgMTUuMzAxNiAxOS4yMjcyIDE1LjYzNjIgMTkuMjg2IDE1Ljk2MDZDMTkuMzQ0OCAxNi4yODUgMTkuNDk5NSAxNi41ODQzIDE5LjczIDE2LjgyTDE5Ljc5IDE2Ljg4QzE5Ljk3NiAxNy4wNjU3IDIwLjEyMzUgMTcuMjg2MyAyMC4yMjQxIDE3LjUyOTFDMjAuMzI0OCAxNy43NzE5IDIwLjM3NjYgMTguMDMyMiAyMC4zNzY2IDE4LjI5NUMyMC4zNzY2IDE4LjU1NzggMjAuMzI0OCAxOC44MTgxIDIwLjIyNDEgMTkuMDYwOUMyMC4xMjM1IDE5LjMwMzcgMTkuOTc2IDE5LjUyNDMgMTkuNzkgMTkuNzFDMTkuNjA0MyAxOS44OTYgMTkuMzgzNyAyMC4wNDM1IDE5LjE0MDkgMjAuMTQ0MUMxOC44OTgxIDIwLjI0NDggMTguNjM3OCAyMC4yOTY2IDE4LjM3NSAyMC4yOTY2QzE4LjExMjIgMjAuMjk2NiAxNy44NTE5IDIwLjI0NDggMTcuNjA5MSAyMC4xNDQxQzE3LjM2NjMgMjAuMDQzNSAxNy4xNDU3IDE5Ljg5NiAxNi45NiAxOS43MUwxNi45IDE5LjY1QzE2LjY2NDMgMTkuNDE5NSAxNi4zNjUgMTkuMjY0OCAxNi4wNDA2IDE5LjIwNkMxNS43MTYyIDE5LjE0NzIgMTUuMzgxNiAxOS4xODY5IDE1LjA4IDE5LjMyQzE0Ljc4NDIgMTkuNDQ2OCAxNC41MzIgMTkuNjU3MiAxNC4zNTQzIDE5LjkyNTVDMTQuMTc2NiAyMC4xOTM4IDE0LjA4MTMgMjAuNTA4MiAxNC4wOCAyMC44M1YyMUMxNC4wOCAyMS41MzA0IDEzLjg2OTMgMjIuMDM5MSAxMy40OTQyIDIyLjQxNDJDMTMuMTE5MSAyMi43ODkzIDEyLjYxMDQgMjMgMTIuMDggMjNDMTEuNTQ5NiAyMyAxMS4wNDA5IDIyLjc4OTMgMTAuNjY1OCAyMi40MTQyQzEwLjI5MDcgMjIuMDM5MSAxMC4wOCAyMS41MzA0IDEwLjA4IDIxVjIwLjkxQzEwLjA3MjMgMjAuNTc5IDkuOTY1MTIgMjAuMjU4IDkuNzcyNTEgMTkuOTg4N0M5LjU3OTkgMTkuNzE5NCA5LjMxMDc0IDE5LjUxNDMgOSAxOS40QzguNjk4MzggMTkuMjY2OSA4LjM2MzgxIDE5LjIyNzIgOC4wMzk0MSAxOS4yODZDNy43MTUwMiAxOS4zNDQ4IDcuNDE1NjggMTkuNDk5NSA3LjE4IDE5LjczTDcuMTIgMTkuNzlDNi45MzQyNSAxOS45NzYgNi43MTM2OCAyMC4xMjM1IDYuNDcwODggMjAuMjI0MUM2LjIyODA4IDIwLjMyNDggNS45Njc4MyAyMC4zNzY2IDUuNzA1IDIwLjM3NjZDNS40NDIxNyAyMC4zNzY2IDUuMTgxOTIgMjAuMzI0OCA0LjkzOTEyIDIwLjIyNDFDNC42OTYzMiAyMC4xMjM1IDQuNDc1NzUgMTkuOTc2IDQuMjkgMTkuNzlDNC4xMDQwNSAxOS42MDQzIDMuOTU2NTMgMTkuMzgzNyAzLjg1NTg4IDE5LjE0MDlDMy43NTUyMyAxOC44OTgxIDMuNzAzNDMgMTguNjM3OCAzLjcwMzQzIDE4LjM3NUMzLjcwMzQzIDE4LjExMjIgMy43NTUyMyAxNy44NTE5IDMuODU1ODggMTcuNjA5MUMzLjk1NjUzIDE3LjM2NjMgNC4xMDQwNSAxNy4xNDU3IDQuMjkgMTYuOTZMNC4zNSAxNi45QzQuNTgwNTQgMTYuNjY0MyA0LjczNTE5IDE2LjM2NSA0Ljc5NCAxNi4wNDA2QzQuODUyODIgMTUuNzE2MiA0LjgxMzEyIDE1LjM4MTYgNC42OCAxNS4wOEM0LjU1MzI0IDE0Ljc4NDIgNC4zNDI3NiAxNC41MzIgNC4wNzQ0NyAxNC4zNTQzQzMuODA2MTggMTQuMTc2NiAzLjQ5MTc5IDE0LjA4MTMgMy4xNyAxNC4wOEgzQzIuNDY5NTcgMTQuMDggMS45NjA4NiAxMy44NjkzIDEuNTg1NzkgMTMuNDk0MkMxLjIxMDcxIDEzLjExOTEgMSAxMi42MTA0IDEgMTIuMDhDMSAxMS41NDk2IDEuMjEwNzEgMTEuMDQwOSAxLjU4NTc5IDEwLjY2NThDMS45NjA4NiAxMC4yOTA3IDIuNDY5NTcgMTAuMDggMyAxMC4wOEgzLjA5QzMuNDIwOTkgMTAuMDcyMyAzLjc0MiA5Ljk2NTEyIDQuMDExMyA5Ljc3MjUxQzQuMjgwNTkgOS41Nzk5IDQuNDg1NzIgOS4zMTA3NCA0LjYgOUM0LjczMzEyIDguNjk4MzggNC43NzI4MiA4LjM2MzgxIDQuNzE0IDguMDM5NDFDNC42NTUxOSA3LjcxNTAyIDQuNTAwNTQgNy40MTU2OCA0LjI3IDcuMThMNC4yMSA3LjEyQzQuMDI0MDUgNi45MzQyNSAzLjg3NjUzIDYuNzEzNjggMy43NzU4OCA2LjQ3MDg4QzMuNjc1MjMgNi4yMjgwOCAzLjYyMzQzIDUuOTY3ODMgMy42MjM0MyA1LjcwNUMzLjYyMzQzIDUuNDQyMTcgMy42NzUyMyA1LjE4MTkyIDMuNzc1ODggNC45MzkxMkMzLjg3NjUzIDQuNjk2MzIgNC4wMjQwNSA0LjQ3NTc1IDQuMjEgNC4yOUM0LjM5NTc1IDQuMTA0MDUgNC42MTYzMiAzLjk1NjUzIDQuODU5MTIgMy44NTU4OEM1LjEwMTkyIDMuNzU1MjMgNS4zNjIxNyAzLjcwMzQzIDUuNjI1IDMuNzAzNDNDNS44ODc4MyAzLjcwMzQzIDYuMTQ4MDggMy43NTUyMyA2LjM5MDg4IDMuODU1ODhDNi42MzM2OCAzLjk1NjUzIDYuODU0MjUgNC4xMDQwNSA3LjA0IDQuMjlMNy4xIDQuMzVDNy4zMzU2OCA0LjU4MDU0IDcuNjM1MDIgNC43MzUxOSA3Ljk1OTQxIDQuNzk0QzguMjgzODEgNC44NTI4MiA4LjYxODM4IDQuODEzMTIgOC45MiA0LjY4SDlDOS4yOTU3NyA0LjU1MzI0IDkuNTQ4MDIgNC4zNDI3NiA5LjcyNTY5IDQuMDc0NDdDOS45MDMzNyAzLjgwNjE4IDkuOTk4NzIgMy40OTE3OSAxMCAzLjE3VjNDMTAgMi40Njk1NyAxMC4yMTA3IDEuOTYwODYgMTAuNTg1OCAxLjU4NTc5QzEwLjk2MDkgMS4yMTA3MSAxMS40Njk2IDEgMTIgMUMxMi41MzA0IDEgMTMuMDM5MSAxLjIxMDcxIDEzLjQxNDIgMS41ODU3OUMxMy43ODkzIDEuOTYwODYgMTQgMi40Njk1NyAxNCAzVjMuMDlDMTQuMDAxMyAzLjQxMTc5IDE0LjA5NjYgMy43MjYxOCAxNC4yNzQzIDMuOTk0NDdDMTQuNDUyIDQuMjYyNzYgMTQuNzA0MiA0LjQ3MzI0IDE1IDQuNkMxNS4zMDE2IDQuNzMzMTIgMTUuNjM2MiA0Ljc3MjgyIDE1Ljk2MDYgNC43MTRDMTYuMjg1IDQuNjU1MTkgMTYuNTg0MyA0LjUwMDU0IDE2LjgyIDQuMjdMMTYuODggNC4yMUMxNy4wNjU3IDQuMDI0MDUgMTcuMjg2MyAzLjg3NjUzIDE3LjUyOTEgMy43NzU4OEMxNy43NzE5IDMuNjc1MjMgMTguMDMyMiAzLjYyMzQzIDE4LjI5NSAzLjYyMzQzQzE4LjU1NzggMy42MjM0MyAxOC44MTgxIDMuNjc1MjMgMTkuMDYwOSAzLjc3NTg4QzE5LjMwMzcgMy44NzY1MyAxOS41MjQzIDQuMDI0MDUgMTkuNzEgNC4yMUMxOS44OTYgNC4zOTU3NSAyMC4wNDM1IDQuNjE2MzIgMjAuMTQ0MSA0Ljg1OTEyQzIwLjI0NDggNS4xMDE5MiAyMC4yOTY2IDUuMzYyMTcgMjAuMjk2NiA1LjYyNUMyMC4yOTY2IDUuODg3ODMgMjAuMjQ0OCA2LjE0ODA4IDIwLjE0NDEgNi4zOTA4OEMyMC4wNDM1IDYuNjMzNjggMTkuODk2IDYuODU0MjUgMTkuNzEgNy4wNEwxOS42NSA3LjFDMTkuNDE5NSA3LjMzNTY4IDE5LjI2NDggNy42MzUwMiAxOS4yMDYgNy45NTk0MUMxOS4xNDcyIDguMjgzODEgMTkuMTg2OSA4LjYxODM4IDE5LjMyIDguOTJWOUMxOS40NDY4IDkuMjk1NzcgMTkuNjU3MiA5LjU0ODAyIDE5LjkyNTUgOS43MjU2OUMyMC4xOTM4IDkuOTAzMzcgMjAuNTA4MiA5Ljk5ODcyIDIwLjgzIDEwSDIxQzIxLjUzMDQgMTAgMjIuMDM5MSAxMC4yMTA3IDIyLjQxNDIgMTAuNTg1OEMyMi43ODkzIDEwLjk2MDkgMjMgMTEuNDY5NiAyMyAxMkMyMyAxMi41MzA0IDIyLjc4OTMgMTMuMDM5MSAyMi40MTQyIDEzLjQxNDJDMjIuMDM5MSAxMy43ODkzIDIxLjUzMDQgMTQgMjEgMTRIMjAuOTFDMjAuNTg4MiAxNC4wMDEzIDIwLjI3MzggMTQuMDk2NiAyMC4wMDU1IDE0LjI3NDNDMTkuNzM3MiAxNC40NTIgMTkuNTI2OCAxNC43MDQyIDE5LjQgMTVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTAxN18yMjI3MFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS10aXRsZSBmdy1ib2xkIFwiPlN0b3JlIENvbmZpZ3VyYXRpb248L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWVuZDo6SW5ib3gtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLWVuZDo6TWVudSBpdGVtLS0+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tYmVnaW46Ok1lbnUgaXRlbS0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW0gbXktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tYmVnaW46OkRyYWZ0LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saW5rIHBlLW5vbmVcIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBzZWxlY3QgPT09ICdjb250YWN0JyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtaWNvblwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNyAyMVYxOUMxNyAxNy45MzkxIDE2LjU3ODYgMTYuOTIxNyAxNS44Mjg0IDE2LjE3MTZDMTUuMDc4MyAxNS40MjE0IDE0LjA2MDkgMTUgMTMgMTVINUMzLjkzOTEzIDE1IDIuOTIxNzIgMTUuNDIxNCAyLjE3MTU3IDE2LjE3MTZDMS40MjE0MyAxNi45MjE3IDEgMTcuOTM5MSAxIDE5VjIxTTIzIDIxVjE5QzIyLjk5OTMgMTguMTEzNyAyMi43MDQ0IDE3LjI1MjggMjIuMTYxNCAxNi41NTIzQzIxLjYxODQgMTUuODUxOSAyMC44NTgxIDE1LjM1MTYgMjAgMTUuMTNNMTYgMy4xM0MxNi44NjA0IDMuMzUwMyAxNy42MjMgMy44NTA3IDE4LjE2NzYgNC41NTIzMUMxOC43MTIyIDUuMjUzOTIgMTkuMDA3OCA2LjExNjgzIDE5LjAwNzggNy4wMDVDMTkuMDA3OCA3Ljg5MzE3IDE4LjcxMjIgOC43NTYwOCAxOC4xNjc2IDkuNDU3NjlDMTcuNjIzIDEwLjE1OTMgMTYuODYwNCAxMC42NTk3IDE2IDEwLjg4TTEzIDdDMTMgOS4yMDkxNCAxMS4yMDkxIDExIDkgMTFDNi43OTA4NiAxMSA1IDkuMjA5MTQgNSA3QzUgNC43OTA4NiA2Ljc5MDg2IDMgOSAzQzExLjIwOTEgMyAxMyA0Ljc5MDg2IDEzIDdaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtdGl0bGUgZnctYm9sZCBcIj5Db250YWN0IERldGFpbHM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWVuZDo6RHJhZnQtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tZW5kOjpNZW51IGl0ZW0tLT5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tYmVnaW46Ok1lbnUgaXRlbS0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW0gbXktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tYmVnaW46OlRyYXNoLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saW5rIHBlLW5vbmVcIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBzZWxlY3QgPT09ICdyZXZpZXcnfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWljb25cIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk02IDFDNS4yMDQzNSAxIDQuNDQxMjkgMS4zMTYwNyAzLjg3ODY4IDEuODc4NjhDMy4zMTYwNyAyLjQ0MTI5IDMgMy4yMDQzNSAzIDRWMjBDMyAyMC43OTU3IDMuMzE2MDcgMjEuNTU4NyAzLjg3ODY4IDIyLjEyMTNDNC40NDEyOSAyMi42ODM5IDUuMjA0MzUgMjMgNiAyM0gxMkgxOEMxOC43OTU3IDIzIDE5LjU1ODcgMjIuNjgzOSAyMC4xMjEzIDIyLjEyMTNDMjAuNjgzOSAyMS41NTg3IDIxIDIwLjc5NTcgMjEgMjBWMTYuNDIwOEwxOSAxOC40MjA4VjIwQzE5IDIwLjI2NTIgMTguODk0NiAyMC41MTk2IDE4LjcwNzEgMjAuNzA3MUMxOC41MTk2IDIwLjg5NDYgMTguMjY1MiAyMSAxOCAyMUgxNi40MjA4TDE1LjMyODYgMjIuMDkyMkwxMiAyM0wxMi41NDU1IDIxSDZDNS43MzQ3OCAyMSA1LjQ4MDQzIDIwLjg5NDYgNS4yOTI4OSAyMC43MDcxQzUuMTA1MzYgMjAuNTE5NiA1IDIwLjI2NTIgNSAyMFY0QzUgMy43MzQ3OCA1LjEwNTM2IDMuNDgwNDMgNS4yOTI4OSAzLjI5Mjg5QzUuNDgwNDMgMy4xMDUzNiA1LjczNDc4IDMgNiAzSDEyVjlDMTIgOS41NTIyOCAxMi40NDc3IDEwIDEzIDEwSDE5VjEzLjU3OTJMMjEgMTEuNTc5MlY5QzIxIDguNzM0NzggMjAuODk0NiA4LjQ4MDQzIDIwLjcwNzEgOC4yOTI4OUwxMy43MDcxIDEuMjkyODlDMTMuNTE5NiAxLjEwNTM2IDEzLjI2NTIgMSAxMyAxSDZaTTE3LjU4NTggOEwxNCA0LjQxNDIxVjhIMTcuNTg1OFpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIwLjA3NzkgMTEuNTAxNEMyMC4yMzY5IDExLjM0MjQgMjAuNDI1NiAxMS4yMTYzIDIwLjYzMzMgMTEuMTMwM0MyMC44NDA5IDExLjA0NDMgMjEuMDYzNSAxMSAyMS4yODgzIDExQzIxLjUxMzEgMTEgMjEuNzM1NyAxMS4wNDQzIDIxLjk0MzQgMTEuMTMwM0MyMi4xNTEgMTEuMjE2MyAyMi4zMzk3IDExLjM0MjQgMjIuNDk4NyAxMS41MDE0QzIyLjY1NzYgMTEuNjYwMyAyMi43ODM3IDExLjg0OSAyMi44Njk4IDEyLjA1NjdDMjIuOTU1OCAxMi4yNjQ0IDIzLjAwMDEgMTIuNDg3IDIzLjAwMDEgMTIuNzExN0MyMy4wMDAxIDEyLjkzNjUgMjIuOTU1OCAxMy4xNTkxIDIyLjg2OTggMTMuMzY2OEMyMi43ODM3IDEzLjU3NDUgMjIuNjU3NiAxMy43NjMyIDIyLjQ5ODcgMTMuOTIyMUwxNS4zMjg2IDIyLjA5MjNMMTIgMjMuMDAwMUwxMi45MDc4IDE5LjY3MTVMMjAuMDc3OSAxMS41MDE0WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIxLjZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtdGl0bGUgZnctYm9sZCBcIj5SZXZpZXcgJiBTdWJtaXQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWVuZDo6VHJhc2gtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tZW5kOjpNZW51IGl0ZW0tLT5cclxuXHJcblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8IS0tZW5kOjpNZW51LS0+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtOSBjb2wtbGctOSBjb2wteGwtOSBjb2wteHhsLTlcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYm9yZGVyLWJvdHRvbS0wXCI+XHJcbiAgICAgICAgICAgICAgICA8aDFcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInBhZ2UtaGVhZGluZyBkLWZsZXggdGV4dC1kYXJrIGZ3LWJvbGQgZnMtMiBmbGV4LWNvbHVtbiAganVzdGlmeS1jb250ZW50LWNlbnRlciBteS0wIHN1Yi1oZWFkXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gICpuZ0lmPVwic2VsZWN0ID09PSAnc3RvcmVfaW5mbydcIj5FbnRlciBZb3VyIFN0b3JlIERldGFpbHM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3QgPT09ICdjb25maWcnXCI+RW50ZXIgWW91ciBTdG9yZSBDb25maWd1cmF0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ID09PSAnY29udGFjdCdcIj5FbnRlciBQcmltYXJ5IFNQT0MgZGV0YWlsczwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdCA9PT0gJ3JldmlldydcIj5SZXZpZXcgJiBzdWJtaXQ8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2gxPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBbaGlkZGVuXT1cInNlbGVjdCAhPT0gJ2NvbnRhY3QnXCIgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIChjbGljayk9XCJhZGRBbHRTcG9jKClcIiBjbGFzcz1cImJ0biBidG4tbGlnaHQtcHJpbWFyeTEgYnRuLXNtXCI+PHN2ZyBjbGFzcz1cIm1lLTJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTggMTRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTIuNyAzLjVDMi43IDIuNTcxNzQgMy4wNzkyOCAxLjY4MTUgMy43NTQ0MiAxLjAyNTEzQzQuNDI5NTUgMC4zNjg3NDkgNS4zNDUyMiAwIDYuMyAwQzcuMjU0NzggMCA4LjE3MDQ1IDAuMzY4NzQ5IDguODQ1NTggMS4wMjUxM0M5LjUyMDcyIDEuNjgxNSA5LjkgMi41NzE3NCA5LjkgMy41QzkuOSA0LjQyODI2IDkuNTIwNzIgNS4zMTg1IDguODQ1NTggNS45NzQ4N0M4LjE3MDQ1IDYuNjMxMjUgNy4yNTQ3OCA3IDYuMyA3QzUuMzQ1MjIgNyA0LjQyOTU1IDYuNjMxMjUgMy43NTQ0MiA1Ljk3NDg3QzMuMDc5MjggNS4zMTg1IDIuNyA0LjQyODI2IDIuNyAzLjVaTTAgMTMuMTg3OUMwIDEwLjQ5NDUgMi4yNDQzNyA4LjMxMjUgNS4wMTQ2OSA4LjMxMjVINy41ODUzMUMxMC4zNTU2IDguMzEyNSAxMi42IDEwLjQ5NDUgMTIuNiAxMy4xODc5QzEyLjYgMTMuNjM2MyAxMi4yMjU5IDE0IDExLjc2NDcgMTRIMC44MzUzMTJDMC4zNzQwNjMgMTQgMCAxMy42MzYzIDAgMTMuMTg3OVpNMTQuMTc1IDguNTMxMjVWNi43ODEyNUgxMi4zNzVDMTIuMDAwOSA2Ljc4MTI1IDExLjcgNi40ODg2NyAxMS43IDYuMTI1QzExLjcgNS43NjEzMyAxMi4wMDA5IDUuNDY4NzUgMTIuMzc1IDUuNDY4NzVIMTQuMTc1VjMuNzE4NzVDMTQuMTc1IDMuMzU1MDggMTQuNDc1OSAzLjA2MjUgMTQuODUgMy4wNjI1QzE1LjIyNDEgMy4wNjI1IDE1LjUyNSAzLjM1NTA4IDE1LjUyNSAzLjcxODc1VjUuNDY4NzVIMTcuMzI1QzE3LjY5OTEgNS40Njg3NSAxOCA1Ljc2MTMzIDE4IDYuMTI1QzE4IDYuNDg4NjcgMTcuNjk5MSA2Ljc4MTI1IDE3LjMyNSA2Ljc4MTI1SDE1LjUyNVY4LjUzMTI1QzE1LjUyNSA4Ljg5NDkyIDE1LjIyNDEgOS4xODc1IDE0Ljg1IDkuMTg3NUMxNC40NzU5IDkuMTg3NSAxNC4xNzUgOC44OTQ5MiAxNC4xNzUgOC41MzEyNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCIjMDBBM0ZGXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+QWRkIEFsdGVybmF0ZSBTUE9DPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcHQtMVwiPlxyXG4gICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJzdG9yZUZvcm1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFN0b3JlIEluZm8gU3RhcnQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbaGlkZGVuXT1cInNlbGVjdCAhPT0gJ3N0b3JlX2luZm8nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgY29sLWxnLTYgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdG9yZU5hbWVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5TdG9yZSBOYW1lIDxzcGFuIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cInN0b3JlTmFtZVwiIGZvcm1Db250cm9sTmFtZT1cInN0b3JlTmFtZVwiIChpbnB1dCk9XCJpc1N0b3JlTmFtZUV4aXN0ID0gZmFsc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzooc3RvcmVGb3JtLmdldCgnc3RvcmVOYW1lJyk/LmludmFsaWQgfHwgaXNTdG9yZU5hbWVFeGlzdCkgJiYgKHN0b3JlRm9ybS5nZXQoJ3N0b3JlTmFtZScpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKHN0b3JlRm9ybS5nZXQoJ3N0b3JlTmFtZScpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZCkgJiYgc3RvcmVGb3JtLmdldCgnc3RvcmVOYW1lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JlIE5hbWUgaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoc3RvcmVGb3JtLmdldCgnc3RvcmVOYW1lJyk/LnRvdWNoZWQgfHwgc3VibWl0dGVkKSAmJiBpc1N0b3JlTmFtZUV4aXN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JlIE5hbWUgYWxyZWFkeSBleGlzdHMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBjb2wtbGctNiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInN0b3JlQ29kZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlN0b3JlIENvZGUgLyBSZWYgQ29kZSAob3B0aW9uYWwpPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwic3RvcmVDb2RlXCIgZm9ybUNvbnRyb2xOYW1lPVwic3RvcmVDb2RlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgY29sLWxnLTYgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJidXNpbmVzc1R5cGVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5CdXNpbmVzcyBUeXBlIDxzcGFuIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgaWQ9XCJidXNpbmVzc1R5cGVcIiBmb3JtQ29udHJvbE5hbWU9XCJidXNpbmVzc1R5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkNPQ09cIj5DT0NPPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJDT0ZPXCI+Q09GTzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiRk9GT1wiPkZPRk88L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkZPQ09cIj5GT0NPPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgY29sLWxnLTYgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdG9yZVR5cGVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5TdG9yZSBUeXBlIDxzcGFuIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz1cImZvcm0tc2VsZWN0XCIgaWQ9XCJzdG9yZVR5cGVcIiBmb3JtQ29udHJvbE5hbWU9XCJzdG9yZVR5cGVfdHlwZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiSGlnaCBTdHJlZXRcIj5IaWdoIFN0cmVldDwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiTWFsbCBTdG9yZVwiPk1hbGw8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIktpb3NrXCI+S2lvc2s8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBtYi01XCIgKm5nSWY9XCJzdG9yZUZvcm0uZ2V0KCdzdG9yZVR5cGVfdHlwZScpPy52YWx1ZSA9PT0gJ01hbGwgU3RvcmUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cIm1hbGxOYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+RW50ZXIgTWFsbCBOYW1lIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cIm1hbGxOYW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwic3RvcmVUeXBlX25hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzpzdG9yZUZvcm0uZ2V0KCdzdG9yZVR5cGVfbmFtZScpPy5pbnZhbGlkICYmIChzdG9yZUZvcm0uZ2V0KCdzdG9yZVR5cGVfbmFtZScpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKHN0b3JlRm9ybS5nZXQoJ3N0b3JlVHlwZV9uYW1lJyk/LnRvdWNoZWQgfHwgc3VibWl0dGVkKSAmJiBzdG9yZUZvcm0uZ2V0KCdzdG9yZVR5cGVfbmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWxsIE5hbWUgaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImFkZHJlc3NcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5BZGRyZXNzIDxzcGFuIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImFkZHJlc3NcIiBmb3JtQ29udHJvbE5hbWU9XCJhZGRyZXNzXCIgI3BsYWNlc1JlZj1cIm5neC1wbGFjZXNcIiBuZ3gtZ3AtYXV0b2NvbXBsZXRlIChvbkFkZHJlc3NDaGFuZ2UpPVwiaGFuZGxlQWRkcmVzc0NoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6c3RvcmVGb3JtLmdldCgnYWRkcmVzcycpPy5pbnZhbGlkICYmIChzdG9yZUZvcm0uZ2V0KCdhZGRyZXNzJyk/LnRvdWNoZWQgfHwgc3VibWl0dGVkKX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoc3RvcmVGb3JtLmdldCgnYWRkcmVzcycpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZCkgJiYgc3RvcmVGb3JtLmdldCgnYWRkcmVzcycpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRyZXNzIGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNvdW50cnlcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5Db3VudHJ5IDxzcGFuIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImNvdW50cnlcIiBmb3JtQ29udHJvbE5hbWU9XCJjb3VudHJ5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6c3RvcmVGb3JtLmdldCgnY291bnRyeScpPy5pbnZhbGlkICYmIChzdG9yZUZvcm0uZ2V0KCdjb3VudHJ5Jyk/LnRvdWNoZWQgfHwgc3VibWl0dGVkKX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoc3RvcmVGb3JtLmdldCgnY291bnRyeScpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZCkgJiYgc3RvcmVGb3JtLmdldCgnY291bnRyeScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudHJ5IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInN0YXRlXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U3RhdGUgPHNwYW4gY2xhc3M9XCJhbGVydC1yZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwic3RhdGVcIiBmb3JtQ29udHJvbE5hbWU9XCJzdGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOnN0b3JlRm9ybS5nZXQoJ3N0YXRlJyk/LmludmFsaWQgJiYgKHN0b3JlRm9ybS5nZXQoJ3N0YXRlJyk/LnRvdWNoZWQgfHwgc3VibWl0dGVkKX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoc3RvcmVGb3JtLmdldCgnc3RhdGUnKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpICYmIHN0b3JlRm9ybS5nZXQoJ3N0YXRlJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXRlIGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNpdHlcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5DaXR5IC8gVG93biA8c3BhbiBjbGFzcz1cImFsZXJ0LXJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJjaXR5XCIgZm9ybUNvbnRyb2xOYW1lPVwiY2l0eVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOnN0b3JlRm9ybS5nZXQoJ2NpdHknKT8uaW52YWxpZCAmJiAoc3RvcmVGb3JtLmdldCgnY2l0eScpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKHN0b3JlRm9ybS5nZXQoJ2NpdHknKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpICYmIHN0b3JlRm9ybS5nZXQoJ2NpdHknKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2l0eSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJwaW5jb2RlXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UGluIC8gWmlwIENvZGUgPHNwYW4gY2xhc3M9XCJhbGVydC1yZXF1aXJlZFwiPio8L3NwYW4+ICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cInBpbmNvZGVcIiBmb3JtQ29udHJvbE5hbWU9XCJwaW5jb2RlXCIgbWF4bGVuZ3RoPVwiNlwiIG1pbmxlbmd0aD1cIjVcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOnN0b3JlRm9ybS5nZXQoJ3BpbmNvZGUnKT8uaW52YWxpZCAmJiAoc3RvcmVGb3JtLmdldCgncGluY29kZScpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKHN0b3JlRm9ybS5nZXQoJ3BpbmNvZGUnKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpICYmIHN0b3JlRm9ybS5nZXQoJ3BpbmNvZGUnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGluY29kZSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEyIHRleHQtZW5kXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgbXgtMyBidG4tb3V0bGluZSBidG4tb3V0bGluZS1kZWZhdWx0IHJvdW5kZWQtM1wiIChjbGljayk9XCJuYXZpZ2F0ZVRvQWRkU3RvcmUoKVwiPkNhbmNlbDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgW2Rpc2FibGVkXT1cInZhbGlkYXRlU3RvcmVJbmZvKCkgPT09IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub0NvbmZpZ3VyYXRpb24oKVwiPk5leHQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFN0b3JlIEluZm8gRW5kIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFN0b3JlIENvbmZpZ3VyYXRpb24gU3RhcnQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbaGlkZGVuXT1cInNlbGVjdCAhPT0gJ2NvbmZpZydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwidGltZVpvbmVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5UaW1lIFpvbmU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cInRpbWVab25lXCIgZm9ybUNvbnRyb2xOYW1lPVwidGltZVpvbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzpzdG9yZUZvcm0uZ2V0KCd0aW1lWm9uZScpPy5pbnZhbGlkICYmIHN0b3JlRm9ybS5nZXQoJ3RpbWVab25lJyk/LnRvdWNoZWR9XCI+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPVwiZm9ybS1zZWxlY3RcIiBpZD1cInRpbWVab25lXCIgZm9ybUNvbnRyb2xOYW1lPVwidGltZVpvbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gKm5nRm9yPVwibGV0IHRpbWV6b25lIG9mIHRpbWV6b25lc1wiIFt2YWx1ZV09XCJ0aW1lem9uZVwiPnt7IHRpbWV6b25lIH19PC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihzdG9yZUZvcm0uZ2V0KCd0aW1lWm9uZScpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZCkgJiYgc3RvcmVGb3JtLmdldCgndGltZVpvbmUnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGltZSBab25lIGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwibm9PZkNhbWVyYXNcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5ObyBvZiBDYW1lcmFzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwibm9PZkNhbWVyYXNcIiBmb3JtQ29udHJvbE5hbWU9XCJjYW1lcmFzXCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzpzdG9yZUZvcm0uZ2V0KCdjYW1lcmFzJyk/LmludmFsaWQgJiYgc3RvcmVGb3JtLmdldCgnY2FtZXJhcycpPy50b3VjaGVkfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0b3JlRm9ybS5nZXQoJ2NhbWVyYXMnKT8udG91Y2hlZCAmJiBzdG9yZUZvcm0uZ2V0KCdjYW1lcmFzJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIG9mIENhbWVyYXMgaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInN0b3JlT3BlblRpbWVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5TdG9yZSBPcGVuIFRpbWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwidGltZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJzdG9yZU9wZW5UaW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwib3BlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOnN0b3JlRm9ybS5nZXQoJ29wZW4nKT8uaW52YWxpZCAmJiAoc3RvcmVGb3JtLmdldCgnb3BlbicpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKHN0b3JlRm9ybS5nZXQoJ29wZW4nKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpICYmIHN0b3JlRm9ybS5nZXQoJ29wZW4nKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmUgT3BlbiBUaW1lIGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInN0b3JlQ2xvc2VUaW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U3RvcmUgQ2xvc2UgVGltZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJ0aW1lXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cInN0b3JlQ2xvc2VUaW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwiY2xvc2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzpzdG9yZUZvcm0uZ2V0KCdjbG9zZScpPy5pbnZhbGlkICAmJiAoc3RvcmVGb3JtLmdldCgnY2xvc2UnKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpIHx8IHN0b3JlRm9ybS5oYXNFcnJvcignaW52YWxpZFRpbWVSYW5nZScpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihzdG9yZUZvcm0uZ2V0KCdjbG9zZScpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZCkgJiYgc3RvcmVGb3JtLmdldCgnY2xvc2UnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmUgQ2xvc2UgVGltZSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cIm15LTJcIiAqbmdJZj1cInN0b3JlRm9ybS5oYXNFcnJvcignaW52YWxpZFRpbWVSYW5nZScpICYmIChzdG9yZUZvcm0uZ2V0KCdvcGVuJyk/LnRvdWNoZWQgfHwgc3RvcmVGb3JtLmdldCgnY2xvc2UnKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wZW5pbmcgdGltZSBtdXN0IGJlIGJlZm9yZSBjbG9zaW5nIHRpbWUuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtdC0yMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiB0ZXh0LWVuZCBtdC0xNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IG14LTMgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTNcIiAoY2xpY2spPVwibmF2aWdhdGVUb0FkZFN0b3JlKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIFtkaXNhYmxlZF09XCJzdG9yZUZvcm0uZ2V0KCd0aW1lWm9uZScpPy5pbnZhbGlkICYmIHN0b3JlRm9ybS5nZXQoJ29wZW4nKT8uaW52YWxpZCAmJiBzdG9yZUZvcm0uZ2V0KCdjbG9zZScpPy5pbnZhbGlkXCIgKGNsaWNrKT1cImdvVG9Db250YWN0KClcIj5OZXh0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTdG9yZSBDb25maWd1cmF0aW9uIEVuZCAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTdG9yZSBDb250YWN0IFN0YXJ0IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2hpZGRlbl09XCJzZWxlY3QgIT09ICdjb250YWN0J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1BcnJheU5hbWU9XCJzcG9jRGV0YWlsc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNwb2NEZXRhaWwgb2YgZ2V0c3BvY0RldGFpbHNDb250cm9scygpOyBsZXQgaSA9IGluZGV4XCIgW2Zvcm1Hcm91cE5hbWVdPVwiaVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaSE9PTBcIiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbXktNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmdy1ib2xkIGZzLTRcIj5BbHRlcm5hdGUgU1BPQyB7e2l9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiZGVsQWx0U3BvYygpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgdmlld0JveD1cIjAgMCA0MCA0MFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgZmlsdGVyPVwidXJsKCNmaWx0ZXIwX2RfMjI1MF8zMDY1MClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMlwiIHk9XCIxXCIgd2lkdGg9XCIzNlwiIGhlaWdodD1cIjM2XCIgcng9XCI4XCIgZmlsbD1cIndoaXRlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB4PVwiMi41XCIgeT1cIjEuNVwiIHdpZHRoPVwiMzVcIiBoZWlnaHQ9XCIzNVwiIHJ4PVwiNy41XCIgc3Ryb2tlPVwiI0QwRDVERFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMi41IDEzLjk5OThIMTQuMTY2N00xNC4xNjY3IDEzLjk5OThIMjcuNU0xNC4xNjY3IDEzLjk5OThWMjUuNjY2NUMxNC4xNjY3IDI2LjEwODUgMTQuMzQyMyAyNi41MzI1IDE0LjY1NDggMjYuODQ1QzE0Ljk2NzQgMjcuMTU3NiAxNS4zOTEzIDI3LjMzMzIgMTUuODMzMyAyNy4zMzMySDI0LjE2NjdDMjQuNjA4NyAyNy4zMzMyIDI1LjAzMjYgMjcuMTU3NiAyNS4zNDUyIDI2Ljg0NUMyNS42NTc3IDI2LjUzMjUgMjUuODMzMyAyNi4xMDg1IDI1LjgzMzMgMjUuNjY2NVYxMy45OTk4SDE0LjE2NjdaTTE2LjY2NjcgMTMuOTk5OFYxMi4zMzMyQzE2LjY2NjcgMTEuODkxMSAxNi44NDIzIDExLjQ2NzIgMTcuMTU0OCAxMS4xNTQ3QzE3LjQ2NzQgMTAuODQyMSAxNy44OTEzIDEwLjY2NjUgMTguMzMzMyAxMC42NjY1SDIxLjY2NjdDMjIuMTA4NyAxMC42NjY1IDIyLjUzMjYgMTAuODQyMSAyMi44NDUyIDExLjE1NDdDMjMuMTU3NyAxMS40NjcyIDIzLjMzMzMgMTEuODkxMSAyMy4zMzMzIDEyLjMzMzJWMTMuOTk5OE0xOC4zMzMzIDE4LjE2NjVWMjMuMTY2NU0yMS42NjY3IDE4LjE2NjVWMjMuMTY2NVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmaWx0ZXIgaWQ9XCJmaWx0ZXIwX2RfMjI1MF8zMDY1MFwiIHg9XCIwXCIgeT1cIjBcIiB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJVbml0cz1cInVzZXJTcGFjZU9uVXNlXCIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPVwic1JHQlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PVwiMFwiIHJlc3VsdD1cIkJhY2tncm91bmRJbWFnZUZpeFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUNvbG9yTWF0cml4IGluPVwiU291cmNlQWxwaGFcIiB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwXCIgcmVzdWx0PVwiaGFyZEFscGhhXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlT2Zmc2V0IGR5PVwiMVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdHlwZT1cIm1hdHJpeFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXM9XCIwIDAgMCAwIDAuMDYyNzQ1MSAwIDAgMCAwIDAuMDk0MTE3NiAwIDAgMCAwIDAuMTU2ODYzIDAgMCAwIDAuMDUgMFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbjI9XCJCYWNrZ3JvdW5kSW1hZ2VGaXhcIiByZXN1bHQ9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMjI1MF8zMDY1MFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUJsZW5kIG1vZGU9XCJub3JtYWxcIiBpbj1cIlNvdXJjZUdyYXBoaWNcIiBpbjI9XCJlZmZlY3QxX2Ryb3BTaGFkb3dfMjI1MF8zMDY1MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9XCJzaGFwZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9maWx0ZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjb250YWN0TmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPk5hbWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImNvbnRhY3ROYW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6c3BvY0RldGFpbC5nZXQoJ25hbWUnKT8uaW52YWxpZCAmJiAoc3BvY0RldGFpbC5nZXQoJ25hbWUnKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoc3BvY0RldGFpbC5nZXQoJ25hbWUnKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpICYmIHNwb2NEZXRhaWwuZ2V0KCduYW1lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNvbnRhY3RFbWFpbFwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkVtYWlsPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwiZW1haWxcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiY29udGFjdEVtYWlsXCIgZm9ybUNvbnRyb2xOYW1lPVwiZW1haWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm49XCJeKFthLXpBLVowLTlfXFwtXFwuXSspQFthLXowLTktXSsoXFwuW2EtejAtOS1dKykqKFxcLlthLXpBLVpdezIsM30pJFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6c3BvY0RldGFpbC5nZXQoJ2VtYWlsJyk/LmludmFsaWQgJiYgKHNwb2NEZXRhaWwuZ2V0KCdlbWFpbCcpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHNwb2NEZXRhaWwuZ2V0KCdlbWFpbCcpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJzcG9jRGV0YWlsLmdldCgnZW1haWwnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW1haWwgaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJzcG9jRGV0YWlsLmdldCgnZW1haWwnKT8uaGFzRXJyb3IoJ21pbmxlbmd0aCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtYWlsIG11c3QgYmUgYXQgbGVhc3QgMyBjaGFyYWN0ZXJzIGxvbmcuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJzcG9jRGV0YWlsLmdldCgnZW1haWwnKT8uaGFzRXJyb3IoJ21heGxlbmd0aCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtYWlsIG11c3QgYmUgbm90IG1vcmUgdGhhbiAxMDAgY2hhcmFjdGVycyBsb25nLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiY29udGFjdE51bWJlclwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkNvbnRhY3QgTnVtYmVyPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJjb250YWN0TnVtYmVyXCIgbWlubGVuZ3RoPVwiMTBcIiBtYXhsZW5ndGg9XCIxM1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIiBmb3JtQ29udHJvbE5hbWU9XCJjb250YWN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzpzcG9jRGV0YWlsLmdldCgnY29udGFjdCcpPy5pbnZhbGlkICYmIChzcG9jRGV0YWlsLmdldCgnY29udGFjdCcpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZCApfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihzcG9jRGV0YWlsLmdldCgnY29udGFjdCcpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJzcG9jRGV0YWlsLmdldCgnY29udGFjdCcpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250YWN0IGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwic3BvY0RldGFpbC5nZXQoJ2NvbnRhY3QnKT8uaGFzRXJyb3IoJ21pbmxlbmd0aCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRhY3QgbXVzdCBiZSBhdCBsZWFzdCAxMCBkaWdpdHMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJzcG9jRGV0YWlsLmdldCgnY29udGFjdCcpPy5oYXNFcnJvcignbWF4bGVuZ3RoJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGFjdCBtdXN0IGJlIG5vdCBtb3JlIHRoYW4gMTMgZGlnaXRzLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiZGVzaWduYXRpb25cIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5EZXNpZ25hdGlvbiAob3B0aW9uYWwpPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJkZXNpZ25hdGlvblwiIGZvcm1Db250cm9sTmFtZT1cImRlc2lnbmF0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDEgY2xhc3M9XCJzdWItaGVhZFwiPkVudGVyIFN0b3JlIENvbm5lY3Rpb24gRGV0YWlsczwvaDE+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhbnlEZXNrSURcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5BbnlEZXNrIElEIC8gVGVhbVZpZXdlciBJRCAob3B0aW9uYWwpPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiYW55RGVza0lEXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic3RvcmVDb25uZWN0aW9uSWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiB0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IG14LTMgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTNcIiAoY2xpY2spPVwibmF2aWdhdGVUb0FkZFN0b3JlKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIFtkaXNhYmxlZF09XCJzdG9yZUZvcm0uZ2V0KCdzcG9jRGV0YWlscycpPy5pbnZhbGlkXCIgKGNsaWNrKT1cImdvVG9SZXZpZXcoKVwiPk5leHQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFN0b3JlIENvbnRhY3QgRW5kIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFJldmlldyAmIFN1Ym1pdCBTdGFydCAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IFtoaWRkZW5dPVwic2VsZWN0ICE9PSAncmV2aWV3J1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZnMtNCBmdy1ib2xkIHRleHQtaG92ZXItcHJpbWFyeSBzdWItdGl0bGUgdGV4dC1ncmF5LTYwMCBtLTAgY3Vyc29yLXBvaW50ZXJcIj5TdG9yZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgSW5mb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTlcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbGctMyBmdy1ib2xkIHRleHQtbXV0ZWQtcmV2aWV3XCI+U3RvcmUgTmFtZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy05XCI+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnctYm9sZGVyIGZzLTYgdGV4dC1yZXZpZXctdmFsXCI+e3tzdG9yZUZvcm0uZ2V0KCdzdG9yZU5hbWUnKT8udmFsdWUgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVGb3JtLmdldCgnc3RvcmVOYW1lJyk/LnZhbHVlIDogJ05BJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbGctMyBmdy1ib2xkIHRleHQtbXV0ZWQtcmV2aWV3XCI+U3RvcmUgQ29kZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy05IGZ2LXJvd1wiPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZ3LWJvbGQgZnMtNiB0ZXh0LXJldmlldy12YWxcIj57e3N0b3JlRm9ybS5nZXQoJ3N0b3JlQ29kZScpPy52YWx1ZSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZUZvcm0uZ2V0KCdzdG9yZUNvZGUnKT8udmFsdWU6ICdOQSd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLWxnLTMgZnctYm9sZCB0ZXh0LW11dGVkLXJldmlld1wiPkJ1c2luZXNzIFR5cGU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctOVwiPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZ3LWJvbGQgZnMtNiB0ZXh0LXJldmlldy12YWwgdGV4dC1ob3Zlci1wcmltYXJ5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3N0b3JlRm9ybS5nZXQoJ2J1c2luZXNzVHlwZScpPy52YWx1ZSA/IHN0b3JlRm9ybS5nZXQoJ2J1c2luZXNzVHlwZScpPy52YWx1ZSA6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnTkEnfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbGctMyBmdy1ib2xkIHRleHQtbXV0ZWQtcmV2aWV3XCI+U3RvcmUgVHlwZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxpIGRhdGEtYnMtdG9nZ2xlPVwidG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZT1cIlBob25lIG51bWJlciBtdXN0IGJlIGFjdGl2ZVwiIGNsYXNzPVwiZmFzIGZhLWV4Y2xhbWF0aW9uLWNpcmNsZSBtcy0xIGZzLTdcIj48L2k+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy05IGQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnctYm9sZGVyIGZzLTYgbWUtMiB0ZXh0LXJldmlldy12YWxcIj57e3N0b3JlRm9ybS5nZXQoJ3N0b3JlVHlwZV90eXBlJyk/LnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHN0b3JlRm9ybS5nZXQoJ3N0b3JlVHlwZV90eXBlJyk/LnZhbHVlIDogJ05BJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmFkZ2Utc3VjY2Vzc1wiPlZlcmlmaWVkPC9zcGFuPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi03XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN0b3JlRm9ybS5nZXQoJ3N0b3JlVHlwZV90eXBlJyk/LnZhbHVlICYmIHN0b3JlRm9ybS5nZXQoJ3N0b3JlVHlwZV90eXBlJyk/LnZhbHVlID09PSAnTWFsbCBTdG9yZSdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbGctMyBmdy1ib2xkIHRleHQtbXV0ZWQtcmV2aWV3XCI+IE1hbGwgTmFtZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy05XCI+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnctYm9sZGVyIGZzLTYgdGV4dC1yZXZpZXctdmFsXCI+e3tzdG9yZUZvcm0uZ2V0KCdzdG9yZVR5cGVfbmFtZScpPy52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzdG9yZUZvcm0uZ2V0KCdzdG9yZVR5cGVfbmFtZScpPy52YWx1ZSA6ICdOQSd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLWxnLTMgZnctYm9sZCB0ZXh0LW11dGVkLXJldmlld1wiPkFkZHJlc3M8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctOVwiPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZ3LWJvbGRlciBmcy02IHRleHQtcmV2aWV3LXZhbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e3N0b3JlRm9ybS5nZXQoJ2FkZHJlc3MnKT8udmFsdWUgPyBzdG9yZUZvcm0uZ2V0KCdhZGRyZXNzJyk/LnZhbHVlIDogJ05BJ319XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJyb3cgbWItMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbGctMyBmdy1ib2xkIHRleHQtbXV0ZWQtcmV2aWV3XCI+QWxsb3cgQ2hhbmdlczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy05XCI+PHNwYW4gY2xhc3M9XCJmdy1ib2xkIGZzLTZcIj5ZZXM8L3NwYW4+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTQgZnctYm9sZCB0ZXh0LWhvdmVyLXByaW1hcnkgc3ViLXRpdGxlIHRleHQtZ3JheS02MDAgbS0wIGN1cnNvci1wb2ludGVyXCI+U3RvcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb248L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSBwLTlcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbGctMyBmdy1ib2xkIHRleHQtbXV0ZWQtcmV2aWV3XCI+VGltZSBab25lPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTlcIj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmdy1ib2xkZXIgZnMtNiB0ZXh0LXJldmlldy12YWxcIj57e3N0b3JlRm9ybS5nZXQoJ3RpbWVab25lJyk/LnZhbHVlID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlRm9ybS5nZXQoJ3RpbWVab25lJyk/LnZhbHVlIDogJ05BJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJyb3cgbWItN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1sZy0zIGZ3LWJvbGQgdGV4dC1tdXRlZC1yZXZpZXdcIj5ObyBvZiBDYW1lcmFzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTkgZnYtcm93XCI+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnctYm9sZCBmcy02IHRleHQtcmV2aWV3LXZhbFwiPnt7c3RvcmVGb3JtLmdldCgnY2FtZXJhcycpPy52YWx1ZSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZUZvcm0uZ2V0KCdjYW1lcmFzJyk/LnZhbHVlIDogJ05BJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLWxnLTMgZnctYm9sZCB0ZXh0LW11dGVkLXJldmlld1wiPlN0b3JlIE9wZW4gVGltZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy05XCI+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnctYm9sZCBmcy02IHRleHQtcmV2aWV3LXZhbCB0ZXh0LWhvdmVyLXByaW1hcnlcIj57e3N0b3JlRm9ybS5nZXQoJ29wZW4nKT8udmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc3RvcmVGb3JtLmdldCgnb3BlbicpPy52YWx1ZSA6ICdOQSd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1sZy0zIGZ3LWJvbGQgdGV4dC1tdXRlZC1yZXZpZXdcIj5TdG9yZSBDbG9zZSBUaW1lPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTlcIj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmdy1ib2xkZXIgZnMtNiB0ZXh0LXJldmlldy12YWxcIj57e3N0b3JlRm9ybS5nZXQoJ2Nsb3NlJyk/LnZhbHVlID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlRm9ybS5nZXQoJ2Nsb3NlJyk/LnZhbHVlIDogJ05BJ319PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTQgZnctYm9sZCB0ZXh0LWhvdmVyLXByaW1hcnkgc3ViLXRpdGxlIHRleHQtZ3JheS02MDAgbS0wIGN1cnNvci1wb2ludGVyXCI+Q29udGFjdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRGV0YWlsczwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHJvdyBweC05IHB0LTMgcGItNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmUgY29sLW1kLTEyIGNvbC1sZy0xMiBjb2wteGwtOSBjb2wteHhsLThcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBhbGlnbi1taWRkbGUgZ3ktNlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGJvZHkgY2xhc3M9XCJmcy02IGZ3LWJvbGRcIj4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIGZvcm1BcnJheU5hbWU9XCJzcG9jRGV0YWlsc1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHNwb2Mgb2YgZ2V0c3BvY0RldGFpbHNDb250cm9scygpO2xldCBpPWluZGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+U3BvYyB7e2krMX19PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTUgMTUuNzVWMTQuMjVDMTUgMTMuNDU0NCAxNC42ODM5IDEyLjY5MTMgMTQuMTIxMyAxMi4xMjg3QzEzLjU1ODcgMTEuNTY2MSAxMi43OTU2IDExLjI1IDEyIDExLjI1SDZDNS4yMDQzNSAxMS4yNSA0LjQ0MTI5IDExLjU2NjEgMy44Nzg2OCAxMi4xMjg3QzMuMzE2MDcgMTIuNjkxMyAzIDEzLjQ1NDQgMyAxNC4yNVYxNS43NU0xMiA1LjI1QzEyIDYuOTA2ODUgMTAuNjU2OSA4LjI1IDkgOC4yNUM3LjM0MzE1IDguMjUgNiA2LjkwNjg1IDYgNS4yNUM2IDMuNTkzMTUgNy4zNDMxNSAyLjI1IDkgMi4yNUMxMC42NTY5IDIuMjUgMTIgMy41OTMxNSAxMiA1LjI1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4gY2xhc3M9XCJtcy0yXCI+e3tnZXRzcG9jRGV0YWlsc1ZhbHVlcyhpKT8ubmFtZSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHNwb2NEZXRhaWxzVmFsdWVzKGkpPy5uYW1lIDogJ05BJyB9fTwvc3Bhbj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzFfODAzNzMpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTIgNi4wMDAwMlY5Ljc1MDAyQzEyIDEwLjM0NjggMTIuMjM3MSAxMC45MTkxIDEyLjY1OSAxMS4zNDFDMTMuMDgxIDExLjc2MyAxMy42NTMzIDEyIDE0LjI1IDEyQzE0Ljg0NjcgMTIgMTUuNDE5IDExLjc2MyAxNS44NDEgMTEuMzQxQzE2LjI2MyAxMC45MTkxIDE2LjUgMTAuMzQ2OCAxNi41IDkuNzUwMDJWOS4wMDAwMkMxNi40OTk5IDcuMzA3MjkgMTUuOTI3MiA1LjY2NDM4IDE0Ljg3NSA0LjMzODQyQzEzLjgyMjcgMy4wMTI0NiAxMi4zNTI5IDIuMDgxNDQgMTAuNzA0NSAxLjY5Njc1QzkuMDU2MDUgMS4zMTIwNSA3LjMyNTk2IDEuNDk2MyA1Ljc5NTUyIDIuMjE5NTVDNC4yNjUwOCAyLjk0Mjc5IDMuMDI0MzEgNC4xNjI0OSAyLjI3NDk1IDUuNjgwMzJDMS41MjU2IDcuMTk4MTQgMS4zMTE3MyA4LjkyNDgzIDEuNjY4MTMgMTAuNTc5NkMyLjAyNDUzIDEyLjIzNDQgMi45MzAyNCAxMy43MTk5IDQuMjM3OTggMTQuNzk0N0M1LjU0NTcyIDE1Ljg2OTUgNy4xNzg1OCAxNi40NzAzIDguODcxMDYgMTYuNDk5NEMxMC41NjM1IDE2LjUyODUgMTIuMjE2MSAxNS45ODQyIDEzLjU2IDE0Ljk1NU0xMiA5LjAwMDAyQzEyIDEwLjY1NjkgMTAuNjU2OSAxMiA5LjAwMDAxIDEyQzcuMzQzMTUgMTIgNi4wMDAwMSAxMC42NTY5IDYuMDAwMDEgOS4wMDAwMkM2LjAwMDAxIDcuMzQzMTcgNy4zNDMxNSA2LjAwMDAyIDkuMDAwMDEgNi4wMDAwMkMxMC42NTY5IDYuMDAwMDIgMTIgNy4zNDMxNyAxMiA5LjAwMDAyWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMV84MDM3M1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4gY2xhc3M9XCJtcy0yXCI+e3tnZXRzcG9jRGV0YWlsc1ZhbHVlcyhpKT8uZW1haWwgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRzcG9jRGV0YWlsc1ZhbHVlcyhpKT8uZW1haWwgOiAnTkEnIH19PC9zcGFuPjwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMV84MDM3NilcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xNi41MDAxIDEyLjY5MDFWMTQuOTQwMUMxNi41MDA5IDE1LjE0ODkgMTYuNDU4MSAxNS4zNTU3IDE2LjM3NDUgMTUuNTQ3MUMxNi4yOTA4IDE1LjczODUgMTYuMTY4IDE1LjkxMDMgMTYuMDE0MSAxNi4wNTE1QzE1Ljg2MDIgMTYuMTkyNyAxNS42Nzg1IDE2LjMwMDIgMTUuNDgwNiAxNi4zNjcxQzE1LjI4MjggMTYuNDM0IDE1LjA3MzEgMTYuNDU4OSAxNC44NjUxIDE2LjQ0MDFDMTIuNTU3MiAxNi4xODkzIDEwLjM0MDMgMTUuNDAwNyA4LjM5MjU3IDE0LjEzNzZDNi41ODA0NCAxMi45ODYxIDUuMDQ0MDcgMTEuNDQ5NyAzLjg5MjU3IDkuNjM3NTdDMi42MjUwNiA3LjY4MDk4IDEuODM2MjUgNS40NTMzMiAxLjU5MDA3IDMuMTM1MDdDMS41NzEzMyAyLjkyNzY3IDEuNTk1OTggMi43MTg2NCAxLjY2MjQ1IDIuNTIxMjlDMS43Mjg5MiAyLjMyMzk0IDEuODM1NzUgMi4xNDI1OSAxLjk3NjE1IDEuOTg4NzlDMi4xMTY1NCAxLjgzNDk5IDIuMjg3NDMgMS43MTIxIDIuNDc3OTIgMS42Mjc5NkMyLjY2ODQgMS41NDM4MiAyLjg3NDMzIDEuNTAwMjcgMy4wODI1NyAxLjUwMDA3SDUuMzMyNTdDNS42OTY1NSAxLjQ5NjQ5IDYuMDQ5NDIgMS42MjUzOCA2LjMyNTM5IDEuODYyNzJDNi42MDEzNyAyLjEwMDA2IDYuNzgxNjMgMi40Mjk2NiA2LjgzMjU3IDIuNzkwMDdDNi45Mjc1NCAzLjUxMDEyIDcuMTAzNjYgNC4yMTcxMiA3LjM1NzU3IDQuODk3NTdDNy40NTg0OCA1LjE2NjAyIDcuNDgwMzIgNS40NTc3NiA3LjQyMDUgNS43MzgyM0M3LjM2MDY5IDYuMDE4NzEgNy4yMjE3MiA2LjI3NjE2IDcuMDIwMDcgNi40ODAwN0w2LjA2NzU3IDcuNDMyNTdDNy4xMzUyNCA5LjMxMDIzIDguNjg5OTEgMTAuODY0OSAxMC41Njc2IDExLjkzMjZMMTEuNTIwMSAxMC45ODAxQzExLjcyNCAxMC43Nzg0IDExLjk4MTQgMTAuNjM5NSAxMi4yNjE5IDEwLjU3OTZDMTIuNTQyNCAxMC41MTk4IDEyLjgzNDEgMTAuNTQxNyAxMy4xMDI2IDEwLjY0MjZDMTMuNzgzIDEwLjg5NjUgMTQuNDkgMTEuMDcyNiAxNS4yMTAxIDExLjE2NzZDMTUuNTc0NCAxMS4yMTkgMTUuOTA3MSAxMS40MDI1IDE2LjE0NSAxMS42ODMyQzE2LjM4MjggMTEuOTYzOSAxNi41MDkyIDEyLjMyMjMgMTYuNTAwMSAxMi42OTAxWlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMV84MDM3NlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIGZpbGw9XCJ3aGl0ZVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PHNwYW4gY2xhc3M9XCJtcy0yXCI+e3tnZXRzcG9jRGV0YWlsc1ZhbHVlcyhpKT8uY29udGFjdCA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHNwb2NEZXRhaWxzVmFsdWVzKGkpPy5jb250YWN0IDogJ05BJyB9fTwvc3Bhbj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPkFueURlc2sgSURcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMlwiPnt7c3RvcmVGb3JtLmdldCgnc3RvcmVDb25uZWN0aW9uSWQnKT8udmFsdWUgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVGb3JtLmdldCgnc3RvcmVDb25uZWN0aW9uSWQnKT8udmFsdWUgOiAnTkEnIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGFibGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJnb1RvU3RvcmVJbmZvKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBteC0zIGJ0bi1vdXRsaW5lIGJ0bi1vdXRsaW5lLWRlZmF1bHQgcm91bmRlZC0zXCI+RWRpdDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiICAoY2xpY2spPVwib25TdWJtaXQoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCI+U3VibWl0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBSZXZpZXcgJiBTdWJtaXQgRW5kIC0tPlxyXG4gICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj4iXX0=
|
|
321
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLXN0b3Jlcy1mb3JtLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1zdG9yZXMvc3JjL2xpYi9jb21wb25lbnRzL2FkZC1zdG9yZXMtZm9ybS9hZGQtc3RvcmVzLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLXN0b3Jlcy9zcmMvbGliL2NvbXBvbmVudHMvYWRkLXN0b3Jlcy1mb3JtL2FkZC1zdG9yZXMtZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQTBCLFVBQVUsRUFBZ0QsTUFBTSxnQkFBZ0IsQ0FBQztBQUtsSCxPQUFPLEtBQUssTUFBTSxNQUFNLGlCQUFpQixDQUFDO0FBRzFDLE9BQVEsS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMzQixPQUFPLGlCQUFpQixDQUFDO0FBQ3pCLE9BQU8sR0FBRyxNQUFNLGtCQUFrQixDQUFDO0FBQ25DLE9BQU8sUUFBUSxNQUFNLHVCQUF1QixDQUFDO0FBQzdDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDOzs7Ozs7Ozs7QUFFMUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQixLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBU3ZCLE1BQU0sT0FBTyxzQkFBc0I7SUFvQ3ZCO0lBQXVCO0lBQ3ZCO0lBQ0E7SUFDQTtJQXRDYyxTQUFTLENBQTZCO0lBRTlELE1BQU0sR0FBRyxZQUFZLENBQUM7SUFDdEIsU0FBUyxDQUFZO0lBQ3JCLE9BQU8sQ0FBUztJQUNoQixTQUFTLENBQVE7SUFDakIsY0FBYyxDQUFNO0lBQ3BCLEtBQUssR0FBRyxLQUFLLENB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LFFBQVEsRUFBRTtZQUNuQixJQUFJLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQztTQUM1QjthQUFNLElBQUcsS0FBSyxJQUFJLFNBQVMsRUFBRTtZQUM1QixJQUFJLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztTQUN4QjthQUFLLElBQUcsS0FBSyxJQUFJLFFBQVEsRUFBRTtZQUMxQixJQUFJLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztTQUN6QjtJQUNMLENBQUM7d0dBNVRVLHNCQUFzQjs0RkFBdEIsc0JBQXNCLG1LQzdCbkMsbTNyREFrakJNOzs0RkRyaEJPLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxxQkFBcUI7bUxBS1AsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgT25Jbml0LFxyXG4gIFZpZXdDaGlsZCxcclxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUFycmF5LCBWYWxpZGF0b3JzLCBGb3JtR3JvdXAsIEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdGlvbkVycm9ycyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBTdG9yZXNTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NlcnZpY2VzL3N0b3Jlcy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vbi9odHRwXCI7XHJcbmltcG9ydCB7IFN0b3JlUmVzcG9uc2UgfSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy9zdG9yZS5pbnRlcmZhY2VcIjtcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSBcIkBhbmd1bGFyL3JvdXRlclwiO1xyXG5pbXBvcnQgKiBhcyBtb21lbnQgZnJvbSAnbW9tZW50LXRpbWV6b25lJztcclxuaW1wb3J0IHsgTmd4R3BBdXRvY29tcGxldGVEaXJlY3RpdmUgfSBmcm9tIFwiQGFuZ3VsYXItbWFnaWMvbmd4LWdwLWF1dG9jb21wbGV0ZS9saWIvbmd4LWdwLWF1dG9jb21wbGV0ZS5kaXJlY3RpdmVcIjtcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1zaGFyZWRcIjtcclxuaW1wb3J0ICBkYXlqcyBmcm9tIFwiZGF5anNcIjtcclxuaW1wb3J0IFwiZGF5anMvbG9jYWxlL2VuXCI7XHJcbmltcG9ydCB1dGMgZnJvbSBcImRheWpzL3BsdWdpbi91dGNcIjtcclxuaW1wb3J0IHRpbWV6b25lIGZyb20gXCJkYXlqcy9wbHVnaW4vdGltZXpvbmVcIjtcclxuaW1wb3J0IHsgU3RvcmVQb3B1cENvbXBvbmVudCB9IGZyb20gXCIuL3N0b3JlLXBvcHVwL3N0b3JlLXBvcHVwLmNvbXBvbmVudFwiO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5kYXlqcy5leHRlbmQodXRjKTtcclxuZGF5anMuZXh0ZW5kKHRpbWV6b25lKTtcclxuXHJcbmRlY2xhcmUgdmFyICQ6IGFueTtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpYi1hZGQtc3RvcmVzLWZvcm1cIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL2FkZC1zdG9yZXMtZm9ybS5jb21wb25lbnQuaHRtbFwiLFxyXG4gIHN0eWxlVXJsOiBcIi4vYWRkLXN0b3Jlcy1mb3JtLmNvbXBvbmVudC5zY3NzXCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZGRTdG9yZXNGb3JtQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICBAVmlld0NoaWxkKFwibmd4UGxhY2VzXCIpIHBsYWNlc1JlZjogTmd4R3BBdXRvY29tcGxldGVEaXJlY3RpdmU7XHJcblxyXG4gIHNlbGVjdCA9IFwic3RvcmVfaW5mb1wiO1xyXG4gIHN0b3JlRm9ybTogRm9ybUdyb3VwO1xyXG4gIHN0b3JlSWQ6IHN0cmluZztcclxuICB0aW1lem9uZXM6IGFueVtdO1xyXG4gICRoZWFkZXJGaWx0ZXJzOiBhbnk7XHJcbiAgZGF5anMgPSBkYXlqcztcclxuICBzdWJtaXR0ZWQ6Ym9vbGVhblxyXG4gIGlzU3RvcmVOYW1lRXhpc3Q6Ym9vbGVhblxyXG5cclxuXHJcbiAgcHVibGljIGhhbmRsZUFkZHJlc3NDaGFuZ2UocGxhY2U6IGdvb2dsZS5tYXBzLnBsYWNlcy5QbGFjZVJlc3VsdCB8IGFueSkge1xyXG4gICAgaWYgKHBsYWNlLmdlb21ldHJ5KSB7XHJcbiAgICAgIGxldCBjb3VudHJ5ID0gXCJcIiwgY2l0eSA9IFwiXCIsIHN0YXRlID0gXCJcIiwgcGluY29kZSA9IFwiXCI7XHJcbiAgICAgIHBsYWNlLmFkZHJlc3NfY29tcG9uZW50cy5mb3JFYWNoKChjb21wb25lbnQ6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChjb21wb25lbnQudHlwZXMuaW5jbHVkZXMoXCJjb3VudHJ5XCIpKSB7XHJcbiAgICAgICAgICBjb3VudHJ5ID0gY29tcG9uZW50LmxvbmdfbmFtZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbXBvbmVudC50eXBlcy5pbmNsdWRlcyhcImxvY2FsaXR5XCIpKSB7XHJcbiAgICAgICAgICBjaXR5ID0gY29tcG9uZW50LmxvbmdfbmFtZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNvbXBvbmVudC50eXBlcy5pbmNsdWRlcyhcImFkbWluaXN0cmF0aXZlX2FyZWFfbGV2ZWxfMVwiKSkge1xyXG4gICAgICAgICAgc3RhdGUgPSBjb21wb25lbnQubG9uZ19uYW1lO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY29tcG9uZW50LnR5cGVzLmluY2x1ZGVzKFwicG9zdGFsX2NvZGVcIikpIHtcclxuICAgICAgICAgIHBpbmNvZGUgPSBjb21wb25lbnQubG9uZ19uYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIHRoaXMuc3RvcmVGb3JtLmdldCgnYWRkcmVzcycpPy5zZXRWYWx1ZShwbGFjZS5mb3JtYXR0ZWRfYWRkcmVzcyk7XHJcbiAgICAgIHRoaXMuc3RvcmVGb3JtLmdldChcImNvdW50cnlcIik/LnNldFZhbHVlKGNvdW50cnkpO1xyXG4gICAgICB0aGlzLnN0b3JlRm9ybS5nZXQoXCJjaXR5XCIpPy5zZXRWYWx1ZShjaXR5KTtcclxuICAgICAgdGhpcy5zdG9yZUZvcm0uZ2V0KFwic3RhdGVcIik/LnNldFZhbHVlKHN0YXRlKTtcclxuICAgICAgdGhpcy5zdG9yZUZvcm0uZ2V0KFwicGluY29kZVwiKT8uc2V0VmFsdWUocGluY29kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLHB1YmxpYyBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsLFxyXG4gICAgcHJpdmF0ZSBzdG9yZXNTZXJ2aWNlOiBTdG9yZXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB0czogVG9hc3RTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlclxyXG4gICkge1xyXG4gICAgbGV0IGRhdGE6YW55ID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnaGVhZGVyLWZpbHRlcnMnKSB8fCAnJyk7XHJcbiAgICBsZXQgdXNlcjphbnkgPSBKU09OLnBhcnNlKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd1c2VyLWluZm8nKSB8fCAnJyk7XHJcbiAgICB0aGlzLiRoZWFkZXJGaWx0ZXJzID0gZGF0YSA/IGRhdGEgOiB1c2VyO1xyXG4gICAgdGhpcy5nZXRBbGxUaW1lem9uZXMoKTtcclxuICAgIHRoaXMuY3JlYXRlRm9ybSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7fVxyXG5cclxuICAvLyBzZXR0aW5ndmFsdWUobGFiZWw6IGFueSkge1xyXG4gICAgLy8gaWYgKGxhYmVsID09IFwic3RvcmVfaW5mb1wiKSB7XHJcbiAgICAvLyAgIHRoaXMuc2VsZWN0ID0gXCJzdG9yZV9pbmZvXCI7XHJcbiAgICAvLyB9IGVsc2UgaWYgKGxhYmVsID09IFwiY29uZmlnXCIpIHtcclxuICAgIC8vICAgdGhpcy5zZWxlY3QgPSBcImNvbmZpZ1wiO1xyXG4gICAgLy8gfSBlbHNlIGlmIChsYWJlbCA9PSBcInN0b3JlX2xvY1wiKSB7XHJcbiAgICAvLyAgIHRoaXMuc2VsZWN0ID0gXCJzdG9yZV9sb2NcIjtcclxuICAgIC8vIH0gZWxzZSBpZiAobGFiZWwgPT0gXCJjb250YWN0XCIpIHtcclxuICAgIC8vICAgdGhpcy5zZWxlY3QgPSBcImNvbnRhY3RcIjtcclxuICAgIC8vIH0gZWxzZSBpZiAobGFiZWwgPT0gXCJyZXZpZXdcIikge1xyXG4gICAgLy8gICB0aGlzLnNlbGVjdCA9IFwicmV2aWV3XCI7XHJcbiAgICAvLyB9XHJcbiAgLy8gfVxyXG5cclxuICBjcmVhdGVGb3JtKCkge1xyXG4gICAgdGhpcy5zdG9yZUZvcm0gPSB0aGlzLmZiLmdyb3VwKFxyXG4gICAgICB7XHJcbiAgICAgICAgc3RvcmVOYW1lOiBbXCJcIiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgY2xpZW50SWQ6IFt0aGlzLiRoZWFkZXJGaWx0ZXJzPy5jbGllbnQgPyB0aGlzLiRoZWFkZXJGaWx0ZXJzPy5jbGllbnQgOnRoaXMuJGhlYWRlckZpbHRlcnM/LmNsaWVudElkLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICBidXNpbmVzc1R5cGU6IFtcIkNPQ09cIiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgc3RvcmVUeXBlX3R5cGU6IFtcIkhpZ2ggU3RyZWV0XCIsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIHN0b3JlVHlwZV9uYW1lOiBbXCJcIl0sXHJcbiAgICAgICAgc3RvcmVDb2RlOiBbXCJcIl0sXHJcbiAgICAgICAgYWRkcmVzczogW1wiXCIsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIGNvdW50cnk6IFtcIlwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICBzdGF0ZTogW1wiXCIsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIGNpdHk6IFtcIlwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICBwaW5jb2RlOiBbXCJcIiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgdGltZVpvbmU6IFtcIkFzaWEvS29sa2F0YVwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICBvcGVuOiBbXCIxMDowMFwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICBjbG9zZTogW1wiMjA6MDBcIiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgLy8gY2FtZXJhczogWzAsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIHNwb2NEZXRhaWxzOiB0aGlzLmZiLmFycmF5KFt0aGlzLmNyZWF0ZVNwb2NEZXRhaWwoKV0pLFxyXG4gICAgICAgIHN0b3JlQ29ubmVjdGlvbklkOiBbXCJcIl0sXHJcbiAgICAgIH0sXHJcbiAgICAgIHsgdmFsaWRhdG9yczogdGhpcy50aW1lUmFuZ2VWYWxpZGF0b3IgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHZhbGlkYXRlU3RvcmVJbmZvKCl7XHJcbiAgICBpZih0aGlzLnN0b3JlRm9ybS5nZXQoXCJzdG9yZU5hbWVcIik/LnZhbGlkICYmIHRoaXMuc3RvcmVGb3JtLmdldChcImJ1c2luZXNzVHlwZVwiKT8udmFsaWRcclxuICAgICAmJiB0aGlzLnN0b3JlRm9ybS5nZXQoXCJzdG9yZVR5cGVfdHlwZVwiKT8udmFsaWQgJiYgdGhpcy5zdG9yZUZvcm0uZ2V0KFwiYWRkcmVzc1wiKT8udmFsaWRcclxuICAgICAmJiB0aGlzLnN0b3JlRm9ybS5nZXQoXCJjb3VudHJ5XCIpPy52YWxpZCAmJiB0aGlzLnN0b3JlRm9ybS5nZXQoXCJzdGF0ZVwiKT8udmFsaWRcclxuICAgICAmJiB0aGlzLnN0b3JlRm9ybS5nZXQoXCJjaXR5XCIpPy52YWxpZCAmJiB0aGlzLnN0b3JlRm9ybS5nZXQoXCJwaW5jb2RlXCIpPy52YWxpZCl7XHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gICAgIH1lbHNleyByZXR1cm4gdHJ1ZSB9XHJcbiAgfVxyXG5cclxuICB0aW1lUmFuZ2VWYWxpZGF0b3IoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogVmFsaWRhdGlvbkVycm9ycyB8IG51bGwge1xyXG4gICAgY29uc3Qgb3BlblRpbWUgPSBjb250cm9sLmdldChcIm9wZW5cIik/LnZhbHVlO1xyXG4gICAgY29uc3QgY2xvc2VUaW1lID0gY29udHJvbC5nZXQoXCJjbG9zZVwiKT8udmFsdWU7XHJcbiAgICBpZiAob3BlblRpbWUgJiYgY2xvc2VUaW1lICYmIG9wZW5UaW1lID49IGNsb3NlVGltZSkge1xyXG4gICAgICByZXR1cm4geyBpbnZhbGlkVGltZVJhbmdlOiB0cnVlIH07XHJcbiAgICB9ICAgIFxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBjcmVhdGVTcG9jRGV0YWlsKCk6IEZvcm1Hcm91cCB7XHJcbiAgICByZXR1cm4gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIG5hbWU6IFtcIlwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgZW1haWw6IFtcclxuICAgICAgICBcIlwiLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLmVtYWlsLFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoMTAwKSxcclxuICAgICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKDMpLFxyXG4gICAgICAgIF0sXHJcbiAgICAgIF0sXHJcbiAgICAgIGNvbnRhY3Q6IFtcclxuICAgICAgICBcIlwiLFxyXG4gICAgICAgIFtcclxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLm1heExlbmd0aCgxMyksXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLm1pbkxlbmd0aCgxMCksXHJcbiAgICAgICAgXSxcclxuICAgICAgXSxcclxuICAgICAgZGVzaWduYXRpb246IFtcIlwiXSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBcclxuICBnZXRzcG9jRGV0YWlsc0NvbnRyb2xzKCkge1xyXG4gICAgcmV0dXJuICh0aGlzLnN0b3JlRm9ybS5nZXQoXCJzcG9jRGV0YWlsc1wiKSBhcyBGb3JtQXJyYXkpLmNvbnRyb2xzO1xyXG4gIH1cclxuXHJcbiAgZ2V0c3BvY0RldGFpbHNWYWx1ZXMoaTogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gKHRoaXMuc3RvcmVGb3JtLmdldChcInNwb2NEZXRhaWxzXCIpIGFzIEZvcm1BcnJheSkuYXQoaSkudmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXRTdG9yZVByb2ZpbGUoKTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLnN0b3JlRm9ybS5nZXQoXCJzdG9yZVByb2ZpbGVcIikgYXMgRm9ybUdyb3VwO1xyXG4gIH1cclxuXHJcbiAgZ29Ub1N0b3JlSW5mbygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ID0gXCJzdG9yZV9pbmZvXCI7XHJcbiAgfVxyXG5cclxuICBnb1RvQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ID0gXCJjb25maWdcIjtcclxuICB9XHJcblxyXG4gIGdvVG9Db250YWN0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3QgPSBcImNvbnRhY3RcIjtcclxuICB9XHJcblxyXG4gIGdvVG9SZXZpZXcoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdCA9IFwicmV2aWV3XCI7XHJcbiAgfVxyXG5cclxuICBhZGRTcG9jRGV0YWlsKCkge1xyXG4gICAgKHRoaXMuc3RvcmVGb3JtLmdldChcInNwb2NEZXRhaWxzXCIpIGFzIEZvcm1BcnJheSkucHVzaChcclxuICAgICAgdGhpcy5jcmVhdGVTcG9jRGV0YWlsKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBhZGRBbHRTcG9jKCkge1xyXG4gICAgKHRoaXMuc3RvcmVGb3JtLmdldChcInNwb2NEZXRhaWxzXCIpIGFzIEZvcm1BcnJheSkucHVzaChcclxuICAgICAgdGhpcy5jcmVhdGVTcG9jRGV0YWlsKClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBkZWxBbHRTcG9jKCkge1xyXG4gICAgKHRoaXMuc3RvcmVGb3JtLmdldChcInNwb2NEZXRhaWxzXCIpIGFzIEZvcm1BcnJheSkucmVtb3ZlQXQoMSk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTcG9jRGV0YWlsKGluZGV4OiBudW1iZXIpIHtcclxuICAgICh0aGlzLnN0b3JlRm9ybS5nZXQoXCJzcG9jRGV0YWlsc1wiKSBhcyBGb3JtQXJyYXkpLnJlbW92ZUF0KGluZGV4KTtcclxuICB9XHJcblxyXG4gIG9uU3VibWl0KCkge1xyXG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKFN0b3JlUG9wdXBDb21wb25lbnQseyBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ21kJyB9KTtcclxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnN0b3JlTmFtZSA9IHRoaXMuc3RvcmVGb3JtLnZhbHVlLnN0b3JlTmFtZTtcclxuICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0KSA9PiB7ICAgICAgICAgICAgXHJcbiAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgIGlmIChyZXN1bHQgPT09J3N1Ym1pdCcpIHtcclxuICAgIGNvbnN0IGluVmFsaWRDb250cm9scyA9IHRoaXMubG9nSW52YWxpZENvbnRyb2xzXHJcbiAgICBpZihpblZhbGlkQ29udHJvbHMuaW5jbHVkZXMoJ3N0b3JlTmFtZScpIHx8IGluVmFsaWRDb250cm9scy5pbmNsdWRlcygnYWRkcmVzcycpIHx8IGluVmFsaWRDb250cm9scy5pbmNsdWRlcygnY291bnRyeScpIHx8IGluVmFsaWRDb250cm9scy5pbmNsdWRlcygnc3RhdGUnKSB8fCBpblZhbGlkQ29udHJvbHMuaW5jbHVkZXMoJ2NpdHknKSB8fCBpblZhbGlkQ29udHJvbHMuaW5jbHVkZXMoJ3BpbmNvZGUnKSl7XHJcbiAgICAgIHRoaXMuc2VsZWN0ID0gJ3N0b3JlX2luZm8nXHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZihpblZhbGlkQ29udHJvbHMuaW5jbHVkZXMoJ3RpbWVab25lJykgfHwgaW5WYWxpZENvbnRyb2xzLmluY2x1ZGVzKCdvcGVuJykgfHwgaW5WYWxpZENvbnRyb2xzLmluY2x1ZGVzKCdjbG9zZScpIHx8IHRoaXMuc3RvcmVGb3JtLmhhc0Vycm9yKCdpbnZhbGlkVGltZVJhbmdlJykpe1xyXG4gICAgICB0aGlzLnNlbGVjdCA9ICdjb25maWcnXHJcbiAgICB9XHJcblxyXG4gICAgZWxzZSBpZihpblZhbGlkQ29udHJvbHMuaW5jbHVkZXMoJ3Nwb2NEZXRhaWxzJykpe1xyXG4gICAgICB0aGlzLnNlbGVjdCA9ICdjb250YWN0J1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3VibWl0dGVkID0gdHJ1ZVxyXG4gICAgXHJcbiAgICBpZiAodGhpcy5zdG9yZUZvcm0udmFsaWQpIHtcclxuICAgICAgbGV0IHN0b3JlOiBTdG9yZVJlc3BvbnNlID0ge1xyXG4gICAgICAgIHN0b3JlTmFtZTogdGhpcy5zdG9yZUZvcm0udmFsdWUuc3RvcmVOYW1lLFxyXG4gICAgICAgIGNsaWVudElkOiB0aGlzLnN0b3JlRm9ybS52YWx1ZS5jbGllbnRJZCxcclxuICAgICAgICBidXNpbmVzc1R5cGU6IHRoaXMuc3RvcmVGb3JtLnZhbHVlLmJ1c2luZXNzVHlwZSxcclxuICAgICAgICBzdG9yZVR5cGU6IHtcclxuICAgICAgICAgIHR5cGU6IHRoaXMuc3RvcmVGb3JtLnZhbHVlLnN0b3JlVHlwZV90eXBlLFxyXG4gICAgICAgICAgbmFtZTogdGhpcy5zdG9yZUZvcm0udmFsdWU/LnN0b3JlVHlwZV9uYW1lLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgc3RvcmVQcm9maWxlOiB7XHJcbiAgICAgICAgICBzdG9yZUNvZGU6IHRoaXMuc3RvcmVGb3JtLnZhbHVlPy5zdG9yZUNvZGUsXHJcbiAgICAgICAgICBhZGRyZXNzOiB0aGlzLnN0b3JlRm9ybS52YWx1ZT8uYWRkcmVzcyxcclxuICAgICAgICAgIGNvdW50cnk6IHRoaXMuc3RvcmVGb3JtLnZhbHVlPy5jb3VudHJ5LFxyXG4gICAgICAgICAgc3RhdGU6IHRoaXMuc3RvcmVGb3JtLnZhbHVlPy5zdGF0ZSxcclxuICAgICAgICAgIGNpdHk6IHRoaXMuc3RvcmVGb3JtLnZhbHVlPy5jaXR5LFxyXG4gICAgICAgICAgcGluY29kZTogdGhpcy5zdG9yZUZvcm0udmFsdWU/LnBpbmNvZGUsXHJcbiAgICAgICAgICB0aW1lWm9uZTogdGhpcy5zdG9yZUZvcm0udmFsdWU/LnRpbWVab25lLFxyXG4gICAgICAgICAgb3BlbjogdGhpcy5kYXlqcyhgMTk5MS0wMS0wMSAke3RoaXMuc3RvcmVGb3JtLnZhbHVlPy5vcGVufWAsJ1lZWVktTU0tREQgSEg6bW0nKS5mb3JtYXQoXCJISDptbTpzc1wiKSxcclxuICAgICAgICAgIGNsb3NlOiB0aGlzLmRheWpzKGAxOTkxLTAxLTAxICR7dGhpcy5zdG9yZUZvcm0udmFsdWU/LmNsb3NlfWAsJ1lZWVktTU0tREQgSEg6bW0nKS5mb3JtYXQoXCJISDptbTpzc1wiKSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVkZ2U6IHtcclxuICAgICAgICAvLyAgIGNhbURldGFpbHM6IHtcclxuICAgICAgICAvLyAgICAgY2FtZXJhczogdGhpcy5zdG9yZUZvcm0udmFsdWU/LmNhbWVyYXMsXHJcbiAgICAgICAgLy8gICB9LFxyXG4gICAgICAgIC8vIH0sXHJcbiAgICAgICAgc3BvY0RldGFpbHM6IFtcclxuICAgICAgICAgIHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5zdG9yZUZvcm0udmFsdWU/LnNwb2NEZXRhaWxzWzBdLm5hbWUsXHJcbiAgICAgICAgICAgIGVtYWlsOiB0aGlzLnN0b3JlRm9ybS52YWx1ZT8uc3BvY0RldGFpbHNbMF0uZW1haWwsXHJcbiAgICAgICAgICAgIGNvbnRhY3Q6IHRoaXMuc3RvcmVGb3JtLnZhbHVlPy5zcG9jRGV0YWlsc1swXS5jb250YWN0LFxyXG4gICAgICAgICAgICBkZXNpZ25hdGlvbjogdGhpcy5zdG9yZUZvcm0udmFsdWU/LnNwb2NEZXRhaWxzWzBdLmRlc2lnbmF0aW9uLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIHN0b3JlQ29ubmVjdGlvbklkOiB0aGlzLnN0b3JlRm9ybS52YWx1ZT8uc3RvcmVDb25uZWN0aW9uSWQsXHJcbiAgICAgIH07XHJcbiAgICAgIGlmICh0aGlzLnN0b3JlRm9ybS52YWx1ZS5zcG9jRGV0YWlscy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgZm9yKGxldCBpPTE7aTx0aGlzLnN0b3JlRm9ybS52YWx1ZS5zcG9jRGV0YWlscy5sZW5ndGg7aSsrKSB7XHJcbiAgICAgICAgICBzdG9yZS5zcG9jRGV0YWlscy5wdXNoKHtcclxuICAgICAgICAgICAgbmFtZTogdGhpcy5zdG9yZUZvcm0udmFsdWU/LnNwb2NEZXRhaWxzW2ldLm5hbWUsXHJcbiAgICAgICAgICAgIGVtYWlsOiB0aGlzLnN0b3JlRm9ybS52YWx1ZT8uc3BvY0RldGFpbHNbaV0uZW1haWwsXHJcbiAgICAgICAgICAgIGNvbnRhY3Q6IHRoaXMuc3RvcmVGb3JtLnZhbHVlPy5zcG9jRGV0YWlsc1tpXS5jb250YWN0LFxyXG4gICAgICAgICAgICBkZXNpZ25hdGlvbjogdGhpcy5zdG9yZUZvcm0udmFsdWU/LnNwb2NEZXRhaWxzW2ldLmRlc2lnbmF0aW9uLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnN0b3Jlc1NlcnZpY2UuY3JlYXRlU3RvcmUoc3RvcmUpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09PSAyMDAgJiYgcmVzLnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcclxuICAgICAgICAgICAgdGhpcy50cy5nZXRTdWNjZXNzVG9hc3QoXCJTdG9yZSBDcmVhdGVkIFN1Y2Nlc3NmdWxseSFcIik7XHJcbiAgICAgICAgICAgIGlmIChyZXMuZGF0YS5zdG9yZSAmJiByZXMuZGF0YS5zdG9yZS5zdG9yZUlkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zdG9yZXNTZXJ2aWNlXHJcbiAgICAgICAgICAgICAgICAuY3JlYXRlSW5mcmFUaWNrZXQoe1xyXG4gICAgICAgICAgICAgICAgICBzdG9yZUlkOiByZXMuZGF0YS5zdG9yZS5zdG9yZUlkLFxyXG4gICAgICAgICAgICAgICAgICBEYXRlOiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLFxyXG4gICAgICAgICAgICAgICAgICBpc3N1ZVR5cGU6IFwiaW5zdGFsbGF0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge30sXHJcbiAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7fSxcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcIi9tYW5hZ2Uvc3RvcmVzXCJdKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMudHMuZ2V0RXJyb3JUb2FzdChcIlVuYWJsZSB0byBjcmVhdGUgc3RvcmUhXCIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIH0sXHJcbiAgICAgICBlcnJvcjogKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnRzLmdldEVycm9yVG9hc3QoZXJyb3I/LmVycm9yPy5lcnJvcj8uZXJyb3IgPyBlcnJvcj8uZXJyb3I/LmVycm9yPy5lcnJvcjogXCJVbmFibGUgdG8gY3JlYXRlIFN0b3JlIVwiKTtcclxuICAgICAgICBpZihlcnJvcj8uZXJyb3I/LmVycm9yPy5lcnJvciA9PT0gJ1N0b3JlTmFtZSBhbHJlYWR5IGV4aXN0cycpe1xyXG4gICAgICAgICAgdGhpcy5pc1N0b3JlTmFtZUV4aXN0ID0gdHJ1ZVxyXG4gICAgICAgICAgdGhpcy5zZWxlY3QgPSAnc3RvcmVfaW5mbydcclxuICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4gIH0pXHJcbiAgfVxyXG5cclxuICBuYXZpZ2F0ZVRvQWRkU3RvcmUoKSB7XHJcbiAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvbWFuYWdlL3N0b3Jlcy9hZGRpdGlvbi1tZXRob2RcIl0pO1xyXG4gIH1cclxuXHJcbiAgb21pdF9zcGVjaWFsX2NoYXIoZXZlbnQ6IGFueSkge1xyXG4gICAgdmFyIGs7XHJcbiAgICBrID0gZXZlbnQuY2hhckNvZGU7IC8vICAgICAgICAgayA9IGV2ZW50LmtleUNvZGU7ICAoQm90aCBjYW4gYmUgdXNlZClcclxuICAgIHJldHVybiBrID09IDggfHwgayA9PSAzMiB8fCAoayA+PSA0OCAmJiBrIDw9IDU3KTtcclxuICB9XHJcblxyXG4gIGdldEFsbFRpbWV6b25lcygpIHtcclxuICAgIHRoaXMudGltZXpvbmVzPW1vbWVudC50ei5uYW1lcygpO1xyXG4gIH1cclxuXHJcbiBnZXQgbG9nSW52YWxpZENvbnRyb2xzKCkge1xyXG4gICAgY29uc3QgaW52YWxpZENvbnRyb2xzID0gW107XHJcbiAgICBjb25zdCBjb250cm9scyA9IHRoaXMuc3RvcmVGb3JtLmNvbnRyb2xzO1xyXG4gICAgZm9yIChjb25zdCBuYW1lIGluIGNvbnRyb2xzKSB7XHJcbiAgICAgIGlmIChjb250cm9sc1tuYW1lXS5pbnZhbGlkKSB7XHJcbiAgICAgICAgaW52YWxpZENvbnRyb2xzLnB1c2gobmFtZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBpbnZhbGlkQ29udHJvbHNcclxuICB9XHJcblxyXG4gIG5hdmlnYXRlVG9CYWNrKGxhYmVsOmFueSl7XHJcbiAgICBpZiAobGFiZWwgPT0gXCJjb25maWdcIikge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ID0gXCJzdG9yZV9pbmZvXCI7XHJcbiAgICAgIH0gZWxzZSBpZihsYWJlbCA9PSBcImNvbnRhY3RcIikge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ID0gXCJjb25maWdcIjtcclxuICAgICAgfWVsc2UgaWYobGFiZWwgPT0gXCJyZXZpZXdcIikge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ID0gXCJjb250YWN0XCI7XHJcbiAgICAgIH1cclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJvdyBtdC0zIG1iLTZcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMyBjb2wtbGctMyBjb2wteGwtMyBjb2wteHhsLTNcIiBpZD1cImxlZnQtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQgY2FyZC1mbHVzaCBoLTEwMCBtYi0wXCI+XHJcbiAgICAgICAgICAgIDwhLS1iZWdpbjo6QXNpZGUgY29udGVudC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB4LTVcIj5cclxuICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lbnUgbWVudS1jb2x1bW4gbWVudS1yb3VuZGVkIG1lbnUtc3RhdGUtYmcgbWVudS1zdGF0ZS10aXRsZS1wcmltYXJ5IG1lbnUtc3RhdGUtaWNvbi1wcmltYXJ5IG1lbnUtc3RhdGUtYnVsbGV0LXByaW1hcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tYmVnaW46Ok1lbnUgaXRlbS0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZW51LWl0ZW0gbXktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tYmVnaW46OkluYm94LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1saW5rIHBlLW5vbmVcIiBbbmdDbGFzc109XCJ7ICdhY3RpdmUnOiBzZWxlY3QgPT09ICdzdG9yZV9pbmZvJyB9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtaWNvblwiPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9XCJjdXJyZW50Q29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0zLjA4OTk1IDYuODgzNjlMMy4wMjQwMSA2Ljk4NjY5QzIuMzAzNTggOC4yNTU1NyAzLjA2MTAxIDkuODc5NDUgNC40NjQ2NCAxMC4wNjYyQzQuNTg2MjcgMTAuMDgxMSA0LjcwMTEyIDEwLjA4OTIgNC44MTQ1IDEwLjA4OTJDNS41NTI1NSAxMC4wODkyIDYuMjA1MjMgOS43NzIyOSA2LjY1OTUzIDkuMjc5MTdMNy4yMTI4NiA4LjY3ODU0TDcuNzY0MzIgOS4yODA4OUM4LjIxMzY3IDkuNzcxNzEgOC44NjUyIDEwLjA4OTIgOS42MDc3NiAxMC4wODkyQzEwLjM0NzEgMTAuMDg5MiAxMS4wMDIyIDkuNzcxMzcgMTEuNDUxMiA5LjI4MDg5TDEyLjAwNDQgOC42NzY2NUwxMi41NTc2IDkuMjgwODlDMTMuMDA2NiA5Ljc3MTM3IDEzLjY2MTcgMTAuMDg5MiAxNC40MDEgMTAuMDg5MkMxNS4xNDA0IDEwLjA4OTIgMTUuNzk1NCA5Ljc3MTM3IDE2LjI0NDUgOS4yODA4OUwxNi43OTc3IDguNjc2NjVMMTcuMzUwOCA5LjI4MDg5QzE3Ljc5OTkgOS43NzEzNyAxOC40NTQ5IDEwLjA4OTIgMTkuMTk0MyAxMC4wODkyQzE5LjMwNDEgMTAuMDg5MiAxOS40MjIzIDEwLjA4MTEgMTkuNTQzMyAxMC4wNjYzQzIwLjk3NzIgOS44NzE2OCAyMS43MzU1IDguMTYzODcgMjAuOTE1NSA2Ljg4NDE5QzIwLjkxNTQgNi44ODQxMyAyMC45MTU0IDYuODg0MDcgMjAuOTE1NCA2Ljg4NDAyTDE4LjgwNTYgMy41OTQyOUwxOC44MDU2IDMuNTk0MjlMMTguODA0NiAzLjU5MjgyQzE4Ljc1ODIgMy41MjAwMiAxOC42NjQ5IDMuNDY0MjMgMTguNTU4NCAzLjQ2NDIzSDUuNDQzMDdDNS4zMzY1IDMuNDY0MjMgNS4yNDMyNiAzLjUyMDAyIDUuMTk2ODEgMy41OTI4Mkw1LjE5NjE5IDMuNTkzNzlMMy4wODk5NSA2Ljg4MzY5Wk00LjgxODE4IDEyLjc0OTlDNC43MTY0NCAxMi43NDk5IDQuNjE2IDEyLjc0NjggNC41MTY5IDEyLjc0MVYxNi42NDI4VjE4Ljk2NDJDNC41MTY5IDE5LjgyMTEgNS4yMjY2MyAyMC41MzU3IDYuMTE5NDIgMjAuNTM1N0gxNy44ODJDMTguNzc0OCAyMC41MzU3IDE5LjQ4NDUgMTkuODIxMSAxOS40ODQ1IDE4Ljk2NDJWMTYuNjQyOFYxMi43NDE1QzE5LjM4NzQgMTIuNzQ3IDE5LjI4OTMgMTIuNzQ5OSAxOS4xOTA2IDEyLjc0OTlDMTkuMDAyMiAxMi43NDk5IDE4LjgxNTcgMTIuNzM5OCAxOC42MzIgMTIuNzIwMlYxNi42NDI4VjE3LjM5MjhIMTcuODgySDYuMTE5NDJINS4zNjk0MlYxNi42NDI4VjEyLjcyMUM1LjE4ODY2IDEyLjc0IDUuMDA0NzIgMTIuNzQ5OSA0LjgxODE4IDEyLjc0OTlaXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtdGl0bGUgZnctYm9sZCBcIj5TdG9yZSBJbmZvPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1lbmQ6OkluYm94LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lbnUtaXRlbSBteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1iZWdpbjo6SW5ib3gtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWxpbmsgcGUtbm9uZVwiIFtuZ0NsYXNzXT1cInsgJ2FjdGl2ZSc6IHNlbGVjdCA9PT0gJ2NvbmZpZycgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWljb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xMDE3XzIyMjcwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyIDE1QzEzLjY1NjkgMTUgMTUgMTMuNjU2OSAxNSAxMkMxNSAxMC4zNDMxIDEzLjY1NjkgOSAxMiA5QzEwLjM0MzEgOSA5IDEwLjM0MzEgOSAxMkM5IDEzLjY1NjkgMTAuMzQzMSAxNSAxMiAxNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cImN1cnJlbnRDb2xvclwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTkuNCAxNUMxOS4yNjY5IDE1LjMwMTYgMTkuMjI3MiAxNS42MzYyIDE5LjI4NiAxNS45NjA2QzE5LjM0NDggMTYuMjg1IDE5LjQ5OTUgMTYuNTg0MyAxOS43MyAxNi44MkwxOS43OSAxNi44OEMxOS45NzYgMTcuMDY1NyAyMC4xMjM1IDE3LjI4NjMgMjAuMjI0MSAxNy41MjkxQzIwLjMyNDggMTcuNzcxOSAyMC4zNzY2IDE4LjAzMjIgMjAuMzc2NiAxOC4yOTVDMjAuMzc2NiAxOC41NTc4IDIwLjMyNDggMTguODE4MSAyMC4yMjQxIDE5LjA2MDlDMjAuMTIzNSAxOS4zMDM3IDE5Ljk3NiAxOS41MjQzIDE5Ljc5IDE5LjcxQzE5LjYwNDMgMTkuODk2IDE5LjM4MzcgMjAuMDQzNSAxOS4xNDA5IDIwLjE0NDFDMTguODk4MSAyMC4yNDQ4IDE4LjYzNzggMjAuMjk2NiAxOC4zNzUgMjAuMjk2NkMxOC4xMTIyIDIwLjI5NjYgMTcuODUxOSAyMC4yNDQ4IDE3LjYwOTEgMjAuMTQ0MUMxNy4zNjYzIDIwLjA0MzUgMTcuMTQ1NyAxOS44OTYgMTYuOTYgMTkuNzFMMTYuOSAxOS42NUMxNi42NjQzIDE5LjQxOTUgMTYuMzY1IDE5LjI2NDggMTYuMDQwNiAxOS4yMDZDMTUuNzE2MiAxOS4xNDcyIDE1LjM4MTYgMTkuMTg2OSAxNS4wOCAxOS4zMkMxNC43ODQyIDE5LjQ0NjggMTQuNTMyIDE5LjY1NzIgMTQuMzU0MyAxOS45MjU1QzE0LjE3NjYgMjAuMTkzOCAxNC4wODEzIDIwLjUwODIgMTQuMDggMjAuODNWMjFDMTQuMDggMjEuNTMwNCAxMy44NjkzIDIyLjAzOTEgMTMuNDk0MiAyMi40MTQyQzEzLjExOTEgMjIuNzg5MyAxMi42MTA0IDIzIDEyLjA4IDIzQzExLjU0OTYgMjMgMTEuMDQwOSAyMi43ODkzIDEwLjY2NTggMjIuNDE0MkMxMC4yOTA3IDIyLjAzOTEgMTAuMDggMjEuNTMwNCAxMC4wOCAyMVYyMC45MUMxMC4wNzIzIDIwLjU3OSA5Ljk2NTEyIDIwLjI1OCA5Ljc3MjUxIDE5Ljk4ODdDOS41Nzk5IDE5LjcxOTQgOS4zMTA3NCAxOS41MTQzIDkgMTkuNEM4LjY5ODM4IDE5LjI2NjkgOC4zNjM4MSAxOS4yMjcyIDguMDM5NDEgMTkuMjg2QzcuNzE1MDIgMTkuMzQ0OCA3LjQxNTY4IDE5LjQ5OTUgNy4xOCAxOS43M0w3LjEyIDE5Ljc5QzYuOTM0MjUgMTkuOTc2IDYuNzEzNjggMjAuMTIzNSA2LjQ3MDg4IDIwLjIyNDFDNi4yMjgwOCAyMC4zMjQ4IDUuOTY3ODMgMjAuMzc2NiA1LjcwNSAyMC4zNzY2QzUuNDQyMTcgMjAuMzc2NiA1LjE4MTkyIDIwLjMyNDggNC45MzkxMiAyMC4yMjQxQzQuNjk2MzIgMjAuMTIzNSA0LjQ3NTc1IDE5Ljk3NiA0LjI5IDE5Ljc5QzQuMTA0MDUgMTkuNjA0MyAzLjk1NjUzIDE5LjM4MzcgMy44NTU4OCAxOS4xNDA5QzMuNzU1MjMgMTguODk4MSAzLjcwMzQzIDE4LjYzNzggMy43MDM0MyAxOC4zNzVDMy43MDM0MyAxOC4xMTIyIDMuNzU1MjMgMTcuODUxOSAzLjg1NTg4IDE3LjYwOTFDMy45NTY1MyAxNy4zNjYzIDQuMTA0MDUgMTcuMTQ1NyA0LjI5IDE2Ljk2TDQuMzUgMTYuOUM0LjU4MDU0IDE2LjY2NDMgNC43MzUxOSAxNi4zNjUgNC43OTQgMTYuMDQwNkM0Ljg1MjgyIDE1LjcxNjIgNC44MTMxMiAxNS4zODE2IDQuNjggMTUuMDhDNC41NTMyNCAxNC43ODQyIDQuMzQyNzYgMTQuNTMyIDQuMDc0NDcgMTQuMzU0M0MzLjgwNjE4IDE0LjE3NjYgMy40OTE3OSAxNC4wODEzIDMuMTcgMTQuMDhIM0MyLjQ2OTU3IDE0LjA4IDEuOTYwODYgMTMuODY5MyAxLjU4NTc5IDEzLjQ5NDJDMS4yMTA3MSAxMy4xMTkxIDEgMTIuNjEwNCAxIDEyLjA4QzEgMTEuNTQ5NiAxLjIxMDcxIDExLjA0MDkgMS41ODU3OSAxMC42NjU4QzEuOTYwODYgMTAuMjkwNyAyLjQ2OTU3IDEwLjA4IDMgMTAuMDhIMy4wOUMzLjQyMDk5IDEwLjA3MjMgMy43NDIgOS45NjUxMiA0LjAxMTMgOS43NzI1MUM0LjI4MDU5IDkuNTc5OSA0LjQ4NTcyIDkuMzEwNzQgNC42IDlDNC43MzMxMiA4LjY5ODM4IDQuNzcyODIgOC4zNjM4MSA0LjcxNCA4LjAzOTQxQzQuNjU1MTkgNy43MTUwMiA0LjUwMDU0IDcuNDE1NjggNC4yNyA3LjE4TDQuMjEgNy4xMkM0LjAyNDA1IDYuOTM0MjUgMy44NzY1MyA2LjcxMzY4IDMuNzc1ODggNi40NzA4OEMzLjY3NTIzIDYuMjI4MDggMy42MjM0MyA1Ljk2NzgzIDMuNjIzNDMgNS43MDVDMy42MjM0MyA1LjQ0MjE3IDMuNjc1MjMgNS4xODE5MiAzLjc3NTg4IDQuOTM5MTJDMy44NzY1MyA0LjY5NjMyIDQuMDI0MDUgNC40NzU3NSA0LjIxIDQuMjlDNC4zOTU3NSA0LjEwNDA1IDQuNjE2MzIgMy45NTY1MyA0Ljg1OTEyIDMuODU1ODhDNS4xMDE5MiAzLjc1NTIzIDUuMzYyMTcgMy43MDM0MyA1LjYyNSAzLjcwMzQzQzUuODg3ODMgMy43MDM0MyA2LjE0ODA4IDMuNzU1MjMgNi4zOTA4OCAzLjg1NTg4QzYuNjMzNjggMy45NTY1MyA2Ljg1NDI1IDQuMTA0MDUgNy4wNCA0LjI5TDcuMSA0LjM1QzcuMzM1NjggNC41ODA1NCA3LjYzNTAyIDQuNzM1MTkgNy45NTk0MSA0Ljc5NEM4LjI4MzgxIDQuODUyODIgOC42MTgzOCA0LjgxMzEyIDguOTIgNC42OEg5QzkuMjk1NzcgNC41NTMyNCA5LjU0ODAyIDQuMzQyNzYgOS43MjU2OSA0LjA3NDQ3QzkuOTAzMzcgMy44MDYxOCA5Ljk5ODcyIDMuNDkxNzkgMTAgMy4xN1YzQzEwIDIuNDY5NTcgMTAuMjEwNyAxLjk2MDg2IDEwLjU4NTggMS41ODU3OUMxMC45NjA5IDEuMjEwNzEgMTEuNDY5NiAxIDEyIDFDMTIuNTMwNCAxIDEzLjAzOTEgMS4yMTA3MSAxMy40MTQyIDEuNTg1NzlDMTMuNzg5MyAxLjk2MDg2IDE0IDIuNDY5NTcgMTQgM1YzLjA5QzE0LjAwMTMgMy40MTE3OSAxNC4wOTY2IDMuNzI2MTggMTQuMjc0MyAzLjk5NDQ3QzE0LjQ1MiA0LjI2Mjc2IDE0LjcwNDIgNC40NzMyNCAxNSA0LjZDMTUuMzAxNiA0LjczMzEyIDE1LjYzNjIgNC43NzI4MiAxNS45NjA2IDQuNzE0QzE2LjI4NSA0LjY1NTE5IDE2LjU4NDMgNC41MDA1NCAxNi44MiA0LjI3TDE2Ljg4IDQuMjFDMTcuMDY1NyA0LjAyNDA1IDE3LjI4NjMgMy44NzY1MyAxNy41MjkxIDMuNzc1ODhDMTcuNzcxOSAzLjY3NTIzIDE4LjAzMjIgMy42MjM0MyAxOC4yOTUgMy42MjM0M0MxOC41NTc4IDMuNjIzNDMgMTguODE4MSAzLjY3NTIzIDE5LjA2MDkgMy43NzU4OEMxOS4zMDM3IDMuODc2NTMgMTkuNTI0MyA0LjAyNDA1IDE5LjcxIDQuMjFDMTkuODk2IDQuMzk1NzUgMjAuMDQzNSA0LjYxNjMyIDIwLjE0NDEgNC44NTkxMkMyMC4yNDQ4IDUuMTAxOTIgMjAuMjk2NiA1LjM2MjE3IDIwLjI5NjYgNS42MjVDMjAuMjk2NiA1Ljg4NzgzIDIwLjI0NDggNi4xNDgwOCAyMC4xNDQxIDYuMzkwODhDMjAuMDQzNSA2LjYzMzY4IDE5Ljg5NiA2Ljg1NDI1IDE5LjcxIDcuMDRMMTkuNjUgNy4xQzE5LjQxOTUgNy4zMzU2OCAxOS4yNjQ4IDcuNjM1MDIgMTkuMjA2IDcuOTU5NDFDMTkuMTQ3MiA4LjI4MzgxIDE5LjE4NjkgOC42MTgzOCAxOS4zMiA4LjkyVjlDMTkuNDQ2OCA5LjI5NTc3IDE5LjY1NzIgOS41NDgwMiAxOS45MjU1IDkuNzI1NjlDMjAuMTkzOCA5LjkwMzM3IDIwLjUwODIgOS45OTg3MiAyMC44MyAxMEgyMUMyMS41MzA0IDEwIDIyLjAzOTEgMTAuMjEwNyAyMi40MTQyIDEwLjU4NThDMjIuNzg5MyAxMC45NjA5IDIzIDExLjQ2OTYgMjMgMTJDMjMgMTIuNTMwNCAyMi43ODkzIDEzLjAzOTEgMjIuNDE0MiAxMy40MTQyQzIyLjAzOTEgMTMuNzg5MyAyMS41MzA0IDE0IDIxIDE0SDIwLjkxQzIwLjU4ODIgMTQuMDAxMyAyMC4yNzM4IDE0LjA5NjYgMjAuMDA1NSAxNC4yNzQzQzE5LjczNzIgMTQuNDUyIDE5LjUyNjggMTQuNzA0MiAxOS40IDE1WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzEwMTdfMjIyNzBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtdGl0bGUgZnctYm9sZCBcIj5TdG9yZSBDb25maWd1cmF0aW9uPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1lbmQ6OkluYm94LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS1lbmQ6Ok1lbnUgaXRlbS0tPlxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpNZW51IGl0ZW0tLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1pdGVtIG15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpEcmFmdC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtbGluayBwZS1ub25lXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogc2VsZWN0ID09PSAnY29udGFjdCcgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LWljb25cIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTcgMjFWMTlDMTcgMTcuOTM5MSAxNi41Nzg2IDE2LjkyMTcgMTUuODI4NCAxNi4xNzE2QzE1LjA3ODMgMTUuNDIxNCAxNC4wNjA5IDE1IDEzIDE1SDVDMy45MzkxMyAxNSAyLjkyMTcyIDE1LjQyMTQgMi4xNzE1NyAxNi4xNzE2QzEuNDIxNDMgMTYuOTIxNyAxIDE3LjkzOTEgMSAxOVYyMU0yMyAyMVYxOUMyMi45OTkzIDE4LjExMzcgMjIuNzA0NCAxNy4yNTI4IDIyLjE2MTQgMTYuNTUyM0MyMS42MTg0IDE1Ljg1MTkgMjAuODU4MSAxNS4zNTE2IDIwIDE1LjEzTTE2IDMuMTNDMTYuODYwNCAzLjM1MDMgMTcuNjIzIDMuODUwNyAxOC4xNjc2IDQuNTUyMzFDMTguNzEyMiA1LjI1MzkyIDE5LjAwNzggNi4xMTY4MyAxOS4wMDc4IDcuMDA1QzE5LjAwNzggNy44OTMxNyAxOC43MTIyIDguNzU2MDggMTguMTY3NiA5LjQ1NzY5QzE3LjYyMyAxMC4xNTkzIDE2Ljg2MDQgMTAuNjU5NyAxNiAxMC44OE0xMyA3QzEzIDkuMjA5MTQgMTEuMjA5MSAxMSA5IDExQzYuNzkwODYgMTEgNSA5LjIwOTE0IDUgN0M1IDQuNzkwODYgNi43OTA4NiAzIDkgM0MxMS4yMDkxIDMgMTMgNC43OTA4NiAxMyA3WlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCJjdXJyZW50Q29sb3JcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LXRpdGxlIGZ3LWJvbGQgXCI+Q29udGFjdCBEZXRhaWxzPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1lbmQ6OkRyYWZ0LS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLWVuZDo6TWVudSBpdGVtLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpNZW51IGl0ZW0tLT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVudS1pdGVtIG15LTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLWJlZ2luOjpUcmFzaC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lbnUtbGluayBwZS1ub25lXCIgW25nQ2xhc3NdPVwieyAnYWN0aXZlJzogc2VsZWN0ID09PSAncmV2aWV3J31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVudS1pY29uXCI+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNNiAxQzUuMjA0MzUgMSA0LjQ0MTI5IDEuMzE2MDcgMy44Nzg2OCAxLjg3ODY4QzMuMzE2MDcgMi40NDEyOSAzIDMuMjA0MzUgMyA0VjIwQzMgMjAuNzk1NyAzLjMxNjA3IDIxLjU1ODcgMy44Nzg2OCAyMi4xMjEzQzQuNDQxMjkgMjIuNjgzOSA1LjIwNDM1IDIzIDYgMjNIMTJIMThDMTguNzk1NyAyMyAxOS41NTg3IDIyLjY4MzkgMjAuMTIxMyAyMi4xMjEzQzIwLjY4MzkgMjEuNTU4NyAyMSAyMC43OTU3IDIxIDIwVjE2LjQyMDhMMTkgMTguNDIwOFYyMEMxOSAyMC4yNjUyIDE4Ljg5NDYgMjAuNTE5NiAxOC43MDcxIDIwLjcwNzFDMTguNTE5NiAyMC44OTQ2IDE4LjI2NTIgMjEgMTggMjFIMTYuNDIwOEwxNS4zMjg2IDIyLjA5MjJMMTIgMjNMMTIuNTQ1NSAyMUg2QzUuNzM0NzggMjEgNS40ODA0MyAyMC44OTQ2IDUuMjkyODkgMjAuNzA3MUM1LjEwNTM2IDIwLjUxOTYgNSAyMC4yNjUyIDUgMjBWNEM1IDMuNzM0NzggNS4xMDUzNiAzLjQ4MDQzIDUuMjkyODkgMy4yOTI4OUM1LjQ4MDQzIDMuMTA1MzYgNS43MzQ3OCAzIDYgM0gxMlY5QzEyIDkuNTUyMjggMTIuNDQ3NyAxMCAxMyAxMEgxOVYxMy41NzkyTDIxIDExLjU3OTJWOUMyMSA4LjczNDc4IDIwLjg5NDYgOC40ODA0MyAyMC43MDcxIDguMjkyODlMMTMuNzA3MSAxLjI5Mjg5QzEzLjUxOTYgMS4xMDUzNiAxMy4yNjUyIDEgMTMgMUg2Wk0xNy41ODU4IDhMMTQgNC40MTQyMVY4SDE3LjU4NThaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yMC4wNzc5IDExLjUwMTRDMjAuMjM2OSAxMS4zNDI0IDIwLjQyNTYgMTEuMjE2MyAyMC42MzMzIDExLjEzMDNDMjAuODQwOSAxMS4wNDQzIDIxLjA2MzUgMTEgMjEuMjg4MyAxMUMyMS41MTMxIDExIDIxLjczNTcgMTEuMDQ0MyAyMS45NDM0IDExLjEzMDNDMjIuMTUxIDExLjIxNjMgMjIuMzM5NyAxMS4zNDI0IDIyLjQ5ODcgMTEuNTAxNEMyMi42NTc2IDExLjY2MDMgMjIuNzgzNyAxMS44NDkgMjIuODY5OCAxMi4wNTY3QzIyLjk1NTggMTIuMjY0NCAyMy4wMDAxIDEyLjQ4NyAyMy4wMDAxIDEyLjcxMTdDMjMuMDAwMSAxMi45MzY1IDIyLjk1NTggMTMuMTU5MSAyMi44Njk4IDEzLjM2NjhDMjIuNzgzNyAxMy41NzQ1IDIyLjY1NzYgMTMuNzYzMiAyMi40OTg3IDEzLjkyMjFMMTUuMzI4NiAyMi4wOTIzTDEyIDIzLjAwMDFMMTIuOTA3OCAxOS42NzE1TDIwLjA3NzkgMTEuNTAxNFpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMS42XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZW51LXRpdGxlIGZ3LWJvbGQgXCI+UmV2aWV3ICYgU3VibWl0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS1lbmQ6OlRyYXNoLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLWVuZDo6TWVudSBpdGVtLS0+XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPCEtLWVuZDo6TWVudS0tPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTkgY29sLWxnLTkgY29sLXhsLTkgY29sLXh4bC05XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImNhcmRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGJvcmRlci1ib3R0b20tMFwiPlxyXG4gICAgICAgICAgICAgICAgPGgxXHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwYWdlLWhlYWRpbmcgZC1mbGV4IHRleHQtZGFyayBmdy1ib2xkIGZzLTIgZmxleC1jb2x1bW4gIGp1c3RpZnktY29udGVudC1jZW50ZXIgbXktMCBzdWItaGVhZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICAqbmdJZj1cInNlbGVjdCA9PT0gJ3N0b3JlX2luZm8nXCI+RW50ZXIgWW91ciBTdG9yZSBEZXRhaWxzPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwic2VsZWN0ID09PSAnY29uZmlnJ1wiPkVudGVyIFlvdXIgU3RvcmUgQ29uZmlndXJhdGlvbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInNlbGVjdCA9PT0gJ2NvbnRhY3QnXCI+RW50ZXIgUHJpbWFyeSBTUE9DIGRldGFpbHM8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJzZWxlY3QgPT09ICdyZXZpZXcnXCI+UmV2aWV3ICYgc3VibWl0PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9oMT5cclxuICAgICAgICAgICAgICAgIDxkaXYgW2hpZGRlbl09XCJzZWxlY3QgIT09ICdjb250YWN0J1wiIGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwiYWRkQWx0U3BvYygpXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0LXByaW1hcnkxIGJ0bi1zbVwiPjxzdmcgY2xhc3M9XCJtZS0yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE4IDE0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0yLjcgMy41QzIuNyAyLjU3MTc0IDMuMDc5MjggMS42ODE1IDMuNzU0NDIgMS4wMjUxM0M0LjQyOTU1IDAuMzY4NzQ5IDUuMzQ1MjIgMCA2LjMgMEM3LjI1NDc4IDAgOC4xNzA0NSAwLjM2ODc0OSA4Ljg0NTU4IDEuMDI1MTNDOS41MjA3MiAxLjY4MTUgOS45IDIuNTcxNzQgOS45IDMuNUM5LjkgNC40MjgyNiA5LjUyMDcyIDUuMzE4NSA4Ljg0NTU4IDUuOTc0ODdDOC4xNzA0NSA2LjYzMTI1IDcuMjU0NzggNyA2LjMgN0M1LjM0NTIyIDcgNC40Mjk1NSA2LjYzMTI1IDMuNzU0NDIgNS45NzQ4N0MzLjA3OTI4IDUuMzE4NSAyLjcgNC40MjgyNiAyLjcgMy41Wk0wIDEzLjE4NzlDMCAxMC40OTQ1IDIuMjQ0MzcgOC4zMTI1IDUuMDE0NjkgOC4zMTI1SDcuNTg1MzFDMTAuMzU1NiA4LjMxMjUgMTIuNiAxMC40OTQ1IDEyLjYgMTMuMTg3OUMxMi42IDEzLjYzNjMgMTIuMjI1OSAxNCAxMS43NjQ3IDE0SDAuODM1MzEyQzAuMzc0MDYzIDE0IDAgMTMuNjM2MyAwIDEzLjE4NzlaTTE0LjE3NSA4LjUzMTI1VjYuNzgxMjVIMTIuMzc1QzEyLjAwMDkgNi43ODEyNSAxMS43IDYuNDg4NjcgMTEuNyA2LjEyNUMxMS43IDUuNzYxMzMgMTIuMDAwOSA1LjQ2ODc1IDEyLjM3NSA1LjQ2ODc1SDE0LjE3NVYzLjcxODc1QzE0LjE3NSAzLjM1NTA4IDE0LjQ3NTkgMy4wNjI1IDE0Ljg1IDMuMDYyNUMxNS4yMjQxIDMuMDYyNSAxNS41MjUgMy4zNTUwOCAxNS41MjUgMy43MTg3NVY1LjQ2ODc1SDE3LjMyNUMxNy42OTkxIDUuNDY4NzUgMTggNS43NjEzMyAxOCA2LjEyNUMxOCA2LjQ4ODY3IDE3LjY5OTEgNi43ODEyNSAxNy4zMjUgNi43ODEyNUgxNS41MjVWOC41MzEyNUMxNS41MjUgOC44OTQ5MiAxNS4yMjQxIDkuMTg3NSAxNC44NSA5LjE4NzVDMTQuNDc1OSA5LjE4NzUgMTQuMTc1IDguODk0OTIgMTQuMTc1IDguNTMxMjVaXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiIzAwQTNGRlwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPkFkZCBBbHRlcm5hdGUgU1BPQzwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB0LTFcIj5cclxuICAgICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwic3RvcmVGb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTdG9yZSBJbmZvIFN0YXJ0IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2hpZGRlbl09XCJzZWxlY3QgIT09ICdzdG9yZV9pbmZvJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGNvbC1sZy02IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwic3RvcmVOYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U3RvcmUgTmFtZSA8c3BhbiBjbGFzcz1cImFsZXJ0LXJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJzdG9yZU5hbWVcIiBmb3JtQ29udHJvbE5hbWU9XCJzdG9yZU5hbWVcIiAoaW5wdXQpPVwiaXNTdG9yZU5hbWVFeGlzdCA9IGZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6KHN0b3JlRm9ybS5nZXQoJ3N0b3JlTmFtZScpPy5pbnZhbGlkIHx8IGlzU3RvcmVOYW1lRXhpc3QpICYmIChzdG9yZUZvcm0uZ2V0KCdzdG9yZU5hbWUnKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihzdG9yZUZvcm0uZ2V0KCdzdG9yZU5hbWUnKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpICYmIHN0b3JlRm9ybS5nZXQoJ3N0b3JlTmFtZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9yZSBOYW1lIGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKHN0b3JlRm9ybS5nZXQoJ3N0b3JlTmFtZScpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZCkgJiYgaXNTdG9yZU5hbWVFeGlzdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdG9yZSBOYW1lIGFscmVhZHkgZXhpc3RzLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgY29sLWxnLTYgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdG9yZUNvZGVcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5TdG9yZSBDb2RlIC8gUmVmIENvZGUgKG9wdGlvbmFsKTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cInN0b3JlQ29kZVwiIGZvcm1Db250cm9sTmFtZT1cInN0b3JlQ29kZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGNvbC1sZy02IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwiYnVzaW5lc3NUeXBlXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+QnVzaW5lc3MgVHlwZSA8c3BhbiBjbGFzcz1cImFsZXJ0LXJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGlkPVwiYnVzaW5lc3NUeXBlXCIgZm9ybUNvbnRyb2xOYW1lPVwiYnVzaW5lc3NUeXBlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJDT0NPXCI+Q09DTzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPVwiQ09GT1wiPkNPRk88L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkZPRk9cIj5GT0ZPPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJGT0NPXCI+Rk9DTzwvb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEyIGNvbC1sZy02IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwic3RvcmVUeXBlXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U3RvcmUgVHlwZSA8c3BhbiBjbGFzcz1cImFsZXJ0LXJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGlkPVwic3RvcmVUeXBlXCIgZm9ybUNvbnRyb2xOYW1lPVwic3RvcmVUeXBlX3R5cGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIkhpZ2ggU3RyZWV0XCI+SGlnaCBTdHJlZXQ8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT1cIk1hbGwgU3RvcmVcIj5NYWxsPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9XCJLaW9za1wiPktpb3NrPC9vcHRpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgbWItNVwiICpuZ0lmPVwic3RvcmVGb3JtLmdldCgnc3RvcmVUeXBlX3R5cGUnKT8udmFsdWUgPT09ICdNYWxsIFN0b3JlJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJtYWxsTmFtZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkVudGVyIE1hbGwgTmFtZSA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJtYWxsTmFtZVwiIGZvcm1Db250cm9sTmFtZT1cInN0b3JlVHlwZV9uYW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6c3RvcmVGb3JtLmdldCgnc3RvcmVUeXBlX25hbWUnKT8uaW52YWxpZCAmJiAoc3RvcmVGb3JtLmdldCgnc3RvcmVUeXBlX25hbWUnKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihzdG9yZUZvcm0uZ2V0KCdzdG9yZVR5cGVfbmFtZScpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZCkgJiYgc3RvcmVGb3JtLmdldCgnc3RvcmVUeXBlX25hbWUnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFsbCBOYW1lIGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJhZGRyZXNzXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+QWRkcmVzcyA8c3BhbiBjbGFzcz1cImFsZXJ0LXJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJhZGRyZXNzXCIgZm9ybUNvbnRyb2xOYW1lPVwiYWRkcmVzc1wiICNwbGFjZXNSZWY9XCJuZ3gtcGxhY2VzXCIgbmd4LWdwLWF1dG9jb21wbGV0ZSAob25BZGRyZXNzQ2hhbmdlKT1cImhhbmRsZUFkZHJlc3NDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOnN0b3JlRm9ybS5nZXQoJ2FkZHJlc3MnKT8uaW52YWxpZCAmJiAoc3RvcmVGb3JtLmdldCgnYWRkcmVzcycpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKHN0b3JlRm9ybS5nZXQoJ2FkZHJlc3MnKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpICYmIHN0b3JlRm9ybS5nZXQoJ2FkZHJlc3MnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcyBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjb3VudHJ5XCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+Q291bnRyeSA8c3BhbiBjbGFzcz1cImFsZXJ0LXJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJjb3VudHJ5XCIgZm9ybUNvbnRyb2xOYW1lPVwiY291bnRyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOnN0b3JlRm9ybS5nZXQoJ2NvdW50cnknKT8uaW52YWxpZCAmJiAoc3RvcmVGb3JtLmdldCgnY291bnRyeScpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKHN0b3JlRm9ybS5nZXQoJ2NvdW50cnknKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpICYmIHN0b3JlRm9ybS5nZXQoJ2NvdW50cnknKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ291bnRyeSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJzdGF0ZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlN0YXRlIDxzcGFuIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cInN0YXRlXCIgZm9ybUNvbnRyb2xOYW1lPVwic3RhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzpzdG9yZUZvcm0uZ2V0KCdzdGF0ZScpPy5pbnZhbGlkICYmIChzdG9yZUZvcm0uZ2V0KCdzdGF0ZScpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKHN0b3JlRm9ybS5nZXQoJ3N0YXRlJyk/LnRvdWNoZWQgfHwgc3VibWl0dGVkKSAmJiBzdG9yZUZvcm0uZ2V0KCdzdGF0ZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0ZSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJjaXR5XCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+Q2l0eSAvIFRvd24gPHNwYW4gY2xhc3M9XCJhbGVydC1yZXF1aXJlZFwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwiY2l0eVwiIGZvcm1Db250cm9sTmFtZT1cImNpdHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzpzdG9yZUZvcm0uZ2V0KCdjaXR5Jyk/LmludmFsaWQgJiYgKHN0b3JlRm9ybS5nZXQoJ2NpdHknKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihzdG9yZUZvcm0uZ2V0KCdjaXR5Jyk/LnRvdWNoZWQgfHwgc3VibWl0dGVkKSAmJiBzdG9yZUZvcm0uZ2V0KCdjaXR5Jyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENpdHkgaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwicGluY29kZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlBpbiAvIFppcCBDb2RlIDxzcGFuIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWRcIj4qPC9zcGFuPiAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJwaW5jb2RlXCIgZm9ybUNvbnRyb2xOYW1lPVwicGluY29kZVwiIG1heGxlbmd0aD1cIjZcIiBtaW5sZW5ndGg9XCI1XCIgKGtleXByZXNzKT1cIm9taXRfc3BlY2lhbF9jaGFyKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICdpcy1pbnZhbGlkJzpzdG9yZUZvcm0uZ2V0KCdwaW5jb2RlJyk/LmludmFsaWQgJiYgKHN0b3JlRm9ybS5nZXQoJ3BpbmNvZGUnKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIihzdG9yZUZvcm0uZ2V0KCdwaW5jb2RlJyk/LnRvdWNoZWQgfHwgc3VibWl0dGVkKSAmJiBzdG9yZUZvcm0uZ2V0KCdwaW5jb2RlJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBpbmNvZGUgaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMiB0ZXh0LWVuZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IG14LTMgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTNcIiAoY2xpY2spPVwibmF2aWdhdGVUb0FkZFN0b3JlKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiIFtkaXNhYmxlZF09XCJ2YWxpZGF0ZVN0b3JlSW5mbygpID09PSB0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9Db25maWd1cmF0aW9uKClcIj5OZXh0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTdG9yZSBJbmZvIEVuZCAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTdG9yZSBDb25maWd1cmF0aW9uIFN0YXJ0IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgW2hpZGRlbl09XCJzZWxlY3QgIT09ICdjb25maWcnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInRpbWVab25lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+VGltZSBab25lIDxzcGFuIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGlkPVwidGltZVpvbmVcIiBmb3JtQ29udHJvbE5hbWU9XCJ0aW1lWm9uZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOnN0b3JlRm9ybS5nZXQoJ3RpbWVab25lJyk/LmludmFsaWQgJiYgc3RvcmVGb3JtLmdldCgndGltZVpvbmUnKT8udG91Y2hlZH1cIj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWxlY3QgY2xhc3M9XCJmb3JtLXNlbGVjdFwiIGlkPVwidGltZVpvbmVcIiBmb3JtQ29udHJvbE5hbWU9XCJ0aW1lWm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiAqbmdGb3I9XCJsZXQgdGltZXpvbmUgb2YgdGltZXpvbmVzXCIgW3ZhbHVlXT1cInRpbWV6b25lXCI+e3sgdGltZXpvbmUgfX08L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKHN0b3JlRm9ybS5nZXQoJ3RpbWVab25lJyk/LnRvdWNoZWQgfHwgc3VibWl0dGVkKSAmJiBzdG9yZUZvcm0uZ2V0KCd0aW1lWm9uZScpPy5oYXNFcnJvcigncmVxdWlyZWQnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaW1lIFpvbmUgaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJub09mQ2FtZXJhc1wiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPk5vIG9mIENhbWVyYXM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJub09mQ2FtZXJhc1wiIGZvcm1Db250cm9sTmFtZT1cImNhbWVyYXNcIiAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOnN0b3JlRm9ybS5nZXQoJ2NhbWVyYXMnKT8uaW52YWxpZCAmJiBzdG9yZUZvcm0uZ2V0KCdjYW1lcmFzJyk/LnRvdWNoZWR9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic3RvcmVGb3JtLmdldCgnY2FtZXJhcycpPy50b3VjaGVkICYmIHN0b3JlRm9ybS5nZXQoJ2NhbWVyYXMnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gb2YgQ2FtZXJhcyBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPVwic3RvcmVPcGVuVGltZVwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPlN0b3JlIE9wZW4gVGltZSA8c3BhbiBjbGFzcz1cImFsZXJ0LXJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwidGltZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJzdG9yZU9wZW5UaW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwib3BlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOnN0b3JlRm9ybS5nZXQoJ29wZW4nKT8uaW52YWxpZCAmJiAoc3RvcmVGb3JtLmdldCgnb3BlbicpPy50b3VjaGVkIHx8IHN1Ym1pdHRlZCl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiKHN0b3JlRm9ybS5nZXQoJ29wZW4nKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpICYmIHN0b3JlRm9ybS5nZXQoJ29wZW4nKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmUgT3BlbiBUaW1lIGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cInN0b3JlQ2xvc2VUaW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+U3RvcmUgQ2xvc2UgVGltZSA8c3BhbiBjbGFzcz1cImFsZXJ0LXJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwidGltZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJzdG9yZUNsb3NlVGltZVwiIGZvcm1Db250cm9sTmFtZT1cImNsb3NlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6c3RvcmVGb3JtLmdldCgnY2xvc2UnKT8uaW52YWxpZCAgJiYgKHN0b3JlRm9ybS5nZXQoJ2Nsb3NlJyk/LnRvdWNoZWQgfHwgc3VibWl0dGVkKSB8fCBzdG9yZUZvcm0uaGFzRXJyb3IoJ2ludmFsaWRUaW1lUmFuZ2UnKX1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoc3RvcmVGb3JtLmdldCgnY2xvc2UnKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpICYmIHN0b3JlRm9ybS5nZXQoJ2Nsb3NlJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0b3JlIENsb3NlIFRpbWUgaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJteS0yXCIgKm5nSWY9XCJzdG9yZUZvcm0uaGFzRXJyb3IoJ2ludmFsaWRUaW1lUmFuZ2UnKSAmJiAoc3RvcmVGb3JtLmdldCgnb3BlbicpPy50b3VjaGVkIHx8IHN0b3JlRm9ybS5nZXQoJ2Nsb3NlJyk/LnRvdWNoZWQgfHwgc3VibWl0dGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcGVuaW5nIHRpbWUgbXVzdCBiZSBiZWZvcmUgY2xvc2luZyB0aW1lLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbXQtMjBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMiBtdC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IG14LTMgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTNcIiAoY2xpY2spPVwibmF2aWdhdGVUb0JhY2soJ2NvbmZpZycpXCI+QmFjazwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwIHRleHQtZW5kIG10LTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBteC0zIGJ0bi1vdXRsaW5lIGJ0bi1vdXRsaW5lLWRlZmF1bHQgcm91bmRlZC0zXCIgKGNsaWNrKT1cIm5hdmlnYXRlVG9BZGRTdG9yZSgpXCI+Q2FuY2VsPC9idXR0b24+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgW2Rpc2FibGVkXT1cInN0b3JlRm9ybS5nZXQoJ3RpbWVab25lJyk/LmludmFsaWQgJiYgc3RvcmVGb3JtLmdldCgnb3BlbicpPy5pbnZhbGlkICYmIHN0b3JlRm9ybS5nZXQoJ2Nsb3NlJyk/LmludmFsaWRcIiAoY2xpY2spPVwiZ29Ub0NvbnRhY3QoKVwiPk5leHQ8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFN0b3JlIENvbmZpZ3VyYXRpb24gRW5kIC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFN0b3JlIENvbnRhY3QgU3RhcnQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbaGlkZGVuXT1cInNlbGVjdCAhPT0gJ2NvbnRhY3QnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgZm9ybUFycmF5TmFtZT1cInNwb2NEZXRhaWxzXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgc3BvY0RldGFpbCBvZiBnZXRzcG9jRGV0YWlsc0NvbnRyb2xzKCk7IGxldCBpID0gaW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJpIT09MFwiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBteS02XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZ3LWJvbGQgZnMtNFwiPkFsdGVybmF0ZSBTUE9DIHt7aX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIChjbGljayk9XCJkZWxBbHRTcG9jKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiB2aWV3Qm94PVwiMCAwIDQwIDQwXCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBmaWx0ZXI9XCJ1cmwoI2ZpbHRlcjBfZF8yMjUwXzMwNjUwKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyXCIgeT1cIjFcIiB3aWR0aD1cIjM2XCIgaGVpZ2h0PVwiMzZcIiByeD1cIjhcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHg9XCIyLjVcIiB5PVwiMS41XCIgd2lkdGg9XCIzNVwiIGhlaWdodD1cIjM1XCIgcng9XCI3LjVcIiBzdHJva2U9XCIjRDBENUREXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyLjUgMTMuOTk5OEgxNC4xNjY3TTE0LjE2NjcgMTMuOTk5OEgyNy41TTE0LjE2NjcgMTMuOTk5OFYyNS42NjY1QzE0LjE2NjcgMjYuMTA4NSAxNC4zNDIzIDI2LjUzMjUgMTQuNjU0OCAyNi44NDVDMTQuOTY3NCAyNy4xNTc2IDE1LjM5MTMgMjcuMzMzMiAxNS44MzMzIDI3LjMzMzJIMjQuMTY2N0MyNC42MDg3IDI3LjMzMzIgMjUuMDMyNiAyNy4xNTc2IDI1LjM0NTIgMjYuODQ1QzI1LjY1NzcgMjYuNTMyNSAyNS44MzMzIDI2LjEwODUgMjUuODMzMyAyNS42NjY1VjEzLjk5OThIMTQuMTY2N1pNMTYuNjY2NyAxMy45OTk4VjEyLjMzMzJDMTYuNjY2NyAxMS44OTExIDE2Ljg0MjMgMTEuNDY3MiAxNy4xNTQ4IDExLjE1NDdDMTcuNDY3NCAxMC44NDIxIDE3Ljg5MTMgMTAuNjY2NSAxOC4zMzMzIDEwLjY2NjVIMjEuNjY2N0MyMi4xMDg3IDEwLjY2NjUgMjIuNTMyNiAxMC44NDIxIDIyLjg0NTIgMTEuMTU0N0MyMy4xNTc3IDExLjQ2NzIgMjMuMzMzMyAxMS44OTExIDIzLjMzMzMgMTIuMzMzMlYxMy45OTk4TTE4LjMzMzMgMTguMTY2NVYyMy4xNjY1TTIxLjY2NjcgMTguMTY2NVYyMy4xNjY1XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZpbHRlciBpZD1cImZpbHRlcjBfZF8yMjUwXzMwNjUwXCIgeD1cIjBcIiB5PVwiMFwiIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlclVuaXRzPVwidXNlclNwYWNlT25Vc2VcIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9XCJzUkdCXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZUZsb29kIGZsb29kLW9wYWNpdHk9XCIwXCIgcmVzdWx0PVwiQmFja2dyb3VuZEltYWdlRml4XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggaW49XCJTb3VyY2VBbHBoYVwiIHR5cGU9XCJtYXRyaXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzPVwiMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDBcIiByZXN1bHQ9XCJoYXJkQWxwaGFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVPZmZzZXQgZHk9XCIxXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj1cIjFcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB0eXBlPVwibWF0cml4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcz1cIjAgMCAwIDAgMC4wNjI3NDUxIDAgMCAwIDAgMC4wOTQxMTc2IDAgMCAwIDAgMC4xNTY4NjMgMCAwIDAgMC4wNSAwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluMj1cIkJhY2tncm91bmRJbWFnZUZpeFwiIHJlc3VsdD1cImVmZmVjdDFfZHJvcFNoYWRvd18yMjUwXzMwNjUwXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGZlQmxlbmQgbW9kZT1cIm5vcm1hbFwiIGluPVwiU291cmNlR3JhcGhpY1wiIGluMj1cImVmZmVjdDFfZHJvcFNoYWRvd18yMjUwXzMwNjUwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdD1cInNoYXBlXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2ZpbHRlcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNvbnRhY3ROYW1lXCIgY2xhc3M9XCJmb3JtLWxhYmVsXCI+TmFtZSA8c3BhbiBjbGFzcz1cImFsZXJ0LXJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImNvbnRhY3ROYW1lXCIgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnaXMtaW52YWxpZCc6c3BvY0RldGFpbC5nZXQoJ25hbWUnKT8uaW52YWxpZCAmJiAoc3BvY0RldGFpbC5nZXQoJ25hbWUnKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIoc3BvY0RldGFpbC5nZXQoJ25hbWUnKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpICYmIHNwb2NEZXRhaWwuZ2V0KCduYW1lJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZSBpcyByZXF1aXJlZC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNvbnRhY3RFbWFpbFwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkVtYWlsIDxzcGFuIGNsYXNzPVwiYWxlcnQtcmVxdWlyZWRcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgYXV0b2NvbXBsZXRlPVwib2ZmXCIgdHlwZT1cImVtYWlsXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImNvbnRhY3RFbWFpbFwiIGZvcm1Db250cm9sTmFtZT1cImVtYWlsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuPVwiXihbYS16QS1aMC05X1xcLVxcLl0rKUBbYS16MC05LV0rKFxcLlthLXowLTktXSspKihcXC5bYS16QS1aXXsyLDN9KSRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOnNwb2NEZXRhaWwuZ2V0KCdlbWFpbCcpPy5pbnZhbGlkICYmIChzcG9jRGV0YWlsLmdldCgnZW1haWwnKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihzcG9jRGV0YWlsLmdldCgnZW1haWwnKT8udG91Y2hlZCB8fCBzdWJtaXR0ZWQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwic3BvY0RldGFpbC5nZXQoJ2VtYWlsJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVtYWlsIGlzIHJlcXVpcmVkLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwic3BvY0RldGFpbC5nZXQoJ2VtYWlsJyk/Lmhhc0Vycm9yKCdtaW5sZW5ndGgnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbWFpbCBtdXN0IGJlIGF0IGxlYXN0IDMgY2hhcmFjdGVycyBsb25nLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc21hbGw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsIGNsYXNzPVwiaW52YWxpZC1mZWVkYmFja1wiICpuZ0lmPVwic3BvY0RldGFpbC5nZXQoJ2VtYWlsJyk/Lmhhc0Vycm9yKCdtYXhsZW5ndGgnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbWFpbCBtdXN0IGJlIG5vdCBtb3JlIHRoYW4gMTAwIGNoYXJhY3RlcnMgbG9uZy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTYgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImNvbnRhY3ROdW1iZXJcIiBjbGFzcz1cImZvcm0tbGFiZWxcIj5Db250YWN0IE51bWJlciA8c3BhbiBjbGFzcz1cImFsZXJ0LXJlcXVpcmVkXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImNvbnRhY3ROdW1iZXJcIiBtaW5sZW5ndGg9XCIxMFwiIG1heGxlbmd0aD1cIjEzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5cHJlc3MpPVwib21pdF9zcGVjaWFsX2NoYXIoJGV2ZW50KVwiIGZvcm1Db250cm9sTmFtZT1cImNvbnRhY3RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2lzLWludmFsaWQnOnNwb2NEZXRhaWwuZ2V0KCdjb250YWN0Jyk/LmludmFsaWQgJiYgKHNwb2NEZXRhaWwuZ2V0KCdjb250YWN0Jyk/LnRvdWNoZWQgfHwgc3VibWl0dGVkICl9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiKHNwb2NEZXRhaWwuZ2V0KCdjb250YWN0Jyk/LnRvdWNoZWQgfHwgc3VibWl0dGVkKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cInNwb2NEZXRhaWwuZ2V0KCdjb250YWN0Jyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbnRhY3QgaXMgcmVxdWlyZWQuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJpbnZhbGlkLWZlZWRiYWNrXCIgKm5nSWY9XCJzcG9jRGV0YWlsLmdldCgnY29udGFjdCcpPy5oYXNFcnJvcignbWlubGVuZ3RoJylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29udGFjdCBtdXN0IGJlIGF0IGxlYXN0IDEwIGRpZ2l0cy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImludmFsaWQtZmVlZGJhY2tcIiAqbmdJZj1cInNwb2NEZXRhaWwuZ2V0KCdjb250YWN0Jyk/Lmhhc0Vycm9yKCdtYXhsZW5ndGgnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb250YWN0IG11c3QgYmUgbm90IG1vcmUgdGhhbiAxMyBkaWdpdHMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zbWFsbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC02IG1iLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJkZXNpZ25hdGlvblwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkRlc2lnbmF0aW9uIChvcHRpb25hbCk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGF1dG9jb21wbGV0ZT1cIm9mZlwiIHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBpZD1cImRlc2lnbmF0aW9uXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGVzaWduYXRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMTIgbWItNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoMSBjbGFzcz1cInN1Yi1oZWFkXCI+RW50ZXIgU3RvcmUgQ29ubmVjdGlvbiBEZXRhaWxzPC9oMT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMiBtYi01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGZvcj1cImFueURlc2tJRFwiIGNsYXNzPVwiZm9ybS1sYWJlbFwiPkFueURlc2sgSUQgLyBUZWFtVmlld2VyIElEIChvcHRpb25hbCk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBhdXRvY29tcGxldGU9XCJvZmZcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgaWQ9XCJhbnlEZXNrSURcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzdG9yZUNvbm5lY3Rpb25JZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTIgbXQtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBteC0zIGJ0bi1vdXRsaW5lIGJ0bi1vdXRsaW5lLWRlZmF1bHQgcm91bmRlZC0zXCIgKGNsaWNrKT1cIm5hdmlnYXRlVG9CYWNrKCdjb250YWN0JylcIj5CYWNrPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTAgdGV4dC1lbmQgbXQtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gdHlwZT1cImJ1dHRvblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1kZWZhdWx0IG14LTMgYnRuLW91dGxpbmUgYnRuLW91dGxpbmUtZGVmYXVsdCByb3VuZGVkLTNcIiAoY2xpY2spPVwibmF2aWdhdGVUb0FkZFN0b3JlKClcIj5DYW5jZWw8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBbZGlzYWJsZWRdPVwic3RvcmVGb3JtLmdldCgnc3BvY0RldGFpbHMnKT8uaW52YWxpZFwiIChjbGljayk9XCJnb1RvUmV2aWV3KClcIj5OZXh0PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBTdG9yZSBDb250YWN0IEVuZCAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSBSZXZpZXcgJiBTdWJtaXQgU3RhcnQgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBbaGlkZGVuXT1cInNlbGVjdCAhPT0gJ3JldmlldydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZzLTQgZnctYm9sZCB0ZXh0LWhvdmVyLXByaW1hcnkgc3ViLXRpdGxlIHRleHQtZ3JheS02MDAgbS0wIGN1cnNvci1wb2ludGVyXCI+U3RvcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC05XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLWxnLTMgZnctYm9sZCB0ZXh0LW11dGVkLXJldmlld1wiPlN0b3JlIE5hbWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctOVwiPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZ3LWJvbGRlciBmcy02IHRleHQtcmV2aWV3LXZhbFwiPnt7c3RvcmVGb3JtLmdldCgnc3RvcmVOYW1lJyk/LnZhbHVlID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlRm9ybS5nZXQoJ3N0b3JlTmFtZScpPy52YWx1ZSA6ICdOQSd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLWxnLTMgZnctYm9sZCB0ZXh0LW11dGVkLXJldmlld1wiPlN0b3JlIENvZGU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctOSBmdi1yb3dcIj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmdy1ib2xkIGZzLTYgdGV4dC1yZXZpZXctdmFsXCI+e3tzdG9yZUZvcm0uZ2V0KCdzdG9yZUNvZGUnKT8udmFsdWUgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVGb3JtLmdldCgnc3RvcmVDb2RlJyk/LnZhbHVlOiAnTkEnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1sZy0zIGZ3LWJvbGQgdGV4dC1tdXRlZC1yZXZpZXdcIj5CdXNpbmVzcyBUeXBlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTlcIj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmdy1ib2xkIGZzLTYgdGV4dC1yZXZpZXctdmFsIHRleHQtaG92ZXItcHJpbWFyeVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzdG9yZUZvcm0uZ2V0KCdidXNpbmVzc1R5cGUnKT8udmFsdWUgPyBzdG9yZUZvcm0uZ2V0KCdidXNpbmVzc1R5cGUnKT8udmFsdWUgOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ05BJ319IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLWxnLTMgZnctYm9sZCB0ZXh0LW11dGVkLXJldmlld1wiPlN0b3JlIFR5cGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8aSBkYXRhLWJzLXRvZ2dsZT1cInRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU9XCJQaG9uZSBudW1iZXIgbXVzdCBiZSBhY3RpdmVcIiBjbGFzcz1cImZhcyBmYS1leGNsYW1hdGlvbi1jaXJjbGUgbXMtMSBmcy03XCI+PC9pPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctOSBkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZ3LWJvbGRlciBmcy02IG1lLTIgdGV4dC1yZXZpZXctdmFsXCI+e3tzdG9yZUZvcm0uZ2V0KCdzdG9yZVR5cGVfdHlwZScpPy52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzdG9yZUZvcm0uZ2V0KCdzdG9yZVR5cGVfdHlwZScpPy52YWx1ZSA6ICdOQSd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8c3BhbiBjbGFzcz1cImJhZGdlIGJhZGdlLXN1Y2Nlc3NcIj5WZXJpZmllZDwvc3Bhbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItN1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzdG9yZUZvcm0uZ2V0KCdzdG9yZVR5cGVfdHlwZScpPy52YWx1ZSAmJiBzdG9yZUZvcm0uZ2V0KCdzdG9yZVR5cGVfdHlwZScpPy52YWx1ZSA9PT0gJ01hbGwgU3RvcmUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLWxnLTMgZnctYm9sZCB0ZXh0LW11dGVkLXJldmlld1wiPiBNYWxsIE5hbWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctOVwiPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZ3LWJvbGRlciBmcy02IHRleHQtcmV2aWV3LXZhbFwiPnt7c3RvcmVGb3JtLmdldCgnc3RvcmVUeXBlX25hbWUnKT8udmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc3RvcmVGb3JtLmdldCgnc3RvcmVUeXBlX25hbWUnKT8udmFsdWUgOiAnTkEnfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1sZy0zIGZ3LWJvbGQgdGV4dC1tdXRlZC1yZXZpZXdcIj5BZGRyZXNzPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTlcIj48c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmdy1ib2xkZXIgZnMtNiB0ZXh0LXJldmlldy12YWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tzdG9yZUZvcm0uZ2V0KCdhZGRyZXNzJyk/LnZhbHVlID8gc3RvcmVGb3JtLmdldCgnYWRkcmVzcycpPy52YWx1ZSA6ICdOQSd9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicm93IG1iLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLWxnLTMgZnctYm9sZCB0ZXh0LW11dGVkLXJldmlld1wiPkFsbG93IENoYW5nZXM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctOVwiPjxzcGFuIGNsYXNzPVwiZnctYm9sZCBmcy02XCI+WWVzPC9zcGFuPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy00IGZ3LWJvbGQgdGV4dC1ob3Zlci1wcmltYXJ5IHN1Yi10aXRsZSB0ZXh0LWdyYXktNjAwIG0tMCBjdXJzb3ItcG9pbnRlclwiPlN0b3JlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25maWd1cmF0aW9uPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgcC05XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBtYi03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY29sLWxnLTMgZnctYm9sZCB0ZXh0LW11dGVkLXJldmlld1wiPlRpbWUgWm9uZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy05XCI+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnctYm9sZGVyIGZzLTYgdGV4dC1yZXZpZXctdmFsXCI+e3tzdG9yZUZvcm0uZ2V0KCd0aW1lWm9uZScpPy52YWx1ZSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZUZvcm0uZ2V0KCd0aW1lWm9uZScpPy52YWx1ZSA6ICdOQSd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwicm93IG1iLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbGctMyBmdy1ib2xkIHRleHQtbXV0ZWQtcmV2aWV3XCI+Tm8gb2YgQ2FtZXJhczwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy05IGZ2LXJvd1wiPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZ3LWJvbGQgZnMtNiB0ZXh0LXJldmlldy12YWxcIj57e3N0b3JlRm9ybS5nZXQoJ2NhbWVyYXMnKT8udmFsdWUgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVGb3JtLmdldCgnY2FtZXJhcycpPy52YWx1ZSA6ICdOQSd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbWItN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNvbC1sZy0zIGZ3LWJvbGQgdGV4dC1tdXRlZC1yZXZpZXdcIj5TdG9yZSBPcGVuIFRpbWU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctOVwiPjxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImZ3LWJvbGQgZnMtNiB0ZXh0LXJldmlldy12YWwgdGV4dC1ob3Zlci1wcmltYXJ5XCI+e3tzdG9yZUZvcm0uZ2V0KCdvcGVuJyk/LnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHN0b3JlRm9ybS5nZXQoJ29wZW4nKT8udmFsdWUgOiAnTkEnfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG1iLTdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjb2wtbGctMyBmdy1ib2xkIHRleHQtbXV0ZWQtcmV2aWV3XCI+U3RvcmUgQ2xvc2UgVGltZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy05XCI+PHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZnctYm9sZGVyIGZzLTYgdGV4dC1yZXZpZXctdmFsXCI+e3tzdG9yZUZvcm0uZ2V0KCdjbG9zZScpPy52YWx1ZSA/XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yZUZvcm0uZ2V0KCdjbG9zZScpPy52YWx1ZSA6ICdOQSd9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmcy00IGZ3LWJvbGQgdGV4dC1ob3Zlci1wcmltYXJ5IHN1Yi10aXRsZSB0ZXh0LWdyYXktNjAwIG0tMCBjdXJzb3ItcG9pbnRlclwiPkNvbnRhY3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIERldGFpbHM8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtYm9keSByb3cgcHgtOSBwdC0zIHBiLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlIGNvbC1tZC0xMiBjb2wtbGctMTIgY29sLXhsLTkgY29sLXh4bC04XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWxpZ24tbWlkZGxlIGd5LTZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRib2R5IGNsYXNzPVwiZnMtNiBmdy1ib2xkXCI+IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBmb3JtQXJyYXlOYW1lPVwic3BvY0RldGFpbHNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzcG9jIG9mIGdldHNwb2NEZXRhaWxzQ29udHJvbHMoKTtsZXQgaT1pbmRleDtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlNwb2Mge3tpKzF9fTwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTE1IDE1Ljc1VjE0LjI1QzE1IDEzLjQ1NDQgMTQuNjgzOSAxMi42OTEzIDE0LjEyMTMgMTIuMTI4N0MxMy41NTg3IDExLjU2NjEgMTIuNzk1NiAxMS4yNSAxMiAxMS4yNUg2QzUuMjA0MzUgMTEuMjUgNC40NDEyOSAxMS41NjYxIDMuODc4NjggMTIuMTI4N0MzLjMxNjA3IDEyLjY5MTMgMyAxMy40NTQ0IDMgMTQuMjVWMTUuNzVNMTIgNS4yNUMxMiA2LjkwNjg1IDEwLjY1NjkgOC4yNSA5IDguMjVDNy4zNDMxNSA4LjI1IDYgNi45MDY4NSA2IDUuMjVDNiAzLjU5MzE1IDcuMzQzMTUgMi4yNSA5IDIuMjVDMTAuNjU2OSAyLjI1IDEyIDMuNTkzMTUgMTIgNS4yNVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwibXMtMlwiPnt7Z2V0c3BvY0RldGFpbHNWYWx1ZXMoaSk/Lm5hbWUgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRzcG9jRGV0YWlsc1ZhbHVlcyhpKT8ubmFtZSA6ICdOQScgfX08L3NwYW4+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDE4IDE4XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xXzgwMzczKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyIDYuMDAwMDJWOS43NTAwMkMxMiAxMC4zNDY4IDEyLjIzNzEgMTAuOTE5MSAxMi42NTkgMTEuMzQxQzEzLjA4MSAxMS43NjMgMTMuNjUzMyAxMiAxNC4yNSAxMkMxNC44NDY3IDEyIDE1LjQxOSAxMS43NjMgMTUuODQxIDExLjM0MUMxNi4yNjMgMTAuOTE5MSAxNi41IDEwLjM0NjggMTYuNSA5Ljc1MDAyVjkuMDAwMDJDMTYuNDk5OSA3LjMwNzI5IDE1LjkyNzIgNS42NjQzOCAxNC44NzUgNC4zMzg0MkMxMy44MjI3IDMuMDEyNDYgMTIuMzUyOSAyLjA4MTQ0IDEwLjcwNDUgMS42OTY3NUM5LjA1NjA1IDEuMzEyMDUgNy4zMjU5NiAxLjQ5NjMgNS43OTU1MiAyLjIxOTU1QzQuMjY1MDggMi45NDI3OSAzLjAyNDMxIDQuMTYyNDkgMi4yNzQ5NSA1LjY4MDMyQzEuNTI1NiA3LjE5ODE0IDEuMzExNzMgOC45MjQ4MyAxLjY2ODEzIDEwLjU3OTZDMi4wMjQ1MyAxMi4yMzQ0IDIuOTMwMjQgMTMuNzE5OSA0LjIzNzk4IDE0Ljc5NDdDNS41NDU3MiAxNS44Njk1IDcuMTc4NTggMTYuNDcwMyA4Ljg3MTA2IDE2LjQ5OTRDMTAuNTYzNSAxNi41Mjg1IDEyLjIxNjEgMTUuOTg0MiAxMy41NiAxNC45NTVNMTIgOS4wMDAwMkMxMiAxMC42NTY5IDEwLjY1NjkgMTIgOS4wMDAwMSAxMkM3LjM0MzE1IDEyIDYuMDAwMDEgMTAuNjU2OSA2LjAwMDAxIDkuMDAwMDJDNi4wMDAwMSA3LjM0MzE3IDcuMzQzMTUgNi4wMDAwMiA5LjAwMDAxIDYuMDAwMDJDMTAuNjU2OSA2LjAwMDAyIDEyIDcuMzQzMTcgMTIgOS4wMDAwMlpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzFfODAzNzNcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwibXMtMlwiPnt7Z2V0c3BvY0RldGFpbHNWYWx1ZXMoaSk/LmVtYWlsID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0c3BvY0RldGFpbHNWYWx1ZXMoaSk/LmVtYWlsIDogJ05BJyB9fTwvc3Bhbj48L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzFfODAzNzYpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTYuNTAwMSAxMi42OTAxVjE0Ljk0MDFDMTYuNTAwOSAxNS4xNDg5IDE2LjQ1ODEgMTUuMzU1NyAxNi4zNzQ1IDE1LjU0NzFDMTYuMjkwOCAxNS43Mzg1IDE2LjE2OCAxNS45MTAzIDE2LjAxNDEgMTYuMDUxNUMxNS44NjAyIDE2LjE5MjcgMTUuNjc4NSAxNi4zMDAyIDE1LjQ4MDYgMTYuMzY3MUMxNS4yODI4IDE2LjQzNCAxNS4wNzMxIDE2LjQ1ODkgMTQuODY1MSAxNi40NDAxQzEyLjU1NzIgMTYuMTg5MyAxMC4zNDAzIDE1LjQwMDcgOC4zOTI1NyAxNC4xMzc2QzYuNTgwNDQgMTIuOTg2MSA1LjA0NDA3IDExLjQ0OTcgMy44OTI1NyA5LjYzNzU3QzIuNjI1MDYgNy42ODA5OCAxLjgzNjI1IDUuNDUzMzIgMS41OTAwNyAzLjEzNTA3QzEuNTcxMzMgMi45Mjc2NyAxLjU5NTk4IDIuNzE4NjQgMS42NjI0NSAyLjUyMTI5QzEuNzI4OTIgMi4zMjM5NCAxLjgzNTc1IDIuMTQyNTkgMS45NzYxNSAxLjk4ODc5QzIuMTE2NTQgMS44MzQ5OSAyLjI4NzQzIDEuNzEyMSAyLjQ3NzkyIDEuNjI3OTZDMi42Njg0IDEuNTQzODIgMi44NzQzMyAxLjUwMDI3IDMuMDgyNTcgMS41MDAwN0g1LjMzMjU3QzUuNjk2NTUgMS40OTY0OSA2LjA0OTQyIDEuNjI1MzggNi4zMjUzOSAxLjg2MjcyQzYuNjAxMzcgMi4xMDAwNiA2Ljc4MTYzIDIuNDI5NjYgNi44MzI1NyAyLjc5MDA3QzYuOTI3NTQgMy41MTAxMiA3LjEwMzY2IDQuMjE3MTIgNy4zNTc1NyA0Ljg5NzU3QzcuNDU4NDggNS4xNjYwMiA3LjQ4MDMyIDUuNDU3NzYgNy40MjA1IDUuNzM4MjNDNy4zNjA2OSA2LjAxODcxIDcuMjIxNzIgNi4yNzYxNiA3LjAyMDA3IDYuNDgwMDdMNi4wNjc1NyA3LjQzMjU3QzcuMTM1MjQgOS4zMTAyMyA4LjY4OTkxIDEwLjg2NDkgMTAuNTY3NiAxMS45MzI2TDExLjUyMDEgMTAuOTgwMUMxMS43MjQgMTAuNzc4NCAxMS45ODE0IDEwLjYzOTUgMTIuMjYxOSAxMC41Nzk2QzEyLjU0MjQgMTAuNTE5OCAxMi44MzQxIDEwLjU0MTcgMTMuMTAyNiAxMC42NDI2QzEzLjc4MyAxMC44OTY1IDE0LjQ5IDExLjA3MjYgMTUuMjEwMSAxMS4xNjc2QzE1LjU3NDQgMTEuMjE5IDE1LjkwNzEgMTEuNDAyNSAxNi4xNDUgMTEuNjgzMkMxNi4zODI4IDExLjk2MzkgMTYuNTA5MiAxMi4zMjIzIDE2LjUwMDEgMTIuNjkwMVpcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzFfODAzNzZcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiBmaWxsPVwid2hpdGVcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPjxzcGFuIGNsYXNzPVwibXMtMlwiPnt7Z2V0c3BvY0RldGFpbHNWYWx1ZXMoaSk/LmNvbnRhY3QgP1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRzcG9jRGV0YWlsc1ZhbHVlcyhpKT8uY29udGFjdCA6ICdOQScgfX08L3NwYW4+PC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5BbnlEZXNrIElEXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTJcIj57e3N0b3JlRm9ybS5nZXQoJ3N0b3JlQ29ubmVjdGlvbklkJyk/LnZhbHVlID9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlRm9ybS5nZXQoJ3N0b3JlQ29ubmVjdGlvbklkJyk/LnZhbHVlIDogJ05BJyB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90Ym9keT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RhYmxlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTIgbXQtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tZGVmYXVsdCBteC0zIGJ0bi1vdXRsaW5lIGJ0bi1vdXRsaW5lLWRlZmF1bHQgcm91bmRlZC0zXCIgKGNsaWNrKT1cIm5hdmlnYXRlVG9CYWNrKCdyZXZpZXcnKVwiPkJhY2s8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMCB0ZXh0LWVuZCBtdC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwidGV4dC1lbmRcIj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZ29Ub1N0b3JlSW5mbygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLWRlZmF1bHQgbXgtMyBidG4tb3V0bGluZSBidG4tb3V0bGluZS1kZWZhdWx0IHJvdW5kZWQtM1wiPkVkaXQ8L2J1dHRvbj4gLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgIChjbGljayk9XCJvblN1Ym1pdCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIj5DcmVhdGUgU3RvcmU8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIFJldmlldyAmIFN1Ym1pdCBFbmQgLS0+XHJcbiAgICAgICAgICAgICAgICA8L2Zvcm0+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PiJdfQ==
|