@progress/kendo-e2e 1.4.4 → 1.4.6
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.
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
type CompereOptions = {
|
|
1
|
+
export type CompereOptions = {
|
|
2
2
|
allowMissing?: string[];
|
|
3
3
|
allowExtra?: string[];
|
|
4
4
|
};
|
|
5
|
-
type Result = {
|
|
5
|
+
export type Result = {
|
|
6
6
|
passed: string[];
|
|
7
7
|
missing: string[];
|
|
8
8
|
extra: string[];
|
|
@@ -19,4 +19,13 @@ type Result = {
|
|
|
19
19
|
* @param expectedHtml An html object.
|
|
20
20
|
*/
|
|
21
21
|
export declare function compareHtml(actualHtml: string, expectedHtml: string, options?: CompereOptions): Result;
|
|
22
|
-
|
|
22
|
+
/**
|
|
23
|
+
* Get partial html of bigger html block.
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* await getPartialHtml("<div><ul class="k-list"><ul></div>", ".k-list");
|
|
27
|
+
*
|
|
28
|
+
* @param originalHtml An html object.
|
|
29
|
+
* @param selector Css selector.
|
|
30
|
+
*/
|
|
31
|
+
export declare function getPartialHtml(originalHtml: string, selector: string): string;
|
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.compareHtml = void 0;
|
|
6
|
+
exports.getPartialHtml = exports.compareHtml = void 0;
|
|
7
7
|
/* eslint-disable prefer-const */
|
|
8
8
|
const sanitize_html_1 = __importDefault(require("sanitize-html"));
|
|
9
9
|
const jsdom_1 = __importDefault(require("jsdom"));
|
|
@@ -34,66 +34,102 @@ function compareHtml(actualHtml, expectedHtml, options) {
|
|
|
34
34
|
parseDom(actualDom, actualSelectors, parent);
|
|
35
35
|
parent = "";
|
|
36
36
|
parseDom(expectedDom, expectedSelectors);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
let replacedSelector = selector;
|
|
41
|
-
for (const extraItem of options === null || options === void 0 ? void 0 : options.allowExtra) {
|
|
42
|
-
replacedSelector = removeDublicatedSpaces(replacedSelector.replace(new RegExp(extraItem, 'g'), ''));
|
|
43
|
-
}
|
|
44
|
-
actualWithoutExtra.push(replacedSelector);
|
|
45
|
-
}
|
|
46
|
-
actualWithoutExtra = [...new Set(actualWithoutExtra)];
|
|
47
|
-
}
|
|
48
|
-
else {
|
|
49
|
-
actualWithoutExtra = actualSelectors;
|
|
50
|
-
}
|
|
37
|
+
result.actualSelectors = actualSelectors;
|
|
38
|
+
result.expectedSelectors = expectedSelectors;
|
|
39
|
+
// Delete all allowed missing from expected selectors
|
|
51
40
|
let expectedSelectorsWithoutMissing = [];
|
|
52
41
|
if ((options === null || options === void 0 ? void 0 : options.allowMissing) !== undefined) {
|
|
53
42
|
for (const selector of expectedSelectors) {
|
|
54
43
|
let replacedSelector = selector;
|
|
55
44
|
for (const missingItem of options === null || options === void 0 ? void 0 : options.allowMissing) {
|
|
56
|
-
replacedSelector =
|
|
45
|
+
replacedSelector = removeDuplicatedSpaces(replacedSelector.replace(new RegExp(missingItem, 'g'), ''));
|
|
46
|
+
}
|
|
47
|
+
if (replacedSelector !== '') {
|
|
48
|
+
expectedSelectorsWithoutMissing.push(replacedSelector);
|
|
57
49
|
}
|
|
58
|
-
expectedSelectorsWithoutMissing.push(replacedSelector);
|
|
59
50
|
}
|
|
60
51
|
expectedSelectorsWithoutMissing = [...new Set(expectedSelectorsWithoutMissing)];
|
|
61
52
|
}
|
|
62
53
|
else {
|
|
63
54
|
expectedSelectorsWithoutMissing = expectedSelectors;
|
|
64
55
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
56
|
+
// Delete all allowed extra from actual selectors
|
|
57
|
+
let actualWithoutExtra = [];
|
|
58
|
+
if ((options === null || options === void 0 ? void 0 : options.allowExtra) !== undefined) {
|
|
59
|
+
for (const selector of actualSelectors) {
|
|
60
|
+
let replacedSelector = selector;
|
|
61
|
+
for (const extraItem of options === null || options === void 0 ? void 0 : options.allowExtra) {
|
|
62
|
+
replacedSelector = removeDuplicatedSpaces(replacedSelector.replace(new RegExp(extraItem, 'g'), ''));
|
|
63
|
+
}
|
|
64
|
+
if (replacedSelector !== '') {
|
|
65
|
+
actualWithoutExtra.push(replacedSelector);
|
|
66
|
+
}
|
|
73
67
|
}
|
|
68
|
+
actualWithoutExtra = [...new Set(actualWithoutExtra)];
|
|
74
69
|
}
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
70
|
+
else {
|
|
71
|
+
actualWithoutExtra = actualSelectors;
|
|
72
|
+
}
|
|
73
|
+
result.missing = expectedSelectorsWithoutMissing.filter((element) => !actualWithoutExtra.includes(element));
|
|
74
|
+
// Detect extra elements
|
|
75
|
+
result.extra = [];
|
|
76
|
+
result.passed = [];
|
|
77
|
+
if (actualWithoutExtra.length > 0) {
|
|
78
|
+
for (const selector of actualWithoutExtra) {
|
|
79
|
+
const dom = new jsdom_1.default.JSDOM((0, sanitize_html_1.default)(expectedHtml, config));
|
|
80
|
+
const element = dom.window.document.querySelector(selector);
|
|
81
|
+
if (element === null) {
|
|
82
|
+
result.extra.push(selector);
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
result.passed.push(selector);
|
|
86
|
+
}
|
|
78
87
|
}
|
|
88
|
+
result.extra = [...new Set(result.extra)];
|
|
89
|
+
result.passed = [...new Set(result.passed)];
|
|
79
90
|
}
|
|
80
91
|
return result;
|
|
81
92
|
}
|
|
82
93
|
exports.compareHtml = compareHtml;
|
|
94
|
+
/**
|
|
95
|
+
* Get partial html of bigger html block.
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* await getPartialHtml("<div><ul class="k-list"><ul></div>", ".k-list");
|
|
99
|
+
*
|
|
100
|
+
* @param originalHtml An html object.
|
|
101
|
+
* @param selector Css selector.
|
|
102
|
+
*/
|
|
103
|
+
function getPartialHtml(originalHtml, selector) {
|
|
104
|
+
const config = {
|
|
105
|
+
allowedTags: false,
|
|
106
|
+
allowVulnerableTags: true,
|
|
107
|
+
allowedAttributes: { "*": ["class"] },
|
|
108
|
+
};
|
|
109
|
+
const dom = new jsdom_1.default.JSDOM((0, sanitize_html_1.default)(originalHtml, config));
|
|
110
|
+
const element = dom.window.document.querySelector(selector);
|
|
111
|
+
if (element !== null) {
|
|
112
|
+
return element.outerHTML;
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
return '';
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
exports.getPartialHtml = getPartialHtml;
|
|
83
119
|
function parseDom(node, attributes, parent = "") {
|
|
84
120
|
if (node === null) {
|
|
85
121
|
return;
|
|
86
122
|
}
|
|
87
123
|
let newParent = parent;
|
|
88
124
|
if (node.attributes[0] !== undefined) {
|
|
89
|
-
const value =
|
|
125
|
+
const value = removeDuplicatedSpaces(node.attributes[0].value).replace(new RegExp('.!', 'g'), '.\\!');
|
|
90
126
|
attributes.push(`${parent}.${value.split(" ").sort().join(".")}`);
|
|
91
127
|
newParent = `${parent}.${value.split(" ").sort().join(".")} `;
|
|
92
128
|
}
|
|
93
129
|
parseDom(node.firstElementChild, attributes, newParent);
|
|
94
130
|
parseDom(node.nextElementSibling, attributes, parent);
|
|
95
131
|
}
|
|
96
|
-
function
|
|
132
|
+
function removeDuplicatedSpaces(text) {
|
|
97
133
|
return text.replace(new RegExp(/ +/g, 'g'), ' ').trim();
|
|
98
134
|
}
|
|
99
135
|
//# sourceMappingURL=html-comparer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"html-comparer.js","sourceRoot":"","sources":["../../src/rendering/html-comparer.ts"],"names":[],"mappings":";;;;;;AAAA,iCAAiC;AACjC,kEAAyC;AACzC,kDAA0B;AAe1B;;;;;;;;GAQG;AACH,SAAgB,WAAW,CAAC,UAAkB,EAAE,YAAoB,EAAE,OAAwB;IAC1F,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,eAAe,GAAa,EAAE,CAAC;IACnC,IAAI,iBAAiB,GAAa,EAAE,CAAC;IACrC,MAAM,MAAM,GAAW,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC;IAEtF,MAAM,MAAM,GAAG;QACX,WAAW,EAAE,KAAK;QAClB,mBAAmB,EAAE,IAAI;QACzB,iBAAiB,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE;KACxC,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,eAAK,CAAC,KAAK,CAAC,IAAA,uBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC;IACpG,MAAM,WAAW,GAAG,IAAI,eAAK,CAAC,KAAK,CAAC,IAAA,uBAAY,EAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC;IAExG,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,QAAQ,CAAC,SAAS,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IAE7C,MAAM,GAAG,EAAE,CAAC;IACZ,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAEzC,
|
|
1
|
+
{"version":3,"file":"html-comparer.js","sourceRoot":"","sources":["../../src/rendering/html-comparer.ts"],"names":[],"mappings":";;;;;;AAAA,iCAAiC;AACjC,kEAAyC;AACzC,kDAA0B;AAe1B;;;;;;;;GAQG;AACH,SAAgB,WAAW,CAAC,UAAkB,EAAE,YAAoB,EAAE,OAAwB;IAC1F,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,eAAe,GAAa,EAAE,CAAC;IACnC,IAAI,iBAAiB,GAAa,EAAE,CAAC;IACrC,MAAM,MAAM,GAAW,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC;IAEtF,MAAM,MAAM,GAAG;QACX,WAAW,EAAE,KAAK;QAClB,mBAAmB,EAAE,IAAI;QACzB,iBAAiB,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE;KACxC,CAAC;IAEF,MAAM,SAAS,GAAG,IAAI,eAAK,CAAC,KAAK,CAAC,IAAA,uBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC;IACpG,MAAM,WAAW,GAAG,IAAI,eAAK,CAAC,KAAK,CAAC,IAAA,uBAAY,EAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC;IAExG,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,QAAQ,CAAC,SAAS,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;IAE7C,MAAM,GAAG,EAAE,CAAC;IACZ,QAAQ,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAEzC,MAAM,CAAC,eAAe,GAAG,eAAe,CAAC;IACzC,MAAM,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAE7C,qDAAqD;IACrD,IAAI,+BAA+B,GAAG,EAAE,CAAC;IACzC,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,MAAK,SAAS,EAAE;QACrC,KAAK,MAAM,QAAQ,IAAI,iBAAiB,EAAE;YACtC,IAAI,gBAAgB,GAAG,QAAQ,CAAC;YAChC,KAAK,MAAM,WAAW,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,EAAE;gBAC7C,gBAAgB,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aACzG;YAED,IAAI,gBAAgB,KAAK,EAAE,EAAE;gBACzB,+BAA+B,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;aAC1D;SACJ;QACD,+BAA+B,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,+BAA+B,CAAC,CAAC,CAAC;KACnF;SACI;QACD,+BAA+B,GAAG,iBAAiB,CAAC;KACvD;IAED,iDAAiD;IACjD,IAAI,kBAAkB,GAAG,EAAE,CAAC;IAC5B,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,MAAK,SAAS,EAAE;QACnC,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE;YACpC,IAAI,gBAAgB,GAAG,QAAQ,CAAC;YAChC,KAAK,MAAM,SAAS,IAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,EAAE;gBACzC,gBAAgB,GAAG,sBAAsB,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;aACvG;YAED,IAAI,gBAAgB,KAAK,EAAE,EAAE;gBACzB,kBAAkB,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;aAC7C;SACJ;QACD,kBAAkB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,kBAAkB,CAAC,CAAC,CAAC;KACzD;SACI;QACD,kBAAkB,GAAG,eAAe,CAAC;KACxC;IAED,MAAM,CAAC,OAAO,GAAG,+BAA+B,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IAE5G,wBAAwB;IACxB,MAAM,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC/B,KAAK,MAAM,QAAQ,IAAI,kBAAkB,EAAE;YACvC,MAAM,GAAG,GAAG,IAAI,eAAK,CAAC,KAAK,CAAC,IAAA,uBAAY,EAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;YAChE,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;YAC5D,IAAI,OAAO,KAAK,IAAI,EAAE;gBAClB,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAC/B;iBACI;gBACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;aAChC;SACJ;QAED,MAAM,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;KAC/C;IAED,OAAO,MAAM,CAAC;AAClB,CAAC;AAtFD,kCAsFC;AAGD;;;;;;;;GAQG;AACH,SAAgB,cAAc,CAAC,YAAoB,EAAE,QAAgB;IACjE,MAAM,MAAM,GAAG;QACX,WAAW,EAAE,KAAK;QAClB,mBAAmB,EAAE,IAAI;QACzB,iBAAiB,EAAE,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE;KACxC,CAAC;IAEF,MAAM,GAAG,GAAG,IAAI,eAAK,CAAC,KAAK,CAAC,IAAA,uBAAY,EAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC;IAChE,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAC5D,IAAI,OAAO,KAAK,IAAI,EAAE;QAClB,OAAO,OAAO,CAAC,SAAS,CAAC;KAC5B;SAAM;QACH,OAAO,EAAE,CAAC;KACb;AACL,CAAC;AAdD,wCAcC;AAED,SAAS,QAAQ,CAAC,IAAa,EAAE,UAAoB,EAAE,MAAM,GAAG,EAAE;IAC9D,IAAI,IAAI,KAAK,IAAI,EAAE;QACf,OAAO;KACV;IAED,IAAI,SAAS,GAAG,MAAM,CAAC;IACvB,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE;QAClC,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QACtG,UAAU,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClE,SAAS,GAAG,GAAG,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;KACjE;IAED,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IACxD,QAAQ,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,sBAAsB,CAAC,IAAY;IACxC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC7D,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const specToHtml: (specFile: any, options?: {}) =>
|
|
2
|
-
export { compareHtml } from "./html-comparer";
|
|
1
|
+
export declare const specToHtml: (specFile: any, options?: {}) => string;
|
|
2
|
+
export { CompereOptions, Result, compareHtml, getPartialHtml } from "./html-comparer";
|
package/dist/rendering/index.js
CHANGED
|
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.compareHtml = exports.specToHtml = void 0;
|
|
6
|
+
exports.getPartialHtml = exports.compareHtml = exports.specToHtml = void 0;
|
|
7
7
|
const react_1 = __importDefault(require("react"));
|
|
8
8
|
const server_1 = __importDefault(require("react-dom/server"));
|
|
9
9
|
const specToHtml = (specFile, options = {}) => {
|
|
@@ -12,4 +12,5 @@ const specToHtml = (specFile, options = {}) => {
|
|
|
12
12
|
exports.specToHtml = specToHtml;
|
|
13
13
|
var html_comparer_1 = require("./html-comparer");
|
|
14
14
|
Object.defineProperty(exports, "compareHtml", { enumerable: true, get: function () { return html_comparer_1.compareHtml; } });
|
|
15
|
+
Object.defineProperty(exports, "getPartialHtml", { enumerable: true, get: function () { return html_comparer_1.getPartialHtml; } });
|
|
15
16
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rendering/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,8DAAwC;AAEjC,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,OAAO,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rendering/index.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,8DAAwC;AAEjC,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,OAAO,GAAG,EAAE,EAAU,EAAE;IACzD,OAAO,gBAAQ,CAAC,oBAAoB,CAChC,eAAK,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CACzC,CAAC;AACN,CAAC,CAAC;AAJW,QAAA,UAAU,cAIrB;AAEF,iDAAsF;AAArD,4GAAA,WAAW,OAAA;AAAE,+GAAA,cAAc,OAAA"}
|