@ngutil/data 0.0.38 → 0.0.40
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/query/filter.mjs +73 -21
- package/esm2022/query/index.mjs +2 -2
- package/esm2022/source/proxy.directive.mjs +5 -3
- package/esm2022/source/source.mjs +6 -5
- package/fesm2022/ngutil-data.mjs +81 -26
- package/fesm2022/ngutil-data.mjs.map +1 -1
- package/package.json +3 -3
- package/query/filter.d.ts +1 -0
- package/query/index.d.ts +1 -1
- package/source/proxy.directive.d.ts +3 -1
- package/source/source.d.ts +2 -1
package/esm2022/query/filter.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { flattenDeep, intersection } from "lodash";
|
|
2
|
-
import { deepClone, isPlainObject } from "@ngutil/common";
|
|
2
|
+
import { deepClone, isFalsy, isPlainObject, isTruthy } from "@ngutil/common";
|
|
3
3
|
import { pathGetterCompile } from "./path";
|
|
4
4
|
import { QueryProperty, QueryPropertySet } from "./query-property";
|
|
5
5
|
export const OPERATORS = [
|
|
@@ -59,6 +59,14 @@ export function filterNormalize(filters) {
|
|
|
59
59
|
return _normalizeFilter(filters);
|
|
60
60
|
}
|
|
61
61
|
function _normalizeFilter(filters, parent) {
|
|
62
|
+
if ("op" in filters && "value" in filters) {
|
|
63
|
+
if (filters["op"] === "|" /* FilterOp.Or */ || filters["op"] === "&" /* FilterOp.And */) {
|
|
64
|
+
return { op: filters["op"], value: filters["value"].map((v) => _normalizeFilter(v, parent)) };
|
|
65
|
+
}
|
|
66
|
+
if ("path" in filters) {
|
|
67
|
+
return filters;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
62
70
|
const norm = flattenDeep(Object.entries(filters).map(([path, value]) => {
|
|
63
71
|
switch (path) {
|
|
64
72
|
case "&" /* FilterOp.And */:
|
|
@@ -222,25 +230,10 @@ function or_(fns) {
|
|
|
222
230
|
};
|
|
223
231
|
}
|
|
224
232
|
export function filterMerge(...filters) {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
}
|
|
230
|
-
if (result == null) {
|
|
231
|
-
result = deepClone(filter);
|
|
232
|
-
}
|
|
233
|
-
else {
|
|
234
|
-
for (const [k, v] of Object.entries(filter)) {
|
|
235
|
-
if (v === undefined) {
|
|
236
|
-
delete result[k];
|
|
237
|
-
continue;
|
|
238
|
-
}
|
|
239
|
-
result[k] = deepClone(v);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
}
|
|
243
|
-
return result;
|
|
233
|
+
const value = filters
|
|
234
|
+
.filter(v => v && ((Array.isArray(v) && v.length > 0) || (isPlainObject(v) && Object.keys(v).length > 0)))
|
|
235
|
+
.map(filter => deepClone(filter));
|
|
236
|
+
return compact({ op: "&" /* FilterOp.And */, value });
|
|
244
237
|
}
|
|
245
238
|
export class FilterProperty extends QueryProperty {
|
|
246
239
|
merge(a, b) {
|
|
@@ -258,4 +251,63 @@ export class FilterPropertySet extends QueryPropertySet {
|
|
|
258
251
|
return filterMerge(...args);
|
|
259
252
|
}
|
|
260
253
|
}
|
|
261
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvcXVlcnkvZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRWxELE9BQU8sRUFBZSxTQUFTLEVBQUUsYUFBYSxFQUFnQixNQUFNLGdCQUFnQixDQUFBO0FBR3BGLE9BQU8sRUFBYyxpQkFBaUIsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUE2QmxFLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBa0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0F5QnZDLENBQUE7QUFFRCxNQUFNLFVBQVUsV0FBVyxDQUFDLEtBQVU7SUFDbEMsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsU0FBUyxDQUFlLENBQUE7SUFDckUsSUFBSSxHQUFHLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2pCLE9BQU8sR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNoQixPQUFPLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQTtRQUNuQyxDQUFDLENBQUMsQ0FBQTtJQUNOLENBQUM7U0FBTSxDQUFDO1FBQ0osT0FBTyxDQUFDLEVBQUUsRUFBRSx3QkFBYSxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUE7SUFDdkMsQ0FBQztBQUNMLENBQUM7QUFvRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFrQixPQUFrQjtJQUN4RCxPQUFPLGNBQWMsQ0FBSSxPQUFPLENBQUMsQ0FBQTtBQUNyQyxDQUFDO0FBYUQ7Ozs7OztHQU1H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QUFDLElBQUksS0FBSyxDQUFDLENBQUE7UUFFM0M7WUFDSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUE7WUFDekMsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLElBQUksS0FBSyxDQUFDLENBQUE7UUFFdkU7WUFDSSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUE7UUFFMUM7WUFDSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUE7WUFDekMsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUE7UUFFdEU7WUFDSSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUE7UUFFM0M7WUFDSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUE7WUFDekMsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLElBQUksS0FBSyxDQUFDLENBQUE7UUFFdkU7WUFDSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3JCLE9BQU8sT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFD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Q0FBQyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUNsQixPQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQTtvQkFDaEIsU0FBUTtnQkFDWixDQUFDO2dCQUVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUE7WUFDNUIsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0lBRUQsT0FBTyxNQUFhLENBQUE7QUFDeEIsQ0FBQztBQUVELE1BQU0sT0FBTyxjQUFnQyxTQUFRLGFBQTBDO0lBQ3hFLEtBQUssQ0FDcEIsQ0FBZ0MsRUFDaEMsQ0FBZ0M7UUFFaEMsT0FBTyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQzVCLENBQUM7SUFDa0IsSUFBSSxDQUFDLENBQStCO1FBQ25ELE9BQU8sZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzdCLENBQUM7Q0FDSjtBQUVELE1BQU0sT0FBTyxpQkFBbUMsU0FBUSxnQkFBMkI7SUFDNUQsV0FBVztRQUMxQixPQUFPLElBQUksY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQ3hDLENBQUM7SUFFa0IsS0FBSyxDQUFDLEdBQUcsSUFBVztRQUNuQyxPQUFPLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFBO0lBQy9CLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZsYXR0ZW5EZWVwLCBpbnRlcnNlY3Rpb24gfSBmcm9tIFwibG9kYXNoXCJcblxuaW1wb3J0IHsgQXNQcmltaXRpdmUsIGRlZXBDbG9uZSwgaXNQbGFpbk9iamVjdCwgTWF4UmVjdXJzaW9uIH0gZnJvbSBcIkBuZ3V0aWwvY29tbW9uXCJcblxuaW1wb3J0IHsgTW9kZWwgfSBmcm9tIFwiLi4vbW9kZWxcIlxuaW1wb3J0IHsgUGF0aEdldHRlciwgcGF0aEdldHRlckNvbXBpbGUgfSBmcm9tIFwiLi9wYXRoXCJcbmltcG9ydCB7IFF1ZXJ5UHJvcGVydHksIFF1ZXJ5UHJvcGVydHlTZXQgfSBmcm9tIFwiLi9xdWVyeS1wcm9wZXJ0eVwiXG5cbmV4cG9ydCBjb25zdCBlbnVtIEZpbHRlck9wIHtcbiAgICBFcSA9IFwiPT1cIixcbiAgICBFcVN0cmljdCA9IFwiPT09XCIsXG4gICAgRXFJbnNlc2l0aXZlID0gXCI9PSpcIixcbiAgICBOZXEgPSBcIiE9XCIsXG4gICAgTmVxU3RyaWN0ID0gXCIhPT1cIixcbiAgICBOZXFJbnNlc2l0aXZlID0gXCIhPSpcIixcbiAgICBHdCA9IFwiPlwiLFxuICAgIEd0SW5zZXNpdGl2ZSA9IFwiPipcIixcbiAgICBHdGUgPSBcIj49XCIsXG4gICAgR3RlSW5zZXNpdGl2ZSA9IFwiPj0qXCIsXG4gICAgTHQgPSBcIjxcIixcbiAgICBMdEluc2VzaXRpdmUgPSBcIjwqXCIsXG4gICAgTHRlID0gXCI8PVwiLFxuICAgIEx0ZUluc2VzaXRpdmUgPSBcIjw9KlwiLFxuICAgIENvbnRhaW5zID0gXCIlXCIsXG4gICAgQ29udGFpbnNJbnNlc2l0aXZlID0gXCIlKlwiLFxuICAgIFN0YXJ0c1dpdGggPSBcIl5cIixcbiAgICBTdGFydHNXaXRoSW5zZXNpdGl2ZSA9IFwiXipcIixcbiAgICBFbmRzV2l0aCA9IFwiJFwiLFxuICAgIEVuZHNXaXRoSW5zZXNpdGl2ZSA9IFwiJCpcIixcbiAgICBSZWdleHAgPSBcIn5cIixcbiAgICBSZWdleHBJbnNlc2l0aXZlID0gXCJ+KlwiLFxuICAgIE9yID0gXCJ8XCIsXG4gICAgQW5kID0gXCImXCJcbn1cblxuZXhwb3J0IGNvbnN0IE9QRVJBVE9SUzogQXJyYXk8c3RyaW5nPiA9IFtcbiAgICBGaWx0ZXJPcC5FcSxcbiAgICBGaWx0ZXJPcC5FcVN0cmljdCxcbiAgICBGaWx0ZXJPcC5FcUluc2VzaXRpdmUsXG4gICAgRmlsdGVyT3AuTmVxLFxuICAgIEZpbHRlck9wLk5lcVN0cmljdCxcbiAgICBGaWx0ZXJPcC5OZXFJbnNlc2l0aXZlLFxuICAgIEZpbHRlck9wLkd0LFxuICAgIEZpbHRlck9wLkd0SW5zZXNpdGl2ZSxcbiAgICBGaWx0ZXJPcC5HdGUsXG4gICAgRmlsdGVyT3AuR3RlSW5zZXNpdGl2ZSxcbiAgICBGaWx0ZXJPcC5MdCxcbiAgICBGaWx0ZXJPcC5MdEluc2VzaXRpdmUsXG4gICAgRmlsdGVyT3AuTHRlLFxuICAgIEZpbHRlck9wLkx0ZUluc2VzaXRpdmUsXG4gICAgRmlsdGVyT3AuQ29udGFpbnMsXG4gICAgRmlsdGVyT3AuQ29udGFpbnNJbnNlc2l0aXZlLFxuICAgIEZpbHRlck9wLlN0YXJ0c1dpdGgsXG4gICAgRmlsdGVyT3AuU3RhcnRzV2l0aEluc2VzaXRpdmUsXG4gICAgRmlsdGVyT3AuRW5kc1dpdGgsXG4gICAgRmlsdGVyT3AuRW5kc1dpdGhJbnNlc2l0aXZlLFxuICAgIEZpbHRlck9wLlJlZ2V4cCxcbiAgICBGaWx0ZXJPcC5SZWdleHBJbnNlc2l0aXZlLFxuICAgIEZpbHRlck9wLk9yLFxuICAgIEZpbHRlck9wLkFuZFxuXVxuXG5leHBvcnQgZnVuY3Rpb24gYXNPcGVyYXRvcnModmFsdWU6IGFueSk6IEFycmF5PHsgb3A6IEZpbHRlck9wOyB2YWx1ZTogYW55IH0+IHtcbiAgICBjb25zdCBvcHMgPSBpbnRlcnNlY3Rpb24oT2JqZWN0LmtleXModmFsdWUpLCBPUEVSQVRPUlMpIGFzIEZpbHRlck9wW11cbiAgICBpZiAob3BzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmV0dXJuIG9wcy5tYXAob3AgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgb3AsIHZhbHVlOiB2YWx1ZVtvcF0gfVxuICAgICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBbeyBvcDogRmlsdGVyT3AuRXEsIHZhbHVlIH1dXG4gICAgfVxufVxuXG4vLyBleHBvcnQgdHlwZSBGaWx0ZXI8VCBleHRlbmRzIE1vZGVsPiA9IF9GaWx0ZXI8RmxhdHRlbjxUPiwgW10sIE1heFJlY3Vyc2lvbj5cbi8vIFRPRE86IGZpeCByZWN1cnNpb25cbmV4cG9ydCB0eXBlIEZpbHRlcjxUIGV4dGVuZHMgTW9kZWw+ID0geyBba2V5OiBzdHJpbmddOiBhbnkgfVxuXG50eXBlIF9GaWx0ZXI8RiwgUCBleHRlbmRzIG51bWJlcltdLCBEIGV4dGVuZHMgbnVtYmVyPiA9IFBbXCJsZW5ndGhcIl0gZXh0ZW5kcyBEID8gbmV2ZXIgOiBfT2JqZWN0RmlsdGVyPEYsIFAsIEQ+XG5cbnR5cGUgX09iamVjdEZpbHRlcjxGLCBQIGV4dGVuZHMgbnVtYmVyW10sIEQgZXh0ZW5kcyBudW1iZXI+ID0gUFtcImxlbmd0aFwiXSBleHRlbmRzIERcbiAgICA/IG5ldmVyXG4gICAgOiB7IFtLIGluIGtleW9mIEZdPzogT3BlcmF0b3JzPEZbS10sIFAsIEQ+IH1cblxudHlwZSBSb290T3I8RiwgUCBleHRlbmRzIG51bWJlcltdLCBEIGV4dGVuZHMgbnVtYmVyPiA9IFBbXCJsZW5ndGhcIl0gZXh0ZW5kcyBEXG4gICAgPyBuZXZlclxuICAgIDogeyBbRmlsdGVyT3AuT3JdOiBBcnJheTxfRmlsdGVyPEYsIFsuLi5QLCAwXSwgRD4+IHwgdW5kZWZpbmVkIH1cblxudHlwZSBSb290QW5kPEYsIFAgZXh0ZW5kcyBudW1iZXJbXSwgRCBleHRlbmRzIG51bWJlcj4gPSBQW1wibGVuZ3RoXCJdIGV4dGVuZHMgRFxuICAgID8gbmV2ZXJcbiAgICA6IHsgW0ZpbHRlck9wLkFuZF06IEFycmF5PF9GaWx0ZXI8RiwgWy4uLlAsIDBdLCBEPj4gfCB1bmRlZmluZWQgfVxuXG5leHBvcnQgdHlwZSBPcGVyYXRvcnM8VCwgUCBleHRlbmRzIG51bWJlcltdLCBEIGV4dGVuZHMgbnVtYmVyID0gTWF4UmVjdXJzaW9uPiA9IFBbXCJsZW5ndGhcIl0gZXh0ZW5kcyBEXG4gICAgPyBuZXZlclxuICAgIDogU2ltcGxlT3BlcmF0b3JzPFQ+XG5cbnR5cGUgTG9jYWxPcjxULCBQIGV4dGVuZHMgbnVtYmVyW10sIEQgZXh0ZW5kcyBudW1iZXI+ID0gUFtcImxlbmd0aFwiXSBleHRlbmRzIERcbiAgICA/IG5ldmVyXG4gICAgOiB7IFtGaWx0ZXJPcC5Pcl06IEFycmF5PE9wZXJhdG9yczxULCBbLi4uUCwgMF0sIEQ+PiB8IHVuZGVmaW5lZCB9XG5cbnR5cGUgTG9jYWxBbmQ8VCwgUCBleHRlbmRzIG51bWJlcltdLCBEIGV4dGVuZHMgbnVtYmVyPiA9IFBbXCJsZW5ndGhcIl0gZXh0ZW5kcyBEXG4gICAgPyBuZXZlclxuICAgIDogeyBbRmlsdGVyT3AuQW5kXTogQXJyYXk8T3BlcmF0b3JzPFQsIFsuLi5QLCAwXSwgRD4+IHwgdW5kZWZpbmVkIH1cblxudHlwZSBTaW1wbGVPcGVyYXRvcnM8VD4gPVxuICAgIHwgRXFTdHJpY3Q8VD5cbiAgICB8IE5lcVN0cmljdDxUPlxuICAgIHwgRXE8VD5cbiAgICB8IE5lcTxUPlxuICAgIHwgR3Q8VD5cbiAgICB8IEd0ZTxUPlxuICAgIHwgTHQ8VD5cbiAgICB8IEx0ZTxUPlxuICAgIHwgQ29udGFpbnM8VD5cbiAgICB8IFN0YXJ0c1dpdGg8VD5cbiAgICB8IEVuZHNXaXRoPFQ+XG4gICAgfCBSZWdleHA8VD5cbiAgICB8IFRcbiAgICB8IHVuZGVmaW5lZFxuICAgIHwgbnVsbFxuXG50eXBlIEVxU3RyaWN0PFQ+ID0gT3BlcmF0b3I8VCwgVCwgRmlsdGVyT3AuRXFTdHJpY3QsIG5ldmVyLCBudWxsPlxudHlwZSBOZXFTdHJpY3Q8VD4gPSBPcGVyYXRvcjxULCBULCBGaWx0ZXJPcC5OZXFTdHJpY3QsIG5ldmVyLCBudWxsPlxudHlwZSBFcTxUPiA9IE9wZXJhdG9yPFQsIFQgfCBBc1ByaW1pdGl2ZTxUPiwgRmlsdGVyT3AuRXEsIEZpbHRlck9wLkVxSW5zZXNpdGl2ZSwgbnVsbD5cbnR5cGUgTmVxPFQ+ID0gT3BlcmF0b3I8VCwgVCB8IEFzUHJpbWl0aXZlPFQ+LCBGaWx0ZXJPcC5OZXEsIEZpbHRlck9wLk5lcUluc2VzaXRpdmUsIG51bGw+XG50eXBlIEd0PFQ+ID0gT3BlcmF0b3I8VCwgVCB8IEFzUHJpbWl0aXZlPFQ+LCBGaWx0ZXJPcC5HdCwgRmlsdGVyT3AuR3RJbnNlc2l0aXZlPlxudHlwZSBHdGU8VD4gPSBPcGVyYXRvcjxULCBUIHwgQXNQcmltaXRpdmU8VD4sIEZpbHRlck9wLkd0ZSwgRmlsdGVyT3AuR3RlSW5zZXNpdGl2ZT5cbnR5cGUgTHQ8VD4gPSBPcGVyYXRvcjxULCBUIHwgQXNQcmltaXRpdmU8VD4sIEZpbHRlck9wLkx0LCBGaWx0ZXJPcC5MdEluc2VzaXRpdmU+XG50eXBlIEx0ZTxUPiA9IE9wZXJhdG9yPFQsIFQgfCBBc1ByaW1pdGl2ZTxUPiwgRmlsdGVyT3AuTHRlLCBGaWx0ZXJPcC5MdGVJbnNlc2l0aXZlPlxudHlwZSBDb250YWluczxUPiA9IE9wZXJhdG9yPFQsIHN0cmluZywgRmlsdGVyT3AuQ29udGFpbnMsIEZpbHRlck9wLkNvbnRhaW5zSW5zZXNpdGl2ZT5cbnR5cGUgU3RhcnRzV2l0aDxUPiA9IE9wZXJhdG9yPFQsIHN0cmluZywgRmlsdGVyT3AuU3RhcnRzV2l0aCwgRmlsdGVyT3AuU3RhcnRzV2l0aEluc2VzaXRpdmU+XG50eXBlIEVuZHNXaXRoPFQ+ID0gT3BlcmF0b3I8VCwgc3RyaW5nLCBGaWx0ZXJPcC5FbmRzV2l0aCwgRmlsdGVyT3AuRW5kc1dpdGhJbnNlc2l0aXZlPlxudHlwZSBSZWdleHA8VD4gPSBPcGVyYXRvcjxULCBzdHJpbmcsIEZpbHRlck9wLlJlZ2V4cCwgRmlsdGVyT3AuUmVnZXhwSW5zZXNpdGl2ZSwgUmVnRXhwPlxuXG50eXBlIE9wZXJhdG9yPFQsIFIsIE9QIGV4dGVuZHMgc3RyaW5nLCBPUEkgZXh0ZW5kcyBzdHJpbmcgPSBuZXZlciwgRVQgPSBuZXZlcj4gPVxuICAgIHwgKFQgZXh0ZW5kcyBSID8geyBbayBpbiBPUF06IFQgfCBFVCB8IFIgfSA6IG5ldmVyKVxuICAgIHwgKFQgZXh0ZW5kcyBzdHJpbmcgPyAoT1BJIGV4dGVuZHMgbmV2ZXIgPyBuZXZlciA6IHsgW2sgaW4gT1BJXTogc3RyaW5nIH0pIDogbmV2ZXIpXG5cbmV4cG9ydCB0eXBlIEZpbHRlckZuPFQgPSBhbnk+ID0gKGl0ZW06IFQpID0+IGJvb2xlYW5cblxuLyoqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGl0ZW1zLmZpbHRlcihmaWx0ZXJCeSh7aWQ6IDQyfSkpXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckJ5PFQgZXh0ZW5kcyBNb2RlbD4oZmlsdGVyczogRmlsdGVyPFQ+KTogRmlsdGVyRm48VD4ge1xuICAgIHJldHVybiBfZmlsdGVyQ29tcGlsZTxUPihmaWx0ZXJzKVxufVxuXG4vLyBUT0RPOiBOb3JtYWxpemUgZmlsdGVyXG4vLyB0eXBlIF9GaWx0ZXIgPSB7IHBhdGg6IHN0cmluZzsgb3A6IEZpbHRlck9wOyB2YWx1ZTogYW55IH1cbi8vIHR5cGUgX09yID0geyBcInxcIjogQXJyYXk8X0ZpbHRlcj4gfVxuLy8gdHlwZSBfQW5kID0geyBcIiZcIjogQXJyYXk8X0ZpbHRlcj4gfVxuLy8gZXhwb3J0IHR5cGUgTm9ybWFsaXplZEZpbHRlciA9IF9PciB8IF9BbmRcbnR5cGUgTm9ybVBhdGggPSB7IHBhdGg6IHN0cmluZzsgb3A6IEV4Y2x1ZGU8RmlsdGVyT3AsIEZpbHRlck9wLk9yIHwgRmlsdGVyT3AuQW5kPjsgdmFsdWU6IGFueSB9XG50eXBlIE5vcm1PciA9IHsgb3A6IEZpbHRlck9wLk9yOyB2YWx1ZTogQXJyYXk8Tm9ybUVudHJ5PiB9XG50eXBlIE5vcm1BbmQgPSB7IG9wOiBGaWx0ZXJPcC5BbmQ7IHZhbHVlOiBBcnJheTxOb3JtRW50cnk+IH1cbnR5cGUgTm9ybUVudHJ5ID0gTm9ybVBhdGggfCBOb3JtT3IgfCBOb3JtQW5kXG5leHBvcnQgdHlwZSBGaWx0ZXJOb3JtYWxpemVkID0gTm9ybUVudHJ5XG5cbi8qKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBmaWx0ZXJOb3JtYWxpemUoe2lkOiB7XCI+XCI6IDAsIFwiPFwiOiAxMH19KVxuICoge29wOiBcIiZcIiwgdmFsdWU6IFt7cGF0aDogXCJpZFwiLCBvcDogXCI+XCIsIHZhbHVlOiAwfSwge3BhdGg6IFwiaWRcIiwgb3A6IFwiPFwiLCB2YWx1ZTogMTB9XX1cbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyTm9ybWFsaXplPFQgZXh0ZW5kcyBNb2RlbD4oZmlsdGVyczogRmlsdGVyPFQ+KTogRmlsdGVyTm9ybWFsaXplZCB7XG4gICAgcmV0dXJuIF9ub3JtYWxpemVGaWx0ZXIoZmlsdGVycylcbn1cblxuZnVuY3Rpb24gX25vcm1hbGl6ZUZpbHRlcjxUIGV4dGVuZHMgTW9kZWw+KGZpbHRlcnM6IEZpbHRlcjxUPiwgcGFyZW50Pzogc3RyaW5nKTogYW55IHtcbiAgICBjb25zdCBub3JtID0gZmxhdHRlbkRlZXAoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGZpbHRlcnMpLm1hcCgoW3BhdGgsIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChwYXRoKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJPcC5BbmQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0b3IgQU5EICgke0ZpbHRlck9wLkFuZH0pIG11c3QgaGF2ZSBhcnJheSB0eXBlYClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBvcDogRmlsdGVyT3AuQW5kLCB2YWx1ZTogdmFsdWUubWFwKHYgPT4gX25vcm1hbGl6ZUZpbHRlcih2LCBwYXJlbnQpKSB9XG5cbiAgICAgICAgICAgICAgICBjYXNlIEZpbHRlck9wLk9yOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdG9yIE9SICgke0ZpbHRlck9wLk9yfSkgbXVzdCBoYXZlIGFycmF5IHR5cGVgKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG9wOiBGaWx0ZXJPcC5PciwgdmFsdWU6IHZhbHVlLm1hcCh2ID0+IF9ub3JtYWxpemVGaWx0ZXIodiwgcGFyZW50KSkgfVxuXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogY2hlY2sgYWxsIGZpbHRlciwgYW5kIGlmIG5vdCBmb3VuZCBmaWx0ZXIga2V5LCB0YWh0IG9iamVjdCBtYXlibmUgbm90IGEgZmlsdGVyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX25vcm1hbGl6ZUZpbHRlcih2YWx1ZSwgcGF0aClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBhdGg6IHBhcmVudCwgb3A6IHBhdGgsIHZhbHVlIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBhdGgsIG9wOiBGaWx0ZXJPcC5FcVN0cmljdCwgdmFsdWUgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKVxuXG4gICAgaWYgKG5vcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBub3JtXG4gICAgfSBlbHNlIGlmIChub3JtLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gbm9ybVswXVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7IG9wOiBGaWx0ZXJPcC5BbmQsIHZhbHVlOiBub3JtIH1cbiAgICB9XG59XG5cbnR5cGUgR2V0UGF0aEZuID0gKHB0aDogc3RyaW5nKSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBwYXRoR2V0dGVyQ29tcGlsZT5cblxuZnVuY3Rpb24gX2ZpbHRlckNvbXBpbGU8VCBleHRlbmRzIE1vZGVsPihmaWx0ZXJzOiBGaWx0ZXI8VD4pOiBGaWx0ZXJGbjxUPiB7XG4gICAgY29uc3QgcGF0aENhY2hlOiB7IFtrZXk6IHN0cmluZ106IFBhdGhHZXR0ZXIgfSA9IHt9XG4gICAgY29uc3QgZ2V0UGF0aCA9IChwdGg6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAocGF0aENhY2hlW3B0aF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGhDYWNoZVtwdGhdXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChwYXRoQ2FjaGVbcHRoXSA9IHBhdGhHZXR0ZXJDb21waWxlKHB0aCkpXG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmaWx0ZXJOb3JtYWxpemUoZmlsdGVycylcbiAgICByZXR1cm4gX2ZpbHRlckNvbXBpbGVOb3JtKG5vcm1hbGl6ZWQsIGdldFBhdGgpXG59XG5cbmZ1bmN0aW9uIF9maWx0ZXJDb21waWxlTm9ybShmaWx0ZXI6IEZpbHRlck5vcm1hbGl6ZWQsIGdldFBhdGg6IEdldFBhdGhGbik6IEZpbHRlckZuPGFueT4ge1xuICAgIHN3aXRjaCAoZmlsdGVyLm9wKSB7XG4gICAgICAgIGNhc2UgRmlsdGVyT3AuQW5kOlxuICAgICAgICAgICAgcmV0dXJuIGFuZF8oZmlsdGVyLnZhbHVlLm1hcCh2ID0+IF9maWx0ZXJDb21waWxlTm9ybSh2LCBnZXRQYXRoKSkpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5PcjpcbiAgICAgICAgICAgIHJldHVybiBvcl8oZmlsdGVyLnZhbHVlLm1hcCh2ID0+IF9maWx0ZXJDb21waWxlTm9ybSh2LCBnZXRQYXRoKSkpXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBfZmlsdGVyQ29tcGxpbGVOb3JtUGF0aChnZXRQYXRoKGZpbHRlci5wYXRoKSwgZmlsdGVyLm9wLCBmaWx0ZXIudmFsdWUsIGdldFBhdGgpXG4gICAgfVxufVxuXG5mdW5jdGlvbiBfZmlsdGVyQ29tcGxpbGVOb3JtUGF0aChnZXR0ZXI6IFBhdGhHZXR0ZXIsIG9wOiBGaWx0ZXJPcCwgdmFsdWU6IGFueSwgZ2V0UGF0aDogR2V0UGF0aEZuKTogRmlsdGVyRm48YW55PiB7XG4gICAgbGV0IGxvd2VyOiBzdHJpbmdcbiAgICBsZXQgcmVnZXg6IFJlZ0V4cFxuICAgIHN3aXRjaCAob3ApIHtcbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5BbmQ6XG4gICAgICAgICAgICByZXR1cm4gYW5kXygodmFsdWUgYXMgTm9ybUVudHJ5W10pLm1hcCh2ID0+IF9maWx0ZXJDb21waWxlTm9ybSh2LCBnZXRQYXRoKSkpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5PcjpcbiAgICAgICAgICAgIHJldHVybiBvcl8oKHZhbHVlIGFzIE5vcm1FbnRyeVtdKS5tYXAodiA9PiBfZmlsdGVyQ29tcGlsZU5vcm0odiwgZ2V0UGF0aCkpKVxuXG4gICAgICAgIGNhc2UgRmlsdGVyT3AuRXE6XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gdiA9PSB2YWx1ZSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLkVxU3RyaWN0OlxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IHYgPT09IHZhbHVlKVxuXG4gICAgICAgIGNhc2UgRmlsdGVyT3AuRXFJbnNlc2l0aXZlOlxuICAgICAgICAgICAgbG93ZXIgPSBTdHJpbmcodmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiBTdHJpbmcodikudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gbG93ZXIpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5OZXE6XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gdiAhPSB2YWx1ZSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLk5lcVN0cmljdDpcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiB2ICE9PSB2YWx1ZSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLk5lcUluc2VzaXRpdmU6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IFN0cmluZyh2KS50b0xvY2FsZUxvd2VyQ2FzZSgpICE9PSBsb3dlcilcblxuICAgICAgICBjYXNlIEZpbHRlck9wLkd0OlxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IHYgPiB2YWx1ZSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLkd0SW5zZXNpdGl2ZTpcbiAgICAgICAgICAgIGxvd2VyID0gU3RyaW5nKHZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gU3RyaW5nKHYpLnRvTG9jYWxlTG93ZXJDYXNlKCkgPiBsb3dlcilcblxuICAgICAgICBjYXNlIEZpbHRlck9wLkd0ZTpcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiB2ID49IHZhbHVlKVxuXG4gICAgICAgIGNhc2UgRmlsdGVyT3AuR3RlSW5zZXNpdGl2ZTpcbiAgICAgICAgICAgIGxvd2VyID0gU3RyaW5nKHZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gU3RyaW5nKHYpLnRvTG9jYWxlTG93ZXJDYXNlKCkgPj0gbG93ZXIpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5MdDpcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiB2IDwgdmFsdWUpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5MdEluc2VzaXRpdmU6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IFN0cmluZyh2KS50b0xvY2FsZUxvd2VyQ2FzZSgpIDwgbG93ZXIpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5MdGU6XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gdiA8PSB2YWx1ZSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLkx0ZUluc2VzaXRpdmU6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IFN0cmluZyh2KS50b0xvY2FsZUxvd2VyQ2FzZSgpIDw9IGxvd2VyKVxuXG4gICAgICAgIGNhc2UgRmlsdGVyT3AuQ29udGFpbnM6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiAoQXJyYXkuaXNBcnJheSh2KSA/IHYuaW5jbHVkZXModmFsdWUpIDogU3RyaW5nKHYpLmluY2x1ZGVzKGxvd2VyKSkpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5Db250YWluc0luc2VzaXRpdmU6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IFN0cmluZyh2KS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyKSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLlN0YXJ0c1dpdGg6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiBTdHJpbmcodikuc3RhcnRzV2l0aChsb3dlcikpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5TdGFydHNXaXRoSW5zZXNpdGl2ZTpcbiAgICAgICAgICAgIGxvd2VyID0gU3RyaW5nKHZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gU3RyaW5nKHYpLnRvTG9jYWxlTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChsb3dlcikpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5FbmRzV2l0aDpcbiAgICAgICAgICAgIGxvd2VyID0gU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IFN0cmluZyh2KS5lbmRzV2l0aChsb3dlcikpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5FbmRzV2l0aEluc2VzaXRpdmU6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IFN0cmluZyh2KS50b0xvY2FsZUxvd2VyQ2FzZSgpLmVuZHNXaXRoKGxvd2VyKSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLlJlZ2V4cDpcbiAgICAgICAgICAgIHJlZ2V4ID0gdmFsdWUgaW5zdGFuY2VvZiBSZWdFeHAgPyB2YWx1ZSA6IG5ldyBSZWdFeHAodmFsdWUsIFwibXN2XCIpXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gcmVnZXgudGVzdCh2KSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLlJlZ2V4cEluc2VzaXRpdmU6XG4gICAgICAgICAgICByZWdleCA9IHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwID8gdmFsdWUgOiBuZXcgUmVnRXhwKHZhbHVlLCBcIm1zdmlcIilcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiByZWdleC50ZXN0KHYpKVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBvcGVyYXRvcjogJHtvcH1gKVxufVxuXG5mdW5jdGlvbiBtYXRjaGVyKGdldHRlcjogUGF0aEdldHRlciwgcHJlZGljdDogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW4pOiBGaWx0ZXJGbiB7XG4gICAgcmV0dXJuIG9iaiA9PiBnZXR0ZXIob2JqKS5zb21lKHByZWRpY3QpXG59XG5cbmZ1bmN0aW9uIGFuZF8oZm5zOiBGaWx0ZXJGbltdKTogRmlsdGVyRm4ge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBfID0+IHRydWVcbiAgICB9XG5cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdXG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZW0gPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIGZucykge1xuICAgICAgICAgICAgaWYgKCFmbihpdGVtKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxufVxuXG5mdW5jdGlvbiBvcl8oZm5zOiBGaWx0ZXJGbltdKTogRmlsdGVyRm4ge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBfID0+IHRydWVcbiAgICB9XG5cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdXG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZW0gPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIGZucykge1xuICAgICAgICAgICAgaWYgKGZuKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJNZXJnZSguLi5maWx0ZXJzOiBhbnlbXSk6IGFueSB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IHJlc3VsdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuXG4gICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVycykge1xuICAgICAgICBpZiAoZmlsdGVyID09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc3VsdCA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXN1bHQgPSBkZWVwQ2xvbmUoZmlsdGVyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXMoZmlsdGVyKSkge1xuICAgICAgICAgICAgICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHJlc3VsdFtrXVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlc3VsdFtrXSA9IGRlZXBDbG9uZSh2KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdCBhcyBhbnlcbn1cblxuZXhwb3J0IGNsYXNzIEZpbHRlclByb3BlcnR5PFQgZXh0ZW5kcyBNb2RlbD4gZXh0ZW5kcyBRdWVyeVByb3BlcnR5PEZpbHRlcjxUPiwgRmlsdGVyTm9ybWFsaXplZD4ge1xuICAgIHByb3RlY3RlZCBvdmVycmlkZSBtZXJnZShcbiAgICAgICAgYT86IEZpbHRlck5vcm1hbGl6ZWQgfCB1bmRlZmluZWQsXG4gICAgICAgIGI/OiBGaWx0ZXJOb3JtYWxpemVkIHwgdW5kZWZpbmVkXG4gICAgKTogRmlsdGVyTm9ybWFsaXplZCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJNZXJnZShhLCBiKVxuICAgIH1cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbm9ybShhOiBGaWx0ZXJOb3JtYWxpemVkIHwgRmlsdGVyPFQ+KTogRmlsdGVyTm9ybWFsaXplZCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiBmaWx0ZXJOb3JtYWxpemUoYSlcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJQcm9wZXJ0eVNldDxUIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgUXVlcnlQcm9wZXJ0eVNldDxGaWx0ZXI8VD4+IHtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbmV3UHJvcGVydHkoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyUHJvcGVydHkodW5kZWZpbmVkKVxuICAgIH1cblxuICAgIHByb3RlY3RlZCBvdmVycmlkZSBtZXJnZSguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgICByZXR1cm4gZmlsdGVyTWVyZ2UoLi4uYXJncylcbiAgICB9XG59XG4iXX0=
|
|
254
|
+
export function filterSimplify(filters) {
|
|
255
|
+
if (isTruthy(filters)) {
|
|
256
|
+
filters = compact(filterNormalize(filters));
|
|
257
|
+
const result = {};
|
|
258
|
+
if (filters["op"] === "&" /* FilterOp.And */) {
|
|
259
|
+
filters = filters["value"];
|
|
260
|
+
if (filters == null) {
|
|
261
|
+
return result;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
if (!Array.isArray(filters)) {
|
|
265
|
+
filters = [filters];
|
|
266
|
+
}
|
|
267
|
+
for (const f of filters) {
|
|
268
|
+
if (f["value"] != null &&
|
|
269
|
+
(f["op"] === "==" /* FilterOp.Eq */ || f["op"] === "===" /* FilterOp.EqStrict */ || f["op"] === "==*" /* FilterOp.EqInsesitive */)) {
|
|
270
|
+
result[f["path"]] = f["value"];
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
return result;
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
return null;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
function compact(filters) {
|
|
280
|
+
if (filters.op === "&" /* FilterOp.And */ || filters.op === "|" /* FilterOp.Or */) {
|
|
281
|
+
if (isFalsy(filters.value)) {
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
284
|
+
let value = filters.value.map(compact).filter(isTruthy);
|
|
285
|
+
if (value.length === 0) {
|
|
286
|
+
return null;
|
|
287
|
+
}
|
|
288
|
+
// remove subfilters with the same operator
|
|
289
|
+
value = value.reduce((acc, value) => {
|
|
290
|
+
if (value.op === filters.op) {
|
|
291
|
+
return acc.concat(value.value);
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
acc.push(value);
|
|
295
|
+
return acc;
|
|
296
|
+
}
|
|
297
|
+
}, []);
|
|
298
|
+
// deduplicate, and latest filter is the most priority
|
|
299
|
+
value = value
|
|
300
|
+
.reverse()
|
|
301
|
+
.filter((v, i, a) => a.findIndex(v2 => v.path === v2.path && v.op === v2.op) === i)
|
|
302
|
+
.reverse();
|
|
303
|
+
if (value.length === 1) {
|
|
304
|
+
return value[0];
|
|
305
|
+
}
|
|
306
|
+
return { op: filters.op, value };
|
|
307
|
+
}
|
|
308
|
+
else if (filters.value == null) {
|
|
309
|
+
return null;
|
|
310
|
+
}
|
|
311
|
+
return filters;
|
|
312
|
+
}
|
|
313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvcXVlcnkvZmlsdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRWxELE9BQU8sRUFBZSxTQUFTLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQWdCLE1BQU0sZ0JBQWdCLENBQUE7QUFHdkcsT0FBTyxFQUFjLGlCQUFpQixFQUFFLE1BQU0sUUFBUSxDQUFBO0FBQ3RELE9BQU8sRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQTZCbEUsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFrQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztDQXlCdkMsQ0FBQTtBQUVELE1BQU0sVUFBVSxXQUFXLENBQUMsS0FBVTtJQUNsQyxNQUFNLEdBQUcsR0FBRyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxTQUFTLENBQWUsQ0FBQTtJQUNyRSxJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDakIsT0FBTyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ2hCLE9BQU8sRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFBO1FBQ25DLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztTQUFNLENBQUM7UUFDSixPQUFPLENBQUMsRUFBRSxFQUFFLHdCQUFhLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtJQUN2QyxDQUFDO0FBQ0wsQ0FBQztBQW9FRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQWtCLE9BQWtCO0lBQ3hELE9BQU8sY0FBYyxDQUFJLE9BQU8sQ0FBQyxDQUFBO0FBQ3JD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T0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEtBQUssS0FBSyxDQUFDLENBQUE7UUFFeEU7WUFDSSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUE7UUFFMUM7WUFDSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUE7WUFDekMsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUE7UUFFdEU7WUFDSSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLENBQUE7UUFFM0M7WUFDSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUE7WUFDekMsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLElBQUksS0FBSyxDQUFDLENBQUE7UUFFdkU7WUFDSSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUE7UUFFMUM7WUFDSSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLGlCQUFpQixFQUFFLENBQUE7WUFDekMsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUE7UUFFdEU7WUFDSSxPQUFPLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxD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QUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQTtJQUNwQyxDQUFDO1NBQU0sSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQy9CLE9BQU8sSUFBSSxDQUFBO0lBQ2YsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFBO0FBQ2xCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmbGF0dGVuRGVlcCwgaW50ZXJzZWN0aW9uIH0gZnJvbSBcImxvZGFzaFwiXG5cbmltcG9ydCB7IEFzUHJpbWl0aXZlLCBkZWVwQ2xvbmUsIGlzRmFsc3ksIGlzUGxhaW5PYmplY3QsIGlzVHJ1dGh5LCBNYXhSZWN1cnNpb24gfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuLi9tb2RlbFwiXG5pbXBvcnQgeyBQYXRoR2V0dGVyLCBwYXRoR2V0dGVyQ29tcGlsZSB9IGZyb20gXCIuL3BhdGhcIlxuaW1wb3J0IHsgUXVlcnlQcm9wZXJ0eSwgUXVlcnlQcm9wZXJ0eVNldCB9IGZyb20gXCIuL3F1ZXJ5LXByb3BlcnR5XCJcblxuZXhwb3J0IGNvbnN0IGVudW0gRmlsdGVyT3Age1xuICAgIEVxID0gXCI9PVwiLFxuICAgIEVxU3RyaWN0ID0gXCI9PT1cIixcbiAgICBFcUluc2VzaXRpdmUgPSBcIj09KlwiLFxuICAgIE5lcSA9IFwiIT1cIixcbiAgICBOZXFTdHJpY3QgPSBcIiE9PVwiLFxuICAgIE5lcUluc2VzaXRpdmUgPSBcIiE9KlwiLFxuICAgIEd0ID0gXCI+XCIsXG4gICAgR3RJbnNlc2l0aXZlID0gXCI+KlwiLFxuICAgIEd0ZSA9IFwiPj1cIixcbiAgICBHdGVJbnNlc2l0aXZlID0gXCI+PSpcIixcbiAgICBMdCA9IFwiPFwiLFxuICAgIEx0SW5zZXNpdGl2ZSA9IFwiPCpcIixcbiAgICBMdGUgPSBcIjw9XCIsXG4gICAgTHRlSW5zZXNpdGl2ZSA9IFwiPD0qXCIsXG4gICAgQ29udGFpbnMgPSBcIiVcIixcbiAgICBDb250YWluc0luc2VzaXRpdmUgPSBcIiUqXCIsXG4gICAgU3RhcnRzV2l0aCA9IFwiXlwiLFxuICAgIFN0YXJ0c1dpdGhJbnNlc2l0aXZlID0gXCJeKlwiLFxuICAgIEVuZHNXaXRoID0gXCIkXCIsXG4gICAgRW5kc1dpdGhJbnNlc2l0aXZlID0gXCIkKlwiLFxuICAgIFJlZ2V4cCA9IFwiflwiLFxuICAgIFJlZ2V4cEluc2VzaXRpdmUgPSBcIn4qXCIsXG4gICAgT3IgPSBcInxcIixcbiAgICBBbmQgPSBcIiZcIlxufVxuXG5leHBvcnQgY29uc3QgT1BFUkFUT1JTOiBBcnJheTxzdHJpbmc+ID0gW1xuICAgIEZpbHRlck9wLkVxLFxuICAgIEZpbHRlck9wLkVxU3RyaWN0LFxuICAgIEZpbHRlck9wLkVxSW5zZXNpdGl2ZSxcbiAgICBGaWx0ZXJPcC5OZXEsXG4gICAgRmlsdGVyT3AuTmVxU3RyaWN0LFxuICAgIEZpbHRlck9wLk5lcUluc2VzaXRpdmUsXG4gICAgRmlsdGVyT3AuR3QsXG4gICAgRmlsdGVyT3AuR3RJbnNlc2l0aXZlLFxuICAgIEZpbHRlck9wLkd0ZSxcbiAgICBGaWx0ZXJPcC5HdGVJbnNlc2l0aXZlLFxuICAgIEZpbHRlck9wLkx0LFxuICAgIEZpbHRlck9wLkx0SW5zZXNpdGl2ZSxcbiAgICBGaWx0ZXJPcC5MdGUsXG4gICAgRmlsdGVyT3AuTHRlSW5zZXNpdGl2ZSxcbiAgICBGaWx0ZXJPcC5Db250YWlucyxcbiAgICBGaWx0ZXJPcC5Db250YWluc0luc2VzaXRpdmUsXG4gICAgRmlsdGVyT3AuU3RhcnRzV2l0aCxcbiAgICBGaWx0ZXJPcC5TdGFydHNXaXRoSW5zZXNpdGl2ZSxcbiAgICBGaWx0ZXJPcC5FbmRzV2l0aCxcbiAgICBGaWx0ZXJPcC5FbmRzV2l0aEluc2VzaXRpdmUsXG4gICAgRmlsdGVyT3AuUmVnZXhwLFxuICAgIEZpbHRlck9wLlJlZ2V4cEluc2VzaXRpdmUsXG4gICAgRmlsdGVyT3AuT3IsXG4gICAgRmlsdGVyT3AuQW5kXG5dXG5cbmV4cG9ydCBmdW5jdGlvbiBhc09wZXJhdG9ycyh2YWx1ZTogYW55KTogQXJyYXk8eyBvcDogRmlsdGVyT3A7IHZhbHVlOiBhbnkgfT4ge1xuICAgIGNvbnN0IG9wcyA9IGludGVyc2VjdGlvbihPYmplY3Qua2V5cyh2YWx1ZSksIE9QRVJBVE9SUykgYXMgRmlsdGVyT3BbXVxuICAgIGlmIChvcHMubGVuZ3RoID4gMCkge1xuICAgICAgICByZXR1cm4gb3BzLm1hcChvcCA9PiB7XG4gICAgICAgICAgICByZXR1cm4geyBvcCwgdmFsdWU6IHZhbHVlW29wXSB9XG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFt7IG9wOiBGaWx0ZXJPcC5FcSwgdmFsdWUgfV1cbiAgICB9XG59XG5cbi8vIGV4cG9ydCB0eXBlIEZpbHRlcjxUIGV4dGVuZHMgTW9kZWw+ID0gX0ZpbHRlcjxGbGF0dGVuPFQ+LCBbXSwgTWF4UmVjdXJzaW9uPlxuLy8gVE9ETzogZml4IHJlY3Vyc2lvblxuZXhwb3J0IHR5cGUgRmlsdGVyPFQgZXh0ZW5kcyBNb2RlbD4gPSB7IFtrZXk6IHN0cmluZ106IGFueSB9XG5cbnR5cGUgX0ZpbHRlcjxGLCBQIGV4dGVuZHMgbnVtYmVyW10sIEQgZXh0ZW5kcyBudW1iZXI+ID0gUFtcImxlbmd0aFwiXSBleHRlbmRzIEQgPyBuZXZlciA6IF9PYmplY3RGaWx0ZXI8RiwgUCwgRD5cblxudHlwZSBfT2JqZWN0RmlsdGVyPEYsIFAgZXh0ZW5kcyBudW1iZXJbXSwgRCBleHRlbmRzIG51bWJlcj4gPSBQW1wibGVuZ3RoXCJdIGV4dGVuZHMgRFxuICAgID8gbmV2ZXJcbiAgICA6IHsgW0sgaW4ga2V5b2YgRl0/OiBPcGVyYXRvcnM8RltLXSwgUCwgRD4gfVxuXG50eXBlIFJvb3RPcjxGLCBQIGV4dGVuZHMgbnVtYmVyW10sIEQgZXh0ZW5kcyBudW1iZXI+ID0gUFtcImxlbmd0aFwiXSBleHRlbmRzIERcbiAgICA/IG5ldmVyXG4gICAgOiB7IFtGaWx0ZXJPcC5Pcl06IEFycmF5PF9GaWx0ZXI8RiwgWy4uLlAsIDBdLCBEPj4gfCB1bmRlZmluZWQgfVxuXG50eXBlIFJvb3RBbmQ8RiwgUCBleHRlbmRzIG51bWJlcltdLCBEIGV4dGVuZHMgbnVtYmVyPiA9IFBbXCJsZW5ndGhcIl0gZXh0ZW5kcyBEXG4gICAgPyBuZXZlclxuICAgIDogeyBbRmlsdGVyT3AuQW5kXTogQXJyYXk8X0ZpbHRlcjxGLCBbLi4uUCwgMF0sIEQ+PiB8IHVuZGVmaW5lZCB9XG5cbmV4cG9ydCB0eXBlIE9wZXJhdG9yczxULCBQIGV4dGVuZHMgbnVtYmVyW10sIEQgZXh0ZW5kcyBudW1iZXIgPSBNYXhSZWN1cnNpb24+ID0gUFtcImxlbmd0aFwiXSBleHRlbmRzIERcbiAgICA/IG5ldmVyXG4gICAgOiBTaW1wbGVPcGVyYXRvcnM8VD5cblxudHlwZSBMb2NhbE9yPFQsIFAgZXh0ZW5kcyBudW1iZXJbXSwgRCBleHRlbmRzIG51bWJlcj4gPSBQW1wibGVuZ3RoXCJdIGV4dGVuZHMgRFxuICAgID8gbmV2ZXJcbiAgICA6IHsgW0ZpbHRlck9wLk9yXTogQXJyYXk8T3BlcmF0b3JzPFQsIFsuLi5QLCAwXSwgRD4+IHwgdW5kZWZpbmVkIH1cblxudHlwZSBMb2NhbEFuZDxULCBQIGV4dGVuZHMgbnVtYmVyW10sIEQgZXh0ZW5kcyBudW1iZXI+ID0gUFtcImxlbmd0aFwiXSBleHRlbmRzIERcbiAgICA/IG5ldmVyXG4gICAgOiB7IFtGaWx0ZXJPcC5BbmRdOiBBcnJheTxPcGVyYXRvcnM8VCwgWy4uLlAsIDBdLCBEPj4gfCB1bmRlZmluZWQgfVxuXG50eXBlIFNpbXBsZU9wZXJhdG9yczxUPiA9XG4gICAgfCBFcVN0cmljdDxUPlxuICAgIHwgTmVxU3RyaWN0PFQ+XG4gICAgfCBFcTxUPlxuICAgIHwgTmVxPFQ+XG4gICAgfCBHdDxUPlxuICAgIHwgR3RlPFQ+XG4gICAgfCBMdDxUPlxuICAgIHwgTHRlPFQ+XG4gICAgfCBDb250YWluczxUPlxuICAgIHwgU3RhcnRzV2l0aDxUPlxuICAgIHwgRW5kc1dpdGg8VD5cbiAgICB8IFJlZ2V4cDxUPlxuICAgIHwgVFxuICAgIHwgdW5kZWZpbmVkXG4gICAgfCBudWxsXG5cbnR5cGUgRXFTdHJpY3Q8VD4gPSBPcGVyYXRvcjxULCBULCBGaWx0ZXJPcC5FcVN0cmljdCwgbmV2ZXIsIG51bGw+XG50eXBlIE5lcVN0cmljdDxUPiA9IE9wZXJhdG9yPFQsIFQsIEZpbHRlck9wLk5lcVN0cmljdCwgbmV2ZXIsIG51bGw+XG50eXBlIEVxPFQ+ID0gT3BlcmF0b3I8VCwgVCB8IEFzUHJpbWl0aXZlPFQ+LCBGaWx0ZXJPcC5FcSwgRmlsdGVyT3AuRXFJbnNlc2l0aXZlLCBudWxsPlxudHlwZSBOZXE8VD4gPSBPcGVyYXRvcjxULCBUIHwgQXNQcmltaXRpdmU8VD4sIEZpbHRlck9wLk5lcSwgRmlsdGVyT3AuTmVxSW5zZXNpdGl2ZSwgbnVsbD5cbnR5cGUgR3Q8VD4gPSBPcGVyYXRvcjxULCBUIHwgQXNQcmltaXRpdmU8VD4sIEZpbHRlck9wLkd0LCBGaWx0ZXJPcC5HdEluc2VzaXRpdmU+XG50eXBlIEd0ZTxUPiA9IE9wZXJhdG9yPFQsIFQgfCBBc1ByaW1pdGl2ZTxUPiwgRmlsdGVyT3AuR3RlLCBGaWx0ZXJPcC5HdGVJbnNlc2l0aXZlPlxudHlwZSBMdDxUPiA9IE9wZXJhdG9yPFQsIFQgfCBBc1ByaW1pdGl2ZTxUPiwgRmlsdGVyT3AuTHQsIEZpbHRlck9wLkx0SW5zZXNpdGl2ZT5cbnR5cGUgTHRlPFQ+ID0gT3BlcmF0b3I8VCwgVCB8IEFzUHJpbWl0aXZlPFQ+LCBGaWx0ZXJPcC5MdGUsIEZpbHRlck9wLkx0ZUluc2VzaXRpdmU+XG50eXBlIENvbnRhaW5zPFQ+ID0gT3BlcmF0b3I8VCwgc3RyaW5nLCBGaWx0ZXJPcC5Db250YWlucywgRmlsdGVyT3AuQ29udGFpbnNJbnNlc2l0aXZlPlxudHlwZSBTdGFydHNXaXRoPFQ+ID0gT3BlcmF0b3I8VCwgc3RyaW5nLCBGaWx0ZXJPcC5TdGFydHNXaXRoLCBGaWx0ZXJPcC5TdGFydHNXaXRoSW5zZXNpdGl2ZT5cbnR5cGUgRW5kc1dpdGg8VD4gPSBPcGVyYXRvcjxULCBzdHJpbmcsIEZpbHRlck9wLkVuZHNXaXRoLCBGaWx0ZXJPcC5FbmRzV2l0aEluc2VzaXRpdmU+XG50eXBlIFJlZ2V4cDxUPiA9IE9wZXJhdG9yPFQsIHN0cmluZywgRmlsdGVyT3AuUmVnZXhwLCBGaWx0ZXJPcC5SZWdleHBJbnNlc2l0aXZlLCBSZWdFeHA+XG5cbnR5cGUgT3BlcmF0b3I8VCwgUiwgT1AgZXh0ZW5kcyBzdHJpbmcsIE9QSSBleHRlbmRzIHN0cmluZyA9IG5ldmVyLCBFVCA9IG5ldmVyPiA9XG4gICAgfCAoVCBleHRlbmRzIFIgPyB7IFtrIGluIE9QXTogVCB8IEVUIHwgUiB9IDogbmV2ZXIpXG4gICAgfCAoVCBleHRlbmRzIHN0cmluZyA/IChPUEkgZXh0ZW5kcyBuZXZlciA/IG5ldmVyIDogeyBbayBpbiBPUEldOiBzdHJpbmcgfSkgOiBuZXZlcilcblxuZXhwb3J0IHR5cGUgRmlsdGVyRm48VCA9IGFueT4gPSAoaXRlbTogVCkgPT4gYm9vbGVhblxuXG4vKipcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogaXRlbXMuZmlsdGVyKGZpbHRlckJ5KHtpZDogNDJ9KSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyQnk8VCBleHRlbmRzIE1vZGVsPihmaWx0ZXJzOiBGaWx0ZXI8VD4pOiBGaWx0ZXJGbjxUPiB7XG4gICAgcmV0dXJuIF9maWx0ZXJDb21waWxlPFQ+KGZpbHRlcnMpXG59XG5cbi8vIFRPRE86IE5vcm1hbGl6ZSBmaWx0ZXJcbi8vIHR5cGUgX0ZpbHRlciA9IHsgcGF0aDogc3RyaW5nOyBvcDogRmlsdGVyT3A7IHZhbHVlOiBhbnkgfVxuLy8gdHlwZSBfT3IgPSB7IFwifFwiOiBBcnJheTxfRmlsdGVyPiB9XG4vLyB0eXBlIF9BbmQgPSB7IFwiJlwiOiBBcnJheTxfRmlsdGVyPiB9XG4vLyBleHBvcnQgdHlwZSBOb3JtYWxpemVkRmlsdGVyID0gX09yIHwgX0FuZFxudHlwZSBOb3JtUGF0aCA9IHsgcGF0aDogc3RyaW5nOyBvcDogRXhjbHVkZTxGaWx0ZXJPcCwgRmlsdGVyT3AuT3IgfCBGaWx0ZXJPcC5BbmQ+OyB2YWx1ZTogYW55IH1cbnR5cGUgTm9ybU9yID0geyBvcDogRmlsdGVyT3AuT3I7IHZhbHVlOiBBcnJheTxOb3JtRW50cnk+IH1cbnR5cGUgTm9ybUFuZCA9IHsgb3A6IEZpbHRlck9wLkFuZDsgdmFsdWU6IEFycmF5PE5vcm1FbnRyeT4gfVxudHlwZSBOb3JtRW50cnkgPSBOb3JtUGF0aCB8IE5vcm1PciB8IE5vcm1BbmRcbmV4cG9ydCB0eXBlIEZpbHRlck5vcm1hbGl6ZWQgPSBOb3JtRW50cnlcblxuLyoqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGZpbHRlck5vcm1hbGl6ZSh7aWQ6IHtcIj5cIjogMCwgXCI8XCI6IDEwfX0pXG4gKiB7b3A6IFwiJlwiLCB2YWx1ZTogW3twYXRoOiBcImlkXCIsIG9wOiBcIj5cIiwgdmFsdWU6IDB9LCB7cGF0aDogXCJpZFwiLCBvcDogXCI8XCIsIHZhbHVlOiAxMH1dfVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJOb3JtYWxpemU8VCBleHRlbmRzIE1vZGVsPihmaWx0ZXJzOiBGaWx0ZXI8VD4pOiBGaWx0ZXJOb3JtYWxpemVkIHtcbiAgICByZXR1cm4gX25vcm1hbGl6ZUZpbHRlcihmaWx0ZXJzKVxufVxuXG5mdW5jdGlvbiBfbm9ybWFsaXplRmlsdGVyPFQgZXh0ZW5kcyBNb2RlbD4oZmlsdGVyczogRmlsdGVyPFQ+LCBwYXJlbnQ/OiBzdHJpbmcpOiBhbnkge1xuICAgIGlmIChcIm9wXCIgaW4gZmlsdGVycyAmJiBcInZhbHVlXCIgaW4gZmlsdGVycykge1xuICAgICAgICBpZiAoZmlsdGVyc1tcIm9wXCJdID09PSBGaWx0ZXJPcC5PciB8fCBmaWx0ZXJzW1wib3BcIl0gPT09IEZpbHRlck9wLkFuZCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgb3A6IGZpbHRlcnNbXCJvcFwiXSwgdmFsdWU6IGZpbHRlcnNbXCJ2YWx1ZVwiXS5tYXAoKHY6IGFueSkgPT4gX25vcm1hbGl6ZUZpbHRlcih2LCBwYXJlbnQpKSB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFwicGF0aFwiIGluIGZpbHRlcnMpIHtcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJzXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBub3JtID0gZmxhdHRlbkRlZXAoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGZpbHRlcnMpLm1hcCgoW3BhdGgsIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgc3dpdGNoIChwYXRoKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBGaWx0ZXJPcC5BbmQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgT3BlcmF0b3IgQU5EICgke0ZpbHRlck9wLkFuZH0pIG11c3QgaGF2ZSBhcnJheSB0eXBlYClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBvcDogRmlsdGVyT3AuQW5kLCB2YWx1ZTogdmFsdWUubWFwKHYgPT4gX25vcm1hbGl6ZUZpbHRlcih2LCBwYXJlbnQpKSB9XG5cbiAgICAgICAgICAgICAgICBjYXNlIEZpbHRlck9wLk9yOlxuICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE9wZXJhdG9yIE9SICgke0ZpbHRlck9wLk9yfSkgbXVzdCBoYXZlIGFycmF5IHR5cGVgKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IG9wOiBGaWx0ZXJPcC5PciwgdmFsdWU6IHZhbHVlLm1hcCh2ID0+IF9ub3JtYWxpemVGaWx0ZXIodiwgcGFyZW50KSkgfVxuXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogY2hlY2sgYWxsIGZpbHRlciwgYW5kIGlmIG5vdCBmb3VuZCBmaWx0ZXIga2V5LCB0YWh0IG9iamVjdCBtYXlibmUgbm90IGEgZmlsdGVyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUGxhaW5PYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX25vcm1hbGl6ZUZpbHRlcih2YWx1ZSwgcGF0aClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBhdGg6IHBhcmVudCwgb3A6IHBhdGgsIHZhbHVlIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBhdGgsIG9wOiBGaWx0ZXJPcC5FcVN0cmljdCwgdmFsdWUgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKVxuXG4gICAgaWYgKG5vcm0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBub3JtXG4gICAgfSBlbHNlIGlmIChub3JtLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gbm9ybVswXVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB7IG9wOiBGaWx0ZXJPcC5BbmQsIHZhbHVlOiBub3JtIH1cbiAgICB9XG59XG5cbnR5cGUgR2V0UGF0aEZuID0gKHB0aDogc3RyaW5nKSA9PiBSZXR1cm5UeXBlPHR5cGVvZiBwYXRoR2V0dGVyQ29tcGlsZT5cblxuZnVuY3Rpb24gX2ZpbHRlckNvbXBpbGU8VCBleHRlbmRzIE1vZGVsPihmaWx0ZXJzOiBGaWx0ZXI8VD4pOiBGaWx0ZXJGbjxUPiB7XG4gICAgY29uc3QgcGF0aENhY2hlOiB7IFtrZXk6IHN0cmluZ106IFBhdGhHZXR0ZXIgfSA9IHt9XG4gICAgY29uc3QgZ2V0UGF0aCA9IChwdGg6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAocGF0aENhY2hlW3B0aF0gIT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhdGhDYWNoZVtwdGhdXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChwYXRoQ2FjaGVbcHRoXSA9IHBhdGhHZXR0ZXJDb21waWxlKHB0aCkpXG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBmaWx0ZXJOb3JtYWxpemUoZmlsdGVycylcbiAgICByZXR1cm4gX2ZpbHRlckNvbXBpbGVOb3JtKG5vcm1hbGl6ZWQsIGdldFBhdGgpXG59XG5cbmZ1bmN0aW9uIF9maWx0ZXJDb21waWxlTm9ybShmaWx0ZXI6IEZpbHRlck5vcm1hbGl6ZWQsIGdldFBhdGg6IEdldFBhdGhGbik6IEZpbHRlckZuPGFueT4ge1xuICAgIHN3aXRjaCAoZmlsdGVyLm9wKSB7XG4gICAgICAgIGNhc2UgRmlsdGVyT3AuQW5kOlxuICAgICAgICAgICAgcmV0dXJuIGFuZF8oZmlsdGVyLnZhbHVlLm1hcCh2ID0+IF9maWx0ZXJDb21waWxlTm9ybSh2LCBnZXRQYXRoKSkpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5PcjpcbiAgICAgICAgICAgIHJldHVybiBvcl8oZmlsdGVyLnZhbHVlLm1hcCh2ID0+IF9maWx0ZXJDb21waWxlTm9ybSh2LCBnZXRQYXRoKSkpXG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBfZmlsdGVyQ29tcGxpbGVOb3JtUGF0aChnZXRQYXRoKGZpbHRlci5wYXRoKSwgZmlsdGVyLm9wLCBmaWx0ZXIudmFsdWUsIGdldFBhdGgpXG4gICAgfVxufVxuXG5mdW5jdGlvbiBfZmlsdGVyQ29tcGxpbGVOb3JtUGF0aChnZXR0ZXI6IFBhdGhHZXR0ZXIsIG9wOiBGaWx0ZXJPcCwgdmFsdWU6IGFueSwgZ2V0UGF0aDogR2V0UGF0aEZuKTogRmlsdGVyRm48YW55PiB7XG4gICAgbGV0IGxvd2VyOiBzdHJpbmdcbiAgICBsZXQgcmVnZXg6IFJlZ0V4cFxuICAgIHN3aXRjaCAob3ApIHtcbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5BbmQ6XG4gICAgICAgICAgICByZXR1cm4gYW5kXygodmFsdWUgYXMgTm9ybUVudHJ5W10pLm1hcCh2ID0+IF9maWx0ZXJDb21waWxlTm9ybSh2LCBnZXRQYXRoKSkpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5PcjpcbiAgICAgICAgICAgIHJldHVybiBvcl8oKHZhbHVlIGFzIE5vcm1FbnRyeVtdKS5tYXAodiA9PiBfZmlsdGVyQ29tcGlsZU5vcm0odiwgZ2V0UGF0aCkpKVxuXG4gICAgICAgIGNhc2UgRmlsdGVyT3AuRXE6XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gdiA9PSB2YWx1ZSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLkVxU3RyaWN0OlxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IHYgPT09IHZhbHVlKVxuXG4gICAgICAgIGNhc2UgRmlsdGVyT3AuRXFJbnNlc2l0aXZlOlxuICAgICAgICAgICAgbG93ZXIgPSBTdHJpbmcodmFsdWUpLnRvTG9jYWxlTG93ZXJDYXNlKClcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiBTdHJpbmcodikudG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gbG93ZXIpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5OZXE6XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gdiAhPSB2YWx1ZSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLk5lcVN0cmljdDpcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiB2ICE9PSB2YWx1ZSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLk5lcUluc2VzaXRpdmU6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IFN0cmluZyh2KS50b0xvY2FsZUxvd2VyQ2FzZSgpICE9PSBsb3dlcilcblxuICAgICAgICBjYXNlIEZpbHRlck9wLkd0OlxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IHYgPiB2YWx1ZSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLkd0SW5zZXNpdGl2ZTpcbiAgICAgICAgICAgIGxvd2VyID0gU3RyaW5nKHZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gU3RyaW5nKHYpLnRvTG9jYWxlTG93ZXJDYXNlKCkgPiBsb3dlcilcblxuICAgICAgICBjYXNlIEZpbHRlck9wLkd0ZTpcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiB2ID49IHZhbHVlKVxuXG4gICAgICAgIGNhc2UgRmlsdGVyT3AuR3RlSW5zZXNpdGl2ZTpcbiAgICAgICAgICAgIGxvd2VyID0gU3RyaW5nKHZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gU3RyaW5nKHYpLnRvTG9jYWxlTG93ZXJDYXNlKCkgPj0gbG93ZXIpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5MdDpcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiB2IDwgdmFsdWUpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5MdEluc2VzaXRpdmU6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IFN0cmluZyh2KS50b0xvY2FsZUxvd2VyQ2FzZSgpIDwgbG93ZXIpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5MdGU6XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gdiA8PSB2YWx1ZSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLkx0ZUluc2VzaXRpdmU6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IFN0cmluZyh2KS50b0xvY2FsZUxvd2VyQ2FzZSgpIDw9IGxvd2VyKVxuXG4gICAgICAgIGNhc2UgRmlsdGVyT3AuQ29udGFpbnM6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiAoQXJyYXkuaXNBcnJheSh2KSA/IHYuaW5jbHVkZXModmFsdWUpIDogU3RyaW5nKHYpLmluY2x1ZGVzKGxvd2VyKSkpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5Db250YWluc0luc2VzaXRpdmU6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IFN0cmluZyh2KS50b0xvY2FsZUxvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyKSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLlN0YXJ0c1dpdGg6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSlcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiBTdHJpbmcodikuc3RhcnRzV2l0aChsb3dlcikpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5TdGFydHNXaXRoSW5zZXNpdGl2ZTpcbiAgICAgICAgICAgIGxvd2VyID0gU3RyaW5nKHZhbHVlKS50b0xvY2FsZUxvd2VyQ2FzZSgpXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gU3RyaW5nKHYpLnRvTG9jYWxlTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChsb3dlcikpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5FbmRzV2l0aDpcbiAgICAgICAgICAgIGxvd2VyID0gU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IFN0cmluZyh2KS5lbmRzV2l0aChsb3dlcikpXG5cbiAgICAgICAgY2FzZSBGaWx0ZXJPcC5FbmRzV2l0aEluc2VzaXRpdmU6XG4gICAgICAgICAgICBsb3dlciA9IFN0cmluZyh2YWx1ZSkudG9Mb2NhbGVMb3dlckNhc2UoKVxuICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXIoZ2V0dGVyLCB2ID0+IFN0cmluZyh2KS50b0xvY2FsZUxvd2VyQ2FzZSgpLmVuZHNXaXRoKGxvd2VyKSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLlJlZ2V4cDpcbiAgICAgICAgICAgIHJlZ2V4ID0gdmFsdWUgaW5zdGFuY2VvZiBSZWdFeHAgPyB2YWx1ZSA6IG5ldyBSZWdFeHAodmFsdWUsIFwibXN2XCIpXG4gICAgICAgICAgICByZXR1cm4gbWF0Y2hlcihnZXR0ZXIsIHYgPT4gcmVnZXgudGVzdCh2KSlcblxuICAgICAgICBjYXNlIEZpbHRlck9wLlJlZ2V4cEluc2VzaXRpdmU6XG4gICAgICAgICAgICByZWdleCA9IHZhbHVlIGluc3RhbmNlb2YgUmVnRXhwID8gdmFsdWUgOiBuZXcgUmVnRXhwKHZhbHVlLCBcIm1zdmlcIilcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVyKGdldHRlciwgdiA9PiByZWdleC50ZXN0KHYpKVxuICAgIH1cblxuICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCBvcGVyYXRvcjogJHtvcH1gKVxufVxuXG5mdW5jdGlvbiBtYXRjaGVyKGdldHRlcjogUGF0aEdldHRlciwgcHJlZGljdDogKHZhbHVlOiBhbnkpID0+IGJvb2xlYW4pOiBGaWx0ZXJGbiB7XG4gICAgcmV0dXJuIG9iaiA9PiBnZXR0ZXIob2JqKS5zb21lKHByZWRpY3QpXG59XG5cbmZ1bmN0aW9uIGFuZF8oZm5zOiBGaWx0ZXJGbltdKTogRmlsdGVyRm4ge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBfID0+IHRydWVcbiAgICB9XG5cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdXG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZW0gPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIGZucykge1xuICAgICAgICAgICAgaWYgKCFmbihpdGVtKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgfVxufVxuXG5mdW5jdGlvbiBvcl8oZm5zOiBGaWx0ZXJGbltdKTogRmlsdGVyRm4ge1xuICAgIGlmIChmbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBfID0+IHRydWVcbiAgICB9XG5cbiAgICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gZm5zWzBdXG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZW0gPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIGZucykge1xuICAgICAgICAgICAgaWYgKGZuKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJNZXJnZSguLi5maWx0ZXJzOiBhbnlbXSk6IGFueSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJzXG4gICAgICAgIC5maWx0ZXIodiA9PiB2ICYmICgoQXJyYXkuaXNBcnJheSh2KSAmJiB2Lmxlbmd0aCA+IDApIHx8IChpc1BsYWluT2JqZWN0KHYpICYmIE9iamVjdC5rZXlzKHYpLmxlbmd0aCA+IDApKSlcbiAgICAgICAgLm1hcChmaWx0ZXIgPT4gZGVlcENsb25lKGZpbHRlcikpXG5cbiAgICByZXR1cm4gY29tcGFjdCh7IG9wOiBGaWx0ZXJPcC5BbmQsIHZhbHVlIH0pXG59XG5cbmV4cG9ydCBjbGFzcyBGaWx0ZXJQcm9wZXJ0eTxUIGV4dGVuZHMgTW9kZWw+IGV4dGVuZHMgUXVlcnlQcm9wZXJ0eTxGaWx0ZXI8VD4sIEZpbHRlck5vcm1hbGl6ZWQ+IHtcbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbWVyZ2UoXG4gICAgICAgIGE/OiBGaWx0ZXJOb3JtYWxpemVkIHwgdW5kZWZpbmVkLFxuICAgICAgICBiPzogRmlsdGVyTm9ybWFsaXplZCB8IHVuZGVmaW5lZFxuICAgICk6IEZpbHRlck5vcm1hbGl6ZWQgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gZmlsdGVyTWVyZ2UoYSwgYilcbiAgICB9XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIG5vcm0oYTogRmlsdGVyTm9ybWFsaXplZCB8IEZpbHRlcjxUPik6IEZpbHRlck5vcm1hbGl6ZWQgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gZmlsdGVyTm9ybWFsaXplKGEpXG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRmlsdGVyUHJvcGVydHlTZXQ8VCBleHRlbmRzIE1vZGVsPiBleHRlbmRzIFF1ZXJ5UHJvcGVydHlTZXQ8RmlsdGVyPFQ+PiB7XG4gICAgcHJvdGVjdGVkIG92ZXJyaWRlIG5ld1Byb3BlcnR5KCkge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlclByb3BlcnR5KHVuZGVmaW5lZClcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgbWVyZ2UoLi4uYXJnczogYW55W10pIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlck1lcmdlKC4uLmFyZ3MpXG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyU2ltcGxpZnkoZmlsdGVyczogYW55KTogb2JqZWN0IHwgbnVsbCB7XG4gICAgaWYgKGlzVHJ1dGh5KGZpbHRlcnMpKSB7XG4gICAgICAgIGZpbHRlcnMgPSBjb21wYWN0KGZpbHRlck5vcm1hbGl6ZShmaWx0ZXJzKSlcbiAgICAgICAgY29uc3QgcmVzdWx0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge31cbiAgICAgICAgaWYgKGZpbHRlcnNbXCJvcFwiXSA9PT0gRmlsdGVyT3AuQW5kKSB7XG4gICAgICAgICAgICBmaWx0ZXJzID0gZmlsdGVyc1tcInZhbHVlXCJdXG4gICAgICAgICAgICBpZiAoZmlsdGVycyA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShmaWx0ZXJzKSkge1xuICAgICAgICAgICAgZmlsdGVycyA9IFtmaWx0ZXJzXVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBmIG9mIGZpbHRlcnMpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBmW1widmFsdWVcIl0gIT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIChmW1wib3BcIl0gPT09IEZpbHRlck9wLkVxIHx8IGZbXCJvcFwiXSA9PT0gRmlsdGVyT3AuRXFTdHJpY3QgfHwgZltcIm9wXCJdID09PSBGaWx0ZXJPcC5FcUluc2VzaXRpdmUpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZXN1bHRbZltcInBhdGhcIl0gYXMgc3RyaW5nXSA9IGZbXCJ2YWx1ZVwiXVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgIH1cbn1cblxuZnVuY3Rpb24gY29tcGFjdChmaWx0ZXJzOiBGaWx0ZXJOb3JtYWxpemVkKTogYW55IHtcbiAgICBpZiAoZmlsdGVycy5vcCA9PT0gRmlsdGVyT3AuQW5kIHx8IGZpbHRlcnMub3AgPT09IEZpbHRlck9wLk9yKSB7XG4gICAgICAgIGlmIChpc0ZhbHN5KGZpbHRlcnMudmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbHVlID0gZmlsdGVycy52YWx1ZS5tYXAoY29tcGFjdCkuZmlsdGVyKGlzVHJ1dGh5KVxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVtb3ZlIHN1YmZpbHRlcnMgd2l0aCB0aGUgc2FtZSBvcGVyYXRvclxuICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlZHVjZSgoYWNjLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlLm9wID09PSBmaWx0ZXJzLm9wKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQodmFsdWUudmFsdWUpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFjYy5wdXNoKHZhbHVlKVxuICAgICAgICAgICAgICAgIHJldHVybiBhY2NcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgW10pXG5cbiAgICAgICAgLy8gZGVkdXBsaWNhdGUsIGFuZCBsYXRlc3QgZmlsdGVyIGlzIHRoZSBtb3N0IHByaW9yaXR5XG4gICAgICAgIHZhbHVlID0gdmFsdWVcbiAgICAgICAgICAgIC5yZXZlcnNlKClcbiAgICAgICAgICAgIC5maWx0ZXIoKHYsIGksIGEpID0+IGEuZmluZEluZGV4KHYyID0+IHYucGF0aCA9PT0gdjIucGF0aCAmJiB2Lm9wID09PSB2Mi5vcCkgPT09IGkpXG4gICAgICAgICAgICAucmV2ZXJzZSgpXG5cbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlWzBdXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyBvcDogZmlsdGVycy5vcCwgdmFsdWUgfVxuICAgIH0gZWxzZSBpZiAoZmlsdGVycy52YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgfVxuICAgIHJldHVybiBmaWx0ZXJzXG59XG4iXX0=
|
package/esm2022/query/index.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export { filterBy, filterMerge, filterNormalize } from "./filter";
|
|
1
|
+
export { filterBy, filterMerge, filterNormalize, filterSimplify } from "./filter";
|
|
2
2
|
export { groupBy, grouperMerge } from "./grouper";
|
|
3
3
|
export { sortBy, sorterMerge, sorterNormalize } from "./sorter";
|
|
4
4
|
export { slimBy, slimerMerge } from "./slimer";
|
|
@@ -6,4 +6,4 @@ export { sliceMerge, sliceApply, sliceInsert, sliceToPages, sliceClamp, sliceEq
|
|
|
6
6
|
export { pathGetterCompile } from "./path";
|
|
7
7
|
export { querySubject } from "./query";
|
|
8
8
|
export { queryExecutor } from "./executor";
|
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9kYXRhL3NyYy9xdWVyeS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQTRCLFFBQVEsRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFZLGNBQWMsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUNySCxPQUFPLEVBQVcsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUMxRCxPQUFPLEVBR0gsTUFBTSxFQUNOLFdBQVcsRUFDWCxlQUFlLEVBSWxCLE1BQU0sVUFBVSxDQUFBO0FBQ2pCLE9BQU8sRUFBVSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3RELE9BQU8sRUFBUyxVQUFVLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLFNBQVMsQ0FBQTtBQUN2RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDMUMsT0FBTyxFQUFzQyxZQUFZLEVBQWdCLE1BQU0sU0FBUyxDQUFBO0FBQ3hGLE9BQU8sRUFBRSxhQUFhLEVBQWlCLE1BQU0sWUFBWSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgRmlsdGVyLCBGaWx0ZXJOb3JtYWxpemVkLCBmaWx0ZXJCeSwgZmlsdGVyTWVyZ2UsIGZpbHRlck5vcm1hbGl6ZSwgRmlsdGVyT3AsIGZpbHRlclNpbXBsaWZ5IH0gZnJvbSBcIi4vZmlsdGVyXCJcbmV4cG9ydCB7IEdyb3VwZXIsIGdyb3VwQnksIGdyb3VwZXJNZXJnZSB9IGZyb20gXCIuL2dyb3VwZXJcIlxuZXhwb3J0IHtcbiAgICBTb3J0ZXIsXG4gICAgU29ydGVyTm9ybWFsaXplZCxcbiAgICBzb3J0QnksXG4gICAgc29ydGVyTWVyZ2UsXG4gICAgc29ydGVyTm9ybWFsaXplLFxuICAgIFNvcnREaXIsXG4gICAgU29ydERpcmVjdGlvbixcbiAgICBTb3J0RGlyRXh0cmFcbn0gZnJvbSBcIi4vc29ydGVyXCJcbmV4cG9ydCB7IFNsaW1lciwgc2xpbUJ5LCBzbGltZXJNZXJnZSB9IGZyb20gXCIuL3NsaW1lclwiXG5leHBvcnQgeyBTbGljZSwgc2xpY2VNZXJnZSwgc2xpY2VBcHBseSwgc2xpY2VJbnNlcnQsIHNsaWNlVG9QYWdlcywgc2xpY2VDbGFtcCwgc2xpY2VFcSB9IGZyb20gXCIuL3NsaWNlXCJcbmV4cG9ydCB7IHBhdGhHZXR0ZXJDb21waWxlIH0gZnJvbSBcIi4vcGF0aFwiXG5leHBvcnQgeyBRdWVyeSwgUXVlcnlXaXRoU2xpY2UsIFF1ZXJ5UmVzdWx0LCBxdWVyeVN1YmplY3QsIFF1ZXJ5U3ViamVjdCB9IGZyb20gXCIuL3F1ZXJ5XCJcbmV4cG9ydCB7IHF1ZXJ5RXhlY3V0b3IsIFF1ZXJ5RXhlY3V0b3IgfSBmcm9tIFwiLi9leGVjdXRvclwiXG4iXX0=
|
|
@@ -43,6 +43,8 @@ export class DataSourceProxy extends CdkDataSource {
|
|
|
43
43
|
this.value$ = this.#value.pipe(takeUntilDestroyed());
|
|
44
44
|
this.query$ = this.value$.pipe(map(value => value.query$), shareReplay(1));
|
|
45
45
|
this.items$ = this.value$.pipe(switchMap(value => value.items$), shareReplay(1));
|
|
46
|
+
this.isBusy$ = this.value$.pipe(switchMap(value => value.isBusy$), shareReplay(1));
|
|
47
|
+
this.isEmpty$ = this.value$.pipe(switchMap(value => value.isEmpty$), shareReplay(1));
|
|
46
48
|
this.#cvSubs = new Map();
|
|
47
49
|
}
|
|
48
50
|
set value(value) {
|
|
@@ -166,8 +168,8 @@ export class DataSourceProxyBusy {
|
|
|
166
168
|
constructor() {
|
|
167
169
|
this.#proxy = inject(DataSourceProxy);
|
|
168
170
|
this.#busy = inject(Busy);
|
|
169
|
-
this.
|
|
170
|
-
this.#busy.connect(this.
|
|
171
|
+
this.isBusy$ = this.#proxy.value$.pipe(switchMap(value => value.isBusy$), shareReplay(1));
|
|
172
|
+
this.#busy.connect(this.isBusy$).pipe(takeUntilDestroyed()).subscribe();
|
|
171
173
|
}
|
|
172
174
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.6", ngImport: i0, type: DataSourceProxyBusy, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
173
175
|
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.6", type: DataSourceProxyBusy, isStandalone: true, selector: "[nuDataSource][nuBusy]", ngImport: i0 }); }
|
|
@@ -193,4 +195,4 @@ function coerceDataSource(value) {
|
|
|
193
195
|
return throwError(() => new Error("Invalid DataSource value"));
|
|
194
196
|
}
|
|
195
197
|
}
|
|
196
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3Byb3h5LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxJQUFJLGFBQWEsRUFBb0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFBO0FBQzFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUU3RSxPQUFPLEVBQ0gsYUFBYSxFQUNiLFFBQVEsRUFDUixHQUFHLEVBRUgsRUFBRSxFQUNGLGFBQWEsRUFDYixXQUFXLEVBQ1gsT0FBTyxFQUVQLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNiLE1BQU0sTUFBTSxDQUFBO0FBRWIsT0FBTyxFQUFFLElBQUksRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUd0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQTs7QUFJckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBTUgsTUFBTSxPQUFPLGVBQ1QsU0FBUSxhQUE0QjtJQU54Qzs7UUFnQmEsV0FBTSxHQUFHLElBQUksYUFBYSxDQUFnQixDQUFDLENBQUMsQ0FBQTtRQUM1QyxXQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFBO1FBQy9DLFdBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDOUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUMxQixXQUFXLENBQUMsQ0FB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QyxDQUFBO1FBQ3RELFVBQUssR0FBRyxNQUFNLENBQVksSUFBSSxDQUFDLENBQUE7UUFFL0IsVUFBSyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDcEMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUMvQixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2pCLENBQUE7UUFHRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUN6RSxDQUFDOzhHQVhRLG1CQUFtQjtrR0FBbkIsbUJBQW1COzsyRkFBbkIsbUJBQW1CO2tCQUovQixTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsd0JBQXdCO2lCQUNyQzs7QUFlRCxTQUFTLGdCQUFnQixDQUFrQixLQUE4QjtJQUNyRSxJQUFJLEtBQUssWUFBWSxlQUFlLEVBQUUsQ0FBQztRQUNuQyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUE7SUFDdkIsQ0FBQztTQUFNLElBQUksS0FBSyxZQUFZLFVBQVUsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3BCLENBQUM7U0FBTSxJQUFJLEtBQUssWUFBWSxZQUFZLEVBQUUsQ0FBQztRQUN2QyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQTtJQUNuQyxDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQTtJQUNsRSxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTb3VyY2UgYXMgQ2RrRGF0YVNvdXJjZSwgQ29sbGVjdGlvblZpZXdlciB9IGZyb20gXCJAYW5ndWxhci9jZGsvY29sbGVjdGlvbnNcIlxuaW1wb3J0IHsgRGlyZWN0aXZlLCBpbmplY3QsIGlucHV0LCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIlxuXG5pbXBvcnQge1xuICAgIGNvbWJpbmVMYXRlc3QsXG4gICAgZmluYWxpemUsXG4gICAgbWFwLFxuICAgIE9ic2VydmFibGUsXG4gICAgb2YsXG4gICAgUmVwbGF5U3ViamVjdCxcbiAgICBzaGFyZVJlcGxheSxcbiAgICBTdWJqZWN0LFxuICAgIFN1YnNjcmlwdGlvbixcbiAgICBzd2l0Y2hNYXAsXG4gICAgdGFrZVVudGlsLFxuICAgIHRocm93RXJyb3Jcbn0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBCdXN5LCBDb25uZWN0UHJvdG9jb2wgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuLi9tb2RlbFwiXG5pbXBvcnQgeyBEYXRhUHJvdmlkZXIgfSBmcm9tIFwiLi4vcHJvdmlkZXIvcHJvdmlkZXJcIlxuaW1wb3J0IHsgRmlsdGVyLCBHcm91cGVyLCBTbGltZXIsIFNvcnRlciB9IGZyb20gXCIuLi9xdWVyeVwiXG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSBcIi4vc291cmNlXCJcblxuZXhwb3J0IHR5cGUgRGF0YVNvdXJjZVByb3h5SW5wdXQ8VCBleHRlbmRzIE1vZGVsPiA9IERhdGFTb3VyY2VQcm94eTxUPiB8IERhdGFTb3VyY2U8VD4gfCBEYXRhUHJvdmlkZXI8VD5cblxuLyoqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHRhYmxlIFtudURhdGFTb3VyY2VdPVwiLi4uXCIgW2ZpbHRlcl09XCJ7aXNBY3RpdmU6IHRydWV9XCIgW3NvcnRlcl09XCJbe25hbWU6ICdhc2MnfV1cIj48L3RhYmxlPlxuICogYGBgXG4gKlxuICogYGBgdHNcbiAqIEBDb21wb25lbnQoe1xuICogICB0ZW1wbGF0ZTogYDx0YWJsZSBbbnVEYXRhU291cmNlXT1cInVzZXJzJFwiPjwvdGFibGU+YFxuICogfSlcbiAqIGNsYXNzIFVzZXJUYWJsZSB7XG4gKiAgIHJlYWRvbmx5IHVzZXJTZXJ2aWNlID0gaW5qZWN0KFVzZXJTZXJ2aWNlKVxuICogICByZWFkb25seSB1c2VycyQgPSBVc2VyU2VydmljZS5hbGwoKVxuICogfVxuICogYGBgXG4gKlxuICogYGBgdHNcbiAqIEBDb21wb25lbnQoe1xuICogICBzZWxlY3RvcjogXCJ0YWJsZS5teS10YWJsZVwiLFxuICogICB0ZW1wbGF0ZTogYFxuICogICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IGl0ZW1TaXplPVwiNTBcIiBjbGFzcz1cImV4YW1wbGUtdmlld3BvcnRcIj5cbiAqICAgICAgIDxkaXYgKmNka1ZpcnR1YWxGb3I9XCJsZXQgaXRlbSBvZiBkYXRhU291cmNlXCIgY2xhc3M9XCJleGFtcGxlLWl0ZW1cIj57e2l0ZW19fTwvZGl2PlxuICogICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAqICAgYFxuICogfSlcbiAqIGNsYXNzIFRhYmxlQ29tcG9uZW50IHtcbiAqICAgcmVhZG9ubHkgZGF0YVNvdXJjZSA9IGluamVjdChEYXRhU291cmNlUHJveHkpXG4gKiB9XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJbbnVEYXRhU291cmNlXVwiLFxuICAgIGV4cG9ydEFzOiBcIm51RGF0YVNvdXJjZVwiXG59KVxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2VQcm94eTxUIGV4dGVuZHMgTW9kZWw+XG4gICAgZXh0ZW5kcyBDZGtEYXRhU291cmNlPFQgfCB1bmRlZmluZWQ+XG4gICAgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIENvbm5lY3RQcm90b2NvbFxue1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlLCBhbGlhczogXCJudURhdGFTb3VyY2VcIiB9KVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogRGF0YVNvdXJjZVByb3h5SW5wdXQ8VD4pIHtcbiAgICAgICAgdGhpcy4jdmFsdWVTdWI/LnVuc3Vic2NyaWJlKClcbiAgICAgICAgdGhpcy4jdmFsdWVTdWIgPSBjb2VyY2VEYXRhU291cmNlPFQ+KHZhbHVlKS5zdWJzY3JpYmUodGhpcy4jdmFsdWUpXG4gICAgfVxuXG4gICAgI3ZhbHVlU3ViPzogU3Vic2NyaXB0aW9uXG4gICAgcmVhZG9ubHkgI3ZhbHVlID0gbmV3IFJlcGxheVN1YmplY3Q8RGF0YVNvdXJjZTxUPj4oMSlcbiAgICByZWFkb25seSB2YWx1ZSQgPSB0aGlzLiN2YWx1ZS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgIHJlYWRvbmx5IHF1ZXJ5JCA9IHRoaXMudmFsdWUkLnBpcGUoXG4gICAgICAgIG1hcCh2YWx1ZSA9PiB2YWx1ZS5xdWVyeSQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGl0ZW1zJCA9IHRoaXMudmFsdWUkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB2YWx1ZS5pdGVtcyQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgICNjdlN1YnMgPSBuZXcgTWFwPENvbGxlY3Rpb25WaWV3ZXIsIFN1YmplY3Q8dm9pZD4+KClcblxuICAgIG92ZXJyaWRlIGNvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IE9ic2VydmFibGU8cmVhZG9ubHkgKFQgfCB1bmRlZmluZWQpW10+IHtcbiAgICAgICAgY29uc3QgdW50aWwgPSBuZXcgU3ViamVjdDx2b2lkPigpXG5cbiAgICAgICAgdGhpcy4jY3ZTdWJzLmdldChjb2xsZWN0aW9uVmlld2VyKT8ubmV4dCgpXG4gICAgICAgIHRoaXMuI2N2U3Vicy5zZXQoY29sbGVjdGlvblZpZXdlciwgdW50aWwpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUkLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gdmFsdWUuY29ubmVjdChjb2xsZWN0aW9uVmlld2VyKSksXG4gICAgICAgICAgICB0YWtlVW50aWwodW50aWwpLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIG92ZXJyaWRlIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xuICAgICAgICB0aGlzLiNjdlN1YnMuZ2V0KGNvbGxlY3Rpb25WaWV3ZXIpPy5uZXh0KClcbiAgICAgICAgdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLiN2YWx1ZVN1Yj8udW5zdWJzY3JpYmUoKVxuICAgICAgICB0aGlzLiN2YWx1ZVN1YiA9IHVuZGVmaW5lZFxuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJbbnVEYXRhU291cmNlXVtmaWx0ZXJdXCJcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVNvdXJjZVByb3h5RmlsdGVyPFQgZXh0ZW5kcyBNb2RlbCwgRiBleHRlbmRzIEZpbHRlcjxUPj4ge1xuICAgIHJlYWRvbmx5ICNwcm94eSA9IGluamVjdDxEYXRhU291cmNlUHJveHk8VD4+KERhdGFTb3VyY2VQcm94eSlcbiAgICByZWFkb25seSBmaWx0ZXIgPSBpbnB1dC5yZXF1aXJlZDxGPigpXG4gICAgcmVhZG9ubHkgZmlsdGVyJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLmZpbHRlcilcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb21iaW5lTGF0ZXN0KHsgcXVlcnk6IHRoaXMuI3Byb3h5LnF1ZXJ5JCwgZmlsdGVyOiB0aGlzLmZpbHRlciQgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBxdWVyeSwgZmlsdGVyIH0pID0+IHF1ZXJ5LmZpbHRlci5mb3JjZWQuc2V0KGZpbHRlcikpXG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiBcIltudURhdGFTb3VyY2VdW3NvcnRlcl1cIlxufSlcbmV4cG9ydCBjbGFzcyBEYXRhU291cmNlUHJveHlTb3J0ZXI8VCBleHRlbmRzIE1vZGVsLCBTIGV4dGVuZHMgU29ydGVyPFQ+PiB7XG4gICAgcmVhZG9ubHkgI3Byb3h5ID0gaW5qZWN0PERhdGFTb3VyY2VQcm94eTxUPj4oRGF0YVNvdXJjZVByb3h5KVxuICAgIHJlYWRvbmx5IHNvcnRlciA9IGlucHV0LnJlcXVpcmVkPFM+KClcbiAgICByZWFkb25seSBzb3J0ZXIkID0gdG9PYnNlcnZhYmxlKHRoaXMuc29ydGVyKVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoeyBxdWVyeTogdGhpcy4jcHJveHkucXVlcnkkLCBzb3J0ZXI6IHRoaXMuc29ydGVyJCB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IHF1ZXJ5LCBzb3J0ZXIgfSkgPT4gcXVlcnkuc29ydGVyLmZvcmNlZC5zZXQoc29ydGVyKSlcbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6IFwiW251RGF0YVNvdXJjZV1bc2xpbWVyXVwiXG59KVxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2VQcm94eVNsaW1lcjxUIGV4dGVuZHMgTW9kZWwsIFMgZXh0ZW5kcyBTbGltZXI8VD4+IHtcbiAgICByZWFkb25seSAjcHJveHkgPSBpbmplY3Q8RGF0YVNvdXJjZVByb3h5PFQ+PihEYXRhU291cmNlUHJveHkpXG4gICAgcmVhZG9ubHkgc2xpbWVyID0gaW5wdXQucmVxdWlyZWQ8Uz4oKVxuICAgIHJlYWRvbmx5IHNsaW1lciQgPSB0b09ic2VydmFibGUodGhpcy5zbGltZXIpXG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29tYmluZUxhdGVzdCh7IHF1ZXJ5OiB0aGlzLiNwcm94eS5xdWVyeSQsIHNsaW1lcjogdGhpcy5zbGltZXIkIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgcXVlcnksIHNsaW1lciB9KSA9PiBxdWVyeS5zbGltZXIuZm9yY2VkLnNldChzbGltZXIpKVxuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJbbnVEYXRhU291cmNlXVtncm91cGVyXVwiXG59KVxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2VQcm94eUdyb3VwZXI8VCBleHRlbmRzIE1vZGVsLCBHIGV4dGVuZHMgR3JvdXBlcjxUPj4ge1xuICAgIHJlYWRvbmx5ICNwcm94eSA9IGluamVjdDxEYXRhU291cmNlUHJveHk8VD4+KERhdGFTb3VyY2VQcm94eSlcbiAgICByZWFkb25seSBncm91cGVyID0gaW5wdXQucmVxdWlyZWQ8Rz4oKVxuICAgIHJlYWRvbmx5IGdyb3VwZXIkID0gdG9PYnNlcnZhYmxlKHRoaXMuZ3JvdXBlcilcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb21iaW5lTGF0ZXN0KHsgcXVlcnk6IHRoaXMuI3Byb3h5LnF1ZXJ5JCwgZ3JvdXBlcjogdGhpcy5ncm91cGVyJCB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IHF1ZXJ5LCBncm91cGVyIH0pID0+IHF1ZXJ5Lmdyb3VwZXIuZm9yY2VkLnNldChncm91cGVyKSlcbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6IFwiW251RGF0YVNvdXJjZV1bbnVCdXN5XVwiXG59KVxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2VQcm94eUJ1c3kge1xuICAgIHJlYWRvbmx5ICNwcm94eSA9IGluamVjdDxEYXRhU291cmNlUHJveHk8YW55Pj4oRGF0YVNvdXJjZVByb3h5KVxuICAgIHJlYWRvbmx5ICNidXN5ID0gaW5qZWN0PEJ1c3k8YW55Pj4oQnVzeSlcblxuICAgIHJlYWRvbmx5IGJ1c3kkID0gdGhpcy4jcHJveHkudmFsdWUkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB2YWx1ZS5idXN5JCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuI2J1c3kuY29ubmVjdCh0aGlzLmJ1c3kkKS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gY29lcmNlRGF0YVNvdXJjZTxUIGV4dGVuZHMgTW9kZWw+KHZhbHVlOiBEYXRhU291cmNlUHJveHlJbnB1dDxUPik6IE9ic2VydmFibGU8RGF0YVNvdXJjZTxUPj4ge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFTb3VyY2VQcm94eSkge1xuICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUkXG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFTb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIG9mKHZhbHVlKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIG9mKHZhbHVlLnRvRGF0YVNvdXJjZSgpKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihcIkludmFsaWQgRGF0YVNvdXJjZSB2YWx1ZVwiKSlcbiAgICB9XG59XG4iXX0=
|
|
198
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveHkuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3Byb3h5LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxJQUFJLGFBQWEsRUFBb0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUN4RixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFhLE1BQU0sZUFBZSxDQUFBO0FBQzFFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQTtBQUU3RSxPQUFPLEVBQ0gsYUFBYSxFQUNiLFFBQVEsRUFDUixHQUFHLEVBRUgsRUFBRSxFQUNGLGFBQWEsRUFDYixXQUFXLEVBQ1gsT0FBTyxFQUVQLFNBQVMsRUFDVCxTQUFTLEVBQ1QsVUFBVSxFQUNiLE1BQU0sTUFBTSxDQUFBO0FBRWIsT0FBTyxFQUFFLElBQUksRUFBbUIsTUFBTSxnQkFBZ0IsQ0FBQTtBQUd0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFFbkQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFVBQVUsQ0FBQTs7QUFJckM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNkJHO0FBTUgsTUFBTSxPQUFPLGVBQ1QsU0FBUSxhQUE0QjtJQU54Qzs7UUFnQmEsV0FBTSxHQUFHLElBQUksYUFBYSxDQUFnQixDQUFDLENBQUMsQ0FBQTtRQUM1QyxXQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQyxDQUFBO1FBQy9DLFdBQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDOUIsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxFQUMxQixXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2pCLENBQUE7UUFFUSxXQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQzlCLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFDaEMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNqQixDQUFBO1FBRVEsWUFBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUMvQixTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQ2pDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDakIsQ0FBQTtRQUVRLGFBQVEsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDaEMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUNsQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2pCLENBQUE7UUFFRCxZQUFPLEdBQUcsSUFBSSxHQUFHLEVBQW1DLENBQUE7S0F3QnZEO0lBckRHLElBQ0ksS0FBSyxDQUFDLEtBQThCO1FBQ3BDLElBQUksQ0FBQyxTQUFTLEVBQUUsV0FBVyxFQUFFLENBQUE7UUFDN0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBSSxLQUFLLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQ3RFLENBQUM7SUFFRCxTQUFTLENBQWU7SUFDZixNQUFNLENBQXNDO0lBc0JyRCxPQUFPLENBQTZDO0lBRTNDLE9BQU8sQ0FBQyxnQkFBa0M7UUFDL0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQTtRQUVqQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFBO1FBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFBO1FBRXpDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ25CLFNBQVMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxFQUNuRCxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQ2hCLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQ3hELENBQUE7SUFDTCxDQUFDO0lBRVEsVUFBVSxDQUFDLGdCQUFrQztRQUNsRCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFBO1FBQzFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7SUFDekMsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxDQUFBO1FBQzdCLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO0lBQzlCLENBQUM7OEdBeERRLGVBQWU7a0dBQWYsZUFBZTs7MkZBQWYsZUFBZTtrQkFMM0IsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLGdCQUFnQjtvQkFDMUIsUUFBUSxFQUFFLGNBQWM7aUJBQzNCOzhCQU1PLEtBQUs7c0JBRFIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTs7QUEyRHBELE1BQU0sT0FBTyxxQkFBcUI7SUFDckIsTUFBTSxDQUE4QztJQUk3RDtRQUpTLFdBQU0sR0FBRyxNQUFNLENBQXFCLGVBQWUsQ0FBQyxDQUFBO1FBQ3BELFdBQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFLLENBQUE7UUFDNUIsWUFBTyxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7UUFHeEMsYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7YUFDN0QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDMUIsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQzFFLENBQUM7OEdBVFEscUJBQXFCO2tHQUFyQixxQkFBcUI7OzJGQUFyQixxQkFBcUI7a0JBSmpDLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSx3QkFBd0I7aUJBQ3JDOztBQWlCRCxNQUFNLE9BQU8scUJBQXFCO0lBQ3JCLE1BQU0sQ0FBOEM7SUFJN0Q7UUFKUyxXQUFNLEdBQUcsTUFBTSxDQUFxQixlQUFlLENBQUMsQ0FBQTtRQUNwRCxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBSyxDQUFBO1FBQzVCLFlBQU8sR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBR3hDLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQzdELElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2FBQzFCLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtJQUMxRSxDQUFDOzhHQVRRLHFCQUFxQjtrR0FBckIscUJBQXFCOzsyRkFBckIscUJBQXFCO2tCQUpqQyxTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsd0JBQXdCO2lCQUNyQzs7QUFpQkQsTUFBTSxPQUFPLHFCQUFxQjtJQUNyQixNQUFNLENBQThDO0lBSTdEO1FBSlMsV0FBTSxHQUFHLE1BQU0sQ0FBcUIsZUFBZSxDQUFDLENBQUE7UUFDcEQsV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUssQ0FBQTtRQUM1QixZQUFPLEdBQUcsWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUd4QyxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQzthQUM3RCxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQzthQUMxQixTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDMUUsQ0FBQzs4R0FUUSxxQkFBcUI7a0dBQXJCLHFCQUFxQjs7MkZBQXJCLHFCQUFxQjtrQkFKakMsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLHdCQUF3QjtpQkFDckM7O0FBaUJELE1BQU0sT0FBTyxzQkFBc0I7SUFDdEIsTUFBTSxDQUE4QztJQUk3RDtRQUpTLFdBQU0sR0FBRyxNQUFNLENBQXFCLGVBQWUsQ0FBQyxDQUFBO1FBQ3BELFlBQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUFLLENBQUE7UUFDN0IsYUFBUSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7UUFHMUMsYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDL0QsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDMUIsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO0lBQzdFLENBQUM7OEdBVFEsc0JBQXNCO2tHQUF0QixzQkFBc0I7OzJGQUF0QixzQkFBc0I7a0JBSmxDLFNBQVM7bUJBQUM7b0JBQ1AsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSx5QkFBeUI7aUJBQ3RDOztBQWlCRCxNQUFNLE9BQU8sbUJBQW1CO0lBQ25CLE1BQU0sQ0FBZ0Q7SUFDdEQsS0FBSyxDQUEwQjtJQU94QztRQVJTLFdBQU0sR0FBRyxNQUFNLENBQXVCLGVBQWUsQ0FBQyxDQUFBO1FBQ3RELFVBQUssR0FBRyxNQUFNLENBQVksSUFBSSxDQUFDLENBQUE7UUFFL0IsWUFBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDdEMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUNqQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQ2pCLENBQUE7UUFHRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQTtJQUMzRSxDQUFDOzhHQVhRLG1CQUFtQjtrR0FBbkIsbUJBQW1COzsyRkFBbkIsbUJBQW1CO2tCQUovQixTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsd0JBQXdCO2lCQUNyQzs7QUFlRCxTQUFTLGdCQUFnQixDQUFrQixLQUE4QjtJQUNyRSxJQUFJLEtBQUssWUFBWSxlQUFlLEVBQUUsQ0FBQztRQUNuQyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUE7SUFDdkIsQ0FBQztTQUFNLElBQUksS0FBSyxZQUFZLFVBQVUsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3BCLENBQUM7U0FBTSxJQUFJLEtBQUssWUFBWSxZQUFZLEVBQUUsQ0FBQztRQUN2QyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQTtJQUNuQyxDQUFDO1NBQU0sQ0FBQztRQUNKLE9BQU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQTtJQUNsRSxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTb3VyY2UgYXMgQ2RrRGF0YVNvdXJjZSwgQ29sbGVjdGlvblZpZXdlciB9IGZyb20gXCJAYW5ndWxhci9jZGsvY29sbGVjdGlvbnNcIlxuaW1wb3J0IHsgRGlyZWN0aXZlLCBpbmplY3QsIGlucHV0LCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIlxuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkLCB0b09ic2VydmFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3BcIlxuXG5pbXBvcnQge1xuICAgIGNvbWJpbmVMYXRlc3QsXG4gICAgZmluYWxpemUsXG4gICAgbWFwLFxuICAgIE9ic2VydmFibGUsXG4gICAgb2YsXG4gICAgUmVwbGF5U3ViamVjdCxcbiAgICBzaGFyZVJlcGxheSxcbiAgICBTdWJqZWN0LFxuICAgIFN1YnNjcmlwdGlvbixcbiAgICBzd2l0Y2hNYXAsXG4gICAgdGFrZVVudGlsLFxuICAgIHRocm93RXJyb3Jcbn0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBCdXN5LCBDb25uZWN0UHJvdG9jb2wgfSBmcm9tIFwiQG5ndXRpbC9jb21tb25cIlxuXG5pbXBvcnQgeyBNb2RlbCB9IGZyb20gXCIuLi9tb2RlbFwiXG5pbXBvcnQgeyBEYXRhUHJvdmlkZXIgfSBmcm9tIFwiLi4vcHJvdmlkZXIvcHJvdmlkZXJcIlxuaW1wb3J0IHsgRmlsdGVyLCBHcm91cGVyLCBTbGltZXIsIFNvcnRlciB9IGZyb20gXCIuLi9xdWVyeVwiXG5pbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSBcIi4vc291cmNlXCJcblxuZXhwb3J0IHR5cGUgRGF0YVNvdXJjZVByb3h5SW5wdXQ8VCBleHRlbmRzIE1vZGVsPiA9IERhdGFTb3VyY2VQcm94eTxUPiB8IERhdGFTb3VyY2U8VD4gfCBEYXRhUHJvdmlkZXI8VD5cblxuLyoqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHRhYmxlIFtudURhdGFTb3VyY2VdPVwiLi4uXCIgW2ZpbHRlcl09XCJ7aXNBY3RpdmU6IHRydWV9XCIgW3NvcnRlcl09XCJbe25hbWU6ICdhc2MnfV1cIj48L3RhYmxlPlxuICogYGBgXG4gKlxuICogYGBgdHNcbiAqIEBDb21wb25lbnQoe1xuICogICB0ZW1wbGF0ZTogYDx0YWJsZSBbbnVEYXRhU291cmNlXT1cInVzZXJzJFwiPjwvdGFibGU+YFxuICogfSlcbiAqIGNsYXNzIFVzZXJUYWJsZSB7XG4gKiAgIHJlYWRvbmx5IHVzZXJTZXJ2aWNlID0gaW5qZWN0KFVzZXJTZXJ2aWNlKVxuICogICByZWFkb25seSB1c2VycyQgPSBVc2VyU2VydmljZS5hbGwoKVxuICogfVxuICogYGBgXG4gKlxuICogYGBgdHNcbiAqIEBDb21wb25lbnQoe1xuICogICBzZWxlY3RvcjogXCJ0YWJsZS5teS10YWJsZVwiLFxuICogICB0ZW1wbGF0ZTogYFxuICogICA8Y2RrLXZpcnR1YWwtc2Nyb2xsLXZpZXdwb3J0IGl0ZW1TaXplPVwiNTBcIiBjbGFzcz1cImV4YW1wbGUtdmlld3BvcnRcIj5cbiAqICAgICAgIDxkaXYgKmNka1ZpcnR1YWxGb3I9XCJsZXQgaXRlbSBvZiBkYXRhU291cmNlXCIgY2xhc3M9XCJleGFtcGxlLWl0ZW1cIj57e2l0ZW19fTwvZGl2PlxuICogICA8L2Nkay12aXJ0dWFsLXNjcm9sbC12aWV3cG9ydD5cbiAqICAgYFxuICogfSlcbiAqIGNsYXNzIFRhYmxlQ29tcG9uZW50IHtcbiAqICAgcmVhZG9ubHkgZGF0YVNvdXJjZSA9IGluamVjdChEYXRhU291cmNlUHJveHkpXG4gKiB9XG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJbbnVEYXRhU291cmNlXVwiLFxuICAgIGV4cG9ydEFzOiBcIm51RGF0YVNvdXJjZVwiXG59KVxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2VQcm94eTxUIGV4dGVuZHMgTW9kZWw+XG4gICAgZXh0ZW5kcyBDZGtEYXRhU291cmNlPFQgfCB1bmRlZmluZWQ+XG4gICAgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIENvbm5lY3RQcm90b2NvbFxue1xuICAgIEBJbnB1dCh7IHJlcXVpcmVkOiB0cnVlLCBhbGlhczogXCJudURhdGFTb3VyY2VcIiB9KVxuICAgIHNldCB2YWx1ZSh2YWx1ZTogRGF0YVNvdXJjZVByb3h5SW5wdXQ8VD4pIHtcbiAgICAgICAgdGhpcy4jdmFsdWVTdWI/LnVuc3Vic2NyaWJlKClcbiAgICAgICAgdGhpcy4jdmFsdWVTdWIgPSBjb2VyY2VEYXRhU291cmNlPFQ+KHZhbHVlKS5zdWJzY3JpYmUodGhpcy4jdmFsdWUpXG4gICAgfVxuXG4gICAgI3ZhbHVlU3ViPzogU3Vic2NyaXB0aW9uXG4gICAgcmVhZG9ubHkgI3ZhbHVlID0gbmV3IFJlcGxheVN1YmplY3Q8RGF0YVNvdXJjZTxUPj4oMSlcbiAgICByZWFkb25seSB2YWx1ZSQgPSB0aGlzLiN2YWx1ZS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgIHJlYWRvbmx5IHF1ZXJ5JCA9IHRoaXMudmFsdWUkLnBpcGUoXG4gICAgICAgIG1hcCh2YWx1ZSA9PiB2YWx1ZS5xdWVyeSQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGl0ZW1zJCA9IHRoaXMudmFsdWUkLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCh2YWx1ZSA9PiB2YWx1ZS5pdGVtcyQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGlzQnVzeSQgPSB0aGlzLnZhbHVlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gdmFsdWUuaXNCdXN5JCksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgaXNFbXB0eSQgPSB0aGlzLnZhbHVlJC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gdmFsdWUuaXNFbXB0eSQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgICNjdlN1YnMgPSBuZXcgTWFwPENvbGxlY3Rpb25WaWV3ZXIsIFN1YmplY3Q8dm9pZD4+KClcblxuICAgIG92ZXJyaWRlIGNvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IE9ic2VydmFibGU8cmVhZG9ubHkgKFQgfCB1bmRlZmluZWQpW10+IHtcbiAgICAgICAgY29uc3QgdW50aWwgPSBuZXcgU3ViamVjdDx2b2lkPigpXG5cbiAgICAgICAgdGhpcy4jY3ZTdWJzLmdldChjb2xsZWN0aW9uVmlld2VyKT8ubmV4dCgpXG4gICAgICAgIHRoaXMuI2N2U3Vicy5zZXQoY29sbGVjdGlvblZpZXdlciwgdW50aWwpXG5cbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUkLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAodmFsdWUgPT4gdmFsdWUuY29ubmVjdChjb2xsZWN0aW9uVmlld2VyKSksXG4gICAgICAgICAgICB0YWtlVW50aWwodW50aWwpLFxuICAgICAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIG92ZXJyaWRlIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xuICAgICAgICB0aGlzLiNjdlN1YnMuZ2V0KGNvbGxlY3Rpb25WaWV3ZXIpPy5uZXh0KClcbiAgICAgICAgdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKVxuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLiN2YWx1ZVN1Yj8udW5zdWJzY3JpYmUoKVxuICAgICAgICB0aGlzLiN2YWx1ZVN1YiA9IHVuZGVmaW5lZFxuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJbbnVEYXRhU291cmNlXVtmaWx0ZXJdXCJcbn0pXG5leHBvcnQgY2xhc3MgRGF0YVNvdXJjZVByb3h5RmlsdGVyPFQgZXh0ZW5kcyBNb2RlbCwgRiBleHRlbmRzIEZpbHRlcjxUPj4ge1xuICAgIHJlYWRvbmx5ICNwcm94eSA9IGluamVjdDxEYXRhU291cmNlUHJveHk8VD4+KERhdGFTb3VyY2VQcm94eSlcbiAgICByZWFkb25seSBmaWx0ZXIgPSBpbnB1dC5yZXF1aXJlZDxGPigpXG4gICAgcmVhZG9ubHkgZmlsdGVyJCA9IHRvT2JzZXJ2YWJsZSh0aGlzLmZpbHRlcilcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb21iaW5lTGF0ZXN0KHsgcXVlcnk6IHRoaXMuI3Byb3h5LnF1ZXJ5JCwgZmlsdGVyOiB0aGlzLmZpbHRlciQgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoeyBxdWVyeSwgZmlsdGVyIH0pID0+IHF1ZXJ5LmZpbHRlci5mb3JjZWQuc2V0KGZpbHRlcikpXG4gICAgfVxufVxuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiBcIltudURhdGFTb3VyY2VdW3NvcnRlcl1cIlxufSlcbmV4cG9ydCBjbGFzcyBEYXRhU291cmNlUHJveHlTb3J0ZXI8VCBleHRlbmRzIE1vZGVsLCBTIGV4dGVuZHMgU29ydGVyPFQ+PiB7XG4gICAgcmVhZG9ubHkgI3Byb3h5ID0gaW5qZWN0PERhdGFTb3VyY2VQcm94eTxUPj4oRGF0YVNvdXJjZVByb3h5KVxuICAgIHJlYWRvbmx5IHNvcnRlciA9IGlucHV0LnJlcXVpcmVkPFM+KClcbiAgICByZWFkb25seSBzb3J0ZXIkID0gdG9PYnNlcnZhYmxlKHRoaXMuc29ydGVyKVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoeyBxdWVyeTogdGhpcy4jcHJveHkucXVlcnkkLCBzb3J0ZXI6IHRoaXMuc29ydGVyJCB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IHF1ZXJ5LCBzb3J0ZXIgfSkgPT4gcXVlcnkuc29ydGVyLmZvcmNlZC5zZXQoc29ydGVyKSlcbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6IFwiW251RGF0YVNvdXJjZV1bc2xpbWVyXVwiXG59KVxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2VQcm94eVNsaW1lcjxUIGV4dGVuZHMgTW9kZWwsIFMgZXh0ZW5kcyBTbGltZXI8VD4+IHtcbiAgICByZWFkb25seSAjcHJveHkgPSBpbmplY3Q8RGF0YVNvdXJjZVByb3h5PFQ+PihEYXRhU291cmNlUHJveHkpXG4gICAgcmVhZG9ubHkgc2xpbWVyID0gaW5wdXQucmVxdWlyZWQ8Uz4oKVxuICAgIHJlYWRvbmx5IHNsaW1lciQgPSB0b09ic2VydmFibGUodGhpcy5zbGltZXIpXG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgY29tYmluZUxhdGVzdCh7IHF1ZXJ5OiB0aGlzLiNwcm94eS5xdWVyeSQsIHNsaW1lcjogdGhpcy5zbGltZXIkIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQoKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHsgcXVlcnksIHNsaW1lciB9KSA9PiBxdWVyeS5zbGltZXIuZm9yY2VkLnNldChzbGltZXIpKVxuICAgIH1cbn1cblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJbbnVEYXRhU291cmNlXVtncm91cGVyXVwiXG59KVxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2VQcm94eUdyb3VwZXI8VCBleHRlbmRzIE1vZGVsLCBHIGV4dGVuZHMgR3JvdXBlcjxUPj4ge1xuICAgIHJlYWRvbmx5ICNwcm94eSA9IGluamVjdDxEYXRhU291cmNlUHJveHk8VD4+KERhdGFTb3VyY2VQcm94eSlcbiAgICByZWFkb25seSBncm91cGVyID0gaW5wdXQucmVxdWlyZWQ8Rz4oKVxuICAgIHJlYWRvbmx5IGdyb3VwZXIkID0gdG9PYnNlcnZhYmxlKHRoaXMuZ3JvdXBlcilcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb21iaW5lTGF0ZXN0KHsgcXVlcnk6IHRoaXMuI3Byb3h5LnF1ZXJ5JCwgZ3JvdXBlcjogdGhpcy5ncm91cGVyJCB9KVxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCh7IHF1ZXJ5LCBncm91cGVyIH0pID0+IHF1ZXJ5Lmdyb3VwZXIuZm9yY2VkLnNldChncm91cGVyKSlcbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6IFwiW251RGF0YVNvdXJjZV1bbnVCdXN5XVwiXG59KVxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2VQcm94eUJ1c3kge1xuICAgIHJlYWRvbmx5ICNwcm94eSA9IGluamVjdDxEYXRhU291cmNlUHJveHk8YW55Pj4oRGF0YVNvdXJjZVByb3h5KVxuICAgIHJlYWRvbmx5ICNidXN5ID0gaW5qZWN0PEJ1c3k8YW55Pj4oQnVzeSlcblxuICAgIHJlYWRvbmx5IGlzQnVzeSQgPSB0aGlzLiNwcm94eS52YWx1ZSQucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHZhbHVlID0+IHZhbHVlLmlzQnVzeSQpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLiNidXN5LmNvbm5lY3QodGhpcy5pc0J1c3kkKS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUoKVxuICAgIH1cbn1cblxuZnVuY3Rpb24gY29lcmNlRGF0YVNvdXJjZTxUIGV4dGVuZHMgTW9kZWw+KHZhbHVlOiBEYXRhU291cmNlUHJveHlJbnB1dDxUPik6IE9ic2VydmFibGU8RGF0YVNvdXJjZTxUPj4ge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFTb3VyY2VQcm94eSkge1xuICAgICAgICByZXR1cm4gdmFsdWUudmFsdWUkXG4gICAgfSBlbHNlIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGFTb3VyY2UpIHtcbiAgICAgICAgcmV0dXJuIG9mKHZhbHVlKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRhUHJvdmlkZXIpIHtcbiAgICAgICAgcmV0dXJuIG9mKHZhbHVlLnRvRGF0YVNvdXJjZSgpKVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihcIkludmFsaWQgRGF0YVNvdXJjZSB2YWx1ZVwiKSlcbiAgICB9XG59XG4iXX0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DataSource as CdkDataSource } from "@angular/cdk/collections";
|
|
2
2
|
import { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, finalize, map, Observable, of, ReplaySubject, shareReplay, Subject, switchMap, take, takeUntil, tap } from "rxjs";
|
|
3
3
|
import { isEqual } from "lodash";
|
|
4
|
-
import { deepClone, deepFreeze } from "@ngutil/common";
|
|
4
|
+
import { deepClone, deepFreeze, isTruthy } from "@ngutil/common";
|
|
5
5
|
import { querySubject } from "../query";
|
|
6
6
|
import { MemoryStore } from "../store";
|
|
7
7
|
const DEBOUNCE_TIME = 50;
|
|
@@ -14,7 +14,7 @@ export class DataSource extends CdkDataSource {
|
|
|
14
14
|
this.provider = provider;
|
|
15
15
|
this.store = store;
|
|
16
16
|
this.query$ = query$;
|
|
17
|
-
this.
|
|
17
|
+
this.isBusy$ = new BehaviorSubject(false);
|
|
18
18
|
this.total$ = new BehaviorSubject(undefined);
|
|
19
19
|
this.#slice = new ReplaySubject(1);
|
|
20
20
|
this.slice$ = this.#slice.pipe(switchMap(slice => this.provider.clampSlice(slice)), distinctUntilChanged(isEqual), map(slice => deepFreeze(deepClone(slice))), shareReplay(1));
|
|
@@ -43,6 +43,7 @@ export class DataSource extends CdkDataSource {
|
|
|
43
43
|
}), take(1));
|
|
44
44
|
}
|
|
45
45
|
}))), finalize(() => this.#setBusy(false)), shareReplay(1));
|
|
46
|
+
this.isEmpty$ = combineLatest({ busy: this.isBusy$, items: this.items$ }).pipe(map(({ busy, items }) => !busy && items?.some(isTruthy)), shareReplay(1));
|
|
46
47
|
this.#cvSubs = new Map();
|
|
47
48
|
}
|
|
48
49
|
setSlice(slice) {
|
|
@@ -78,8 +79,8 @@ export class DataSource extends CdkDataSource {
|
|
|
78
79
|
}
|
|
79
80
|
#setBusy(busy) {
|
|
80
81
|
if (this.provider.isAsync) {
|
|
81
|
-
if (this.
|
|
82
|
-
this.
|
|
82
|
+
if (this.isBusy$.value !== busy) {
|
|
83
|
+
this.isBusy$.next(busy);
|
|
83
84
|
}
|
|
84
85
|
}
|
|
85
86
|
}
|
|
@@ -105,4 +106,4 @@ export class DataSource extends CdkDataSource {
|
|
|
105
106
|
this.#cvSubs.delete(collectionViewer);
|
|
106
107
|
}
|
|
107
108
|
}
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxJQUFJLGFBQWEsRUFBb0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUV4RixPQUFPLEVBQ0gsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLFFBQVEsRUFDUixHQUFHLEVBQ0gsVUFBVSxFQUNWLEVBQUUsRUFDRixhQUFhLEVBQ2IsV0FBVyxFQUNYLE9BQU8sRUFFUCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEVBQ04sTUFBTSxNQUFNLENBQUE7QUFFYixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRWhDLE9BQU8sRUFBbUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBS3ZFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDdkMsT0FBTyxFQUF3QixXQUFXLEVBQTBCLE1BQU0sVUFBVSxDQUFBO0FBRXBGLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQTtBQUV4QixNQUFNLE9BQU8sVUFBNEIsU0FBUSxhQUE0QjtJQUloRSxNQUFNLENBQThCO0lBUXBDLE9BQU8sQ0FBdUM7SUFFOUMsTUFBTSxDQWlCZDtJQThCRCxZQUNvQixRQUF5QixFQUN6QixRQUE0QixJQUFJLFdBQVcsRUFBRSxFQUM3QyxTQUFTLFlBQVksQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDO1FBRXpELEtBQUssRUFBRSxDQUFBO1FBSlMsYUFBUSxHQUFSLFFBQVEsQ0FBaUI7UUFDekIsVUFBSyxHQUFMLEtBQUssQ0FBd0M7UUFDN0MsV0FBTSxHQUFOLE1BQU0sQ0FBbUM7UUEvRHBELFVBQUssR0FBRyxJQUFJLGVBQWUsQ0FBVSxLQUFLLENBQUMsQ0FBQTtR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LENBQUMsVUFBa0QsRUFBRSxFQUFFO1lBQ3pFLE1BQU0sSUFBSSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQy9ELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBRTlDLE9BQU8sR0FBRyxFQUFFO2dCQUNSLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQztvQkFDL0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtnQkFDekMsQ0FBQztnQkFDRCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7Z0JBQ2xCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQTtZQUN0QixDQUFDLENBQUE7UUFDTCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDN0IsQ0FBQztJQUVRLFVBQVUsQ0FBQyxnQkFBa0M7UUFDbEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQTtRQUMxQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGFTb3VyY2UgYXMgQ2RrRGF0YVNvdXJjZSwgQ29sbGVjdGlvblZpZXdlciB9IGZyb20gXCJAYW5ndWxhci9jZGsvY29sbGVjdGlvbnNcIlxuXG5pbXBvcnQge1xuICAgIEJlaGF2aW9yU3ViamVjdCxcbiAgICBjb21iaW5lTGF0ZXN0LFxuICAgIGRlYm91bmNlVGltZSxcbiAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgICBmaW5hbGl6ZSxcbiAgICBtYXAsXG4gICAgT2JzZXJ2YWJsZSxcbiAgICBvZixcbiAgICBSZXBsYXlTdWJqZWN0LFxuICAgIHNoYXJlUmVwbGF5LFxuICAgIFN1YmplY3QsXG4gICAgU3Vic2NyaWJlcixcbiAgICBzd2l0Y2hNYXAsXG4gICAgdGFrZSxcbiAgICB0YWtlVW50aWwsXG4gICAgdGFwXG59IGZyb20gXCJyeGpzXCJcblxuaW1wb3J0IHsgaXNFcXVhbCB9IGZyb20gXCJsb2Rhc2hcIlxuXG5pbXBvcnQgeyBDb25uZWN0UHJvdG9jb2wsIGRlZXBDbG9uZSwgZGVlcEZyZWV6ZSB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmltcG9ydCB0eXBlIHsgTW9kZWwsIE1vZGVsUmVmIH0gZnJvbSBcIi4uL21vZGVsXCJcbmltcG9ydCB0eXBlIHsgRGF0YVByb3ZpZGVyIH0gZnJvbSBcIi4uL3Byb3ZpZGVyL3Byb3ZpZGVyXCJcbmltcG9ydCB0eXBlIHsgUXVlcnlXaXRoU2xpY2UsIFNsaWNlIH0gZnJvbSBcIi4uL3F1ZXJ5XCJcbmltcG9ydCB7IHF1ZXJ5U3ViamVjdCB9IGZyb20gXCIuLi9xdWVyeVwiXG5pbXBvcnQgeyB0eXBlIENvbGxlY3Rpb25TdG9yZSwgTWVtb3J5U3RvcmUsIHR5cGUgUGFydGlhbENvbGxlY3Rpb24gfSBmcm9tIFwiLi4vc3RvcmVcIlxuXG5jb25zdCBERUJPVU5DRV9USU1FID0gNTBcblxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2U8VCBleHRlbmRzIE1vZGVsPiBleHRlbmRzIENka0RhdGFTb3VyY2U8VCB8IHVuZGVmaW5lZD4gaW1wbGVtZW50cyBDb25uZWN0UHJvdG9jb2wge1xuICAgIHJlYWRvbmx5IGJ1c3kkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSlcbiAgICByZWFkb25seSB0b3RhbCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKVxuXG4gICAgcmVhZG9ubHkgI3NsaWNlID0gbmV3IFJlcGxheVN1YmplY3Q8U2xpY2U+KDEpXG4gICAgcmVhZG9ubHkgc2xpY2UkOiBPYnNlcnZhYmxlPFNsaWNlPiA9IHRoaXMuI3NsaWNlLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcChzbGljZSA9PiB0aGlzLnByb3ZpZGVyLmNsYW1wU2xpY2Uoc2xpY2UpKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoaXNFcXVhbCksXG4gICAgICAgIG1hcChzbGljZSA9PiBkZWVwRnJlZXplKGRlZXBDbG9uZShzbGljZSkpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApXG5cbiAgICByZWFkb25seSAjcmVsb2FkID0gbmV3IEJlaGF2aW9yU3ViamVjdDx2b2lkPih1bmRlZmluZWQpXG5cbiAgICByZWFkb25seSAjcXVlcnk6IE9ic2VydmFibGU8UXVlcnlXaXRoU2xpY2U8VD4+ID0gY29tYmluZUxhdGVzdCh7XG4gICAgICAgIHF1ZXJ5OiB0aGlzLnF1ZXJ5JCxcbiAgICAgICAgcmVsb2FkOiB0aGlzLiNyZWxvYWRcbiAgICB9KS5waXBlKFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy4jc2V0QnVzeSh0cnVlKSksXG4gICAgICAgIC8vIFRPRE86IG1heWJlIHNpbGVudCByZXNldCBvciBwcmV2ZW50IGl0ZW1zJCBjaGVuZ2VzXG4gICAgICAgIC8vIFRPRE86IGFsdGVybmF0aXZlIHNvbHV0aW9uIHVzZSBjYWNoZUlkLCBhbmQgcXVlcnkgaXRlbSBmcm9tIHN0b3JlIHdpdGggdGhpcyBjYWNoZUlkXG4gICAgICAgIHN3aXRjaE1hcCgoeyBxdWVyeSB9KSA9PiB0aGlzLnN0b3JlLmNsZWFyKCkucGlwZShtYXAoKCkgPT4gcXVlcnkpKSksXG4gICAgICAgIHN3aXRjaE1hcChxdWVyeSA9PlxuICAgICAgICAgICAgdGhpcy5zbGljZSQucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy4jc2V0QnVzeSh0cnVlKSksXG4gICAgICAgICAgICAgICAgbWFwKHNsaWNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgLi4ucXVlcnksIHNsaWNlIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGl0ZW1zJDogT2JzZXJ2YWJsZTxQYXJ0aWFsQ29sbGVjdGlvbjxUPj4gPSB0aGlzLiNxdWVyeS5waXBlKFxuICAgICAgICB0YXAoKCkgPT4gdGhpcy4jc2V0QnVzeSh0cnVlKSksXG4gICAgICAgIGRlYm91bmNlVGltZShERUJPVU5DRV9USU1FKSxcbiAgICAgICAgLy8gdGFwKHF1ZXJ5ID0+IGNvbnNvbGUubG9nKHF1ZXJ5KSksXG4gICAgICAgIHN3aXRjaE1hcChxdWVyeSA9PlxuICAgICAgICAgICAgdGhpcy5zdG9yZS5oYXNTbGljZShxdWVyeS5zbGljZSkucGlwZShcbiAgICAgICAgICAgICAgICB0YWtlKDEpLFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcChoYXNTbGljZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNTbGljZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuZ2V0U2xpY2UocXVlcnkuc2xpY2UpLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVyLnF1ZXJ5TGlzdChxdWVyeSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC50b3RhbCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvdGFsJC5uZXh0KHJlc3VsdC50b3RhbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5pbnNlcnRTbGljZShxdWVyeS5zbGljZSwgcmVzdWx0Lml0ZW1zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRha2UoMSlcbiAgICAgICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuI3NldEJ1c3koZmFsc2UpKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApXG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHByb3ZpZGVyOiBEYXRhUHJvdmlkZXI8VD4sXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBzdG9yZTogQ29sbGVjdGlvblN0b3JlPFQ+ID0gbmV3IE1lbW9yeVN0b3JlKCksXG4gICAgICAgIHB1YmxpYyByZWFkb25seSBxdWVyeSQgPSBxdWVyeVN1YmplY3QoXCJub3JtYWxcIiwgXCJmb3JjZWRcIilcbiAgICApIHtcbiAgICAgICAgc3VwZXIoKVxuICAgIH1cblxuICAgIHNldFNsaWNlKHNsaWNlOiBTbGljZSkge1xuICAgICAgICB0aGlzLiNzbGljZS5uZXh0KHNsaWNlKVxuICAgICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGFsbCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0U2xpY2UoeyBzdGFydDogMCwgZW5kOiBJbmZpbml0eSB9KVxuICAgIH1cblxuICAgIHJlYWxvZCgpIHtcbiAgICAgICAgdGhpcy4jcmVsb2FkLm5leHQoKVxuICAgIH1cblxuICAgIGdldEl0ZW0ocmVmOiBNb2RlbFJlZik6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy53YXRjaEl0ZW0ocmVmKS5waXBlKHRha2UoMSkpXG4gICAgfVxuXG4gICAgd2F0Y2hJdGVtKHJlZjogTW9kZWxSZWYpOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVmbiA9IHRoaXMucHJvdmlkZXIubWV0YS5ub3JtYWxpemVSZWYocmVmKVxuICAgICAgICByZXR1cm4gdGhpcy4jc3RvcmVGaXJzdChcbiAgICAgICAgICAgIHF1ZXJ5ID0+IHRoaXMuc3RvcmUuZ2V0KHJlZm4pLFxuICAgICAgICAgICAgcXVlcnkgPT4gdGhpcy5wcm92aWRlci5xdWVyeUl0ZW0ocmVmbiwgcXVlcnkpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBnZXRJdGVtUG9zaXRpb24ocmVmOiBNb2RlbFJlZik6IE9ic2VydmFibGU8bnVtYmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLndhdGNoSXRlbVBvc2l0aW9uKHJlZikucGlwZSh0YWtlKDEpKVxuICAgIH1cblxuICAgIHdhdGNoSXRlbVBvc2l0aW9uKHJlZjogTW9kZWxSZWYpOiBPYnNlcnZhYmxlPG51bWJlciB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZWZuID0gdGhpcy5wcm92aWRlci5tZXRhLm5vcm1hbGl6ZVJlZihyZWYpXG4gICAgICAgIHJldHVybiB0aGlzLiNzdG9yZUZpcnN0KFxuICAgICAgICAgICAgcXVlcnkgPT4gdGhpcy5zdG9yZS5pbmRleE9mKHJlZm4pLnBpcGUobWFwKGkgPT4gKGkgPCAwID8gdW5kZWZpbmVkIDogaSkpKSxcbiAgICAgICAgICAgIHF1ZXJ5ID0+IHRoaXMucHJvdmlkZXIucXVlcnlQb3NpdGlvbihyZWZuLCBxdWVyeSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIHJlYWxvZEl0ZW0ocmVmOiBNb2RlbFJlZiwgaW5zZXJ0UG9zaXRpb24/OiBudW1iZXIpOiBPYnNlcnZhYmxlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgY29uc3QgcmVmbiA9IHRoaXMucHJvdmlkZXIubWV0YS5ub3JtYWxpemVSZWYocmVmKVxuICAgICAgICByZXR1cm4gdGhpcy4jcXVlcnkucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAocXVlcnkgPT4gdGhpcy5wcm92aWRlci5xdWVyeUl0ZW0ocmVmbiwgcXVlcnkpLnBpcGUodGFrZSgxKSkpLFxuICAgICAgICAgICAgc3dpdGNoTWFwKGl0ZW0gPT5cbiAgICAgICAgICAgICAgICBpdGVtICE9IG51bGwgPyB0aGlzLnN0b3JlLnVwZGF0ZU9ySW5zZXJ0KHJlZm4sIGl0ZW0sIGluc2VydFBvc2l0aW9uKS5waXBlKG1hcCgoKSA9PiBpdGVtKSkgOiBvZihpdGVtKVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgI3N0b3JlRmlyc3Q8WD4oXG4gICAgICAgIHN0b3JlRm46IChxdWVyeTogUXVlcnlXaXRoU2xpY2U8VD4pID0+IE9ic2VydmFibGU8WD4sXG4gICAgICAgIHNlbGZGbjogKHF1ZXJ5OiBRdWVyeVdpdGhTbGljZTxUPikgPT4gT2JzZXJ2YWJsZTxYPlxuICAgICk6IE9ic2VydmFibGU8WD4ge1xuICAgICAgICByZXR1cm4gdGhpcy4jcXVlcnkucGlwZShcbiAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAocXVlcnkgPT4gc3RvcmVGbihxdWVyeSkucGlwZShzd2l0Y2hNYXAocmVzdWx0ID0+IChyZXN1bHQgPT0gbnVsbCA/IHNlbGZGbihxdWVyeSkgOiBvZihyZXN1bHQpKSkpKVxuICAgICAgICApXG4gICAgfVxuXG4gICAgI3NldEJ1c3koYnVzeTogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5wcm92aWRlci5pc0FzeW5jKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5idXN5JC52YWx1ZSAhPT0gYnVzeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYnVzeSQubmV4dChidXN5KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgI2N2U3VicyA9IG5ldyBNYXA8Q29sbGVjdGlvblZpZXdlciwgU3ViamVjdDx2b2lkPj4oKVxuXG4gICAgb3ZlcnJpZGUgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxyZWFkb25seSAoVCB8IHVuZGVmaW5lZClbXT4ge1xuICAgICAgICBjb25zdCB1bnRpbCA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICAgICAgICB0aGlzLiNjdlN1YnMuZ2V0KGNvbGxlY3Rpb25WaWV3ZXIpPy5uZXh0KClcbiAgICAgICAgdGhpcy4jY3ZTdWJzLnNldChjb2xsZWN0aW9uVmlld2VyLCB1bnRpbClcblxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXI6IFN1YnNjcmliZXI8cmVhZG9ubHkgKFQgfCB1bmRlZmluZWQpW10+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWIxID0gY29sbGVjdGlvblZpZXdlci52aWV3Q2hhbmdlLnN1YnNjcmliZSh0aGlzLiNzbGljZSlcbiAgICAgICAgICAgIGNvbnN0IHN1YjIgPSB0aGlzLml0ZW1zJC5zdWJzY3JpYmUoc3Vic2NyaWJlcilcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jY3ZTdWJzLmdldChjb2xsZWN0aW9uVmlld2VyKSA9PT0gdW50aWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWIxLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICAgICAgICBzdWIyLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkucGlwZSh0YWtlVW50aWwodW50aWwpKVxuICAgIH1cblxuICAgIG92ZXJyaWRlIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xuICAgICAgICB0aGlzLiNjdlN1YnMuZ2V0KGNvbGxlY3Rpb25WaWV3ZXIpPy5uZXh0KClcbiAgICAgICAgdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKVxuICAgIH1cbn1cbiJdfQ==
|
|
109
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291cmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvZGF0YS9zcmMvc291cmNlL3NvdXJjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxJQUFJLGFBQWEsRUFBb0IsTUFBTSwwQkFBMEIsQ0FBQTtBQUV4RixPQUFPLEVBQ0gsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osb0JBQW9CLEVBQ3BCLFFBQVEsRUFDUixHQUFHLEVBQ0gsVUFBVSxFQUNWLEVBQUUsRUFDRixhQUFhLEVBQ2IsV0FBVyxFQUNYLE9BQU8sRUFFUCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFNBQVMsRUFDVCxHQUFHLEVBQ04sTUFBTSxNQUFNLENBQUE7QUFFYixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFBO0FBRWhDLE9BQU8sRUFBbUIsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUtqRixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ3ZDLE9BQU8sRUFBd0IsV0FBVyxFQUEwQixNQUFNLFVBQVUsQ0FBQTtBQUVwRixNQUFNLGFBQWEsR0FBRyxFQUFFLENBQUE7QUFFeEIsTUFBTSxPQUFPLFVBQTRCLFNBQVEsYUFBNEI7SUFJaEUsTUFBTSxDQUE4QjtJQVFwQyxPQUFPLENBQXVDO0lBRTlDLE1BQU0sQ0FpQmQ7SUFtQ0QsWUFDb0IsUUFBeUIsRUFDekIsUUFBNEIsSUFBSSxXQUFXLEVBQUUsRUFDN0MsU0FBUyxZQUFZLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQztRQUV6RCxLQUFLLEVBQUUsQ0FBQTtRQUpTLGFBQVEsR0FBUixRQUFRLENBQWlCO1FBQ3pCLFVBQUssR0FBTCxLQUFLLENBQXdDO1FBQzdDLFdBQU0sR0FBTixNQUFNLENBQW1DO1FBcEVwRCxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQVUsS0FBSyxD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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0YVNvdXJjZSBhcyBDZGtEYXRhU291cmNlLCBDb2xsZWN0aW9uVmlld2VyIH0gZnJvbSBcIkBhbmd1bGFyL2Nkay9jb2xsZWN0aW9uc1wiXG5cbmltcG9ydCB7XG4gICAgQmVoYXZpb3JTdWJqZWN0LFxuICAgIGNvbWJpbmVMYXRlc3QsXG4gICAgZGVib3VuY2VUaW1lLFxuICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkLFxuICAgIGZpbmFsaXplLFxuICAgIG1hcCxcbiAgICBPYnNlcnZhYmxlLFxuICAgIG9mLFxuICAgIFJlcGxheVN1YmplY3QsXG4gICAgc2hhcmVSZXBsYXksXG4gICAgU3ViamVjdCxcbiAgICBTdWJzY3JpYmVyLFxuICAgIHN3aXRjaE1hcCxcbiAgICB0YWtlLFxuICAgIHRha2VVbnRpbCxcbiAgICB0YXBcbn0gZnJvbSBcInJ4anNcIlxuXG5pbXBvcnQgeyBpc0VxdWFsIH0gZnJvbSBcImxvZGFzaFwiXG5cbmltcG9ydCB7IENvbm5lY3RQcm90b2NvbCwgZGVlcENsb25lLCBkZWVwRnJlZXplLCBpc1RydXRoeSB9IGZyb20gXCJAbmd1dGlsL2NvbW1vblwiXG5cbmltcG9ydCB0eXBlIHsgTW9kZWwsIE1vZGVsUmVmIH0gZnJvbSBcIi4uL21vZGVsXCJcbmltcG9ydCB0eXBlIHsgRGF0YVByb3ZpZGVyIH0gZnJvbSBcIi4uL3Byb3ZpZGVyL3Byb3ZpZGVyXCJcbmltcG9ydCB0eXBlIHsgUXVlcnlXaXRoU2xpY2UsIFNsaWNlIH0gZnJvbSBcIi4uL3F1ZXJ5XCJcbmltcG9ydCB7IHF1ZXJ5U3ViamVjdCB9IGZyb20gXCIuLi9xdWVyeVwiXG5pbXBvcnQgeyB0eXBlIENvbGxlY3Rpb25TdG9yZSwgTWVtb3J5U3RvcmUsIHR5cGUgUGFydGlhbENvbGxlY3Rpb24gfSBmcm9tIFwiLi4vc3RvcmVcIlxuXG5jb25zdCBERUJPVU5DRV9USU1FID0gNTBcblxuZXhwb3J0IGNsYXNzIERhdGFTb3VyY2U8VCBleHRlbmRzIE1vZGVsPiBleHRlbmRzIENka0RhdGFTb3VyY2U8VCB8IHVuZGVmaW5lZD4gaW1wbGVtZW50cyBDb25uZWN0UHJvdG9jb2wge1xuICAgIHJlYWRvbmx5IGlzQnVzeSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKVxuICAgIHJlYWRvbmx5IHRvdGFsJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpXG5cbiAgICByZWFkb25seSAjc2xpY2UgPSBuZXcgUmVwbGF5U3ViamVjdDxTbGljZT4oMSlcbiAgICByZWFkb25seSBzbGljZSQ6IE9ic2VydmFibGU8U2xpY2U+ID0gdGhpcy4jc2xpY2UucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKHNsaWNlID0+IHRoaXMucHJvdmlkZXIuY2xhbXBTbGljZShzbGljZSkpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZChpc0VxdWFsKSxcbiAgICAgICAgbWFwKHNsaWNlID0+IGRlZXBGcmVlemUoZGVlcENsb25lKHNsaWNlKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5ICNyZWxvYWQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHZvaWQ+KHVuZGVmaW5lZClcblxuICAgIHJlYWRvbmx5ICNxdWVyeTogT2JzZXJ2YWJsZTxRdWVyeVdpdGhTbGljZTxUPj4gPSBjb21iaW5lTGF0ZXN0KHtcbiAgICAgICAgcXVlcnk6IHRoaXMucXVlcnkkLFxuICAgICAgICByZWxvYWQ6IHRoaXMuI3JlbG9hZFxuICAgIH0pLnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLiNzZXRCdXN5KHRydWUpKSxcbiAgICAgICAgLy8gVE9ETzogbWF5YmUgc2lsZW50IHJlc2V0IG9yIHByZXZlbnQgaXRlbXMkIGNoZW5nZXNcbiAgICAgICAgLy8gVE9ETzogYWx0ZXJuYXRpdmUgc29sdXRpb24gdXNlIGNhY2hlSWQsIGFuZCBxdWVyeSBpdGVtIGZyb20gc3RvcmUgd2l0aCB0aGlzIGNhY2hlSWRcbiAgICAgICAgc3dpdGNoTWFwKCh7IHF1ZXJ5IH0pID0+IHRoaXMuc3RvcmUuY2xlYXIoKS5waXBlKG1hcCgoKSA9PiBxdWVyeSkpKSxcbiAgICAgICAgc3dpdGNoTWFwKHF1ZXJ5ID0+XG4gICAgICAgICAgICB0aGlzLnNsaWNlJC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLiNzZXRCdXN5KHRydWUpKSxcbiAgICAgICAgICAgICAgICBtYXAoc2xpY2UgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyAuLi5xdWVyeSwgc2xpY2UgfVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuXG4gICAgcmVhZG9ubHkgaXRlbXMkOiBPYnNlcnZhYmxlPFBhcnRpYWxDb2xsZWN0aW9uPFQ+PiA9IHRoaXMuI3F1ZXJ5LnBpcGUoXG4gICAgICAgIHRhcCgoKSA9PiB0aGlzLiNzZXRCdXN5KHRydWUpKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKERFQk9VTkNFX1RJTUUpLFxuICAgICAgICAvLyB0YXAocXVlcnkgPT4gY29uc29sZS5sb2cocXVlcnkpKSxcbiAgICAgICAgc3dpdGNoTWFwKHF1ZXJ5ID0+XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmhhc1NsaWNlKHF1ZXJ5LnNsaWNlKS5waXBlKFxuICAgICAgICAgICAgICAgIHRha2UoMSksXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKGhhc1NsaWNlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1NsaWNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5nZXRTbGljZShxdWVyeS5zbGljZSkucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvdmlkZXIucXVlcnlMaXN0KHF1ZXJ5KS5waXBlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcChyZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnRvdGFsICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG90YWwkLm5leHQocmVzdWx0LnRvdGFsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0b3JlLmluc2VydFNsaWNlKHF1ZXJ5LnNsaWNlLCByZXN1bHQuaXRlbXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZSgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy4jc2V0QnVzeShmYWxzZSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGlzRW1wdHkkID0gY29tYmluZUxhdGVzdCh7IGJ1c3k6IHRoaXMuaXNCdXN5JCwgaXRlbXM6IHRoaXMuaXRlbXMkIH0pLnBpcGUoXG4gICAgICAgIG1hcCgoeyBidXN5LCBpdGVtcyB9KSA9PiAhYnVzeSAmJiBpdGVtcz8uc29tZShpc1RydXRoeSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgcmVhZG9ubHkgcHJvdmlkZXI6IERhdGFQcm92aWRlcjxUPixcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHN0b3JlOiBDb2xsZWN0aW9uU3RvcmU8VD4gPSBuZXcgTWVtb3J5U3RvcmUoKSxcbiAgICAgICAgcHVibGljIHJlYWRvbmx5IHF1ZXJ5JCA9IHF1ZXJ5U3ViamVjdChcIm5vcm1hbFwiLCBcImZvcmNlZFwiKVxuICAgICkge1xuICAgICAgICBzdXBlcigpXG4gICAgfVxuXG4gICAgc2V0U2xpY2Uoc2xpY2U6IFNsaWNlKSB7XG4gICAgICAgIHRoaXMuI3NsaWNlLm5leHQoc2xpY2UpXG4gICAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgYWxsKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRTbGljZSh7IHN0YXJ0OiAwLCBlbmQ6IEluZmluaXR5IH0pXG4gICAgfVxuXG4gICAgcmVhbG9kKCkge1xuICAgICAgICB0aGlzLiNyZWxvYWQubmV4dCgpXG4gICAgfVxuXG4gICAgZ2V0SXRlbShyZWY6IE1vZGVsUmVmKTogT2JzZXJ2YWJsZTxUIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIHJldHVybiB0aGlzLndhdGNoSXRlbShyZWYpLnBpcGUodGFrZSgxKSlcbiAgICB9XG5cbiAgICB3YXRjaEl0ZW0ocmVmOiBNb2RlbFJlZik6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZWZuID0gdGhpcy5wcm92aWRlci5tZXRhLm5vcm1hbGl6ZVJlZihyZWYpXG4gICAgICAgIHJldHVybiB0aGlzLiNzdG9yZUZpcnN0KFxuICAgICAgICAgICAgcXVlcnkgPT4gdGhpcy5zdG9yZS5nZXQocmVmbiksXG4gICAgICAgICAgICBxdWVyeSA9PiB0aGlzLnByb3ZpZGVyLnF1ZXJ5SXRlbShyZWZuLCBxdWVyeSlcbiAgICAgICAgKVxuICAgIH1cblxuICAgIGdldEl0ZW1Qb3NpdGlvbihyZWY6IE1vZGVsUmVmKTogT2JzZXJ2YWJsZTxudW1iZXIgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMud2F0Y2hJdGVtUG9zaXRpb24ocmVmKS5waXBlKHRha2UoMSkpXG4gICAgfVxuXG4gICAgd2F0Y2hJdGVtUG9zaXRpb24ocmVmOiBNb2RlbFJlZik6IE9ic2VydmFibGU8bnVtYmVyIHwgdW5kZWZpbmVkPiB7XG4gICAgICAgIGNvbnN0IHJlZm4gPSB0aGlzLnByb3ZpZGVyLm1ldGEubm9ybWFsaXplUmVmKHJlZilcbiAgICAgICAgcmV0dXJuIHRoaXMuI3N0b3JlRmlyc3QoXG4gICAgICAgICAgICBxdWVyeSA9PiB0aGlzLnN0b3JlLmluZGV4T2YocmVmbikucGlwZShtYXAoaSA9PiAoaSA8IDAgPyB1bmRlZmluZWQgOiBpKSkpLFxuICAgICAgICAgICAgcXVlcnkgPT4gdGhpcy5wcm92aWRlci5xdWVyeVBvc2l0aW9uKHJlZm4sIHF1ZXJ5KVxuICAgICAgICApXG4gICAgfVxuXG4gICAgcmVhbG9kSXRlbShyZWY6IE1vZGVsUmVmLCBpbnNlcnRQb3NpdGlvbj86IG51bWJlcik6IE9ic2VydmFibGU8VCB8IHVuZGVmaW5lZD4ge1xuICAgICAgICBjb25zdCByZWZuID0gdGhpcy5wcm92aWRlci5tZXRhLm5vcm1hbGl6ZVJlZihyZWYpXG4gICAgICAgIHJldHVybiB0aGlzLiNxdWVyeS5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcChxdWVyeSA9PiB0aGlzLnByb3ZpZGVyLnF1ZXJ5SXRlbShyZWZuLCBxdWVyeSkucGlwZSh0YWtlKDEpKSksXG4gICAgICAgICAgICBzd2l0Y2hNYXAoaXRlbSA9PlxuICAgICAgICAgICAgICAgIGl0ZW0gIT0gbnVsbCA/IHRoaXMuc3RvcmUudXBkYXRlT3JJbnNlcnQocmVmbiwgaXRlbSwgaW5zZXJ0UG9zaXRpb24pLnBpcGUobWFwKCgpID0+IGl0ZW0pKSA6IG9mKGl0ZW0pXG4gICAgICAgICAgICApXG4gICAgICAgIClcbiAgICB9XG5cbiAgICAjc3RvcmVGaXJzdDxYPihcbiAgICAgICAgc3RvcmVGbjogKHF1ZXJ5OiBRdWVyeVdpdGhTbGljZTxUPikgPT4gT2JzZXJ2YWJsZTxYPixcbiAgICAgICAgc2VsZkZuOiAocXVlcnk6IFF1ZXJ5V2l0aFNsaWNlPFQ+KSA9PiBPYnNlcnZhYmxlPFg+XG4gICAgKTogT2JzZXJ2YWJsZTxYPiB7XG4gICAgICAgIHJldHVybiB0aGlzLiNxdWVyeS5waXBlKFxuICAgICAgICAgICAgdGFrZSgxKSxcbiAgICAgICAgICAgIHN3aXRjaE1hcChxdWVyeSA9PiBzdG9yZUZuKHF1ZXJ5KS5waXBlKHN3aXRjaE1hcChyZXN1bHQgPT4gKHJlc3VsdCA9PSBudWxsID8gc2VsZkZuKHF1ZXJ5KSA6IG9mKHJlc3VsdCkpKSkpXG4gICAgICAgIClcbiAgICB9XG5cbiAgICAjc2V0QnVzeShidXN5OiBib29sZWFuKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3ZpZGVyLmlzQXN5bmMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzQnVzeSQudmFsdWUgIT09IGJ1c3kpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQnVzeSQubmV4dChidXN5KVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgI2N2U3VicyA9IG5ldyBNYXA8Q29sbGVjdGlvblZpZXdlciwgU3ViamVjdDx2b2lkPj4oKVxuXG4gICAgb3ZlcnJpZGUgY29ubmVjdChjb2xsZWN0aW9uVmlld2VyOiBDb2xsZWN0aW9uVmlld2VyKTogT2JzZXJ2YWJsZTxyZWFkb25seSAoVCB8IHVuZGVmaW5lZClbXT4ge1xuICAgICAgICBjb25zdCB1bnRpbCA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICAgICAgICB0aGlzLiNjdlN1YnMuZ2V0KGNvbGxlY3Rpb25WaWV3ZXIpPy5uZXh0KClcbiAgICAgICAgdGhpcy4jY3ZTdWJzLnNldChjb2xsZWN0aW9uVmlld2VyLCB1bnRpbClcblxuICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKHN1YnNjcmliZXI6IFN1YnNjcmliZXI8cmVhZG9ubHkgKFQgfCB1bmRlZmluZWQpW10+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWIxID0gY29sbGVjdGlvblZpZXdlci52aWV3Q2hhbmdlLnN1YnNjcmliZSh0aGlzLiNzbGljZSlcbiAgICAgICAgICAgIGNvbnN0IHN1YjIgPSB0aGlzLml0ZW1zJC5zdWJzY3JpYmUoc3Vic2NyaWJlcilcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4jY3ZTdWJzLmdldChjb2xsZWN0aW9uVmlld2VyKSA9PT0gdW50aWwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdWIxLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICAgICAgICBzdWIyLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkucGlwZSh0YWtlVW50aWwodW50aWwpKVxuICAgIH1cblxuICAgIG92ZXJyaWRlIGRpc2Nvbm5lY3QoY29sbGVjdGlvblZpZXdlcjogQ29sbGVjdGlvblZpZXdlcik6IHZvaWQge1xuICAgICAgICB0aGlzLiNjdlN1YnMuZ2V0KGNvbGxlY3Rpb25WaWV3ZXIpPy5uZXh0KClcbiAgICAgICAgdGhpcy4jY3ZTdWJzLmRlbGV0ZShjb2xsZWN0aW9uVmlld2VyKVxuICAgIH1cbn1cbiJdfQ==
|