mis-crystal-design-system 14.0.43-test → 14.0.44-test

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 (64) hide show
  1. package/datepicker_v2/datepicker.module.d.ts +2 -1
  2. package/datepicker_v2/tz-datepicker.directive.d.ts +2 -0
  3. package/datepicker_v2/tz-dp-container/tz-dp-container.component.d.ts +2 -0
  4. package/daterangepicker_v2/daterangepicker.module.d.ts +2 -1
  5. package/daterangepicker_v2/tz-daterangepicker.directive.d.ts +2 -0
  6. package/daterangepicker_v2/tz-drp-container/tz-drp-container.component.d.ts +3 -1
  7. package/dropdown/dropdown.component.d.ts +1 -0
  8. package/dropdown/dropdown.module.d.ts +2 -1
  9. package/dynamic-form/dynamic-form.component.d.ts +1 -0
  10. package/esm2020/datepicker_v2/datepicker.module.mjs +5 -4
  11. package/esm2020/datepicker_v2/tz-datepicker.directive.mjs +21 -2
  12. package/esm2020/datepicker_v2/tz-dp-container/tz-dp-container.component.mjs +68 -63
  13. package/esm2020/daterangepicker_v2/daterangepicker.module.mjs +5 -4
  14. package/esm2020/daterangepicker_v2/models/drp-config.model.mjs +1 -1
  15. package/esm2020/daterangepicker_v2/tz-daterangepicker.directive.mjs +21 -2
  16. package/esm2020/daterangepicker_v2/tz-drp-container/tz-drp-container.component.mjs +121 -109
  17. package/esm2020/dropdown/dropdown.component.mjs +52 -38
  18. package/esm2020/dropdown/dropdown.module.mjs +5 -4
  19. package/esm2020/dynamic-form/dynamic-form.component.mjs +6 -11
  20. package/esm2020/mobile-filter/mobile-filter.component.mjs +18 -16
  21. package/esm2020/phone-input/phone-input.component.mjs +13 -82
  22. package/esm2020/specificdatepicker/tz-sdp-container/tz-sdp-container.component.mjs +41 -55
  23. package/esm2020/timepicker/timepicker.component.mjs +48 -54
  24. package/esm2020/timerangepicker/timerangepicker.component.mjs +42 -46
  25. package/fesm2015/mis-crystal-design-system-datepicker_v2.mjs +93 -66
  26. package/fesm2015/mis-crystal-design-system-datepicker_v2.mjs.map +1 -1
  27. package/fesm2015/mis-crystal-design-system-daterangepicker_v2.mjs +146 -113
  28. package/fesm2015/mis-crystal-design-system-daterangepicker_v2.mjs.map +1 -1
  29. package/fesm2015/mis-crystal-design-system-dropdown.mjs +57 -40
  30. package/fesm2015/mis-crystal-design-system-dropdown.mjs.map +1 -1
  31. package/fesm2015/mis-crystal-design-system-dynamic-form.mjs +4 -10
  32. package/fesm2015/mis-crystal-design-system-dynamic-form.mjs.map +1 -1
  33. package/fesm2015/mis-crystal-design-system-mobile-filter.mjs +17 -15
  34. package/fesm2015/mis-crystal-design-system-mobile-filter.mjs.map +1 -1
  35. package/fesm2015/mis-crystal-design-system-phone-input.mjs +10 -84
  36. package/fesm2015/mis-crystal-design-system-phone-input.mjs.map +1 -1
  37. package/fesm2015/mis-crystal-design-system-specificdatepicker.mjs +40 -54
  38. package/fesm2015/mis-crystal-design-system-specificdatepicker.mjs.map +1 -1
  39. package/fesm2015/mis-crystal-design-system-timepicker.mjs +47 -53
  40. package/fesm2015/mis-crystal-design-system-timepicker.mjs.map +1 -1
  41. package/fesm2015/mis-crystal-design-system-timerangepicker.mjs +41 -45
  42. package/fesm2015/mis-crystal-design-system-timerangepicker.mjs.map +1 -1
  43. package/fesm2020/mis-crystal-design-system-datepicker_v2.mjs +91 -66
  44. package/fesm2020/mis-crystal-design-system-datepicker_v2.mjs.map +1 -1
  45. package/fesm2020/mis-crystal-design-system-daterangepicker_v2.mjs +143 -112
  46. package/fesm2020/mis-crystal-design-system-daterangepicker_v2.mjs.map +1 -1
  47. package/fesm2020/mis-crystal-design-system-dropdown.mjs +55 -40
  48. package/fesm2020/mis-crystal-design-system-dropdown.mjs.map +1 -1
  49. package/fesm2020/mis-crystal-design-system-dynamic-form.mjs +4 -10
  50. package/fesm2020/mis-crystal-design-system-dynamic-form.mjs.map +1 -1
  51. package/fesm2020/mis-crystal-design-system-mobile-filter.mjs +17 -15
  52. package/fesm2020/mis-crystal-design-system-mobile-filter.mjs.map +1 -1
  53. package/fesm2020/mis-crystal-design-system-phone-input.mjs +10 -79
  54. package/fesm2020/mis-crystal-design-system-phone-input.mjs.map +1 -1
  55. package/fesm2020/mis-crystal-design-system-specificdatepicker.mjs +40 -54
  56. package/fesm2020/mis-crystal-design-system-specificdatepicker.mjs.map +1 -1
  57. package/fesm2020/mis-crystal-design-system-timepicker.mjs +47 -53
  58. package/fesm2020/mis-crystal-design-system-timepicker.mjs.map +1 -1
  59. package/fesm2020/mis-crystal-design-system-timerangepicker.mjs +41 -45
  60. package/fesm2020/mis-crystal-design-system-timerangepicker.mjs.map +1 -1
  61. package/package.json +1 -1
  62. package/phone-input/phone-input.component.d.ts +11 -25
  63. package/specificdatepicker/tz-sdp-container/tz-sdp-container.component.d.ts +1 -1
  64. package/timepicker/timepicker.component.d.ts +2 -2
@@ -1,7 +1,5 @@
1
- import { Component, EventEmitter, Input, Output } from '@angular/core';
2
- import { FormControl } from '@angular/forms';
3
- import { PhoneNumberUtil } from 'google-libphonenumber';
4
- import { getCountries, getCountryCallingCode } from 'libphonenumber-js';
1
+ import { Component, EventEmitter, Input, Output } from "@angular/core";
2
+ import { FormControl } from "@angular/forms";
5
3
  import * as i0 from "@angular/core";
6
4
  import * as i1 from "@angular/common";
7
5
  import * as i2 from "@angular/forms";
@@ -9,90 +7,29 @@ import * as i3 from "mis-crystal-design-system/dropdown";
9
7
  const _c0 = function (a0) { return { "height": a0 }; };
10
8
  export class PhoneInputComponent {
11
9
  constructor() {
12
- this.dropdownHeight = '';
13
- this.dropdownWidth = '';
14
10
  this.dropdownData = [];
15
- this.dropdownSelectedItem = { value: '', label: '', countryCode: '' };
11
+ this.dropdownSelectedItem = { value: "", label: "" };
16
12
  this.inputPlaceholder = 'Enter';
17
13
  this.inputFormControl = new FormControl();
18
14
  this.onDropdownSelection = new EventEmitter();
19
- this.onInvalidPhoneNumber = new EventEmitter();
20
- this.dropdownListWidth = '';
21
- this.dropdownListHeight = '';
22
- this.searchEnabled = true;
23
- this.inputType = 'number';
24
- this.searchLabel = 'Search Keyword';
25
- this.defaultCountry = 'IN';
26
- this.phoneValidator = true;
27
- this.countryCodes = [{ label: '', value: '', countryCode: '' }];
28
- this.selectedCountryName = '';
29
- this.validationMessage = '';
30
- this.phoneUtil = PhoneNumberUtil.getInstance();
15
+ this.searchEnabled = false;
16
+ this.inputType = "number";
17
+ this.searchLabel = "Search Keyword";
31
18
  }
32
19
  ngOnInit() {
33
- if (this.phoneValidator) {
34
- this.loadCountryCodes();
35
- this.dropdownData = this.countryCodes;
36
- const countryCodeToSelect = this.defaultCountry;
37
- const def = this.countryCodes.find(item => item.countryCode === countryCodeToSelect);
38
- if (def) {
39
- this.dropdownSelectedItem = def;
40
- this.selectedCountryName = def.label;
41
- }
42
- this.validatePhoneNumber(this.inputFormControl?.value, this.dropdownSelectedItem?.countryCode);
43
- }
44
- this.inputFormControl.valueChanges.subscribe((value) => {
45
- this.validatePhoneNumber(value, this.dropdownSelectedItem?.countryCode);
46
- });
47
20
  }
48
21
  handleDropdownSelection(item) {
49
- this.dropdownSelectedItem = item;
50
- this.onDropdownSelection.emit(item.countryCode);
51
- this.selectedCountryName = item.label;
52
- this.validatePhoneNumber(this.inputFormControl?.value, this.dropdownSelectedItem?.countryCode);
53
- this.inputFormControl.patchValue({ countryCode: item.countryCode }, { emitEvent: false });
54
- }
55
- loadCountryCodes() {
56
- const countries = getCountries();
57
- this.countryCodes = countries.map((countryCode) => ({
58
- value: getCountryCallingCode(countryCode).toString(),
59
- label: `${countryCode} (+${getCountryCallingCode(countryCode)})`,
60
- countryCode: countryCode,
61
- }));
62
- }
63
- validatePhoneNumber(value, countryCode) {
64
- const phoneNumber = value?.phoneNumber || value;
65
- if (phoneNumber && countryCode) {
66
- try {
67
- const number = this.phoneUtil.parseAndKeepRawInput(phoneNumber, countryCode);
68
- const isValid = this.phoneUtil.isValidNumberForRegion(number, countryCode);
69
- if (isValid) {
70
- this.validationMessage = null;
71
- this.onInvalidPhoneNumber.emit('');
72
- }
73
- else {
74
- this.validationMessage = `Phone number invalid for country code: +${this.dropdownSelectedItem?.value}(${this.dropdownSelectedItem?.countryCode})`;
75
- this.onInvalidPhoneNumber.emit(this.validationMessage);
76
- }
77
- }
78
- catch (error) {
79
- this.validationMessage = 'Invalid input';
80
- this.onInvalidPhoneNumber.emit(this.validationMessage);
81
- }
82
- }
83
- }
84
- onBlur() {
85
- this.validatePhoneNumber(this.inputFormControl?.value, this.dropdownSelectedItem?.countryCode);
22
+ this.onDropdownSelection.emit(item);
86
23
  }
87
24
  }
88
25
  PhoneInputComponent.ɵfac = function PhoneInputComponent_Factory(t) { return new (t || PhoneInputComponent)(); };
89
- PhoneInputComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PhoneInputComponent, selectors: [["mis-phone-input"]], inputs: { dropdownHeight: "dropdownHeight", dropdownWidth: "dropdownWidth", inputHeight: "inputHeight", dropdownData: "dropdownData", dropdownSelectedItem: "dropdownSelectedItem", label: "label", inputPlaceholder: "inputPlaceholder", inputFormControl: "inputFormControl", dropdownListWidth: "dropdownListWidth", dropdownListHeight: "dropdownListHeight", searchEnabled: "searchEnabled", inputType: "inputType", searchLabel: "searchLabel", defaultCountry: "defaultCountry", phoneValidator: "phoneValidator" }, outputs: { onDropdownSelection: "onDropdownSelection", onInvalidPhoneNumber: "onInvalidPhoneNumber" }, decls: 5, vars: 16, consts: [[1, "main-container-phone"], [3, "height", "dropdownListWidth", "dropdownListHeight", "width", "data", "selectedItem", "label", "searchEnabled", "multiLine", "searchLabel", "onChange"], [1, "details-field"], [1, "input-box"], [1, "black-text", 3, "ngStyle", "placeholder", "formControl", "type", "blur"]], template: function PhoneInputComponent_Template(rf, ctx) { if (rf & 1) {
26
+ PhoneInputComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PhoneInputComponent, selectors: [["mis-phone-input"]], inputs: { dropdownHeight: "dropdownHeight", dropdownWidth: "dropdownWidth", inputHeight: "inputHeight", dropdownData: "dropdownData", dropdownSelectedItem: "dropdownSelectedItem", label: "label", inputPlaceholder: "inputPlaceholder", inputFormControl: "inputFormControl", dropdownListWidth: "dropdownListWidth", dropdownListHeight: "dropdownListHeight", searchEnabled: "searchEnabled", inputType: "inputType", searchLabel: "searchLabel" }, outputs: { onDropdownSelection: "onDropdownSelection" }, decls: 5, vars: 16, consts: [[1, "main-container-phone"], [3, "height", "dropdownListWidth", "dropdownListHeight", "width", "data", "selectedItem", "label", "searchEnabled", "multiLine", "searchLabel", "onChange"], [1, "details-field"], [1, "input-box"], [1, "black-text", 3, "ngStyle", "placeholder", "formControl", "type"]], template: function PhoneInputComponent_Template(rf, ctx) { if (rf & 1) {
90
27
  i0.ɵɵelementStart(0, "div", 0)(1, "mis-dropdown", 1);
91
28
  i0.ɵɵlistener("onChange", function PhoneInputComponent_Template_mis_dropdown_onChange_1_listener($event) { return ctx.handleDropdownSelection($event); });
92
29
  i0.ɵɵelementEnd();
93
- i0.ɵɵelementStart(2, "div", 2)(3, "div", 3)(4, "input", 4);
94
- i0.ɵɵlistener("blur", function PhoneInputComponent_Template_input_blur_4_listener() { return ctx.onBlur(); });
95
- i0.ɵɵelementEnd()()()();
30
+ i0.ɵɵelementStart(2, "div", 2)(3, "div", 3);
31
+ i0.ɵɵelement(4, "input", 4);
32
+ i0.ɵɵelementEnd()()();
96
33
  } if (rf & 2) {
97
34
  i0.ɵɵadvance(1);
98
35
  i0.ɵɵproperty("height", ctx.dropdownHeight)("dropdownListWidth", ctx.dropdownListWidth)("dropdownListHeight", ctx.dropdownListHeight)("width", ctx.dropdownWidth)("data", ctx.dropdownData)("selectedItem", ctx.dropdownSelectedItem)("label", ctx.label)("searchEnabled", ctx.searchEnabled)("multiLine", false)("searchLabel", ctx.searchLabel);
@@ -101,7 +38,7 @@ PhoneInputComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PhoneIn
101
38
  } }, dependencies: [i1.NgStyle, i2.DefaultValueAccessor, i2.NgControlStatus, i2.FormControlDirective, i3.DropdownComponent], styles: [".main-container-phone[_ngcontent-%COMP%]{display:flex;border:1px solid #E0E0E0;border-radius:6px}.details-field[_ngcontent-%COMP%] label[_ngcontent-%COMP%]{display:inline-block;min-width:224px;margin-right:24px}.details-field[_ngcontent-%COMP%] .input-box[_ngcontent-%COMP%]{width:100%}.details-field[_ngcontent-%COMP%] .input-box[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{width:100%;height:32px}input[_ngcontent-%COMP%]{padding:10px 16px;border:none;outline:none;color:#181f33;line-height:24px;font-size:16px;width:100%;height:auto;border-radius:6px}.black-text[_ngcontent-%COMP%]{color:#181f33;font-size:16px;line-height:24px}input[_ngcontent-%COMP%]::-webkit-outer-spin-button, input[_ngcontent-%COMP%]::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.main-container-phone[_ngcontent-%COMP%] .item{padding:8px!important}.main-container-phone[_ngcontent-%COMP%] .dropdown{border:unset!important}"] });
102
39
  (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(PhoneInputComponent, [{
103
40
  type: Component,
104
- args: [{ selector: "mis-phone-input", template: "<div class=\"main-container-phone\">\n <mis-dropdown \n [height]=\"dropdownHeight\" \n [dropdownListWidth]=\"dropdownListWidth\"\n [dropdownListHeight]=\"dropdownListHeight\" \n [width]=\"dropdownWidth\" \n [data]=\"dropdownData\"\n [selectedItem]=\"dropdownSelectedItem\" \n [label]=\"label\" \n [searchEnabled]=\"searchEnabled\" \n [multiLine]=\"false\"\n (onChange)=\"handleDropdownSelection($event)\" \n [searchLabel]=\"searchLabel\">\n </mis-dropdown>\n <div class=\"details-field\">\n <div class=\"input-box\">\n <input\n [ngStyle]=\"{'height': inputHeight }\"\n class=\"black-text\" \n [placeholder]=\"inputPlaceholder\"\n [formControl]=\"inputFormControl\" \n [type]=\"inputType\"\n (blur)=\"onBlur()\"\n />\n </div>\n </div>\n</div>\n", styles: [".main-container-phone{display:flex;border:1px solid #E0E0E0;border-radius:6px}.details-field label{display:inline-block;min-width:224px;margin-right:24px}.details-field .input-box{width:100%}.details-field .input-box input{width:100%;height:32px}input{padding:10px 16px;border:none;outline:none;color:#181f33;line-height:24px;font-size:16px;width:100%;height:auto;border-radius:6px}.black-text{color:#181f33;font-size:16px;line-height:24px}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.main-container-phone ::ng-deep .item{padding:8px!important}.main-container-phone ::ng-deep .dropdown{border:unset!important}\n"] }]
41
+ args: [{ selector: "mis-phone-input", template: "<div class=\"main-container-phone\">\n <mis-dropdown [height]=\"dropdownHeight\" [dropdownListWidth]=\"dropdownListWidth\"[dropdownListHeight]=\"dropdownListHeight\" [width]=\"dropdownWidth\" [data]=\"dropdownData\" [selectedItem]=\"dropdownSelectedItem\" [label]=\"label\" [searchEnabled]=\"searchEnabled\" [multiLine]=\"false\" (onChange)=\"handleDropdownSelection($event)\" [searchLabel]=\"searchLabel\"></mis-dropdown>\n <div class=\"details-field\">\n <div class=\"input-box\">\n <input\n [ngStyle]=\"{'height': inputHeight }\"\n class=\"black-text\"\n [placeholder]=\"inputPlaceholder\"\n [formControl]=\"inputFormControl\" \n [type]=\"inputType\"\n />\n </div>\n </div>\n</div>\n", styles: [".main-container-phone{display:flex;border:1px solid #E0E0E0;border-radius:6px}.details-field label{display:inline-block;min-width:224px;margin-right:24px}.details-field .input-box{width:100%}.details-field .input-box input{width:100%;height:32px}input{padding:10px 16px;border:none;outline:none;color:#181f33;line-height:24px;font-size:16px;width:100%;height:auto;border-radius:6px}.black-text{color:#181f33;font-size:16px;line-height:24px}input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.main-container-phone ::ng-deep .item{padding:8px!important}.main-container-phone ::ng-deep .dropdown{border:unset!important}\n"] }]
105
42
  }], function () { return []; }, { dropdownHeight: [{
106
43
  type: Input
107
44
  }], dropdownWidth: [{
@@ -120,8 +57,6 @@ PhoneInputComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PhoneIn
120
57
  type: Input
121
58
  }], onDropdownSelection: [{
122
59
  type: Output
123
- }], onInvalidPhoneNumber: [{
124
- type: Output
125
60
  }], dropdownListWidth: [{
126
61
  type: Input
127
62
  }], dropdownListHeight: [{
@@ -132,9 +67,5 @@ PhoneInputComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: PhoneIn
132
67
  type: Input
133
68
  }], searchLabel: [{
134
69
  type: Input
135
- }], defaultCountry: [{
136
- type: Input
137
- }], phoneValidator: [{
138
- type: Input
139
70
  }] }); })();
140
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvcGhvbmUtaW5wdXQvcGhvbmUtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvcGhvbmUtaW5wdXQvcGhvbmUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxZQUFZLEVBQUUscUJBQXFCLEVBQWUsTUFBTSxtQkFBbUIsQ0FBQzs7Ozs7O0FBWXJGLE1BQU0sT0FBTyxtQkFBbUI7SUF3QjlCO1FBdkJTLG1CQUFjLEdBQVksRUFBRSxDQUFDO1FBQzdCLGtCQUFhLEdBQVksRUFBRSxDQUFDO1FBRTVCLGlCQUFZLEdBQXlCLEVBQUUsQ0FBQztRQUN4Qyx5QkFBb0IsR0FBdUIsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO1FBRXJGLHFCQUFnQixHQUFXLE9BQU8sQ0FBQztRQUNuQyxxQkFBZ0IsR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNqRCx3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2pELHlCQUFvQixHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDbkQsc0JBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUN4QixrQkFBYSxHQUFZLElBQUksQ0FBQztRQUM5Qixj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QUEsNEJBQUEsMEJBQUEsMENBQUEsb0JBQUEsb0NBQUEsb0JBQUEsZ0NBQUE7UUFlckIsZUFBb0M7UUFBcEMsc0VBQW9DLHFDQUFBLHFDQUFBLHVCQUFBOzt1RkRGL0IsbUJBQW1CO2NBTC9CLFNBQVM7MkJBQ0UsaUJBQWlCO3NDQUtsQixjQUFjO2tCQUF0QixLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSztZQUNHLFdBQVc7a0JBQW5CLEtBQUs7WUFDRyxZQUFZO2tCQUFwQixLQUFLO1lBQ0csb0JBQW9CO2tCQUE1QixLQUFLO1lBQ0csS0FBSztrQkFBYixLQUFLO1lBQ0csZ0JBQWdCO2tCQUF4QixLQUFLO1lBQ0csZ0JBQWdCO2tCQUF4QixLQUFLO1lBQ0ksbUJBQW1CO2tCQUE1QixNQUFNO1lBQ0csb0JBQW9CO2tCQUE3QixNQUFNO1lBQ0UsaUJBQWlCO2tCQUF6QixLQUFLO1lBQ0csa0JBQWtCO2tCQUExQixLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSztZQUNHLFNBQVM7a0JBQWpCLEtBQUs7WUFDRyxXQUFXO2tCQUFuQixLQUFLO1lBQ0csY0FBYztrQkFBdEIsS0FBSztZQUNHLGNBQWM7a0JBQXRCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFBob25lTnVtYmVyVXRpbCB9IGZyb20gJ2dvb2dsZS1saWJwaG9uZW51bWJlcic7XG5pbXBvcnQgeyBnZXRDb3VudHJpZXMsIGdldENvdW50cnlDYWxsaW5nQ29kZSwgQ291bnRyeUNvZGUgfSBmcm9tICdsaWJwaG9uZW51bWJlci1qcyc7XG5pbXBvcnQgeyBEcm9wZG93bkl0ZW0gfSBmcm9tICdtaXMtY3J5c3RhbC1kZXNpZ24tc3lzdGVtL2Ryb3Bkb3duJztcblxuaW50ZXJmYWNlIEN1c3RvbURyb3Bkb3duSXRlbSBleHRlbmRzIERyb3Bkb3duSXRlbSB7XG4gIGNvdW50cnlDb2RlOiBzdHJpbmc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtaXMtcGhvbmUtaW5wdXRcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9waG9uZS1pbnB1dC5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vcGhvbmUtaW5wdXQuY29tcG9uZW50LnNjc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgUGhvbmVJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGRyb3Bkb3duSGVpZ2h0Pzogc3RyaW5nID0gJyc7XG4gIEBJbnB1dCgpIGRyb3Bkb3duV2lkdGg/OiBzdHJpbmcgPSAnJztcbiAgQElucHV0KCkgaW5wdXRIZWlnaHQ/O1xuICBASW5wdXQoKSBkcm9wZG93bkRhdGE6IEN1c3RvbURyb3Bkb3duSXRlbVtdID0gW107XG4gIEBJbnB1dCgpIGRyb3Bkb3duU2VsZWN0ZWRJdGVtOiBDdXN0b21Ecm9wZG93bkl0ZW0gPSB7IHZhbHVlOiAnJywgbGFiZWw6ICcnLCBjb3VudHJ5Q29kZTogJycgfTtcbiAgQElucHV0KCkgbGFiZWw6IHN0cmluZztcbiAgQElucHV0KCkgaW5wdXRQbGFjZWhvbGRlcjogc3RyaW5nID0gJ0VudGVyJztcbiAgQElucHV0KCkgaW5wdXRGb3JtQ29udHJvbDogRm9ybUNvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2woKTtcbiAgQE91dHB1dCgpIG9uRHJvcGRvd25TZWxlY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgQE91dHB1dCgpIG9uSW52YWxpZFBob25lTnVtYmVyID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBJbnB1dCgpIGRyb3Bkb3duTGlzdFdpZHRoID0gJyc7XG4gIEBJbnB1dCgpIGRyb3Bkb3duTGlzdEhlaWdodCA9ICcnO1xuICBASW5wdXQoKSBzZWFyY2hFbmFibGVkOiBib29sZWFuID0gdHJ1ZTtcbiAgQElucHV0KCkgaW5wdXRUeXBlOiBzdHJpbmcgPSAnbnVtYmVyJztcbiAgQElucHV0KCkgc2VhcmNoTGFiZWw6IHN0cmluZyA9ICdTZWFyY2ggS2V5d29yZCc7XG4gIEBJbnB1dCgpIGRlZmF1bHRDb3VudHJ5OiBzdHJpbmcgPSAnSU4nO1xuICBASW5wdXQoKSBwaG9uZVZhbGlkYXRvcj8gPSB0cnVlO1xuXG4gIGNvdW50cnlDb2RlczogQ3VzdG9tRHJvcGRvd25JdGVtW10gPSBbeyBsYWJlbDogJycsIHZhbHVlOiAnJywgY291bnRyeUNvZGU6ICcnIH1dO1xuICBzZWxlY3RlZENvdW50cnlOYW1lOiBzdHJpbmcgPSAnJztcbiAgdmFsaWRhdGlvbk1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIHBob25lVXRpbDogUGhvbmVOdW1iZXJVdGlsO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucGhvbmVVdGlsID0gUGhvbmVOdW1iZXJVdGlsLmdldEluc3RhbmNlKCk7XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICBpZiAodGhpcy5waG9uZVZhbGlkYXRvcikge1xuICAgICAgdGhpcy5sb2FkQ291bnRyeUNvZGVzKCk7XG4gICAgICB0aGlzLmRyb3Bkb3duRGF0YSA9IHRoaXMuY291bnRyeUNvZGVzO1xuICAgICAgY29uc3QgY291bnRyeUNvZGVUb1NlbGVjdCA9IHRoaXMuZGVmYXVsdENvdW50cnk7XG4gICAgICBjb25zdCBkZWYgPSB0aGlzLmNvdW50cnlDb2Rlcy5maW5kKGl0ZW0gPT4gaXRlbS5jb3VudHJ5Q29kZSA9PT0gY291bnRyeUNvZGVUb1NlbGVjdCk7XG4gICAgICBpZiAoZGVmKSB7XG4gICAgICAgIHRoaXMuZHJvcGRvd25TZWxlY3RlZEl0ZW0gPSBkZWY7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5TmFtZSA9IGRlZi5sYWJlbDtcbiAgICAgIH1cbiAgICAgIHRoaXMudmFsaWRhdGVQaG9uZU51bWJlcih0aGlzLmlucHV0Rm9ybUNvbnRyb2w/LnZhbHVlLCB0aGlzLmRyb3Bkb3duU2VsZWN0ZWRJdGVtPy5jb3VudHJ5Q29kZSk7XG4gICAgfVxuXG4gICAgdGhpcy5pbnB1dEZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICB0aGlzLnZhbGlkYXRlUGhvbmVOdW1iZXIodmFsdWUsIHRoaXMuZHJvcGRvd25TZWxlY3RlZEl0ZW0/LmNvdW50cnlDb2RlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGhhbmRsZURyb3Bkb3duU2VsZWN0aW9uKGl0ZW06IEN1c3RvbURyb3Bkb3duSXRlbSkge1xuICAgIHRoaXMuZHJvcGRvd25TZWxlY3RlZEl0ZW0gPSBpdGVtO1xuICAgIHRoaXMub25Ecm9wZG93blNlbGVjdGlvbi5lbWl0KGl0ZW0uY291bnRyeUNvZGUpO1xuICAgIHRoaXMuc2VsZWN0ZWRDb3VudHJ5TmFtZSA9IGl0ZW0ubGFiZWw7XG4gICAgdGhpcy52YWxpZGF0ZVBob25lTnVtYmVyKHRoaXMuaW5wdXRGb3JtQ29udHJvbD8udmFsdWUsIHRoaXMuZHJvcGRvd25TZWxlY3RlZEl0ZW0/LmNvdW50cnlDb2RlKTtcbiAgICB0aGlzLmlucHV0Rm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSh7IGNvdW50cnlDb2RlOiBpdGVtLmNvdW50cnlDb2RlIH0sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgfVxuXG4gIGxvYWRDb3VudHJ5Q29kZXMoKSB7XG4gICAgY29uc3QgY291bnRyaWVzID0gZ2V0Q291bnRyaWVzKCk7XG4gICAgdGhpcy5jb3VudHJ5Q29kZXMgPSBjb3VudHJpZXMubWFwKChjb3VudHJ5Q29kZSkgPT4gKHtcbiAgICAgIHZhbHVlOiBnZXRDb3VudHJ5Q2FsbGluZ0NvZGUoY291bnRyeUNvZGUpLnRvU3RyaW5nKCksXG4gICAgICBsYWJlbDogYCR7Y291bnRyeUNvZGV9ICgrJHtnZXRDb3VudHJ5Q2FsbGluZ0NvZGUoY291bnRyeUNvZGUpfSlgLFxuICAgICAgY291bnRyeUNvZGU6IGNvdW50cnlDb2RlLFxuICAgIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyB2YWxpZGF0ZVBob25lTnVtYmVyKHZhbHVlOiBhbnksIGNvdW50cnlDb2RlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBwaG9uZU51bWJlciA9IHZhbHVlPy5waG9uZU51bWJlciB8fCB2YWx1ZTtcbiAgICBpZiAocGhvbmVOdW1iZXIgJiYgY291bnRyeUNvZGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IG51bWJlciA9IHRoaXMucGhvbmVVdGlsLnBhcnNlQW5kS2VlcFJhd0lucHV0KHBob25lTnVtYmVyLCBjb3VudHJ5Q29kZSk7XG4gICAgICAgIGNvbnN0IGlzVmFsaWQgPSB0aGlzLnBob25lVXRpbC5pc1ZhbGlkTnVtYmVyRm9yUmVnaW9uKG51bWJlciwgY291bnRyeUNvZGUpO1xuICAgICAgICBpZiAoaXNWYWxpZCkge1xuICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBudWxsO1xuICAgICAgICAgIHRoaXMub25JbnZhbGlkUGhvbmVOdW1iZXIuZW1pdCgnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9IGBQaG9uZSBudW1iZXIgaW52YWxpZCBmb3IgY291bnRyeSBjb2RlOiArJHt0aGlzLmRyb3Bkb3duU2VsZWN0ZWRJdGVtPy52YWx1ZX0oJHt0aGlzLmRyb3Bkb3duU2VsZWN0ZWRJdGVtPy5jb3VudHJ5Q29kZX0pYDtcbiAgICAgICAgICB0aGlzLm9uSW52YWxpZFBob25lTnVtYmVyLmVtaXQodGhpcy52YWxpZGF0aW9uTWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSAnSW52YWxpZCBpbnB1dCc7XG4gICAgICAgIHRoaXMub25JbnZhbGlkUGhvbmVOdW1iZXIuZW1pdCh0aGlzLnZhbGlkYXRpb25NZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkJsdXIoKSB7XG4gICAgdGhpcy52YWxpZGF0ZVBob25lTnVtYmVyKHRoaXMuaW5wdXRGb3JtQ29udHJvbD8udmFsdWUsIHRoaXMuZHJvcGRvd25TZWxlY3RlZEl0ZW0/LmNvdW50cnlDb2RlKTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1haW4tY29udGFpbmVyLXBob25lXCI+XG4gIDxtaXMtZHJvcGRvd24gXG4gICAgW2hlaWdodF09XCJkcm9wZG93bkhlaWdodFwiIFxuICAgIFtkcm9wZG93bkxpc3RXaWR0aF09XCJkcm9wZG93bkxpc3RXaWR0aFwiXG4gICAgW2Ryb3Bkb3duTGlzdEhlaWdodF09XCJkcm9wZG93bkxpc3RIZWlnaHRcIiBcbiAgICBbd2lkdGhdPVwiZHJvcGRvd25XaWR0aFwiIFxuICAgIFtkYXRhXT1cImRyb3Bkb3duRGF0YVwiXG4gICAgW3NlbGVjdGVkSXRlbV09XCJkcm9wZG93blNlbGVjdGVkSXRlbVwiIFxuICAgIFtsYWJlbF09XCJsYWJlbFwiIFxuICAgIFtzZWFyY2hFbmFibGVkXT1cInNlYXJjaEVuYWJsZWRcIiBcbiAgICBbbXVsdGlMaW5lXT1cImZhbHNlXCJcbiAgICAob25DaGFuZ2UpPVwiaGFuZGxlRHJvcGRvd25TZWxlY3Rpb24oJGV2ZW50KVwiIFxuICAgIFtzZWFyY2hMYWJlbF09XCJzZWFyY2hMYWJlbFwiPlxuICA8L21pcy1kcm9wZG93bj5cbiAgPGRpdiBjbGFzcz1cImRldGFpbHMtZmllbGRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtYm94XCI+XG4gICAgICA8aW5wdXRcbiAgICAgICAgW25nU3R5bGVdPVwieydoZWlnaHQnOiBpbnB1dEhlaWdodCB9XCJcbiAgICAgICAgY2xhc3M9XCJibGFjay10ZXh0XCIgIFxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaW5wdXRQbGFjZWhvbGRlclwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJpbnB1dEZvcm1Db250cm9sXCIgXG4gICAgICAgIFt0eXBlXT1cImlucHV0VHlwZVwiXG4gICAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGhvbmUtaW5wdXQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvcGhvbmUtaW5wdXQvcGhvbmUtaW5wdXQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvcGhvbmUtaW5wdXQvcGhvbmUtaW5wdXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRyxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7OztBQVE3QyxNQUFNLE9BQU8sbUJBQW1CO0lBa0I5QjtRQWRTLGlCQUFZLEdBQW1CLEVBQUUsQ0FBQztRQUNsQyx5QkFBb0IsR0FBZ0IsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQTtRQUc1RCxxQkFBZ0IsR0FBVyxPQUFPLENBQUM7UUFDbkMscUJBQWdCLEdBQWdCLElBQUksV0FBVyxFQUFFLENBQUM7UUFFakQsd0JBQW1CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUcvQyxrQkFBYSxHQUFTLEtBQUssQ0FBQztRQUM1QixjQUFTLEdBQVcsUUFBUSxDQUFDO1FBQzdCLGdCQUFXLEdBQVUsZ0JBQWdCLENBQUE7SUFFL0IsQ0FBQztJQUNoQixRQUFRO0lBQ1IsQ0FBQztJQUVELHVCQUF1QixDQUFDLElBQWtCO1FBQ3hDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdEMsQ0FBQzs7c0ZBeEJVLG1CQUFtQjtzRUFBbkIsbUJBQW1CO1FDVGhDLDhCQUFrQyxzQkFBQTtRQUNpUCxrSEFBWSxtQ0FBK0IsSUFBQztRQUE2QixpQkFBZTtRQUN6Vyw4QkFBMkIsYUFBQTtRQUV2QiwyQkFNRTtRQUNKLGlCQUFNLEVBQUEsRUFBQTs7UUFWTSxlQUF5QjtRQUF6QiwyQ0FBeUIsNENBQUEsOENBQUEsNEJBQUEsMEJBQUEsMENBQUEsb0JBQUEsb0NBQUEsb0JBQUEsZ0NBQUE7UUFJbkMsZUFBb0M7UUFBcEMsc0VBQW9DLHFDQUFBLHFDQUFBLHVCQUFBOzt1RkRJN0IsbUJBQW1CO2NBTC9CLFNBQVM7MkJBQ0UsaUJBQWlCO3NDQUtsQixjQUFjO2tCQUF0QixLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSztZQUNHLFdBQVc7a0JBQW5CLEtBQUs7WUFDRyxZQUFZO2tCQUFwQixLQUFLO1lBQ0csb0JBQW9CO2tCQUE1QixLQUFLO1lBQ0csS0FBSztrQkFBYixLQUFLO1lBRUcsZ0JBQWdCO2tCQUF4QixLQUFLO1lBQ0csZ0JBQWdCO2tCQUF4QixLQUFLO1lBRUksbUJBQW1CO2tCQUE1QixNQUFNO1lBQ0UsaUJBQWlCO2tCQUF6QixLQUFLO1lBQ0csa0JBQWtCO2tCQUExQixLQUFLO1lBQ0csYUFBYTtrQkFBckIsS0FBSztZQUNHLFNBQVM7a0JBQWpCLEtBQUs7WUFDRyxXQUFXO2tCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCAgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IERyb3Bkb3duSXRlbSB9IGZyb20gXCJtaXMtY3J5c3RhbC1kZXNpZ24tc3lzdGVtL2Ryb3Bkb3duXCI7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogXCJtaXMtcGhvbmUtaW5wdXRcIixcbiAgdGVtcGxhdGVVcmw6IFwiLi9waG9uZS1pbnB1dC5jb21wb25lbnQuaHRtbFwiLFxuICBzdHlsZVVybHM6IFtcIi4vcGhvbmUtaW5wdXQuY29tcG9uZW50LnNjc3NcIl1cbn0pXG5leHBvcnQgY2xhc3MgUGhvbmVJbnB1dENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGRyb3Bkb3duSGVpZ2h0Pzogc3RyaW5nO1xuICBASW5wdXQoKSBkcm9wZG93bldpZHRoPzogc3RyaW5nO1xuICBASW5wdXQoKSBpbnB1dEhlaWdodD86IHN0cmluZztcbiAgQElucHV0KCkgZHJvcGRvd25EYXRhOiBEcm9wZG93bkl0ZW1bXSA9IFtdO1xuICBASW5wdXQoKSBkcm9wZG93blNlbGVjdGVkSXRlbTpEcm9wZG93bkl0ZW0gPSB7IHZhbHVlOiBcIlwiLCBsYWJlbDogXCJcIiB9IFxuICBASW5wdXQoKSBsYWJlbDogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIGlucHV0UGxhY2Vob2xkZXI6IHN0cmluZyA9ICdFbnRlcic7XG4gIEBJbnB1dCgpIGlucHV0Rm9ybUNvbnRyb2w6IEZvcm1Db250cm9sID0gbmV3IEZvcm1Db250cm9sKCk7XG5cbiAgQE91dHB1dCgpIG9uRHJvcGRvd25TZWxlY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQElucHV0KCkgZHJvcGRvd25MaXN0V2lkdGg7XG4gIEBJbnB1dCgpIGRyb3Bkb3duTGlzdEhlaWdodDtcbiAgQElucHV0KCkgc2VhcmNoRW5hYmxlZDpib29sZWFuPWZhbHNlO1xuICBASW5wdXQoKSBpbnB1dFR5cGU6IHN0cmluZyA9IFwibnVtYmVyXCI7XG4gIEBJbnB1dCgpIHNlYXJjaExhYmVsOnN0cmluZyA9IFwiU2VhcmNoIEtleXdvcmRcIlxuICBcbiAgY29uc3RydWN0b3IoKSB7fVxuICBuZ09uSW5pdCgpIHtcbiAgfVxuXG4gIGhhbmRsZURyb3Bkb3duU2VsZWN0aW9uKGl0ZW06IERyb3Bkb3duSXRlbSl7XG4gICAgdGhpcy5vbkRyb3Bkb3duU2VsZWN0aW9uLmVtaXQoaXRlbSk7XG4gIH1cblxufVxuIiwiPGRpdiBjbGFzcz1cIm1haW4tY29udGFpbmVyLXBob25lXCI+XG4gIDxtaXMtZHJvcGRvd24gW2hlaWdodF09XCJkcm9wZG93bkhlaWdodFwiIFtkcm9wZG93bkxpc3RXaWR0aF09XCJkcm9wZG93bkxpc3RXaWR0aFwiW2Ryb3Bkb3duTGlzdEhlaWdodF09XCJkcm9wZG93bkxpc3RIZWlnaHRcIiBbd2lkdGhdPVwiZHJvcGRvd25XaWR0aFwiIFtkYXRhXT1cImRyb3Bkb3duRGF0YVwiIFtzZWxlY3RlZEl0ZW1dPVwiZHJvcGRvd25TZWxlY3RlZEl0ZW1cIiBbbGFiZWxdPVwibGFiZWxcIiBbc2VhcmNoRW5hYmxlZF09XCJzZWFyY2hFbmFibGVkXCIgW211bHRpTGluZV09XCJmYWxzZVwiIChvbkNoYW5nZSk9XCJoYW5kbGVEcm9wZG93blNlbGVjdGlvbigkZXZlbnQpXCIgW3NlYXJjaExhYmVsXT1cInNlYXJjaExhYmVsXCI+PC9taXMtZHJvcGRvd24+XG4gIDxkaXYgY2xhc3M9XCJkZXRhaWxzLWZpZWxkXCI+XG4gICAgPGRpdiBjbGFzcz1cImlucHV0LWJveFwiPlxuICAgICAgPGlucHV0XG4gICAgICBbbmdTdHlsZV09XCJ7J2hlaWdodCc6IGlucHV0SGVpZ2h0IH1cIlxuICAgICAgICBjbGFzcz1cImJsYWNrLXRleHRcIlxuICAgICAgICBbcGxhY2Vob2xkZXJdPVwiaW5wdXRQbGFjZWhvbGRlclwiXG4gICAgICAgIFtmb3JtQ29udHJvbF09XCJpbnB1dEZvcm1Db250cm9sXCIgXG4gICAgICAgIFt0eXBlXT1cImlucHV0VHlwZVwiXG4gICAgICAvPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19