@wix/filter-builder 1.0.39 → 1.0.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/filter-builder.js +1 -2
- package/dist/cjs/filter-builder.js.map +1 -1
- package/dist/cjs/filter-mixin.js +15 -40
- package/dist/cjs/filter-mixin.js.map +1 -1
- package/dist/cjs/index.js +1 -2
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/query-optimiser.js +5 -13
- package/dist/cjs/query-optimiser.js.map +1 -1
- package/dist/esm/__tests__/filter.spec.js +67 -72
- package/dist/esm/__tests__/filter.spec.js.map +1 -1
- package/dist/esm/__tests__/query-optimizer.spec.js +12 -12
- package/dist/esm/__tests__/query-optimizer.spec.js.map +1 -1
- package/dist/esm/clone.js +2 -2
- package/dist/esm/clone.js.map +1 -1
- package/dist/esm/filter-builder.js +7 -19
- package/dist/esm/filter-builder.js.map +1 -1
- package/dist/esm/filter-mixin.js +205 -270
- package/dist/esm/filter-mixin.js.map +1 -1
- package/dist/esm/filter-validator.js +42 -78
- package/dist/esm/filter-validator.js.map +1 -1
- package/dist/esm/query-optimiser.js +49 -65
- package/dist/esm/query-optimiser.js.map +1 -1
- package/dist/esm/type-utils.js +2 -2
- package/dist/esm/type-utils.js.map +1 -1
- package/dist/statics/filter-builder.umd.js +123 -195
- package/dist/statics/filter-builder.umd.js.map +1 -1
- package/dist/statics/filter-builder.umd.min.js +1 -1
- package/dist/statics/filter-builder.umd.min.js.map +1 -1
- package/dist/statics/manifest.json +1 -1
- package/dist/statics/manifest.min.json +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +5 -5
|
@@ -1,97 +1,61 @@
|
|
|
1
1
|
import { typeForDisplay, isDate, isString, isNumber } from './type-utils';
|
|
2
2
|
import clone from './clone';
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
export class FilterValidator {
|
|
4
|
+
constructor(operatorName, previousInvalidArguments, ctor) {
|
|
5
5
|
this._validations = [];
|
|
6
6
|
this.operatorName = operatorName;
|
|
7
7
|
this.ctor = ctor;
|
|
8
8
|
this._invalidArguments = clone(previousInvalidArguments);
|
|
9
9
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
var _this = this;
|
|
42
|
-
return this.addValidation(function () { return obj instanceof _this.ctor; }, function () {
|
|
43
|
-
return "Invalid ".concat(_this.operatorName, " parameter [").concat(typeForDisplay(obj), "]. ").concat(_this.operatorName, " expects FilterBuilder only.");
|
|
44
|
-
});
|
|
45
|
-
};
|
|
46
|
-
FilterValidator.prototype.arityIsOne = function (args) {
|
|
47
|
-
var _this = this;
|
|
48
|
-
return this.addValidation(function () { return args.length === 1; }, function () {
|
|
49
|
-
return "Invalid ".concat(_this.operatorName, " usage. ").concat(_this.operatorName, " requires one parameter.");
|
|
50
|
-
});
|
|
51
|
-
};
|
|
52
|
-
FilterValidator.prototype.arityIsTwo = function (args) {
|
|
53
|
-
var _this = this;
|
|
54
|
-
return this.addValidation(function () { return args.length === 2; }, function () {
|
|
55
|
-
return "Invalid ".concat(_this.operatorName, " usage. ").concat(_this.operatorName, " requires two parameters.");
|
|
56
|
-
});
|
|
57
|
-
};
|
|
58
|
-
FilterValidator.prototype.arityIsThree = function (args) {
|
|
59
|
-
var _this = this;
|
|
60
|
-
return this.addValidation(function () { return args.length === 3; }, function () {
|
|
61
|
-
return "Invalid ".concat(_this.operatorName, " usage. ").concat(_this.operatorName, " requires three parameters.");
|
|
62
|
-
});
|
|
63
|
-
};
|
|
64
|
-
FilterValidator.prototype.arityIsAtLeastTwo = function (args) {
|
|
65
|
-
var _this = this;
|
|
66
|
-
return this.addValidation(function () { return args.length >= 2; }, function () {
|
|
67
|
-
return "Invalid ".concat(_this.operatorName, " usage. ").concat(_this.operatorName, " requires at least two parameters.");
|
|
68
|
-
});
|
|
69
|
-
};
|
|
70
|
-
FilterValidator.prototype.addValidation = function (predicateFn, messageFn) {
|
|
10
|
+
typeIsString(value) {
|
|
11
|
+
return this.addValidation(() => isString(value), () => `Invalid ${this.operatorName} parameter value [${typeForDisplay(value)}]. ${this.operatorName} parameter must be a String.`);
|
|
12
|
+
}
|
|
13
|
+
typeIsStringNumberOrDate(value) {
|
|
14
|
+
return this.addValidation(() => isDateStringOrNumber(value), () => `Invalid ${this.operatorName} parameter value [${typeForDisplay(value)}]. Valid ${this.operatorName} parameter types are String, Number or Date.`);
|
|
15
|
+
}
|
|
16
|
+
sameType(first, second) {
|
|
17
|
+
return this.addValidation(() => typeForDisplay(first) === typeForDisplay(second), () => `Invalid ${this.operatorName} parameter values [${typeForDisplay(first)}] and [${typeForDisplay(second)}]. Both parameters must be of the same type.`);
|
|
18
|
+
}
|
|
19
|
+
typeIsStringNumberOrDateForAll(values) {
|
|
20
|
+
return this.addValidation(() => values.every(isDateStringOrNumber), () => `Invalid ${this.operatorName} usage. ${this.operatorName} supports only Number, String or Date items.`);
|
|
21
|
+
}
|
|
22
|
+
validFieldName(field) {
|
|
23
|
+
return this.addValidation(() => isString(field), () => `Invalid ${this.operatorName} field value [${typeForDisplay(field)}]. ${this.operatorName} field must be a String.`);
|
|
24
|
+
}
|
|
25
|
+
isInstanceOfSameClass(obj) {
|
|
26
|
+
return this.addValidation(() => obj instanceof this.ctor, () => `Invalid ${this.operatorName} parameter [${typeForDisplay(obj)}]. ${this.operatorName} expects FilterBuilder only.`);
|
|
27
|
+
}
|
|
28
|
+
arityIsOne(args) {
|
|
29
|
+
return this.addValidation(() => args.length === 1, () => `Invalid ${this.operatorName} usage. ${this.operatorName} requires one parameter.`);
|
|
30
|
+
}
|
|
31
|
+
arityIsTwo(args) {
|
|
32
|
+
return this.addValidation(() => args.length === 2, () => `Invalid ${this.operatorName} usage. ${this.operatorName} requires two parameters.`);
|
|
33
|
+
}
|
|
34
|
+
arityIsThree(args) {
|
|
35
|
+
return this.addValidation(() => args.length === 3, () => `Invalid ${this.operatorName} usage. ${this.operatorName} requires three parameters.`);
|
|
36
|
+
}
|
|
37
|
+
arityIsAtLeastTwo(args) {
|
|
38
|
+
return this.addValidation(() => args.length >= 2, () => `Invalid ${this.operatorName} usage. ${this.operatorName} requires at least two parameters.`);
|
|
39
|
+
}
|
|
40
|
+
addValidation(predicateFn, messageFn) {
|
|
71
41
|
this._validations.push({
|
|
72
|
-
predicateFn
|
|
73
|
-
messageFn
|
|
42
|
+
predicateFn,
|
|
43
|
+
messageFn,
|
|
74
44
|
});
|
|
75
45
|
return this;
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
var valid = this._validations.every(function (_a) {
|
|
80
|
-
var predicateFn = _a.predicateFn, messageFn = _a.messageFn;
|
|
81
|
-
return _this._appendIfInvalid(predicateFn(), messageFn());
|
|
82
|
-
});
|
|
46
|
+
}
|
|
47
|
+
validateAndAggregate() {
|
|
48
|
+
const valid = this._validations.every(({ predicateFn, messageFn }) => this._appendIfInvalid(predicateFn(), messageFn()));
|
|
83
49
|
return [this._invalidArguments, valid];
|
|
84
|
-
}
|
|
85
|
-
|
|
50
|
+
}
|
|
51
|
+
_appendIfInvalid(valid, message) {
|
|
86
52
|
if (!valid) {
|
|
87
53
|
this._invalidArguments.push(message);
|
|
88
54
|
return false;
|
|
89
55
|
}
|
|
90
56
|
return true;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
}());
|
|
94
|
-
export { FilterValidator };
|
|
57
|
+
}
|
|
58
|
+
}
|
|
95
59
|
function isDateStringOrNumber(value) {
|
|
96
60
|
return isString(value) || isNumber(value) || isDate(value);
|
|
97
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filter-validator.js","sourceRoot":"","sources":["../../src/filter-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AACzE,OAAO,KAAK,MAAM,SAAS,CAAA;AAG3B;
|
|
1
|
+
{"version":3,"file":"filter-validator.js","sourceRoot":"","sources":["../../src/filter-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
var optimisations = [
|
|
1
|
+
const optimisations = [
|
|
3
2
|
optimisedUnaryAnd,
|
|
4
3
|
optimisedEmptyAnd,
|
|
5
4
|
optimisedAndsAsObjects,
|
|
@@ -7,7 +6,7 @@ var optimisations = [
|
|
|
7
6
|
optimisedNestedOrs,
|
|
8
7
|
];
|
|
9
8
|
export function optimisedQuery(query) {
|
|
10
|
-
|
|
9
|
+
const [newQuery] = fullyOptimised(query);
|
|
11
10
|
return newQuery;
|
|
12
11
|
}
|
|
13
12
|
function fullyOptimised(query) {
|
|
@@ -22,146 +21,131 @@ function fullyOptimised(query) {
|
|
|
22
21
|
return [query, false];
|
|
23
22
|
}
|
|
24
23
|
function fullyOptimisedArray(query) {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
return elementChanged;
|
|
29
|
-
}).length;
|
|
30
|
-
var newElements = optimisedElements.map(function (_a) {
|
|
31
|
-
var element = _a[0];
|
|
32
|
-
return element;
|
|
33
|
-
});
|
|
24
|
+
const optimisedElements = query.map(fullyOptimised);
|
|
25
|
+
const somethingChanged = 0 < optimisedElements.filter(([, elementChanged]) => elementChanged).length;
|
|
26
|
+
const newElements = optimisedElements.map(([element]) => element);
|
|
34
27
|
return [newElements, somethingChanged];
|
|
35
28
|
}
|
|
36
29
|
function fullyOptimisedObject(query) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
30
|
+
const [queryAfterOptimisingEntries, changedStage1] = fullEntriesOptimisation(query);
|
|
31
|
+
const [queryAfterFullOptimisation, changedStage2] = fullObjectOptimisation(queryAfterOptimisingEntries);
|
|
32
|
+
const changed = changedStage1 || changedStage2;
|
|
40
33
|
return [queryAfterFullOptimisation, changed];
|
|
41
34
|
function fullObjectOptimisation(query) {
|
|
42
|
-
|
|
35
|
+
const updatedQuery = applyFirstOptimisation(query);
|
|
43
36
|
if (!updatedQuery) {
|
|
44
37
|
return [query, false];
|
|
45
38
|
}
|
|
46
|
-
|
|
39
|
+
const [finalQuery] = fullyOptimised(updatedQuery);
|
|
47
40
|
return [finalQuery, true];
|
|
48
41
|
}
|
|
49
42
|
function fullEntriesOptimisation(query) {
|
|
50
|
-
|
|
43
|
+
const changedEntries = Object.entries(query)
|
|
51
44
|
.map(entryOptimisation)
|
|
52
|
-
.filter(
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
});
|
|
56
|
-
var newQuery = __assign(__assign({}, query), entriesAsObject(changedEntries));
|
|
57
|
-
var changed = !!changedEntries.length;
|
|
45
|
+
.filter(([, , changed]) => changed);
|
|
46
|
+
const newQuery = { ...query, ...entriesAsObject(changedEntries) };
|
|
47
|
+
const changed = !!changedEntries.length;
|
|
58
48
|
return [newQuery, changed];
|
|
59
49
|
}
|
|
60
|
-
function entryOptimisation(
|
|
61
|
-
|
|
62
|
-
var _b = fullyOptimised(value), newValue = _b[0], changed = _b[1];
|
|
50
|
+
function entryOptimisation([key, value]) {
|
|
51
|
+
const [newValue, changed] = fullyOptimised(value);
|
|
63
52
|
return [key, newValue, changed];
|
|
64
53
|
}
|
|
65
54
|
function entriesAsObject(entries) {
|
|
66
|
-
return entries.reduce(
|
|
67
|
-
var _b;
|
|
68
|
-
var key = _a[0], value = _a[1];
|
|
69
|
-
return (__assign(__assign({}, acc), (_b = {}, _b[key] = value, _b)));
|
|
70
|
-
}, {});
|
|
55
|
+
return entries.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
|
|
71
56
|
}
|
|
72
57
|
}
|
|
73
58
|
function applyFirstOptimisation(node) {
|
|
74
|
-
for (
|
|
75
|
-
|
|
76
|
-
var newNode = optimisation(node);
|
|
59
|
+
for (const optimisation of optimisations) {
|
|
60
|
+
const newNode = optimisation(node);
|
|
77
61
|
if (newNode) {
|
|
78
62
|
return newNode;
|
|
79
63
|
}
|
|
80
64
|
}
|
|
81
65
|
}
|
|
82
66
|
function optimisedUnaryAnd(node) {
|
|
83
|
-
|
|
67
|
+
const args = node.$and;
|
|
84
68
|
if (Array.isArray(args) && args.length === 1) {
|
|
85
69
|
return args[0];
|
|
86
70
|
}
|
|
87
71
|
}
|
|
88
72
|
function optimisedEmptyAnd(node) {
|
|
89
|
-
|
|
73
|
+
const args = node.$and;
|
|
90
74
|
if (Array.isArray(args) && args.length === 0) {
|
|
91
75
|
return {};
|
|
92
76
|
}
|
|
93
77
|
return null;
|
|
94
78
|
}
|
|
95
79
|
function optimisedAndsAsObjects(node) {
|
|
96
|
-
|
|
80
|
+
const args = node.$and;
|
|
97
81
|
if (!args) {
|
|
98
82
|
return;
|
|
99
83
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
args.forEach(
|
|
84
|
+
let basicObjects = [];
|
|
85
|
+
let operatorObjects = [];
|
|
86
|
+
args.forEach((arg) => {
|
|
103
87
|
if (isOperator(arg)) {
|
|
104
|
-
operatorObjects =
|
|
88
|
+
operatorObjects = [...operatorObjects, arg];
|
|
105
89
|
}
|
|
106
90
|
else {
|
|
107
|
-
basicObjects =
|
|
91
|
+
basicObjects = [...basicObjects, arg];
|
|
108
92
|
}
|
|
109
93
|
});
|
|
110
94
|
if (basicObjects.length <= 1 || haveOverlappingFields(basicObjects)) {
|
|
111
95
|
return;
|
|
112
96
|
}
|
|
113
|
-
|
|
114
|
-
return { $and:
|
|
97
|
+
const combinedBasicObjects = Object.assign({}, ...basicObjects);
|
|
98
|
+
return { $and: [combinedBasicObjects, ...operatorObjects] };
|
|
115
99
|
function isOperator(node) {
|
|
116
|
-
|
|
117
|
-
return keys.every(
|
|
100
|
+
const keys = Object.keys(node);
|
|
101
|
+
return keys.every((name) => name.startsWith('$')) && keys.length > 0;
|
|
118
102
|
}
|
|
119
103
|
function haveOverlappingFields(objects) {
|
|
120
|
-
|
|
121
|
-
.map(
|
|
122
|
-
.reduce(
|
|
123
|
-
|
|
104
|
+
const nonUniqueKeys = objects
|
|
105
|
+
.map((it) => Object.keys(it))
|
|
106
|
+
.reduce((a, b) => [...a, ...b], []);
|
|
107
|
+
const uniqueKeys = unique(nonUniqueKeys);
|
|
124
108
|
return uniqueKeys.length !== nonUniqueKeys.length;
|
|
125
109
|
}
|
|
126
110
|
function unique(values) {
|
|
127
|
-
|
|
128
|
-
values.forEach(
|
|
111
|
+
const dict = {};
|
|
112
|
+
values.forEach((v) => (dict[v] = true));
|
|
129
113
|
return Object.keys(dict);
|
|
130
114
|
}
|
|
131
115
|
}
|
|
132
116
|
function optimisedNestedAnds(node) {
|
|
133
|
-
|
|
117
|
+
const args = node.$and;
|
|
134
118
|
if (!args) {
|
|
135
119
|
return;
|
|
136
120
|
}
|
|
137
|
-
|
|
121
|
+
const hasNestedAnds = !!args.find((it) => it.$and);
|
|
138
122
|
if (!hasNestedAnds) {
|
|
139
123
|
return;
|
|
140
124
|
}
|
|
141
|
-
|
|
142
|
-
|
|
125
|
+
const newArgs = args.reduce((result, current) => {
|
|
126
|
+
const and = current.$and;
|
|
143
127
|
if (!and) {
|
|
144
|
-
return
|
|
128
|
+
return [...result, current];
|
|
145
129
|
}
|
|
146
|
-
return
|
|
130
|
+
return [...result, ...and];
|
|
147
131
|
}, []);
|
|
148
132
|
return { $and: newArgs };
|
|
149
133
|
}
|
|
150
134
|
function optimisedNestedOrs(node) {
|
|
151
|
-
|
|
135
|
+
const args = node.$or;
|
|
152
136
|
if (!args) {
|
|
153
137
|
return;
|
|
154
138
|
}
|
|
155
|
-
|
|
139
|
+
const hasNestedOrs = !!args.find((it) => it.$or);
|
|
156
140
|
if (!hasNestedOrs) {
|
|
157
141
|
return;
|
|
158
142
|
}
|
|
159
|
-
|
|
160
|
-
|
|
143
|
+
const newArgs = args.reduce((result, current) => {
|
|
144
|
+
const or = current.$or;
|
|
161
145
|
if (!or) {
|
|
162
|
-
return
|
|
146
|
+
return [...result, current];
|
|
163
147
|
}
|
|
164
|
-
return
|
|
148
|
+
return [...result, ...or];
|
|
165
149
|
}, []);
|
|
166
150
|
return { $or: newArgs };
|
|
167
151
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-optimiser.js","sourceRoot":"","sources":["../../src/query-optimiser.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"query-optimiser.js","sourceRoot":"","sources":["../../src/query-optimiser.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/type-utils.js
CHANGED
|
@@ -33,8 +33,8 @@ function upperCaseFirst(str) {
|
|
|
33
33
|
if (!isString(str)) {
|
|
34
34
|
return str;
|
|
35
35
|
}
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
const first = str.slice(0, 1).toUpperCase();
|
|
37
|
+
const rest = str.slice(1, str.length);
|
|
38
38
|
return first + rest;
|
|
39
39
|
}
|
|
40
40
|
//# sourceMappingURL=type-utils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type-utils.js","sourceRoot":"","sources":["../../src/type-utils.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B,MAAM,UAAU,QAAQ,CAAC,GAAG;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAG;IACzB,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAG;IACxB,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAG;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAG;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAG;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAG;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,CAAA;AACpC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAG;IAChC,OAAO,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAG;IAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAG;IACxB,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAA;AAChC,CAAC;AAED,SAAS,cAAc,CAAC,GAAG;IACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QAClB,OAAO,GAAG,CAAA;KACX;IACD,
|
|
1
|
+
{"version":3,"file":"type-utils.js","sourceRoot":"","sources":["../../src/type-utils.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B,MAAM,UAAU,QAAQ,CAAC,GAAG;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAG;IACzB,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAG;IACxB,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAA;AAChC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAG;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAG;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,SAAS,CAAA;AACnC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAG;IAC1B,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAA;AAClC,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAG;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,UAAU,CAAA;AACpC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAG;IAChC,OAAO,cAAc,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,GAAG;IAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,WAAW,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,GAAG;IACxB,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAA;AAChC,CAAC;AAED,SAAS,cAAc,CAAC,GAAG;IACzB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QAClB,OAAO,GAAG,CAAA;KACX;IACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;IAC3C,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACrC,OAAO,KAAK,GAAG,IAAI,CAAA;AACrB,CAAC"}
|