tango-app-ui-store-builder 1.2.5 → 1.2.7

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.
Files changed (54) hide show
  1. package/esm2022/lib/components/collection-update-ai/collection-update-ai.component.mjs +3 -2
  2. package/esm2022/lib/components/collection-update-ai/find-replace-layout/prepare-template/prepare-template.component.mjs +3 -2
  3. package/esm2022/lib/components/collection-update-ai/find-replace-layout/review-replace/review-replace.component.mjs +3 -2
  4. package/esm2022/lib/components/create-fixture/create-fixture.component.mjs +41 -4
  5. package/esm2022/lib/components/fixture-template/template-assign-stores/preview-modal/preview-modal.component.mjs +3 -2
  6. package/esm2022/lib/components/fixture-template/template-assign-stores/template-assign-stores.component.mjs +3 -2
  7. package/esm2022/lib/components/fixture-template-table/find-and-replace/find-and-replace.component.mjs +3 -2
  8. package/esm2022/lib/components/fixture-template-table/fixture-template-table.component.mjs +2 -3
  9. package/esm2022/lib/components/fixture-template-tree/fixture-template-tree.component.mjs +3 -2
  10. package/esm2022/lib/components/manage-plano/verification-table/verification-table.component.mjs +2 -3
  11. package/esm2022/lib/components/manage-store-plano/manage-store-plano.component.mjs +73 -6
  12. package/esm2022/lib/components/manage-store-plano/plano-rollout/plano-rollout.component.mjs +4 -3
  13. package/esm2022/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.mjs +114 -4
  14. package/esm2022/lib/components/onboard-store-plano/onboard-fixture/onboard-fixture.component.mjs +3 -3
  15. package/esm2022/lib/components/onboard-store-plano/onboard-store-plano.component.mjs +85 -6
  16. package/esm2022/lib/components/plano-configurations/plano-configurations.component.mjs +162 -3
  17. package/esm2022/lib/components/plano-library/fixture-library/fixture-library.component.mjs +24 -11
  18. package/esm2022/lib/components/plano-library/fixture-library/popups/create-fixture-modal/create-fixture-modal.component.mjs +13 -4
  19. package/esm2022/lib/components/plano-library/vm-library/vm-library.component.mjs +3 -4
  20. package/esm2022/lib/components/plano-tools/cad-files/cad-files.component.mjs +3 -3
  21. package/esm2022/lib/components/plano-tools/cad-render/cad-render.component.mjs +4 -5
  22. package/esm2022/lib/components/plano-tools/move-bucket/move-bucket.component.mjs +3 -3
  23. package/esm2022/lib/components/plano-tools/plano-data-export/plano-data-export.component.mjs +98 -3
  24. package/esm2022/lib/components/plano-tools/plano-migrate/plano-migrate.component.mjs +3 -2
  25. package/esm2022/lib/components/plano-tools/store-exports/store-exports.component.mjs +135 -33
  26. package/esm2022/lib/components/planogram/merch-compliance/merch-compliance.component.mjs +3 -2
  27. package/esm2022/lib/components/planogram/merch-compliance/product-locator/product-locator.component.mjs +3 -2
  28. package/esm2022/lib/components/planogram/plano-analytics/plano-analytics.component.mjs +3 -2
  29. package/esm2022/lib/components/planogram/plano-details-parent/plano-details-parent.component.mjs +1 -1
  30. package/esm2022/lib/components/planogram/plano-overview/plano-comparison/plano-comparison.component.mjs +3 -2
  31. package/esm2022/lib/components/planogram/plano-overview/plano-overview.component.mjs +3 -2
  32. package/esm2022/lib/components/planogram/plano-table/plano-table.component.mjs +2 -3
  33. package/esm2022/lib/components/store-plano/store-plano-tree-view/store-plano-tree-view.component.mjs +3 -4
  34. package/esm2022/lib/components/store-plano/store-plano.component.mjs +4 -3
  35. package/esm2022/lib/data/fixture-template.data.mjs +12 -1
  36. package/esm2022/lib/functions/plano.function.mjs +13 -1
  37. package/esm2022/lib/interfaces/fixture-library.interface.mjs +1 -1
  38. package/esm2022/lib/services/store-builder.service.mjs +21 -1
  39. package/fesm2022/tango-app-ui-store-builder.mjs +1082 -380
  40. package/fesm2022/tango-app-ui-store-builder.mjs.map +1 -1
  41. package/lib/components/create-fixture/create-fixture.component.d.ts +3 -0
  42. package/lib/components/manage-store-plano/manage-store-plano.component.d.ts +6 -1
  43. package/lib/components/manage-store-plano/template-basic-details/template-basic-details.component.d.ts +14 -1
  44. package/lib/components/onboard-store-plano/onboard-store-plano.component.d.ts +8 -1
  45. package/lib/components/plano-configurations/plano-configurations.component.d.ts +19 -1
  46. package/lib/components/plano-library/fixture-library/fixture-library.component.d.ts +1 -0
  47. package/lib/components/plano-library/fixture-library/popups/create-fixture-modal/create-fixture-modal.component.d.ts +5 -0
  48. package/lib/components/plano-tools/plano-data-export/plano-data-export.component.d.ts +26 -0
  49. package/lib/components/plano-tools/store-exports/store-exports.component.d.ts +28 -3
  50. package/lib/data/fixture-template.data.d.ts +8 -0
  51. package/lib/functions/plano.function.d.ts +1 -0
  52. package/lib/interfaces/fixture-library.interface.d.ts +1 -0
  53. package/lib/services/store-builder.service.d.ts +10 -0
  54. package/package.json +1 -1
@@ -19,6 +19,7 @@ export class PlanoConfigurationsComponent {
19
19
  cd;
20
20
  pageInfo;
21
21
  formRef;
22
+ brandMetaRef;
22
23
  selectedTab = "brand";
23
24
  form;
24
25
  clientId;
@@ -26,6 +27,10 @@ export class PlanoConfigurationsComponent {
26
27
  loading = true;
27
28
  isEdit = false;
28
29
  taskForm;
30
+ brandMetaForm;
31
+ brandMetaList = [];
32
+ isBrandMetaEdit = true;
33
+ brandMetaSearch = "";
29
34
  constructor(fb, dataService, gs, builderService, toast, modelService, cd, pageInfo) {
30
35
  this.fb = fb;
31
36
  this.dataService = dataService;
@@ -44,12 +49,14 @@ export class PlanoConfigurationsComponent {
44
49
  this.clientId = data?.client;
45
50
  this.loadBrandData();
46
51
  this.loadTaskData();
52
+ this.loadBrandMetaData();
47
53
  }
48
54
  else {
49
55
  let data = JSON.parse(localStorage.getItem("header-filters"));
50
56
  this.clientId = data?.client;
51
57
  this.loadBrandData();
52
58
  this.loadTaskData();
59
+ this.loadBrandMetaData();
53
60
  }
54
61
  });
55
62
  }
@@ -122,6 +129,9 @@ export class PlanoConfigurationsComponent {
122
129
  dueTime: ["23:59", Validators.required],
123
130
  allowedStoreLocation: [false, Validators.required],
124
131
  });
132
+ this.brandMetaForm = this.fb.group({
133
+ brandMetaData: this.fb.array([]),
134
+ });
125
135
  }
126
136
  get brandConfig() {
127
137
  return this.form.get("brandConfig");
@@ -263,14 +273,163 @@ export class PlanoConfigurationsComponent {
263
273
  }
264
274
  });
265
275
  }
276
+ get brandMetaData() {
277
+ return this.brandMetaForm.get("brandMetaData");
278
+ }
279
+ loadBrandMetaData() {
280
+ this.builderService.getBrandMetaData(this.clientId).subscribe((res) => {
281
+ const rows = Array.isArray(res?.data) ? res.data : [];
282
+ this.brandMetaList = rows;
283
+ this.buildBrandMetaForm(rows);
284
+ }, () => {
285
+ this.brandMetaList = [];
286
+ this.buildBrandMetaForm([]);
287
+ });
288
+ }
289
+ buildBrandMetaForm(rows) {
290
+ this.brandMetaForm = this.fb.group({
291
+ brandMetaData: this.fb.array(rows.map((row) => this.fb.group({
292
+ pidCat: [row?.pidCat ?? "", Validators.required],
293
+ tempGroup: [row?.tempGroup ?? "", Validators.required],
294
+ category: [row?.category ?? "", Validators.required],
295
+ brand: [row?.brand ?? "", Validators.required],
296
+ band: [row?.band ?? ""],
297
+ }))),
298
+ });
299
+ this.isBrandMetaEdit = true;
300
+ this.brandMetaForm.disable({ emitEvent: false });
301
+ }
302
+ addBrandMetaRow() {
303
+ this.brandMetaData.push(this.fb.group({
304
+ pidCat: ["", Validators.required],
305
+ tempGroup: ["", Validators.required],
306
+ category: ["", Validators.required],
307
+ brand: ["", Validators.required],
308
+ band: [""],
309
+ }));
310
+ setTimeout(() => {
311
+ const lastRow = this.brandMetaRef?.nativeElement?.querySelector(`#metaRow${this.brandMetaData.length - 1}`);
312
+ if (lastRow) {
313
+ lastRow.scrollIntoView({ block: "center", behavior: "smooth" });
314
+ }
315
+ }, 100);
316
+ }
317
+ removeBrandMetaRow(index) {
318
+ this.brandMetaData.removeAt(index);
319
+ }
320
+ enableBrandMetaForm() {
321
+ this.isBrandMetaEdit = false;
322
+ this.brandMetaForm.enable({ emitEvent: false });
323
+ }
324
+ cancelBrandMetaEdit() {
325
+ this.buildBrandMetaForm(this.brandMetaList);
326
+ }
327
+ updateBrandMetaData() {
328
+ if (this.brandMetaForm.invalid) {
329
+ this.brandMetaForm.markAllAsTouched();
330
+ this.focusFirstInvalidBrandMetaField();
331
+ return;
332
+ }
333
+ const rows = this.brandMetaData.value;
334
+ const seen = new Set();
335
+ const dupes = [];
336
+ rows.forEach((r, i) => {
337
+ const key = `${(r.pidCat || "").trim().toLowerCase()}|${(r.tempGroup || "").trim().toLowerCase()}`;
338
+ if (seen.has(key)) {
339
+ dupes.push({ row: i, combo: `${r.pidCat} / ${r.tempGroup}` });
340
+ }
341
+ else {
342
+ seen.add(key);
343
+ }
344
+ });
345
+ if (dupes.length) {
346
+ const first = dupes[0];
347
+ this.toast.getErrorToast(`Row ${first.row + 1}: duplicate Pid Cat + Temp Group "${first.combo}"`);
348
+ this.scrollAndFlashBrandMetaField(first.row, "pidCat");
349
+ return;
350
+ }
351
+ const payload = {
352
+ clientId: this.clientId,
353
+ brandMetaData: rows,
354
+ };
355
+ this.builderService.updateBrandMetaData(payload).subscribe((res) => {
356
+ if (res && res.code == 200) {
357
+ this.toast.getSuccessToast("Brand Meta Data updated successfully");
358
+ this.brandMetaList = rows;
359
+ this.isBrandMetaEdit = true;
360
+ this.brandMetaForm.disable({ emitEvent: false });
361
+ }
362
+ }, () => {
363
+ this.toast.getErrorToast("Something went wrong..");
364
+ });
365
+ }
366
+ BRAND_META_FIELD_LABELS = {
367
+ pidCat: "Pid Cat",
368
+ tempGroup: "Temp Group",
369
+ category: "Category",
370
+ brand: "Brand",
371
+ band: "Band",
372
+ };
373
+ focusFirstInvalidBrandMetaField() {
374
+ const controls = this.brandMetaData.controls;
375
+ for (let i = 0; i < controls.length; i++) {
376
+ const group = controls[i];
377
+ for (const fieldKey of Object.keys(this.BRAND_META_FIELD_LABELS)) {
378
+ const ctrl = group.get(fieldKey);
379
+ if (ctrl && ctrl.invalid) {
380
+ this.toast.getErrorToast(`Row ${i + 1}: ${this.BRAND_META_FIELD_LABELS[fieldKey]} is required`);
381
+ this.scrollAndFlashBrandMetaField(i, fieldKey);
382
+ return;
383
+ }
384
+ }
385
+ }
386
+ this.toast.getErrorToast("Required field is missing");
387
+ }
388
+ scrollAndFlashBrandMetaField(rowIndex, fieldKey) {
389
+ if (this.brandMetaSearch?.trim()) {
390
+ this.brandMetaSearch = "";
391
+ }
392
+ setTimeout(() => {
393
+ const el = document.getElementById(`metaRow${rowIndex}-${fieldKey}`);
394
+ if (!el)
395
+ return;
396
+ el.scrollIntoView({ block: "center", behavior: "smooth" });
397
+ try {
398
+ el.focus({ preventScroll: true });
399
+ }
400
+ catch {
401
+ el.focus();
402
+ }
403
+ el.classList.remove("danger-flash");
404
+ void el.offsetWidth;
405
+ el.classList.add("danger-flash");
406
+ setTimeout(() => el.classList.remove("danger-flash"), 1500);
407
+ }, 50);
408
+ }
409
+ matchesBrandMetaSearch(group) {
410
+ const q = this.brandMetaSearch?.trim().toLowerCase();
411
+ if (!q)
412
+ return true;
413
+ const fields = ["pidCat", "tempGroup", "category", "brand", "band"];
414
+ return fields.some((key) => {
415
+ const val = group.get(key)?.value;
416
+ return (val ?? "").toString().toLowerCase().includes(q);
417
+ });
418
+ }
419
+ get filteredBrandMetaCount() {
420
+ return this.brandMetaData.controls.filter((c) => this.matchesBrandMetaSearch(c)).length;
421
+ }
266
422
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PlanoConfigurationsComponent, deps: [{ token: i1.FormBuilder }, { token: i2.PlanoDataService }, { token: i3.GlobalStateService }, { token: i4.StoreBuilderService }, { token: i5.ToastService }, { token: i6.NgbModal }, { token: i0.ChangeDetectorRef }, { token: i3.PageInfoService }], target: i0.ɵɵFactoryTarget.Component });
267
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PlanoConfigurationsComponent, selector: "lib-plano-configurations", viewQueries: [{ propertyName: "formRef", first: true, predicate: ["formRef"], descendants: true }], ngImport: i0, template: "<div class=\"row\">\r\n <div class=\"col-md-3 planoConfig\">\r\n <div class=\"s-card\">\r\n <div class=\"d-flex cursor-pointer p-3 mb-3\" [ngClass]=\"selectedTab === 'brand' ? 'active' : ''\" (click)=\"selectedTab ='brand';isEdit=true;form.disable();taskForm.disable()\">\r\n <div class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M14.1755 4.22225C14.1766 2.99445 11.6731 2 8.58832 2C5.50357 2 3.00224 2.99557 3 4.22225M3 4.22225C3 5.45004 5.50133 6.44449 8.58832 6.44449C11.6753 6.44449 14.1766 5.45004 14.1766 4.22225L14.1766 12.8445M3 4.22225V17.5556C3.00112 18.7834 5.50245 19.7779 8.58832 19.7779C10.0849 19.7779 11.4361 19.5412 12.4387 19.1601M3.00112 8.66672C3.00112 9.89451 5.50245 10.889 8.58944 10.889C11.6764 10.889 14.1778 9.89451 14.1778 8.66672M12.5057 14.6946C11.4976 15.0891 10.115 15.3335 8.58832 15.3335C5.50245 15.3335 3.00112 14.3391 3.00112 13.1113M20.5272 13.4646C22.4909 15.4169 22.4909 18.5836 20.5272 20.5358C18.5635 22.4881 15.3781 22.4881 13.4144 20.5358C11.4507 18.5836 11.4507 15.4169 13.4144 13.4646C15.3781 11.5124 18.5635 11.5124 20.5272 13.4646Z\" [attr.stroke]=\"selectedTab === 'brand' ? '#00A3FF' : '#344054'\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"configText\">\r\n Brand and Product Mapping\r\n </div>\r\n </div>\r\n <div class=\"d-flex cursor-pointer p-3 mb-3\" [ngClass]=\"selectedTab === 'task' ? 'active' : ''\" (click)=\"selectedTab ='task';isEdit=true;form.disable();taskForm.disable()\">\r\n <div class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1775_37931)\">\r\n <path 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\" [attr.stroke]=\"selectedTab === 'task' ? '#00A3FF' : '#344054'\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path 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\" [attr.stroke]=\"selectedTab === 'task' ? '#00A3FF' : '#344054'\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1775_37931\">\r\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <div class=\"configText\">\r\n Task Configuration\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-9\" id=\"config\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\" *ngIf=\"loading\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"m-card\" *ngIf=\"!loading\">\r\n <div *ngIf=\"selectedTab === 'brand'\" >\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <h3>Brand and product information</h3>\r\n <p>Define the brand and map products to their respective categories.</p>\r\n </div>\r\n <div>\r\n <!-- <button type=\"button\" class=\"btn btn-outline\" (click)=\"bulkUpload()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Upload Brands\r\n </button> -->\r\n </div>\r\n </div>\r\n <ng-container >\r\n <form [formGroup]=\"form\" class=\"mt-10\" #formRef>\r\n <div formArrayName=\"brandConfig\">\r\n <div class=\"row mx-0\">\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"form-label\">Brand</div>\r\n </div>\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"form-label\">Product Category</div>\r\n </div>\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"form-label\">Product Sub-Category</div>\r\n </div>\r\n </div>\r\n <div style=\"height:calc(75vh - 250px);overflow-y:Scroll\">\r\n <div *ngFor=\"let brandGroup of brandConfig?.controls; let i = index\" [formGroupName]=\"i\" class=\"row mt-3 mx-0\">\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"d-flex\">\r\n <div class=\"w-100\" [id]=\"'text'+i\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"brand\" [ngClass]=\"brandsList.length && !isEdit && !checkUsed(i) && brandGroup.get('brand')?.hasError('required') ? 'danger' : ''\"/>\r\n </div>\r\n <div class=\"ms-3 mt-4\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\r\n <path d=\"M14.7071 8.70711C15.0976 8.31658 15.0976 7.68342 14.7071 7.29289L8.34315 0.928932C7.95262 0.538408 7.31946 0.538408 6.92893 0.928932C6.53841 1.31946 6.53841 1.95262 6.92893 2.34315L12.5858 8L6.92893 13.6569C6.53841 14.0474 6.53841 14.6805 6.92893 15.0711C7.31946 15.4616 7.95262 15.4616 8.34315 15.0711L14.7071 8.70711ZM0 8V9H14V8V7H0V8Z\" fill=\"#D0D5DD\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"d-flex\">\r\n <div class=\"w-100 chip-box\" formArrayName=\"category\">\r\n <div class=\"input-container form-control\" [ngClass]=\"brandsList.length && !isEdit && !checkUsed(i) && brandGroup.get('category')?.hasError('required') ? 'danger' : ''\">\r\n <ng-container *ngFor=\"let item of getCategory(i)?.controls;let j=index\">\r\n <span class=\"chip\">\r\n <span class=\"me-3\" [ngClass]=\"isEdit || checkUsed(i) ? 'disabledText' : ''\">{{item.value}}</span>\r\n <span (click)=\"isEdit || checkUsed(i) ? '' :removeCategory(i,j)\" [class]=\"isEdit || checkUsed(i) ? 'disabledText':'cursor-pointer'\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" [attr.stroke]=\"isEdit || checkUsed(i) ? '#aeb4c5' : '#667085'\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </ng-container>\r\n <input style=\"min-height: 44px;\" type=\"text\" class=\"form-control dropdown-input ps-3 me-3\" (change)=\"addCategory($event,i)\" [id]=\"'categoryInput'+i\" [disabled]=\"isEdit || checkUsed(i)\">\r\n </div>\r\n <!-- <input type=\"text\" class=\"form-control\" formControlName=\"category\" /> -->\r\n </div>\r\n <div class=\"ms-3 mt-4\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\r\n <path d=\"M14.7071 8.70711C15.0976 8.31658 15.0976 7.68342 14.7071 7.29289L8.34315 0.928932C7.95262 0.538408 7.31946 0.538408 6.92893 0.928932C6.53841 1.31946 6.53841 1.95262 6.92893 2.34315L12.5858 8L6.92893 13.6569C6.53841 14.0474 6.53841 14.6805 6.92893 15.0711C7.31946 15.4616 7.95262 15.4616 8.34315 15.0711L14.7071 8.70711ZM0 8V9H14V8V7H0V8Z\" fill=\"#D0D5DD\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"d-flex\">\r\n <div class=\"w-100 chip-box\" formArrayName=\"subCategory\">\r\n <div class=\"input-container form-control\">\r\n <ng-container *ngFor=\"let item of getSubCategory(i)?.controls;let j=index\">\r\n <span class=\"chip\">\r\n <span class=\"me-3\" [ngClass]=\"isEdit || checkUsed(i) ? 'disabledText' : ''\">{{item.value}}</span>\r\n <span (click)=\"isEdit || checkUsed(i) ? '' : removeSubCategory(i,j)\" [class]=\"isEdit || checkUsed(i) ? '':'cursor-pointer'\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" [attr.stroke]=\"isEdit || checkUsed(i) ? '#aeb4c5' : '#667085'\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </ng-container>\r\n <input style=\"min-height: 44px;\" type=\"text\" class=\"form-control dropdown-input ps-3 me-3\" (change)=\"addSubCategory($event,i)\" [id]=\"'subCategoryInput'+i\" [disabled]=\"isEdit || checkUsed(i)\">\r\n </div>\r\n <!-- <input type=\"text\" class=\"form-control\" formControlName=\"category\" /> -->\r\n </div>\r\n <div class=\"ms-3 mt-4\" (click)=\"checkUsed(i) || isEdit ? '' : removeBrand(i)\" *ngIf=\"brandConfig.value.length > 1\" [ngClass]=\"checkUsed(i) || isEdit ? 'cursor-default' : 'cursor-pointer'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M13.5 4.5L4.5 13.5M4.5 4.5L13.5 13.5\" stroke=\"#D0D5DD\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <div>\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"addBrand()\" [disabled]=\"isEdit\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16675V15.8334M4.16675 10.0001H15.8334\" stroke=\"#D0D5DD\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Add\r\n </button>\r\n </div>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-outline\" *ngIf=\"isEdit\" (click)=\"isEdit = false;formEnable()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1775_37985)\">\r\n <path d=\"M14.1667 2.49993C14.3856 2.28106 14.6455 2.10744 14.9314 1.98899C15.2174 1.87054 15.5239 1.80957 15.8334 1.80957C16.1429 1.80957 16.4494 1.87054 16.7354 1.98899C17.0214 2.10744 17.2812 2.28106 17.5001 2.49993C17.719 2.7188 17.8926 2.97863 18.011 3.2646C18.1295 3.55057 18.1904 3.85706 18.1904 4.16659C18.1904 4.47612 18.1295 4.78262 18.011 5.06859C17.8926 5.35455 17.719 5.61439 17.5001 5.83326L6.25008 17.0833L1.66675 18.3333L2.91675 13.7499L14.1667 2.49993Z\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1775_37985\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg> Edit\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" *ngIf=\"!isEdit\" (click)=\"updateBrand()\">\r\n Save\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"selectedTab === 'task'\" >\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <h3>Global configuration for tasks</h3>\r\n <p>The following configuration applies to all published tasks.</p>\r\n </div>\r\n <!-- <div>\r\n <button type=\"button\" class=\"btn btn-outline\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Upload Brands\r\n </button>\r\n </div> -->\r\n </div>\r\n <ng-container >\r\n <form [formGroup]=\"taskForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label\">\r\n Due days (to complete task)\r\n </label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"dueDay\"/>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label\">\r\n Due time\r\n </label>\r\n <input type=\"time\" class=\"form-control\" formControlName=\"dueTime\"/>\r\n </div>\r\n <div\r\n class=\"checklistturnoff ms-3 mt-4 fv-plugins-icon-containe col-md-8 divWidth\">\r\n <div class=\"form-check form-switch\">\r\n <input class=\"form-check-input mt-3\" type=\"checkbox\"\r\n id=\"geoFencing\" [checked]=\"taskForm.get('allowedStoreLocation')?.value\" formControlName=\"allowedStoreLocation\">\r\n <label class=\"form-check-label sub\" [ngClass]=\"taskForm.get('allowedStoreLocation')?.value ? 'active' : ''\" for=\"geoFencing\">Geo\r\n fencing\r\n </label><br>\r\n <label class=\"form-check-label subtext\" [ngClass]=\"taskForm.get('allowedStoreLocation')?.value ? 'active' : ''\" for=\"geoFencing\">By\r\n enabling, the checklist can be filled by the user only when\r\n inside the store.</label>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <button type=\"button\" class=\"btn btn-outline\" *ngIf=\"isEdit\" (click)=\"isEdit = false;taskForm.enable()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1775_37985)\">\r\n <path d=\"M14.1667 2.49993C14.3856 2.28106 14.6455 2.10744 14.9314 1.98899C15.2174 1.87054 15.5239 1.80957 15.8334 1.80957C16.1429 1.80957 16.4494 1.87054 16.7354 1.98899C17.0214 2.10744 17.2812 2.28106 17.5001 2.49993C17.719 2.7188 17.8926 2.97863 18.011 3.2646C18.1295 3.55057 18.1904 3.85706 18.1904 4.16659C18.1904 4.47612 18.1295 4.78262 18.011 5.06859C17.8926 5.35455 17.719 5.61439 17.5001 5.83326L6.25008 17.0833L1.66675 18.3333L2.91675 13.7499L14.1667 2.49993Z\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1775_37985\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg> Edit\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" *ngIf=\"!isEdit\" (click)=\"updateTask()\">\r\n Save\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n", styles: [".s-card{border-radius:8px;background:#fff;padding:20px 16px;height:75vh;overflow-y:auto}.m-card{border-radius:8px;background:#fff;padding:20px 16px;height:75vh;max-height:75vh;overflow-y:auto}.planoConfig{color:var(--Gray-700, #344054);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}::ng-deep .planoConfig .active,.active .configText{border-radius:6px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)!important;font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.configText{color:var(--Gray-700, #344054);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.chip-box{position:relative}.chip-box .form-control{padding-top:0;padding-bottom:0}.chip-box .input-container{min-height:auto;max-height:100px!important;overflow:auto;width:100%;display:flex;flex-wrap:wrap}.chip-box .input-container input{all:unset;flex:1;min-width:50px}.chip-box .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.chip-box .input-container .chip:nth-child(1){margin-left:0}.checklistturnoff{border-radius:8px;border:1px solid var(--gray-200, #EAECF0);background:var(--white, #FFF);display:flex;padding:16px;align-items:flex-start;align-self:stretch}.sub{color:var(--gray-700, #101828);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.subText{color:var(--gray-700, #101828);font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:24px}.sub.active,.subtext.active{color:var(--Primary-800, #008EDF)!important}.divWidth{width:65%}.brandCat{width:30%;margin-left:1%}.danger{border:1px solid red!important}.disabledText{color:var(--bs-gray-500);background-color:var(--bs-gray-200);border-color:var(--bs-gray-300);opacity:1}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { 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.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"] }] });
423
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: PlanoConfigurationsComponent, selector: "lib-plano-configurations", viewQueries: [{ propertyName: "formRef", first: true, predicate: ["formRef"], descendants: true }, { propertyName: "brandMetaRef", first: true, predicate: ["brandMetaRef"], descendants: true }], ngImport: i0, template: "<div class=\"row\">\r\n <div class=\"col-md-3 planoConfig\">\r\n <div class=\"s-card\">\r\n <div class=\"d-flex cursor-pointer p-3 mb-3\" [ngClass]=\"selectedTab === 'brand' ? 'active' : ''\" (click)=\"selectedTab ='brand';isEdit=true;isBrandMetaEdit=true;form.disable();taskForm.disable();brandMetaForm.disable()\">\r\n <div class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M14.1755 4.22225C14.1766 2.99445 11.6731 2 8.58832 2C5.50357 2 3.00224 2.99557 3 4.22225M3 4.22225C3 5.45004 5.50133 6.44449 8.58832 6.44449C11.6753 6.44449 14.1766 5.45004 14.1766 4.22225L14.1766 12.8445M3 4.22225V17.5556C3.00112 18.7834 5.50245 19.7779 8.58832 19.7779C10.0849 19.7779 11.4361 19.5412 12.4387 19.1601M3.00112 8.66672C3.00112 9.89451 5.50245 10.889 8.58944 10.889C11.6764 10.889 14.1778 9.89451 14.1778 8.66672M12.5057 14.6946C11.4976 15.0891 10.115 15.3335 8.58832 15.3335C5.50245 15.3335 3.00112 14.3391 3.00112 13.1113M20.5272 13.4646C22.4909 15.4169 22.4909 18.5836 20.5272 20.5358C18.5635 22.4881 15.3781 22.4881 13.4144 20.5358C11.4507 18.5836 11.4507 15.4169 13.4144 13.4646C15.3781 11.5124 18.5635 11.5124 20.5272 13.4646Z\" [attr.stroke]=\"selectedTab === 'brand' ? '#00A3FF' : '#344054'\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"configText\">\r\n Brand and Product Mapping\r\n </div>\r\n </div>\r\n <div class=\"d-flex cursor-pointer p-3 mb-3\" [ngClass]=\"selectedTab === 'task' ? 'active' : ''\" (click)=\"selectedTab ='task';isEdit=true;isBrandMetaEdit=true;form.disable();taskForm.disable();brandMetaForm.disable()\">\r\n <div class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1775_37931)\">\r\n <path 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\" [attr.stroke]=\"selectedTab === 'task' ? '#00A3FF' : '#344054'\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path 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\" [attr.stroke]=\"selectedTab === 'task' ? '#00A3FF' : '#344054'\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1775_37931\">\r\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <div class=\"configText\">\r\n Task Configuration\r\n </div>\r\n </div>\r\n <div class=\"d-flex cursor-pointer p-3 mb-3\" [ngClass]=\"selectedTab === 'brandMeta' ? 'active' : ''\" (click)=\"selectedTab='brandMeta';isEdit=true;isBrandMetaEdit=true;form.disable();taskForm.disable();brandMetaForm.disable()\">\r\n <div class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M3 7.5L12 3L21 7.5M3 7.5L12 12M3 7.5V16.5L12 21M21 7.5L12 12M21 7.5V16.5L12 21M12 12V21\" [attr.stroke]=\"selectedTab === 'brandMeta' ? '#00A3FF' : '#344054'\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"configText\">\r\n Brand Meta Data\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-9\" id=\"config\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\" *ngIf=\"loading\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"m-card\" *ngIf=\"!loading\">\r\n <div *ngIf=\"selectedTab === 'brand'\" >\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <h3>Brand and product information</h3>\r\n <p>Define the brand and map products to their respective categories.</p>\r\n </div>\r\n <div>\r\n <!-- <button type=\"button\" class=\"btn btn-outline\" (click)=\"bulkUpload()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Upload Brands\r\n </button> -->\r\n </div>\r\n </div>\r\n <ng-container >\r\n <form [formGroup]=\"form\" class=\"mt-10\" #formRef>\r\n <div formArrayName=\"brandConfig\">\r\n <div class=\"row mx-0\">\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"form-label\">Brand</div>\r\n </div>\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"form-label\">Product Category</div>\r\n </div>\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"form-label\">Product Sub-Category</div>\r\n </div>\r\n </div>\r\n <div style=\"height:calc(75vh - 250px);overflow-y:Scroll\">\r\n <div *ngFor=\"let brandGroup of brandConfig?.controls; let i = index\" [formGroupName]=\"i\" class=\"row mt-3 mx-0\">\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"d-flex\">\r\n <div class=\"w-100\" [id]=\"'text'+i\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"brand\" [ngClass]=\"brandsList.length && !isEdit && !checkUsed(i) && brandGroup.get('brand')?.hasError('required') ? 'danger' : ''\"/>\r\n </div>\r\n <div class=\"ms-3 mt-4\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\r\n <path d=\"M14.7071 8.70711C15.0976 8.31658 15.0976 7.68342 14.7071 7.29289L8.34315 0.928932C7.95262 0.538408 7.31946 0.538408 6.92893 0.928932C6.53841 1.31946 6.53841 1.95262 6.92893 2.34315L12.5858 8L6.92893 13.6569C6.53841 14.0474 6.53841 14.6805 6.92893 15.0711C7.31946 15.4616 7.95262 15.4616 8.34315 15.0711L14.7071 8.70711ZM0 8V9H14V8V7H0V8Z\" fill=\"#D0D5DD\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"d-flex\">\r\n <div class=\"w-100 chip-box\" formArrayName=\"category\">\r\n <div class=\"input-container form-control\" [ngClass]=\"brandsList.length && !isEdit && !checkUsed(i) && brandGroup.get('category')?.hasError('required') ? 'danger' : ''\">\r\n <ng-container *ngFor=\"let item of getCategory(i)?.controls;let j=index\">\r\n <span class=\"chip\">\r\n <span class=\"me-3\" [ngClass]=\"isEdit || checkUsed(i) ? 'disabledText' : ''\">{{item.value}}</span>\r\n <span (click)=\"isEdit || checkUsed(i) ? '' :removeCategory(i,j)\" [class]=\"isEdit || checkUsed(i) ? 'disabledText':'cursor-pointer'\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" [attr.stroke]=\"isEdit || checkUsed(i) ? '#aeb4c5' : '#667085'\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </ng-container>\r\n <input style=\"min-height: 44px;\" type=\"text\" class=\"form-control dropdown-input ps-3 me-3\" (change)=\"addCategory($event,i)\" [id]=\"'categoryInput'+i\" [disabled]=\"isEdit || checkUsed(i)\">\r\n </div>\r\n <!-- <input type=\"text\" class=\"form-control\" formControlName=\"category\" /> -->\r\n </div>\r\n <div class=\"ms-3 mt-4\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\r\n <path d=\"M14.7071 8.70711C15.0976 8.31658 15.0976 7.68342 14.7071 7.29289L8.34315 0.928932C7.95262 0.538408 7.31946 0.538408 6.92893 0.928932C6.53841 1.31946 6.53841 1.95262 6.92893 2.34315L12.5858 8L6.92893 13.6569C6.53841 14.0474 6.53841 14.6805 6.92893 15.0711C7.31946 15.4616 7.95262 15.4616 8.34315 15.0711L14.7071 8.70711ZM0 8V9H14V8V7H0V8Z\" fill=\"#D0D5DD\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"d-flex\">\r\n <div class=\"w-100 chip-box\" formArrayName=\"subCategory\">\r\n <div class=\"input-container form-control\">\r\n <ng-container *ngFor=\"let item of getSubCategory(i)?.controls;let j=index\">\r\n <span class=\"chip\">\r\n <span class=\"me-3\" [ngClass]=\"isEdit || checkUsed(i) ? 'disabledText' : ''\">{{item.value}}</span>\r\n <span (click)=\"isEdit || checkUsed(i) ? '' : removeSubCategory(i,j)\" [class]=\"isEdit || checkUsed(i) ? '':'cursor-pointer'\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" [attr.stroke]=\"isEdit || checkUsed(i) ? '#aeb4c5' : '#667085'\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </ng-container>\r\n <input style=\"min-height: 44px;\" type=\"text\" class=\"form-control dropdown-input ps-3 me-3\" (change)=\"addSubCategory($event,i)\" [id]=\"'subCategoryInput'+i\" [disabled]=\"isEdit || checkUsed(i)\">\r\n </div>\r\n <!-- <input type=\"text\" class=\"form-control\" formControlName=\"category\" /> -->\r\n </div>\r\n <div class=\"ms-3 mt-4\" (click)=\"checkUsed(i) || isEdit ? '' : removeBrand(i)\" *ngIf=\"brandConfig.value.length > 1\" [ngClass]=\"checkUsed(i) || isEdit ? 'cursor-default' : 'cursor-pointer'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M13.5 4.5L4.5 13.5M4.5 4.5L13.5 13.5\" stroke=\"#D0D5DD\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <div>\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"addBrand()\" [disabled]=\"isEdit\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16675V15.8334M4.16675 10.0001H15.8334\" stroke=\"#D0D5DD\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Add\r\n </button>\r\n </div>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-outline\" *ngIf=\"isEdit\" (click)=\"isEdit = false;formEnable()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1775_37985)\">\r\n <path d=\"M14.1667 2.49993C14.3856 2.28106 14.6455 2.10744 14.9314 1.98899C15.2174 1.87054 15.5239 1.80957 15.8334 1.80957C16.1429 1.80957 16.4494 1.87054 16.7354 1.98899C17.0214 2.10744 17.2812 2.28106 17.5001 2.49993C17.719 2.7188 17.8926 2.97863 18.011 3.2646C18.1295 3.55057 18.1904 3.85706 18.1904 4.16659C18.1904 4.47612 18.1295 4.78262 18.011 5.06859C17.8926 5.35455 17.719 5.61439 17.5001 5.83326L6.25008 17.0833L1.66675 18.3333L2.91675 13.7499L14.1667 2.49993Z\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1775_37985\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg> Edit\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" *ngIf=\"!isEdit\" (click)=\"updateBrand()\">\r\n Save\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"selectedTab === 'brandMeta'\">\r\n <div class=\"d-flex justify-content-between align-items-center gap-3\">\r\n <div class=\"flex-grow-1\">\r\n <h3>Brand Meta Data</h3>\r\n <p class=\"mb-0\">Maintain the Pid Cat &#8594; Brand / Category / Band mapping used during planogram export.</p>\r\n </div>\r\n <div style=\"width:360px;flex-shrink:0\">\r\n <div class=\"position-relative\">\r\n <span class=\"position-absolute\" style=\"left:12px;top:50%;transform:translateY(-50%)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M21 21L16.65 16.65M19 11C19 15.4183 15.4183 19 11 19C6.58172 19 3 15.4183 3 11C3 6.58172 6.58172 3 11 3C15.4183 3 19 6.58172 19 11Z\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <input type=\"text\" class=\"form-control\" style=\"padding-left:38px\" placeholder=\"Search Pid Cat, Temp Group, Category, Brand or Band\" [(ngModel)]=\"brandMetaSearch\" [ngModelOptions]=\"{standalone: true}\"/>\r\n </div>\r\n <div class=\"text-end mt-1\" *ngIf=\"brandMetaData?.controls?.length\">\r\n <small class=\"text-muted\">{{ filteredBrandMetaCount }} of {{ brandMetaData.controls.length }} row(s)</small>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container>\r\n <form [formGroup]=\"brandMetaForm\" class=\"mt-3\" #brandMetaRef>\r\n <div formArrayName=\"brandMetaData\">\r\n <div class=\"row mx-0\">\r\n <div class=\"col-md-2 p-0 ps-2\"><div class=\"form-label\">Pid Cat</div></div>\r\n <div class=\"col-md-2 p-0 ps-2\"><div class=\"form-label\">Temp Group</div></div>\r\n <div class=\"col-md-3 p-0 ps-2\"><div class=\"form-label\">Category</div></div>\r\n <div class=\"col-md-3 p-0 ps-2\"><div class=\"form-label\">Brand</div></div>\r\n <div class=\"col-md-2 p-0 ps-2\"><div class=\"form-label\">Band</div></div>\r\n </div>\r\n <div style=\"height:calc(75vh - 280px);overflow-y:scroll\">\r\n <div *ngIf=\"!brandMetaData?.controls?.length\" class=\"text-center p-5 text-muted\">\r\n No brand meta data found. Click \"Edit\" then \"Add\" to create a row.\r\n </div>\r\n <div *ngIf=\"brandMetaData?.controls?.length && !filteredBrandMetaCount\" class=\"text-center p-5 text-muted\">\r\n No rows match \"{{ brandMetaSearch }}\"\r\n </div>\r\n <div *ngFor=\"let metaGroup of brandMetaData?.controls; let i = index\" [formGroupName]=\"i\" class=\"row mt-3 mx-0\" [id]=\"'metaRow' + i\" [hidden]=\"!matchesBrandMetaSearch(metaGroup)\">\r\n <div class=\"col-md-2 p-0 ps-2\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"pidCat\" [id]=\"'metaRow' + i + '-pidCat'\" [ngClass]=\"!isBrandMetaEdit && metaGroup.get('pidCat')?.hasError('required') && metaGroup.get('pidCat')?.touched ? 'danger' : ''\"/>\r\n </div>\r\n <div class=\"col-md-2 p-0 ps-2\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"tempGroup\" [id]=\"'metaRow' + i + '-tempGroup'\" [ngClass]=\"!isBrandMetaEdit && metaGroup.get('tempGroup')?.hasError('required') && metaGroup.get('tempGroup')?.touched ? 'danger' : ''\"/>\r\n </div>\r\n <div class=\"col-md-3 p-0 ps-2\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"category\" [id]=\"'metaRow' + i + '-category'\" [ngClass]=\"!isBrandMetaEdit && metaGroup.get('category')?.hasError('required') && metaGroup.get('category')?.touched ? 'danger' : ''\"/>\r\n </div>\r\n <div class=\"col-md-3 p-0 ps-2\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"brand\" [id]=\"'metaRow' + i + '-brand'\" [ngClass]=\"!isBrandMetaEdit && metaGroup.get('brand')?.hasError('required') && metaGroup.get('brand')?.touched ? 'danger' : ''\"/>\r\n </div>\r\n <div class=\"col-md-2 p-0 ps-2 d-flex\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"band\" [id]=\"'metaRow' + i + '-band'\"/>\r\n <div class=\"ms-3 mt-3\" (click)=\"isBrandMetaEdit ? '' : removeBrandMetaRow(i)\" [ngClass]=\"isBrandMetaEdit ? 'cursor-default' : 'cursor-pointer'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M13.5 4.5L4.5 13.5M4.5 4.5L13.5 13.5\" stroke=\"#D0D5DD\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <div>\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"addBrandMetaRow()\" [disabled]=\"isBrandMetaEdit\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16675V15.8334M4.16675 10.0001H15.8334\" stroke=\"#D0D5DD\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Add\r\n </button>\r\n </div>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-outline\" *ngIf=\"!isBrandMetaEdit\" (click)=\"cancelBrandMetaEdit()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-outline ms-2\" *ngIf=\"isBrandMetaEdit\" (click)=\"enableBrandMetaForm()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1775_37990)\">\r\n <path d=\"M14.1667 2.49993C14.3856 2.28106 14.6455 2.10744 14.9314 1.98899C15.2174 1.87054 15.5239 1.80957 15.8334 1.80957C16.1429 1.80957 16.4494 1.87054 16.7354 1.98899C17.0214 2.10744 17.2812 2.28106 17.5001 2.49993C17.719 2.7188 17.8926 2.97863 18.011 3.2646C18.1295 3.55057 18.1904 3.85706 18.1904 4.16659C18.1904 4.47612 18.1295 4.78262 18.011 5.06859C17.8926 5.35455 17.719 5.61439 17.5001 5.83326L6.25008 17.0833L1.66675 18.3333L2.91675 13.7499L14.1667 2.49993Z\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1775_37990\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg> Edit\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary ms-2\" *ngIf=\"!isBrandMetaEdit\" (click)=\"updateBrandMetaData()\">Save</button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"selectedTab === 'task'\" >\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <h3>Global configuration for tasks</h3>\r\n <p>The following configuration applies to all published tasks.</p>\r\n </div>\r\n <!-- <div>\r\n <button type=\"button\" class=\"btn btn-outline\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Upload Brands\r\n </button>\r\n </div> -->\r\n </div>\r\n <ng-container >\r\n <form [formGroup]=\"taskForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label\">\r\n Due days (to complete task)\r\n </label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"dueDay\"/>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label\">\r\n Due time\r\n </label>\r\n <input type=\"time\" class=\"form-control\" formControlName=\"dueTime\"/>\r\n </div>\r\n <div\r\n class=\"checklistturnoff ms-3 mt-4 fv-plugins-icon-containe col-md-8 divWidth\">\r\n <div class=\"form-check form-switch\">\r\n <input class=\"form-check-input mt-3\" type=\"checkbox\"\r\n id=\"geoFencing\" [checked]=\"taskForm.get('allowedStoreLocation')?.value\" formControlName=\"allowedStoreLocation\">\r\n <label class=\"form-check-label sub\" [ngClass]=\"taskForm.get('allowedStoreLocation')?.value ? 'active' : ''\" for=\"geoFencing\">Geo\r\n fencing\r\n </label><br>\r\n <label class=\"form-check-label subtext\" [ngClass]=\"taskForm.get('allowedStoreLocation')?.value ? 'active' : ''\" for=\"geoFencing\">By\r\n enabling, the checklist can be filled by the user only when\r\n inside the store.</label>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <button type=\"button\" class=\"btn btn-outline\" *ngIf=\"isEdit\" (click)=\"isEdit = false;taskForm.enable()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1775_37985)\">\r\n <path d=\"M14.1667 2.49993C14.3856 2.28106 14.6455 2.10744 14.9314 1.98899C15.2174 1.87054 15.5239 1.80957 15.8334 1.80957C16.1429 1.80957 16.4494 1.87054 16.7354 1.98899C17.0214 2.10744 17.2812 2.28106 17.5001 2.49993C17.719 2.7188 17.8926 2.97863 18.011 3.2646C18.1295 3.55057 18.1904 3.85706 18.1904 4.16659C18.1904 4.47612 18.1295 4.78262 18.011 5.06859C17.8926 5.35455 17.719 5.61439 17.5001 5.83326L6.25008 17.0833L1.66675 18.3333L2.91675 13.7499L14.1667 2.49993Z\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1775_37985\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg> Edit\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" *ngIf=\"!isEdit\" (click)=\"updateTask()\">\r\n Save\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n", styles: [".s-card{border-radius:8px;background:#fff;padding:20px 16px;height:75vh;overflow-y:auto}.m-card{border-radius:8px;background:#fff;padding:20px 16px;height:75vh;max-height:75vh;overflow-y:auto}.planoConfig{color:var(--Gray-700, #344054);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}::ng-deep .planoConfig .active,.active .configText{border-radius:6px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)!important;font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.configText{color:var(--Gray-700, #344054);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.chip-box{position:relative}.chip-box .form-control{padding-top:0;padding-bottom:0}.chip-box .input-container{min-height:auto;max-height:100px!important;overflow:auto;width:100%;display:flex;flex-wrap:wrap}.chip-box .input-container input{all:unset;flex:1;min-width:50px}.chip-box .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.chip-box .input-container .chip:nth-child(1){margin-left:0}.checklistturnoff{border-radius:8px;border:1px solid var(--gray-200, #EAECF0);background:var(--white, #FFF);display:flex;padding:16px;align-items:flex-start;align-self:stretch}.sub{color:var(--gray-700, #101828);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.subText{color:var(--gray-700, #101828);font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:24px}.sub.active,.subtext.active{color:var(--Primary-800, #008EDF)!important}.divWidth{width:65%}.brandCat{width:30%;margin-left:1%}.danger{border:1px solid red!important}.danger-flash{animation:danger-flash 1.4s ease-out}@keyframes danger-flash{0%{background-color:#fee4e2;box-shadow:0 0 0 3px #f0443859}to{background-color:transparent;box-shadow:0 0 #f0443800}}.disabledText{color:var(--bs-gray-500);background-color:var(--bs-gray-200);border-color:var(--bs-gray-300);opacity:1}\n"], dependencies: [{ kind: "directive", type: i7.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i7.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { 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.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { 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"] }] });
268
424
  }
269
425
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PlanoConfigurationsComponent, decorators: [{
270
426
  type: Component,
271
- args: [{ selector: "lib-plano-configurations", template: "<div class=\"row\">\r\n <div class=\"col-md-3 planoConfig\">\r\n <div class=\"s-card\">\r\n <div class=\"d-flex cursor-pointer p-3 mb-3\" [ngClass]=\"selectedTab === 'brand' ? 'active' : ''\" (click)=\"selectedTab ='brand';isEdit=true;form.disable();taskForm.disable()\">\r\n <div class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M14.1755 4.22225C14.1766 2.99445 11.6731 2 8.58832 2C5.50357 2 3.00224 2.99557 3 4.22225M3 4.22225C3 5.45004 5.50133 6.44449 8.58832 6.44449C11.6753 6.44449 14.1766 5.45004 14.1766 4.22225L14.1766 12.8445M3 4.22225V17.5556C3.00112 18.7834 5.50245 19.7779 8.58832 19.7779C10.0849 19.7779 11.4361 19.5412 12.4387 19.1601M3.00112 8.66672C3.00112 9.89451 5.50245 10.889 8.58944 10.889C11.6764 10.889 14.1778 9.89451 14.1778 8.66672M12.5057 14.6946C11.4976 15.0891 10.115 15.3335 8.58832 15.3335C5.50245 15.3335 3.00112 14.3391 3.00112 13.1113M20.5272 13.4646C22.4909 15.4169 22.4909 18.5836 20.5272 20.5358C18.5635 22.4881 15.3781 22.4881 13.4144 20.5358C11.4507 18.5836 11.4507 15.4169 13.4144 13.4646C15.3781 11.5124 18.5635 11.5124 20.5272 13.4646Z\" [attr.stroke]=\"selectedTab === 'brand' ? '#00A3FF' : '#344054'\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"configText\">\r\n Brand and Product Mapping\r\n </div>\r\n </div>\r\n <div class=\"d-flex cursor-pointer p-3 mb-3\" [ngClass]=\"selectedTab === 'task' ? 'active' : ''\" (click)=\"selectedTab ='task';isEdit=true;form.disable();taskForm.disable()\">\r\n <div class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1775_37931)\">\r\n <path 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\" [attr.stroke]=\"selectedTab === 'task' ? '#00A3FF' : '#344054'\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path 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\" [attr.stroke]=\"selectedTab === 'task' ? '#00A3FF' : '#344054'\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1775_37931\">\r\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <div class=\"configText\">\r\n Task Configuration\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-9\" id=\"config\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\" *ngIf=\"loading\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"m-card\" *ngIf=\"!loading\">\r\n <div *ngIf=\"selectedTab === 'brand'\" >\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <h3>Brand and product information</h3>\r\n <p>Define the brand and map products to their respective categories.</p>\r\n </div>\r\n <div>\r\n <!-- <button type=\"button\" class=\"btn btn-outline\" (click)=\"bulkUpload()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Upload Brands\r\n </button> -->\r\n </div>\r\n </div>\r\n <ng-container >\r\n <form [formGroup]=\"form\" class=\"mt-10\" #formRef>\r\n <div formArrayName=\"brandConfig\">\r\n <div class=\"row mx-0\">\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"form-label\">Brand</div>\r\n </div>\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"form-label\">Product Category</div>\r\n </div>\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"form-label\">Product Sub-Category</div>\r\n </div>\r\n </div>\r\n <div style=\"height:calc(75vh - 250px);overflow-y:Scroll\">\r\n <div *ngFor=\"let brandGroup of brandConfig?.controls; let i = index\" [formGroupName]=\"i\" class=\"row mt-3 mx-0\">\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"d-flex\">\r\n <div class=\"w-100\" [id]=\"'text'+i\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"brand\" [ngClass]=\"brandsList.length && !isEdit && !checkUsed(i) && brandGroup.get('brand')?.hasError('required') ? 'danger' : ''\"/>\r\n </div>\r\n <div class=\"ms-3 mt-4\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\r\n <path d=\"M14.7071 8.70711C15.0976 8.31658 15.0976 7.68342 14.7071 7.29289L8.34315 0.928932C7.95262 0.538408 7.31946 0.538408 6.92893 0.928932C6.53841 1.31946 6.53841 1.95262 6.92893 2.34315L12.5858 8L6.92893 13.6569C6.53841 14.0474 6.53841 14.6805 6.92893 15.0711C7.31946 15.4616 7.95262 15.4616 8.34315 15.0711L14.7071 8.70711ZM0 8V9H14V8V7H0V8Z\" fill=\"#D0D5DD\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"d-flex\">\r\n <div class=\"w-100 chip-box\" formArrayName=\"category\">\r\n <div class=\"input-container form-control\" [ngClass]=\"brandsList.length && !isEdit && !checkUsed(i) && brandGroup.get('category')?.hasError('required') ? 'danger' : ''\">\r\n <ng-container *ngFor=\"let item of getCategory(i)?.controls;let j=index\">\r\n <span class=\"chip\">\r\n <span class=\"me-3\" [ngClass]=\"isEdit || checkUsed(i) ? 'disabledText' : ''\">{{item.value}}</span>\r\n <span (click)=\"isEdit || checkUsed(i) ? '' :removeCategory(i,j)\" [class]=\"isEdit || checkUsed(i) ? 'disabledText':'cursor-pointer'\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" [attr.stroke]=\"isEdit || checkUsed(i) ? '#aeb4c5' : '#667085'\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </ng-container>\r\n <input style=\"min-height: 44px;\" type=\"text\" class=\"form-control dropdown-input ps-3 me-3\" (change)=\"addCategory($event,i)\" [id]=\"'categoryInput'+i\" [disabled]=\"isEdit || checkUsed(i)\">\r\n </div>\r\n <!-- <input type=\"text\" class=\"form-control\" formControlName=\"category\" /> -->\r\n </div>\r\n <div class=\"ms-3 mt-4\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\r\n <path d=\"M14.7071 8.70711C15.0976 8.31658 15.0976 7.68342 14.7071 7.29289L8.34315 0.928932C7.95262 0.538408 7.31946 0.538408 6.92893 0.928932C6.53841 1.31946 6.53841 1.95262 6.92893 2.34315L12.5858 8L6.92893 13.6569C6.53841 14.0474 6.53841 14.6805 6.92893 15.0711C7.31946 15.4616 7.95262 15.4616 8.34315 15.0711L14.7071 8.70711ZM0 8V9H14V8V7H0V8Z\" fill=\"#D0D5DD\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"d-flex\">\r\n <div class=\"w-100 chip-box\" formArrayName=\"subCategory\">\r\n <div class=\"input-container form-control\">\r\n <ng-container *ngFor=\"let item of getSubCategory(i)?.controls;let j=index\">\r\n <span class=\"chip\">\r\n <span class=\"me-3\" [ngClass]=\"isEdit || checkUsed(i) ? 'disabledText' : ''\">{{item.value}}</span>\r\n <span (click)=\"isEdit || checkUsed(i) ? '' : removeSubCategory(i,j)\" [class]=\"isEdit || checkUsed(i) ? '':'cursor-pointer'\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" [attr.stroke]=\"isEdit || checkUsed(i) ? '#aeb4c5' : '#667085'\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </ng-container>\r\n <input style=\"min-height: 44px;\" type=\"text\" class=\"form-control dropdown-input ps-3 me-3\" (change)=\"addSubCategory($event,i)\" [id]=\"'subCategoryInput'+i\" [disabled]=\"isEdit || checkUsed(i)\">\r\n </div>\r\n <!-- <input type=\"text\" class=\"form-control\" formControlName=\"category\" /> -->\r\n </div>\r\n <div class=\"ms-3 mt-4\" (click)=\"checkUsed(i) || isEdit ? '' : removeBrand(i)\" *ngIf=\"brandConfig.value.length > 1\" [ngClass]=\"checkUsed(i) || isEdit ? 'cursor-default' : 'cursor-pointer'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M13.5 4.5L4.5 13.5M4.5 4.5L13.5 13.5\" stroke=\"#D0D5DD\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <div>\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"addBrand()\" [disabled]=\"isEdit\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16675V15.8334M4.16675 10.0001H15.8334\" stroke=\"#D0D5DD\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Add\r\n </button>\r\n </div>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-outline\" *ngIf=\"isEdit\" (click)=\"isEdit = false;formEnable()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1775_37985)\">\r\n <path d=\"M14.1667 2.49993C14.3856 2.28106 14.6455 2.10744 14.9314 1.98899C15.2174 1.87054 15.5239 1.80957 15.8334 1.80957C16.1429 1.80957 16.4494 1.87054 16.7354 1.98899C17.0214 2.10744 17.2812 2.28106 17.5001 2.49993C17.719 2.7188 17.8926 2.97863 18.011 3.2646C18.1295 3.55057 18.1904 3.85706 18.1904 4.16659C18.1904 4.47612 18.1295 4.78262 18.011 5.06859C17.8926 5.35455 17.719 5.61439 17.5001 5.83326L6.25008 17.0833L1.66675 18.3333L2.91675 13.7499L14.1667 2.49993Z\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1775_37985\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg> Edit\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" *ngIf=\"!isEdit\" (click)=\"updateBrand()\">\r\n Save\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"selectedTab === 'task'\" >\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <h3>Global configuration for tasks</h3>\r\n <p>The following configuration applies to all published tasks.</p>\r\n </div>\r\n <!-- <div>\r\n <button type=\"button\" class=\"btn btn-outline\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Upload Brands\r\n </button>\r\n </div> -->\r\n </div>\r\n <ng-container >\r\n <form [formGroup]=\"taskForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label\">\r\n Due days (to complete task)\r\n </label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"dueDay\"/>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label\">\r\n Due time\r\n </label>\r\n <input type=\"time\" class=\"form-control\" formControlName=\"dueTime\"/>\r\n </div>\r\n <div\r\n class=\"checklistturnoff ms-3 mt-4 fv-plugins-icon-containe col-md-8 divWidth\">\r\n <div class=\"form-check form-switch\">\r\n <input class=\"form-check-input mt-3\" type=\"checkbox\"\r\n id=\"geoFencing\" [checked]=\"taskForm.get('allowedStoreLocation')?.value\" formControlName=\"allowedStoreLocation\">\r\n <label class=\"form-check-label sub\" [ngClass]=\"taskForm.get('allowedStoreLocation')?.value ? 'active' : ''\" for=\"geoFencing\">Geo\r\n fencing\r\n </label><br>\r\n <label class=\"form-check-label subtext\" [ngClass]=\"taskForm.get('allowedStoreLocation')?.value ? 'active' : ''\" for=\"geoFencing\">By\r\n enabling, the checklist can be filled by the user only when\r\n inside the store.</label>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <button type=\"button\" class=\"btn btn-outline\" *ngIf=\"isEdit\" (click)=\"isEdit = false;taskForm.enable()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1775_37985)\">\r\n <path d=\"M14.1667 2.49993C14.3856 2.28106 14.6455 2.10744 14.9314 1.98899C15.2174 1.87054 15.5239 1.80957 15.8334 1.80957C16.1429 1.80957 16.4494 1.87054 16.7354 1.98899C17.0214 2.10744 17.2812 2.28106 17.5001 2.49993C17.719 2.7188 17.8926 2.97863 18.011 3.2646C18.1295 3.55057 18.1904 3.85706 18.1904 4.16659C18.1904 4.47612 18.1295 4.78262 18.011 5.06859C17.8926 5.35455 17.719 5.61439 17.5001 5.83326L6.25008 17.0833L1.66675 18.3333L2.91675 13.7499L14.1667 2.49993Z\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1775_37985\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg> Edit\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" *ngIf=\"!isEdit\" (click)=\"updateTask()\">\r\n Save\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n", styles: [".s-card{border-radius:8px;background:#fff;padding:20px 16px;height:75vh;overflow-y:auto}.m-card{border-radius:8px;background:#fff;padding:20px 16px;height:75vh;max-height:75vh;overflow-y:auto}.planoConfig{color:var(--Gray-700, #344054);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}::ng-deep .planoConfig .active,.active .configText{border-radius:6px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)!important;font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.configText{color:var(--Gray-700, #344054);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.chip-box{position:relative}.chip-box .form-control{padding-top:0;padding-bottom:0}.chip-box .input-container{min-height:auto;max-height:100px!important;overflow:auto;width:100%;display:flex;flex-wrap:wrap}.chip-box .input-container input{all:unset;flex:1;min-width:50px}.chip-box .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.chip-box .input-container .chip:nth-child(1){margin-left:0}.checklistturnoff{border-radius:8px;border:1px solid var(--gray-200, #EAECF0);background:var(--white, #FFF);display:flex;padding:16px;align-items:flex-start;align-self:stretch}.sub{color:var(--gray-700, #101828);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.subText{color:var(--gray-700, #101828);font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:24px}.sub.active,.subtext.active{color:var(--Primary-800, #008EDF)!important}.divWidth{width:65%}.brandCat{width:30%;margin-left:1%}.danger{border:1px solid red!important}.disabledText{color:var(--bs-gray-500);background-color:var(--bs-gray-200);border-color:var(--bs-gray-300);opacity:1}\n"] }]
427
+ args: [{ selector: "lib-plano-configurations", template: "<div class=\"row\">\r\n <div class=\"col-md-3 planoConfig\">\r\n <div class=\"s-card\">\r\n <div class=\"d-flex cursor-pointer p-3 mb-3\" [ngClass]=\"selectedTab === 'brand' ? 'active' : ''\" (click)=\"selectedTab ='brand';isEdit=true;isBrandMetaEdit=true;form.disable();taskForm.disable();brandMetaForm.disable()\">\r\n <div class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M14.1755 4.22225C14.1766 2.99445 11.6731 2 8.58832 2C5.50357 2 3.00224 2.99557 3 4.22225M3 4.22225C3 5.45004 5.50133 6.44449 8.58832 6.44449C11.6753 6.44449 14.1766 5.45004 14.1766 4.22225L14.1766 12.8445M3 4.22225V17.5556C3.00112 18.7834 5.50245 19.7779 8.58832 19.7779C10.0849 19.7779 11.4361 19.5412 12.4387 19.1601M3.00112 8.66672C3.00112 9.89451 5.50245 10.889 8.58944 10.889C11.6764 10.889 14.1778 9.89451 14.1778 8.66672M12.5057 14.6946C11.4976 15.0891 10.115 15.3335 8.58832 15.3335C5.50245 15.3335 3.00112 14.3391 3.00112 13.1113M20.5272 13.4646C22.4909 15.4169 22.4909 18.5836 20.5272 20.5358C18.5635 22.4881 15.3781 22.4881 13.4144 20.5358C11.4507 18.5836 11.4507 15.4169 13.4144 13.4646C15.3781 11.5124 18.5635 11.5124 20.5272 13.4646Z\" [attr.stroke]=\"selectedTab === 'brand' ? '#00A3FF' : '#344054'\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"configText\">\r\n Brand and Product Mapping\r\n </div>\r\n </div>\r\n <div class=\"d-flex cursor-pointer p-3 mb-3\" [ngClass]=\"selectedTab === 'task' ? 'active' : ''\" (click)=\"selectedTab ='task';isEdit=true;isBrandMetaEdit=true;form.disable();taskForm.disable();brandMetaForm.disable()\">\r\n <div class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1775_37931)\">\r\n <path 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\" [attr.stroke]=\"selectedTab === 'task' ? '#00A3FF' : '#344054'\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n <path 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\" [attr.stroke]=\"selectedTab === 'task' ? '#00A3FF' : '#344054'\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1775_37931\">\r\n <rect width=\"24\" height=\"24\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg>\r\n </div>\r\n <div class=\"configText\">\r\n Task Configuration\r\n </div>\r\n </div>\r\n <div class=\"d-flex cursor-pointer p-3 mb-3\" [ngClass]=\"selectedTab === 'brandMeta' ? 'active' : ''\" (click)=\"selectedTab='brandMeta';isEdit=true;isBrandMetaEdit=true;form.disable();taskForm.disable();brandMetaForm.disable()\">\r\n <div class=\"me-2\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M3 7.5L12 3L21 7.5M3 7.5L12 12M3 7.5V16.5L12 21M21 7.5L12 12M21 7.5V16.5L12 21M12 12V21\" [attr.stroke]=\"selectedTab === 'brandMeta' ? '#00A3FF' : '#344054'\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n <div class=\"configText\">\r\n Brand Meta Data\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-9\" id=\"config\">\r\n <div class=\"row loader d-flex justify-content-center align-items-center\" *ngIf=\"loading\">\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n <div class=\"shimmer\">\r\n <div class=\"wrapper\">\r\n <div class=\"stroke animate title\"></div>\r\n <div class=\"stroke animate link\"></div>\r\n <div class=\"stroke animate description\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"m-card\" *ngIf=\"!loading\">\r\n <div *ngIf=\"selectedTab === 'brand'\" >\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <h3>Brand and product information</h3>\r\n <p>Define the brand and map products to their respective categories.</p>\r\n </div>\r\n <div>\r\n <!-- <button type=\"button\" class=\"btn btn-outline\" (click)=\"bulkUpload()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Upload Brands\r\n </button> -->\r\n </div>\r\n </div>\r\n <ng-container >\r\n <form [formGroup]=\"form\" class=\"mt-10\" #formRef>\r\n <div formArrayName=\"brandConfig\">\r\n <div class=\"row mx-0\">\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"form-label\">Brand</div>\r\n </div>\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"form-label\">Product Category</div>\r\n </div>\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"form-label\">Product Sub-Category</div>\r\n </div>\r\n </div>\r\n <div style=\"height:calc(75vh - 250px);overflow-y:Scroll\">\r\n <div *ngFor=\"let brandGroup of brandConfig?.controls; let i = index\" [formGroupName]=\"i\" class=\"row mt-3 mx-0\">\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"d-flex\">\r\n <div class=\"w-100\" [id]=\"'text'+i\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"brand\" [ngClass]=\"brandsList.length && !isEdit && !checkUsed(i) && brandGroup.get('brand')?.hasError('required') ? 'danger' : ''\"/>\r\n </div>\r\n <div class=\"ms-3 mt-4\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\r\n <path d=\"M14.7071 8.70711C15.0976 8.31658 15.0976 7.68342 14.7071 7.29289L8.34315 0.928932C7.95262 0.538408 7.31946 0.538408 6.92893 0.928932C6.53841 1.31946 6.53841 1.95262 6.92893 2.34315L12.5858 8L6.92893 13.6569C6.53841 14.0474 6.53841 14.6805 6.92893 15.0711C7.31946 15.4616 7.95262 15.4616 8.34315 15.0711L14.7071 8.70711ZM0 8V9H14V8V7H0V8Z\" fill=\"#D0D5DD\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"d-flex\">\r\n <div class=\"w-100 chip-box\" formArrayName=\"category\">\r\n <div class=\"input-container form-control\" [ngClass]=\"brandsList.length && !isEdit && !checkUsed(i) && brandGroup.get('category')?.hasError('required') ? 'danger' : ''\">\r\n <ng-container *ngFor=\"let item of getCategory(i)?.controls;let j=index\">\r\n <span class=\"chip\">\r\n <span class=\"me-3\" [ngClass]=\"isEdit || checkUsed(i) ? 'disabledText' : ''\">{{item.value}}</span>\r\n <span (click)=\"isEdit || checkUsed(i) ? '' :removeCategory(i,j)\" [class]=\"isEdit || checkUsed(i) ? 'disabledText':'cursor-pointer'\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" [attr.stroke]=\"isEdit || checkUsed(i) ? '#aeb4c5' : '#667085'\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </ng-container>\r\n <input style=\"min-height: 44px;\" type=\"text\" class=\"form-control dropdown-input ps-3 me-3\" (change)=\"addCategory($event,i)\" [id]=\"'categoryInput'+i\" [disabled]=\"isEdit || checkUsed(i)\">\r\n </div>\r\n <!-- <input type=\"text\" class=\"form-control\" formControlName=\"category\" /> -->\r\n </div>\r\n <div class=\"ms-3 mt-4\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\r\n <path d=\"M14.7071 8.70711C15.0976 8.31658 15.0976 7.68342 14.7071 7.29289L8.34315 0.928932C7.95262 0.538408 7.31946 0.538408 6.92893 0.928932C6.53841 1.31946 6.53841 1.95262 6.92893 2.34315L12.5858 8L6.92893 13.6569C6.53841 14.0474 6.53841 14.6805 6.92893 15.0711C7.31946 15.4616 7.95262 15.4616 8.34315 15.0711L14.7071 8.70711ZM0 8V9H14V8V7H0V8Z\" fill=\"#D0D5DD\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n <div class=\"col-md-4 p-0 ps-2\">\r\n <div class=\"d-flex\">\r\n <div class=\"w-100 chip-box\" formArrayName=\"subCategory\">\r\n <div class=\"input-container form-control\">\r\n <ng-container *ngFor=\"let item of getSubCategory(i)?.controls;let j=index\">\r\n <span class=\"chip\">\r\n <span class=\"me-3\" [ngClass]=\"isEdit || checkUsed(i) ? 'disabledText' : ''\">{{item.value}}</span>\r\n <span (click)=\"isEdit || checkUsed(i) ? '' : removeSubCategory(i,j)\" [class]=\"isEdit || checkUsed(i) ? '':'cursor-pointer'\"><svg\r\n xmlns=\"http://www.w3.org/2000/svg\" width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\r\n <path d=\"M9 3L3 9M3 3L9 9\" [attr.stroke]=\"isEdit || checkUsed(i) ? '#aeb4c5' : '#667085'\" stroke-width=\"1.5\" stroke-linecap=\"round\"\r\n stroke-linejoin=\"round\" />\r\n </svg>\r\n </span>\r\n </span>\r\n </ng-container>\r\n <input style=\"min-height: 44px;\" type=\"text\" class=\"form-control dropdown-input ps-3 me-3\" (change)=\"addSubCategory($event,i)\" [id]=\"'subCategoryInput'+i\" [disabled]=\"isEdit || checkUsed(i)\">\r\n </div>\r\n <!-- <input type=\"text\" class=\"form-control\" formControlName=\"category\" /> -->\r\n </div>\r\n <div class=\"ms-3 mt-4\" (click)=\"checkUsed(i) || isEdit ? '' : removeBrand(i)\" *ngIf=\"brandConfig.value.length > 1\" [ngClass]=\"checkUsed(i) || isEdit ? 'cursor-default' : 'cursor-pointer'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M13.5 4.5L4.5 13.5M4.5 4.5L13.5 13.5\" stroke=\"#D0D5DD\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <div>\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"addBrand()\" [disabled]=\"isEdit\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16675V15.8334M4.16675 10.0001H15.8334\" stroke=\"#D0D5DD\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Add\r\n </button>\r\n </div>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-outline\" *ngIf=\"isEdit\" (click)=\"isEdit = false;formEnable()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1775_37985)\">\r\n <path d=\"M14.1667 2.49993C14.3856 2.28106 14.6455 2.10744 14.9314 1.98899C15.2174 1.87054 15.5239 1.80957 15.8334 1.80957C16.1429 1.80957 16.4494 1.87054 16.7354 1.98899C17.0214 2.10744 17.2812 2.28106 17.5001 2.49993C17.719 2.7188 17.8926 2.97863 18.011 3.2646C18.1295 3.55057 18.1904 3.85706 18.1904 4.16659C18.1904 4.47612 18.1295 4.78262 18.011 5.06859C17.8926 5.35455 17.719 5.61439 17.5001 5.83326L6.25008 17.0833L1.66675 18.3333L2.91675 13.7499L14.1667 2.49993Z\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1775_37985\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg> Edit\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" *ngIf=\"!isEdit\" (click)=\"updateBrand()\">\r\n Save\r\n </button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"selectedTab === 'brandMeta'\">\r\n <div class=\"d-flex justify-content-between align-items-center gap-3\">\r\n <div class=\"flex-grow-1\">\r\n <h3>Brand Meta Data</h3>\r\n <p class=\"mb-0\">Maintain the Pid Cat &#8594; Brand / Category / Band mapping used during planogram export.</p>\r\n </div>\r\n <div style=\"width:360px;flex-shrink:0\">\r\n <div class=\"position-relative\">\r\n <span class=\"position-absolute\" style=\"left:12px;top:50%;transform:translateY(-50%)\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\">\r\n <path d=\"M21 21L16.65 16.65M19 11C19 15.4183 15.4183 19 11 19C6.58172 19 3 15.4183 3 11C3 6.58172 6.58172 3 11 3C15.4183 3 19 6.58172 19 11Z\" stroke=\"#667085\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </span>\r\n <input type=\"text\" class=\"form-control\" style=\"padding-left:38px\" placeholder=\"Search Pid Cat, Temp Group, Category, Brand or Band\" [(ngModel)]=\"brandMetaSearch\" [ngModelOptions]=\"{standalone: true}\"/>\r\n </div>\r\n <div class=\"text-end mt-1\" *ngIf=\"brandMetaData?.controls?.length\">\r\n <small class=\"text-muted\">{{ filteredBrandMetaCount }} of {{ brandMetaData.controls.length }} row(s)</small>\r\n </div>\r\n </div>\r\n </div>\r\n <ng-container>\r\n <form [formGroup]=\"brandMetaForm\" class=\"mt-3\" #brandMetaRef>\r\n <div formArrayName=\"brandMetaData\">\r\n <div class=\"row mx-0\">\r\n <div class=\"col-md-2 p-0 ps-2\"><div class=\"form-label\">Pid Cat</div></div>\r\n <div class=\"col-md-2 p-0 ps-2\"><div class=\"form-label\">Temp Group</div></div>\r\n <div class=\"col-md-3 p-0 ps-2\"><div class=\"form-label\">Category</div></div>\r\n <div class=\"col-md-3 p-0 ps-2\"><div class=\"form-label\">Brand</div></div>\r\n <div class=\"col-md-2 p-0 ps-2\"><div class=\"form-label\">Band</div></div>\r\n </div>\r\n <div style=\"height:calc(75vh - 280px);overflow-y:scroll\">\r\n <div *ngIf=\"!brandMetaData?.controls?.length\" class=\"text-center p-5 text-muted\">\r\n No brand meta data found. Click \"Edit\" then \"Add\" to create a row.\r\n </div>\r\n <div *ngIf=\"brandMetaData?.controls?.length && !filteredBrandMetaCount\" class=\"text-center p-5 text-muted\">\r\n No rows match \"{{ brandMetaSearch }}\"\r\n </div>\r\n <div *ngFor=\"let metaGroup of brandMetaData?.controls; let i = index\" [formGroupName]=\"i\" class=\"row mt-3 mx-0\" [id]=\"'metaRow' + i\" [hidden]=\"!matchesBrandMetaSearch(metaGroup)\">\r\n <div class=\"col-md-2 p-0 ps-2\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"pidCat\" [id]=\"'metaRow' + i + '-pidCat'\" [ngClass]=\"!isBrandMetaEdit && metaGroup.get('pidCat')?.hasError('required') && metaGroup.get('pidCat')?.touched ? 'danger' : ''\"/>\r\n </div>\r\n <div class=\"col-md-2 p-0 ps-2\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"tempGroup\" [id]=\"'metaRow' + i + '-tempGroup'\" [ngClass]=\"!isBrandMetaEdit && metaGroup.get('tempGroup')?.hasError('required') && metaGroup.get('tempGroup')?.touched ? 'danger' : ''\"/>\r\n </div>\r\n <div class=\"col-md-3 p-0 ps-2\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"category\" [id]=\"'metaRow' + i + '-category'\" [ngClass]=\"!isBrandMetaEdit && metaGroup.get('category')?.hasError('required') && metaGroup.get('category')?.touched ? 'danger' : ''\"/>\r\n </div>\r\n <div class=\"col-md-3 p-0 ps-2\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"brand\" [id]=\"'metaRow' + i + '-brand'\" [ngClass]=\"!isBrandMetaEdit && metaGroup.get('brand')?.hasError('required') && metaGroup.get('brand')?.touched ? 'danger' : ''\"/>\r\n </div>\r\n <div class=\"col-md-2 p-0 ps-2 d-flex\">\r\n <input type=\"text\" class=\"form-control\" formControlName=\"band\" [id]=\"'metaRow' + i + '-band'\"/>\r\n <div class=\"ms-3 mt-3\" (click)=\"isBrandMetaEdit ? '' : removeBrandMetaRow(i)\" [ngClass]=\"isBrandMetaEdit ? 'cursor-default' : 'cursor-pointer'\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"18\" height=\"18\" viewBox=\"0 0 18 18\" fill=\"none\">\r\n <path d=\"M13.5 4.5L4.5 13.5M4.5 4.5L13.5 13.5\" stroke=\"#D0D5DD\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <div>\r\n <button type=\"button\" class=\"btn btn-outline\" (click)=\"addBrandMetaRow()\" [disabled]=\"isBrandMetaEdit\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M10.0001 4.16675V15.8334M4.16675 10.0001H15.8334\" stroke=\"#D0D5DD\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Add\r\n </button>\r\n </div>\r\n <div>\r\n <button type=\"button\" class=\"btn btn-outline\" *ngIf=\"!isBrandMetaEdit\" (click)=\"cancelBrandMetaEdit()\">Cancel</button>\r\n <button type=\"button\" class=\"btn btn-outline ms-2\" *ngIf=\"isBrandMetaEdit\" (click)=\"enableBrandMetaForm()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1775_37990)\">\r\n <path d=\"M14.1667 2.49993C14.3856 2.28106 14.6455 2.10744 14.9314 1.98899C15.2174 1.87054 15.5239 1.80957 15.8334 1.80957C16.1429 1.80957 16.4494 1.87054 16.7354 1.98899C17.0214 2.10744 17.2812 2.28106 17.5001 2.49993C17.719 2.7188 17.8926 2.97863 18.011 3.2646C18.1295 3.55057 18.1904 3.85706 18.1904 4.16659C18.1904 4.47612 18.1295 4.78262 18.011 5.06859C17.8926 5.35455 17.719 5.61439 17.5001 5.83326L6.25008 17.0833L1.66675 18.3333L2.91675 13.7499L14.1667 2.49993Z\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1775_37990\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg> Edit\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary ms-2\" *ngIf=\"!isBrandMetaEdit\" (click)=\"updateBrandMetaData()\">Save</button>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div *ngIf=\"selectedTab === 'task'\" >\r\n <div class=\"d-flex justify-content-between\">\r\n <div>\r\n <h3>Global configuration for tasks</h3>\r\n <p>The following configuration applies to all published tasks.</p>\r\n </div>\r\n <!-- <div>\r\n <button type=\"button\" class=\"btn btn-outline\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <path d=\"M17.5 12.5V15.8333C17.5 16.2754 17.3244 16.6993 17.0118 17.0118C16.6993 17.3244 16.2754 17.5 15.8333 17.5H4.16667C3.72464 17.5 3.30072 17.3244 2.98816 17.0118C2.67559 16.6993 2.5 16.2754 2.5 15.8333V12.5M14.1667 6.66667L10 2.5M10 2.5L5.83333 6.66667M10 2.5V12.5\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </svg> Upload Brands\r\n </button>\r\n </div> -->\r\n </div>\r\n <ng-container >\r\n <form [formGroup]=\"taskForm\">\r\n <div class=\"row\">\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label\">\r\n Due days (to complete task)\r\n </label>\r\n <input type=\"text\" class=\"form-control\" formControlName=\"dueDay\"/>\r\n </div>\r\n <div class=\"col-md-4\">\r\n <label class=\"form-label\">\r\n Due time\r\n </label>\r\n <input type=\"time\" class=\"form-control\" formControlName=\"dueTime\"/>\r\n </div>\r\n <div\r\n class=\"checklistturnoff ms-3 mt-4 fv-plugins-icon-containe col-md-8 divWidth\">\r\n <div class=\"form-check form-switch\">\r\n <input class=\"form-check-input mt-3\" type=\"checkbox\"\r\n id=\"geoFencing\" [checked]=\"taskForm.get('allowedStoreLocation')?.value\" formControlName=\"allowedStoreLocation\">\r\n <label class=\"form-check-label sub\" [ngClass]=\"taskForm.get('allowedStoreLocation')?.value ? 'active' : ''\" for=\"geoFencing\">Geo\r\n fencing\r\n </label><br>\r\n <label class=\"form-check-label subtext\" [ngClass]=\"taskForm.get('allowedStoreLocation')?.value ? 'active' : ''\" for=\"geoFencing\">By\r\n enabling, the checklist can be filled by the user only when\r\n inside the store.</label>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n <div class=\"d-flex justify-content-between mt-10\">\r\n <button type=\"button\" class=\"btn btn-outline\" *ngIf=\"isEdit\" (click)=\"isEdit = false;taskForm.enable()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\">\r\n <g clip-path=\"url(#clip0_1775_37985)\">\r\n <path d=\"M14.1667 2.49993C14.3856 2.28106 14.6455 2.10744 14.9314 1.98899C15.2174 1.87054 15.5239 1.80957 15.8334 1.80957C16.1429 1.80957 16.4494 1.87054 16.7354 1.98899C17.0214 2.10744 17.2812 2.28106 17.5001 2.49993C17.719 2.7188 17.8926 2.97863 18.011 3.2646C18.1295 3.55057 18.1904 3.85706 18.1904 4.16659C18.1904 4.47612 18.1295 4.78262 18.011 5.06859C17.8926 5.35455 17.719 5.61439 17.5001 5.83326L6.25008 17.0833L1.66675 18.3333L2.91675 13.7499L14.1667 2.49993Z\" stroke=\"#344054\" stroke-width=\"1.67\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n </g>\r\n <defs>\r\n <clipPath id=\"clip0_1775_37985\">\r\n <rect width=\"20\" height=\"20\" fill=\"white\"/>\r\n </clipPath>\r\n </defs>\r\n </svg> Edit\r\n </button>\r\n <button type=\"button\" class=\"btn btn-primary\" *ngIf=\"!isEdit\" (click)=\"updateTask()\">\r\n Save\r\n </button>\r\n </div>\r\n </ng-container>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n", styles: [".s-card{border-radius:8px;background:#fff;padding:20px 16px;height:75vh;overflow-y:auto}.m-card{border-radius:8px;background:#fff;padding:20px 16px;height:75vh;max-height:75vh;overflow-y:auto}.planoConfig{color:var(--Gray-700, #344054);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}::ng-deep .planoConfig .active,.active .configText{border-radius:6px;background:var(--Primary-50, #EAF8FF);color:var(--Primary-700, #009BF3)!important;font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.configText{color:var(--Gray-700, #344054);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.chip-box{position:relative}.chip-box .form-control{padding-top:0;padding-bottom:0}.chip-box .input-container{min-height:auto;max-height:100px!important;overflow:auto;width:100%;display:flex;flex-wrap:wrap}.chip-box .input-container input{all:unset;flex:1;min-width:50px}.chip-box .input-container .chip{margin:10px 0 10px 10px;padding:3px 10px;border-radius:16px;background:var(--Gray-100, #F2F4F7);color:var(--Gray-700, #344054);font-family:Inter;font-size:14px;font-weight:500;line-height:20px}.chip-box .input-container .chip:nth-child(1){margin-left:0}.checklistturnoff{border-radius:8px;border:1px solid var(--gray-200, #EAECF0);background:var(--white, #FFF);display:flex;padding:16px;align-items:flex-start;align-self:stretch}.sub{color:var(--gray-700, #101828);font-family:Inter;font-size:16px;font-style:normal;font-weight:500;line-height:24px}.subText{color:var(--gray-700, #101828);font-family:Inter;font-size:14px;font-style:normal;font-weight:500;line-height:24px}.sub.active,.subtext.active{color:var(--Primary-800, #008EDF)!important}.divWidth{width:65%}.brandCat{width:30%;margin-left:1%}.danger{border:1px solid red!important}.danger-flash{animation:danger-flash 1.4s ease-out}@keyframes danger-flash{0%{background-color:#fee4e2;box-shadow:0 0 0 3px #f0443859}to{background-color:transparent;box-shadow:0 0 #f0443800}}.disabledText{color:var(--bs-gray-500);background-color:var(--bs-gray-200);border-color:var(--bs-gray-300);opacity:1}\n"] }]
272
428
  }], ctorParameters: () => [{ type: i1.FormBuilder }, { type: i2.PlanoDataService }, { type: i3.GlobalStateService }, { type: i4.StoreBuilderService }, { type: i5.ToastService }, { type: i6.NgbModal }, { type: i0.ChangeDetectorRef }, { type: i3.PageInfoService }], propDecorators: { formRef: [{
273
429
  type: ViewChild,
274
430
  args: ['formRef']
431
+ }], brandMetaRef: [{
432
+ type: ViewChild,
433
+ args: ['brandMetaRef']
275
434
  }] } });
276
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbm8tY29uZmlndXJhdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tY29uZmlndXJhdGlvbnMvcGxhbm8tY29uZmlndXJhdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tY29uZmlndXJhdGlvbnMvcGxhbm8tY29uZmlndXJhdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQXNCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBSUwsV0FBVyxFQUVYLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBTXhCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7O0FBUTVELE1BQU0sT0FBTyw0QkFBNEI7SUFVN0I7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQWhCYSxPQUFPLENBQWE7SUFDM0MsV0FBVyxHQUFXLE9BQU8sQ0FBQztJQUM5QixJQUFJLENBQWE7SUFDakIsUUFBUSxDQUFTO0lBQ2pCLFVBQVUsR0FBbUIsRUFBRSxDQUFDO0lBQ2hDLE9BQU8sR0FBWSxJQUFJLENBQUM7SUFDeEIsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUN4QixRQUFRLENBQVk7SUFDcEIsWUFDVSxFQUFlLEVBQ2YsV0FBNkIsRUFDN0IsRUFBc0IsRUFDdEIsY0FBbUMsRUFDbkMsS0FBbUIsRUFDbkIsWUFBc0IsRUFDdEIsRUFBcUIsRUFDckIsUUFBeUI7UUFQekIsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQUNmLGdCQUFXLEdBQVgsV0FBVyxDQUFrQjtRQUM3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QUcsRUFBRSxFQUFFO1lBQ2pDLElBQUksR0FBRyxFQUFFO2dCQUNQLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQzthQUM3RDtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFVBQVU7UUFDUixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQWMsQ0FBQztRQUUxRCxTQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQXdCLEVBQUUsRUFBRTtZQUN0RCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLEVBQUU7Z0JBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7Z0JBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUM7YUFDdEM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7d0dBbFRVLDRCQUE0Qjs0RkFBNUIsNEJBQTRCLG9LQ3RCekMsMmp5QkFrUUE7OzRGRDVPYSw0QkFBNEI7a0JBTHhDLFNBQVM7K0JBQ0UsMEJBQTBCO2tTQUtiLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtcclxuICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgRm9ybUFycmF5LFxyXG4gIEZvcm1CdWlsZGVyLFxyXG4gIEZvcm1Db250cm9sLFxyXG4gIEZvcm1Hcm91cCxcclxuICBWYWxpZGF0b3JzLFxyXG59IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gXCJAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcFwiO1xyXG5pbXBvcnQgeyBHbG9iYWxTdGF0ZVNlcnZpY2UsIFBhZ2VJbmZvU2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktZ2xvYmFsXCI7XHJcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gXCJ0YW5nby1hcHAtdWktc2hhcmVkXCI7XHJcbmltcG9ydCB7IFBsYW5vRGF0YVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvcGxhbm8tZGF0YS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFN0b3JlQnVpbGRlclNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2VydmljZXMvc3RvcmUtYnVpbGRlci5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFBvcHVwc0NvbXBvbmVudCB9IGZyb20gXCIuL3BvcHVwcy9wb3B1cHMuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7IEJyYW5kRGV0YWlscyB9IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL3ZtLWxpYnJhcnkuaW50ZXJmYWNlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogXCJsaWItcGxhbm8tY29uZmlndXJhdGlvbnNcIixcclxuICB0ZW1wbGF0ZVVybDogXCIuL3BsYW5vLWNvbmZpZ3VyYXRpb25zLmNvbXBvbmVudC5odG1sXCIsXHJcbiAgc3R5bGVVcmw6IFwiLi9wbGFuby1jb25maWd1cmF0aW9ucy5jb21wb25lbnQuc2Nzc1wiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUGxhbm9Db25maWd1cmF0aW9uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgIEBWaWV3Q2hpbGQoJ2Zvcm1SZWYnKSBmb3JtUmVmOiBFbGVtZW50UmVmO1xyXG4gIHNlbGVjdGVkVGFiOiBzdHJpbmcgPSBcImJyYW5kXCI7XHJcbiAgZm9ybSE6IEZvcm1Hcm91cDtcclxuICBjbGllbnRJZDogc3RyaW5nO1xyXG4gIGJyYW5kc0xpc3Q6IEJyYW5kRGV0YWlsc1tdID0gW107XHJcbiAgbG9hZGluZzogYm9vbGVhbiA9IHRydWU7XHJcbiAgaXNFZGl0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgdGFza0Zvcm06IEZvcm1Hcm91cDtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgZmI6IEZvcm1CdWlsZGVyLFxyXG4gICAgcHJpdmF0ZSBkYXRhU2VydmljZTogUGxhbm9EYXRhU2VydmljZSxcclxuICAgIHByaXZhdGUgZ3M6IEdsb2JhbFN0YXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgYnVpbGRlclNlcnZpY2U6IFN0b3JlQnVpbGRlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG1vZGVsU2VydmljZTogTmdiTW9kYWwsXHJcbiAgICBwcml2YXRlIGNkOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgcGFnZUluZm86IFBhZ2VJbmZvU2VydmljZVxyXG4gICkge31cclxuXHJcbiAgYXN5bmMgbmdPbkluaXQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLnNldFBhZ2VEYXRhKCk7XHJcbiAgICB0aGlzLmluaXRGb3JtKCk7XHJcbiAgICB0aGlzLmdzLmRhdGFSYW5nZVZhbHVlLnN1YnNjcmliZShhc3luYyAoZGF0YSkgPT4ge1xyXG4gICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuY2xpZW50SWQgPSBkYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgdGhpcy5sb2FkQnJhbmREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkVGFza0RhdGEoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSBhcyBzdHJpbmcpO1xyXG4gICAgICAgIHRoaXMuY2xpZW50SWQgPSBkYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgdGhpcy5sb2FkQnJhbmREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkVGFza0RhdGEoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRQYWdlRGF0YSgpIHtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0VGl0bGUoXCJDb25maWd1cmF0aW9uXCIpO1xyXG4gICAgdGhpcy5wYWdlSW5mby5zZXRCcmVhZGNydW1icyhbXHJcbiAgICAgIHtcclxuICAgICAgICB0aXRsZTogXCJQbGFub2dyYW1cIixcclxuICAgICAgICBwYXRoOiBcIi9tYW5hZ2UvcGxhbm9ncmFtL21hbmFnZS1wbGFub2dyYW1zXCIsXHJcbiAgICAgICAgaXNBY3RpdmU6IGZhbHNlLFxyXG4gICAgICAgIGlzU2VwYXJhdG9yOiBmYWxzZSxcclxuICAgICAgfSxcclxuICAgICAgeyB0aXRsZTogXCJcIiwgcGF0aDogXCJcIiwgaXNBY3RpdmU6IGZhbHNlLCBpc1NlcGFyYXRvcjogdHJ1ZSB9LFxyXG4gICAgXSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBsb2FkQnJhbmREYXRhKCkge1xyXG4gICAgYXdhaXQgdGhpcy5kYXRhU2VydmljZS5mZXRjaEJyYW5kc0xpc3QodGhpcy5jbGllbnRJZCk7XHJcbiAgICB0aGlzLmRhdGFTZXJ2aWNlLmJyYW5kc0xpc3Quc3Vic2NyaWJlKChlKSA9PiB7XHJcbiAgICAgIHRoaXMuYnJhbmRzTGlzdCA9IGU7XHJcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICBpZiAodGhpcy5icmFuZHNMaXN0Lmxlbmd0aCkge1xyXG4gICAgICAgIHRoaXMubG9hZERhdGEoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmFkZEJyYW5kKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbG9hZFRhc2tEYXRhKCkge1xyXG4gICAgdGhpcy5idWlsZGVyU2VydmljZS5nZXRUYXNrQ29uZmlnKHRoaXMuY2xpZW50SWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICB0aGlzLmlzRWRpdCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50YXNrRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgZHVlRGF5OiBbcmVzLmRhdGEuZHVlRGF5LCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIGR1ZVRpbWU6IFtyZXMuZGF0YS5kdWVUaW1lLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIGFsbG93ZWRTdG9yZUxvY2F0aW9uOiBbXHJcbiAgICAgICAgICAgIHJlcy5kYXRhLmFsbG93ZWRTdG9yZUxvY2F0aW9uLFxyXG4gICAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnRhc2tGb3JtLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWREYXRhKCkge1xyXG4gICAgdGhpcy5pc0VkaXQgPSB0cnVlO1xyXG4gICAgdGhpcy5mb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGJyYW5kQ29uZmlnOiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYnJhbmRzTGlzdC5mb3JFYWNoKChlOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICBjb25zdCBicmFuZEdyb3VwID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgYnJhbmQ6IFtcclxuICAgICAgICAgIHsgdmFsdWU6IGUuYnJhbmROYW1lLCBkaXNhYmxlZDogZS5pc1VzZWQgfSxcclxuICAgICAgICAgIFZhbGlkYXRvcnMucmVxdWlyZWQsXHJcbiAgICAgICAgXSxcclxuICAgICAgICBjYXRlZ29yeTogdGhpcy5mYi5hcnJheShlPy5jYXRlZ29yeSksXHJcbiAgICAgICAgc3ViQ2F0ZWdvcnk6IHRoaXMuZmIuYXJyYXkoZT8uc3ViQ2F0ZWdvcnkpLFxyXG4gICAgICAgIGlzVXNlZDogW2U/LmlzVXNlZF0sXHJcbiAgICAgIH0pO1xyXG5cclxuICAgICAgdGhpcy5icmFuZENvbmZpZy5wdXNoKGJyYW5kR3JvdXApO1xyXG4gICAgfSk7XHJcbiAgICB0aGlzLmZvcm0uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgfVxyXG5cclxuICBpbml0Rm9ybSgpIHtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBicmFuZENvbmZpZzogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLnRhc2tGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGR1ZURheTogWzEsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICBkdWVUaW1lOiBbXCIyMzo1OVwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgYWxsb3dlZFN0b3JlTG9jYXRpb246IFtmYWxzZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBicmFuZENvbmZpZygpOiBGb3JtQXJyYXkge1xyXG4gICAgcmV0dXJuIHRoaXMuZm9ybS5nZXQoXCJicmFuZENvbmZpZ1wiKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICBhZGRCcmFuZCgpIHtcclxuICAgIHRoaXMuYnJhbmRDb25maWcucHVzaChcclxuICAgICAgdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgICAgYnJhbmQ6IFtcIlwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICBjYXRlZ29yeTogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICAgICAgc3ViQ2F0ZWdvcnk6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBicmFuZEVsZW1lbnQgPSB0aGlzLmZvcm1SZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgIGAjdGV4dCR7dGhpcy5icmFuZENvbmZpZy5sZW5ndGggLSAxfWBcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmIChicmFuZEVsZW1lbnQpIHtcclxuICAgICAgICBicmFuZEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogXCJjZW50ZXJcIiwgYmVoYXZpb3I6IFwic21vb3RoXCIgfSk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEwMCk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVCcmFuZChpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmJyYW5kQ29uZmlnLnJlbW92ZUF0KGluZGV4KTtcclxuICB9XHJcblxyXG4gIGdldENhdGVnb3J5KGNhdEluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiAodGhpcy5icmFuZENvbmZpZy5hdChjYXRJbmRleCkgYXMgRm9ybUdyb3VwKS5nZXQoXHJcbiAgICAgIFwiY2F0ZWdvcnlcIlxyXG4gICAgKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVDYXRlZ29yeShpbmRleDogbnVtYmVyLCBjYXRJbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBjYXRlZ29yeUFycmF5ID0gKHRoaXMuYnJhbmRDb25maWcuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cCkuZ2V0KFxyXG4gICAgICBcImNhdGVnb3J5XCJcclxuICAgICkgYXMgRm9ybUFycmF5O1xyXG4gICAgY2F0ZWdvcnlBcnJheS5yZW1vdmVBdChjYXRJbmRleCk7XHJcbiAgfVxyXG5cclxuICBhZGRDYXRlZ29yeShldmVudDogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZT8udHJpbSgpO1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IGNhdGVnb3J5QXJyYXkgPSAodGhpcy5icmFuZENvbmZpZy5hdChpbmRleCkgYXMgRm9ybUdyb3VwKS5nZXQoXHJcbiAgICAgICAgXCJjYXRlZ29yeVwiXHJcbiAgICAgICkgYXMgRm9ybUFycmF5O1xyXG4gICAgICBjYXRlZ29yeUFycmF5LnB1c2gobmV3IEZvcm1Db250cm9sKHZhbHVlKSk7XHJcblxyXG4gICAgICBjb25zdCBpbnB1dFZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgICAgYGNhdGVnb3J5SW5wdXQke2luZGV4fWBcclxuICAgICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbDtcclxuICAgICAgaWYgKGlucHV0VmFsdWUpIHtcclxuICAgICAgICBpbnB1dFZhbHVlLnZhbHVlID0gXCJcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0U3ViQ2F0ZWdvcnkoY2F0SW5kZXg6IG51bWJlcikge1xyXG4gICAgcmV0dXJuICh0aGlzLmJyYW5kQ29uZmlnLmF0KGNhdEluZGV4KSBhcyBGb3JtR3JvdXApLmdldChcclxuICAgICAgXCJzdWJDYXRlZ29yeVwiXHJcbiAgICApIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIHJlbW92ZVN1YkNhdGVnb3J5KGluZGV4OiBudW1iZXIsIGNhdEluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IGNhdGVnb3J5QXJyYXkgPSAodGhpcy5icmFuZENvbmZpZy5hdChpbmRleCkgYXMgRm9ybUdyb3VwKS5nZXQoXHJcbiAgICAgIFwic3ViQ2F0ZWdvcnlcIlxyXG4gICAgKSBhcyBGb3JtQXJyYXk7XHJcbiAgICBjYXRlZ29yeUFycmF5LnJlbW92ZUF0KGNhdEluZGV4KTtcclxuICB9XHJcblxyXG4gIGFkZFN1YkNhdGVnb3J5KGV2ZW50OiBhbnksIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGNvbnN0IHZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlPy50cmltKCk7XHJcbiAgICBpZiAodmFsdWUpIHtcclxuICAgICAgY29uc3QgY2F0ZWdvcnlBcnJheSA9ICh0aGlzLmJyYW5kQ29uZmlnLmF0KGluZGV4KSBhcyBGb3JtR3JvdXApLmdldChcclxuICAgICAgICBcInN1YkNhdGVnb3J5XCJcclxuICAgICAgKSBhcyBGb3JtQXJyYXk7XHJcbiAgICAgIGNhdGVnb3J5QXJyYXkucHVzaChuZXcgRm9ybUNvbnRyb2wodmFsdWUpKTtcclxuXHJcbiAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcclxuICAgICAgICBgc3ViQ2F0ZWdvcnlJbnB1dCR7aW5kZXh9YFxyXG4gICAgICApIGFzIEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsO1xyXG4gICAgICBpZiAoaW5wdXRWYWx1ZSkge1xyXG4gICAgICAgIGlucHV0VmFsdWUudmFsdWUgPSBcIlwiO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjaGVja1VzZWQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuYnJhbmRDb25maWcuYXQoaW5kZXgpLmdldChcImlzVXNlZFwiKT8udmFsdWU7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVCcmFuZCgpIHtcclxuICAgIGxldCBicmFuZERhdGEgPSB0aGlzLmJyYW5kQ29uZmlnLnZhbHVlO1xyXG4gICAgaWYgKHRoaXMuZm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcIlJlcXVpcmVkIGZpZWxkIGlzIG1pc3NpbmdcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGxldCBkdXBsaWNhdGVzOiBhbnkgPSBbXTtcclxuICAgIGxldCBlcnJvcjogYW55ID0gW107XHJcbiAgICBsZXQgYnJhbmQ6IGFueSA9IGJyYW5kRGF0YS5mbGF0TWFwKChlbGU6IGFueSkgPT4gZWxlLmJyYW5kKTtcclxuICAgIGR1cGxpY2F0ZXMgPSBbXHJcbiAgICAgIC4uLm5ldyBTZXQoXHJcbiAgICAgICAgYnJhbmQuZmlsdGVyKChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IGJyYW5kLmluZGV4T2YoaXRlbSkgIT09IGluZGV4KVxyXG4gICAgICApLFxyXG4gICAgXTtcclxuICAgIGlmIChkdXBsaWNhdGVzLmxlbmd0aCkge1xyXG4gICAgICBlcnJvci5wdXNoKGAke2R1cGxpY2F0ZXMudG9TdHJpbmcoKX0gLSBicmFuZCBpcyBkdXBsaWNhdGVkYCk7XHJcbiAgICB9XHJcbiAgICBsZXQgY2F0ZWdvcnk6IGFueSA9IGJyYW5kRGF0YS5mbGF0TWFwKChlbGU6IGFueSkgPT4gZWxlLmNhdGVnb3J5KTtcclxuICAgIGxldCBkdXBsaWNhdGVDYXQgPSBbXHJcbiAgICAgIC4uLm5ldyBTZXQoXHJcbiAgICAgICAgY2F0ZWdvcnkuZmlsdGVyKFxyXG4gICAgICAgICAgKGl0ZW06IGFueSwgaW5kZXg6IGFueSkgPT4gY2F0ZWdvcnkuaW5kZXhPZihpdGVtKSAhPT0gaW5kZXhcclxuICAgICAgICApXHJcbiAgICAgICksXHJcbiAgICBdO1xyXG4gICAgaWYgKGR1cGxpY2F0ZUNhdC5sZW5ndGgpIHtcclxuICAgICAgZXJyb3IucHVzaChcclxuICAgICAgICBgJHtBcnJheS5mcm9tKGR1cGxpY2F0ZUNhdCkudG9TdHJpbmcoKX0gLSBicmFuZCBjYXRlZ29yeSBpcyBkdXBsaWNhdGVkYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKGVycm9yLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KGAke2Vycm9yLnRvU3RyaW5nKCl9IGApO1xyXG4gICAgfVxyXG4gICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgICBicmFuZERhdGE6IGJyYW5kRGF0YSxcclxuICAgICAgYnJhbmRVc2VkTGlzdDogdGhpcy5icmFuZHNMaXN0XHJcbiAgICAgICAgLmZpbHRlcigoZWxlOiBhbnkpID0+IGVsZS5pc1VzZWQpXHJcbiAgICAgICAgLm1hcCgoZWxlOiBhbnkpID0+IGVsZS5faWQpLFxyXG4gICAgfTtcclxuICAgIHRoaXMuYnVpbGRlclNlcnZpY2UuYWRkVXBkYXRlQnJhbmQoZGF0YSkuc3Vic2NyaWJlKFxyXG4gICAgICBhc3luYyAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRTdWNjZXNzVG9hc3QoXCJCcmFuZCBkZXRhaWxzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xyXG4gICAgICAgICAgdGhpcy5pc0VkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5mb3JtLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5kYXRhU2VydmljZS5mZXRjaEJyYW5kc0xpc3QodGhpcy5jbGllbnRJZCwgdHJ1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChcIlNvbWV0aGluZyB3ZW50IHdyb25nLi5cIik7XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVUYXNrKCkge1xyXG4gICAgbGV0IGRhdGEgPSB7XHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgICAuLi50aGlzLnRhc2tGb3JtLnZhbHVlLFxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmJ1aWxkZXJTZXJ2aWNlLnVwZGF0ZVRhc2soZGF0YSkuc3Vic2NyaWJlKFxyXG4gICAgICAocmVzOiBhbnkpID0+IHtcclxuICAgICAgICBpZiAocmVzICYmIHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5pc0VkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy50YXNrRm9ybS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KFwiVGFzayBkZXRhaWxzIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXCJTb21ldGhpbmcgd2VudCB3cm9uZy4uXCIpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgYnVsa1VwbG9hZCgpIHtcclxuICAgIGNvbnN0IG1vZGVsUmVmID0gdGhpcy5tb2RlbFNlcnZpY2Uub3BlbihQb3B1cHNDb21wb25lbnQsIHtcclxuICAgICAgY2VudGVyZWQ6IHRydWUsXHJcbiAgICB9KTtcclxuICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLmNsaWVudElkID0gdGhpcy5jbGllbnRJZDtcclxuICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRvdGFsSXRlbUNvdW50ID0gdGhpcy5icmFuZHNMaXN0Lmxlbmd0aDtcclxuICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLnRvdGFsSXRlbUNvdW50ID0gdGhpcy5icmFuZHNMaXN0Lmxlbmd0aDtcclxuICAgIG1vZGVsUmVmLmNvbXBvbmVudEluc3RhbmNlLmJyYW5kTGlzdCA9IHRoaXMuYnJhbmRzTGlzdDtcclxuXHJcbiAgICBtb2RlbFJlZi5yZXN1bHQudGhlbihhc3luYyAocmVzKSA9PiB7XHJcbiAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLmRhdGFTZXJ2aWNlLmZldGNoQnJhbmRzTGlzdCh0aGlzLmNsaWVudElkLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBmb3JtRW5hYmxlKCkge1xyXG4gICAgbGV0IGJyYW5kSW5mbyA9IHRoaXMuZm9ybS5nZXQoXCJicmFuZENvbmZpZ1wiKSBhcyBGb3JtQXJyYXk7XHJcblxyXG4gICAgYnJhbmRJbmZvLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCkgPT4ge1xyXG4gICAgICBpZiAoIWNvbnRyb2wuZ2V0KFwiaXNVc2VkXCIpPy52YWx1ZSkge1xyXG4gICAgICAgIGNvbnRyb2wuZ2V0KFwiYnJhbmRcIik/LmVuYWJsZSgpO1xyXG4gICAgICAgIGNvbnRyb2wuZ2V0KFwiY2F0ZWdvcnlcIik/LmVuYWJsZSgpO1xyXG4gICAgICAgIGNvbnRyb2wuZ2V0KFwic3ViQ2F0ZWdvcnlcIik/LmVuYWJsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIHBsYW5vQ29uZmlnXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInMtY2FyZFwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGN1cnNvci1wb2ludGVyIHAtMyBtYi0zXCIgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYWIgPT09ICdicmFuZCcgPyAnYWN0aXZlJyA6ICcnXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFiID0nYnJhbmQnO2lzRWRpdD10cnVlO2Zvcm0uZGlzYWJsZSgpO3Rhc2tGb3JtLmRpc2FibGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNC4xNzU1IDQuMjIyMjVDMTQuMTc2NiAyLjk5NDQ1IDExLjY3MzEgMiA4LjU4ODMyIDJDNS41MDM1NyAyIDMuMDAyMjQgMi45OTU1NyAzIDQuMjIyMjVNMyA0LjIyMjI1QzMgNS40NTAwNCA1LjUwMTMzIDYuNDQ0NDkgOC41ODgzMiA2LjQ0NDQ5QzExLjY3NTMgNi40NDQ0OSAxNC4xNzY2IDUuNDUwMDQgMTQuMTc2NiA0LjIyMjI1TDE0LjE3NjYgMTIuODQ0NU0zIDQuMjIyMjVWMTcuNTU1NkMzLjAwMTEyIDE4Ljc4MzQgNS41MDI0NSAxOS43Nzc5IDguNTg4MzIgMTkuNzc3OUMxMC4wODQ5IDE5Ljc3NzkgMTEuNDM2MSAxOS41NDEyIDEyLjQzODcgMTkuMTYwMU0zLjAwMTEyIDguNjY2NzJDMy4wMDExMiA5Ljg5NDUxIDUuNTAyNDUgMTAuODg5IDguNTg5NDQgMTAuODg5QzExLjY3NjQgMTAuODg5IDE0LjE3NzggOS44OTQ1MSAxNC4xNzc4IDguNjY2NzJNMTIuNTA1NyAxNC42OTQ2QzExLjQ5NzYgMTUuMDg5MSAxMC4xMTUgMTUuMzMzNSA4LjU4ODMyIDE1LjMzMzVDNS41MDI0NSAxNS4zMzM1IDMuMDAxMTIgMTQuMzM5MSAzLjAwMTEyIDEzLjExMTNNMjAuNTI3MiAxMy40NjQ2QzIyLjQ5MDkgMTUuNDE2OSAyMi40OTA5IDE4LjU4MzYgMjAuNTI3MiAyMC41MzU4QzE4LjU2MzUgMjIuNDg4MSAxNS4zNzgxIDIyLjQ4ODEgMTMuNDE0NCAyMC41MzU4QzExLjQ1MDcgMTguNTgzNiAxMS40NTA3IDE1LjQxNjkgMTMuNDE0NCAxMy40NjQ2QzE1LjM3ODEgMTEuNTEyNCAxOC41NjM1IDExLjUxMjQgMjAuNTI3MiAxMy40NjQ2WlwiIFthdHRyLnN0cm9rZV09XCJzZWxlY3RlZFRhYiA9PT0gJ2JyYW5kJyA/ICcjMDBBM0ZGJyA6ICcjMzQ0MDU0J1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnVGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEJyYW5kIGFuZCBQcm9kdWN0IE1hcHBpbmdcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBjdXJzb3ItcG9pbnRlciBwLTMgbWItM1wiIFtuZ0NsYXNzXT1cInNlbGVjdGVkVGFiID09PSAndGFzaycgPyAnYWN0aXZlJyA6ICcnXCIgKGNsaWNrKT1cInNlbGVjdGVkVGFiID0ndGFzayc7aXNFZGl0PXRydWU7Zm9ybS5kaXNhYmxlKCk7dGFza0Zvcm0uZGlzYWJsZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZyBjbGlwLXBhdGg9XCJ1cmwoI2NsaXAwXzE3NzVfMzc5MzEpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgMTVDMTMuNjU2OSAxNSAxNSAxMy42NTY5IDE1IDEyQzE1IDEwLjM0MzEgMTMuNjU2OSA5IDEyIDlDMTAuMzQzMSA5IDkgMTAuMzQzMSA5IDEyQzkgMTMuNjU2OSAxMC4zNDMxIDE1IDEyIDE1WlwiIFthdHRyLnN0cm9rZV09XCJzZWxlY3RlZFRhYiA9PT0gJ3Rhc2snID8gJyMwMEEzRkYnIDogJyMzNDQwNTQnXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xOS40IDE1QzE5LjI2NjkgMTUuMzAxNiAxOS4yMjcyIDE1LjYzNjIgMTkuMjg2IDE1Ljk2MDZDMTkuMzQ0OCAxNi4yODUgMTkuNDk5NSAxNi41ODQzIDE5LjczIDE2LjgyTDE5Ljc5IDE2Ljg4QzE5Ljk3NiAxNy4wNjU3IDIwLjEyMzUgMTcuMjg2MyAyMC4yMjQxIDE3LjUyOTFDMjAuMzI0OCAxNy43NzE5IDIwLjM3NjYgMTguMDMyMiAyMC4zNzY2IDE4LjI5NUMyMC4zNzY2IDE4LjU1NzggMjAuMzI0OCAxOC44MTgxIDIwLjIyNDEgMTkuMDYwOUMyMC4xMjM1IDE5LjMwMzcgMTkuOTc2IDE5LjUyNDMgMTkuNzkgMTkuNzFDMTkuNjA0MyAxOS44OTYgMTkuMzgzNyAyMC4wNDM1IDE5LjE0MDkgMjAuMTQ0MUMxOC44OTgxIDIwLjI0NDggMTguNjM3OCAyMC4yOTY2IDE4LjM3NSAyMC4yOTY2QzE4LjExMjIgMjAuMjk2NiAxNy44NTE5IDIwLjI0NDggMTcuNjA5MSAyMC4xNDQxQzE3LjM2NjMgMjAuMDQzNSAxNy4xNDU3IDE5Ljg5NiAxNi45NiAxOS43MUwxNi45IDE5LjY1QzE2LjY2NDMgMTkuNDE5NSAxNi4zNjUgMTkuMjY0OCAxNi4wNDA2IDE5LjIwNkMxNS43MTYyIDE5LjE0NzIgMTUuMzgxNiAxOS4xODY5IDE1LjA4IDE5LjMyQzE0Ljc4NDIgMTkuNDQ2OCAxNC41MzIgMTkuNjU3MiAxNC4zNTQzIDE5LjkyNTVDMTQuMTc2NiAyMC4xOTM4IDE0LjA4MTMgMjAuNTA4MiAxNC4wOCAyMC44M1YyMUMxNC4wOCAyMS41MzA0IDEzLjg2OTMgMjIuMDM5MSAxMy40OTQyIDIyLjQxNDJDMTMuMTE5MSAyMi43ODkzIDEyLjYxMDQgMjMgMTIuMDggMjNDMTEuNTQ5NiAyMyAxMS4wNDA5IDIyLjc4OTMgMTAuNjY1OCAyMi40MTQyQzEwLjI5MDcgMjIuMDM5MSAxMC4wOCAyMS41MzA0IDEwLjA4IDIxVjIwLjkxQzEwLjA3MjMgMjAuNTc5IDkuOTY1MTIgMjAuMjU4IDkuNzcyNTEgMTkuOTg4N0M5LjU3OTkgMTkuNzE5NCA5LjMxMDc0IDE5LjUxNDMgOSAxOS40QzguNjk4MzggMTkuMjY2OSA4LjM2MzgxIDE5LjIyNzIgOC4wMzk0MSAxOS4yODZDNy43MTUwMiAxOS4zNDQ4IDcuNDE1NjggMTkuNDk5NSA3LjE4IDE5LjczTDcuMTIgMTkuNzlDNi45MzQyNSAxOS45NzYgNi43MTM2OCAyMC4xMjM1IDYuNDcwODggMjAuMjI0MUM2LjIyODA4IDIwLjMyNDggNS45Njc4MyAyMC4zNzY2IDUuNzA1IDIwLjM3NjZDNS40NDIxNyAyMC4zNzY2IDUuMTgxOTIgMjAuMzI0OCA0LjkzOTEyIDIwLjIyNDFDNC42OTYzMiAyMC4xMjM1IDQuNDc1NzUgMTkuOTc2IDQuMjkgMTkuNzlDNC4xMDQwNSAxOS42MDQzIDMuOTU2NTMgMTkuMzgzNyAzLjg1NTg4IDE5LjE0MDlDMy43NTUyMyAxOC44OTgxIDMuNzAzNDMgMTguNjM3OCAzLjcwMzQzIDE4LjM3NUMzLjcwMzQzIDE4LjExMjIgMy43NTUyMyAxNy44NTE5IDMuODU1ODggMTcuNjA5MUMzLjk1NjUzIDE3LjM2NjMgNC4xMDQwNSAxNy4xNDU3IDQuMjkgMTYuOTZMNC4zNSAxNi45QzQuNTgwNTQgMTYuNjY0MyA0LjczNTE5IDE2LjM2NSA0Ljc5NCAxNi4wNDA2QzQuODUyODIgMTUuNzE2MiA0LjgxMzEyIDE1LjM4MTYgNC42OCAxNS4wOEM0LjU1MzI0IDE0Ljc4NDIgNC4zNDI3NiAxNC41MzIgNC4wNzQ0NyAxNC4zNTQzQzMuODA2MTggMTQuMTc2NiAzLjQ5MTc5IDE0LjA4MTMgMy4xNyAxNC4wOEgzQzIuNDY5NTcgMTQuMDggMS45NjA4NiAxMy44NjkzIDEuNTg1NzkgMTMuNDk0MkMxLjIxMDcxIDEzLjExOTEgMSAxMi42MTA0IDEgMTIuMDhDMSAxMS41NDk2IDEuMjEwNzEgMTEuMDQwOSAxLjU4NTc5IDEwLjY2NThDMS45NjA4NiAxMC4yOTA3IDIuNDY5NTcgMTAuMDggMyAxMC4wOEgzLjA5QzMuNDIwOTkgMTAuMDcyMyAzLjc0MiA5Ljk2NTEyIDQuMDExMyA5Ljc3MjUxQzQuMjgwNTkgOS41Nzk5IDQuNDg1NzIgOS4zMTA3NCA0LjYgOUM0LjczMzEyIDguNjk4MzggNC43NzI4MiA4LjM2MzgxIDQuNzE0IDguMDM5NDFDNC42NTUxOSA3LjcxNTAyIDQuNTAwNTQgNy40MTU2OCA0LjI3IDcuMThMNC4yMSA3LjEyQzQuMDI0MDUgNi45MzQyNSAzLjg3NjUzIDYuNzEzNjggMy43NzU4OCA2LjQ3MDg4QzMuNjc1MjMgNi4yMjgwOCAzLjYyMzQzIDUuOTY3ODMgMy42MjM0MyA1LjcwNUMzLjYyMzQzIDUuNDQyMTcgMy42NzUyMyA1LjE4MTkyIDMuNzc1ODggNC45MzkxMkMzLjg3NjUzIDQuNjk2MzIgNC4wMjQwNSA0LjQ3NTc1IDQuMjEgNC4yOUM0LjM5NTc1IDQuMTA0MDUgNC42MTYzMiAzLjk1NjUzIDQuODU5MTIgMy44NTU4OEM1LjEwMTkyIDMuNzU1MjMgNS4zNjIxNyAzLjcwMzQzIDUuNjI1IDMuNzAzNDNDNS44ODc4MyAzLjcwMzQzIDYuMTQ4MDggMy43NTUyMyA2LjM5MDg4IDMuODU1ODhDNi42MzM2OCAzLjk1NjUzIDYuODU0MjUgNC4xMDQwNSA3LjA0IDQuMjlMNy4xIDQuMzVDNy4zMzU2OCA0LjU4MDU0IDcuNjM1MDIgNC43MzUxOSA3Ljk1OTQxIDQuNzk0QzguMjgzODEgNC44NTI4MiA4LjYxODM4IDQuODEzMTIgOC45MiA0LjY4SDlDOS4yOTU3NyA0LjU1MzI0IDkuNTQ4MDIgNC4zNDI3NiA5LjcyNTY5IDQuMDc0NDdDOS45MDMzNyAzLjgwNjE4IDkuOTk4NzIgMy40OTE3OSAxMCAzLjE3VjNDMTAgMi40Njk1NyAxMC4yMTA3IDEuOTYwODYgMTAuNTg1OCAxLjU4NTc5QzEwLjk2MDkgMS4yMTA3MSAxMS40Njk2IDEgMTIgMUMxMi41MzA0IDEgMTMuMDM5MSAxLjIxMDcxIDEzLjQxNDIgMS41ODU3OUMxMy43ODkzIDEuOTYwODYgMTQgMi40Njk1NyAxNCAzVjMuMDlDMTQuMDAxMyAzLjQxMTc5IDE0LjA5NjYgMy43MjYxOCAxNC4yNzQzIDMuOTk0NDdDMTQuNDUyIDQuMjYyNzYgMTQuNzA0MiA0LjQ3MzI0IDE1IDQuNkMxNS4zMDE2IDQuNzMzMTIgMTUuNjM2MiA0Ljc3MjgyIDE1Ljk2MDYgNC43MTRDMTYuMjg1IDQuNjU1MTkgMTYuNTg0MyA0LjUwMDU0IDE2LjgyIDQuMjdMMTYuODggNC4yMUMxNy4wNjU3IDQuMDI0MDUgMTcuMjg2MyAzLjg3NjUzIDE3LjUyOTEgMy43NzU4OEMxNy43NzE5IDMuNjc1MjMgMTguMDMyMiAzLjYyMzQzIDE4LjI5NSAzLjYyMzQzQzE4LjU1NzggMy42MjM0MyAxOC44MTgxIDMuNjc1MjMgMTkuMDYwOSAzLjc3NTg4QzE5LjMwMzcgMy44NzY1MyAxOS41MjQzIDQuMDI0MDUgMTkuNzEgNC4yMUMxOS44OTYgNC4zOTU3NSAyMC4wNDM1IDQuNjE2MzIgMjAuMTQ0MSA0Ljg1OTEyQzIwLjI0NDggNS4xMDE5MiAyMC4yOTY2IDUuMzYyMTcgMjAuMjk2NiA1LjYyNUMyMC4yOTY2IDUuODg3ODMgMjAuMjQ0OCA2LjE0ODA4IDIwLjE0NDEgNi4zOTA4OEMyMC4wNDM1IDYuNjMzNjggMTkuODk2IDYuODU0MjUgMTkuNzEgNy4wNEwxOS42NSA3LjFDMTkuNDE5NSA3LjMzNTY4IDE5LjI2NDggNy42MzUwMiAxOS4yMDYgNy45NTk0MUMxOS4xNDcyIDguMjgzODEgMTkuMTg2OSA4LjYxODM4IDE5LjMyIDguOTJWOUMxOS40NDY4IDkuMjk1NzcgMTkuNjU3MiA5LjU0ODAyIDE5LjkyNTUgOS43MjU2OUMyMC4xOTM4IDkuOTAzMzcgMjAuNTA4MiA5Ljk5ODcyIDIwLjgzIDEwSDIxQzIxLjUzMDQgMTAgMjIuMDM5MSAxMC4yMTA3IDIyLjQxNDIgMTAuNTg1OEMyMi43ODkzIDEwLjk2MDkgMjMgMTEuNDY5NiAyMyAxMkMyMyAxMi41MzA0IDIyLjc4OTMgMTMuMDM5MSAyMi40MTQyIDEzLjQxNDJDMjIuMDM5MSAxMy43ODkzIDIxLjUzMDQgMTQgMjEgMTRIMjAuOTFDMjAuNTg4MiAxNC4wMDEzIDIwLjI3MzggMTQuMDk2NiAyMC4wMDU1IDE0LjI3NDNDMTkuNzM3MiAxNC40NTIgMTkuNTI2OCAxNC43MDQyIDE5LjQgMTVaXCIgW2F0dHIuc3Ryb2tlXT1cInNlbGVjdGVkVGFiID09PSAndGFzaycgPyAnIzAwQTNGRicgOiAnIzM0NDA1NCdcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xNzc1XzM3OTMxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jbGlwUGF0aD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZ1RleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICBUYXNrIENvbmZpZ3VyYXRpb25cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCIgaWQ9XCJjb25maWdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWNhcmRcIiAqbmdJZj1cIiFsb2FkaW5nXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0gJ2JyYW5kJ1wiID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+QnJhbmQgYW5kIHByb2R1Y3QgaW5mb3JtYXRpb248L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5EZWZpbmUgdGhlIGJyYW5kIGFuZCBtYXAgcHJvZHVjdHMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBjYXRlZ29yaWVzLjwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cImJ1bGtVcGxvYWQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTE0LjE2NjcgNi42NjY2N0wxMCAyLjVNMTAgMi41TDUuODMzMzMgNi42NjY2N00xMCAyLjVWMTIuNVwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPiBVcGxvYWQgQnJhbmRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJtdC0xMFwiICNmb3JtUmVmPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJicmFuZENvbmZpZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBteC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IHAtMCBwcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWxhYmVsXCI+QnJhbmQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgcC0wIHBzLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tbGFiZWxcIj5Qcm9kdWN0IENhdGVnb3J5PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IHAtMCBwcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UHJvZHVjdCBTdWItQ2F0ZWdvcnk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImhlaWdodDpjYWxjKDc1dmggLSAyNTBweCk7b3ZlcmZsb3cteTpTY3JvbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBicmFuZEdyb3VwIG9mIGJyYW5kQ29uZmlnPy5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiIFtmb3JtR3JvdXBOYW1lXT1cImlcIiBjbGFzcz1cInJvdyBtdC0zIG14LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IHAtMCBwcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwXCIgW2lkXT1cIid0ZXh0JytpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiYnJhbmRcIiBbbmdDbGFzc109XCJicmFuZHNMaXN0Lmxlbmd0aCAmJiAhaXNFZGl0ICYmICFjaGVja1VzZWQoaSkgJiYgYnJhbmRHcm91cC5nZXQoJ2JyYW5kJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpID8gJ2RhbmdlcicgOiAnJ1wiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXMtMyBtdC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTUgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNC43MDcxIDguNzA3MTFDMTUuMDk3NiA4LjMxNjU4IDE1LjA5NzYgNy42ODM0MiAxNC43MDcxIDcuMjkyODlMOC4zNDMxNSAwLjkyODkzMkM3Ljk1MjYyIDAuNTM4NDA4IDcuMzE5NDYgMC41Mzg0MDggNi45Mjg5MyAwLjkyODkzMkM2LjUzODQxIDEuMzE5NDYgNi41Mzg0MSAxLjk1MjYyIDYuOTI4OTMgMi4zNDMxNUwxMi41ODU4IDhMNi45Mjg5MyAxMy42NTY5QzYuNTM4NDEgMTQuMDQ3NCA2LjUzODQxIDE0LjY4MDUgNi45Mjg5MyAxNS4wNzExQzcuMzE5NDYgMTUuNDYxNiA3Ljk1MjYyIDE1LjQ2MTYgOC4zNDMxNSAxNS4wNzExTDE0LjcwNzEgOC43MDcxMVpNMCA4VjlIMTRWOFY3SDBWOFpcIiBmaWxsPVwiI0QwRDVERFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgcC0wIHBzLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgY2hpcC1ib3hcIiBmb3JtQXJyYXlOYW1lPVwiY2F0ZWdvcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWNvbnRhaW5lciBmb3JtLWNvbnRyb2xcIiBbbmdDbGFzc109XCJicmFuZHNMaXN0Lmxlbmd0aCAmJiAhaXNFZGl0ICYmICFjaGVja1VzZWQoaSkgJiYgYnJhbmRHcm91cC5nZXQoJ2NhdGVnb3J5Jyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpID8gJ2RhbmdlcicgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRDYXRlZ29yeShpKT8uY29udHJvbHM7bGV0IGo9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0zXCIgW25nQ2xhc3NdPVwiaXNFZGl0IHx8IGNoZWNrVXNlZChpKSA/ICdkaXNhYmxlZFRleHQnIDogJydcIj57e2l0ZW0udmFsdWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImlzRWRpdCB8fCBjaGVja1VzZWQoaSkgPyAnJyA6cmVtb3ZlQ2F0ZWdvcnkoaSxqKVwiIFtjbGFzc109XCJpc0VkaXQgfHwgY2hlY2tVc2VkKGkpID8gJ2Rpc2FibGVkVGV4dCc6J2N1cnNvci1wb2ludGVyJ1wiPjxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDNMMyA5TTMgM0w5IDlcIiBbYXR0ci5zdHJva2VdPVwiaXNFZGl0IHx8IGNoZWNrVXNlZChpKSA/ICcjYWViNGM1JyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwibWluLWhlaWdodDogNDRweDtcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGRyb3Bkb3duLWlucHV0IHBzLTMgbWUtM1wiIChjaGFuZ2UpPVwiYWRkQ2F0ZWdvcnkoJGV2ZW50LGkpXCIgW2lkXT1cIidjYXRlZ29yeUlucHV0JytpXCIgW2Rpc2FibGVkXT1cImlzRWRpdCB8fCBjaGVja1VzZWQoaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJjYXRlZ29yeVwiIC8+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcy0zIG10LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNVwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNSAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0LjcwNzEgOC43MDcxMUMxNS4wOTc2IDguMzE2NTggMTUuMDk3NiA3LjY4MzQyIDE0LjcwNzEgNy4yOTI4OUw4LjM0MzE1IDAuOTI4OTMyQzcuOTUyNjIgMC41Mzg0MDggNy4zMTk0NiAwLjUzODQwOCA2LjkyODkzIDAuOTI4OTMyQzYuNTM4NDEgMS4zMTk0NiA2LjUzODQxIDEuOTUyNjIgNi45Mjg5MyAyLjM0MzE1TDEyLjU4NTggOEw2LjkyODkzIDEzLjY1NjlDNi41Mzg0MSAxNC4wNDc0IDYuNTM4NDEgMTQuNjgwNSA2LjkyODkzIDE1LjA3MTFDNy4zMTk0NiAxNS40NjE2IDcuOTUyNjIgMTUuNDYxNiA4LjM0MzE1IDE1LjA3MTFMMTQuNzA3MSA4LjcwNzExWk0wIDhWOUgxNFY4VjdIMFY4WlwiIGZpbGw9XCIjRDBENUREXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IHAtMCBwcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGNoaXAtYm94XCIgZm9ybUFycmF5TmFtZT1cInN1YkNhdGVnb3J5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jb250YWluZXIgZm9ybS1jb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldFN1YkNhdGVnb3J5KGkpPy5jb250cm9scztsZXQgaj1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTNcIiBbbmdDbGFzc109XCJpc0VkaXQgfHwgY2hlY2tVc2VkKGkpID8gJ2Rpc2FibGVkVGV4dCcgOiAnJ1wiPnt7aXRlbS52YWx1ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiaXNFZGl0IHx8IGNoZWNrVXNlZChpKSA/ICcnIDogcmVtb3ZlU3ViQ2F0ZWdvcnkoaSxqKVwiIFtjbGFzc109XCJpc0VkaXQgfHwgY2hlY2tVc2VkKGkpID8gJyc6J2N1cnNvci1wb2ludGVyJ1wiPjxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDNMMyA5TTMgM0w5IDlcIiBbYXR0ci5zdHJva2VdPVwiaXNFZGl0IHx8IGNoZWNrVXNlZChpKSA/ICcjYWViNGM1JyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwibWluLWhlaWdodDogNDRweDtcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGRyb3Bkb3duLWlucHV0IHBzLTMgbWUtM1wiIChjaGFuZ2UpPVwiYWRkU3ViQ2F0ZWdvcnkoJGV2ZW50LGkpXCIgW2lkXT1cIidzdWJDYXRlZ29yeUlucHV0JytpXCIgW2Rpc2FibGVkXT1cImlzRWRpdCB8fCBjaGVja1VzZWQoaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJjYXRlZ29yeVwiIC8+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcy0zIG10LTRcIiAoY2xpY2spPVwiY2hlY2tVc2VkKGkpIHx8IGlzRWRpdCA/ICcnIDogcmVtb3ZlQnJhbmQoaSlcIiAqbmdJZj1cImJyYW5kQ29uZmlnLnZhbHVlLmxlbmd0aCA+IDFcIiBbbmdDbGFzc109XCJjaGVja1VzZWQoaSkgfHwgaXNFZGl0ID8gJ2N1cnNvci1kZWZhdWx0JyA6ICdjdXJzb3ItcG9pbnRlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEzLjUgNC41TDQuNSAxMy41TTQuNSA0LjVMMTMuNSAxMy41XCIgc3Ryb2tlPVwiI0QwRDVERFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIChjbGljayk9XCJhZGRCcmFuZCgpXCIgW2Rpc2FibGVkXT1cImlzRWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjAwMDEgNC4xNjY3NVYxNS44MzM0TTQuMTY2NzUgMTAuMDAwMUgxNS44MzM0XCIgc3Ryb2tlPVwiI0QwRDVERFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+IEFkZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiAqbmdJZj1cImlzRWRpdFwiIChjbGljayk9XCJpc0VkaXQgPSBmYWxzZTtmb3JtRW5hYmxlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xNzc1XzM3OTg1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNC4xNjY3IDIuNDk5OTNDMTQuMzg1NiAyLjI4MTA2IDE0LjY0NTUgMi4xMDc0NCAxNC45MzE0IDEuOTg4OTlDMTUuMjE3NCAxLjg3MDU0IDE1LjUyMzkgMS44MDk1NyAxNS44MzM0IDEuODA5NTdDMTYuMTQyOSAxLjgwOTU3IDE2LjQ0OTQgMS44NzA1NCAxNi43MzU0IDEuOTg4OTlDMTcuMDIxNCAyLjEwNzQ0IDE3LjI4MTIgMi4yODEwNiAxNy41MDAxIDIuNDk5OTNDMTcuNzE5IDIuNzE4OCAxNy44OTI2IDIuOTc4NjMgMTguMDExIDMuMjY0NkMxOC4xMjk1IDMuNTUwNTcgMTguMTkwNCAzLjg1NzA2IDE4LjE5MDQgNC4xNjY1OUMxOC4xOTA0IDQuNDc2MTIgMTguMTI5NSA0Ljc4MjYyIDE4LjAxMSA1LjA2ODU5QzE3Ljg5MjYgNS4zNTQ1NSAxNy43MTkgNS42MTQzOSAxNy41MDAxIDUuODMzMjZMNi4yNTAwOCAxNy4wODMzTDEuNjY2NzUgMTguMzMzM0wyLjkxNjc1IDEzLjc0OTlMMTQuMTY2NyAyLjQ5OTkzWlwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTc3NV8zNzk4NVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4gRWRpdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiICpuZ0lmPVwiIWlzRWRpdFwiIChjbGljayk9XCJ1cGRhdGVCcmFuZCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2F2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09ICd0YXNrJ1wiID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+R2xvYmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRhc2tzPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+VGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIGFwcGxpZXMgdG8gYWxsIHB1Ymxpc2hlZCB0YXNrcy48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTE0LjE2NjcgNi42NjY2N0wxMCAyLjVNMTAgMi41TDUuODMzMzMgNi42NjY2N00xMCAyLjVWMTIuNVwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPiBVcGxvYWQgQnJhbmRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJ0YXNrRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1ZSBkYXlzICh0byBjb21wbGV0ZSB0YXNrKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJkdWVEYXlcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHVlIHRpbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGltZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZHVlVGltZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tsaXN0dHVybm9mZiBtcy0zIG10LTQgZnYtcGx1Z2lucy1pY29uLWNvbnRhaW5lIGNvbC1tZC04IGRpdldpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtdC0zXCIgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZ2VvRmVuY2luZ1wiIFtjaGVja2VkXT1cInRhc2tGb3JtLmdldCgnYWxsb3dlZFN0b3JlTG9jYXRpb24nKT8udmFsdWVcIiBmb3JtQ29udHJvbE5hbWU9XCJhbGxvd2VkU3RvcmVMb2NhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIHN1YlwiIFtuZ0NsYXNzXT1cInRhc2tGb3JtLmdldCgnYWxsb3dlZFN0b3JlTG9jYXRpb24nKT8udmFsdWUgPyAnYWN0aXZlJyA6ICcnXCIgZm9yPVwiZ2VvRmVuY2luZ1wiPkdlb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVuY2luZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPjxicj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBzdWJ0ZXh0XCIgW25nQ2xhc3NdPVwidGFza0Zvcm0uZ2V0KCdhbGxvd2VkU3RvcmVMb2NhdGlvbicpPy52YWx1ZSA/ICdhY3RpdmUnIDogJydcIiBmb3I9XCJnZW9GZW5jaW5nXCI+QnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsaW5nLCB0aGUgY2hlY2tsaXN0IGNhbiBiZSBmaWxsZWQgYnkgdGhlIHVzZXIgb25seSB3aGVuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNpZGUgdGhlIHN0b3JlLjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiAqbmdJZj1cImlzRWRpdFwiIChjbGljayk9XCJpc0VkaXQgPSBmYWxzZTt0YXNrRm9ybS5lbmFibGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xNzc1XzM3OTg1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0LjE2NjcgMi40OTk5M0MxNC4zODU2IDIuMjgxMDYgMTQuNjQ1NSAyLjEwNzQ0IDE0LjkzMTQgMS45ODg5OUMxNS4yMTc0IDEuODcwNTQgMTUuNTIzOSAxLjgwOTU3IDE1LjgzMzQgMS44MDk1N0MxNi4xNDI5IDEuODA5NTcgMTYuNDQ5NCAxLjg3MDU0IDE2LjczNTQgMS45ODg5OUMxNy4wMjE0IDIuMTA3NDQgMTcuMjgxMiAyLjI4MTA2IDE3LjUwMDEgMi40OTk5M0MxNy43MTkgMi43MTg4IDE3Ljg5MjYgMi45Nzg2MyAxOC4wMTEgMy4yNjQ2QzE4LjEyOTUgMy41NTA1NyAxOC4xOTA0IDMuODU3MDYgMTguMTkwNCA0LjE2NjU5QzE4LjE5MDQgNC40NzYxMiAxOC4xMjk1IDQuNzgyNjIgMTguMDExIDUuMDY4NTlDMTcuODkyNiA1LjM1NDU1IDE3LjcxOSA1LjYxNDM5IDE3LjUwMDEgNS44MzMyNkw2LjI1MDA4IDE3LjA4MzNMMS42NjY3NSAxOC4zMzMzTDIuOTE2NzUgMTMuNzQ5OUwxNC4xNjY3IDIuNDk5OTNaXCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xNzc1XzM3OTg1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+IEVkaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKm5nSWY9XCIhaXNFZGl0XCIgKGNsaWNrKT1cInVwZGF0ZVRhc2soKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2F2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbiJdfQ==
435
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbm8tY29uZmlndXJhdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tY29uZmlndXJhdGlvbnMvcGxhbm8tY29uZmlndXJhdGlvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tc3RvcmUtYnVpbGRlci9zcmMvbGliL2NvbXBvbmVudHMvcGxhbm8tY29uZmlndXJhdGlvbnMvcGxhbm8tY29uZmlndXJhdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQXNCLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBSUwsV0FBVyxFQUVYLFVBQVUsR0FDWCxNQUFNLGdCQUFnQixDQUFDO0FBTXhCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQzs7Ozs7Ozs7O0FBUTVELE1BQU0sT0FBTyw0QkFBNEI7SUFlN0I7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQXJCYSxPQUFPLENBQWE7SUFDZixZQUFZLENBQWE7SUFDckQsV0FBVyxHQUFXLE9BQU8sQ0FBQztJQUM5QixJQUFJLENBQWE7SUFDakIsUUFBUSxDQUFTO0lBQ2pCLFVBQVUsR0FBbUIsRUFBRSxDQUFDO0lBQ2hDLE9BQU8sR0FBWSxJQUFJLENBQUM7SUFDeEIsTUFBTSxHQUFZLEtBQUssQ0FBQztJQUN4QixRQUFRLENBQVk7SUFDcEIsYUFBYSxDQUFhO0lBQzFCLGFBQWEsR0FBVSxFQUFFLENBQUM7SUFDMUIsZUFBZSxHQUFZLElBQUksQ0FBQztJQUNoQyxlQUFlLEdBQVcsRUFBRSxDQUFDO0lBQzdCLFlBQ1UsRUFBZSxFQUNmLFdBQTZCLEVBQzdCLEVBQXNCLEVBQ3RCLGNB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QztZQUNsQyxPQUFPLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLHNCQUFzQjtRQUN4QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQzlDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsQ0FDL0IsQ0FBQyxNQUFNLENBQUM7SUFDWCxDQUFDO3dHQTllVSw0QkFBNEI7NEZBQTVCLDRCQUE0QixtUUN0QnpDLDRrbENBcVdBOzs0RkQvVWEsNEJBQTRCO2tCQUx4QyxTQUFTOytCQUNFLDBCQUEwQjtrU0FLYixPQUFPO3NCQUE1QixTQUFTO3VCQUFDLFNBQVM7Z0JBQ08sWUFBWTtzQkFBdEMsU0FBUzt1QkFBQyxjQUFjIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gIEFic3RyYWN0Q29udHJvbCxcclxuICBGb3JtQXJyYXksXHJcbiAgRm9ybUJ1aWxkZXIsXHJcbiAgRm9ybUNvbnRyb2wsXHJcbiAgRm9ybUdyb3VwLFxyXG4gIFZhbGlkYXRvcnMsXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSBcIkBuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwXCI7XHJcbmltcG9ydCB7IEdsb2JhbFN0YXRlU2VydmljZSwgUGFnZUluZm9TZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1nbG9iYWxcIjtcclxuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSBcInRhbmdvLWFwcC11aS1zaGFyZWRcIjtcclxuaW1wb3J0IHsgUGxhbm9EYXRhU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9wbGFuby1kYXRhLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgU3RvcmVCdWlsZGVyU2VydmljZSB9IGZyb20gXCIuLi8uLi9zZXJ2aWNlcy9zdG9yZS1idWlsZGVyLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUG9wdXBzQ29tcG9uZW50IH0gZnJvbSBcIi4vcG9wdXBzL3BvcHVwcy5jb21wb25lbnRcIjtcclxuaW1wb3J0IHsgQnJhbmREZXRhaWxzIH0gZnJvbSBcIi4uLy4uL2ludGVyZmFjZXMvdm0tbGlicmFyeS5pbnRlcmZhY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiBcImxpYi1wbGFuby1jb25maWd1cmF0aW9uc1wiLFxyXG4gIHRlbXBsYXRlVXJsOiBcIi4vcGxhbm8tY29uZmlndXJhdGlvbnMuY29tcG9uZW50Lmh0bWxcIixcclxuICBzdHlsZVVybDogXCIuL3BsYW5vLWNvbmZpZ3VyYXRpb25zLmNvbXBvbmVudC5zY3NzXCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQbGFub0NvbmZpZ3VyYXRpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuICAgQFZpZXdDaGlsZCgnZm9ybVJlZicpIGZvcm1SZWY6IEVsZW1lbnRSZWY7XHJcbiAgIEBWaWV3Q2hpbGQoJ2JyYW5kTWV0YVJlZicpIGJyYW5kTWV0YVJlZjogRWxlbWVudFJlZjtcclxuICBzZWxlY3RlZFRhYjogc3RyaW5nID0gXCJicmFuZFwiO1xyXG4gIGZvcm0hOiBGb3JtR3JvdXA7XHJcbiAgY2xpZW50SWQ6IHN0cmluZztcclxuICBicmFuZHNMaXN0OiBCcmFuZERldGFpbHNbXSA9IFtdO1xyXG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xyXG4gIGlzRWRpdDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHRhc2tGb3JtOiBGb3JtR3JvdXA7XHJcbiAgYnJhbmRNZXRhRm9ybSE6IEZvcm1Hcm91cDtcclxuICBicmFuZE1ldGFMaXN0OiBhbnlbXSA9IFtdO1xyXG4gIGlzQnJhbmRNZXRhRWRpdDogYm9vbGVhbiA9IHRydWU7XHJcbiAgYnJhbmRNZXRhU2VhcmNoOiBzdHJpbmcgPSBcIlwiO1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGRhdGFTZXJ2aWNlOiBQbGFub0RhdGFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBnczogR2xvYmFsU3RhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBidWlsZGVyU2VydmljZTogU3RvcmVCdWlsZGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSxcclxuICAgIHByaXZhdGUgbW9kZWxTZXJ2aWNlOiBOZ2JNb2RhbCxcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBwYWdlSW5mbzogUGFnZUluZm9TZXJ2aWNlXHJcbiAgKSB7fVxyXG5cclxuICBhc3luYyBuZ09uSW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuc2V0UGFnZURhdGEoKTtcclxuICAgIHRoaXMuaW5pdEZvcm0oKTtcclxuICAgIHRoaXMuZ3MuZGF0YVJhbmdlVmFsdWUuc3Vic2NyaWJlKGFzeW5jIChkYXRhKSA9PiB7XHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5jbGllbnRJZCA9IGRhdGE/LmNsaWVudDtcclxuICAgICAgICB0aGlzLmxvYWRCcmFuZERhdGEoKTtcclxuICAgICAgICB0aGlzLmxvYWRUYXNrRGF0YSgpO1xyXG4gICAgICAgIHRoaXMubG9hZEJyYW5kTWV0YURhdGEoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oXCJoZWFkZXItZmlsdGVyc1wiKSBhcyBzdHJpbmcpO1xyXG4gICAgICAgIHRoaXMuY2xpZW50SWQgPSBkYXRhPy5jbGllbnQ7XHJcbiAgICAgICAgdGhpcy5sb2FkQnJhbmREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkVGFza0RhdGEoKTtcclxuICAgICAgICB0aGlzLmxvYWRCcmFuZE1ldGFEYXRhKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2V0UGFnZURhdGEoKSB7XHJcbiAgICB0aGlzLnBhZ2VJbmZvLnNldFRpdGxlKFwiQ29uZmlndXJhdGlvblwiKTtcclxuICAgIHRoaXMucGFnZUluZm8uc2V0QnJlYWRjcnVtYnMoW1xyXG4gICAgICB7XHJcbiAgICAgICAgdGl0bGU6IFwiUGxhbm9ncmFtXCIsXHJcbiAgICAgICAgcGF0aDogXCIvbWFuYWdlL3BsYW5vZ3JhbS9tYW5hZ2UtcGxhbm9ncmFtc1wiLFxyXG4gICAgICAgIGlzQWN0aXZlOiBmYWxzZSxcclxuICAgICAgICBpc1NlcGFyYXRvcjogZmFsc2UsXHJcbiAgICAgIH0sXHJcbiAgICAgIHsgdGl0bGU6IFwiXCIsIHBhdGg6IFwiXCIsIGlzQWN0aXZlOiBmYWxzZSwgaXNTZXBhcmF0b3I6IHRydWUgfSxcclxuICAgIF0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgbG9hZEJyYW5kRGF0YSgpIHtcclxuICAgIGF3YWl0IHRoaXMuZGF0YVNlcnZpY2UuZmV0Y2hCcmFuZHNMaXN0KHRoaXMuY2xpZW50SWQpO1xyXG4gICAgdGhpcy5kYXRhU2VydmljZS5icmFuZHNMaXN0LnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICB0aGlzLmJyYW5kc0xpc3QgPSBlO1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgaWYgKHRoaXMuYnJhbmRzTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICB0aGlzLmxvYWREYXRhKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5hZGRCcmFuZCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGxvYWRUYXNrRGF0YSgpIHtcclxuICAgIHRoaXMuYnVpbGRlclNlcnZpY2UuZ2V0VGFza0NvbmZpZyh0aGlzLmNsaWVudElkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XHJcbiAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgdGhpcy5pc0VkaXQgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMudGFza0Zvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICAgIGR1ZURheTogW3Jlcy5kYXRhLmR1ZURheSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBkdWVUaW1lOiBbcmVzLmRhdGEuZHVlVGltZSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBhbGxvd2VkU3RvcmVMb2NhdGlvbjogW1xyXG4gICAgICAgICAgICByZXMuZGF0YS5hbGxvd2VkU3RvcmVMb2NhdGlvbixcclxuICAgICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgIF0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy50YXNrRm9ybS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBsb2FkRGF0YSgpIHtcclxuICAgIHRoaXMuaXNFZGl0ID0gdHJ1ZTtcclxuICAgIHRoaXMuZm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBicmFuZENvbmZpZzogdGhpcy5mYi5hcnJheShbXSksXHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmJyYW5kc0xpc3QuZm9yRWFjaCgoZTogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3QgYnJhbmRHcm91cCA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgIGJyYW5kOiBbXHJcbiAgICAgICAgICB7IHZhbHVlOiBlLmJyYW5kTmFtZSwgZGlzYWJsZWQ6IGUuaXNVc2VkIH0sXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgY2F0ZWdvcnk6IHRoaXMuZmIuYXJyYXkoZT8uY2F0ZWdvcnkpLFxyXG4gICAgICAgIHN1YkNhdGVnb3J5OiB0aGlzLmZiLmFycmF5KGU/LnN1YkNhdGVnb3J5KSxcclxuICAgICAgICBpc1VzZWQ6IFtlPy5pc1VzZWRdLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIHRoaXMuYnJhbmRDb25maWcucHVzaChicmFuZEdyb3VwKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5mb3JtLmRpc2FibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gIH1cclxuXHJcbiAgaW5pdEZvcm0oKSB7XHJcbiAgICB0aGlzLmZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgYnJhbmRDb25maWc6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy50YXNrRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICBkdWVEYXk6IFsxLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgZHVlVGltZTogW1wiMjM6NTlcIiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgIGFsbG93ZWRTdG9yZUxvY2F0aW9uOiBbZmFsc2UsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5icmFuZE1ldGFGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGJyYW5kTWV0YURhdGE6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgYnJhbmRDb25maWcoKTogRm9ybUFycmF5IHtcclxuICAgIHJldHVybiB0aGlzLmZvcm0uZ2V0KFwiYnJhbmRDb25maWdcIikgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgYWRkQnJhbmQoKSB7XHJcbiAgICB0aGlzLmJyYW5kQ29uZmlnLnB1c2goXHJcbiAgICAgIHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgIGJyYW5kOiBbXCJcIiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgY2F0ZWdvcnk6IHRoaXMuZmIuYXJyYXkoW10pLFxyXG4gICAgICAgIHN1YkNhdGVnb3J5OiB0aGlzLmZiLmFycmF5KFtdKSxcclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgY29uc3QgYnJhbmRFbGVtZW50ID0gdGhpcy5mb3JtUmVmLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICBgI3RleHQke3RoaXMuYnJhbmRDb25maWcubGVuZ3RoIC0gMX1gXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoYnJhbmRFbGVtZW50KSB7XHJcbiAgICAgICAgYnJhbmRFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmxvY2s6IFwiY2VudGVyXCIsIGJlaGF2aW9yOiBcInNtb290aFwiIH0pO1xyXG4gICAgICB9XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQnJhbmQoaW5kZXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5icmFuZENvbmZpZy5yZW1vdmVBdChpbmRleCk7XHJcbiAgfVxyXG5cclxuICBnZXRDYXRlZ29yeShjYXRJbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gKHRoaXMuYnJhbmRDb25maWcuYXQoY2F0SW5kZXgpIGFzIEZvcm1Hcm91cCkuZ2V0KFxyXG4gICAgICBcImNhdGVnb3J5XCJcclxuICAgICkgYXMgRm9ybUFycmF5O1xyXG4gIH1cclxuXHJcbiAgcmVtb3ZlQ2F0ZWdvcnkoaW5kZXg6IG51bWJlciwgY2F0SW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgY2F0ZWdvcnlBcnJheSA9ICh0aGlzLmJyYW5kQ29uZmlnLmF0KGluZGV4KSBhcyBGb3JtR3JvdXApLmdldChcclxuICAgICAgXCJjYXRlZ29yeVwiXHJcbiAgICApIGFzIEZvcm1BcnJheTtcclxuICAgIGNhdGVnb3J5QXJyYXkucmVtb3ZlQXQoY2F0SW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgYWRkQ2F0ZWdvcnkoZXZlbnQ6IGFueSwgaW5kZXg6IG51bWJlcikge1xyXG4gICAgY29uc3QgdmFsdWUgPSBldmVudC50YXJnZXQudmFsdWU/LnRyaW0oKTtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICBjb25zdCBjYXRlZ29yeUFycmF5ID0gKHRoaXMuYnJhbmRDb25maWcuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cCkuZ2V0KFxyXG4gICAgICAgIFwiY2F0ZWdvcnlcIlxyXG4gICAgICApIGFzIEZvcm1BcnJheTtcclxuICAgICAgY2F0ZWdvcnlBcnJheS5wdXNoKG5ldyBGb3JtQ29udHJvbCh2YWx1ZSkpO1xyXG5cclxuICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxyXG4gICAgICAgIGBjYXRlZ29yeUlucHV0JHtpbmRleH1gXHJcbiAgICAgICkgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XHJcbiAgICAgIGlmIChpbnB1dFZhbHVlKSB7XHJcbiAgICAgICAgaW5wdXRWYWx1ZS52YWx1ZSA9IFwiXCI7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldFN1YkNhdGVnb3J5KGNhdEluZGV4OiBudW1iZXIpIHtcclxuICAgIHJldHVybiAodGhpcy5icmFuZENvbmZpZy5hdChjYXRJbmRleCkgYXMgRm9ybUdyb3VwKS5nZXQoXHJcbiAgICAgIFwic3ViQ2F0ZWdvcnlcIlxyXG4gICAgKSBhcyBGb3JtQXJyYXk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTdWJDYXRlZ29yeShpbmRleDogbnVtYmVyLCBjYXRJbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBjYXRlZ29yeUFycmF5ID0gKHRoaXMuYnJhbmRDb25maWcuYXQoaW5kZXgpIGFzIEZvcm1Hcm91cCkuZ2V0KFxyXG4gICAgICBcInN1YkNhdGVnb3J5XCJcclxuICAgICkgYXMgRm9ybUFycmF5O1xyXG4gICAgY2F0ZWdvcnlBcnJheS5yZW1vdmVBdChjYXRJbmRleCk7XHJcbiAgfVxyXG5cclxuICBhZGRTdWJDYXRlZ29yeShldmVudDogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZT8udHJpbSgpO1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIGNvbnN0IGNhdGVnb3J5QXJyYXkgPSAodGhpcy5icmFuZENvbmZpZy5hdChpbmRleCkgYXMgRm9ybUdyb3VwKS5nZXQoXHJcbiAgICAgICAgXCJzdWJDYXRlZ29yeVwiXHJcbiAgICAgICkgYXMgRm9ybUFycmF5O1xyXG4gICAgICBjYXRlZ29yeUFycmF5LnB1c2gobmV3IEZvcm1Db250cm9sKHZhbHVlKSk7XHJcblxyXG4gICAgICBjb25zdCBpbnB1dFZhbHVlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXHJcbiAgICAgICAgYHN1YkNhdGVnb3J5SW5wdXQke2luZGV4fWBcclxuICAgICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbDtcclxuICAgICAgaWYgKGlucHV0VmFsdWUpIHtcclxuICAgICAgICBpbnB1dFZhbHVlLnZhbHVlID0gXCJcIjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2hlY2tVc2VkKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLmJyYW5kQ29uZmlnLmF0KGluZGV4KS5nZXQoXCJpc1VzZWRcIik/LnZhbHVlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlQnJhbmQoKSB7XHJcbiAgICBsZXQgYnJhbmREYXRhID0gdGhpcy5icmFuZENvbmZpZy52YWx1ZTtcclxuICAgIGlmICh0aGlzLmZvcm0uaW52YWxpZCkge1xyXG4gICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXCJSZXF1aXJlZCBmaWVsZCBpcyBtaXNzaW5nXCIpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBsZXQgZHVwbGljYXRlczogYW55ID0gW107XHJcbiAgICBsZXQgZXJyb3I6IGFueSA9IFtdO1xyXG4gICAgbGV0IGJyYW5kOiBhbnkgPSBicmFuZERhdGEuZmxhdE1hcCgoZWxlOiBhbnkpID0+IGVsZS5icmFuZCk7XHJcbiAgICBkdXBsaWNhdGVzID0gW1xyXG4gICAgICAuLi5uZXcgU2V0KFxyXG4gICAgICAgIGJyYW5kLmZpbHRlcigoaXRlbTogYW55LCBpbmRleDogYW55KSA9PiBicmFuZC5pbmRleE9mKGl0ZW0pICE9PSBpbmRleClcclxuICAgICAgKSxcclxuICAgIF07XHJcbiAgICBpZiAoZHVwbGljYXRlcy5sZW5ndGgpIHtcclxuICAgICAgZXJyb3IucHVzaChgJHtkdXBsaWNhdGVzLnRvU3RyaW5nKCl9IC0gYnJhbmQgaXMgZHVwbGljYXRlZGApO1xyXG4gICAgfVxyXG4gICAgbGV0IGNhdGVnb3J5OiBhbnkgPSBicmFuZERhdGEuZmxhdE1hcCgoZWxlOiBhbnkpID0+IGVsZS5jYXRlZ29yeSk7XHJcbiAgICBsZXQgZHVwbGljYXRlQ2F0ID0gW1xyXG4gICAgICAuLi5uZXcgU2V0KFxyXG4gICAgICAgIGNhdGVnb3J5LmZpbHRlcihcclxuICAgICAgICAgIChpdGVtOiBhbnksIGluZGV4OiBhbnkpID0+IGNhdGVnb3J5LmluZGV4T2YoaXRlbSkgIT09IGluZGV4XHJcbiAgICAgICAgKVxyXG4gICAgICApLFxyXG4gICAgXTtcclxuICAgIGlmIChkdXBsaWNhdGVDYXQubGVuZ3RoKSB7XHJcbiAgICAgIGVycm9yLnB1c2goXHJcbiAgICAgICAgYCR7QXJyYXkuZnJvbShkdXBsaWNhdGVDYXQpLnRvU3RyaW5nKCl9IC0gYnJhbmQgY2F0ZWdvcnkgaXMgZHVwbGljYXRlZGBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChlcnJvci5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChgJHtlcnJvci50b1N0cmluZygpfSBgKTtcclxuICAgIH1cclxuICAgIGxldCBkYXRhID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgICAgYnJhbmREYXRhOiBicmFuZERhdGEsXHJcbiAgICAgIGJyYW5kVXNlZExpc3Q6IHRoaXMuYnJhbmRzTGlzdFxyXG4gICAgICAgIC5maWx0ZXIoKGVsZTogYW55KSA9PiBlbGUuaXNVc2VkKVxyXG4gICAgICAgIC5tYXAoKGVsZTogYW55KSA9PiBlbGUuX2lkKSxcclxuICAgIH07XHJcbiAgICB0aGlzLmJ1aWxkZXJTZXJ2aWNlLmFkZFVwZGF0ZUJyYW5kKGRhdGEpLnN1YnNjcmliZShcclxuICAgICAgYXN5bmMgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0U3VjY2Vzc1RvYXN0KFwiQnJhbmQgZGV0YWlscyB1cGRhdGVkIHN1Y2Nlc3NmdWxseVwiKTtcclxuICAgICAgICAgIHRoaXMuaXNFZGl0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMuZm9ybS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgIGF3YWl0IHRoaXMuZGF0YVNlcnZpY2UuZmV0Y2hCcmFuZHNMaXN0KHRoaXMuY2xpZW50SWQsIHRydWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgKGVycm9yOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXCJTb21ldGhpbmcgd2VudCB3cm9uZy4uXCIpO1xyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVGFzaygpIHtcclxuICAgIGxldCBkYXRhID0ge1xyXG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcclxuICAgICAgLi4udGhpcy50YXNrRm9ybS52YWx1ZSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5idWlsZGVyU2VydmljZS51cGRhdGVUYXNrKGRhdGEpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMuY29kZSA9PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMuaXNFZGl0ID0gdHJ1ZTtcclxuICAgICAgICAgIHRoaXMudGFza0Zvcm0uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldFN1Y2Nlc3NUb2FzdChcIlRhc2sgZGV0YWlscyB1cGRhdGVkIHN1Y2Nlc3NmdWxseVwiKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcbiAgICAgIChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFwiU29tZXRoaW5nIHdlbnQgd3JvbmcuLlwiKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGJ1bGtVcGxvYWQoKSB7XHJcbiAgICBjb25zdCBtb2RlbFJlZiA9IHRoaXMubW9kZWxTZXJ2aWNlLm9wZW4oUG9wdXBzQ29tcG9uZW50LCB7XHJcbiAgICAgIGNlbnRlcmVkOiB0cnVlLFxyXG4gICAgfSk7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5jbGllbnRJZCA9IHRoaXMuY2xpZW50SWQ7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS50b3RhbEl0ZW1Db3VudCA9IHRoaXMuYnJhbmRzTGlzdC5sZW5ndGg7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS50b3RhbEl0ZW1Db3VudCA9IHRoaXMuYnJhbmRzTGlzdC5sZW5ndGg7XHJcbiAgICBtb2RlbFJlZi5jb21wb25lbnRJbnN0YW5jZS5icmFuZExpc3QgPSB0aGlzLmJyYW5kc0xpc3Q7XHJcblxyXG4gICAgbW9kZWxSZWYucmVzdWx0LnRoZW4oYXN5bmMgKHJlcykgPT4ge1xyXG4gICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5kYXRhU2VydmljZS5mZXRjaEJyYW5kc0xpc3QodGhpcy5jbGllbnRJZCwgdHJ1ZSk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZm9ybUVuYWJsZSgpIHtcclxuICAgIGxldCBicmFuZEluZm8gPSB0aGlzLmZvcm0uZ2V0KFwiYnJhbmRDb25maWdcIikgYXMgRm9ybUFycmF5O1xyXG5cclxuICAgIGJyYW5kSW5mby5jb250cm9scy5mb3JFYWNoKChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpID0+IHtcclxuICAgICAgaWYgKCFjb250cm9sLmdldChcImlzVXNlZFwiKT8udmFsdWUpIHtcclxuICAgICAgICBjb250cm9sLmdldChcImJyYW5kXCIpPy5lbmFibGUoKTtcclxuICAgICAgICBjb250cm9sLmdldChcImNhdGVnb3J5XCIpPy5lbmFibGUoKTtcclxuICAgICAgICBjb250cm9sLmdldChcInN1YkNhdGVnb3J5XCIpPy5lbmFibGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBnZXQgYnJhbmRNZXRhRGF0YSgpOiBGb3JtQXJyYXkge1xyXG4gICAgcmV0dXJuIHRoaXMuYnJhbmRNZXRhRm9ybS5nZXQoXCJicmFuZE1ldGFEYXRhXCIpIGFzIEZvcm1BcnJheTtcclxuICB9XHJcblxyXG4gIGxvYWRCcmFuZE1ldGFEYXRhKCkge1xyXG4gICAgdGhpcy5idWlsZGVyU2VydmljZS5nZXRCcmFuZE1ldGFEYXRhKHRoaXMuY2xpZW50SWQpLnN1YnNjcmliZShcclxuICAgICAgKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3Qgcm93cyA9IEFycmF5LmlzQXJyYXkocmVzPy5kYXRhKSA/IHJlcy5kYXRhIDogW107XHJcbiAgICAgICAgdGhpcy5icmFuZE1ldGFMaXN0ID0gcm93cztcclxuICAgICAgICB0aGlzLmJ1aWxkQnJhbmRNZXRhRm9ybShyb3dzKTtcclxuICAgICAgfSxcclxuICAgICAgKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYnJhbmRNZXRhTGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuYnVpbGRCcmFuZE1ldGFGb3JtKFtdKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGJ1aWxkQnJhbmRNZXRhRm9ybShyb3dzOiBhbnlbXSkge1xyXG4gICAgdGhpcy5icmFuZE1ldGFGb3JtID0gdGhpcy5mYi5ncm91cCh7XHJcbiAgICAgIGJyYW5kTWV0YURhdGE6IHRoaXMuZmIuYXJyYXkoXHJcbiAgICAgICAgcm93cy5tYXAoKHJvdykgPT5cclxuICAgICAgICAgIHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgICAgICBwaWRDYXQ6IFtyb3c/LnBpZENhdCA/PyBcIlwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgdGVtcEdyb3VwOiBbcm93Py50ZW1wR3JvdXAgPz8gXCJcIiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgIGNhdGVnb3J5OiBbcm93Py5jYXRlZ29yeSA/PyBcIlwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgICAgYnJhbmQ6IFtyb3c/LmJyYW5kID8/IFwiXCIsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICBiYW5kOiBbcm93Py5iYW5kID8/IFwiXCJdLFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgICksXHJcbiAgICB9KTtcclxuICAgIHRoaXMuaXNCcmFuZE1ldGFFZGl0ID0gdHJ1ZTtcclxuICAgIHRoaXMuYnJhbmRNZXRhRm9ybS5kaXNhYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIGFkZEJyYW5kTWV0YVJvdygpIHtcclxuICAgIHRoaXMuYnJhbmRNZXRhRGF0YS5wdXNoKFxyXG4gICAgICB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICBwaWRDYXQ6IFtcIlwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICB0ZW1wR3JvdXA6IFtcIlwiLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICBjYXRlZ29yeTogW1wiXCIsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIGJyYW5kOiBbXCJcIiwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgYmFuZDogW1wiXCJdLFxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBsYXN0Um93ID0gdGhpcy5icmFuZE1ldGFSZWY/Lm5hdGl2ZUVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgYCNtZXRhUm93JHt0aGlzLmJyYW5kTWV0YURhdGEubGVuZ3RoIC0gMX1gXHJcbiAgICAgICk7XHJcbiAgICAgIGlmIChsYXN0Um93KSB7XHJcbiAgICAgICAgbGFzdFJvdy5zY3JvbGxJbnRvVmlldyh7IGJsb2NrOiBcImNlbnRlclwiLCBiZWhhdmlvcjogXCJzbW9vdGhcIiB9KTtcclxuICAgICAgfVxyXG4gICAgfSwgMTAwKTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUJyYW5kTWV0YVJvdyhpbmRleDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmJyYW5kTWV0YURhdGEucmVtb3ZlQXQoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgZW5hYmxlQnJhbmRNZXRhRm9ybSgpIHtcclxuICAgIHRoaXMuaXNCcmFuZE1ldGFFZGl0ID0gZmFsc2U7XHJcbiAgICB0aGlzLmJyYW5kTWV0YUZvcm0uZW5hYmxlKHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICB9XHJcblxyXG4gIGNhbmNlbEJyYW5kTWV0YUVkaXQoKSB7XHJcbiAgICB0aGlzLmJ1aWxkQnJhbmRNZXRhRm9ybSh0aGlzLmJyYW5kTWV0YUxpc3QpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlQnJhbmRNZXRhRGF0YSgpIHtcclxuICAgIGlmICh0aGlzLmJyYW5kTWV0YUZvcm0uaW52YWxpZCkge1xyXG4gICAgICB0aGlzLmJyYW5kTWV0YUZvcm0ubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgICB0aGlzLmZvY3VzRmlyc3RJbnZhbGlkQnJhbmRNZXRhRmllbGQoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgcm93cyA9IHRoaXMuYnJhbmRNZXRhRGF0YS52YWx1ZTtcclxuICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuICAgIGNvbnN0IGR1cGVzOiB7IHJvdzogbnVtYmVyOyBjb21ibzogc3RyaW5nIH1bXSA9IFtdO1xyXG4gICAgcm93cy5mb3JFYWNoKChyOiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICBjb25zdCBrZXkgPSBgJHsoci5waWRDYXQgfHwgXCJcIikudHJpbSgpLnRvTG93ZXJDYXNlKCl9fCR7KHIudGVtcEdyb3VwIHx8IFwiXCIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWA7XHJcbiAgICAgIGlmIChzZWVuLmhhcyhrZXkpKSB7XHJcbiAgICAgICAgZHVwZXMucHVzaCh7IHJvdzogaSwgY29tYm86IGAke3IucGlkQ2F0fSAvICR7ci50ZW1wR3JvdXB9YCB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBzZWVuLmFkZChrZXkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIGlmIChkdXBlcy5sZW5ndGgpIHtcclxuICAgICAgY29uc3QgZmlyc3QgPSBkdXBlc1swXTtcclxuICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFxyXG4gICAgICAgIGBSb3cgJHtmaXJzdC5yb3cgKyAxfTogZHVwbGljYXRlIFBpZCBDYXQgKyBUZW1wIEdyb3VwIFwiJHtmaXJzdC5jb21ib31cImBcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5zY3JvbGxBbmRGbGFzaEJyYW5kTWV0YUZpZWxkKGZpcnN0LnJvdywgXCJwaWRDYXRcIik7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHBheWxvYWQgPSB7XHJcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxyXG4gICAgICBicmFuZE1ldGFEYXRhOiByb3dzLFxyXG4gICAgfTtcclxuICAgIHRoaXMuYnVpbGRlclNlcnZpY2UudXBkYXRlQnJhbmRNZXRhRGF0YShwYXlsb2FkKS5zdWJzY3JpYmUoXHJcbiAgICAgIChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgIGlmIChyZXMgJiYgcmVzLmNvZGUgPT0gMjAwKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldFN1Y2Nlc3NUb2FzdChcIkJyYW5kIE1ldGEgRGF0YSB1cGRhdGVkIHN1Y2Nlc3NmdWxseVwiKTtcclxuICAgICAgICAgIHRoaXMuYnJhbmRNZXRhTGlzdCA9IHJvd3M7XHJcbiAgICAgICAgICB0aGlzLmlzQnJhbmRNZXRhRWRpdCA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLmJyYW5kTWV0YUZvcm0uZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KFwiU29tZXRoaW5nIHdlbnQgd3JvbmcuLlwiKTtcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgQlJBTkRfTUVUQV9GSUVMRF9MQUJFTFM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICBwaWRDYXQ6IFwiUGlkIENhdFwiLFxyXG4gICAgdGVtcEdyb3VwOiBcIlRlbXAgR3JvdXBcIixcclxuICAgIGNhdGVnb3J5OiBcIkNhdGVnb3J5XCIsXHJcbiAgICBicmFuZDogXCJCcmFuZFwiLFxyXG4gICAgYmFuZDogXCJCYW5kXCIsXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBmb2N1c0ZpcnN0SW52YWxpZEJyYW5kTWV0YUZpZWxkKCkge1xyXG4gICAgY29uc3QgY29udHJvbHMgPSB0aGlzLmJyYW5kTWV0YURhdGEuY29udHJvbHM7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbnRyb2xzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNvbnN0IGdyb3VwID0gY29udHJvbHNbaV0gYXMgRm9ybUdyb3VwO1xyXG4gICAgICBmb3IgKGNvbnN0IGZpZWxkS2V5IG9mIE9iamVjdC5rZXlzKHRoaXMuQlJBTkRfTUVUQV9GSUVMRF9MQUJFTFMpKSB7XHJcbiAgICAgICAgY29uc3QgY3RybCA9IGdyb3VwLmdldChmaWVsZEtleSk7XHJcbiAgICAgICAgaWYgKGN0cmwgJiYgY3RybC5pbnZhbGlkKSB7XHJcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXHJcbiAgICAgICAgICAgIGBSb3cgJHtpICsgMX06ICR7dGhpcy5CUkFORF9NRVRBX0ZJRUxEX0xBQkVMU1tmaWVsZEtleV19IGlzIHJlcXVpcmVkYFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuc2Nyb2xsQW5kRmxhc2hCcmFuZE1ldGFGaWVsZChpLCBmaWVsZEtleSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoXCJSZXF1aXJlZCBmaWVsZCBpcyBtaXNzaW5nXCIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzY3JvbGxBbmRGbGFzaEJyYW5kTWV0YUZpZWxkKHJvd0luZGV4OiBudW1iZXIsIGZpZWxkS2V5OiBzdHJpbmcpIHtcclxuICAgIGlmICh0aGlzLmJyYW5kTWV0YVNlYXJjaD8udHJpbSgpKSB7XHJcbiAgICAgIHRoaXMuYnJhbmRNZXRhU2VhcmNoID0gXCJcIjtcclxuICAgIH1cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFxyXG4gICAgICAgIGBtZXRhUm93JHtyb3dJbmRleH0tJHtmaWVsZEtleX1gXHJcbiAgICAgICkgYXMgSFRNTElucHV0RWxlbWVudCB8IG51bGw7XHJcbiAgICAgIGlmICghZWwpIHJldHVybjtcclxuICAgICAgZWwuc2Nyb2xsSW50b1ZpZXcoeyBibG9jazogXCJjZW50ZXJcIiwgYmVoYXZpb3I6IFwic21vb3RoXCIgfSk7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgZWwuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pO1xyXG4gICAgICB9IGNhdGNoIHtcclxuICAgICAgICBlbC5mb2N1cygpO1xyXG4gICAgICB9XHJcbiAgICAgIGVsLmNsYXNzTGlzdC5yZW1vdmUoXCJkYW5nZXItZmxhc2hcIik7XHJcbiAgICAgIHZvaWQgZWwub2Zmc2V0V2lkdGg7XHJcbiAgICAgIGVsLmNsYXNzTGlzdC5hZGQoXCJkYW5nZXItZmxhc2hcIik7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gZWwuY2xhc3NMaXN0LnJlbW92ZShcImRhbmdlci1mbGFzaFwiKSwgMTUwMCk7XHJcbiAgICB9LCA1MCk7XHJcbiAgfVxyXG5cclxuICBtYXRjaGVzQnJhbmRNZXRhU2VhcmNoKGdyb3VwOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHEgPSB0aGlzLmJyYW5kTWV0YVNlYXJjaD8udHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBpZiAoIXEpIHJldHVybiB0cnVlO1xyXG4gICAgY29uc3QgZmllbGRzID0gW1wicGlkQ2F0XCIsIFwidGVtcEdyb3VwXCIsIFwiY2F0ZWdvcnlcIiwgXCJicmFuZFwiLCBcImJhbmRcIl07XHJcbiAgICByZXR1cm4gZmllbGRzLnNvbWUoKGtleSkgPT4ge1xyXG4gICAgICBjb25zdCB2YWwgPSBncm91cC5nZXQoa2V5KT8udmFsdWU7XHJcbiAgICAgIHJldHVybiAodmFsID8/IFwiXCIpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZpbHRlcmVkQnJhbmRNZXRhQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmJyYW5kTWV0YURhdGEuY29udHJvbHMuZmlsdGVyKChjKSA9PlxyXG4gICAgICB0aGlzLm1hdGNoZXNCcmFuZE1ldGFTZWFyY2goYylcclxuICAgICkubGVuZ3RoO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgcGxhbm9Db25maWdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicy1jYXJkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggY3Vyc29yLXBvaW50ZXIgcC0zIG1iLTNcIiBbbmdDbGFzc109XCJzZWxlY3RlZFRhYiA9PT0gJ2JyYW5kJyA/ICdhY3RpdmUnIDogJydcIiAoY2xpY2spPVwic2VsZWN0ZWRUYWIgPSdicmFuZCc7aXNFZGl0PXRydWU7aXNCcmFuZE1ldGFFZGl0PXRydWU7Zm9ybS5kaXNhYmxlKCk7dGFza0Zvcm0uZGlzYWJsZSgpO2JyYW5kTWV0YUZvcm0uZGlzYWJsZSgpXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWUtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0LjE3NTUgNC4yMjIyNUMxNC4xNzY2IDIuOTk0NDUgMTEuNjczMSAyIDguNTg4MzIgMkM1LjUwMzU3IDIgMy4wMDIyNCAyLjk5NTU3IDMgNC4yMjIyNU0zIDQuMjIyMjVDMyA1LjQ1MDA0IDUuNTAxMzMgNi40NDQ0OSA4LjU4ODMyIDYuNDQ0NDlDMTEuNjc1MyA2LjQ0NDQ5IDE0LjE3NjYgNS40NTAwNCAxNC4xNzY2IDQuMjIyMjVMMTQuMTc2NiAxMi44NDQ1TTMgNC4yMjIyNVYxNy41NTU2QzMuMDAxMTIgMTguNzgzNCA1LjUwMjQ1IDE5Ljc3NzkgOC41ODgzMiAxOS43Nzc5QzEwLjA4NDkgMTkuNzc3OSAxMS40MzYxIDE5LjU0MTIgMTIuNDM4NyAxOS4xNjAxTTMuMDAxMTIgOC42NjY3MkMzLjAwMTEyIDkuODk0NTEgNS41MDI0NSAxMC44ODkgOC41ODk0NCAxMC44ODlDMTEuNjc2NCAxMC44ODkgMTQuMTc3OCA5Ljg5NDUxIDE0LjE3NzggOC42NjY3Mk0xMi41MDU3IDE0LjY5NDZDMTEuNDk3NiAxNS4wODkxIDEwLjExNSAxNS4zMzM1IDguNTg4MzIgMTUuMzMzNUM1LjUwMjQ1IDE1LjMzMzUgMy4wMDExMiAxNC4zMzkxIDMuMDAxMTIgMTMuMTExM00yMC41MjcyIDEzLjQ2NDZDMjIuNDkwOSAxNS40MTY5IDIyLjQ5MDkgMTguNTgzNiAyMC41MjcyIDIwLjUzNThDMTguNTYzNSAyMi40ODgxIDE1LjM3ODEgMjIuNDg4MSAxMy40MTQ0IDIwLjUzNThDMTEuNDUwNyAxOC41ODM2IDExLjQ1MDcgMTUuNDE2OSAxMy40MTQ0IDEzLjQ2NDZDMTUuMzc4MSAxMS41MTI0IDE4LjU2MzUgMTEuNTEyNCAyMC41MjcyIDEzLjQ2NDZaXCIgW2F0dHIuc3Ryb2tlXT1cInNlbGVjdGVkVGFiID09PSAnYnJhbmQnID8gJyMwMEEzRkYnIDogJyMzNDQwNTQnXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb25maWdUZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgQnJhbmQgYW5kIFByb2R1Y3QgTWFwcGluZ1xyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGN1cnNvci1wb2ludGVyIHAtMyBtYi0zXCIgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYWIgPT09ICd0YXNrJyA/ICdhY3RpdmUnIDogJydcIiAoY2xpY2spPVwic2VsZWN0ZWRUYWIgPSd0YXNrJztpc0VkaXQ9dHJ1ZTtpc0JyYW5kTWV0YUVkaXQ9dHJ1ZTtmb3JtLmRpc2FibGUoKTt0YXNrRm9ybS5kaXNhYmxlKCk7YnJhbmRNZXRhRm9ybS5kaXNhYmxlKClcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTc3NV8zNzkzMSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMiAxNUMxMy42NTY5IDE1IDE1IDEzLjY1NjkgMTUgMTJDMTUgMTAuMzQzMSAxMy42NTY5IDkgMTIgOUMxMC4zNDMxIDkgOSAxMC4zNDMxIDkgMTJDOSAxMy42NTY5IDEwLjM0MzEgMTUgMTIgMTVaXCIgW2F0dHIuc3Ryb2tlXT1cInNlbGVjdGVkVGFiID09PSAndGFzaycgPyAnIzAwQTNGRicgOiAnIzM0NDA1NCdcIiBzdHJva2Utd2lkdGg9XCIyXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE5LjQgMTVDMTkuMjY2OSAxNS4zMDE2IDE5LjIyNzIgMTUuNjM2MiAxOS4yODYgMTUuOTYwNkMxOS4zNDQ4IDE2LjI4NSAxOS40OTk1IDE2LjU4NDMgMTkuNzMgMTYuODJMMTkuNzkgMTYuODhDMTkuOTc2IDE3LjA2NTcgMjAuMTIzNSAxNy4yODYzIDIwLjIyNDEgMTcuNTI5MUMyMC4zMjQ4IDE3Ljc3MTkgMjAuMzc2NiAxOC4wMzIyIDIwLjM3NjYgMTguMjk1QzIwLjM3NjYgMTguNTU3OCAyMC4zMjQ4IDE4LjgxODEgMjAuMjI0MSAxOS4wNjA5QzIwLjEyMzUgMTkuMzAzNyAxOS45NzYgMTkuNTI0MyAxOS43OSAxOS43MUMxOS42MDQzIDE5Ljg5NiAxOS4zODM3IDIwLjA0MzUgMTkuMTQwOSAyMC4xNDQxQzE4Ljg5ODEgMjAuMjQ0OCAxOC42Mzc4IDIwLjI5NjYgMTguMzc1IDIwLjI5NjZDMTguMTEyMiAyMC4yOTY2IDE3Ljg1MTkgMjAuMjQ0OCAxNy42MDkxIDIwLjE0NDFDMTcuMzY2MyAyMC4wNDM1IDE3LjE0NTcgMTkuODk2IDE2Ljk2IDE5LjcxTDE2LjkgMTkuNjVDMTYuNjY0MyAxOS40MTk1IDE2LjM2NSAxOS4yNjQ4IDE2LjA0MDYgMTkuMjA2QzE1LjcxNjIgMTkuMTQ3MiAxNS4zODE2IDE5LjE4NjkgMTUuMDggMTkuMzJDMTQuNzg0MiAxOS40NDY4IDE0LjUzMiAxOS42NTcyIDE0LjM1NDMgMTkuOTI1NUMxNC4xNzY2IDIwLjE5MzggMTQuMDgxMyAyMC41MDgyIDE0LjA4IDIwLjgzVjIxQzE0LjA4IDIxLjUzMDQgMTMuODY5MyAyMi4wMzkxIDEzLjQ5NDIgMjIuNDE0MkMxMy4xMTkxIDIyLjc4OTMgMTIuNjEwNCAyMyAxMi4wOCAyM0MxMS41NDk2IDIzIDExLjA0MDkgMjIuNzg5MyAxMC42NjU4IDIyLjQxNDJDMTAuMjkwNyAyMi4wMzkxIDEwLjA4IDIxLjUzMDQgMTAuMDggMjFWMjAuOTFDMTAuMDcyMyAyMC41NzkgOS45NjUxMiAyMC4yNTggOS43NzI1MSAxOS45ODg3QzkuNTc5OSAxOS43MTk0IDkuMzEwNzQgMTkuNTE0MyA5IDE5LjRDOC42OTgzOCAxOS4yNjY5IDguMzYzODEgMTkuMjI3MiA4LjAzOTQxIDE5LjI4NkM3LjcxNTAyIDE5LjM0NDggNy40MTU2OCAxOS40OTk1IDcuMTggMTkuNzNMNy4xMiAxOS43OUM2LjkzNDI1IDE5Ljk3NiA2LjcxMzY4IDIwLjEyMzUgNi40NzA4OCAyMC4yMjQxQzYuMjI4MDggMjAuMzI0OCA1Ljk2NzgzIDIwLjM3NjYgNS43MDUgMjAuMzc2NkM1LjQ0MjE3IDIwLjM3NjYgNS4xODE5MiAyMC4zMjQ4IDQuOTM5MTIgMjAuMjI0MUM0LjY5NjMyIDIwLjEyMzUgNC40NzU3NSAxOS45NzYgNC4yOSAxOS43OUM0LjEwNDA1IDE5LjYwNDMgMy45NTY1MyAxOS4zODM3IDMuODU1ODggMTkuMTQwOUMzLjc1NTIzIDE4Ljg5ODEgMy43MDM0MyAxOC42Mzc4IDMuNzAzNDMgMTguMzc1QzMuNzAzNDMgMTguMTEyMiAzLjc1NTIzIDE3Ljg1MTkgMy44NTU4OCAxNy42MDkxQzMuOTU2NTMgMTcuMzY2MyA0LjEwNDA1IDE3LjE0NTcgNC4yOSAxNi45Nkw0LjM1IDE2LjlDNC41ODA1NCAxNi42NjQzIDQuNzM1MTkgMTYuMzY1IDQuNzk0IDE2LjA0MDZDNC44NTI4MiAxNS43MTYyIDQuODEzMTIgMTUuMzgxNiA0LjY4IDE1LjA4QzQuNTUzMjQgMTQuNzg0MiA0LjM0Mjc2IDE0LjUzMiA0LjA3NDQ3IDE0LjM1NDNDMy44MDYxOCAxNC4xNzY2IDMuNDkxNzkgMTQuMDgxMyAzLjE3IDE0LjA4SDNDMi40Njk1NyAxNC4wOCAxLjk2MDg2IDEzLjg2OTMgMS41ODU3OSAxMy40OTQyQzEuMjEwNzEgMTMuMTE5MSAxIDEyLjYxMDQgMSAxMi4wOEMxIDExLjU0OTYgMS4yMTA3MSAxMS4wNDA5IDEuNTg1NzkgMTAuNjY1OEMxLjk2MDg2IDEwLjI5MDcgMi40Njk1NyAxMC4wOCAzIDEwLjA4SDMuMDlDMy40MjA5OSAxMC4wNzIzIDMuNzQyIDkuOTY1MTIgNC4wMTEzIDkuNzcyNTFDNC4yODA1OSA5LjU3OTkgNC40ODU3MiA5LjMxMDc0IDQuNiA5QzQuNzMzMTIgOC42OTgzOCA0Ljc3MjgyIDguMzYzODEgNC43MTQgOC4wMzk0MUM0LjY1NTE5IDcuNzE1MDIgNC41MDA1NCA3LjQxNTY4IDQuMjcgNy4xOEw0LjIxIDcuMTJDNC4wMjQwNSA2LjkzNDI1IDMuODc2NTMgNi43MTM2OCAzLjc3NTg4IDYuNDcwODhDMy42NzUyMyA2LjIyODA4IDMuNjIzNDMgNS45Njc4MyAzLjYyMzQzIDUuNzA1QzMuNjIzNDMgNS40NDIxNyAzLjY3NTIzIDUuMTgxOTIgMy43NzU4OCA0LjkzOTEyQzMuODc2NTMgNC42OTYzMiA0LjAyNDA1IDQuNDc1NzUgNC4yMSA0LjI5QzQuMzk1NzUgNC4xMDQwNSA0LjYxNjMyIDMuOTU2NTMgNC44NTkxMiAzLjg1NTg4QzUuMTAxOTIgMy43NTUyMyA1LjM2MjE3IDMuNzAzNDMgNS42MjUgMy43MDM0M0M1Ljg4NzgzIDMuNzAzNDMgNi4xNDgwOCAzLjc1NTIzIDYuMzkwODggMy44NTU4OEM2LjYzMzY4IDMuOTU2NTMgNi44NTQyNSA0LjEwNDA1IDcuMDQgNC4yOUw3LjEgNC4zNUM3LjMzNTY4IDQuNTgwNTQgNy42MzUwMiA0LjczNTE5IDcuOTU5NDEgNC43OTRDOC4yODM4MSA0Ljg1MjgyIDguNjE4MzggNC44MTMxMiA4LjkyIDQuNjhIOUM5LjI5NTc3IDQuNTUzMjQgOS41NDgwMiA0LjM0Mjc2IDkuNzI1NjkgNC4wNzQ0N0M5LjkwMzM3IDMuODA2MTggOS45OTg3MiAzLjQ5MTc5IDEwIDMuMTdWM0MxMCAyLjQ2OTU3IDEwLjIxMDcgMS45NjA4NiAxMC41ODU4IDEuNTg1NzlDMTAuOTYwOSAxLjIxMDcxIDExLjQ2OTYgMSAxMiAxQzEyLjUzMDQgMSAxMy4wMzkxIDEuMjEwNzEgMTMuNDE0MiAxLjU4NTc5QzEzLjc4OTMgMS45NjA4NiAxNCAyLjQ2OTU3IDE0IDNWMy4wOUMxNC4wMDEzIDMuNDExNzkgMTQuMDk2NiAzLjcyNjE4IDE0LjI3NDMgMy45OTQ0N0MxNC40NTIgNC4yNjI3NiAxNC43MDQyIDQuNDczMjQgMTUgNC42QzE1LjMwMTYgNC43MzMxMiAxNS42MzYyIDQuNzcyODIgMTUuOTYwNiA0LjcxNEMxNi4yODUgNC42NTUxOSAxNi41ODQzIDQuNTAwNTQgMTYuODIgNC4yN0wxNi44OCA0LjIxQzE3LjA2NTcgNC4wMjQwNSAxNy4yODYzIDMuODc2NTMgMTcuNTI5MSAzLjc3NTg4QzE3Ljc3MTkgMy42NzUyMyAxOC4wMzIyIDMuNjIzNDMgMTguMjk1IDMuNjIzNDNDMTguNTU3OCAzLjYyMzQzIDE4LjgxODEgMy42NzUyMyAxOS4wNjA5IDMuNzc1ODhDMTkuMzAzNyAzLjg3NjUzIDE5LjUyNDMgNC4wMjQwNSAxOS43MSA0LjIxQzE5Ljg5NiA0LjM5NTc1IDIwLjA0MzUgNC42MTYzMiAyMC4xNDQxIDQuODU5MTJDMjAuMjQ0OCA1LjEwMTkyIDIwLjI5NjYgNS4zNjIxNyAyMC4yOTY2IDUuNjI1QzIwLjI5NjYgNS44ODc4MyAyMC4yNDQ4IDYuMTQ4MDggMjAuMTQ0MSA2LjM5MDg4QzIwLjA0MzUgNi42MzM2OCAxOS44OTYgNi44NTQyNSAxOS43MSA3LjA0TDE5LjY1IDcuMUMxOS40MTk1IDcuMzM1NjggMTkuMjY0OCA3LjYzNTAyIDE5LjIwNiA3Ljk1OTQxQzE5LjE0NzIgOC4yODM4MSAxOS4xODY5IDguNjE4MzggMTkuMzIgOC45MlY5QzE5LjQ0NjggOS4yOTU3NyAxOS42NTcyIDkuNTQ4MDIgMTkuOTI1NSA5LjcyNTY5QzIwLjE5MzggOS45MDMzNyAyMC41MDgyIDkuOTk4NzIgMjAuODMgMTBIMjFDMjEuNTMwNCAxMCAyMi4wMzkxIDEwLjIxMDcgMjIuNDE0MiAxMC41ODU4QzIyLjc4OTMgMTAuOTYwOSAyMyAxMS40Njk2IDIzIDEyQzIzIDEyLjUzMDQgMjIuNzg5MyAxMy4wMzkxIDIyLjQxNDIgMTMuNDE0MkMyMi4wMzkxIDEzLjc4OTMgMjEuNTMwNCAxNCAyMSAxNEgyMC45MUMyMC41ODgyIDE0LjAwMTMgMjAuMjczOCAxNC4wOTY2IDIwLjAwNTUgMTQuMjc0M0MxOS43MzcyIDE0LjQ1MiAxOS41MjY4IDE0LjcwNDIgMTkuNCAxNVpcIiBbYXR0ci5zdHJva2VdPVwic2VsZWN0ZWRUYWIgPT09ICd0YXNrJyA/ICcjMDBBM0ZGJyA6ICcjMzQ0MDU0J1wiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzE3NzVfMzc5MzFcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgZmlsbD1cIndoaXRlXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29uZmlnVGV4dFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFRhc2sgQ29uZmlndXJhdGlvblxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGN1cnNvci1wb2ludGVyIHAtMyBtYi0zXCIgW25nQ2xhc3NdPVwic2VsZWN0ZWRUYWIgPT09ICdicmFuZE1ldGEnID8gJ2FjdGl2ZScgOiAnJ1wiIChjbGljayk9XCJzZWxlY3RlZFRhYj0nYnJhbmRNZXRhJztpc0VkaXQ9dHJ1ZTtpc0JyYW5kTWV0YUVkaXQ9dHJ1ZTtmb3JtLmRpc2FibGUoKTt0YXNrRm9ybS5kaXNhYmxlKCk7YnJhbmRNZXRhRm9ybS5kaXNhYmxlKClcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtZS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyA3LjVMMTIgM0wyMSA3LjVNMyA3LjVMMTIgMTJNMyA3LjVWMTYuNUwxMiAyMU0yMSA3LjVMMTIgMTJNMjEgNy41VjE2LjVMMTIgMjFNMTIgMTJWMjFcIiBbYXR0ci5zdHJva2VdPVwic2VsZWN0ZWRUYWIgPT09ICdicmFuZE1ldGEnID8gJyMwMEEzRkYnIDogJyMzNDQwNTQnXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbmZpZ1RleHRcIj5cclxuICAgICAgICAgICAgICAgICAgICBCcmFuZCBNZXRhIERhdGFcclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC05XCIgaWQ9XCJjb25maWdcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGxvYWRlciBkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlciBhbGlnbi1pdGVtcy1jZW50ZXJcIiAqbmdJZj1cImxvYWRpbmdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJtLWNhcmRcIiAqbmdJZj1cIiFsb2FkaW5nXCI+XHJcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJzZWxlY3RlZFRhYiA9PT0gJ2JyYW5kJ1wiID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+QnJhbmQgYW5kIHByb2R1Y3QgaW5mb3JtYXRpb248L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8cD5EZWZpbmUgdGhlIGJyYW5kIGFuZCBtYXAgcHJvZHVjdHMgdG8gdGhlaXIgcmVzcGVjdGl2ZSBjYXRlZ29yaWVzLjwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cImJ1bGtVcGxvYWQoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTE0LjE2NjcgNi42NjY2N0wxMCAyLjVNMTAgMi41TDUuODMzMzMgNi42NjY2N00xMCAyLjVWMTIuNVwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPiBVcGxvYWQgQnJhbmRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCIgY2xhc3M9XCJtdC0xMFwiICNmb3JtUmVmPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJicmFuZENvbmZpZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBteC0wXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IHAtMCBwcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWxhYmVsXCI+QnJhbmQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgcC0wIHBzLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tbGFiZWxcIj5Qcm9kdWN0IENhdGVnb3J5PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IHAtMCBwcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWxhYmVsXCI+UHJvZHVjdCBTdWItQ2F0ZWdvcnk8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImhlaWdodDpjYWxjKDc1dmggLSAyNTBweCk7b3ZlcmZsb3cteTpTY3JvbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBicmFuZEdyb3VwIG9mIGJyYW5kQ29uZmlnPy5jb250cm9sczsgbGV0IGkgPSBpbmRleFwiIFtmb3JtR3JvdXBOYW1lXT1cImlcIiBjbGFzcz1cInJvdyBtdC0zIG14LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IHAtMCBwcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwXCIgW2lkXT1cIid0ZXh0JytpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiYnJhbmRcIiBbbmdDbGFzc109XCJicmFuZHNMaXN0Lmxlbmd0aCAmJiAhaXNFZGl0ICYmICFjaGVja1VzZWQoaSkgJiYgYnJhbmRHcm91cC5nZXQoJ2JyYW5kJyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpID8gJ2RhbmdlcicgOiAnJ1wiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXMtMyBtdC00XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTVcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTUgMTZcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNC43MDcxIDguNzA3MTFDMTUuMDk3NiA4LjMxNjU4IDE1LjA5NzYgNy42ODM0MiAxNC43MDcxIDcuMjkyODlMOC4zNDMxNSAwLjkyODkzMkM3Ljk1MjYyIDAuNTM4NDA4IDcuMzE5NDYgMC41Mzg0MDggNi45Mjg5MyAwLjkyODkzMkM2LjUzODQxIDEuMzE5NDYgNi41Mzg0MSAxLjk1MjYyIDYuOTI4OTMgMi4zNDMxNUwxMi41ODU4IDhMNi45Mjg5MyAxMy42NTY5QzYuNTM4NDEgMTQuMDQ3NCA2LjUzODQxIDE0LjY4MDUgNi45Mjg5MyAxNS4wNzExQzcuMzE5NDYgMTUuNDYxNiA3Ljk1MjYyIDE1LjQ2MTYgOC4zNDMxNSAxNS4wNzExTDE0LjcwNzEgOC43MDcxMVpNMCA4VjlIMTRWOFY3SDBWOFpcIiBmaWxsPVwiI0QwRDVERFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTQgcC0wIHBzLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy0xMDAgY2hpcC1ib3hcIiBmb3JtQXJyYXlOYW1lPVwiY2F0ZWdvcnlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWNvbnRhaW5lciBmb3JtLWNvbnRyb2xcIiBbbmdDbGFzc109XCJicmFuZHNMaXN0Lmxlbmd0aCAmJiAhaXNFZGl0ICYmICFjaGVja1VzZWQoaSkgJiYgYnJhbmRHcm91cC5nZXQoJ2NhdGVnb3J5Jyk/Lmhhc0Vycm9yKCdyZXF1aXJlZCcpID8gJ2RhbmdlcicgOiAnJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBnZXRDYXRlZ29yeShpKT8uY29udHJvbHM7bGV0IGo9aW5kZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNoaXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZS0zXCIgW25nQ2xhc3NdPVwiaXNFZGl0IHx8IGNoZWNrVXNlZChpKSA/ICdkaXNhYmxlZFRleHQnIDogJydcIj57e2l0ZW0udmFsdWV9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKGNsaWNrKT1cImlzRWRpdCB8fCBjaGVja1VzZWQoaSkgPyAnJyA6cmVtb3ZlQ2F0ZWdvcnkoaSxqKVwiIFtjbGFzc109XCJpc0VkaXQgfHwgY2hlY2tVc2VkKGkpID8gJ2Rpc2FibGVkVGV4dCc6J2N1cnNvci1wb2ludGVyJ1wiPjxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDNMMyA5TTMgM0w5IDlcIiBbYXR0ci5zdHJva2VdPVwiaXNFZGl0IHx8IGNoZWNrVXNlZChpKSA/ICcjYWViNGM1JyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwibWluLWhlaWdodDogNDRweDtcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGRyb3Bkb3duLWlucHV0IHBzLTMgbWUtM1wiIChjaGFuZ2UpPVwiYWRkQ2F0ZWdvcnkoJGV2ZW50LGkpXCIgW2lkXT1cIidjYXRlZ29yeUlucHV0JytpXCIgW2Rpc2FibGVkXT1cImlzRWRpdCB8fCBjaGVja1VzZWQoaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJjYXRlZ29yeVwiIC8+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcy0zIG10LTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNVwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNSAxNlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0LjcwNzEgOC43MDcxMUMxNS4wOTc2IDguMzE2NTggMTUuMDk3NiA3LjY4MzQyIDE0LjcwNzEgNy4yOTI4OUw4LjM0MzE1IDAuOTI4OTMyQzcuOTUyNjIgMC41Mzg0MDggNy4zMTk0NiAwLjUzODQwOCA2LjkyODkzIDAuOTI4OTMyQzYuNTM4NDEgMS4zMTk0NiA2LjUzODQxIDEuOTUyNjIgNi45Mjg5MyAyLjM0MzE1TDEyLjU4NTggOEw2LjkyODkzIDEzLjY1NjlDNi41Mzg0MSAxNC4wNDc0IDYuNTM4NDEgMTQuNjgwNSA2LjkyODkzIDE1LjA3MTFDNy4zMTk0NiAxNS40NjE2IDcuOTUyNjIgMTUuNDYxNiA4LjM0MzE1IDE1LjA3MTFMMTQuNzA3MSA4LjcwNzExWk0wIDhWOUgxNFY4VjdIMFY4WlwiIGZpbGw9XCIjRDBENUREXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC00IHAtMCBwcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctMTAwIGNoaXAtYm94XCIgZm9ybUFycmF5TmFtZT1cInN1YkNhdGVnb3J5XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1jb250YWluZXIgZm9ybS1jb250cm9sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGdldFN1YkNhdGVnb3J5KGkpPy5jb250cm9scztsZXQgaj1pbmRleFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hpcFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1lLTNcIiBbbmdDbGFzc109XCJpc0VkaXQgfHwgY2hlY2tVc2VkKGkpID8gJ2Rpc2FibGVkVGV4dCcgOiAnJ1wiPnt7aXRlbS52YWx1ZX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAoY2xpY2spPVwiaXNFZGl0IHx8IGNoZWNrVXNlZChpKSA/ICcnIDogcmVtb3ZlU3ViQ2F0ZWdvcnkoaSxqKVwiIFtjbGFzc109XCJpc0VkaXQgfHwgY2hlY2tVc2VkKGkpID8gJyc6J2N1cnNvci1wb2ludGVyJ1wiPjxzdmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxMlwiIGhlaWdodD1cIjEyXCIgdmlld0JveD1cIjAgMCAxMiAxMlwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05IDNMMyA5TTMgM0w5IDlcIiBbYXR0ci5zdHJva2VdPVwiaXNFZGl0IHx8IGNoZWNrVXNlZChpKSA/ICcjYWViNGM1JyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHN0eWxlPVwibWluLWhlaWdodDogNDRweDtcIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGRyb3Bkb3duLWlucHV0IHBzLTMgbWUtM1wiIChjaGFuZ2UpPVwiYWRkU3ViQ2F0ZWdvcnkoJGV2ZW50LGkpXCIgW2lkXT1cIidzdWJDYXRlZ29yeUlucHV0JytpXCIgW2Rpc2FibGVkXT1cImlzRWRpdCB8fCBjaGVja1VzZWQoaSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJjYXRlZ29yeVwiIC8+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcy0zIG10LTRcIiAoY2xpY2spPVwiY2hlY2tVc2VkKGkpIHx8IGlzRWRpdCA/ICcnIDogcmVtb3ZlQnJhbmQoaSlcIiAqbmdJZj1cImJyYW5kQ29uZmlnLnZhbHVlLmxlbmd0aCA+IDFcIiBbbmdDbGFzc109XCJjaGVja1VzZWQoaSkgfHwgaXNFZGl0ID8gJ2N1cnNvci1kZWZhdWx0JyA6ICdjdXJzb3ItcG9pbnRlcidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxOFwiIGhlaWdodD1cIjE4XCIgdmlld0JveD1cIjAgMCAxOCAxOFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEzLjUgNC41TDQuNSAxMy41TTQuNSA0LjVMMTMuNSAxMy41XCIgc3Ryb2tlPVwiI0QwRDVERFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZm9ybT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIG10LTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiIChjbGljayk9XCJhZGRCcmFuZCgpXCIgW2Rpc2FibGVkXT1cImlzRWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjAwMDEgNC4xNjY3NVYxNS44MzM0TTQuMTY2NzUgMTAuMDAwMUgxNS44MzM0XCIgc3Ryb2tlPVwiI0QwRDVERFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+IEFkZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiAqbmdJZj1cImlzRWRpdFwiIChjbGljayk9XCJpc0VkaXQgPSBmYWxzZTtmb3JtRW5hYmxlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xNzc1XzM3OTg1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNC4xNjY3IDIuNDk5OTNDMTQuMzg1NiAyLjI4MTA2IDE0LjY0NTUgMi4xMDc0NCAxNC45MzE0IDEuOTg4OTlDMTUuMjE3NCAxLjg3MDU0IDE1LjUyMzkgMS44MDk1NyAxNS44MzM0IDEuODA5NTdDMTYuMTQyOSAxLjgwOTU3IDE2LjQ0OTQgMS44NzA1NCAxNi43MzU0IDEuOTg4OTlDMTcuMDIxNCAyLjEwNzQ0IDE3LjI4MTIgMi4yODEwNiAxNy41MDAxIDIuNDk5OTNDMTcuNzE5IDIuNzE4OCAxNy44OTI2IDIuOTc4NjMgMTguMDExIDMuMjY0NkMxOC4xMjk1IDMuNTUwNTcgMTguMTkwNCAzLjg1NzA2IDE4LjE5MDQgNC4xNjY1OUMxOC4xOTA0IDQuNDc2MTIgMTguMTI5NSA0Ljc4MjYyIDE4LjAxMSA1LjA2ODU5QzE3Ljg5MjYgNS4zNTQ1NSAxNy43MTkgNS42MTQzOSAxNy41MDAxIDUuODMzMjZMNi4yNTAwOCAxNy4wODMzTDEuNjY2NzUgMTguMzMzM0wyLjkxNjc1IDEzLjc0OTlMMTQuMTY2NyAyLjQ5OTkzWlwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2c+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGNsaXBQYXRoIGlkPVwiY2xpcDBfMTc3NV8zNzk4NVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxyZWN0IHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4gRWRpdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tcHJpbWFyeVwiICpuZ0lmPVwiIWlzRWRpdFwiIChjbGljayk9XCJ1cGRhdGVCcmFuZCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2F2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09ICdicmFuZE1ldGEnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LWdyb3ctMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+QnJhbmQgTWV0YSBEYXRhPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHAgY2xhc3M9XCJtYi0wXCI+TWFpbnRhaW4gdGhlIFBpZCBDYXQgJiM4NTk0OyBCcmFuZCAvIENhdGVnb3J5IC8gQmFuZCBtYXBwaW5nIHVzZWQgZHVyaW5nIHBsYW5vZ3JhbSBleHBvcnQuPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDozNjBweDtmbGV4LXNocmluazowXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJwb3NpdGlvbi1hYnNvbHV0ZVwiIHN0eWxlPVwibGVmdDoxMnB4O3RvcDo1MCU7dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTUwJSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE4XCIgaGVpZ2h0PVwiMThcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0yMSAyMUwxNi42NSAxNi42NU0xOSAxMUMxOSAxNS40MTgzIDE1LjQxODMgMTkgMTEgMTlDNi41ODE3MiAxOSAzIDE1LjQxODMgMyAxMUMzIDYuNTgxNzIgNi41ODE3MiAzIDExIDNDMTUuNDE4MyAzIDE5IDYuNTgxNzIgMTkgMTFaXCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIHN0eWxlPVwicGFkZGluZy1sZWZ0OjM4cHhcIiBwbGFjZWhvbGRlcj1cIlNlYXJjaCBQaWQgQ2F0LCBUZW1wIEdyb3VwLCBDYXRlZ29yeSwgQnJhbmQgb3IgQmFuZFwiIFsobmdNb2RlbCldPVwiYnJhbmRNZXRhU2VhcmNoXCIgW25nTW9kZWxPcHRpb25zXT1cIntzdGFuZGFsb25lOiB0cnVlfVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWVuZCBtdC0xXCIgKm5nSWY9XCJicmFuZE1ldGFEYXRhPy5jb250cm9scz8ubGVuZ3RoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGwgY2xhc3M9XCJ0ZXh0LW11dGVkXCI+e3sgZmlsdGVyZWRCcmFuZE1ldGFDb3VudCB9fSBvZiB7eyBicmFuZE1ldGFEYXRhLmNvbnRyb2xzLmxlbmd0aCB9fSByb3cocyk8L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cImJyYW5kTWV0YUZvcm1cIiBjbGFzcz1cIm10LTNcIiAjYnJhbmRNZXRhUmVmPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZvcm1BcnJheU5hbWU9XCJicmFuZE1ldGFEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IG14LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgcC0wIHBzLTJcIj48ZGl2IGNsYXNzPVwiZm9ybS1sYWJlbFwiPlBpZCBDYXQ8L2Rpdj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTIgcC0wIHBzLTJcIj48ZGl2IGNsYXNzPVwiZm9ybS1sYWJlbFwiPlRlbXAgR3JvdXA8L2Rpdj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgcC0wIHBzLTJcIj48ZGl2IGNsYXNzPVwiZm9ybS1sYWJlbFwiPkNhdGVnb3J5PC9kaXY+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIHAtMCBwcy0yXCI+PGRpdiBjbGFzcz1cImZvcm0tbGFiZWxcIj5CcmFuZDwvZGl2PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBwLTAgcHMtMlwiPjxkaXYgY2xhc3M9XCJmb3JtLWxhYmVsXCI+QmFuZDwvZGl2PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiaGVpZ2h0OmNhbGMoNzV2aCAtIDI4MHB4KTtvdmVyZmxvdy15OnNjcm9sbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCIhYnJhbmRNZXRhRGF0YT8uY29udHJvbHM/Lmxlbmd0aFwiIGNsYXNzPVwidGV4dC1jZW50ZXIgcC01IHRleHQtbXV0ZWRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm8gYnJhbmQgbWV0YSBkYXRhIGZvdW5kLiBDbGljayBcIkVkaXRcIiB0aGVuIFwiQWRkXCIgdG8gY3JlYXRlIGEgcm93LlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJicmFuZE1ldGFEYXRhPy5jb250cm9scz8ubGVuZ3RoICYmICFmaWx0ZXJlZEJyYW5kTWV0YUNvdW50XCIgY2xhc3M9XCJ0ZXh0LWNlbnRlciBwLTUgdGV4dC1tdXRlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyByb3dzIG1hdGNoIFwie3sgYnJhbmRNZXRhU2VhcmNoIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBtZXRhR3JvdXAgb2YgYnJhbmRNZXRhRGF0YT8uY29udHJvbHM7IGxldCBpID0gaW5kZXhcIiBbZm9ybUdyb3VwTmFtZV09XCJpXCIgY2xhc3M9XCJyb3cgbXQtMyBteC0wXCIgW2lkXT1cIidtZXRhUm93JyArIGlcIiBbaGlkZGVuXT1cIiFtYXRjaGVzQnJhbmRNZXRhU2VhcmNoKG1ldGFHcm91cClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIHAtMCBwcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInBpZENhdFwiIFtpZF09XCInbWV0YVJvdycgKyBpICsgJy1waWRDYXQnXCIgW25nQ2xhc3NdPVwiIWlzQnJhbmRNZXRhRWRpdCAmJiBtZXRhR3JvdXAuZ2V0KCdwaWRDYXQnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgbWV0YUdyb3VwLmdldCgncGlkQ2F0Jyk/LnRvdWNoZWQgPyAnZGFuZ2VyJyA6ICcnXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yIHAtMCBwcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cInRlbXBHcm91cFwiIFtpZF09XCInbWV0YVJvdycgKyBpICsgJy10ZW1wR3JvdXAnXCIgW25nQ2xhc3NdPVwiIWlzQnJhbmRNZXRhRWRpdCAmJiBtZXRhR3JvdXAuZ2V0KCd0ZW1wR3JvdXAnKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgbWV0YUdyb3VwLmdldCgndGVtcEdyb3VwJyk/LnRvdWNoZWQgPyAnZGFuZ2VyJyA6ICcnXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1tZC0zIHAtMCBwcy0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbFwiIGZvcm1Db250cm9sTmFtZT1cImNhdGVnb3J5XCIgW2lkXT1cIidtZXRhUm93JyArIGkgKyAnLWNhdGVnb3J5J1wiIFtuZ0NsYXNzXT1cIiFpc0JyYW5kTWV0YUVkaXQgJiYgbWV0YUdyb3VwLmdldCgnY2F0ZWdvcnknKT8uaGFzRXJyb3IoJ3JlcXVpcmVkJykgJiYgbWV0YUdyb3VwLmdldCgnY2F0ZWdvcnknKT8udG91Y2hlZCA/ICdkYW5nZXInIDogJydcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTMgcC0wIHBzLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiYnJhbmRcIiBbaWRdPVwiJ21ldGFSb3cnICsgaSArICctYnJhbmQnXCIgW25nQ2xhc3NdPVwiIWlzQnJhbmRNZXRhRWRpdCAmJiBtZXRhR3JvdXAuZ2V0KCdicmFuZCcpPy5oYXNFcnJvcigncmVxdWlyZWQnKSAmJiBtZXRhR3JvdXAuZ2V0KCdicmFuZCcpPy50b3VjaGVkID8gJ2RhbmdlcicgOiAnJ1wiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtMiBwLTAgcHMtMiBkLWZsZXhcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiYmFuZFwiIFtpZF09XCInbWV0YVJvdycgKyBpICsgJy1iYW5kJ1wiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtcy0zIG10LTNcIiAoY2xpY2spPVwiaXNCcmFuZE1ldGFFZGl0ID8gJycgOiByZW1vdmVCcmFuZE1ldGFSb3coaSlcIiBbbmdDbGFzc109XCJpc0JyYW5kTWV0YUVkaXQgPyAnY3Vyc29yLWRlZmF1bHQnIDogJ2N1cnNvci1wb2ludGVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMThcIiBoZWlnaHQ9XCIxOFwiIHZpZXdCb3g9XCIwIDAgMTggMThcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEzLjUgNC41TDQuNSAxMy41TTQuNSA0LjVMMTMuNSAxMy41XCIgc3Ryb2tlPVwiI0QwRDVERFwiIHN0cm9rZS13aWR0aD1cIjJcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lXCIgKGNsaWNrKT1cImFkZEJyYW5kTWV0YVJvdygpXCIgW2Rpc2FibGVkXT1cImlzQnJhbmRNZXRhRWRpdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjAwMDEgNC4xNjY3NVYxNS44MzM0TTQuMTY2NzUgMTAuMDAwMUgxNS44MzM0XCIgc3Ryb2tlPVwiI0QwRDVERFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+IEFkZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiAqbmdJZj1cIiFpc0JyYW5kTWV0YUVkaXRcIiAoY2xpY2spPVwiY2FuY2VsQnJhbmRNZXRhRWRpdCgpXCI+Q2FuY2VsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZSBtcy0yXCIgKm5nSWY9XCJpc0JyYW5kTWV0YUVkaXRcIiAoY2xpY2spPVwiZW5hYmxlQnJhbmRNZXRhRm9ybSgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxnIGNsaXAtcGF0aD1cInVybCgjY2xpcDBfMTc3NV8zNzk5MClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTQuMTY2NyAyLjQ5OTkzQzE0LjM4NTYgMi4yODEwNiAxNC42NDU1IDIuMTA3NDQgMTQuOTMxNCAxLjk4ODk5QzE1LjIxNzQgMS44NzA1NCAxNS41MjM5IDEuODA5NTcgMTUuODMzNCAxLjgwOTU3QzE2LjE0MjkgMS44MDk1NyAxNi40NDk0IDEuODcwNTQgMTYuNzM1NCAxLjk4ODk5QzE3LjAyMTQgMi4xMDc0NCAxNy4yODEyIDIuMjgxMDYgMTcuNTAwMSAyLjQ5OTkzQzE3LjcxOSAyLjcxODggMTcuODkyNiAyLjk3ODYzIDE4LjAxMSAzLjI2NDZDMTguMTI5NSAzLjU1MDU3IDE4LjE5MDQgMy44NTcwNiAxOC4xOTA0IDQuMTY2NTlDMTguMTkwNCA0LjQ3NjEyIDE4LjEyOTUgNC43ODI2MiAxOC4wMTEgNS4wNjg1OUMxNy44OTI2IDUuMzU0NTUgMTcuNzE5IDUuNjE0MzkgMTcuNTAwMSA1LjgzMzI2TDYuMjUwMDggMTcuMDgzM0wxLjY2Njc1IDE4LjMzMzNMMi45MTY3NSAxMy43NDk5TDE0LjE2NjcgMi40OTk5M1pcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGVmcz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxjbGlwUGF0aCBpZD1cImNsaXAwXzE3NzVfMzc5OTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2NsaXBQYXRoPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2RlZnM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+IEVkaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgbXMtMlwiICpuZ0lmPVwiIWlzQnJhbmRNZXRhRWRpdFwiIChjbGljayk9XCJ1cGRhdGVCcmFuZE1ldGFEYXRhKClcIj5TYXZlPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwic2VsZWN0ZWRUYWIgPT09ICd0YXNrJ1wiID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+R2xvYmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRhc2tzPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+VGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIGFwcGxpZXMgdG8gYWxsIHB1Ymxpc2hlZCB0YXNrcy48L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPCEtLSA8ZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tb3V0bGluZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTE0LjE2NjcgNi42NjY2N0wxMCAyLjVNMTAgMi41TDUuODMzMzMgNi42NjY2N00xMCAyLjVWMTIuNVwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPiBVcGxvYWQgQnJhbmRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciA+XHJcbiAgICAgICAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJ0YXNrRm9ybVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIER1ZSBkYXlzICh0byBjb21wbGV0ZSB0YXNrKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJmb3JtLWNvbnRyb2xcIiBmb3JtQ29udHJvbE5hbWU9XCJkdWVEYXlcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbWQtNFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHVlIHRpbWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGltZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sXCIgZm9ybUNvbnRyb2xOYW1lPVwiZHVlVGltZVwiLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiY2hlY2tsaXN0dHVybm9mZiBtcy0zIG10LTQgZnYtcGx1Z2lucy1pY29uLWNvbnRhaW5lIGNvbC1tZC04IGRpdldpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1zd2l0Y2hcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dCBtdC0zXCIgdHlwZT1cImNoZWNrYm94XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwiZ2VvRmVuY2luZ1wiIFtjaGVja2VkXT1cInRhc2tGb3JtLmdldCgnYWxsb3dlZFN0b3JlTG9jYXRpb24nKT8udmFsdWVcIiBmb3JtQ29udHJvbE5hbWU9XCJhbGxvd2VkU3RvcmVMb2NhdGlvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIHN1YlwiIFtuZ0NsYXNzXT1cInRhc2tGb3JtLmdldCgnYWxsb3dlZFN0b3JlTG9jYXRpb24nKT8udmFsdWUgPyAnYWN0aXZlJyA6ICcnXCIgZm9yPVwiZ2VvRmVuY2luZ1wiPkdlb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVuY2luZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2xhYmVsPjxicj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjay1sYWJlbCBzdWJ0ZXh0XCIgW25nQ2xhc3NdPVwidGFza0Zvcm0uZ2V0KCdhbGxvd2VkU3RvcmVMb2NhdGlvbicpPy52YWx1ZSA/ICdhY3RpdmUnIDogJydcIiBmb3I9XCJnZW9GZW5jaW5nXCI+QnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsaW5nLCB0aGUgY2hlY2tsaXN0IGNhbiBiZSBmaWxsZWQgYnkgdGhlIHVzZXIgb25seSB3aGVuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnNpZGUgdGhlIHN0b3JlLjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9mb3JtPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gbXQtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLW91dGxpbmVcIiAqbmdJZj1cImlzRWRpdFwiIChjbGljayk9XCJpc0VkaXQgPSBmYWxzZTt0YXNrRm9ybS5lbmFibGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGcgY2xpcC1wYXRoPVwidXJsKCNjbGlwMF8xNzc1XzM3OTg1KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE0LjE2NjcgMi40OTk5M0MxNC4zODU2IDIuMjgxMDYgMTQuNjQ1NSAyLjEwNzQ0IDE0LjkzMTQgMS45ODg5OUMxNS4yMTc0IDEuODcwNTQgMTUuNTIzOSAxLjgwOTU3IDE1LjgzMzQgMS44MDk1N0MxNi4xNDI5IDEuODA5NTcgMTYuNDQ5NCAxLjg3MDU0IDE2LjczNTQgMS45ODg5OUMxNy4wMjE0IDIuMTA3NDQgMTcuMjgxMiAyLjI4MTA2IDE3LjUwMDEgMi40OTk5M0MxNy43MTkgMi43MTg4IDE3Ljg5MjYgMi45Nzg2MyAxOC4wMTEgMy4yNjQ2QzE4LjEyOTUgMy41NTA1NyAxOC4xOTA0IDMuODU3MDYgMTguMTkwNCA0LjE2NjU5QzE4LjE5MDQgNC40NzYxMiAxOC4xMjk1IDQuNzgyNjIgMTguMDExIDUuMDY4NTlDMTcuODkyNiA1LjM1NDU1IDE3LjcxOSA1LjYxNDM5IDE3LjUwMDEgNS44MzMyNkw2LjI1MDA4IDE3LjA4MzNMMS42NjY3NSAxOC4zMzMzTDIuOTE2NzUgMTMuNzQ5OUwxNC4xNjY3IDIuNDk5OTNaXCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9nPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8Y2xpcFBhdGggaWQ9XCJjbGlwMF8xNzc1XzM3OTg1XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiBmaWxsPVwid2hpdGVcIi8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvY2xpcFBhdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kZWZzPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+IEVkaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5XCIgKm5nSWY9XCIhaXNFZGl0XCIgKGNsaWNrKT1cInVwZGF0ZVRhc2soKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2F2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbiJdfQ==