@kaspernj/api-maker 1.0.2083 → 1.0.2085
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/build/draggable-sort/index.js +4 -2
- package/build/draggable-sort/item.js +14 -7
- package/build/table/table.js +152 -44
- package/build/utils/icon.d.ts +1 -1
- package/build/utils/icon.d.ts.map +1 -1
- package/build/utils/icon.js +14 -8
- package/package.json +1 -1
|
@@ -12,9 +12,11 @@ import propTypesExact from "prop-types-exact";
|
|
|
12
12
|
import useEventEmitter from "../use-event-emitter.js";
|
|
13
13
|
export default memo(shapeComponent(class DraggableSort extends ShapeComponent {
|
|
14
14
|
static defaultProps = {
|
|
15
|
+
activeItemStyle: { backgroundColor: "#fff" },
|
|
15
16
|
horizontal: false
|
|
16
17
|
};
|
|
17
18
|
static propTypes = propTypesExact({
|
|
19
|
+
activeItemStyle: PropTypes.object,
|
|
18
20
|
cacheKeyExtractor: PropTypes.func,
|
|
19
21
|
data: PropTypes.array.isRequired,
|
|
20
22
|
dataSet: PropTypes.object,
|
|
@@ -59,7 +61,7 @@ export default memo(shapeComponent(class DraggableSort extends ShapeComponent {
|
|
|
59
61
|
...dataSet
|
|
60
62
|
}), [dataSet]);
|
|
61
63
|
return (_jsx(Animated.View, { dataSet: actualDataSet, style: this.cache("rootViewStyle", { flexDirection: horizontal ? "row" : "column" }, [horizontal]), ...this.tt.panResponder.panHandlers, children: data.map((item, itemIndex) => ( // eslint-disable-line no-extra-parens
|
|
62
|
-
_jsx(DraggableSortItem, { cacheKey: cacheKeyExtractor ? cacheKeyExtractor(item) : undefined, controller: this.tt.controller, item: item, itemIndex: itemIndex, onItemMoved: this.props.onItemMoved, renderItem: renderItem }, keyExtractor(item)))) }));
|
|
64
|
+
_jsx(DraggableSortItem, { activeItemStyle: this.p.activeItemStyle, cacheKey: cacheKeyExtractor ? cacheKeyExtractor(item) : undefined, controller: this.tt.controller, item: item, itemIndex: itemIndex, onItemMoved: this.props.onItemMoved, renderItem: renderItem }, keyExtractor(item)))) }));
|
|
63
65
|
}
|
|
64
66
|
onDragItemStart = ({ itemData }) => {
|
|
65
67
|
if (this.props.onDragItemStart) {
|
|
@@ -75,4 +77,4 @@ export default memo(shapeComponent(class DraggableSort extends ShapeComponent {
|
|
|
75
77
|
}
|
|
76
78
|
};
|
|
77
79
|
}));
|
|
78
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbImRyYWdnYWJsZS1zb3J0L2luZGV4LmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsaUNBQWlDO0FBQ2pDLE9BQU8sRUFBQyxRQUFRLEVBQUUsWUFBWSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQ25ELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxLQUFLLEVBQUUsRUFBQyxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFDcEMsT0FBTyxFQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUMsTUFBTSw0Q0FBNEMsQ0FBQTtBQUN6RixPQUFPLFVBQVUsTUFBTSxpQkFBaUIsQ0FBQTtBQUN4QyxPQUFPLGlCQUFpQixNQUFNLFFBQVEsQ0FBQTtBQUN0QyxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUE7QUFDbEMsT0FBTyxJQUFJLE1BQU0saUNBQWlDLENBQUE7QUFDbEQsT0FBTyxjQUFjLE1BQU0sa0JBQWtCLENBQUE7QUFDN0MsT0FBTyxlQUFlLE1BQU0seUJBQXlCLENBQUE7QUFFckQsZUFBZSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sYUFBYyxTQUFRLGNBQWM7SUFDM0UsTUFBTSxDQUFDLFlBQVksR0FBRztRQUNwQixlQUFlLEVBQUUsRUFBQyxlQUFlLEVBQUUsTUFBTSxFQUFDO1FBQzFDLFVBQVUsRUFBRSxLQUFLO0tBQ2xCLENBQUE7SUFFRCxNQUFNLENBQUMsU0FBUyxHQUFHLGNBQWMsQ0FBQztRQUNoQyxlQUFlLEVBQUUsU0FBUyxDQUFDLE1BQU07UUFDakMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLElBQUk7UUFDakMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsVUFBVTtRQUNoQyxPQUFPLEVBQUUsU0FBUyxDQUFDLE1BQU07UUFDekIsTUFBTSxFQUFFLFNBQVMsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQzFDLFVBQVUsRUFB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QyxDQUFBO0NBQ0YsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWltcG9ydHMgKi9cbmltcG9ydCB7QW5pbWF0ZWQsIFBhblJlc3BvbmRlcn0gZnJvbSBcInJlYWN0LW5hdGl2ZVwiXG5pbXBvcnQge0V2ZW50RW1pdHRlcn0gZnJvbSBcImV2ZW50ZW1pdHRlcjNcIlxuaW1wb3J0IFJlYWN0LCB7dXNlTWVtb30gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7U2hhcGVDb21wb25lbnQsIHNoYXBlQ29tcG9uZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvc2hhcGUtY29tcG9uZW50LmpzXCJcbmltcG9ydCBDb250cm9sbGVyIGZyb20gXCIuL2NvbnRyb2xsZXIuanNcIlxuaW1wb3J0IERyYWdnYWJsZVNvcnRJdGVtIGZyb20gXCIuL2l0ZW1cIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgbWVtbyBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvbWVtby5qc1wiXG5pbXBvcnQgcHJvcFR5cGVzRXhhY3QgZnJvbSBcInByb3AtdHlwZXMtZXhhY3RcIlxuaW1wb3J0IHVzZUV2ZW50RW1pdHRlciBmcm9tIFwiLi4vdXNlLWV2ZW50LWVtaXR0ZXIuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBtZW1vKHNoYXBlQ29tcG9uZW50KGNsYXNzIERyYWdnYWJsZVNvcnQgZXh0ZW5kcyBTaGFwZUNvbXBvbmVudCB7XG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgYWN0aXZlSXRlbVN0eWxlOiB7YmFja2dyb3VuZENvbG9yOiBcIiNmZmZcIn0sXG4gICAgaG9yaXpvbnRhbDogZmFsc2VcbiAgfVxuXG4gIHN0YXRpYyBwcm9wVHlwZXMgPSBwcm9wVHlwZXNFeGFjdCh7XG4gICAgYWN0aXZlSXRlbVN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGNhY2hlS2V5RXh0cmFjdG9yOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBkYXRhOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBkYXRhU2V0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGV2ZW50czogUHJvcFR5cGVzLmluc3RhbmNlT2YoRXZlbnRFbWl0dGVyKSxcbiAgICBob3Jpem9udGFsOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGtleUV4dHJhY3RvcjogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBvbkRyYWdJdGVtRW5kOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbkRyYWdJdGVtU3RhcnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG9uSXRlbU1vdmVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvblJlb3JkZXJlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgICByZW5kZXJJdGVtOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gIH0pXG5cbiAgc2V0dXAoKSB7XG4gICAgY29uc3Qge2RhdGEsIGtleUV4dHJhY3Rvcn0gPSB0aGlzLnBcbiAgICBjb25zdCB7ZXZlbnRzfSA9IHRoaXMucHJvcHNcblxuICAgIHRoaXMuY29udHJvbGxlciB8fD0gbmV3IENvbnRyb2xsZXIoe2RhdGEsIGV2ZW50cywga2V5RXh0cmFjdG9yfSlcbiAgICB0aGlzLnBhblJlc3BvbmRlciB8fD0gUGFuUmVzcG9uZGVyLmNyZWF0ZSh7XG4gICAgICBvblN0YXJ0U2hvdWxkU2V0UGFuUmVzcG9uZGVyOiAoZSkgPT4ge1xuICAgICAgICBjb25zdCBpbml0aWFsRHJhZ1Bvc2l0aW9uID0ge3g6IGUubmF0aXZlRXZlbnQubG9jYXRpb25YLCB5OiBlLm5hdGl2ZUV2ZW50LmxvY2F0aW9uWX1cblxuICAgICAgICB0aGlzLmNvbnRyb2xsZXIuc2V0SW5pdGlhbERyYWdQb3NpdGlvbihpbml0aWFsRHJhZ1Bvc2l0aW9uKVxuXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xsZXIuZHJhZ2dlZEl0ZW1EYXRhKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIG9uUGFuUmVzcG9uZGVyTW92ZTogKF9lLCBnZXN0YXRlKSA9PiB7XG4gICAgICAgIHRoaXMudHQuY29udHJvbGxlci5vbk1vdmUoe2dlc3RhdGV9KVxuICAgICAgfSxcbiAgICAgIG9uUGFuUmVzcG9uZGVyUmVsZWFzZTogKF9lLCBfZ2VzdGF0ZSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sbGVyLmRyYWdnZWRJdGVtKSB7XG4gICAgICAgICAgdGhpcy50dC5jb250cm9sbGVyLm9uRHJhZ0VuZCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdXNlRXZlbnRFbWl0dGVyKHRoaXMuY29udHJvbGxlci5nZXRFdmVudHMoKSwgXCJvbkRyYWdTdGFydFwiLCB0aGlzLnR0Lm9uRHJhZ0l0ZW1TdGFydClcbiAgICB1c2VFdmVudEVtaXR0ZXIodGhpcy5jb250cm9sbGVyLmdldEV2ZW50cygpLCBcIm9uRHJhZ0VuZFwiLCB0aGlzLnR0Lm9uRHJhZ0l0ZW1FbmQpXG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge2RhdGEsIGhvcml6b250YWwsIGtleUV4dHJhY3RvciwgcmVuZGVySXRlbX0gPSB0aGlzLnBcbiAgICBjb25zdCB7Y2FjaGVLZXlFeHRyYWN0b3IsIGRhdGFTZXR9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IGFjdHVhbERhdGFTZXQgPSB1c2VNZW1vKCgpID0+ICh7XG4gICAgICBjb21wb25lbnQ6IFwiZHJhZ2dhYmxlLXNvcnRcIixcbiAgICAgIC4uLmRhdGFTZXRcbiAgICB9KSwgW2RhdGFTZXRdKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxBbmltYXRlZC5WaWV3XG4gICAgICAgIGRhdGFTZXQ9e2FjdHVhbERhdGFTZXR9XG4gICAgICAgIHN0eWxlPXt0aGlzLmNhY2hlKFwicm9vdFZpZXdTdHlsZVwiLCB7ZmxleERpcmVjdGlvbjogaG9yaXpvbnRhbCA/IFwicm93XCIgOiBcImNvbHVtblwifSwgW2hvcml6b250YWxdKX1cbiAgICAgICAgey4uLnRoaXMudHQucGFuUmVzcG9uZGVyLnBhbkhhbmRsZXJzfVxuICAgICAgPlxuICAgICAgICB7ZGF0YS5tYXAoKGl0ZW0sIGl0ZW1JbmRleCkgPT4gKCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWV4dHJhLXBhcmVuc1xuICAgICAgICAgIDxEcmFnZ2FibGVTb3J0SXRlbVxuICAgICAgICAgICAgYWN0aXZlSXRlbVN0eWxlPXt0aGlzLnAuYWN0aXZlSXRlbVN0eWxlfVxuICAgICAgICAgICAgY2FjaGVLZXk9e2NhY2hlS2V5RXh0cmFjdG9yID8gY2FjaGVLZXlFeHRyYWN0b3IoaXRlbSkgOiB1bmRlZmluZWR9XG4gICAgICAgICAgICBjb250cm9sbGVyPXt0aGlzLnR0LmNvbnRyb2xsZXJ9XG4gICAgICAgICAgICBpdGVtPXtpdGVtfVxuICAgICAgICAgICAgaXRlbUluZGV4PXtpdGVtSW5kZXh9XG4gICAgICAgICAgICBrZXk9e2tleUV4dHJhY3RvcihpdGVtKX1cbiAgICAgICAgICAgIG9uSXRlbU1vdmVkPXt0aGlzLnByb3BzLm9uSXRlbU1vdmVkfVxuICAgICAgICAgICAgcmVuZGVySXRlbT17cmVuZGVySXRlbX1cbiAgICAgICAgICAvPlxuICAgICAgICApKX1cbiAgICAgIDwvQW5pbWF0ZWQuVmlldz5cbiAgICApXG4gIH1cblxuICBvbkRyYWdJdGVtU3RhcnQgPSAoe2l0ZW1EYXRhfSkgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ0l0ZW1TdGFydCkge1xuICAgICAgdGhpcy5wLm9uRHJhZ0l0ZW1TdGFydCh7aXRlbURhdGF9KVxuICAgIH1cbiAgfVxuXG4gIG9uRHJhZ0l0ZW1FbmQgPSAoYXJncykgPT4ge1xuICAgIGlmIChhcmdzLnRvUG9zaXRpb24gIT09IG51bGwpIHtcbiAgICAgIHRoaXMucC5vblJlb3JkZXJlZChhcmdzKVxuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLm9uRHJhZ0l0ZW1FbmQpIHtcbiAgICAgIHRoaXMucC5vbkRyYWdJdGVtRW5kKGFyZ3MpXG4gICAgfVxuICB9XG59KSlcbiJdfQ==
|
|
@@ -10,6 +10,7 @@ import propTypesExact from "prop-types-exact";
|
|
|
10
10
|
import useEventEmitter from "../use-event-emitter.js";
|
|
11
11
|
export default memo(shapeComponent(class DraggableSortItem extends ShapeComponent {
|
|
12
12
|
static propTypes = propTypesExact({
|
|
13
|
+
activeItemStyle: PropTypes.object,
|
|
13
14
|
cacheKey: PropTypes.string,
|
|
14
15
|
controller: PropTypes.object.isRequired,
|
|
15
16
|
item: PropTypes.any.isRequired,
|
|
@@ -39,19 +40,25 @@ export default memo(shapeComponent(class DraggableSortItem extends ShapeComponen
|
|
|
39
40
|
useEventEmitter(this.tt.events, "resetPosition", this.tt.onResetPosition);
|
|
40
41
|
}
|
|
41
42
|
render() {
|
|
42
|
-
const { item, renderItem } = this.p;
|
|
43
|
+
const { activeItemStyle, item, renderItem } = this.p;
|
|
43
44
|
const { active } = this.s;
|
|
44
45
|
const style = useMemo(() => {
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
};
|
|
46
|
+
const baseTransform = this.tt.position.getTranslateTransform();
|
|
47
|
+
const style = { transform: baseTransform };
|
|
48
48
|
if (active) {
|
|
49
|
-
|
|
49
|
+
if (activeItemStyle) {
|
|
50
|
+
const { transform: activeTransform, ...restActiveStyle } = activeItemStyle;
|
|
51
|
+
if (activeTransform) {
|
|
52
|
+
const normalizedActiveTransform = Array.isArray(activeTransform) ? activeTransform : [activeTransform];
|
|
53
|
+
style.transform = baseTransform.concat(normalizedActiveTransform);
|
|
54
|
+
}
|
|
55
|
+
Object.assign(style, restActiveStyle);
|
|
56
|
+
}
|
|
50
57
|
style.elevation = 2;
|
|
51
58
|
style.zIndex = 99999;
|
|
52
59
|
}
|
|
53
60
|
return style;
|
|
54
|
-
}, [active]);
|
|
61
|
+
}, [active, activeItemStyle]);
|
|
55
62
|
return (_jsx(Animated.View, { dataSet: this.cache("draggableSortItemDataSet", { component: "draggable-sort/item" }), onLayout: this.tt.onLayout, style: style, children: renderItem({ isActive: active, item, touchProps: this.tt.panResponder.panHandlers }) }));
|
|
56
63
|
}
|
|
57
64
|
onDragStart = ({ itemData }) => {
|
|
@@ -136,4 +143,4 @@ export default memo(shapeComponent(class DraggableSortItem extends ShapeComponen
|
|
|
136
143
|
}
|
|
137
144
|
};
|
|
138
145
|
}));
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiZHJhZ2dhYmxlLXNvcnQvaXRlbS5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGlDQUFpQztBQUNqQyxPQUFPLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDM0QsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEtBQUssRUFBRSxFQUFDLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUNwQyxPQUFPLEVBQUMsY0FBYyxFQUFFLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3pGLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLElBQUksTUFBTSxpQ0FBaUMsQ0FBQTtBQUNsRCxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLGVBQWUsTUFBTSx5QkFBeUIsQ0FBQTtBQUVyRCxlQUFlLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxpQkFBa0IsU0FBUSxjQUFjO0lBQy9FLE1BQU0sQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDO1FBQ2hDLFFBQVEsRUFBRSxTQUFTLENBQUMsTUFBTTtRQUMxQixVQUFVLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxVQUFVO1FBQ3ZDLElBQUksRUFBRSxTQUFTLENBQUMsR0FBRyxDQUFDLFVBQVU7UUFDOUIsU0FBUyxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVTtRQUN0QyxXQUFXLEVBQUUsU0FBUyxDQUFDLElBQUk7UUFDM0IsVUFBVSxFQUFFLFNBQVMsQ0FBQyxJQUFJLENBQUMsVUFBVTtLQUN0QyxDQUFDLENBQUE7SUFFRixhQUFhLEdBQUcsSUFBSSxDQUFBO0lBRXBCLEtBQUs7UUFDSCxJQUFJLENBQUMsU0FBUyxDQUFDO1lBQ2IsTUFBTSxFQUFFLEtBQUs7WUFDYixRQUFRLEVBQUUsS0FBSztTQUNoQixDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksWUFBWSxFQUFFLENBQUE7UUFDbEMsSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUN4QyxJQUFJLENBQUMsWUFBWSxLQUFLLFlBQVksQ0FBQyxNQUFNLENBQUM7WUFDeEMsNEJBQTRCLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO2dCQUMvQixJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUMsRUFBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFDLENBQUMsQ0FBQTtnQkFFL0UsT0FBTyxLQUFLLENBQUE7WUFDZCxDQUFDO1NBQ0YsQ0FBQyxDQUFBO1FBRUYsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ2xGLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFDaEcsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3ZELGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFDM0UsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLGVBQWUsQ0FBQyxDQUFBO0lBQzNFLENBQUM7SUFFRCxNQUFNO1FBQ0osTUFBTSxFQUFDLElBQUksRUFBRSxVQUFVLEVBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ2pDLE1BQU0sRUFBQyxNQUFNLEVBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FDbkIsR0FBRyxFQUFFO1lBQ0gsTUFBTSxLQUFLLEdBQUc7Z0JBQ1osU0FBUyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLHFCQUFxQixFQUFFO2FBQ3BELENBQUE7WUFFRCxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUNYLEtBQUssQ0FBQyxlQUFlLEdBQUcsTUFBTSxDQUFBO2dCQUM5QixLQUFLLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQTtnQkFDbkIsS0FBSyxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUE7WUFDdEIsQ0FBQztZQUVELE9BQU8sS0FBSyxDQUFBO1FBQ2QsQ0FBQyxFQUNELENBQUMsTUFBTSxDQUFDLENBQ1QsQ0FBQTtRQUVELE9BQU8sQ0FDTCxLQUFDLFFBQVEsQ0FBQyxJQUFJLElBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsMEJBQTBCLEVBQUUsRUFBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsS0FBSyxZQUN6SSxVQUFVLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFDLENBQUMsR0FDckUsQ0FDakIsQ0FBQTtJQUNILENBQUM7SUFFRCxXQUFXLEdBQUcsQ0FBQyxFQUFDLFFBQVEsRUFBQyxFQUFFLEVBQUU7UUFDM0IsTUFBTSxRQUFRLEdBQUcsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUE7UUFFakMsSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdkMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUE7WUFDdEIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQTtRQUMvQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUN6QixDQUFDLENBQUE7SUFFRCxrQkFBa0IsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQTtJQUUxRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRTtRQUNmLE1BQU0sRUFBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUE7UUFFNUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxFQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUMsQ0FBQyxDQUFBO1FBRXZHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUE7UUFDM0MsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVELE1BQU0sR0FBRyxDQUFDLEVBQUMsT0FBTyxFQUFDLEVBQUUsRUFBRTtRQUNyQixNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFBO1FBQy9FLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQTtRQUVqQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQTtRQUVqQyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsRUFBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUE7UUFDekQsQ0FBQztJQUNILENBQUMsQ0FBQTtJQUVELGdCQUFnQixHQUFHLENBQUMsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFDLEVBQUUsRUFBRTtRQUM1QixNQUFNLCtCQUErQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUE7UUFDbkUsTUFBTSxhQUFhLEdBQUc7WUFDcEIsUUFBUSxFQUFFLEdBQUc7WUFDYixNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBQ25DLE9BQU8sRUFBRTtnQkFDUCxDQUFDLEVBQUUsK0JBQStCO2dCQUNsQyxDQUFDO2FBQ0Y7WUFDRCxlQUFlLEVBQUUsSUFBSTtTQUN0QixDQUFBO1FBQ0QsTUFBTSxrQkFBa0IsR0FBRyxFQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFDLENBQUE7UUFFOUYsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO1FBRXJFLFFBQVE7YUFDTCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDO2FBQ3ZDLEtBQUssQ0FBQyxHQUFHLEVBQUU7WUFDVixJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLGtCQUFrQixDQUFDLENBQUE7UUFDckUsQ0FBQyxDQUFDLENBQUE7UUFFSixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUM7Z0JBQ2pCLGFBQWE7Z0JBQ2IsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDM0IsQ0FBQyxFQUFFLCtCQUErQjtnQkFDbEMsQ0FBQzthQUNGLENBQUMsQ0FBQTtRQUNKLENBQUM7SUFDSCxDQUFDLENBQUE7SUFFRCxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUE7SUFFOUUsZUFBZSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDekIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQTtRQUN2RCxNQUFNLGFBQWEsR0FBRztZQUNwQixRQUFRLEVBQUUsR0FBRztZQUNiLE1BQU0sRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDbkMsT0FBTyxFQUFFO2dCQUNQLENBQUMsRUFBRSxLQUFLO2dCQUNSLENBQUMsRUFBRSxDQUFDO2FBQ0w7WUFDRCxlQUFlLEVBQUUsSUFBSTtTQUN0QixDQUFBO1FBQ0QsTUFBTSxrQkFBa0IsR0FBRyxFQUFDLGFBQWEsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBQyxDQUFBO1FBRTdGLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtRQUVyRSxRQUFRO2FBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQzthQUN2QyxLQUFLLENBQUMsR0FBRyxFQUFFO1lBQ1YsSUFBSSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO1lBQ25FLElBQUksSUFBSSxFQUFFLFFBQVE7Z0JBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFBO1FBQ3JDLENBQUMsQ0FBQyxDQUFBO1FBRUosSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO2dCQUNqQixhQUFhO2dCQUNiLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVM7Z0JBQzNCLENBQUMsRUFBRSxLQUFLO2dCQUNSLENBQUMsRUFBRSxDQUFDO2FBQ0wsQ0FBQyxDQUFBO1FBQ0osQ0FBQztJQUNILENBQUMsQ0FBQTtDQUNGLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgc29ydC1pbXBvcnRzICovXG5pbXBvcnQge0FuaW1hdGVkLCBFYXNpbmcsIFBhblJlc3BvbmRlcn0gZnJvbSBcInJlYWN0LW5hdGl2ZVwiXG5pbXBvcnQge0V2ZW50RW1pdHRlcn0gZnJvbSBcImV2ZW50ZW1pdHRlcjNcIlxuaW1wb3J0IFJlYWN0LCB7dXNlTWVtb30gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7U2hhcGVDb21wb25lbnQsIHNoYXBlQ29tcG9uZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvc2hhcGUtY29tcG9uZW50LmpzXCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IG1lbW8gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL2J1aWxkL21lbW8uanNcIlxuaW1wb3J0IHByb3BUeXBlc0V4YWN0IGZyb20gXCJwcm9wLXR5cGVzLWV4YWN0XCJcbmltcG9ydCB1c2VFdmVudEVtaXR0ZXIgZnJvbSBcIi4uL3VzZS1ldmVudC1lbWl0dGVyLmpzXCJcblxuZXhwb3J0IGRlZmF1bHQgbWVtbyhzaGFwZUNvbXBvbmVudChjbGFzcyBEcmFnZ2FibGVTb3J0SXRlbSBleHRlbmRzIFNoYXBlQ29tcG9uZW50IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHByb3BUeXBlc0V4YWN0KHtcbiAgICBjYWNoZUtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb250cm9sbGVyOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgaXRlbTogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgIGl0ZW1JbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIG9uSXRlbU1vdmVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICByZW5kZXJJdGVtOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gIH0pXG5cbiAgaW5pdGlhbExheW91dCA9IG51bGxcblxuICBzZXR1cCgpIHtcbiAgICB0aGlzLnVzZVN0YXRlcyh7XG4gICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgZHJhZ2dpbmc6IGZhbHNlXG4gICAgfSlcblxuICAgIHRoaXMuZXZlbnRzIHx8PSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgICB0aGlzLnBvc2l0aW9uIHx8PSBuZXcgQW5pbWF0ZWQuVmFsdWVYWSgpXG4gICAgdGhpcy5wYW5SZXNwb25kZXIgfHw9IFBhblJlc3BvbmRlci5jcmVhdGUoe1xuICAgICAgb25TdGFydFNob3VsZFNldFBhblJlc3BvbmRlcjogKF9ldmVudCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtkcmFnZ2luZzogdHJ1ZX0pXG4gICAgICAgIHRoaXMucC5jb250cm9sbGVyLm9uRHJhZ1N0YXJ0KHtpdGVtOiB0aGlzLnAuaXRlbSwgaXRlbUluZGV4OiB0aGlzLnAuaXRlbUluZGV4fSlcblxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdXNlRXZlbnRFbWl0dGVyKHRoaXMucC5jb250cm9sbGVyLmdldEV2ZW50cygpLCBcIm9uRHJhZ1N0YXJ0XCIsIHRoaXMudHQub25EcmFnU3RhcnQpXG4gICAgdXNlRXZlbnRFbWl0dGVyKHRoaXMucC5jb250cm9sbGVyLmdldEV2ZW50cygpLCBcIm9uRHJhZ0VuZEFuaW1hdGlvblwiLCB0aGlzLnR0Lm9uRHJhZ0VuZEFuaW1hdGlvbilcbiAgICB1c2VFdmVudEVtaXR0ZXIodGhpcy50dC5ldmVudHMsIFwibW92ZVwiLCB0aGlzLnR0Lm9uTW92ZSlcbiAgICB1c2VFdmVudEVtaXR0ZXIodGhpcy50dC5ldmVudHMsIFwibW92ZVRvUG9zaXRpb25cIiwgdGhpcy50dC5vbk1vdmVUb1Bvc2l0aW9uKVxuICAgIHVzZUV2ZW50RW1pdHRlcih0aGlzLnR0LmV2ZW50cywgXCJyZXNldFBvc2l0aW9uXCIsIHRoaXMudHQub25SZXNldFBvc2l0aW9uKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtpdGVtLCByZW5kZXJJdGVtfSA9IHRoaXMucFxuICAgIGNvbnN0IHthY3RpdmV9ID0gdGhpcy5zXG4gICAgY29uc3Qgc3R5bGUgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBzdHlsZSA9IHtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRoaXMudHQucG9zaXRpb24uZ2V0VHJhbnNsYXRlVHJhbnNmb3JtKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBcIiNmZmZcIlxuICAgICAgICAgIHN0eWxlLmVsZXZhdGlvbiA9IDJcbiAgICAgICAgICBzdHlsZS56SW5kZXggPSA5OTk5OVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0eWxlXG4gICAgICB9LFxuICAgICAgW2FjdGl2ZV1cbiAgICApXG5cbiAgICByZXR1cm4gKFxuICAgICAgPEFuaW1hdGVkLlZpZXcgZGF0YVNldD17dGhpcy5jYWNoZShcImRyYWdnYWJsZVNvcnRJdGVtRGF0YVNldFwiLCB7Y29tcG9uZW50OiBcImRyYWdnYWJsZS1zb3J0L2l0ZW1cIn0pfSBvbkxheW91dD17dGhpcy50dC5vbkxheW91dH0gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAge3JlbmRlckl0ZW0oe2lzQWN0aXZlOiBhY3RpdmUsIGl0ZW0sIHRvdWNoUHJvcHM6IHRoaXMudHQucGFuUmVzcG9uZGVyLnBhbkhhbmRsZXJzfSl9XG4gICAgICA8L0FuaW1hdGVkLlZpZXc+XG4gICAgKVxuICB9XG5cbiAgb25EcmFnU3RhcnQgPSAoe2l0ZW1EYXRhfSkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge2RyYWdnaW5nOiB0cnVlfVxuXG4gICAgaWYgKGl0ZW1EYXRhLmluZGV4ID09IHRoaXMucC5pdGVtSW5kZXgpIHtcbiAgICAgIG5ld1N0YXRlLmFjdGl2ZSA9IHRydWVcbiAgICAgIHRoaXMuYmFzZVhBdFN0YXJ0ZWREcmFnZ2luZyA9IHRoaXMuZ2V0QmFzZVgoKVxuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUpXG4gIH1cblxuICBvbkRyYWdFbmRBbmltYXRpb24gPSAoKSA9PiB0aGlzLnNldFN0YXRlKHthY3RpdmU6IGZhbHNlLCBkcmFnZ2luZzogZmFsc2V9KVxuXG4gIG9uTGF5b3V0ID0gKGUpID0+IHtcbiAgICBjb25zdCB7Y29udHJvbGxlciwgaXRlbSwgaXRlbUluZGV4fSA9IHRoaXMucFxuXG4gICAgY29udHJvbGxlci5vbkl0ZW1MYXlvdXQoe2V2ZW50czogdGhpcy50dC5ldmVudHMsIGluZGV4OiBpdGVtSW5kZXgsIGl0ZW0sIGxheW91dDogZS5uYXRpdmVFdmVudC5sYXlvdXR9KVxuXG4gICAgaWYgKCF0aGlzLnR0LmluaXRpYWxMYXlvdXQpIHtcbiAgICAgIHRoaXMuaW5pdGlhbExheW91dCA9IGUubmF0aXZlRXZlbnQubGF5b3V0XG4gICAgfVxuICB9XG5cbiAgb25Nb3ZlID0gKHtnZXN0YXRlfSkgPT4ge1xuICAgIGNvbnN0IHggPSBnZXN0YXRlLmR4ICsgdGhpcy50dC5iYXNlWEF0U3RhcnRlZERyYWdnaW5nIC0gdGhpcy50dC5pbml0aWFsTGF5b3V0LnhcbiAgICBjb25zdCB5ID0gdGhpcy50dC5pbml0aWFsTGF5b3V0LnlcblxuICAgIHRoaXMudHQucG9zaXRpb24uc2V0VmFsdWUoe3gsIHl9KVxuXG4gICAgaWYgKHRoaXMucHJvcHMub25JdGVtTW92ZWQpIHtcbiAgICAgIHRoaXMucC5vbkl0ZW1Nb3ZlZCh7aXRlbUluZGV4OiB0aGlzLnAuaXRlbUluZGV4LCB4LCB5fSlcbiAgICB9XG4gIH1cblxuICBvbk1vdmVUb1Bvc2l0aW9uID0gKHt4LCB5fSkgPT4ge1xuICAgIGNvbnN0IGNhbGN1bGF0ZWRYRnJvbVN0YXJ0aW5nUG9zaXRpb24gPSB4IC0gdGhpcy50dC5pbml0aWFsTGF5b3V0LnhcbiAgICBjb25zdCBhbmltYXRpb25BcmdzID0ge1xuICAgICAgZHVyYXRpb246IDIwMCxcbiAgICAgIGVhc2luZzogRWFzaW5nLmluT3V0KEVhc2luZy5saW5lYXIpLFxuICAgICAgdG9WYWx1ZToge1xuICAgICAgICB4OiBjYWxjdWxhdGVkWEZyb21TdGFydGluZ1Bvc2l0aW9uLFxuICAgICAgICB5XG4gICAgICB9LFxuICAgICAgdXNlTmF0aXZlRHJpdmVyOiB0cnVlXG4gICAgfVxuICAgIGNvbnN0IGFuaW1hdGlvbkV2ZW50QXJncyA9IHthbmltYXRpb25BcmdzLCBhbmltYXRpb25UeXBlOiBcIm1vdmVUb1Bvc2l0aW9uXCIsIGl0ZW06IHRoaXMucC5pdGVtfVxuXG4gICAgdGhpcy5wLmNvbnRyb2xsZXIuZXZlbnRzLmVtaXQoXCJvbkFuaW1hdGlvblN0YXJ0XCIsIGFuaW1hdGlvbkV2ZW50QXJncylcblxuICAgIEFuaW1hdGVkXG4gICAgICAudGltaW5nKHRoaXMudHQucG9zaXRpb24sIGFuaW1hdGlvbkFyZ3MpXG4gICAgICAuc3RhcnQoKCkgPT4ge1xuICAgICAgICB0aGlzLnAuY29udHJvbGxlci5ldmVudHMuZW1pdChcIm9uQW5pbWF0aW9uRW5kXCIsIGFuaW1hdGlvbkV2ZW50QXJncylcbiAgICAgIH0pXG5cbiAgICBpZiAodGhpcy5wcm9wcy5vbkl0ZW1Nb3ZlZCkge1xuICAgICAgdGhpcy5wLm9uSXRlbU1vdmVkKHtcbiAgICAgICAgYW5pbWF0aW9uQXJncyxcbiAgICAgICAgaXRlbUluZGV4OiB0aGlzLnAuaXRlbUluZGV4LFxuICAgICAgICB4OiBjYWxjdWxhdGVkWEZyb21TdGFydGluZ1Bvc2l0aW9uLFxuICAgICAgICB5XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGdldEJhc2VYID0gKCkgPT4gdGhpcy5wLmNvbnRyb2xsZXIuZ2V0SXRlbURhdGFGb3JJbmRleCh0aGlzLnAuaXRlbUluZGV4KS5iYXNlWFxuXG4gIG9uUmVzZXRQb3NpdGlvbiA9IChhcmdzKSA9PiB7XG4gICAgY29uc3QgYmFzZVggPSB0aGlzLmdldEJhc2VYKCkgLSB0aGlzLnR0LmluaXRpYWxMYXlvdXQueFxuICAgIGNvbnN0IGFuaW1hdGlvbkFyZ3MgPSB7XG4gICAgICBkdXJhdGlvbjogMjAwLFxuICAgICAgZWFzaW5nOiBFYXNpbmcuaW5PdXQoRWFzaW5nLmxpbmVhciksXG4gICAgICB0b1ZhbHVlOiB7XG4gICAgICAgIHg6IGJhc2VYLFxuICAgICAgICB5OiAwXG4gICAgICB9LFxuICAgICAgdXNlTmF0aXZlRHJpdmVyOiB0cnVlXG4gICAgfVxuICAgIGNvbnN0IGFuaW1hdGlvbkV2ZW50QXJncyA9IHthbmltYXRpb25BcmdzLCBhbmltYXRpb25UeXBlOiBcInJlc2V0UG9zaXRpb25cIiwgaXRlbTogdGhpcy5wLml0ZW19XG5cbiAgICB0aGlzLnAuY29udHJvbGxlci5ldmVudHMuZW1pdChcIm9uQW5pbWF0aW9uU3RhcnRcIiwgYW5pbWF0aW9uRXZlbnRBcmdzKVxuXG4gICAgQW5pbWF0ZWRcbiAgICAgIC50aW1pbmcodGhpcy50dC5wb3NpdGlvbiwgYW5pbWF0aW9uQXJncylcbiAgICAgIC5zdGFydCgoKSA9PiB7XG4gICAgICAgIHRoaXMucC5jb250cm9sbGVyLmV2ZW50cy5lbWl0KFwib25BbmltYXRpb25FbmRcIiwgYW5pbWF0aW9uRXZlbnRBcmdzKVxuICAgICAgICBpZiAoYXJncz8uY2FsbGJhY2spIGFyZ3MuY2FsbGJhY2soKVxuICAgICAgfSlcblxuICAgIGlmICh0aGlzLnByb3BzLm9uSXRlbU1vdmVkKSB7XG4gICAgICB0aGlzLnAub25JdGVtTW92ZWQoe1xuICAgICAgICBhbmltYXRpb25BcmdzLFxuICAgICAgICBpdGVtSW5kZXg6IHRoaXMucC5pdGVtSW5kZXgsXG4gICAgICAgIHg6IGJhc2VYLFxuICAgICAgICB5OiAwXG4gICAgICB9KVxuICAgIH1cbiAgfVxufSkpXG4iXX0=
|
|
146
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXRlbS5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsiZHJhZ2dhYmxlLXNvcnQvaXRlbS5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLGlDQUFpQztBQUNqQyxPQUFPLEVBQUMsUUFBUSxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUMsTUFBTSxjQUFjLENBQUE7QUFDM0QsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEtBQUssRUFBRSxFQUFDLE9BQU8sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUNwQyxPQUFPLEVBQUMsY0FBYyxFQUFFLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3pGLE9BQU8sU0FBUyxNQUFNLFlBQVksQ0FBQTtBQUNsQyxPQUFPLElBQUksTUFBTSxpQ0FBaUMsQ0FBQTtBQUNsRCxPQUFPLGNBQWMsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLGVBQWUsTUFBTSx5QkFBeUIsQ0FBQTtBQUVyRCxlQUFlLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxpQkFBa0IsU0FBUSxjQUFjO0lBQy9FLE1BQU0sQ0FBQyxTQUFTLEdBQUcsY0FBYyxDQUFDO1FBQ2hDLGVBQWUsRUFBRSxTQUFTLENBQUMsTUFBTTtRQUNqQyxRQUFRLEVBQUUsU0FBUyxDQUFDLE1BQU07UUFDMUIsVUFBVSxFQUFFLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVTtRQUN2QyxJQUFJLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVO1FBQzlCLFNBQVMsRUFBRSxTQUFTLENBQUMsTUFBTSxDQUFDLFVBQVU7UUFDdEMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxJQUFJO1FBQzNCLFVBQVUsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVU7S0FDdEMsQ0FBQyxDQUFBO0lBRUYsYUFBYSxHQUFHLElBQUksQ0FBQTtJQUVwQixLQUFLO1FBQ0gsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNiLE1BQU0sRUFBRSxL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SixDQUFDO0lBQ0gsQ0FBQyxDQUFBO0NBQ0YsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBzb3J0LWltcG9ydHMgKi9cbmltcG9ydCB7QW5pbWF0ZWQsIEVhc2luZywgUGFuUmVzcG9uZGVyfSBmcm9tIFwicmVhY3QtbmF0aXZlXCJcbmltcG9ydCB7RXZlbnRFbWl0dGVyfSBmcm9tIFwiZXZlbnRlbWl0dGVyM1wiXG5pbXBvcnQgUmVhY3QsIHt1c2VNZW1vfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtTaGFwZUNvbXBvbmVudCwgc2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9zaGFwZS1jb21wb25lbnQuanNcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgbWVtbyBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvbWVtby5qc1wiXG5pbXBvcnQgcHJvcFR5cGVzRXhhY3QgZnJvbSBcInByb3AtdHlwZXMtZXhhY3RcIlxuaW1wb3J0IHVzZUV2ZW50RW1pdHRlciBmcm9tIFwiLi4vdXNlLWV2ZW50LWVtaXR0ZXIuanNcIlxuXG5leHBvcnQgZGVmYXVsdCBtZW1vKHNoYXBlQ29tcG9uZW50KGNsYXNzIERyYWdnYWJsZVNvcnRJdGVtIGV4dGVuZHMgU2hhcGVDb21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0gcHJvcFR5cGVzRXhhY3Qoe1xuICAgIGFjdGl2ZUl0ZW1TdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBjYWNoZUtleTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb250cm9sbGVyOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gICAgaXRlbTogUHJvcFR5cGVzLmFueS5pc1JlcXVpcmVkLFxuICAgIGl0ZW1JbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIG9uSXRlbU1vdmVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICByZW5kZXJJdGVtOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gIH0pXG5cbiAgaW5pdGlhbExheW91dCA9IG51bGxcblxuICBzZXR1cCgpIHtcbiAgICB0aGlzLnVzZVN0YXRlcyh7XG4gICAgICBhY3RpdmU6IGZhbHNlLFxuICAgICAgZHJhZ2dpbmc6IGZhbHNlXG4gICAgfSlcblxuICAgIHRoaXMuZXZlbnRzIHx8PSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgICB0aGlzLnBvc2l0aW9uIHx8PSBuZXcgQW5pbWF0ZWQuVmFsdWVYWSgpXG4gICAgdGhpcy5wYW5SZXNwb25kZXIgfHw9IFBhblJlc3BvbmRlci5jcmVhdGUoe1xuICAgICAgb25TdGFydFNob3VsZFNldFBhblJlc3BvbmRlcjogKF9ldmVudCkgPT4ge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHtkcmFnZ2luZzogdHJ1ZX0pXG4gICAgICAgIHRoaXMucC5jb250cm9sbGVyLm9uRHJhZ1N0YXJ0KHtpdGVtOiB0aGlzLnAuaXRlbSwgaXRlbUluZGV4OiB0aGlzLnAuaXRlbUluZGV4fSlcblxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdXNlRXZlbnRFbWl0dGVyKHRoaXMucC5jb250cm9sbGVyLmdldEV2ZW50cygpLCBcIm9uRHJhZ1N0YXJ0XCIsIHRoaXMudHQub25EcmFnU3RhcnQpXG4gICAgdXNlRXZlbnRFbWl0dGVyKHRoaXMucC5jb250cm9sbGVyLmdldEV2ZW50cygpLCBcIm9uRHJhZ0VuZEFuaW1hdGlvblwiLCB0aGlzLnR0Lm9uRHJhZ0VuZEFuaW1hdGlvbilcbiAgICB1c2VFdmVudEVtaXR0ZXIodGhpcy50dC5ldmVudHMsIFwibW92ZVwiLCB0aGlzLnR0Lm9uTW92ZSlcbiAgICB1c2VFdmVudEVtaXR0ZXIodGhpcy50dC5ldmVudHMsIFwibW92ZVRvUG9zaXRpb25cIiwgdGhpcy50dC5vbk1vdmVUb1Bvc2l0aW9uKVxuICAgIHVzZUV2ZW50RW1pdHRlcih0aGlzLnR0LmV2ZW50cywgXCJyZXNldFBvc2l0aW9uXCIsIHRoaXMudHQub25SZXNldFBvc2l0aW9uKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHthY3RpdmVJdGVtU3R5bGUsIGl0ZW0sIHJlbmRlckl0ZW19ID0gdGhpcy5wXG4gICAgY29uc3Qge2FjdGl2ZX0gPSB0aGlzLnNcbiAgICBjb25zdCBzdHlsZSA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGJhc2VUcmFuc2Zvcm0gPSB0aGlzLnR0LnBvc2l0aW9uLmdldFRyYW5zbGF0ZVRyYW5zZm9ybSgpXG4gICAgICAgIGNvbnN0IHN0eWxlID0ge3RyYW5zZm9ybTogYmFzZVRyYW5zZm9ybX1cblxuICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgaWYgKGFjdGl2ZUl0ZW1TdHlsZSkge1xuICAgICAgICAgICAgY29uc3Qge3RyYW5zZm9ybTogYWN0aXZlVHJhbnNmb3JtLCAuLi5yZXN0QWN0aXZlU3R5bGV9ID0gYWN0aXZlSXRlbVN0eWxlXG5cbiAgICAgICAgICAgIGlmIChhY3RpdmVUcmFuc2Zvcm0pIHtcbiAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZEFjdGl2ZVRyYW5zZm9ybSA9IEFycmF5LmlzQXJyYXkoYWN0aXZlVHJhbnNmb3JtKSA/IGFjdGl2ZVRyYW5zZm9ybSA6IFthY3RpdmVUcmFuc2Zvcm1dXG5cbiAgICAgICAgICAgICAgc3R5bGUudHJhbnNmb3JtID0gYmFzZVRyYW5zZm9ybS5jb25jYXQobm9ybWFsaXplZEFjdGl2ZVRyYW5zZm9ybSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzdHlsZSwgcmVzdEFjdGl2ZVN0eWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgICBzdHlsZS5lbGV2YXRpb24gPSAyXG4gICAgICAgICAgc3R5bGUuekluZGV4ID0gOTk5OTlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHlsZVxuICAgICAgfSxcbiAgICAgIFthY3RpdmUsIGFjdGl2ZUl0ZW1TdHlsZV1cbiAgICApXG5cbiAgICByZXR1cm4gKFxuICAgICAgPEFuaW1hdGVkLlZpZXcgZGF0YVNldD17dGhpcy5jYWNoZShcImRyYWdnYWJsZVNvcnRJdGVtRGF0YVNldFwiLCB7Y29tcG9uZW50OiBcImRyYWdnYWJsZS1zb3J0L2l0ZW1cIn0pfSBvbkxheW91dD17dGhpcy50dC5vbkxheW91dH0gc3R5bGU9e3N0eWxlfT5cbiAgICAgICAge3JlbmRlckl0ZW0oe2lzQWN0aXZlOiBhY3RpdmUsIGl0ZW0sIHRvdWNoUHJvcHM6IHRoaXMudHQucGFuUmVzcG9uZGVyLnBhbkhhbmRsZXJzfSl9XG4gICAgICA8L0FuaW1hdGVkLlZpZXc+XG4gICAgKVxuICB9XG5cbiAgb25EcmFnU3RhcnQgPSAoe2l0ZW1EYXRhfSkgPT4ge1xuICAgIGNvbnN0IG5ld1N0YXRlID0ge2RyYWdnaW5nOiB0cnVlfVxuXG4gICAgaWYgKGl0ZW1EYXRhLmluZGV4ID09IHRoaXMucC5pdGVtSW5kZXgpIHtcbiAgICAgIG5ld1N0YXRlLmFjdGl2ZSA9IHRydWVcbiAgICAgIHRoaXMuYmFzZVhBdFN0YXJ0ZWREcmFnZ2luZyA9IHRoaXMuZ2V0QmFzZVgoKVxuICAgIH1cblxuICAgIHRoaXMuc2V0U3RhdGUobmV3U3RhdGUpXG4gIH1cblxuICBvbkRyYWdFbmRBbmltYXRpb24gPSAoKSA9PiB0aGlzLnNldFN0YXRlKHthY3RpdmU6IGZhbHNlLCBkcmFnZ2luZzogZmFsc2V9KVxuXG4gIG9uTGF5b3V0ID0gKGUpID0+IHtcbiAgICBjb25zdCB7Y29udHJvbGxlciwgaXRlbSwgaXRlbUluZGV4fSA9IHRoaXMucFxuXG4gICAgY29udHJvbGxlci5vbkl0ZW1MYXlvdXQoe2V2ZW50czogdGhpcy50dC5ldmVudHMsIGluZGV4OiBpdGVtSW5kZXgsIGl0ZW0sIGxheW91dDogZS5uYXRpdmVFdmVudC5sYXlvdXR9KVxuXG4gICAgaWYgKCF0aGlzLnR0LmluaXRpYWxMYXlvdXQpIHtcbiAgICAgIHRoaXMuaW5pdGlhbExheW91dCA9IGUubmF0aXZlRXZlbnQubGF5b3V0XG4gICAgfVxuICB9XG5cbiAgb25Nb3ZlID0gKHtnZXN0YXRlfSkgPT4ge1xuICAgIGNvbnN0IHggPSBnZXN0YXRlLmR4ICsgdGhpcy50dC5iYXNlWEF0U3RhcnRlZERyYWdnaW5nIC0gdGhpcy50dC5pbml0aWFsTGF5b3V0LnhcbiAgICBjb25zdCB5ID0gdGhpcy50dC5pbml0aWFsTGF5b3V0LnlcblxuICAgIHRoaXMudHQucG9zaXRpb24uc2V0VmFsdWUoe3gsIHl9KVxuXG4gICAgaWYgKHRoaXMucHJvcHMub25JdGVtTW92ZWQpIHtcbiAgICAgIHRoaXMucC5vbkl0ZW1Nb3ZlZCh7aXRlbUluZGV4OiB0aGlzLnAuaXRlbUluZGV4LCB4LCB5fSlcbiAgICB9XG4gIH1cblxuICBvbk1vdmVUb1Bvc2l0aW9uID0gKHt4LCB5fSkgPT4ge1xuICAgIGNvbnN0IGNhbGN1bGF0ZWRYRnJvbVN0YXJ0aW5nUG9zaXRpb24gPSB4IC0gdGhpcy50dC5pbml0aWFsTGF5b3V0LnhcbiAgICBjb25zdCBhbmltYXRpb25BcmdzID0ge1xuICAgICAgZHVyYXRpb246IDIwMCxcbiAgICAgIGVhc2luZzogRWFzaW5nLmluT3V0KEVhc2luZy5saW5lYXIpLFxuICAgICAgdG9WYWx1ZToge1xuICAgICAgICB4OiBjYWxjdWxhdGVkWEZyb21TdGFydGluZ1Bvc2l0aW9uLFxuICAgICAgICB5XG4gICAgICB9LFxuICAgICAgdXNlTmF0aXZlRHJpdmVyOiB0cnVlXG4gICAgfVxuICAgIGNvbnN0IGFuaW1hdGlvbkV2ZW50QXJncyA9IHthbmltYXRpb25BcmdzLCBhbmltYXRpb25UeXBlOiBcIm1vdmVUb1Bvc2l0aW9uXCIsIGl0ZW06IHRoaXMucC5pdGVtfVxuXG4gICAgdGhpcy5wLmNvbnRyb2xsZXIuZXZlbnRzLmVtaXQoXCJvbkFuaW1hdGlvblN0YXJ0XCIsIGFuaW1hdGlvbkV2ZW50QXJncylcblxuICAgIEFuaW1hdGVkXG4gICAgICAudGltaW5nKHRoaXMudHQucG9zaXRpb24sIGFuaW1hdGlvbkFyZ3MpXG4gICAgICAuc3RhcnQoKCkgPT4ge1xuICAgICAgICB0aGlzLnAuY29udHJvbGxlci5ldmVudHMuZW1pdChcIm9uQW5pbWF0aW9uRW5kXCIsIGFuaW1hdGlvbkV2ZW50QXJncylcbiAgICAgIH0pXG5cbiAgICBpZiAodGhpcy5wcm9wcy5vbkl0ZW1Nb3ZlZCkge1xuICAgICAgdGhpcy5wLm9uSXRlbU1vdmVkKHtcbiAgICAgICAgYW5pbWF0aW9uQXJncyxcbiAgICAgICAgaXRlbUluZGV4OiB0aGlzLnAuaXRlbUluZGV4LFxuICAgICAgICB4OiBjYWxjdWxhdGVkWEZyb21TdGFydGluZ1Bvc2l0aW9uLFxuICAgICAgICB5XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGdldEJhc2VYID0gKCkgPT4gdGhpcy5wLmNvbnRyb2xsZXIuZ2V0SXRlbURhdGFGb3JJbmRleCh0aGlzLnAuaXRlbUluZGV4KS5iYXNlWFxuXG4gIG9uUmVzZXRQb3NpdGlvbiA9IChhcmdzKSA9PiB7XG4gICAgY29uc3QgYmFzZVggPSB0aGlzLmdldEJhc2VYKCkgLSB0aGlzLnR0LmluaXRpYWxMYXlvdXQueFxuICAgIGNvbnN0IGFuaW1hdGlvbkFyZ3MgPSB7XG4gICAgICBkdXJhdGlvbjogMjAwLFxuICAgICAgZWFzaW5nOiBFYXNpbmcuaW5PdXQoRWFzaW5nLmxpbmVhciksXG4gICAgICB0b1ZhbHVlOiB7XG4gICAgICAgIHg6IGJhc2VYLFxuICAgICAgICB5OiAwXG4gICAgICB9LFxuICAgICAgdXNlTmF0aXZlRHJpdmVyOiB0cnVlXG4gICAgfVxuICAgIGNvbnN0IGFuaW1hdGlvbkV2ZW50QXJncyA9IHthbmltYXRpb25BcmdzLCBhbmltYXRpb25UeXBlOiBcInJlc2V0UG9zaXRpb25cIiwgaXRlbTogdGhpcy5wLml0ZW19XG5cbiAgICB0aGlzLnAuY29udHJvbGxlci5ldmVudHMuZW1pdChcIm9uQW5pbWF0aW9uU3RhcnRcIiwgYW5pbWF0aW9uRXZlbnRBcmdzKVxuXG4gICAgQW5pbWF0ZWRcbiAgICAgIC50aW1pbmcodGhpcy50dC5wb3NpdGlvbiwgYW5pbWF0aW9uQXJncylcbiAgICAgIC5zdGFydCgoKSA9PiB7XG4gICAgICAgIHRoaXMucC5jb250cm9sbGVyLmV2ZW50cy5lbWl0KFwib25BbmltYXRpb25FbmRcIiwgYW5pbWF0aW9uRXZlbnRBcmdzKVxuICAgICAgICBpZiAoYXJncz8uY2FsbGJhY2spIGFyZ3MuY2FsbGJhY2soKVxuICAgICAgfSlcblxuICAgIGlmICh0aGlzLnByb3BzLm9uSXRlbU1vdmVkKSB7XG4gICAgICB0aGlzLnAub25JdGVtTW92ZWQoe1xuICAgICAgICBhbmltYXRpb25BcmdzLFxuICAgICAgICBpdGVtSW5kZXg6IHRoaXMucC5pdGVtSW5kZXgsXG4gICAgICAgIHg6IGJhc2VYLFxuICAgICAgICB5OiAwXG4gICAgICB9KVxuICAgIH1cbiAgfVxufSkpXG4iXX0=
|
package/build/table/table.js
CHANGED
|
@@ -45,6 +45,9 @@ import useModelEvent from "../use-model-event.js";
|
|
|
45
45
|
import useQueryParams from "on-location-changed/build/use-query-params.js";
|
|
46
46
|
import Widths from "./widths";
|
|
47
47
|
import WorkerPluginsCheckAllCheckbox from "./worker-plugins-check-all-checkbox";
|
|
48
|
+
/**
|
|
49
|
+
* Table component with sortable, resizable columns and optional filters.
|
|
50
|
+
*/
|
|
48
51
|
const dataSets = {};
|
|
49
52
|
const paginationOptions = [30, 60, 90, ["All", "all"]];
|
|
50
53
|
const styles = {};
|
|
@@ -63,18 +66,22 @@ const ListHeaderComponent = memo(shapeComponent(class ListHeaderComponent extend
|
|
|
63
66
|
const { query } = digs(collection, "query");
|
|
64
67
|
useEventEmitter(events, "columnVisibilityUpdated", this.tt.onColumnVisibilityUpdated);
|
|
65
68
|
return (_jsxs(Row, { style: table.styleForRowHeader(), testID: "api-maker/table/header-row", children: [table.p.workplace && table.s.currentWorkplace &&
|
|
66
|
-
_jsxs(Header, { style: table.styleForHeader({ style: { width: mdUp ? 41 : undefined } }), children: [_jsx(WorkerPluginsCheckAllCheckbox, { currentWorkplace: table.s.currentWorkplace, query: queryWithoutPagination, style:
|
|
67
|
-
_jsx(Text, { style:
|
|
69
|
+
_jsxs(Header, { style: table.styleForHeader({ style: { width: mdUp ? 41 : undefined } }), children: [_jsx(WorkerPluginsCheckAllCheckbox, { currentWorkplace: table.s.currentWorkplace, query: queryWithoutPagination, style: styles.workerPlguinsCheckAllCheckboxStyle ||= { marginHorizontal: "auto" } }), !mdUp &&
|
|
70
|
+
_jsx(Text, { style: styles.selectAllFoundTextStyle ||= { marginLeft: 3 }, children: t(".select_all_found", { defaultValue: "Select all found" }) })] }), !mdUp &&
|
|
68
71
|
_jsx(Header, { style: table.styleForHeader({ style: {} }), children: _jsx(HeaderSelect, { preparedColumns: table.s.preparedColumns, query: query, table: table }) }), mdUp &&
|
|
69
72
|
_jsxs(_Fragment, { children: [table.headersContentFromColumns(), _jsx(Header, { style: table.styleForHeader({ style: {}, type: "actions" }) })] })] }));
|
|
70
73
|
}
|
|
71
74
|
onColumnVisibilityUpdated = () => this.setState({ lastUpdate: new Date() });
|
|
72
75
|
}));
|
|
73
76
|
export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
|
|
77
|
+
/**
|
|
78
|
+
* @param {object} props
|
|
79
|
+
*/
|
|
74
80
|
static defaultProps = {
|
|
75
81
|
card: true,
|
|
76
82
|
currentUser: null,
|
|
77
83
|
destroyEnabled: true,
|
|
84
|
+
draggedHeaderStyle: undefined,
|
|
78
85
|
filterCard: true,
|
|
79
86
|
filterSubmitButton: true,
|
|
80
87
|
noRecordsAvailableContent: undefined,
|
|
@@ -99,6 +106,7 @@ export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
|
|
|
99
106
|
defaultParams: PropTypes.object,
|
|
100
107
|
destroyEnabled: PropTypes.bool.isRequired,
|
|
101
108
|
destroyMessage: PropTypes.string,
|
|
109
|
+
draggedHeaderStyle: PropTypes.object,
|
|
102
110
|
editModelPath: PropTypes.func,
|
|
103
111
|
filterCard: PropTypes.bool.isRequired,
|
|
104
112
|
filterContent: PropTypes.func,
|
|
@@ -287,7 +295,7 @@ export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
|
|
|
287
295
|
throw new Error(`Model class from collection '${collection.args.modelClass.modelClassData().name}' ` +
|
|
288
296
|
`didn't match model class on table: '${modelClass.modelClassData().name}'`);
|
|
289
297
|
}
|
|
290
|
-
return (_jsxs(View, { dataSet: this.
|
|
298
|
+
return (_jsxs(View, { dataSet: dataSets[`rootView-${this.className()}`] ||= { class: this.className() }, onLayout: this.tt.onContainerLayout, style: this.props.styles?.container, children: [showNoRecordsAvailableContent &&
|
|
291
299
|
_jsx("div", { className: "live-table--no-records-available-content", children: noRecordsAvailableContent({ models, qParams, overallCount }) }), showNoRecordsFoundContent &&
|
|
292
300
|
_jsx("div", { className: "live-table--no-records-found-content", children: noRecordsFoundContent({ models, qParams, overallCount }) }), showFilters &&
|
|
293
301
|
_jsx(Filters, { currentUser: currentUser, modelClass: modelClass, queryName: queryName, querySName: querySName }), (() => {
|
|
@@ -299,6 +307,15 @@ export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
|
|
|
299
307
|
}
|
|
300
308
|
})()] }));
|
|
301
309
|
}
|
|
310
|
+
/**
|
|
311
|
+
* Resolve the header title or custom header content.
|
|
312
|
+
* @param {object} [args]
|
|
313
|
+
* @param {Array<object>} [args.models]
|
|
314
|
+
* @param {object} [args.qParams]
|
|
315
|
+
* @param {object} [args.query]
|
|
316
|
+
* @param {object} [args.result]
|
|
317
|
+
* @returns {string|React.ReactNode}
|
|
318
|
+
*/
|
|
302
319
|
tableHeaderContent({ models, qParams, query, result } = {}) {
|
|
303
320
|
const { header, modelClass } = this.props;
|
|
304
321
|
if (typeof header == "function") {
|
|
@@ -311,7 +328,7 @@ export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
|
|
|
311
328
|
}
|
|
312
329
|
loadingContent({ models, qParams, query, result }) {
|
|
313
330
|
const { abilities, actionsContent, appHistory, card, className, collection, columns, controls, currentUser, defaultDateFormatName, defaultDateTimeFormatName, defaultParams, destroyEnabled, destroyMessage, editModelPath, filterCard, filterContent, filterSubmitButton, filterSubmitLabel, groupBy, header, identifier, modelClass, noRecordsAvailableContent, noRecordsFoundContent, onModelsLoaded, paginateContent, paginationComponent, preloads, queryMethod, queryName, select, selectColumns, styleUI, viewModelPath, workplace, ...restProps } = this.props;
|
|
314
|
-
const loadingContent = (_jsx(View, { dataSet:
|
|
331
|
+
const loadingContent = (_jsx(View, { dataSet: dataSets.loading ||= { class: "api-maker--table--loading" }, children: _jsx(Text, { children: this.t(".loading_dot_dot_dit", { defaultValue: "Loading..." }) }) }));
|
|
315
332
|
if (!card)
|
|
316
333
|
return loadingContent;
|
|
317
334
|
const safeModels = models || [];
|
|
@@ -344,6 +361,10 @@ export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
|
|
|
344
361
|
}
|
|
345
362
|
return abilitiesToLoad;
|
|
346
363
|
}
|
|
364
|
+
/**
|
|
365
|
+
* Decide between card/table rendering once data is ready.
|
|
366
|
+
* @returns {React.ReactNode}
|
|
367
|
+
*/
|
|
347
368
|
cardOrTable() {
|
|
348
369
|
const { abilities, actionsContent, appHistory, card, className, collection, columns, controls, currentUser, defaultDateFormatName, defaultDateTimeFormatName, defaultParams, destroyEnabled, destroyMessage, editModelPath, filterCard, filterContent, filterSubmitButton, filterSubmitLabel, groupBy, header, identifier, modelClass, noRecordsAvailableContent, noRecordsFoundContent, onModelsLoaded, paginateContent, paginationComponent, preloads, queryMethod, queryName, select, selectColumns, styleUI, viewModelPath, workplace, ...restProps } = this.props;
|
|
349
370
|
const { models, qParams, query, result } = digs(this.collection, "models", "qParams", "query", "result");
|
|
@@ -432,6 +453,16 @@ export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
|
|
|
432
453
|
}
|
|
433
454
|
return (_jsx(ModelRow, { cacheKey: model.cacheKey(), columns: this.s.columnsToShow, columnWidths: this.columnWidths(), events: this.tt.events, index: index, model: model, table: this, tableSettingFullCacheKey: this.s.tableSettingFullCacheKey }, model.id()));
|
|
434
455
|
};
|
|
456
|
+
/**
|
|
457
|
+
* Build the base style for a data column.
|
|
458
|
+
* @param {object} args
|
|
459
|
+
* @param {object} args.column
|
|
460
|
+
* @param {number} args.columnIndex
|
|
461
|
+
* @param {boolean} args.even
|
|
462
|
+
* @param {object} args.style
|
|
463
|
+
* @param {string} args.type
|
|
464
|
+
* @returns {object}
|
|
465
|
+
*/
|
|
435
466
|
styleForColumn = ({ column, columnIndex, even, style, type }) => {
|
|
436
467
|
const { styleUI } = this.p;
|
|
437
468
|
const defaultStyle = {
|
|
@@ -460,38 +491,63 @@ export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
|
|
|
460
491
|
const actualStyle = Object.assign(defaultStyle, style);
|
|
461
492
|
return actualStyle;
|
|
462
493
|
};
|
|
494
|
+
/**
|
|
495
|
+
* Build the base style for a header column.
|
|
496
|
+
* @param {object} args
|
|
497
|
+
* @param {object} args.column
|
|
498
|
+
* @param {number} args.columnIndex
|
|
499
|
+
* @param {object} args.style
|
|
500
|
+
* @param {string} args.type
|
|
501
|
+
* @returns {object}
|
|
502
|
+
*/
|
|
463
503
|
styleForHeader = ({ column, columnIndex, style, type }) => {
|
|
464
504
|
const { mdUp } = this.tt;
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
505
|
+
return this.cache(`headerStyle-${type || "default"}`, () => {
|
|
506
|
+
const defaultStyle = {
|
|
507
|
+
flexDirection: "row",
|
|
508
|
+
alignItems: "center",
|
|
509
|
+
padding: 8
|
|
510
|
+
};
|
|
511
|
+
if (type != "actions" && mdUp && this.p.styleUI) {
|
|
512
|
+
defaultStyle.borderRight = "1px solid #dbdbdb";
|
|
513
|
+
}
|
|
514
|
+
return Object.assign(defaultStyle, style);
|
|
515
|
+
}, [mdUp, this.p.styleUI, type, style]);
|
|
475
516
|
};
|
|
517
|
+
/**
|
|
518
|
+
* Provide a bold header text style.
|
|
519
|
+
* @returns {object}
|
|
520
|
+
*/
|
|
476
521
|
styleForHeaderText = () => {
|
|
477
|
-
return
|
|
522
|
+
return styles.headerTextStyle ||= { fontWeight: "bold" };
|
|
478
523
|
};
|
|
524
|
+
/**
|
|
525
|
+
* Style for a table row wrapper.
|
|
526
|
+
* @param {object} [args]
|
|
527
|
+
* @param {boolean} [args.even]
|
|
528
|
+
* @returns {object}
|
|
529
|
+
*/
|
|
479
530
|
styleForRow = ({ even } = {}) => {
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
531
|
+
return this.cache(`rowStyle-${even ? "even" : "odd"}`, () => {
|
|
532
|
+
const actualStyle = {
|
|
533
|
+
flex: 1,
|
|
534
|
+
alignItems: "stretch"
|
|
535
|
+
};
|
|
536
|
+
if (even && this.p.styleUI) {
|
|
537
|
+
actualStyle.backgroundColor = "#f5f5f5";
|
|
538
|
+
}
|
|
539
|
+
return actualStyle;
|
|
540
|
+
}, [even, this.p.styleUI]);
|
|
488
541
|
};
|
|
542
|
+
/**
|
|
543
|
+
* Style for the header row wrapper.
|
|
544
|
+
* @returns {object}
|
|
545
|
+
*/
|
|
489
546
|
styleForRowHeader = () => {
|
|
490
|
-
|
|
547
|
+
return this.cache("rowHeaderStyle", () => ({
|
|
491
548
|
flex: 1,
|
|
492
549
|
alignItems: "stretch"
|
|
493
|
-
};
|
|
494
|
-
return actualStyle;
|
|
550
|
+
}));
|
|
495
551
|
};
|
|
496
552
|
tableControls({ models, qParams, query, result } = {}) {
|
|
497
553
|
const { controls } = this.props;
|
|
@@ -514,8 +570,8 @@ export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
|
|
|
514
570
|
let from = ((currentPage - 1) * perPage) + 1;
|
|
515
571
|
if (to === 0)
|
|
516
572
|
from = 0;
|
|
517
|
-
return (_jsxs(View, { style:
|
|
518
|
-
_jsx(Text, { style:
|
|
573
|
+
return (_jsxs(View, { style: styles.tableFooterRootViewStyle ||= { flexDirection: "row", justifyContent: "space-between", marginTop: 10 }, children: [_jsxs(View, { dataSet: dataSets.showingCounts ||= { class: "showing-counts" }, style: styles.showingCounts ||= { flexDirection: "row" }, children: [_jsx(Text, { children: this.t(".showing_from_to_out_of_total", { defaultValue, from, to, total_count: totalCount }) }), this.p.workplace && this.s.currentWorkplaceCount !== null &&
|
|
574
|
+
_jsx(Text, { style: styles.xSelectedTextStyle ||= { marginLeft: 3 }, children: this.t(".x_selected", { defaultValue: "%{selected} selected.", selected: this.s.currentWorkplaceCount }) })] }), _jsx(View, { children: _jsx(Select, { className: "per-page-select", defaultValue: perPage, onChange: this.tt.onPerPageChanged, options: paginationOptions }) })] }));
|
|
519
575
|
}
|
|
520
576
|
className() {
|
|
521
577
|
const classNames = ["api-maker--table"];
|
|
@@ -524,30 +580,62 @@ export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
|
|
|
524
580
|
}
|
|
525
581
|
return classNames.join(" ");
|
|
526
582
|
}
|
|
583
|
+
/**
|
|
584
|
+
* Build per-column props for table cells.
|
|
585
|
+
* @param {object} column
|
|
586
|
+
* @returns {object}
|
|
587
|
+
*/
|
|
527
588
|
columnProps(column) {
|
|
528
|
-
|
|
589
|
+
let cacheKey = "default";
|
|
529
590
|
if (column.textCenter) {
|
|
530
|
-
|
|
531
|
-
props.style.textAlign = "center";
|
|
591
|
+
cacheKey = "center";
|
|
532
592
|
}
|
|
533
|
-
if (column.textRight) {
|
|
534
|
-
|
|
535
|
-
props.style.textAlign = "right";
|
|
593
|
+
else if (column.textRight) {
|
|
594
|
+
cacheKey = "right";
|
|
536
595
|
}
|
|
537
|
-
return
|
|
596
|
+
return this.cache(`columnProps-${cacheKey}`, () => {
|
|
597
|
+
const props = {};
|
|
598
|
+
if (column.textCenter) {
|
|
599
|
+
props.style ||= {};
|
|
600
|
+
props.style.textAlign = "center";
|
|
601
|
+
}
|
|
602
|
+
if (column.textRight) {
|
|
603
|
+
props.style ||= {};
|
|
604
|
+
props.style.textAlign = "right";
|
|
605
|
+
}
|
|
606
|
+
return props;
|
|
607
|
+
}, [column.textCenter, column.textRight]);
|
|
538
608
|
}
|
|
609
|
+
/**
|
|
610
|
+
* Build per-column props for header cells.
|
|
611
|
+
* @param {object} column
|
|
612
|
+
* @returns {object}
|
|
613
|
+
*/
|
|
539
614
|
headerProps(column) {
|
|
540
|
-
|
|
615
|
+
let cacheKey = "default";
|
|
541
616
|
if (column.textCenter) {
|
|
542
|
-
|
|
543
|
-
props.style.justifyContent = "center";
|
|
617
|
+
cacheKey = "center";
|
|
544
618
|
}
|
|
545
|
-
if (column.textRight) {
|
|
546
|
-
|
|
547
|
-
props.style.justifyContent = "end";
|
|
619
|
+
else if (column.textRight) {
|
|
620
|
+
cacheKey = "right";
|
|
548
621
|
}
|
|
549
|
-
return
|
|
622
|
+
return this.cache(`headerProps-${cacheKey}`, () => {
|
|
623
|
+
const props = {};
|
|
624
|
+
if (column.textCenter) {
|
|
625
|
+
props.style ||= {};
|
|
626
|
+
props.style.justifyContent = "center";
|
|
627
|
+
}
|
|
628
|
+
if (column.textRight) {
|
|
629
|
+
props.style ||= {};
|
|
630
|
+
props.style.justifyContent = "end";
|
|
631
|
+
}
|
|
632
|
+
return props;
|
|
633
|
+
}, [column.textCenter, column.textRight]);
|
|
550
634
|
}
|
|
635
|
+
/**
|
|
636
|
+
* Column widths keyed by identifier for table rows.
|
|
637
|
+
* @returns {object}
|
|
638
|
+
*/
|
|
551
639
|
columnWidths() {
|
|
552
640
|
const columnWidths = {};
|
|
553
641
|
for (const column of this.s.preparedColumns) {
|
|
@@ -556,7 +644,7 @@ export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
|
|
|
556
644
|
return columnWidths;
|
|
557
645
|
}
|
|
558
646
|
headersContentFromColumns = () => {
|
|
559
|
-
return (_jsx(DraggableSort, { data: this.s.columnsToShow, events: this.tt.draggableSortEvents, horizontal: true, keyExtractor: this.tt.dragListkeyExtractor, onItemMoved: this.tt.onItemMoved, onReordered: this.tt.onReordered, renderItem: this.tt.dragListRenderItemContent }));
|
|
647
|
+
return (_jsx(DraggableSort, { activeItemStyle: this.tt.draggedHeaderStyle(), data: this.s.columnsToShow, events: this.tt.draggableSortEvents, horizontal: true, keyExtractor: this.tt.dragListkeyExtractor, onItemMoved: this.tt.onItemMoved, onReordered: this.tt.onReordered, renderItem: this.tt.dragListRenderItemContent }));
|
|
560
648
|
};
|
|
561
649
|
dragListCacheKeyExtractor = (item) => `${item.tableSettingColumn.identifier()}-${this.s.resizing}`;
|
|
562
650
|
dragListkeyExtractor = (item) => item.tableSettingColumn.identifier();
|
|
@@ -569,6 +657,15 @@ export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
|
|
|
569
657
|
animatedPosition.setValue({ x, y });
|
|
570
658
|
}
|
|
571
659
|
};
|
|
660
|
+
/**
|
|
661
|
+
* Persist the new column ordering.
|
|
662
|
+
* @param {object} args
|
|
663
|
+
* @param {object} args.fromItem
|
|
664
|
+
* @param {object} args.toItem
|
|
665
|
+
* @param {number} args.fromPosition
|
|
666
|
+
* @param {number} args.toPosition
|
|
667
|
+
* @returns {Promise<void>}
|
|
668
|
+
*/
|
|
572
669
|
onReordered = async ({ fromItem, fromPosition, toItem, toPosition }) => {
|
|
573
670
|
if (fromPosition == toPosition)
|
|
574
671
|
return; // Only do requests and queries if changed
|
|
@@ -611,6 +708,17 @@ export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
|
|
|
611
708
|
return currentModelClass.humanAttributeName(column.attribute);
|
|
612
709
|
throw new Error("No 'label' or 'attribute' was given");
|
|
613
710
|
}
|
|
711
|
+
/**
|
|
712
|
+
* Provide styling for a dragged header item.
|
|
713
|
+
* @returns {object|undefined}
|
|
714
|
+
*/
|
|
715
|
+
draggedHeaderStyle = () => {
|
|
716
|
+
if (this.p.draggedHeaderStyle !== undefined)
|
|
717
|
+
return this.p.draggedHeaderStyle;
|
|
718
|
+
if (this.p.styleUI)
|
|
719
|
+
return undefined;
|
|
720
|
+
return styles.draggedHeaderStyleTransparent ||= { backgroundColor: "transparent" };
|
|
721
|
+
};
|
|
614
722
|
onFilterFormSubmit = () => this.submitFilter();
|
|
615
723
|
onRequestCloseSettings = () => this.setState({ showSettings: false });
|
|
616
724
|
onSettingsClicked = (e) => {
|
|
@@ -632,4 +740,4 @@ export default memo(shapeComponent(class ApiMakerTable extends BaseComponent {
|
|
|
632
740
|
};
|
|
633
741
|
submitFilterDebounce = debounce(this.tt.submitFilter);
|
|
634
742
|
}));
|
|
635
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInRhYmxlL3RhYmxlLmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsdUZBQXVGO0FBQ3ZGLDJGQUEyRjtBQUMzRiw0RUFBNEU7QUFDNUUsd0RBQXdEO0FBQ3hELE9BQU8sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUN6QyxPQUFPLEtBQUssRUFBRSxFQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUN2RSxPQUFPLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQ2hFLE9BQU8sYUFBYSxNQUFNLG1CQUFtQixDQUFBO0FBQzdDLE9BQU8sSUFBSSxNQUFNLG1CQUFtQixDQUFBO0FBQ3BDLE9BQU8sVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUNuQyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLGFBQWEsTUFBTSxxQkFBcUIsQ0FBQTtBQUMvQyxPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUE7QUFDL0IsT0FBTyxhQUFhLE1BQU0seUJBQXlCLENBQUE7QUFDbkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLE9BQU8sTUFBTSxpQkFBaUIsQ0FBQTtBQUNyQyxPQUFPLFFBQVEsTUFBTSx3QkFBd0IsQ0FBQTtBQUM3QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sU0FBUyxDQUFBO0FBQzVCLE9BQU8sTUFBTSxNQUFNLHFCQUFxQixDQUFBO0FBQ3hDLE9BQU8sWUFBWSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sWUFBWSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sSUFBSSxNQUFNLGVBQWUsQ0FBQTtBQUNoQyxPQUFPLEVBQUMsV0FBVyxFQUFD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QUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFBO1FBRTVDLElBQUksUUFBUSxDQUFDLEVBQUUsSUFBSSxLQUFLLEVBQUUsQ0FBQztZQUN6QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDLENBQUE7WUFDekQsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFBO1lBRTFELFdBQVcsQ0FBQyxPQUFPLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtRQUN6QyxDQUFDO1FBRUQsa0JBQWtCLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUV4RCxNQUFNLENBQUMsWUFBWSxDQUFDLGtCQUFrQixFQUFFLEVBQUMsVUFBVSxFQUFDLENBQUMsQ0FBQTtJQUN2RCxDQUFDLENBQUE7SUFFRCxvQkFBb0IsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsQ0FBQTtDQUN0RCxDQUFDLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGFycm93LWJvZHktc3R5bGUsIGltcG9ydC9uby1uYW1lZC1hcy1kZWZhdWx0LCBpbXBvcnQvbm8tdW5yZXNvbHZlZCAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tZXh0cmEtcGFyZW5zLCBuby1yZXR1cm4tYXNzaWduLCBuby11bnVzZWQtdmFycywgcmVhY3QvanN4LW1heC1kZXB0aCAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3QvanN4LW9uZS1leHByZXNzaW9uLXBlci1saW5lLCByZWFjdC9qc3gtc29ydC1wcm9wcyAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvc29ydC1wcm9wLXR5cGVzLCBzb3J0LWltcG9ydHMgKi9cbmltcG9ydCB7ZGlnLCBkaWdnLCBkaWdzfSBmcm9tIFwiZGlnZ2VyaXplXCJcbmltcG9ydCBSZWFjdCwge2NyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVJlZn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7QW5pbWF0ZWQsIFBsYXRmb3JtLCBQcmVzc2FibGUsIFZpZXd9IGZyb20gXCJyZWFjdC1uYXRpdmVcIlxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSBcIi4uL2Jhc2UtY29tcG9uZW50XCJcbmltcG9ydCBDYXJkIGZyb20gXCIuLi9ib290c3RyYXAvY2FyZFwiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgQ29sbGVjdGlvbiBmcm9tIFwiLi4vY29sbGVjdGlvbi5qc1wiXG5pbXBvcnQgY29sdW1uVmlzaWJsZSBmcm9tIFwiLi9jb2x1bW4tdmlzaWJsZS5qc1wiXG5pbXBvcnQgZGVib3VuY2UgZnJvbSBcImRlYm91bmNlXCJcbmltcG9ydCBEcmFnZ2FibGVTb3J0IGZyb20gXCIuLi9kcmFnZ2FibGUtc29ydC9pbmRleFwiXG5pbXBvcnQge0V2ZW50RW1pdHRlcn0gZnJvbSBcImV2ZW50ZW1pdHRlcjNcIlxuaW1wb3J0IEZpbHRlcnMgZnJvbSBcIi4vZmlsdGVycy9pbmRleFwiXG5pbXBvcnQgRmxhdExpc3QgZnJvbSBcIi4vY29tcG9uZW50cy9mbGF0LWxpc3RcIlxuaW1wb3J0IHtGb3JtfSBmcm9tIFwiLi4vZm9ybVwiXG5pbXBvcnQgSGVhZGVyIGZyb20gXCIuL2NvbXBvbmVudHMvaGVhZGVyXCJcbmltcG9ydCBIZWFkZXJDb2x1bW4gZnJvbSBcIi4vaGVhZGVyLWNvbHVtblwiXG5pbXBvcnQgSGVhZGVyU2VsZWN0IGZyb20gXCIuL2hlYWRlci1zZWxlY3RcIlxuaW1wb3J0IEljb24gZnJvbSBcIi4uL3V0aWxzL2ljb25cIlxuaW1wb3J0IHtpbmNvcnBvcmF0ZX0gZnJvbSBcImluY29ycG9yYXRvclwiXG5pbXBvcnQgKiBhcyBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCJcbmltcG9ydCBtZW1vIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9tZW1vLmpzXCJcbmltcG9ydCBtb2RlbENsYXNzUmVxdWlyZSBmcm9tIFwiLi4vbW9kZWwtY2xhc3MtcmVxdWlyZS5qc1wiXG5pbXBvcnQgTW9kZWxSb3cgZnJvbSBcIi4vbW9kZWwtcm93XCJcbmltcG9ydCBQYWdpbmF0ZSBmcm9tIFwiLi4vYm9vdHN0cmFwL3BhZ2luYXRlXCJcbmltcG9ydCBQYXJhbXMgZnJvbSBcIi4uL3BhcmFtcy5qc1wiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBSb3cgZnJvbSBcIi4vY29tcG9uZW50cy9yb3dcIlxuaW1wb3J0IHNlbGVjdENhbGN1bGF0b3IgZnJvbSBcIi4vc2VsZWN0LWNhbGN1bGF0b3IuanNcIlxuaW1wb3J0IFNlbGVjdCBmcm9tIFwiLi4vaW5wdXRzL3NlbGVjdFwiXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3MvaW5kZXhcIlxuaW1wb3J0IHtzaGFwZUNvbXBvbmVudH0gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL2J1aWxkL3NoYXBlLWNvbXBvbmVudC5qc1wiXG5pbXBvcnQgVGFibGVTZXR0aW5ncyBmcm9tIFwiLi90YWJsZS1zZXR0aW5ncy5qc1wiXG5pbXBvcnQgVGV4dCBmcm9tIFwiLi4vdXRpbHMvdGV4dFwiXG5pbXBvcnQgdW5pcXVuaXplIGZyb20gXCJ1bmlxdW5pemVcIlxuaW1wb3J0IHVzZUJyZWFrcG9pbnQgZnJvbSBcIi4uL3VzZS1icmVha3BvaW50LmpzXCJcbmltcG9ydCB1c2VDb2xsZWN0aW9uIGZyb20gXCIuLi91c2UtY29sbGVjdGlvbi5qc1wiXG5pbXBvcnQgdXNlSTE4biBmcm9tIFwiaTE4bi1vbi1zdGVyb2lkcy9zcmMvdXNlLWkxOG4ubWpzXCJcbmltcG9ydCB1c2VFdmVudEVtaXR0ZXIgZnJvbSBcIi4uL3VzZS1ldmVudC1lbWl0dGVyLmpzXCJcbmltcG9ydCB1c2VNb2RlbEV2ZW50IGZyb20gXCIuLi91c2UtbW9kZWwtZXZlbnQuanNcIlxuaW1wb3J0IHVzZVF1ZXJ5UGFyYW1zIGZyb20gXCJvbi1sb2NhdGlvbi1jaGFuZ2VkL2J1aWxkL3VzZS1xdWVyeS1wYXJhbXMuanNcIlxuaW1wb3J0IFdpZHRocyBmcm9tIFwiLi93aWR0aHNcIlxuaW1wb3J0IFdvcmtlclBsdWdpbnNDaGVja0FsbENoZWNrYm94IGZyb20gXCIuL3dvcmtlci1wbHVnaW5zLWNoZWNrLWFsbC1jaGVja2JveFwiXG5cbmNvbnN0IGRhdGFTZXRzID0ge31cbmNvbnN0IHBhZ2luYXRpb25PcHRpb25zID0gWzMwLCA2MCwgOTAsIFtcIkFsbFwiLCBcImFsbFwiXV1cbmNvbnN0IHN0eWxlcyA9IHt9XG5jb25zdCBUYWJsZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0KClcblxuY29uc3QgTGlzdEhlYWRlckNvbXBvbmVudCA9IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgTGlzdEhlYWRlckNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBzZXR1cCgpIHtcbiAgICB0aGlzLnVzZVN0YXRlcyh7XG4gICAgICBsYXN0VXBkYXRlOiBuZXcgRGF0ZSgpXG4gICAgfSlcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7bWRVcH0gPSB1c2VCcmVha3BvaW50KClcbiAgICBjb25zdCB0YWJsZUNvbnRleHRWYWx1ZSA9IHVzZUNvbnRleHQoVGFibGVDb250ZXh0KVxuICAgIGNvbnN0IHRhYmxlID0gdGFibGVDb250ZXh0VmFsdWUudGFibGVcbiAgICBjb25zdCB7Y29sbGVjdGlvbiwgZXZlbnRzLCBxdWVyeVdpdGhvdXRQYWdpbmF0aW9uLCB0fSA9IHRhYmxlLnR0XG4gICAgY29uc3Qge3F1ZXJ5fSA9IGRpZ3MoY29sbGVjdGlvbiwgXCJxdWVyeVwiKVxuXG4gICAgdXNlRXZlbnRFbWl0dGVyKGV2ZW50cywgXCJjb2x1bW5WaXNpYmlsaXR5VXBkYXRlZFwiLCB0aGlzLnR0Lm9uQ29sdW1uVmlzaWJpbGl0eVVwZGF0ZWQpXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJvdyBzdHlsZT17dGFibGUuc3R5bGVGb3JSb3dIZWFkZXIoKX0gdGVzdElEPVwiYXBpLW1ha2VyL3RhYmxlL2hlYWRlci1yb3dcIj5cbiAgICAgICAge3RhYmxlLnAud29ya3BsYWNlICYmIHRhYmxlLnMuY3VycmVudFdvcmtwbGFjZSAmJlxuICAgICAgICAgIDxIZWFkZXIgc3R5bGU9e3RhYmxlLnN0eWxlRm9ySGVhZGVyKHtzdHlsZToge3dpZHRoOiBtZFVwID8gNDEgOiB1bmRlZmluZWR9fSl9PlxuICAgICAgICAgICAgPFdvcmtlclBsdWdpbnNDaGVja0FsbENoZWNrYm94XG4gICAgICAgICAgICAgIGN1cnJlbnRXb3JrcGxhY2U9e3RhYmxlLnMuY3VycmVudFdvcmtwbGFjZX1cbiAgICAgICAgICAgICAgcXVlcnk9e3F1ZXJ5V2l0aG91dFBhZ2luYXRpb259XG4gICAgICAgICAgICAgIHN0eWxlPXt0aGlzLmNhY2hlKFwid29ya2VyUGxndWluc0NoZWNrQWxsQ2hlY2tib3hTdHlsZVwiLCB7bWFyZ2luSG9yaXpvbnRhbDogXCJhdXRvXCJ9KX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7IW1kVXAgJiZcbiAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3RoaXMuY2FjaGUoXCJzZWxlY3RBbGxGb3VuZFRleHRTdHlsZVwiLCB7bWFyZ2luTGVmdDogM30pfT5cbiAgICAgICAgICAgICAgICB7dChcIi5zZWxlY3RfYWxsX2ZvdW5kXCIsIHtkZWZhdWx0VmFsdWU6IFwiU2VsZWN0IGFsbCBmb3VuZFwifSl9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgfVxuICAgICAgICB7IW1kVXAgJiZcbiAgICAgICAgICA8SGVhZGVyIHN0eWxlPXt0YWJsZS5zdHlsZUZvckhlYWRlcih7c3R5bGU6IHt9fSl9PlxuICAgICAgICAgICAgPEhlYWRlclNlbGVjdCBwcmVwYXJlZENvbHVtbnM9e3RhYmxlLnMucHJlcGFyZWRDb2x1bW5zfSBxdWVyeT17cXVlcnl9IHRhYmxlPXt0YWJsZX0gLz5cbiAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgfVxuICAgICAgICB7bWRVcCAmJlxuICAgICAgICAgIDw+XG4gICAgICAgICAgICB7dGFibGUuaGVhZGVyc0NvbnRlbnRGcm9tQ29sdW1ucygpfVxuICAgICAgICAgICAgPEhlYWRlciBzdHlsZT17dGFibGUuc3R5bGVGb3JIZWFkZXIoe3N0eWxlOiB7fSwgdHlwZTogXCJhY3Rpb25zXCJ9KX0gLz5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgfVxuICAgICAgPC9Sb3c+XG4gICAgKVxuICB9XG5cbiAgb25Db2x1bW5WaXNpYmlsaXR5VXBkYXRlZCA9ICgpID0+IHRoaXMuc2V0U3RhdGUoe2xhc3RVcGRhdGU6IG5ldyBEYXRlKCl9KVxufSkpXG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgQXBpTWFrZXJUYWJsZSBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGNhcmQ6IHRydWUsXG4gICAgY3VycmVudFVzZXI6IG51bGwsXG4gICAgZGVzdHJveUVuYWJsZWQ6IHRydWUsXG4gICAgZmlsdGVyQ2FyZDogdHJ1ZSxcbiAgICBmaWx0ZXJTdWJtaXRCdXR0b246IHRydWUsXG4gICAgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudDogdW5kZWZpbmVkLFxuICAgIG5vUmVjb3Jkc0ZvdW5kQ29udGVudDogdW5kZWZpbmVkLFxuICAgIHByZWxvYWRzOiBbXSxcbiAgICBzZWxlY3Q6IHt9LFxuICAgIHN0eWxlVUk6IHRydWUsXG4gICAgd29ya3BsYWNlOiBmYWxzZVxuICB9XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBhYmlsaXRpZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgYWN0aW9uc0NvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGFwcEhpc3Rvcnk6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2FyZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY29sbGVjdGlvbjogUHJvcFR5cGVzLmluc3RhbmNlT2YoQ29sbGVjdGlvbiksXG4gICAgY29sdW1uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5LCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIGNvbnRyb2xzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBjdXJyZW50VXNlcjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBkZWZhdWx0RGF0ZUZvcm1hdE5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGVmYXVsdERhdGVUaW1lRm9ybWF0TmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkZWZhdWx0UGFyYW1zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGRlc3Ryb3lFbmFibGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGRlc3Ryb3lNZXNzYWdlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGVkaXRNb2RlbFBhdGg6IFByb3BUeXBlcy5mdW5jLFxuICAgIGZpbHRlckNhcmQ6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgZmlsdGVyQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgZmlsdGVyU3VibWl0TGFiZWw6IFByb3BUeXBlcy5hbnksXG4gICAgZ3JvdXBCeTogUHJvcFR5cGVzLmFycmF5LFxuICAgIGhlYWRlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgICBpZGVudGlmaWVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG1vZGVsQ2xhc3M6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgbm9SZWNvcmRzRm91bmRDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBvbk1vZGVsc0xvYWRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcGFnaW5hdGVDb250ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBwYWdpbmF0aW9uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcHJlbG9hZHM6IFByb3BUeXBlcy5hcnJheS5pc1JlcXVpcmVkLFxuICAgIHF1ZXJ5TWV0aG9kOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBxdWVyeU5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgc2VsZWN0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHNlbGVjdENvbHVtbnM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc3R5bGVzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHN0eWxlVUk6IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gICAgdmlld01vZGVsUGF0aDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgd29ya3BsYWNlOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkXG4gIH1cblxuICBkcmFnZ2FibGVTb3J0RXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcigpXG4gIGV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICB0YWJsZVNldHRpbmdzID0gbnVsbFxuXG4gIHNldHVwKCkge1xuICAgIGNvbnN0IHt0fSA9IHVzZUkxOG4oe25hbWVzcGFjZTogXCJqcy5hcGlfbWFrZXIudGFibGVcIn0pXG4gICAgY29uc3Qge25hbWU6IGJyZWFrcG9pbnQsIG1kVXB9ID0gdXNlQnJlYWtwb2ludCgpXG4gICAgY29uc3QgcXVlcnlQYXJhbXMgPSB1c2VRdWVyeVBhcmFtcygpXG5cbiAgICB0aGlzLnNldEluc3RhbmNlKHtcbiAgICAgIGJyZWFrcG9pbnQsXG4gICAgICBmaWx0ZXJGb3JtUmVmOiB1c2VSZWYoKSxcbiAgICAgIG1kVXAsXG4gICAgICB0XG4gICAgfSlcblxuICAgIGNvbnN0IGNvbGxlY3Rpb25LZXkgPSBkaWdnKHRoaXMucC5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCksIFwiY29sbGVjdGlvbktleVwiKVxuICAgIGxldCBxdWVyeU5hbWUgPSB0aGlzLnByb3BzLnF1ZXJ5TmFtZVxuXG4gICAgaWYgKCFxdWVyeU5hbWUpIHF1ZXJ5TmFtZSA9IGNvbGxlY3Rpb25LZXlcblxuICAgIGNvbnN0IHF1ZXJ5U05hbWUgPSBgJHtxdWVyeU5hbWV9X3NgXG5cbiAgICB0aGlzLnVzZVN0YXRlcyh7XG4gICAgICBjb2x1bW5zOiAoKSA9PiB0aGlzLmNvbHVtbnNBc0FycmF5KCksXG4gICAgICBjdXJyZW50V29ya3BsYWNlOiB1bmRlZmluZWQsXG4gICAgICBjdXJyZW50V29ya3BsYWNlQ291bnQ6IG51bGwsXG4gICAgICBmaWx0ZXJGb3JtOiBudWxsLFxuICAgICAgY29sdW1uc1RvU2hvdzogbnVsbCxcbiAgICAgIGRyYWdnZWRDb2x1bW46IG51bGwsXG4gICAgICBpZGVudGlmaWVyOiAoKSA9PiB0aGlzLnByb3BzLmlkZW50aWZpZXIgfHwgYCR7Y29sbGVjdGlvbktleX0tZGVmYXVsdGAsXG4gICAgICBsYXN0VXBkYXRlOiAoKSA9PiBuZXcgRGF0ZSgpLFxuICAgICAgcHJlbG9hZDogdW5kZWZpbmVkLFxuICAgICAgcHJlcGFyZWRDb2x1bW5zOiB1bmRlZmluZWQsXG4gICAgICBxdWVyeU5hbWUsXG4gICAgICBxdWVyeVFOYW1lOiAoKSA9PiBgJHtxdWVyeU5hbWV9X3FgLFxuICAgICAgcXVlcnlQYWdlTmFtZTogKCkgPT4gYCR7cXVlcnlOYW1lfV9wYWdlYCxcbiAgICAgIHF1ZXJ5U05hbWUsXG4gICAgICByZXNpemluZzogZmFsc2UsXG4gICAgICBzaG93RmlsdGVyczogKCkgPT4gQm9vbGVhbihxdWVyeVBhcmFtc1txdWVyeVNOYW1lXSksXG4gICAgICBzaG93U2V0dGluZ3M6IGZhbHNlLFxuICAgICAgdGFibGVTZXR0aW5nOiB1bmRlZmluZWQsXG4gICAgICB0YWJsZVNldHRpbmdMb2FkZWQ6IGZhbHNlLFxuICAgICAgdGFibGVTZXR0aW5nRnVsbENhY2hlS2V5OiB1bmRlZmluZWQsXG4gICAgICB3aWR0aDogdW5kZWZpbmVkLFxuICAgICAgd2lkdGhzOiBudWxsXG4gICAgfSlcblxuICAgIHRoaXMudGFibGVDb250ZXh0VmFsdWUgPSB1c2VNZW1vKFxuICAgICAgKCkgPT4gKHtcbiAgICAgICAgY2FjaGVLZXk6IHRoaXMucy50YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXksXG4gICAgICAgIGxhc3RVcGRhdGU6IHRoaXMucy5sYXN0VXBkYXRlLFxuICAgICAgICByZXNpemluZzogdGhpcy5zLnJlc2l6aW5nLFxuICAgICAgICB0YWJsZTogdGhpc1xuICAgICAgfSksXG4gICAgICBbdGhpcy5zLmxhc3RVcGRhdGUsIHRoaXMucy5yZXNpemluZywgdGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleV1cbiAgICApXG5cbiAgICB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnByb3BzLndvcmtwbGFjZSkge1xuICAgICAgICB0aGlzLmxvYWRDdXJyZW50V29ya3BsYWNlKCkudGhlbigoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkQ3VycmVudFdvcmtwbGFjZUNvdW50KClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LCBbdGhpcy5wLmN1cnJlbnRVc2VyPy5pZCgpXSlcblxuICAgIHVzZU1lbW8oKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnR0LnRhYmxlU2V0dGluZ3MgJiYgdGhpcy5zLndpZHRoKSB7XG4gICAgICAgIHRoaXMubG9hZFRhYmxlU2V0dGluZygpXG4gICAgICB9XG4gICAgfSwgW3RoaXMucC5jdXJyZW50VXNlcj8uaWQoKSwgdGhpcy5zLndpZHRoXSlcblxuICAgIHVzZU1vZGVsRXZlbnQodGhpcy5zLmN1cnJlbnRXb3JrcGxhY2UsIFwid29ya3BsYWNlX2xpbmtzX2NyZWF0ZWRcIiwgdGhpcy50dC5vbkxpbmtzQ3JlYXRlZClcbiAgICB1c2VNb2RlbEV2ZW50KHRoaXMucy5jdXJyZW50V29ya3BsYWNlLCBcIndvcmtwbGFjZV9saW5rc19kZXN0cm95ZWRcIiwgdGhpcy50dC5vbkxpbmtzRGVzdHJveWVkKVxuXG4gICAgbGV0IGNvbGxlY3Rpb25SZWFkeSA9IHRydWVcbiAgICBsZXQgc2VsZWN0XG5cbiAgICBpZiAoIXRoaXMucy5wcmVwYXJlZENvbHVtbnMpIHtcbiAgICAgIGNvbGxlY3Rpb25SZWFkeSA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKGNvbGxlY3Rpb25SZWFkeSkge1xuICAgICAgc2VsZWN0ID0gc2VsZWN0Q2FsY3VsYXRvcih7dGFibGU6IHRoaXN9KVxuICAgIH1cblxuICAgIHRoaXMuY29sbGVjdGlvbiA9IHVzZUNvbGxlY3Rpb24oe1xuICAgICAgYWJpbGl0aWVzOiB0aGlzLmFiaWxpdGllc1RvTG9hZCgpLFxuICAgICAgZGVmYXVsdFBhcmFtczogdGhpcy5wcm9wcy5kZWZhdWx0UGFyYW1zLFxuICAgICAgY29sbGVjdGlvbjogdGhpcy5wcm9wcy5jb2xsZWN0aW9uLFxuICAgICAgZ3JvdXBCeTogdGhpcy5wcm9wcy5ncm91cEJ5LFxuICAgICAgaWZDb25kaXRpb246IGNvbGxlY3Rpb25SZWFkeSxcbiAgICAgIG1vZGVsQ2xhc3M6IHRoaXMucHJvcHMubW9kZWxDbGFzcyxcbiAgICAgIG9uTW9kZWxzTG9hZGVkOiB0aGlzLnByb3BzLm9uTW9kZWxzTG9hZGVkLFxuICAgICAgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudDogdGhpcy5wcm9wcy5ub1JlY29yZHNBdmFpbGFibGVDb250ZW50LFxuICAgICAgbm9SZWNvcmRzRm91bmRDb250ZW50OiB0aGlzLnByb3BzLm5vUmVjb3Jkc0ZvdW5kQ29udGVudCxcbiAgICAgIHBhZ2luYXRpb246IHRydWUsXG4gICAgICBwcmVsb2FkczogdGhpcy5zdGF0ZS5wcmVsb2FkLFxuICAgICAgcXVlcnlNZXRob2Q6IHRoaXMucHJvcHMucXVlcnlNZXRob2QsXG4gICAgICBxdWVyeU5hbWUsXG4gICAgICBzZWxlY3QsXG4gICAgICBzZWxlY3RDb2x1bW5zOiB0aGlzLnByb3BzLnNlbGVjdENvbHVtbnNcbiAgICB9KVxuICAgIHRoaXMucXVlcnlXaXRob3V0UGFnaW5hdGlvbiA9IHVzZU1lbW8oXG4gICAgICAoKSA9PiB0aGlzLmNvbGxlY3Rpb24/LnF1ZXJ5Py5jbG9uZSgpPy5leGNlcHQoXCJwYWdlXCIpLFxuICAgICAgW3RoaXMuY29sbGVjdGlvbi5xdWVyeV1cbiAgICApXG5cbiAgICB1c2VFdmVudEVtaXR0ZXIodGhpcy50dC5kcmFnZ2FibGVTb3J0RXZlbnRzLCBcIm9uRHJhZ1N0YXJ0XCIsIHRoaXMudHQub25EcmFnU3RhcnQpXG4gICAgdXNlRXZlbnRFbWl0dGVyKHRoaXMudHQuZHJhZ2dhYmxlU29ydEV2ZW50cywgXCJvbkRyYWdFbmRBbmltYXRpb25cIiwgdGhpcy50dC5vbkRyYWdFbmRBbmltYXRpb24pXG4gICAgdXNlRXZlbnRFbWl0dGVyKHRoaXMudHQuZXZlbnRzLCBcImNvbHVtblZpc2liaWxpdHlVcGRhdGVkXCIsIHRoaXMudHQub25Db2x1bW5WaXNpYmlsaXR5VXBkYXRlZClcbiAgfVxuXG4gIG9uQ29sdW1uVmlzaWJpbGl0eVVwZGF0ZWQgPSAoKSA9PiB0aGlzLnNldFN0YXRlKHtjb2x1bW5zVG9TaG93OiB0aGlzLmdldENvbHVtbnNUb1Nob3codGhpcy5zLmNvbHVtbnMpLCBsYXN0VXBkYXRlOiBuZXcgRGF0ZSgpfSlcbiAgb25EcmFnU3RhcnQgPSAoe2l0ZW19KSA9PiBpdGVtLmFuaW1hdGVkWkluZGV4LnNldFZhbHVlKDk5OTkpXG4gIG9uRHJhZ0VuZEFuaW1hdGlvbiA9ICh7aXRlbX0pID0+IGl0ZW0uYW5pbWF0ZWRaSW5kZXguc2V0VmFsdWUoMClcblxuICBhc3luYyBsb2FkQ3VycmVudFdvcmtwbGFjZSgpIHtcbiAgICBjb25zdCBXb3JrcGxhY2UgPSBtb2RlbENsYXNzUmVxdWlyZShcIldvcmtwbGFjZVwiKVxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFdvcmtwbGFjZS5jdXJyZW50KClcbiAgICBjb25zdCBjdXJyZW50V29ya3BsYWNlID0gZGlnKHJlc3VsdCwgXCJjdXJyZW50XCIsIDApXG5cbiAgICB0aGlzLnNldFN0YXRlKHtjdXJyZW50V29ya3BsYWNlfSlcbiAgfVxuXG4gIGFzeW5jIGxvYWRDdXJyZW50V29ya3BsYWNlQ291bnQoKSB7XG4gICAgaWYgKCF0aGlzLnMuY3VycmVudFdvcmtwbGFjZSkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7Y3VycmVudFdvcmtwbGFjZUNvdW50OiAwfSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IFdvcmtwbGFjZUxpbmsgPSBtb2RlbENsYXNzUmVxdWlyZShcIldvcmtwbGFjZUxpbmtcIilcbiAgICBjb25zdCBjdXJyZW50V29ya3BsYWNlQ291bnQgPSBhd2FpdCBXb3JrcGxhY2VMaW5rXG4gICAgICAucmFuc2Fjayh7XG4gICAgICAgIHJlc291cmNlX3R5cGVfZXE6IHRoaXMucC5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZSxcbiAgICAgICAgd29ya3BsYWNlX2lkX2VxOiB0aGlzLnMuY3VycmVudFdvcmtwbGFjZS5pZCgpXG4gICAgICB9KVxuICAgICAgLmNvdW50KClcblxuICAgIHRoaXMuc2V0U3RhdGUoe2N1cnJlbnRXb3JrcGxhY2VDb3VudH0pXG4gIH1cblxuICBnZXRDb2x1bW5zVG9TaG93KGNvbHVtbnMpIHtcbiAgICByZXR1cm4gY29sdW1uc1xuICAgICAgLmZpbHRlcigoe2NvbHVtbiwgdGFibGVTZXR0aW5nQ29sdW1ufSkgPT4gY29sdW1uVmlzaWJsZShjb2x1bW4sIHRhYmxlU2V0dGluZ0NvbHVtbikpXG4gICAgICAuc29ydCgoYSwgYikgPT4gYS50YWJsZVNldHRpbmdDb2x1bW4ucG9zaXRpb24oKSAtIGIudGFibGVTZXR0aW5nQ29sdW1uLnBvc2l0aW9uKCkpXG4gIH1cblxuICBhc3luYyBsb2FkVGFibGVTZXR0aW5nKCkge1xuICAgIHRoaXMudGFibGVTZXR0aW5ncyA9IG5ldyBUYWJsZVNldHRpbmdzKHt0YWJsZTogdGhpc30pXG5cbiAgICBjb25zdCB0YWJsZVNldHRpbmcgPSBhd2FpdCB0aGlzLnRhYmxlU2V0dGluZ3MubG9hZEV4aXN0aW5nT3JDcmVhdGVUYWJsZVNldHRpbmdzKClcblxuICAgIGlmICghdGFibGVTZXR0aW5nKSB0aHJvdyBuZXcgRXJyb3IoXCJObyB0YWJsZVNldHRpbmcgcmV0dXJuZWQgYnkgdGFibGVTZXR0aW5ncy5sb2FkRXhpc3RpbmdPckNyZWF0ZVRhYmxlU2V0dGluZ3MoKVwiKVxuXG4gICAgY29uc3Qge2NvbHVtbnMsIHByZWxvYWR9ID0gdGhpcy50YWJsZVNldHRpbmdzLnByZXBhcmVkQ29sdW1ucyh0YWJsZVNldHRpbmcpXG4gICAgY29uc3Qge3dpZHRofSA9IHRoaXMuc1xuICAgIGNvbnN0IHdpZHRocyA9IG5ldyBXaWR0aHMoe2NvbHVtbnMsIHRhYmxlOiB0aGlzLCB3aWR0aH0pXG4gICAgY29uc3QgY29sdW1uc1RvU2hvdyA9IHRoaXMuZ2V0Q29sdW1uc1RvU2hvdyhjb2x1bW5zKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjb2x1bW5zLFxuICAgICAgY29sdW1uc1RvU2hvdyxcbiAgICAgIHByZXBhcmVkQ29sdW1uczogY29sdW1ucyxcbiAgICAgIHByZWxvYWQ6IHRoaXMubWVyZ2VkUHJlbG9hZHMocHJlbG9hZCksXG4gICAgICB0YWJsZVNldHRpbmcsXG4gICAgICB0YWJsZVNldHRpbmdMb2FkZWQ6IHRydWUsXG4gICAgICB0YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXk6IHRhYmxlU2V0dGluZy5mdWxsQ2FjaGVLZXkoKSxcbiAgICAgIHdpZHRoc1xuICAgIH0pXG4gIH1cblxuICB1cGRhdGVTZXR0aW5nc0Z1bGxDYWNoZUtleSA9ICgpID0+IHRoaXMuc2V0U3RhdGUoe3RhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleTogdGhpcy5zdGF0ZS50YWJsZVNldHRpbmcuZnVsbENhY2hlS2V5KCl9KVxuXG4gIGNvbHVtbnNBc0FycmF5ID0gKCkgPT4ge1xuICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5jb2x1bW5zID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcHMuY29sdW1ucygpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucHJvcHMuY29sdW1uc1xuICB9XG5cbiAgbWVyZ2VkUHJlbG9hZHMocHJlbG9hZCkge1xuICAgIGNvbnN0IHtwcmVsb2Fkc30gPSB0aGlzLnByb3BzXG4gICAgbGV0IG1lcmdlZFByZWxvYWRzID0gW11cblxuICAgIGlmIChwcmVsb2FkcykgbWVyZ2VkUHJlbG9hZHMgPSBtZXJnZWRQcmVsb2Fkcy5jb25jYXQocHJlbG9hZHMpXG4gICAgaWYgKHByZWxvYWQpIG1lcmdlZFByZWxvYWRzID0gbWVyZ2VkUHJlbG9hZHMuY29uY2F0KHByZWxvYWQpXG5cbiAgICByZXR1cm4gdW5pcXVuaXplKG1lcmdlZFByZWxvYWRzKVxuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHttb2RlbENsYXNzLCBub1JlY29yZHNBdmFpbGFibGVDb250ZW50LCBub1JlY29yZHNGb3VuZENvbnRlbnR9ID0gdGhpcy5wXG4gICAgY29uc3Qge2NvbGxlY3Rpb24sIGN1cnJlbnRVc2VyfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7cXVlcnlOYW1lLCBxdWVyeVNOYW1lLCBzaG93RmlsdGVyc30gPSB0aGlzLnNcbiAgICBjb25zdCB7XG4gICAgICBtb2RlbHMsXG4gICAgICBvdmVyYWxsQ291bnQsXG4gICAgICBxUGFyYW1zLFxuICAgICAgcXVlcnksXG4gICAgICByZXN1bHQsXG4gICAgICBzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCxcbiAgICAgIHNob3dOb1JlY29yZHNGb3VuZENvbnRlbnRcbiAgICB9ID0gZGlncyhcbiAgICAgIHRoaXMuY29sbGVjdGlvbixcbiAgICAgIFwibW9kZWxzXCIsXG4gICAgICBcIm92ZXJhbGxDb3VudFwiLFxuICAgICAgXCJxUGFyYW1zXCIsXG4gICAgICBcInF1ZXJ5XCIsXG4gICAgICBcInJlc3VsdFwiLFxuICAgICAgXCJzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudFwiLFxuICAgICAgXCJzaG93Tm9SZWNvcmRzRm91bmRDb250ZW50XCJcbiAgICApXG5cbiAgICBpZiAoY29sbGVjdGlvbiAmJiBjb2xsZWN0aW9uLmFyZ3MubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWUgIT0gbW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE1vZGVsIGNsYXNzIGZyb20gY29sbGVjdGlvbiAnJHtjb2xsZWN0aW9uLmFyZ3MubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWV9JyBgICtcbiAgICAgICAgYGRpZG4ndCBtYXRjaCBtb2RlbCBjbGFzcyBvbiB0YWJsZTogJyR7bW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWV9J2BcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXdcbiAgICAgICAgZGF0YVNldD17dGhpcy5jYWNoZShcInJvb3RWaWV3RGF0YVNldFwiLCB7Y2xhc3M6IHRoaXMuY2xhc3NOYW1lKCl9LCBbdGhpcy5jbGFzc05hbWUoKV0pfVxuICAgICAgICBvbkxheW91dD17dGhpcy50dC5vbkNvbnRhaW5lckxheW91dH1cbiAgICAgICAgc3R5bGU9e3RoaXMucHJvcHMuc3R5bGVzPy5jb250YWluZXJ9XG4gICAgICA+XG4gICAgICAgIHtzaG93Tm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCAmJlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGl2ZS10YWJsZS0tbm8tcmVjb3Jkcy1hdmFpbGFibGUtY29udGVudFwiPlxuICAgICAgICAgICAge25vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQoe21vZGVscywgcVBhcmFtcywgb3ZlcmFsbENvdW50fSl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAge3Nob3dOb1JlY29yZHNGb3VuZENvbnRlbnQgJiZcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImxpdmUtdGFibGUtLW5vLXJlY29yZHMtZm91bmQtY29udGVudFwiPlxuICAgICAgICAgICAge25vUmVjb3Jkc0ZvdW5kQ29udGVudCh7bW9kZWxzLCBxUGFyYW1zLCBvdmVyYWxsQ291bnR9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICB7c2hvd0ZpbHRlcnMgJiZcbiAgICAgICAgICA8RmlsdGVycyBjdXJyZW50VXNlcj17Y3VycmVudFVzZXJ9IG1vZGVsQ2xhc3M9e21vZGVsQ2xhc3N9IHF1ZXJ5TmFtZT17cXVlcnlOYW1lfSBxdWVyeVNOYW1lPXtxdWVyeVNOYW1lfSAvPlxuICAgICAgICB9XG4gICAgICAgIHsoKCkgPT4ge1xuICAgICAgICAgIGlmIChxUGFyYW1zICYmIHF1ZXJ5ICYmIHJlc3VsdCAmJiBtb2RlbHMgJiYgIXNob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50ICYmICFzaG93Tm9SZWNvcmRzRm91bmRDb250ZW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYXJkT3JUYWJsZSgpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmxvYWRpbmdDb250ZW50KHttb2RlbHMsIHFQYXJhbXMsIHF1ZXJ5LCByZXN1bHR9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSkoKX1cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICB0YWJsZUhlYWRlckNvbnRlbnQgKHttb2RlbHMsIHFQYXJhbXMsIHF1ZXJ5LCByZXN1bHR9ID0ge30pIHtcbiAgICBjb25zdCB7aGVhZGVyLCBtb2RlbENsYXNzfSA9IHRoaXMucHJvcHNcblxuICAgIGlmICh0eXBlb2YgaGVhZGVyID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGhlYWRlcih7bW9kZWxzLCBxUGFyYW1zLCBxdWVyeSwgcmVzdWx0fSlcbiAgICB9IGVsc2UgaWYgKGhlYWRlcikge1xuICAgICAgcmV0dXJuIGhlYWRlclxuICAgIH1cblxuICAgIHJldHVybiBtb2RlbENsYXNzLm1vZGVsTmFtZSgpLmh1bWFuKHtjb3VudDogMn0pXG4gIH1cblxuICBsb2FkaW5nQ29udGVudCAoe21vZGVscywgcVBhcmFtcywgcXVlcnksIHJlc3VsdH0pIHtcbiAgICBjb25zdCB7XG4gICAgICBhYmlsaXRpZXMsXG4gICAgICBhY3Rpb25zQ29udGVudCxcbiAgICAgIGFwcEhpc3RvcnksXG4gICAgICBjYXJkLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sbGVjdGlvbixcbiAgICAgIGNvbHVtbnMsXG4gICAgICBjb250cm9scyxcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgZGVmYXVsdERhdGVGb3JtYXROYW1lLFxuICAgICAgZGVmYXVsdERhdGVUaW1lRm9ybWF0TmFtZSxcbiAgICAgIGRlZmF1bHRQYXJhbXMsXG4gICAgICBkZXN0cm95RW5hYmxlZCxcbiAgICAgIGRlc3Ryb3lNZXNzYWdlLFxuICAgICAgZWRpdE1vZGVsUGF0aCxcbiAgICAgIGZpbHRlckNhcmQsXG4gICAgICBmaWx0ZXJDb250ZW50LFxuICAgICAgZmlsdGVyU3VibWl0QnV0dG9uLFxuICAgICAgZmlsdGVyU3VibWl0TGFiZWwsXG4gICAgICBncm91cEJ5LFxuICAgICAgaGVhZGVyLFxuICAgICAgaWRlbnRpZmllcixcbiAgICAgIG1vZGVsQ2xhc3MsXG4gICAgICBub1JlY29yZHNBdmFpbGFibGVDb250ZW50LFxuICAgICAgbm9SZWNvcmRzRm91bmRDb250ZW50LFxuICAgICAgb25Nb2RlbHNMb2FkZWQsXG4gICAgICBwYWdpbmF0ZUNvbnRlbnQsXG4gICAgICBwYWdpbmF0aW9uQ29tcG9uZW50LFxuICAgICAgcHJlbG9hZHMsXG4gICAgICBxdWVyeU1ldGhvZCxcbiAgICAgIHF1ZXJ5TmFtZSxcbiAgICAgIHNlbGVjdCxcbiAgICAgIHNlbGVjdENvbHVtbnMsXG4gICAgICBzdHlsZVVJLFxuICAgICAgdmlld01vZGVsUGF0aCxcbiAgICAgIHdvcmtwbGFjZSxcbiAgICAgIC4uLnJlc3RQcm9wc1xuICAgIH0gPSB0aGlzLnByb3BzXG5cbiAgICBjb25zdCBsb2FkaW5nQ29udGVudCA9IChcbiAgICAgIDxWaWV3IGRhdGFTZXQ9e3RoaXMuY2FjaGUoXCJsb2FkaW5nRGF0YVNldFwiLCB7Y2xhc3M6IFwiYXBpLW1ha2VyLS10YWJsZS0tbG9hZGluZ1wifSl9PlxuICAgICAgICA8VGV4dD57dGhpcy50KFwiLmxvYWRpbmdfZG90X2RvdF9kaXRcIiwge2RlZmF1bHRWYWx1ZTogXCJMb2FkaW5nLi4uXCJ9KX08L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuXG4gICAgaWYgKCFjYXJkKSByZXR1cm4gbG9hZGluZ0NvbnRlbnRcblxuICAgIGNvbnN0IHNhZmVNb2RlbHMgPSBtb2RlbHMgfHwgW11cbiAgICBjb25zdCBzYWZlQXJncyA9IHttb2RlbHM6IHNhZmVNb2RlbHMsIHFQYXJhbXMsIHF1ZXJ5LCByZXN1bHR9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPENhcmRcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFwibGl2ZS10YWJsZS0tdGFibGUtY2FyZFwiLCBcIm1iLTRcIiwgY2xhc3NOYW1lKX1cbiAgICAgICAgY29udHJvbHM9e3RoaXMudGFibGVDb250cm9scyhzYWZlQXJncyl9XG4gICAgICAgIGhlYWRlcj17dGhpcy50YWJsZUhlYWRlckNvbnRlbnQoc2FmZUFyZ3MpfVxuICAgICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgPlxuICAgICAgICB7bG9hZGluZ0NvbnRlbnR9XG4gICAgICA8L0NhcmQ+XG4gICAgKVxuICB9XG5cbiAgYWJpbGl0aWVzVG9Mb2FkICgpIHtcbiAgICBjb25zdCBhYmlsaXRpZXNUb0xvYWQgPSB7fVxuICAgIGNvbnN0IHthYmlsaXRpZXMsIG1vZGVsQ2xhc3N9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IG93bkFiaWxpdGllcyA9IFtdXG5cbiAgICBpZiAodGhpcy5wcm9wcy5kZXN0cm95RW5hYmxlZCkgb3duQWJpbGl0aWVzLnB1c2goXCJkZXN0cm95XCIpXG4gICAgaWYgKHRoaXMucHJvcHMuZWRpdE1vZGVsUGF0aCkgb3duQWJpbGl0aWVzLnB1c2goXCJlZGl0XCIpXG4gICAgaWYgKHRoaXMucHJvcHMudmlld01vZGVsUGF0aCkgb3duQWJpbGl0aWVzLnB1c2goXCJzaG93XCIpXG5cbiAgICBpZiAob3duQWJpbGl0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1vZGVsQ2xhc3NOYW1lID0gZGlnZyhtb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCksIFwibmFtZVwiKVxuXG4gICAgICBhYmlsaXRpZXNUb0xvYWRbbW9kZWxDbGFzc05hbWVdID0gb3duQWJpbGl0aWVzXG4gICAgfVxuXG4gICAgaWYgKGFiaWxpdGllcykge1xuICAgICAgZm9yIChjb25zdCBtb2RlbE5hbWUgaW4gYWJpbGl0aWVzKSB7XG4gICAgICAgIGlmICghKG1vZGVsTmFtZSBpbiBhYmlsaXRpZXNUb0xvYWQpKSB7XG4gICAgICAgICAgYWJpbGl0aWVzVG9Mb2FkW21vZGVsTmFtZV0gPSBbXVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBhYmlsaXR5IG9mIGFiaWxpdGllc1ttb2RlbE5hbWVdKSB7XG4gICAgICAgICAgYWJpbGl0aWVzVG9Mb2FkW21vZGVsTmFtZV0ucHVzaChhYmlsaXR5KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFiaWxpdGllc1RvTG9hZFxuICB9XG5cbiAgY2FyZE9yVGFibGUgKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFiaWxpdGllcyxcbiAgICAgIGFjdGlvbnNDb250ZW50LFxuICAgICAgYXBwSGlzdG9yeSxcbiAgICAgIGNhcmQsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xsZWN0aW9uLFxuICAgICAgY29sdW1ucyxcbiAgICAgIGNvbnRyb2xzLFxuICAgICAgY3VycmVudFVzZXIsXG4gICAgICBkZWZhdWx0RGF0ZUZvcm1hdE5hbWUsXG4gICAgICBkZWZhdWx0RGF0ZVRpbWVGb3JtYXROYW1lLFxuICAgICAgZGVmYXVsdFBhcmFtcyxcbiAgICAgIGRlc3Ryb3lFbmFibGVkLFxuICAgICAgZGVzdHJveU1lc3NhZ2UsXG4gICAgICBlZGl0TW9kZWxQYXRoLFxuICAgICAgZmlsdGVyQ2FyZCxcbiAgICAgIGZpbHRlckNvbnRlbnQsXG4gICAgICBmaWx0ZXJTdWJtaXRCdXR0b24sXG4gICAgICBmaWx0ZXJTdWJtaXRMYWJlbCxcbiAgICAgIGdyb3VwQnksXG4gICAgICBoZWFkZXIsXG4gICAgICBpZGVudGlmaWVyLFxuICAgICAgbW9kZWxDbGFzcyxcbiAgICAgIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQsXG4gICAgICBub1JlY29yZHNGb3VuZENvbnRlbnQsXG4gICAgICBvbk1vZGVsc0xvYWRlZCxcbiAgICAgIHBhZ2luYXRlQ29udGVudCxcbiAgICAgIHBhZ2luYXRpb25Db21wb25lbnQsXG4gICAgICBwcmVsb2FkcyxcbiAgICAgIHF1ZXJ5TWV0aG9kLFxuICAgICAgcXVlcnlOYW1lLFxuICAgICAgc2VsZWN0LFxuICAgICAgc2VsZWN0Q29sdW1ucyxcbiAgICAgIHN0eWxlVUksXG4gICAgICB2aWV3TW9kZWxQYXRoLFxuICAgICAgd29ya3BsYWNlLFxuICAgICAgLi4ucmVzdFByb3BzXG4gICAgfSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7bW9kZWxzLCBxUGFyYW1zLCBxdWVyeSwgcmVzdWx0fSA9IGRpZ3ModGhpcy5jb2xsZWN0aW9uLCBcIm1vZGVsc1wiLCBcInFQYXJhbXNcIiwgXCJxdWVyeVwiLCBcInJlc3VsdFwiKVxuXG4gICAgY29uc3QgaGVhZGVyQ29udGVudCA9IHRoaXMudGFibGVIZWFkZXJDb250ZW50KHttb2RlbHMsIHFQYXJhbXMsIHF1ZXJ5LCByZXN1bHR9KVxuICAgIGxldCBQYWdpbmF0aW9uQ29tcG9uZW50XG5cbiAgICBpZiAoIXBhZ2luYXRlQ29udGVudCkge1xuICAgICAgaWYgKHBhZ2luYXRpb25Db21wb25lbnQpIHtcbiAgICAgICAgUGFnaW5hdGlvbkNvbXBvbmVudCA9IHBhZ2luYXRpb25Db21wb25lbnRcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFBhZ2luYXRpb25Db21wb25lbnQgPSBQYWdpbmF0ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGZsYXRMaXN0ID0gKFxuICAgICAgPFRhYmxlQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17dGhpcy50dC50YWJsZUNvbnRleHRWYWx1ZX0+XG4gICAgICAgIDxGbGF0TGlzdFxuICAgICAgICAgIGRhdGE9e21vZGVsc31cbiAgICAgICAgICBkYXRhU2V0PXtkYXRhU2V0c1tgZmxhdExpc3QtJHtjbGFzc05hbWV9LSR7dGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleX1gXSB8fD0ge1xuICAgICAgICAgICAgY2xhc3M6IGNsYXNzTmFtZXMoXCJhcGktbWFrZXItLXRhYmxlXCIsIGNsYXNzTmFtZSksXG4gICAgICAgICAgICBjYWNoZUtleTogdGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleSxcbiAgICAgICAgICAgIGxhc3RVcGRhdGU6IHRoaXMucy5sYXN0VXBkYXRlXG4gICAgICAgICAgfX1cbiAgICAgICAgICBleHRyYURhdGE9e3RoaXMucy5sYXN0VXBkYXRlfVxuICAgICAgICAgIGtleUV4dHJhY3Rvcj17dGhpcy50dC5rZXlFeHRyYXRvcn1cbiAgICAgICAgICBMaXN0SGVhZGVyQ29tcG9uZW50PXtMaXN0SGVhZGVyQ29tcG9uZW50fVxuICAgICAgICAgIHJlbmRlckl0ZW09e3RoaXMudHQucmVuZGVySXRlbX1cbiAgICAgICAgICBzaG93c0hvcml6b250YWxTY3JvbGxJbmRpY2F0b3JcbiAgICAgICAgICBzdHlsZT17c3R5bGVzW2BmbGF0TGlzdC0ke3N0eWxlVUl9YF0gfHw9IHtcbiAgICAgICAgICAgIG92ZXJmbG93WDogXCJhdXRvXCIsXG4gICAgICAgICAgICBib3JkZXI6IHN0eWxlVUkgPyBcIjFweCBzb2xpZCAjZGJkYmRiXCIgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBib3JkZXJSYWRpdXM6IHN0eWxlVUkgPyA1IDogdW5kZWZpbmVkXG4gICAgICAgICAgfX1cbiAgICAgICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgICAvPlxuICAgICAgPC9UYWJsZUNvbnRleHQuUHJvdmlkZXI+XG4gICAgKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDw+XG4gICAgICAgIHtmaWx0ZXJDb250ZW50ICYmIGZpbHRlckNhcmQgJiZcbiAgICAgICAgICA8Q2FyZCBjbGFzc05hbWU9XCJsaXZlLXRhYmxlLS1maWx0ZXItY2FyZCBtYi00XCI+XG4gICAgICAgICAgICB7dGhpcy5maWx0ZXJGb3JtKCl9XG4gICAgICAgICAgPC9DYXJkPlxuICAgICAgICB9XG4gICAgICAgIHtmaWx0ZXJDb250ZW50ICYmICFmaWx0ZXJDYXJkICYmXG4gICAgICAgICAgdGhpcy5maWx0ZXJGb3JtKClcbiAgICAgICAgfVxuICAgICAgICB7Y2FyZCAmJlxuICAgICAgICAgIDxDYXJkXG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXCJsaXZlLXRhYmxlLS10YWJsZS1jYXJkXCIsIFwibWItNFwiLCBjbGFzc05hbWUpfVxuICAgICAgICAgICAgY29udHJvbHM9e3RoaXMudGFibGVDb250cm9scygpfVxuICAgICAgICAgICAgaGVhZGVyPXtoZWFkZXJDb250ZW50fVxuICAgICAgICAgICAgZm9vdGVyPXt0aGlzLnRhYmxlRm9vdGVyKCl9XG4gICAgICAgICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtmbGF0TGlzdH1cbiAgICAgICAgICA8L0NhcmQ+XG4gICAgICAgIH1cbiAgICAgICAgeyFjYXJkICYmIGZsYXRMaXN0fVxuICAgICAgICB7cmVzdWx0ICYmIFBhZ2luYXRpb25Db21wb25lbnQgJiZcbiAgICAgICAgICA8UGFnaW5hdGlvbkNvbXBvbmVudCByZXN1bHQ9e3Jlc3VsdH0gLz5cbiAgICAgICAgfVxuICAgICAgICB7cmVzdWx0ICYmIHBhZ2luYXRlQ29udGVudCAmJlxuICAgICAgICAgIHBhZ2luYXRlQ29udGVudCh7cmVzdWx0fSlcbiAgICAgICAgfVxuICAgICAgPC8+XG4gICAgKVxuICB9XG5cbiAgb25Db250YWluZXJMYXlvdXQgPSAoZSkgPT4ge1xuICAgIGNvbnN0IHt3aWR0aH0gPSBlLm5hdGl2ZUV2ZW50LmxheW91dFxuICAgIGNvbnN0IHt3aWR0aHN9ID0gdGhpcy5zXG5cbiAgICB0aGlzLnNldFN0YXRlKHt3aWR0aH0pXG4gICAgaWYgKHdpZHRocykgd2lkdGhzLnRhYmxlV2lkdGggPSB3aWR0aFxuICB9XG5cbiAgb25MaW5rc0NyZWF0ZWQgPSAoe2FyZ3N9KSA9PiB7XG4gICAgY29uc3QgbW9kZWxDbGFzc05hbWUgPSB0aGlzLnAubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWVcblxuICAgIGlmIChhcmdzLmNyZWF0ZWRbbW9kZWxDbGFzc05hbWVdKSB7XG4gICAgICBjb25zdCBhbW91bnRDcmVhdGVkID0gYXJncy5jcmVhdGVkW21vZGVsQ2xhc3NOYW1lXS5sZW5ndGhcblxuICAgICAgdGhpcy5zZXRTdGF0ZSgocHJldlN0YXRlKSA9PiAoe1xuICAgICAgICBjdXJyZW50V29ya3BsYWNlQ291bnQ6IHByZXZTdGF0ZS5jdXJyZW50V29ya3BsYWNlQ291bnQgKyBhbW91bnRDcmVhdGVkXG4gICAgICB9KSlcbiAgICB9XG4gIH1cblxuICBvbkxpbmtzRGVzdHJveWVkID0gKHthcmdzfSkgPT4ge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3NOYW1lID0gdGhpcy5wLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKS5uYW1lXG5cbiAgICBpZiAoYXJncy5kZXN0cm95ZWRbbW9kZWxDbGFzc05hbWVdKSB7XG4gICAgICBjb25zdCBhbW91bnREZXN0cm95ZWQgPSBhcmdzLmRlc3Ryb3llZFttb2RlbENsYXNzTmFtZV0ubGVuZ3RoXG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgY3VycmVudFdvcmtwbGFjZUNvdW50OiBwcmV2U3RhdGUuY3VycmVudFdvcmtwbGFjZUNvdW50IC0gYW1vdW50RGVzdHJveWVkXG4gICAgICB9KSlcbiAgICB9XG4gIH1cblxuICBrZXlFeHRyYXRvciA9IChtb2RlbCkgPT4gYCR7dGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleX0tJHttb2RlbC5pZCgpfWBcblxuICBmaWx0ZXJGb3JtID0gKCkgPT4ge1xuICAgIGNvbnN0IHtmaWx0ZXJGb3JtUmVmLCBzdWJtaXRGaWx0ZXIsIHN1Ym1pdEZpbHRlckRlYm91bmNlfSA9IHRoaXMudHRcbiAgICBjb25zdCB7ZmlsdGVyQ29udGVudCwgZmlsdGVyU3VibWl0QnV0dG9ufSA9IHRoaXMucFxuICAgIGNvbnN0IHtxdWVyeVFOYW1lfSA9IHRoaXMuc1xuICAgIGNvbnN0IHtmaWx0ZXJTdWJtaXRMYWJlbH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge3FQYXJhbXN9ID0gZGlncyh0aGlzLmNvbGxlY3Rpb24sIFwicVBhcmFtc1wiKVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxGb3JtIGNsYXNzTmFtZT1cImxpdmUtdGFibGUtLWZpbHRlci1mb3JtXCIgZm9ybVJlZj17ZmlsdGVyRm9ybVJlZn0gb25TdWJtaXQ9e3RoaXMudHQub25GaWx0ZXJGb3JtU3VibWl0fSBzZXRGb3JtPXt0aGlzLnNldFN0YXRlcy5maWx0ZXJGb3JtfT5cbiAgICAgICAge1wic1wiIGluIHFQYXJhbXMgJiZcbiAgICAgICAgICA8aW5wdXQgbmFtZT1cInNcIiB0eXBlPVwiaGlkZGVuXCIgdmFsdWU9e3FQYXJhbXMuc30gLz5cbiAgICAgICAgfVxuICAgICAgICB7ZmlsdGVyQ29udGVudCh7XG4gICAgICAgICAgb25GaWx0ZXJDaGFuZ2VkOiBzdWJtaXRGaWx0ZXIsXG4gICAgICAgICAgb25GaWx0ZXJDaGFuZ2VkV2l0aERlbGF5OiBzdWJtaXRGaWx0ZXJEZWJvdW5jZSxcbiAgICAgICAgICBxUGFyYW1zLFxuICAgICAgICAgIHF1ZXJ5UU5hbWVcbiAgICAgICAgfSl9XG4gICAgICAgIHtmaWx0ZXJTdWJtaXRCdXR0b24gJiZcbiAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImJ0biBidG4tcHJpbWFyeSBsaXZlLXRhYmxlLS1zdWJtaXQtZmlsdGVyLWJ1dHRvblwiXG4gICAgICAgICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMuZmlsdGVyU3VibWl0QnV0dG9uIHx8PSB7bWFyZ2luVG9wOiBcIjhweFwifX1cbiAgICAgICAgICAgIHZhbHVlPXtmaWx0ZXJTdWJtaXRMYWJlbCB8fCB0aGlzLnQoXCIuZmlsdGVyXCIsIHtkZWZhdWx0VmFsdWU6IFwiRmlsdGVyXCJ9KX1cbiAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgICA8L0Zvcm0+XG4gICAgKVxuICB9XG5cbiAgb25GaWx0ZXJDbGlja2VkID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICB0aGlzLnNldFN0YXRlKHtzaG93RmlsdGVyczogIXRoaXMuc3RhdGUuc2hvd0ZpbHRlcnN9KVxuICB9XG5cbiAgb25QZXJQYWdlQ2hhbmdlZCA9IChlKSA9PiB7XG4gICAgY29uc3Qge3F1ZXJ5TmFtZX0gPSB0aGlzLnNcbiAgICBjb25zdCBuZXdQZXJQYWdlVmFsdWUgPSBkaWdnKGUsIFwidGFyZ2V0XCIsIFwidmFsdWVcIilcbiAgICBjb25zdCBwZXJLZXkgPSBgJHtxdWVyeU5hbWV9X3BlcmBcbiAgICBjb25zdCBwYXJhbXNDaGFuZ2UgPSB7fVxuXG4gICAgcGFyYW1zQ2hhbmdlW3BlcktleV0gPSBuZXdQZXJQYWdlVmFsdWVcblxuICAgIFBhcmFtcy5jaGFuZ2VQYXJhbXMocGFyYW1zQ2hhbmdlKVxuICB9XG5cbiAgcmVuZGVySXRlbSA9ICh7aW5kZXgsIGl0ZW06IG1vZGVsfSkgPT4ge1xuICAgIGlmICghdGhpcy5zLnRhYmxlU2V0dGluZ0xvYWRlZCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPFZpZXc+XG4gICAgICAgICAgPFRleHQ+XG4gICAgICAgICAgICB7dGhpcy50KFwiLmxvYWRpbmdfZG90X2RvdF9kb3RcIiwge2RlZmF1bHRWYWx1ZTogXCJMb2FkaW5nLi4uXCJ9KX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPE1vZGVsUm93XG4gICAgICAgIGNhY2hlS2V5PXttb2RlbC5jYWNoZUtleSgpfVxuICAgICAgICBjb2x1bW5zPXt0aGlzLnMuY29sdW1uc1RvU2hvd31cbiAgICAgICAgY29sdW1uV2lkdGhzPXt0aGlzLmNvbHVtbldpZHRocygpfVxuICAgICAgICBldmVudHM9e3RoaXMudHQuZXZlbnRzfVxuICAgICAgICBpbmRleD17aW5kZXh9XG4gICAgICAgIGtleT17bW9kZWwuaWQoKX1cbiAgICAgICAgbW9kZWw9e21vZGVsfVxuICAgICAgICB0YWJsZT17dGhpc31cbiAgICAgICAgdGFibGVTZXR0aW5nRnVsbENhY2hlS2V5PXt0aGlzLnMudGFibGVTZXR0aW5nRnVsbENhY2hlS2V5fVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBzdHlsZUZvckNvbHVtbiA9ICh7Y29sdW1uLCBjb2x1bW5JbmRleCwgZXZlbiwgc3R5bGUsIHR5cGV9KSA9PiB7XG4gICAgY29uc3Qge3N0eWxlVUl9ID0gdGhpcy5wXG4gICAgY29uc3QgZGVmYXVsdFN0eWxlID0ge1xuICAgICAganVzdGlmeUNvbnRlbnQ6IFwiY2VudGVyXCIsXG4gICAgICBwYWRkaW5nOiA4LFxuICAgICAgb3ZlcmZsb3c6IFwiaGlkZGVuXCJcbiAgICB9XG5cbiAgICBpZiAoc3R5bGVVSSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihkZWZhdWx0U3R5bGUsIHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiBldmVuID8gXCIjZjVmNWY1XCIgOiBcIiNmZmZcIlxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PSBcImFjdGlvbnNcIikge1xuICAgICAgZGVmYXVsdFN0eWxlLmZsZXhEaXJlY3Rpb24gPSBcInJvd1wiXG4gICAgICBkZWZhdWx0U3R5bGUuYWxpZ25JdGVtcyA9IFwiY2VudGVyXCJcblxuICAgICAgaWYgKHRoaXMudHQubWRVcCkge1xuICAgICAgICBkZWZhdWx0U3R5bGUubWFyZ2luTGVmdCA9IFwiYXV0b1wiXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0U3R5bGUubWFyZ2luUmlnaHQgPSBcImF1dG9cIlxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy50dC5tZFVwICYmIHN0eWxlVUkpIHtcbiAgICAgIGRlZmF1bHRTdHlsZS5ib3JkZXJSaWdodCA9IFwiMXB4IHNvbGlkICNkYmRiZGJcIlxuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbFN0eWxlID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIGRlZmF1bHRTdHlsZSxcbiAgICAgIHN0eWxlXG4gICAgKVxuXG4gICAgcmV0dXJuIGFjdHVhbFN0eWxlXG4gIH1cblxuICBzdHlsZUZvckhlYWRlciA9ICh7Y29sdW1uLCBjb2x1bW5JbmRleCwgc3R5bGUsIHR5cGV9KSA9PiB7XG4gICAgY29uc3Qge21kVXB9ID0gdGhpcy50dFxuICAgIGNvbnN0IGRlZmF1bHRTdHlsZSA9IHtcbiAgICAgIGZsZXhEaXJlY3Rpb246IFwicm93XCIsXG4gICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgcGFkZGluZzogOFxuICAgIH1cblxuICAgIGlmICh0eXBlICE9IFwiYWN0aW9uc1wiICYmIG1kVXAgJiYgdGhpcy5wLnN0eWxlVUkpIHtcbiAgICAgIGRlZmF1bHRTdHlsZS5ib3JkZXJSaWdodCA9IFwiMXB4IHNvbGlkICNkYmRiZGJcIlxuICAgIH1cblxuICAgIGNvbnN0IGFjdHVhbFN0eWxlID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIGRlZmF1bHRTdHlsZSxcbiAgICAgIHN0eWxlXG4gICAgKVxuXG4gICAgcmV0dXJuIGFjdHVhbFN0eWxlXG4gIH1cblxuICBzdHlsZUZvckhlYWRlclRleHQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUoXCJoZWFkZXJUZXh0U3R5bGVcIiwge2ZvbnRXZWlnaHQ6IFwiYm9sZFwifSlcbiAgfVxuXG4gIHN0eWxlRm9yUm93ID0gKHtldmVufSA9IHt9KSA9PiB7XG4gICAgY29uc3QgYWN0dWFsU3R5bGUgPSB7XG4gICAgICBmbGV4OiAxLFxuICAgICAgYWxpZ25JdGVtczogXCJzdHJldGNoXCJcbiAgICB9XG5cbiAgICBpZiAoZXZlbiAmJiB0aGlzLnAuc3R5bGVVSSkge1xuICAgICAgYWN0dWFsU3R5bGUuYmFja2dyb3VuZENvbG9yID0gXCIjZjVmNWY1XCJcbiAgICB9XG5cbiAgICByZXR1cm4gYWN0dWFsU3R5bGVcbiAgfVxuXG4gIHN0eWxlRm9yUm93SGVhZGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IGFjdHVhbFN0eWxlID0ge1xuICAgICAgZmxleDogMSxcbiAgICAgIGFsaWduSXRlbXM6IFwic3RyZXRjaFwiXG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdHVhbFN0eWxlXG4gIH1cblxuICB0YWJsZUNvbnRyb2xzKHttb2RlbHMsIHFQYXJhbXMsIHF1ZXJ5LCByZXN1bHR9ID0ge30pIHtcbiAgICBjb25zdCB7Y29udHJvbHN9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtzaG93U2V0dGluZ3N9ID0gdGhpcy5zXG4gICAgY29uc3QgY29sbGVjdGlvbkFyZ3MgPSBkaWdzKHRoaXMuY29sbGVjdGlvbiwgXCJtb2RlbHNcIiwgXCJxUGFyYW1zXCIsIFwicXVlcnlcIiwgXCJyZXN1bHRcIilcbiAgICBjb25zdCBhY3R1YWxNb2RlbHMgPSBtb2RlbHMgPz8gY29sbGVjdGlvbkFyZ3MubW9kZWxzID8/IFtdXG4gICAgY29uc3QgYWN0dWFsUVBhcmFtcyA9IHFQYXJhbXMgPz8gY29sbGVjdGlvbkFyZ3MucVBhcmFtc1xuICAgIGNvbnN0IGFjdHVhbFF1ZXJ5ID0gcXVlcnkgPz8gY29sbGVjdGlvbkFyZ3MucXVlcnlcbiAgICBjb25zdCBhY3R1YWxSZXN1bHQgPSByZXN1bHQgPz8gY29sbGVjdGlvbkFyZ3MucmVzdWx0XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy50YWJsZUNvbnRyb2xzUm9vdFZpZXcgfHw9IHtmbGV4RGlyZWN0aW9uOiBcInJvd1wifX0+XG4gICAgICAgIHtjb250cm9scyAmJiBjb250cm9scyh7bW9kZWxzOiBhY3R1YWxNb2RlbHMsIHFQYXJhbXM6IGFjdHVhbFFQYXJhbXMsIHF1ZXJ5OiBhY3R1YWxRdWVyeSwgcmVzdWx0OiBhY3R1YWxSZXN1bHR9KX1cbiAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzLmZpbHRlckJ1dHRvbiB8fD0ge2NsYXNzOiBcImZpbHRlci1idXR0b25cIn19XG4gICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vbkZpbHRlckNsaWNrZWR9XG4gICAgICAgICAgdGVzdElEPVwiZmlsdGVyQnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxJY29uIG5hbWU9XCJzZWFyY2hcIiBzaXplPXsyMH0gLz5cbiAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIHtzaG93U2V0dGluZ3MgJiZcbiAgICAgICAgICAgIDxTZXR0aW5ncyBvblJlcXVlc3RDbG9zZT17dGhpcy50dC5vblJlcXVlc3RDbG9zZVNldHRpbmdzfSB0YWJsZT17dGhpc30gLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgPFByZXNzYWJsZSBvblByZXNzPXt0aGlzLnR0Lm9uU2V0dGluZ3NDbGlja2VkfSB0ZXN0SUQ9XCJzZXR0aW5ncy1idXR0b25cIj5cbiAgICAgICAgICAgIDxJY29uIG5hbWU9XCJnZWFyXCIgc2l6ZT17MjB9IC8+XG4gICAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICB0YWJsZUZvb3RlcigpIHtcbiAgICBjb25zdCB7cmVzdWx0fSA9IGRpZ3ModGhpcy5jb2xsZWN0aW9uLCBcInJlc3VsdFwiKVxuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gcmVzdWx0LmN1cnJlbnRQYWdlKClcbiAgICBjb25zdCB0b3RhbENvdW50ID0gcmVzdWx0LnRvdGFsQ291bnQoKVxuICAgIGNvbnN0IHBlclBhZ2UgPSByZXN1bHQucGVyUGFnZSgpXG4gICAgY29uc3QgdG8gPSBNYXRoLm1pbihjdXJyZW50UGFnZSAqIHBlclBhZ2UsIHRvdGFsQ291bnQpXG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gXCJTaG93aW5nICV7ZnJvbX0gdG8gJXt0b30gb3V0IG9mICV7dG90YWxfY291bnR9IHRvdGFsLlwiXG4gICAgbGV0IGZyb20gPSAoKGN1cnJlbnRQYWdlIC0gMSkgKiBwZXJQYWdlKSArIDFcblxuICAgIGlmICh0byA9PT0gMCkgZnJvbSA9IDBcblxuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17dGhpcy5jYWNoZShcInRhYmxlRm9vdGVyUm9vdFZpZXdTdHlsZVwiLCB7ZmxleERpcmVjdGlvbjogXCJyb3dcIiwganVzdGlmeUNvbnRlbnQ6IFwic3BhY2UtYmV0d2VlblwiLCBtYXJnaW5Ub3A6IDEwfSl9PlxuICAgICAgICA8VmlldyBkYXRhU2V0PXtkYXRhU2V0cy5zaG93aW5nQ291bnRzIHx8PSB7Y2xhc3M6IFwic2hvd2luZy1jb3VudHNcIn19IHN0eWxlPXtzdHlsZXMuc2hvd2luZ0NvdW50cyB8fD0ge2ZsZXhEaXJlY3Rpb246IFwicm93XCJ9fT5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIHt0aGlzLnQoXCIuc2hvd2luZ19mcm9tX3RvX291dF9vZl90b3RhbFwiLCB7ZGVmYXVsdFZhbHVlLCBmcm9tLCB0bywgdG90YWxfY291bnQ6IHRvdGFsQ291bnR9KX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAge3RoaXMucC53b3JrcGxhY2UgJiYgdGhpcy5zLmN1cnJlbnRXb3JrcGxhY2VDb3VudCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3RoaXMuY2FjaGUoXCJ4U2VsZWN0ZWRUZXh0U3R5bGVcIiwge21hcmdpbkxlZnQ6IDN9KX0+XG4gICAgICAgICAgICAgIHt0aGlzLnQoXCIueF9zZWxlY3RlZFwiLCB7ZGVmYXVsdFZhbHVlOiBcIiV7c2VsZWN0ZWR9IHNlbGVjdGVkLlwiLCBzZWxlY3RlZDogdGhpcy5zLmN1cnJlbnRXb3JrcGxhY2VDb3VudH0pfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJwZXItcGFnZS1zZWxlY3RcIlxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXtwZXJQYWdlfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMudHQub25QZXJQYWdlQ2hhbmdlZH1cbiAgICAgICAgICAgIG9wdGlvbnM9e3BhZ2luYXRpb25PcHRpb25zfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICBjbGFzc05hbWUoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IFtcImFwaS1tYWtlci0tdGFibGVcIl1cblxuICAgIGlmICh0aGlzLnByb3BzLmNsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKHRoaXMucHJvcHMuY2xhc3NOYW1lKVxuICAgIH1cblxuICAgIHJldHVybiBjbGFzc05hbWVzLmpvaW4oXCIgXCIpXG4gIH1cblxuICBjb2x1bW5Qcm9wcyhjb2x1bW4pIHtcbiAgICBjb25zdCBwcm9wcyA9IHt9XG5cbiAgICBpZiAoY29sdW1uLnRleHRDZW50ZXIpIHtcbiAgICAgIHByb3BzLnN0eWxlIHx8PSB7fVxuICAgICAgcHJvcHMuc3R5bGUudGV4dEFsaWduID0gXCJjZW50ZXJcIlxuICAgIH1cblxuICAgIGlmIChjb2x1bW4udGV4dFJpZ2h0KSB7XG4gICAgICBwcm9wcy5zdHlsZSB8fD0ge31cbiAgICAgIHByb3BzLnN0eWxlLnRleHRBbGlnbiA9IFwicmlnaHRcIlxuICAgIH1cblxuICAgIHJldHVybiBwcm9wc1xuICB9XG5cbiAgaGVhZGVyUHJvcHMoY29sdW1uKSB7XG4gICAgY29uc3QgcHJvcHMgPSB7fVxuXG4gICAgaWYgKGNvbHVtbi50ZXh0Q2VudGVyKSB7XG4gICAgICBwcm9wcy5zdHlsZSB8fD0ge31cbiAgICAgIHByb3BzLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gXCJjZW50ZXJcIlxuICAgIH1cblxuICAgIGlmIChjb2x1bW4udGV4dFJpZ2h0KSB7XG4gICAgICBwcm9wcy5zdHlsZSB8fD0ge31cbiAgICAgIHByb3BzLnN0eWxlLmp1c3RpZnlDb250ZW50ID0gXCJlbmRcIlxuICAgIH1cblxuICAgIHJldHVybiBwcm9wc1xuICB9XG5cbiAgY29sdW1uV2lkdGhzKCkge1xuICAgIGNvbnN0IGNvbHVtbldpZHRocyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiB0aGlzLnMucHJlcGFyZWRDb2x1bW5zKSB7XG4gICAgICBjb2x1bW5XaWR0aHNbY29sdW1uLnRhYmxlU2V0dGluZ0NvbHVtbi5pZGVudGlmaWVyKCldID0gY29sdW1uLndpZHRoXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbHVtbldpZHRoc1xuICB9XG5cbiAgaGVhZGVyc0NvbnRlbnRGcm9tQ29sdW1ucyA9ICgpID0+IHtcbiAgICByZXR1cm4gKFxuICAgICAgPERyYWdnYWJsZVNvcnRcbiAgICAgICAgZGF0YT17dGhpcy5zLmNvbHVtbnNUb1Nob3d9XG4gICAgICAgIGV2ZW50cz17dGhpcy50dC5kcmFnZ2FibGVTb3J0RXZlbnRzfVxuICAgICAgICBob3Jpem9udGFsXG4gICAgICAgIGtleUV4dHJhY3Rvcj17dGhpcy50dC5kcmFnTGlzdGtleUV4dHJhY3Rvcn1cbiAgICAgICAgb25JdGVtTW92ZWQ9e3RoaXMudHQub25JdGVtTW92ZWR9XG4gICAgICAgIG9uUmVvcmRlcmVkPXt0aGlzLnR0Lm9uUmVvcmRlcmVkfVxuICAgICAgICByZW5kZXJJdGVtPXt0aGlzLnR0LmRyYWdMaXN0UmVuZGVySXRlbUNvbnRlbnR9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIGRyYWdMaXN0Q2FjaGVLZXlFeHRyYWN0b3IgPSAoaXRlbSkgPT4gYCR7aXRlbS50YWJsZVNldHRpbmdDb2x1bW4uaWRlbnRpZmllcigpfS0ke3RoaXMucy5yZXNpemluZ31gXG4gIGRyYWdMaXN0a2V5RXh0cmFjdG9yID0gKGl0ZW0pID0+IGl0ZW0udGFibGVTZXR0aW5nQ29sdW1uLmlkZW50aWZpZXIoKVxuXG4gIG9uSXRlbU1vdmVkID0gKHthbmltYXRpb25BcmdzLCBpdGVtSW5kZXgsIHgsIHl9KSA9PiB7XG4gICAgY29uc3QgYW5pbWF0ZWRQb3NpdGlvbiA9IGRpZ2codGhpcywgXCJzXCIsIFwiY29sdW1uc1RvU2hvd1wiLCBpdGVtSW5kZXgsIFwiYW5pbWF0ZWRQb3NpdGlvblwiKVxuXG4gICAgaWYgKGFuaW1hdGlvbkFyZ3MpIHtcbiAgICAgIEFuaW1hdGVkLnRpbWluZyhhbmltYXRlZFBvc2l0aW9uLCBhbmltYXRpb25BcmdzKS5zdGFydCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFuaW1hdGVkUG9zaXRpb24uc2V0VmFsdWUoe3gsIHl9KVxuICAgIH1cbiAgfVxuXG4gIG9uUmVvcmRlcmVkID0gYXN5bmMgKHtmcm9tSXRlbSwgZnJvbVBvc2l0aW9uLCB0b0l0ZW0sIHRvUG9zaXRpb259KSA9PiB7XG4gICAgaWYgKGZyb21Qb3NpdGlvbiA9PSB0b1Bvc2l0aW9uKSByZXR1cm4gLy8gT25seSBkbyByZXF1ZXN0cyBhbmQgcXVlcmllcyBpZiBjaGFuZ2VkXG5cbiAgICBjb25zdCBUYWJsZVNldHRpbmdDb2x1bW4gPSBmcm9tSXRlbS50YWJsZVNldHRpbmdDb2x1bW4uY29uc3RydWN0b3JcbiAgICBjb25zdCB0b0NvbHVtbiA9IGF3YWl0IFRhYmxlU2V0dGluZ0NvbHVtbi5maW5kKHRvSXRlbS50YWJsZVNldHRpbmdDb2x1bW4uaWQoKSkgLy8gTmVlZCB0byBsb2FkIGxhdGVzdCBwb3NpdGlvbiBiZWNhdXNlIEFjdHNBc0xpc3QgbWlnaHQgaGF2ZSBjaGFuZ2VkIGl0XG5cbiAgICBhd2FpdCBmcm9tSXRlbS50YWJsZVNldHRpbmdDb2x1bW4udXBkYXRlKHtwb3NpdGlvbjogdG9Db2x1bW4ucG9zaXRpb24oKX0pXG4gIH1cblxuICBkcmFnTGlzdFJlbmRlckl0ZW1Db250ZW50ID0gKHtpc0FjdGl2ZSwgaXRlbSwgdG91Y2hQcm9wc30pID0+IHtcbiAgICBjb25zdCB7YW5pbWF0ZWRXaWR0aCwgYW5pbWF0ZWRaSW5kZXgsIGNvbHVtbiwgdGFibGVTZXR0aW5nQ29sdW1ufSA9IGl0ZW1cblxuICAgIHJldHVybiAoXG4gICAgICA8SGVhZGVyQ29sdW1uXG4gICAgICAgIGFjdGl2ZT17aXNBY3RpdmV9XG4gICAgICAgIGFuaW1hdGVkV2lkdGg9e2FuaW1hdGVkV2lkdGh9XG4gICAgICAgIGFuaW1hdGVkWkluZGV4PXthbmltYXRlZFpJbmRleH1cbiAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgIGtleT17dGFibGVTZXR0aW5nQ29sdW1uLmlkZW50aWZpZXIoKX1cbiAgICAgICAgcmVzaXppbmc9e3RoaXMucy5yZXNpemluZ31cbiAgICAgICAgdGFibGU9e3RoaXN9XG4gICAgICAgIHRhYmxlU2V0dGluZ0NvbHVtbj17dGFibGVTZXR0aW5nQ29sdW1ufVxuICAgICAgICB0b3VjaFByb3BzPXt0b3VjaFByb3BzfVxuICAgICAgICB3aWR0aHM9e3RoaXMucy53aWR0aHN9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIGhlYWRlckNsYXNzTmFtZUZvckNvbHVtbihjb2x1bW4pIHtcbiAgICBjb25zdCBjbGFzc05hbWVzID0gW11cblxuICAgIGlmIChjb2x1bW4uY29tbW9uUHJvcHMgJiYgY29sdW1uLmNvbW1vblByb3BzLmNsYXNzTmFtZSkgY2xhc3NOYW1lcy5wdXNoKGNvbHVtbi5jb21tb25Qcm9wcy5jbGFzc05hbWUpXG4gICAgaWYgKGNvbHVtbi5oZWFkZXJQcm9wcyAmJiBjb2x1bW4uaGVhZGVyUHJvcHMuY2xhc3NOYW1lKSBjbGFzc05hbWVzLnB1c2goY29sdW1uLmhlYWRlclByb3BzLmNsYXNzTmFtZSlcblxuICAgIHJldHVybiBjbGFzc05hbWVzXG4gIH1cblxuICBoZWFkZXJMYWJlbEZvckNvbHVtbihjb2x1bW4pIHtcbiAgICBjb25zdCB7bW9kZWxDbGFzc30gPSB0aGlzLnBcblxuICAgIGlmIChcImxhYmVsXCIgaW4gY29sdW1uKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbi5sYWJlbCA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5sYWJlbCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gY29sdW1uLmxhYmVsXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGN1cnJlbnRNb2RlbENsYXNzID0gbW9kZWxDbGFzc1xuXG4gICAgLy8gQ2FsY3VsYXRlIGN1cnJlbnQgbW9kZWwgY2xhc3MgdGhyb3VnaCBwYXRoXG4gICAgaWYgKGNvbHVtbi5wYXRoKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhdGhQYXJ0IG9mIGNvbHVtbi5wYXRoKSB7XG4gICAgICAgIGNvbnN0IHJlbGF0aW9uc2hpcHMgPSBkaWdnKGN1cnJlbnRNb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCksIFwicmVsYXRpb25zaGlwc1wiKVxuICAgICAgICBjb25zdCByZWxhdGlvbnNoaXAgPSByZWxhdGlvbnNoaXBzLmZpbmQoKHJlbGF0aW9uc2hpcEluQXJyYXkpID0+IHJlbGF0aW9uc2hpcEluQXJyYXkubmFtZSA9PSBpbmZsZWN0aW9uLnVuZGVyc2NvcmUocGF0aFBhcnQpKVxuXG4gICAgICAgIGN1cnJlbnRNb2RlbENsYXNzID0gbW9kZWxDbGFzc1JlcXVpcmUoZGlnZyhyZWxhdGlvbnNoaXAsIFwicmVzb3VyY2VfbmFtZVwiKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29sdW1uLmF0dHJpYnV0ZSkgcmV0dXJuIGN1cnJlbnRNb2RlbENsYXNzLmh1bWFuQXR0cmlidXRlTmFtZShjb2x1bW4uYXR0cmlidXRlKVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gJ2xhYmVsJyBvciAnYXR0cmlidXRlJyB3YXMgZ2l2ZW5cIilcbiAgfVxuXG4gIG9uRmlsdGVyRm9ybVN1Ym1pdCA9ICgpID0+IHRoaXMuc3VibWl0RmlsdGVyKClcbiAgb25SZXF1ZXN0Q2xvc2VTZXR0aW5ncyA9ICgpID0+IHRoaXMuc2V0U3RhdGUoe3Nob3dTZXR0aW5nczogZmFsc2V9KVxuXG4gIG9uU2V0dGluZ3NDbGlja2VkID0gKGUpID0+IHtcbiAgICBlLnByZXZlbnREZWZhdWx0KClcblxuICAgIHRoaXMuc2V0U3RhdGUoe3Nob3dTZXR0aW5nczogIXRoaXMucy5zaG93U2V0dGluZ3N9KVxuICB9XG5cbiAgc3VibWl0RmlsdGVyID0gKCkgPT4ge1xuICAgIGNvbnN0IHthcHBIaXN0b3J5fSA9IHRoaXMucHJvcHNcbiAgICBjb25zdCB7cXVlcnlRTmFtZX0gPSB0aGlzLnNcbiAgICBjb25zdCBjaGFuZ2VQYXJhbXNQYXJhbXMgPSB7fVxuICAgIGNvbnN0IHFQYXJhbXMgPSB0aGlzLnMuZmlsdGVyRm9ybS5hc09iamVjdCgpXG5cbiAgICBpZiAoUGxhdGZvcm0uT1MgPT0gXCJ3ZWJcIikge1xuICAgICAgY29uc3QgZmlsdGVyRm9ybSA9IGRpZ2codGhpcy50dC5maWx0ZXJGb3JtUmVmLCBcImN1cnJlbnRcIilcbiAgICAgIGNvbnN0IG5hdnRpdmVGb3JtUGFyYW1zID0gUGFyYW1zLnNlcmlhbGl6ZUZvcm0oZmlsdGVyRm9ybSlcblxuICAgICAgaW5jb3Jwb3JhdGUocVBhcmFtcywgbmF2dGl2ZUZvcm1QYXJhbXMpXG4gICAgfVxuXG4gICAgY2hhbmdlUGFyYW1zUGFyYW1zW3F1ZXJ5UU5hbWVdID0gSlNPTi5zdHJpbmdpZnkocVBhcmFtcylcblxuICAgIFBhcmFtcy5jaGFuZ2VQYXJhbXMoY2hhbmdlUGFyYW1zUGFyYW1zLCB7YXBwSGlzdG9yeX0pXG4gIH1cblxuICBzdWJtaXRGaWx0ZXJEZWJvdW5jZSA9IGRlYm91bmNlKHRoaXMudHQuc3VibWl0RmlsdGVyKVxufSkpXG4iXX0=
|
|
743
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiL3NyYy8iLCJzb3VyY2VzIjpbInRhYmxlL3RhYmxlLmpzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsdUZBQXVGO0FBQ3ZGLDJGQUEyRjtBQUMzRiw0RUFBNEU7QUFDNUUsd0RBQXdEO0FBQ3hELE9BQU8sRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBQyxNQUFNLFdBQVcsQ0FBQTtBQUN6QyxPQUFPLEtBQUssRUFBRSxFQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBQyxNQUFNLE9BQU8sQ0FBQTtBQUN2RSxPQUFPLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQ2hFLE9BQU8sYUFBYSxNQUFNLG1CQUFtQixDQUFBO0FBQzdDLE9BQU8sSUFBSSxNQUFNLG1CQUFtQixDQUFBO0FBQ3BDLE9BQU8sVUFBVSxNQUFNLFlBQVksQ0FBQTtBQUNuQyxPQUFPLFVBQVUsTUFBTSxrQkFBa0IsQ0FBQTtBQUN6QyxPQUFPLGFBQWEsTUFBTSxxQkFBcUIsQ0FBQTtBQUMvQyxPQUFPLFFBQVEsTUFBTSxVQUFVLENBQUE7QUFDL0IsT0FBTyxhQUFhLE1BQU0seUJBQXlCLENBQUE7QUFDbkQsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLE9BQU8sTUFBTSxpQkFBaUIsQ0FBQTtBQUNyQyxPQUFPLFFBQVEsTUFBTSx3QkFBd0IsQ0FBQTtBQUM3QyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sU0FBUyxDQUFBO0FBQzVCLE9BQU8sTUFBTSxNQUFNLHFCQUFxQixDQUFBO0FBQ3hDLE9BQU8sWUFBWSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sWUFBWSxNQUFNLGlCQUFpQixDQUFBO0FBQzFDLE9BQU8sSUFBSSxNQUFNLGVBQWUsQ0FBQTtBQUNoQyxPQUFPLEVBQUMsV0FBVyxFQUFD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QTtJQUVELG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFBO0NBQ3RELENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgYXJyb3ctYm9keS1zdHlsZSwgaW1wb3J0L25vLW5hbWVkLWFzLWRlZmF1bHQsIGltcG9ydC9uby11bnJlc29sdmVkICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1leHRyYS1wYXJlbnMsIG5vLXJldHVybi1hc3NpZ24sIG5vLXVudXNlZC12YXJzLCByZWFjdC9qc3gtbWF4LWRlcHRoICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9qc3gtb25lLWV4cHJlc3Npb24tcGVyLWxpbmUsIHJlYWN0L2pzeC1zb3J0LXByb3BzICovXG4vKiBlc2xpbnQtZGlzYWJsZSByZWFjdC9zb3J0LXByb3AtdHlwZXMsIHNvcnQtaW1wb3J0cyAqL1xuaW1wb3J0IHtkaWcsIGRpZ2csIGRpZ3N9IGZyb20gXCJkaWdnZXJpemVcIlxuaW1wb3J0IFJlYWN0LCB7Y3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlTWVtbywgdXNlUmVmfSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IHtBbmltYXRlZCwgUGxhdGZvcm0sIFByZXNzYWJsZSwgVmlld30gZnJvbSBcInJlYWN0LW5hdGl2ZVwiXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tIFwiLi4vYmFzZS1jb21wb25lbnRcIlxuaW1wb3J0IENhcmQgZnJvbSBcIi4uL2Jvb3RzdHJhcC9jYXJkXCJcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCJcbmltcG9ydCBDb2xsZWN0aW9uIGZyb20gXCIuLi9jb2xsZWN0aW9uLmpzXCJcbmltcG9ydCBjb2x1bW5WaXNpYmxlIGZyb20gXCIuL2NvbHVtbi12aXNpYmxlLmpzXCJcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwiZGVib3VuY2VcIlxuaW1wb3J0IERyYWdnYWJsZVNvcnQgZnJvbSBcIi4uL2RyYWdnYWJsZS1zb3J0L2luZGV4XCJcbmltcG9ydCB7RXZlbnRFbWl0dGVyfSBmcm9tIFwiZXZlbnRlbWl0dGVyM1wiXG5pbXBvcnQgRmlsdGVycyBmcm9tIFwiLi9maWx0ZXJzL2luZGV4XCJcbmltcG9ydCBGbGF0TGlzdCBmcm9tIFwiLi9jb21wb25lbnRzL2ZsYXQtbGlzdFwiXG5pbXBvcnQge0Zvcm19IGZyb20gXCIuLi9mb3JtXCJcbmltcG9ydCBIZWFkZXIgZnJvbSBcIi4vY29tcG9uZW50cy9oZWFkZXJcIlxuaW1wb3J0IEhlYWRlckNvbHVtbiBmcm9tIFwiLi9oZWFkZXItY29sdW1uXCJcbmltcG9ydCBIZWFkZXJTZWxlY3QgZnJvbSBcIi4vaGVhZGVyLXNlbGVjdFwiXG5pbXBvcnQgSWNvbiBmcm9tIFwiLi4vdXRpbHMvaWNvblwiXG5pbXBvcnQge2luY29ycG9yYXRlfSBmcm9tIFwiaW5jb3Jwb3JhdG9yXCJcbmltcG9ydCAqIGFzIGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIlxuaW1wb3J0IG1lbW8gZnJvbSBcInNldC1zdGF0ZS1jb21wYXJlL2J1aWxkL21lbW8uanNcIlxuaW1wb3J0IG1vZGVsQ2xhc3NSZXF1aXJlIGZyb20gXCIuLi9tb2RlbC1jbGFzcy1yZXF1aXJlLmpzXCJcbmltcG9ydCBNb2RlbFJvdyBmcm9tIFwiLi9tb2RlbC1yb3dcIlxuaW1wb3J0IFBhZ2luYXRlIGZyb20gXCIuLi9ib290c3RyYXAvcGFnaW5hdGVcIlxuaW1wb3J0IFBhcmFtcyBmcm9tIFwiLi4vcGFyYW1zLmpzXCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IFJvdyBmcm9tIFwiLi9jb21wb25lbnRzL3Jvd1wiXG5pbXBvcnQgc2VsZWN0Q2FsY3VsYXRvciBmcm9tIFwiLi9zZWxlY3QtY2FsY3VsYXRvci5qc1wiXG5pbXBvcnQgU2VsZWN0IGZyb20gXCIuLi9pbnB1dHMvc2VsZWN0XCJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5ncy9pbmRleFwiXG5pbXBvcnQge3NoYXBlQ29tcG9uZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvc2hhcGUtY29tcG9uZW50LmpzXCJcbmltcG9ydCBUYWJsZVNldHRpbmdzIGZyb20gXCIuL3RhYmxlLXNldHRpbmdzLmpzXCJcbmltcG9ydCBUZXh0IGZyb20gXCIuLi91dGlscy90ZXh0XCJcbmltcG9ydCB1bmlxdW5pemUgZnJvbSBcInVuaXF1bml6ZVwiXG5pbXBvcnQgdXNlQnJlYWtwb2ludCBmcm9tIFwiLi4vdXNlLWJyZWFrcG9pbnQuanNcIlxuaW1wb3J0IHVzZUNvbGxlY3Rpb24gZnJvbSBcIi4uL3VzZS1jb2xsZWN0aW9uLmpzXCJcbmltcG9ydCB1c2VJMThuIGZyb20gXCJpMThuLW9uLXN0ZXJvaWRzL3NyYy91c2UtaTE4bi5tanNcIlxuaW1wb3J0IHVzZUV2ZW50RW1pdHRlciBmcm9tIFwiLi4vdXNlLWV2ZW50LWVtaXR0ZXIuanNcIlxuaW1wb3J0IHVzZU1vZGVsRXZlbnQgZnJvbSBcIi4uL3VzZS1tb2RlbC1ldmVudC5qc1wiXG5pbXBvcnQgdXNlUXVlcnlQYXJhbXMgZnJvbSBcIm9uLWxvY2F0aW9uLWNoYW5nZWQvYnVpbGQvdXNlLXF1ZXJ5LXBhcmFtcy5qc1wiXG5pbXBvcnQgV2lkdGhzIGZyb20gXCIuL3dpZHRoc1wiXG5pbXBvcnQgV29ya2VyUGx1Z2luc0NoZWNrQWxsQ2hlY2tib3ggZnJvbSBcIi4vd29ya2VyLXBsdWdpbnMtY2hlY2stYWxsLWNoZWNrYm94XCJcblxuLyoqXG4gKiBUYWJsZSBjb21wb25lbnQgd2l0aCBzb3J0YWJsZSwgcmVzaXphYmxlIGNvbHVtbnMgYW5kIG9wdGlvbmFsIGZpbHRlcnMuXG4gKi9cbmNvbnN0IGRhdGFTZXRzID0ge31cbmNvbnN0IHBhZ2luYXRpb25PcHRpb25zID0gWzMwLCA2MCwgOTAsIFtcIkFsbFwiLCBcImFsbFwiXV1cbmNvbnN0IHN0eWxlcyA9IHt9XG5jb25zdCBUYWJsZUNvbnRleHQgPSBjcmVhdGVDb250ZXh0KClcblxuY29uc3QgTGlzdEhlYWRlckNvbXBvbmVudCA9IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgTGlzdEhlYWRlckNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBzZXR1cCgpIHtcbiAgICB0aGlzLnVzZVN0YXRlcyh7XG4gICAgICBsYXN0VXBkYXRlOiBuZXcgRGF0ZSgpXG4gICAgfSlcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7bWRVcH0gPSB1c2VCcmVha3BvaW50KClcbiAgICBjb25zdCB0YWJsZUNvbnRleHRWYWx1ZSA9IHVzZUNvbnRleHQoVGFibGVDb250ZXh0KVxuICAgIGNvbnN0IHRhYmxlID0gdGFibGVDb250ZXh0VmFsdWUudGFibGVcbiAgICBjb25zdCB7Y29sbGVjdGlvbiwgZXZlbnRzLCBxdWVyeVdpdGhvdXRQYWdpbmF0aW9uLCB0fSA9IHRhYmxlLnR0XG4gICAgY29uc3Qge3F1ZXJ5fSA9IGRpZ3MoY29sbGVjdGlvbiwgXCJxdWVyeVwiKVxuXG4gICAgdXNlRXZlbnRFbWl0dGVyKGV2ZW50cywgXCJjb2x1bW5WaXNpYmlsaXR5VXBkYXRlZFwiLCB0aGlzLnR0Lm9uQ29sdW1uVmlzaWJpbGl0eVVwZGF0ZWQpXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJvdyBzdHlsZT17dGFibGUuc3R5bGVGb3JSb3dIZWFkZXIoKX0gdGVzdElEPVwiYXBpLW1ha2VyL3RhYmxlL2hlYWRlci1yb3dcIj5cbiAgICAgICAge3RhYmxlLnAud29ya3BsYWNlICYmIHRhYmxlLnMuY3VycmVudFdvcmtwbGFjZSAmJlxuICAgICAgICAgIDxIZWFkZXIgc3R5bGU9e3RhYmxlLnN0eWxlRm9ySGVhZGVyKHtzdHlsZToge3dpZHRoOiBtZFVwID8gNDEgOiB1bmRlZmluZWR9fSl9PlxuICAgICAgICAgICAgPFdvcmtlclBsdWdpbnNDaGVja0FsbENoZWNrYm94XG4gICAgICAgICAgICAgIGN1cnJlbnRXb3JrcGxhY2U9e3RhYmxlLnMuY3VycmVudFdvcmtwbGFjZX1cbiAgICAgICAgICAgICAgcXVlcnk9e3F1ZXJ5V2l0aG91dFBhZ2luYXRpb259XG4gICAgICAgICAgICAgIHN0eWxlPXtzdHlsZXMud29ya2VyUGxndWluc0NoZWNrQWxsQ2hlY2tib3hTdHlsZSB8fD0ge21hcmdpbkhvcml6b250YWw6IFwiYXV0b1wifX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB7IW1kVXAgJiZcbiAgICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy5zZWxlY3RBbGxGb3VuZFRleHRTdHlsZSB8fD0ge21hcmdpbkxlZnQ6IDN9fT5cbiAgICAgICAgICAgICAgICB7dChcIi5zZWxlY3RfYWxsX2ZvdW5kXCIsIHtkZWZhdWx0VmFsdWU6IFwiU2VsZWN0IGFsbCBmb3VuZFwifSl9XG4gICAgICAgICAgICAgIDwvVGV4dD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgfVxuICAgICAgICB7IW1kVXAgJiZcbiAgICAgICAgICA8SGVhZGVyIHN0eWxlPXt0YWJsZS5zdHlsZUZvckhlYWRlcih7c3R5bGU6IHt9fSl9PlxuICAgICAgICAgICAgPEhlYWRlclNlbGVjdCBwcmVwYXJlZENvbHVtbnM9e3RhYmxlLnMucHJlcGFyZWRDb2x1bW5zfSBxdWVyeT17cXVlcnl9IHRhYmxlPXt0YWJsZX0gLz5cbiAgICAgICAgICA8L0hlYWRlcj5cbiAgICAgICAgfVxuICAgICAgICB7bWRVcCAmJlxuICAgICAgICAgIDw+XG4gICAgICAgICAgICB7dGFibGUuaGVhZGVyc0NvbnRlbnRGcm9tQ29sdW1ucygpfVxuICAgICAgICAgICAgPEhlYWRlciBzdHlsZT17dGFibGUuc3R5bGVGb3JIZWFkZXIoe3N0eWxlOiB7fSwgdHlwZTogXCJhY3Rpb25zXCJ9KX0gLz5cbiAgICAgICAgICA8Lz5cbiAgICAgICAgfVxuICAgICAgPC9Sb3c+XG4gICAgKVxuICB9XG5cbiAgb25Db2x1bW5WaXNpYmlsaXR5VXBkYXRlZCA9ICgpID0+IHRoaXMuc2V0U3RhdGUoe2xhc3RVcGRhdGU6IG5ldyBEYXRlKCl9KVxufSkpXG5cbmV4cG9ydCBkZWZhdWx0IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgQXBpTWFrZXJUYWJsZSBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IHByb3BzXG4gICAqL1xuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIGNhcmQ6IHRydWUsXG4gICAgY3VycmVudFVzZXI6IG51bGwsXG4gICAgZGVzdHJveUVuYWJsZWQ6IHRydWUsXG4gICAgZHJhZ2dlZEhlYWRlclN0eWxlOiB1bmRlZmluZWQsXG4gICAgZmlsdGVyQ2FyZDogdHJ1ZSxcbiAgICBmaWx0ZXJTdWJtaXRCdXR0b246IHRydWUsXG4gICAgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudDogdW5kZWZpbmVkLFxuICAgIG5vUmVjb3Jkc0ZvdW5kQ29udGVudDogdW5kZWZpbmVkLFxuICAgIHByZWxvYWRzOiBbXSxcbiAgICBzZWxlY3Q6IHt9LFxuICAgIHN0eWxlVUk6IHRydWUsXG4gICAgd29ya3BsYWNlOiBmYWxzZVxuICB9XG5cbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBhYmlsaXRpZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgYWN0aW9uc0NvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGFwcEhpc3Rvcnk6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2FyZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgY29sbGVjdGlvbjogUHJvcFR5cGVzLmluc3RhbmNlT2YoQ29sbGVjdGlvbiksXG4gICAgY29sdW1uczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5LCBQcm9wVHlwZXMuZnVuY10pLFxuICAgIGNvbnRyb2xzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBjdXJyZW50VXNlcjogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBkZWZhdWx0RGF0ZUZvcm1hdE5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGVmYXVsdERhdGVUaW1lRm9ybWF0TmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkZWZhdWx0UGFyYW1zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIGRlc3Ryb3lFbmFibGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGRlc3Ryb3lNZXNzYWdlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRyYWdnZWRIZWFkZXJTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBlZGl0TW9kZWxQYXRoOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBmaWx0ZXJDYXJkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIGZpbHRlckNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGZpbHRlclN1Ym1pdExhYmVsOiBQcm9wVHlwZXMuYW55LFxuICAgIGdyb3VwQnk6IFByb3BUeXBlcy5hcnJheSxcbiAgICBoZWFkZXI6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gICAgaWRlbnRpZmllcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBtb2RlbENsYXNzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIG5vUmVjb3Jkc0ZvdW5kQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgb25Nb2RlbHNMb2FkZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIHBhZ2luYXRlQ29udGVudDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcGFnaW5hdGlvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIHByZWxvYWRzOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgICBxdWVyeU1ldGhvZDogUHJvcFR5cGVzLmZ1bmMsXG4gICAgcXVlcnlOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlbGVjdDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBzZWxlY3RDb2x1bW5zOiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHN0eWxlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBzdHlsZVVJOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAgIHZpZXdNb2RlbFBhdGg6IFByb3BUeXBlcy5mdW5jLFxuICAgIHdvcmtwbGFjZTogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZFxuICB9XG5cbiAgZHJhZ2dhYmxlU29ydEV2ZW50cyA9IG5ldyBFdmVudEVtaXR0ZXIoKVxuICBldmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyKClcbiAgdGFibGVTZXR0aW5ncyA9IG51bGxcblxuICBzZXR1cCgpIHtcbiAgICBjb25zdCB7dH0gPSB1c2VJMThuKHtuYW1lc3BhY2U6IFwianMuYXBpX21ha2VyLnRhYmxlXCJ9KVxuICAgIGNvbnN0IHtuYW1lOiBicmVha3BvaW50LCBtZFVwfSA9IHVzZUJyZWFrcG9pbnQoKVxuICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gdXNlUXVlcnlQYXJhbXMoKVxuXG4gICAgdGhpcy5zZXRJbnN0YW5jZSh7XG4gICAgICBicmVha3BvaW50LFxuICAgICAgZmlsdGVyRm9ybVJlZjogdXNlUmVmKCksXG4gICAgICBtZFVwLFxuICAgICAgdFxuICAgIH0pXG5cbiAgICBjb25zdCBjb2xsZWN0aW9uS2V5ID0gZGlnZyh0aGlzLnAubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLCBcImNvbGxlY3Rpb25LZXlcIilcbiAgICBsZXQgcXVlcnlOYW1lID0gdGhpcy5wcm9wcy5xdWVyeU5hbWVcblxuICAgIGlmICghcXVlcnlOYW1lKSBxdWVyeU5hbWUgPSBjb2xsZWN0aW9uS2V5XG5cbiAgICBjb25zdCBxdWVyeVNOYW1lID0gYCR7cXVlcnlOYW1lfV9zYFxuXG4gICAgdGhpcy51c2VTdGF0ZXMoe1xuICAgICAgY29sdW1uczogKCkgPT4gdGhpcy5jb2x1bW5zQXNBcnJheSgpLFxuICAgICAgY3VycmVudFdvcmtwbGFjZTogdW5kZWZpbmVkLFxuICAgICAgY3VycmVudFdvcmtwbGFjZUNvdW50OiBudWxsLFxuICAgICAgZmlsdGVyRm9ybTogbnVsbCxcbiAgICAgIGNvbHVtbnNUb1Nob3c6IG51bGwsXG4gICAgICBkcmFnZ2VkQ29sdW1uOiBudWxsLFxuICAgICAgaWRlbnRpZmllcjogKCkgPT4gdGhpcy5wcm9wcy5pZGVudGlmaWVyIHx8IGAke2NvbGxlY3Rpb25LZXl9LWRlZmF1bHRgLFxuICAgICAgbGFzdFVwZGF0ZTogKCkgPT4gbmV3IERhdGUoKSxcbiAgICAgIHByZWxvYWQ6IHVuZGVmaW5lZCxcbiAgICAgIHByZXBhcmVkQ29sdW1uczogdW5kZWZpbmVkLFxuICAgICAgcXVlcnlOYW1lLFxuICAgICAgcXVlcnlRTmFtZTogKCkgPT4gYCR7cXVlcnlOYW1lfV9xYCxcbiAgICAgIHF1ZXJ5UGFnZU5hbWU6ICgpID0+IGAke3F1ZXJ5TmFtZX1fcGFnZWAsXG4gICAgICBxdWVyeVNOYW1lLFxuICAgICAgcmVzaXppbmc6IGZhbHNlLFxuICAgICAgc2hvd0ZpbHRlcnM6ICgpID0+IEJvb2xlYW4ocXVlcnlQYXJhbXNbcXVlcnlTTmFtZV0pLFxuICAgICAgc2hvd1NldHRpbmdzOiBmYWxzZSxcbiAgICAgIHRhYmxlU2V0dGluZzogdW5kZWZpbmVkLFxuICAgICAgdGFibGVTZXR0aW5nTG9hZGVkOiBmYWxzZSxcbiAgICAgIHRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleTogdW5kZWZpbmVkLFxuICAgICAgd2lkdGg6IHVuZGVmaW5lZCxcbiAgICAgIHdpZHRoczogbnVsbFxuICAgIH0pXG5cbiAgICB0aGlzLnRhYmxlQ29udGV4dFZhbHVlID0gdXNlTWVtbyhcbiAgICAgICgpID0+ICh7XG4gICAgICAgIGNhY2hlS2V5OiB0aGlzLnMudGFibGVTZXR0aW5nRnVsbENhY2hlS2V5LFxuICAgICAgICBsYXN0VXBkYXRlOiB0aGlzLnMubGFzdFVwZGF0ZSxcbiAgICAgICAgcmVzaXppbmc6IHRoaXMucy5yZXNpemluZyxcbiAgICAgICAgdGFibGU6IHRoaXNcbiAgICAgIH0pLFxuICAgICAgW3RoaXMucy5sYXN0VXBkYXRlLCB0aGlzLnMucmVzaXppbmcsIHRoaXMucy50YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXldXG4gICAgKVxuXG4gICAgdXNlTWVtbygoKSA9PiB7XG4gICAgICBpZiAodGhpcy5wcm9wcy53b3JrcGxhY2UpIHtcbiAgICAgICAgdGhpcy5sb2FkQ3VycmVudFdvcmtwbGFjZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMubG9hZEN1cnJlbnRXb3JrcGxhY2VDb3VudCgpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSwgW3RoaXMucC5jdXJyZW50VXNlcj8uaWQoKV0pXG5cbiAgICB1c2VNZW1vKCgpID0+IHtcbiAgICAgIGlmICghdGhpcy50dC50YWJsZVNldHRpbmdzICYmIHRoaXMucy53aWR0aCkge1xuICAgICAgICB0aGlzLmxvYWRUYWJsZVNldHRpbmcoKVxuICAgICAgfVxuICAgIH0sIFt0aGlzLnAuY3VycmVudFVzZXI/LmlkKCksIHRoaXMucy53aWR0aF0pXG5cbiAgICB1c2VNb2RlbEV2ZW50KHRoaXMucy5jdXJyZW50V29ya3BsYWNlLCBcIndvcmtwbGFjZV9saW5rc19jcmVhdGVkXCIsIHRoaXMudHQub25MaW5rc0NyZWF0ZWQpXG4gICAgdXNlTW9kZWxFdmVudCh0aGlzLnMuY3VycmVudFdvcmtwbGFjZSwgXCJ3b3JrcGxhY2VfbGlua3NfZGVzdHJveWVkXCIsIHRoaXMudHQub25MaW5rc0Rlc3Ryb3llZClcblxuICAgIGxldCBjb2xsZWN0aW9uUmVhZHkgPSB0cnVlXG4gICAgbGV0IHNlbGVjdFxuXG4gICAgaWYgKCF0aGlzLnMucHJlcGFyZWRDb2x1bW5zKSB7XG4gICAgICBjb2xsZWN0aW9uUmVhZHkgPSBmYWxzZVxuICAgIH1cblxuICAgIGlmIChjb2xsZWN0aW9uUmVhZHkpIHtcbiAgICAgIHNlbGVjdCA9IHNlbGVjdENhbGN1bGF0b3Ioe3RhYmxlOiB0aGlzfSlcbiAgICB9XG5cbiAgICB0aGlzLmNvbGxlY3Rpb24gPSB1c2VDb2xsZWN0aW9uKHtcbiAgICAgIGFiaWxpdGllczogdGhpcy5hYmlsaXRpZXNUb0xvYWQoKSxcbiAgICAgIGRlZmF1bHRQYXJhbXM6IHRoaXMucHJvcHMuZGVmYXVsdFBhcmFtcyxcbiAgICAgIGNvbGxlY3Rpb246IHRoaXMucHJvcHMuY29sbGVjdGlvbixcbiAgICAgIGdyb3VwQnk6IHRoaXMucHJvcHMuZ3JvdXBCeSxcbiAgICAgIGlmQ29uZGl0aW9uOiBjb2xsZWN0aW9uUmVhZHksXG4gICAgICBtb2RlbENsYXNzOiB0aGlzLnByb3BzLm1vZGVsQ2xhc3MsXG4gICAgICBvbk1vZGVsc0xvYWRlZDogdGhpcy5wcm9wcy5vbk1vZGVsc0xvYWRlZCxcbiAgICAgIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQ6IHRoaXMucHJvcHMubm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCxcbiAgICAgIG5vUmVjb3Jkc0ZvdW5kQ29udGVudDogdGhpcy5wcm9wcy5ub1JlY29yZHNGb3VuZENvbnRlbnQsXG4gICAgICBwYWdpbmF0aW9uOiB0cnVlLFxuICAgICAgcHJlbG9hZHM6IHRoaXMuc3RhdGUucHJlbG9hZCxcbiAgICAgIHF1ZXJ5TWV0aG9kOiB0aGlzLnByb3BzLnF1ZXJ5TWV0aG9kLFxuICAgICAgcXVlcnlOYW1lLFxuICAgICAgc2VsZWN0LFxuICAgICAgc2VsZWN0Q29sdW1uczogdGhpcy5wcm9wcy5zZWxlY3RDb2x1bW5zXG4gICAgfSlcbiAgICB0aGlzLnF1ZXJ5V2l0aG91dFBhZ2luYXRpb24gPSB1c2VNZW1vKFxuICAgICAgKCkgPT4gdGhpcy5jb2xsZWN0aW9uPy5xdWVyeT8uY2xvbmUoKT8uZXhjZXB0KFwicGFnZVwiKSxcbiAgICAgIFt0aGlzLmNvbGxlY3Rpb24ucXVlcnldXG4gICAgKVxuXG4gICAgdXNlRXZlbnRFbWl0dGVyKHRoaXMudHQuZHJhZ2dhYmxlU29ydEV2ZW50cywgXCJvbkRyYWdTdGFydFwiLCB0aGlzLnR0Lm9uRHJhZ1N0YXJ0KVxuICAgIHVzZUV2ZW50RW1pdHRlcih0aGlzLnR0LmRyYWdnYWJsZVNvcnRFdmVudHMsIFwib25EcmFnRW5kQW5pbWF0aW9uXCIsIHRoaXMudHQub25EcmFnRW5kQW5pbWF0aW9uKVxuICAgIHVzZUV2ZW50RW1pdHRlcih0aGlzLnR0LmV2ZW50cywgXCJjb2x1bW5WaXNpYmlsaXR5VXBkYXRlZFwiLCB0aGlzLnR0Lm9uQ29sdW1uVmlzaWJpbGl0eVVwZGF0ZWQpXG4gIH1cblxuICBvbkNvbHVtblZpc2liaWxpdHlVcGRhdGVkID0gKCkgPT4gdGhpcy5zZXRTdGF0ZSh7Y29sdW1uc1RvU2hvdzogdGhpcy5nZXRDb2x1bW5zVG9TaG93KHRoaXMucy5jb2x1bW5zKSwgbGFzdFVwZGF0ZTogbmV3IERhdGUoKX0pXG4gIG9uRHJhZ1N0YXJ0ID0gKHtpdGVtfSkgPT4gaXRlbS5hbmltYXRlZFpJbmRleC5zZXRWYWx1ZSg5OTk5KVxuICBvbkRyYWdFbmRBbmltYXRpb24gPSAoe2l0ZW19KSA9PiBpdGVtLmFuaW1hdGVkWkluZGV4LnNldFZhbHVlKDApXG5cbiAgYXN5bmMgbG9hZEN1cnJlbnRXb3JrcGxhY2UoKSB7XG4gICAgY29uc3QgV29ya3BsYWNlID0gbW9kZWxDbGFzc1JlcXVpcmUoXCJXb3JrcGxhY2VcIilcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBXb3JrcGxhY2UuY3VycmVudCgpXG4gICAgY29uc3QgY3VycmVudFdvcmtwbGFjZSA9IGRpZyhyZXN1bHQsIFwiY3VycmVudFwiLCAwKVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7Y3VycmVudFdvcmtwbGFjZX0pXG4gIH1cblxuICBhc3luYyBsb2FkQ3VycmVudFdvcmtwbGFjZUNvdW50KCkge1xuICAgIGlmICghdGhpcy5zLmN1cnJlbnRXb3JrcGxhY2UpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe2N1cnJlbnRXb3JrcGxhY2VDb3VudDogMH0pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBXb3JrcGxhY2VMaW5rID0gbW9kZWxDbGFzc1JlcXVpcmUoXCJXb3JrcGxhY2VMaW5rXCIpXG4gICAgY29uc3QgY3VycmVudFdvcmtwbGFjZUNvdW50ID0gYXdhaXQgV29ya3BsYWNlTGlua1xuICAgICAgLnJhbnNhY2soe1xuICAgICAgICByZXNvdXJjZV90eXBlX2VxOiB0aGlzLnAubW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLm5hbWUsXG4gICAgICAgIHdvcmtwbGFjZV9pZF9lcTogdGhpcy5zLmN1cnJlbnRXb3JrcGxhY2UuaWQoKVxuICAgICAgfSlcbiAgICAgIC5jb3VudCgpXG5cbiAgICB0aGlzLnNldFN0YXRlKHtjdXJyZW50V29ya3BsYWNlQ291bnR9KVxuICB9XG5cbiAgZ2V0Q29sdW1uc1RvU2hvdyhjb2x1bW5zKSB7XG4gICAgcmV0dXJuIGNvbHVtbnNcbiAgICAgIC5maWx0ZXIoKHtjb2x1bW4sIHRhYmxlU2V0dGluZ0NvbHVtbn0pID0+IGNvbHVtblZpc2libGUoY29sdW1uLCB0YWJsZVNldHRpbmdDb2x1bW4pKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEudGFibGVTZXR0aW5nQ29sdW1uLnBvc2l0aW9uKCkgLSBiLnRhYmxlU2V0dGluZ0NvbHVtbi5wb3NpdGlvbigpKVxuICB9XG5cbiAgYXN5bmMgbG9hZFRhYmxlU2V0dGluZygpIHtcbiAgICB0aGlzLnRhYmxlU2V0dGluZ3MgPSBuZXcgVGFibGVTZXR0aW5ncyh7dGFibGU6IHRoaXN9KVxuXG4gICAgY29uc3QgdGFibGVTZXR0aW5nID0gYXdhaXQgdGhpcy50YWJsZVNldHRpbmdzLmxvYWRFeGlzdGluZ09yQ3JlYXRlVGFibGVTZXR0aW5ncygpXG5cbiAgICBpZiAoIXRhYmxlU2V0dGluZykgdGhyb3cgbmV3IEVycm9yKFwiTm8gdGFibGVTZXR0aW5nIHJldHVybmVkIGJ5IHRhYmxlU2V0dGluZ3MubG9hZEV4aXN0aW5nT3JDcmVhdGVUYWJsZVNldHRpbmdzKClcIilcblxuICAgIGNvbnN0IHtjb2x1bW5zLCBwcmVsb2FkfSA9IHRoaXMudGFibGVTZXR0aW5ncy5wcmVwYXJlZENvbHVtbnModGFibGVTZXR0aW5nKVxuICAgIGNvbnN0IHt3aWR0aH0gPSB0aGlzLnNcbiAgICBjb25zdCB3aWR0aHMgPSBuZXcgV2lkdGhzKHtjb2x1bW5zLCB0YWJsZTogdGhpcywgd2lkdGh9KVxuICAgIGNvbnN0IGNvbHVtbnNUb1Nob3cgPSB0aGlzLmdldENvbHVtbnNUb1Nob3coY29sdW1ucylcblxuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY29sdW1ucyxcbiAgICAgIGNvbHVtbnNUb1Nob3csXG4gICAgICBwcmVwYXJlZENvbHVtbnM6IGNvbHVtbnMsXG4gICAgICBwcmVsb2FkOiB0aGlzLm1lcmdlZFByZWxvYWRzKHByZWxvYWQpLFxuICAgICAgdGFibGVTZXR0aW5nLFxuICAgICAgdGFibGVTZXR0aW5nTG9hZGVkOiB0cnVlLFxuICAgICAgdGFibGVTZXR0aW5nRnVsbENhY2hlS2V5OiB0YWJsZVNldHRpbmcuZnVsbENhY2hlS2V5KCksXG4gICAgICB3aWR0aHNcbiAgICB9KVxuICB9XG5cbiAgdXBkYXRlU2V0dGluZ3NGdWxsQ2FjaGVLZXkgPSAoKSA9PiB0aGlzLnNldFN0YXRlKHt0YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXk6IHRoaXMuc3RhdGUudGFibGVTZXR0aW5nLmZ1bGxDYWNoZUtleSgpfSlcblxuICBjb2x1bW5zQXNBcnJheSA9ICgpID0+IHtcbiAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMuY29sdW1ucyA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BzLmNvbHVtbnMoKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnByb3BzLmNvbHVtbnNcbiAgfVxuXG4gIG1lcmdlZFByZWxvYWRzKHByZWxvYWQpIHtcbiAgICBjb25zdCB7cHJlbG9hZHN9ID0gdGhpcy5wcm9wc1xuICAgIGxldCBtZXJnZWRQcmVsb2FkcyA9IFtdXG5cbiAgICBpZiAocHJlbG9hZHMpIG1lcmdlZFByZWxvYWRzID0gbWVyZ2VkUHJlbG9hZHMuY29uY2F0KHByZWxvYWRzKVxuICAgIGlmIChwcmVsb2FkKSBtZXJnZWRQcmVsb2FkcyA9IG1lcmdlZFByZWxvYWRzLmNvbmNhdChwcmVsb2FkKVxuXG4gICAgcmV0dXJuIHVuaXF1bml6ZShtZXJnZWRQcmVsb2FkcylcbiAgfVxuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7bW9kZWxDbGFzcywgbm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCwgbm9SZWNvcmRzRm91bmRDb250ZW50fSA9IHRoaXMucFxuICAgIGNvbnN0IHtjb2xsZWN0aW9uLCBjdXJyZW50VXNlcn0gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge3F1ZXJ5TmFtZSwgcXVlcnlTTmFtZSwgc2hvd0ZpbHRlcnN9ID0gdGhpcy5zXG4gICAgY29uc3Qge1xuICAgICAgbW9kZWxzLFxuICAgICAgb3ZlcmFsbENvdW50LFxuICAgICAgcVBhcmFtcyxcbiAgICAgIHF1ZXJ5LFxuICAgICAgcmVzdWx0LFxuICAgICAgc2hvd05vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQsXG4gICAgICBzaG93Tm9SZWNvcmRzRm91bmRDb250ZW50XG4gICAgfSA9IGRpZ3MoXG4gICAgICB0aGlzLmNvbGxlY3Rpb24sXG4gICAgICBcIm1vZGVsc1wiLFxuICAgICAgXCJvdmVyYWxsQ291bnRcIixcbiAgICAgIFwicVBhcmFtc1wiLFxuICAgICAgXCJxdWVyeVwiLFxuICAgICAgXCJyZXN1bHRcIixcbiAgICAgIFwic2hvd05vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnRcIixcbiAgICAgIFwic2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudFwiXG4gICAgKVxuXG4gICAgaWYgKGNvbGxlY3Rpb24gJiYgY29sbGVjdGlvbi5hcmdzLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKS5uYW1lICE9IG1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKS5uYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBNb2RlbCBjbGFzcyBmcm9tIGNvbGxlY3Rpb24gJyR7Y29sbGVjdGlvbi5hcmdzLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKS5uYW1lfScgYCArXG4gICAgICAgIGBkaWRuJ3QgbWF0Y2ggbW9kZWwgY2xhc3Mgb24gdGFibGU6ICcke21vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKS5uYW1lfSdgXG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxWaWV3XG4gICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzW2Byb290Vmlldy0ke3RoaXMuY2xhc3NOYW1lKCl9YF0gfHw9IHtjbGFzczogdGhpcy5jbGFzc05hbWUoKX19XG4gICAgICAgIG9uTGF5b3V0PXt0aGlzLnR0Lm9uQ29udGFpbmVyTGF5b3V0fVxuICAgICAgICBzdHlsZT17dGhpcy5wcm9wcy5zdHlsZXM/LmNvbnRhaW5lcn1cbiAgICAgID5cbiAgICAgICAge3Nob3dOb1JlY29yZHNBdmFpbGFibGVDb250ZW50ICYmXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJsaXZlLXRhYmxlLS1uby1yZWNvcmRzLWF2YWlsYWJsZS1jb250ZW50XCI+XG4gICAgICAgICAgICB7bm9SZWNvcmRzQXZhaWxhYmxlQ29udGVudCh7bW9kZWxzLCBxUGFyYW1zLCBvdmVyYWxsQ291bnR9KX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICB7c2hvd05vUmVjb3Jkc0ZvdW5kQ29udGVudCAmJlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwibGl2ZS10YWJsZS0tbm8tcmVjb3Jkcy1mb3VuZC1jb250ZW50XCI+XG4gICAgICAgICAgICB7bm9SZWNvcmRzRm91bmRDb250ZW50KHttb2RlbHMsIHFQYXJhbXMsIG92ZXJhbGxDb3VudH0pfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICAgIHtzaG93RmlsdGVycyAmJlxuICAgICAgICAgIDxGaWx0ZXJzIGN1cnJlbnRVc2VyPXtjdXJyZW50VXNlcn0gbW9kZWxDbGFzcz17bW9kZWxDbGFzc30gcXVlcnlOYW1lPXtxdWVyeU5hbWV9IHF1ZXJ5U05hbWU9e3F1ZXJ5U05hbWV9IC8+XG4gICAgICAgIH1cbiAgICAgICAgeygoKSA9PiB7XG4gICAgICAgICAgaWYgKHFQYXJhbXMgJiYgcXVlcnkgJiYgcmVzdWx0ICYmIG1vZGVscyAmJiAhc2hvd05vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQgJiYgIXNob3dOb1JlY29yZHNGb3VuZENvbnRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhcmRPclRhYmxlKClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubG9hZGluZ0NvbnRlbnQoe21vZGVscywgcVBhcmFtcywgcXVlcnksIHJlc3VsdH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KSgpfVxuICAgICAgPC9WaWV3PlxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlIHRoZSBoZWFkZXIgdGl0bGUgb3IgY3VzdG9tIGhlYWRlciBjb250ZW50LlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NdXG4gICAqIEBwYXJhbSB7QXJyYXk8b2JqZWN0Pn0gW2FyZ3MubW9kZWxzXVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3MucVBhcmFtc11cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzLnF1ZXJ5XVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3MucmVzdWx0XVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfFJlYWN0LlJlYWN0Tm9kZX1cbiAgICovXG4gIHRhYmxlSGVhZGVyQ29udGVudCAoe21vZGVscywgcVBhcmFtcywgcXVlcnksIHJlc3VsdH0gPSB7fSkge1xuICAgIGNvbnN0IHtoZWFkZXIsIG1vZGVsQ2xhc3N9ID0gdGhpcy5wcm9wc1xuXG4gICAgaWYgKHR5cGVvZiBoZWFkZXIgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICByZXR1cm4gaGVhZGVyKHttb2RlbHMsIHFQYXJhbXMsIHF1ZXJ5LCByZXN1bHR9KVxuICAgIH0gZWxzZSBpZiAoaGVhZGVyKSB7XG4gICAgICByZXR1cm4gaGVhZGVyXG4gICAgfVxuXG4gICAgcmV0dXJuIG1vZGVsQ2xhc3MubW9kZWxOYW1lKCkuaHVtYW4oe2NvdW50OiAyfSlcbiAgfVxuXG4gIGxvYWRpbmdDb250ZW50ICh7bW9kZWxzLCBxUGFyYW1zLCBxdWVyeSwgcmVzdWx0fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGFiaWxpdGllcyxcbiAgICAgIGFjdGlvbnNDb250ZW50LFxuICAgICAgYXBwSGlzdG9yeSxcbiAgICAgIGNhcmQsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xsZWN0aW9uLFxuICAgICAgY29sdW1ucyxcbiAgICAgIGNvbnRyb2xzLFxuICAgICAgY3VycmVudFVzZXIsXG4gICAgICBkZWZhdWx0RGF0ZUZvcm1hdE5hbWUsXG4gICAgICBkZWZhdWx0RGF0ZVRpbWVGb3JtYXROYW1lLFxuICAgICAgZGVmYXVsdFBhcmFtcyxcbiAgICAgIGRlc3Ryb3lFbmFibGVkLFxuICAgICAgZGVzdHJveU1lc3NhZ2UsXG4gICAgICBlZGl0TW9kZWxQYXRoLFxuICAgICAgZmlsdGVyQ2FyZCxcbiAgICAgIGZpbHRlckNvbnRlbnQsXG4gICAgICBmaWx0ZXJTdWJtaXRCdXR0b24sXG4gICAgICBmaWx0ZXJTdWJtaXRMYWJlbCxcbiAgICAgIGdyb3VwQnksXG4gICAgICBoZWFkZXIsXG4gICAgICBpZGVudGlmaWVyLFxuICAgICAgbW9kZWxDbGFzcyxcbiAgICAgIG5vUmVjb3Jkc0F2YWlsYWJsZUNvbnRlbnQsXG4gICAgICBub1JlY29yZHNGb3VuZENvbnRlbnQsXG4gICAgICBvbk1vZGVsc0xvYWRlZCxcbiAgICAgIHBhZ2luYXRlQ29udGVudCxcbiAgICAgIHBhZ2luYXRpb25Db21wb25lbnQsXG4gICAgICBwcmVsb2FkcyxcbiAgICAgIHF1ZXJ5TWV0aG9kLFxuICAgICAgcXVlcnlOYW1lLFxuICAgICAgc2VsZWN0LFxuICAgICAgc2VsZWN0Q29sdW1ucyxcbiAgICAgIHN0eWxlVUksXG4gICAgICB2aWV3TW9kZWxQYXRoLFxuICAgICAgd29ya3BsYWNlLFxuICAgICAgLi4ucmVzdFByb3BzXG4gICAgfSA9IHRoaXMucHJvcHNcblxuICAgIGNvbnN0IGxvYWRpbmdDb250ZW50ID0gKFxuICAgICAgPFZpZXcgZGF0YVNldD17ZGF0YVNldHMubG9hZGluZyB8fD0ge2NsYXNzOiBcImFwaS1tYWtlci0tdGFibGUtLWxvYWRpbmdcIn19PlxuICAgICAgICA8VGV4dD57dGhpcy50KFwiLmxvYWRpbmdfZG90X2RvdF9kaXRcIiwge2RlZmF1bHRWYWx1ZTogXCJMb2FkaW5nLi4uXCJ9KX08L1RleHQ+XG4gICAgICA8L1ZpZXc+XG4gICAgKVxuXG4gICAgaWYgKCFjYXJkKSByZXR1cm4gbG9hZGluZ0NvbnRlbnRcblxuICAgIGNvbnN0IHNhZmVNb2RlbHMgPSBtb2RlbHMgfHwgW11cbiAgICBjb25zdCBzYWZlQXJncyA9IHttb2RlbHM6IHNhZmVNb2RlbHMsIHFQYXJhbXMsIHF1ZXJ5LCByZXN1bHR9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPENhcmRcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFwibGl2ZS10YWJsZS0tdGFibGUtY2FyZFwiLCBcIm1iLTRcIiwgY2xhc3NOYW1lKX1cbiAgICAgICAgY29udHJvbHM9e3RoaXMudGFibGVDb250cm9scyhzYWZlQXJncyl9XG4gICAgICAgIGhlYWRlcj17dGhpcy50YWJsZUhlYWRlckNvbnRlbnQoc2FmZUFyZ3MpfVxuICAgICAgICB7Li4ucmVzdFByb3BzfVxuICAgICAgPlxuICAgICAgICB7bG9hZGluZ0NvbnRlbnR9XG4gICAgICA8L0NhcmQ+XG4gICAgKVxuICB9XG5cbiAgYWJpbGl0aWVzVG9Mb2FkICgpIHtcbiAgICBjb25zdCBhYmlsaXRpZXNUb0xvYWQgPSB7fVxuICAgIGNvbnN0IHthYmlsaXRpZXMsIG1vZGVsQ2xhc3N9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IG93bkFiaWxpdGllcyA9IFtdXG5cbiAgICBpZiAodGhpcy5wcm9wcy5kZXN0cm95RW5hYmxlZCkgb3duQWJpbGl0aWVzLnB1c2goXCJkZXN0cm95XCIpXG4gICAgaWYgKHRoaXMucHJvcHMuZWRpdE1vZGVsUGF0aCkgb3duQWJpbGl0aWVzLnB1c2goXCJlZGl0XCIpXG4gICAgaWYgKHRoaXMucHJvcHMudmlld01vZGVsUGF0aCkgb3duQWJpbGl0aWVzLnB1c2goXCJzaG93XCIpXG5cbiAgICBpZiAob3duQWJpbGl0aWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IG1vZGVsQ2xhc3NOYW1lID0gZGlnZyhtb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCksIFwibmFtZVwiKVxuXG4gICAgICBhYmlsaXRpZXNUb0xvYWRbbW9kZWxDbGFzc05hbWVdID0gb3duQWJpbGl0aWVzXG4gICAgfVxuXG4gICAgaWYgKGFiaWxpdGllcykge1xuICAgICAgZm9yIChjb25zdCBtb2RlbE5hbWUgaW4gYWJpbGl0aWVzKSB7XG4gICAgICAgIGlmICghKG1vZGVsTmFtZSBpbiBhYmlsaXRpZXNUb0xvYWQpKSB7XG4gICAgICAgICAgYWJpbGl0aWVzVG9Mb2FkW21vZGVsTmFtZV0gPSBbXVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBhYmlsaXR5IG9mIGFiaWxpdGllc1ttb2RlbE5hbWVdKSB7XG4gICAgICAgICAgYWJpbGl0aWVzVG9Mb2FkW21vZGVsTmFtZV0ucHVzaChhYmlsaXR5KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFiaWxpdGllc1RvTG9hZFxuICB9XG5cbiAgLyoqXG4gICAqIERlY2lkZSBiZXR3ZWVuIGNhcmQvdGFibGUgcmVuZGVyaW5nIG9uY2UgZGF0YSBpcyByZWFkeS5cbiAgICogQHJldHVybnMge1JlYWN0LlJlYWN0Tm9kZX1cbiAgICovXG4gIGNhcmRPclRhYmxlICgpIHtcbiAgICBjb25zdCB7XG4gICAgICBhYmlsaXRpZXMsXG4gICAgICBhY3Rpb25zQ29udGVudCxcbiAgICAgIGFwcEhpc3RvcnksXG4gICAgICBjYXJkLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sbGVjdGlvbixcbiAgICAgIGNvbHVtbnMsXG4gICAgICBjb250cm9scyxcbiAgICAgIGN1cnJlbnRVc2VyLFxuICAgICAgZGVmYXVsdERhdGVGb3JtYXROYW1lLFxuICAgICAgZGVmYXVsdERhdGVUaW1lRm9ybWF0TmFtZSxcbiAgICAgIGRlZmF1bHRQYXJhbXMsXG4gICAgICBkZXN0cm95RW5hYmxlZCxcbiAgICAgIGRlc3Ryb3lNZXNzYWdlLFxuICAgICAgZWRpdE1vZGVsUGF0aCxcbiAgICAgIGZpbHRlckNhcmQsXG4gICAgICBmaWx0ZXJDb250ZW50LFxuICAgICAgZmlsdGVyU3VibWl0QnV0dG9uLFxuICAgICAgZmlsdGVyU3VibWl0TGFiZWwsXG4gICAgICBncm91cEJ5LFxuICAgICAgaGVhZGVyLFxuICAgICAgaWRlbnRpZmllcixcbiAgICAgIG1vZGVsQ2xhc3MsXG4gICAgICBub1JlY29yZHNBdmFpbGFibGVDb250ZW50LFxuICAgICAgbm9SZWNvcmRzRm91bmRDb250ZW50LFxuICAgICAgb25Nb2RlbHNMb2FkZWQsXG4gICAgICBwYWdpbmF0ZUNvbnRlbnQsXG4gICAgICBwYWdpbmF0aW9uQ29tcG9uZW50LFxuICAgICAgcHJlbG9hZHMsXG4gICAgICBxdWVyeU1ldGhvZCxcbiAgICAgIHF1ZXJ5TmFtZSxcbiAgICAgIHNlbGVjdCxcbiAgICAgIHNlbGVjdENvbHVtbnMsXG4gICAgICBzdHlsZVVJLFxuICAgICAgdmlld01vZGVsUGF0aCxcbiAgICAgIHdvcmtwbGFjZSxcbiAgICAgIC4uLnJlc3RQcm9wc1xuICAgIH0gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge21vZGVscywgcVBhcmFtcywgcXVlcnksIHJlc3VsdH0gPSBkaWdzKHRoaXMuY29sbGVjdGlvbiwgXCJtb2RlbHNcIiwgXCJxUGFyYW1zXCIsIFwicXVlcnlcIiwgXCJyZXN1bHRcIilcblxuICAgIGNvbnN0IGhlYWRlckNvbnRlbnQgPSB0aGlzLnRhYmxlSGVhZGVyQ29udGVudCh7bW9kZWxzLCBxUGFyYW1zLCBxdWVyeSwgcmVzdWx0fSlcbiAgICBsZXQgUGFnaW5hdGlvbkNvbXBvbmVudFxuXG4gICAgaWYgKCFwYWdpbmF0ZUNvbnRlbnQpIHtcbiAgICAgIGlmIChwYWdpbmF0aW9uQ29tcG9uZW50KSB7XG4gICAgICAgIFBhZ2luYXRpb25Db21wb25lbnQgPSBwYWdpbmF0aW9uQ29tcG9uZW50XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBQYWdpbmF0aW9uQ29tcG9uZW50ID0gUGFnaW5hdGVcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBmbGF0TGlzdCA9IChcbiAgICAgIDxUYWJsZUNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3RoaXMudHQudGFibGVDb250ZXh0VmFsdWV9PlxuICAgICAgICA8RmxhdExpc3RcbiAgICAgICAgICBkYXRhPXttb2RlbHN9XG4gICAgICAgICAgZGF0YVNldD17ZGF0YVNldHNbYGZsYXRMaXN0LSR7Y2xhc3NOYW1lfS0ke3RoaXMucy50YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXl9YF0gfHw9IHtcbiAgICAgICAgICAgIGNsYXNzOiBjbGFzc05hbWVzKFwiYXBpLW1ha2VyLS10YWJsZVwiLCBjbGFzc05hbWUpLFxuICAgICAgICAgICAgY2FjaGVLZXk6IHRoaXMucy50YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXksXG4gICAgICAgICAgICBsYXN0VXBkYXRlOiB0aGlzLnMubGFzdFVwZGF0ZVxuICAgICAgICAgIH19XG4gICAgICAgICAgZXh0cmFEYXRhPXt0aGlzLnMubGFzdFVwZGF0ZX1cbiAgICAgICAgICBrZXlFeHRyYWN0b3I9e3RoaXMudHQua2V5RXh0cmF0b3J9XG4gICAgICAgICAgTGlzdEhlYWRlckNvbXBvbmVudD17TGlzdEhlYWRlckNvbXBvbmVudH1cbiAgICAgICAgICByZW5kZXJJdGVtPXt0aGlzLnR0LnJlbmRlckl0ZW19XG4gICAgICAgICAgc2hvd3NIb3Jpem9udGFsU2Nyb2xsSW5kaWNhdG9yXG4gICAgICAgICAgc3R5bGU9e3N0eWxlc1tgZmxhdExpc3QtJHtzdHlsZVVJfWBdIHx8PSB7XG4gICAgICAgICAgICBvdmVyZmxvd1g6IFwiYXV0b1wiLFxuICAgICAgICAgICAgYm9yZGVyOiBzdHlsZVVJID8gXCIxcHggc29saWQgI2RiZGJkYlwiIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYm9yZGVyUmFkaXVzOiBzdHlsZVVJID8gNSA6IHVuZGVmaW5lZFxuICAgICAgICAgIH19XG4gICAgICAgICAgey4uLnJlc3RQcm9wc31cbiAgICAgICAgLz5cbiAgICAgIDwvVGFibGVDb250ZXh0LlByb3ZpZGVyPlxuICAgIClcblxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7ZmlsdGVyQ29udGVudCAmJiBmaWx0ZXJDYXJkICYmXG4gICAgICAgICAgPENhcmQgY2xhc3NOYW1lPVwibGl2ZS10YWJsZS0tZmlsdGVyLWNhcmQgbWItNFwiPlxuICAgICAgICAgICAge3RoaXMuZmlsdGVyRm9ybSgpfVxuICAgICAgICAgIDwvQ2FyZD5cbiAgICAgICAgfVxuICAgICAgICB7ZmlsdGVyQ29udGVudCAmJiAhZmlsdGVyQ2FyZCAmJlxuICAgICAgICAgIHRoaXMuZmlsdGVyRm9ybSgpXG4gICAgICAgIH1cbiAgICAgICAge2NhcmQgJiZcbiAgICAgICAgICA8Q2FyZFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFwibGl2ZS10YWJsZS0tdGFibGUtY2FyZFwiLCBcIm1iLTRcIiwgY2xhc3NOYW1lKX1cbiAgICAgICAgICAgIGNvbnRyb2xzPXt0aGlzLnRhYmxlQ29udHJvbHMoKX1cbiAgICAgICAgICAgIGhlYWRlcj17aGVhZGVyQ29udGVudH1cbiAgICAgICAgICAgIGZvb3Rlcj17dGhpcy50YWJsZUZvb3RlcigpfVxuICAgICAgICAgICAgey4uLnJlc3RQcm9wc31cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7ZmxhdExpc3R9XG4gICAgICAgICAgPC9DYXJkPlxuICAgICAgICB9XG4gICAgICAgIHshY2FyZCAmJiBmbGF0TGlzdH1cbiAgICAgICAge3Jlc3VsdCAmJiBQYWdpbmF0aW9uQ29tcG9uZW50ICYmXG4gICAgICAgICAgPFBhZ2luYXRpb25Db21wb25lbnQgcmVzdWx0PXtyZXN1bHR9IC8+XG4gICAgICAgIH1cbiAgICAgICAge3Jlc3VsdCAmJiBwYWdpbmF0ZUNvbnRlbnQgJiZcbiAgICAgICAgICBwYWdpbmF0ZUNvbnRlbnQoe3Jlc3VsdH0pXG4gICAgICAgIH1cbiAgICAgIDwvPlxuICAgIClcbiAgfVxuXG4gIG9uQ29udGFpbmVyTGF5b3V0ID0gKGUpID0+IHtcbiAgICBjb25zdCB7d2lkdGh9ID0gZS5uYXRpdmVFdmVudC5sYXlvdXRcbiAgICBjb25zdCB7d2lkdGhzfSA9IHRoaXMuc1xuXG4gICAgdGhpcy5zZXRTdGF0ZSh7d2lkdGh9KVxuICAgIGlmICh3aWR0aHMpIHdpZHRocy50YWJsZVdpZHRoID0gd2lkdGhcbiAgfVxuXG4gIG9uTGlua3NDcmVhdGVkID0gKHthcmdzfSkgPT4ge1xuICAgIGNvbnN0IG1vZGVsQ2xhc3NOYW1lID0gdGhpcy5wLm1vZGVsQ2xhc3MubW9kZWxDbGFzc0RhdGEoKS5uYW1lXG5cbiAgICBpZiAoYXJncy5jcmVhdGVkW21vZGVsQ2xhc3NOYW1lXSkge1xuICAgICAgY29uc3QgYW1vdW50Q3JlYXRlZCA9IGFyZ3MuY3JlYXRlZFttb2RlbENsYXNzTmFtZV0ubGVuZ3RoXG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoKHByZXZTdGF0ZSkgPT4gKHtcbiAgICAgICAgY3VycmVudFdvcmtwbGFjZUNvdW50OiBwcmV2U3RhdGUuY3VycmVudFdvcmtwbGFjZUNvdW50ICsgYW1vdW50Q3JlYXRlZFxuICAgICAgfSkpXG4gICAgfVxuICB9XG5cbiAgb25MaW5rc0Rlc3Ryb3llZCA9ICh7YXJnc30pID0+IHtcbiAgICBjb25zdCBtb2RlbENsYXNzTmFtZSA9IHRoaXMucC5tb2RlbENsYXNzLm1vZGVsQ2xhc3NEYXRhKCkubmFtZVxuXG4gICAgaWYgKGFyZ3MuZGVzdHJveWVkW21vZGVsQ2xhc3NOYW1lXSkge1xuICAgICAgY29uc3QgYW1vdW50RGVzdHJveWVkID0gYXJncy5kZXN0cm95ZWRbbW9kZWxDbGFzc05hbWVdLmxlbmd0aFxuXG4gICAgICB0aGlzLnNldFN0YXRlKChwcmV2U3RhdGUpID0+ICh7XG4gICAgICAgIGN1cnJlbnRXb3JrcGxhY2VDb3VudDogcHJldlN0YXRlLmN1cnJlbnRXb3JrcGxhY2VDb3VudCAtIGFtb3VudERlc3Ryb3llZFxuICAgICAgfSkpXG4gICAgfVxuICB9XG5cbiAga2V5RXh0cmF0b3IgPSAobW9kZWwpID0+IGAke3RoaXMucy50YWJsZVNldHRpbmdGdWxsQ2FjaGVLZXl9LSR7bW9kZWwuaWQoKX1gXG5cbiAgZmlsdGVyRm9ybSA9ICgpID0+IHtcbiAgICBjb25zdCB7ZmlsdGVyRm9ybVJlZiwgc3VibWl0RmlsdGVyLCBzdWJtaXRGaWx0ZXJEZWJvdW5jZX0gPSB0aGlzLnR0XG4gICAgY29uc3Qge2ZpbHRlckNvbnRlbnQsIGZpbHRlclN1Ym1pdEJ1dHRvbn0gPSB0aGlzLnBcbiAgICBjb25zdCB7cXVlcnlRTmFtZX0gPSB0aGlzLnNcbiAgICBjb25zdCB7ZmlsdGVyU3VibWl0TGFiZWx9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtxUGFyYW1zfSA9IGRpZ3ModGhpcy5jb2xsZWN0aW9uLCBcInFQYXJhbXNcIilcblxuICAgIHJldHVybiAoXG4gICAgICA8Rm9ybSBjbGFzc05hbWU9XCJsaXZlLXRhYmxlLS1maWx0ZXItZm9ybVwiIGZvcm1SZWY9e2ZpbHRlckZvcm1SZWZ9IG9uU3VibWl0PXt0aGlzLnR0Lm9uRmlsdGVyRm9ybVN1Ym1pdH0gc2V0Rm9ybT17dGhpcy5zZXRTdGF0ZXMuZmlsdGVyRm9ybX0+XG4gICAgICAgIHtcInNcIiBpbiBxUGFyYW1zICYmXG4gICAgICAgICAgPGlucHV0IG5hbWU9XCJzXCIgdHlwZT1cImhpZGRlblwiIHZhbHVlPXtxUGFyYW1zLnN9IC8+XG4gICAgICAgIH1cbiAgICAgICAge2ZpbHRlckNvbnRlbnQoe1xuICAgICAgICAgIG9uRmlsdGVyQ2hhbmdlZDogc3VibWl0RmlsdGVyLFxuICAgICAgICAgIG9uRmlsdGVyQ2hhbmdlZFdpdGhEZWxheTogc3VibWl0RmlsdGVyRGVib3VuY2UsXG4gICAgICAgICAgcVBhcmFtcyxcbiAgICAgICAgICBxdWVyeVFOYW1lXG4gICAgICAgIH0pfVxuICAgICAgICB7ZmlsdGVyU3VibWl0QnV0dG9uICYmXG4gICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJidG4gYnRuLXByaW1hcnkgbGl2ZS10YWJsZS0tc3VibWl0LWZpbHRlci1idXR0b25cIlxuICAgICAgICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICAgICAgICBzdHlsZT17c3R5bGVzLmZpbHRlclN1Ym1pdEJ1dHRvbiB8fD0ge21hcmdpblRvcDogXCI4cHhcIn19XG4gICAgICAgICAgICB2YWx1ZT17ZmlsdGVyU3VibWl0TGFiZWwgfHwgdGhpcy50KFwiLmZpbHRlclwiLCB7ZGVmYXVsdFZhbHVlOiBcIkZpbHRlclwifSl9XG4gICAgICAgICAgLz5cbiAgICAgICAgfVxuICAgICAgPC9Gb3JtPlxuICAgIClcbiAgfVxuXG4gIG9uRmlsdGVyQ2xpY2tlZCA9IChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgdGhpcy5zZXRTdGF0ZSh7c2hvd0ZpbHRlcnM6ICF0aGlzLnN0YXRlLnNob3dGaWx0ZXJzfSlcbiAgfVxuXG4gIG9uUGVyUGFnZUNoYW5nZWQgPSAoZSkgPT4ge1xuICAgIGNvbnN0IHtxdWVyeU5hbWV9ID0gdGhpcy5zXG4gICAgY29uc3QgbmV3UGVyUGFnZVZhbHVlID0gZGlnZyhlLCBcInRhcmdldFwiLCBcInZhbHVlXCIpXG4gICAgY29uc3QgcGVyS2V5ID0gYCR7cXVlcnlOYW1lfV9wZXJgXG4gICAgY29uc3QgcGFyYW1zQ2hhbmdlID0ge31cblxuICAgIHBhcmFtc0NoYW5nZVtwZXJLZXldID0gbmV3UGVyUGFnZVZhbHVlXG5cbiAgICBQYXJhbXMuY2hhbmdlUGFyYW1zKHBhcmFtc0NoYW5nZSlcbiAgfVxuXG4gIHJlbmRlckl0ZW0gPSAoe2luZGV4LCBpdGVtOiBtb2RlbH0pID0+IHtcbiAgICBpZiAoIXRoaXMucy50YWJsZVNldHRpbmdMb2FkZWQpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIDxUZXh0PlxuICAgICAgICAgICAge3RoaXMudChcIi5sb2FkaW5nX2RvdF9kb3RfZG90XCIsIHtkZWZhdWx0VmFsdWU6IFwiTG9hZGluZy4uLlwifSl9XG4gICAgICAgICAgPC9UZXh0PlxuICAgICAgICA8L1ZpZXc+XG4gICAgICApXG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxNb2RlbFJvd1xuICAgICAgICBjYWNoZUtleT17bW9kZWwuY2FjaGVLZXkoKX1cbiAgICAgICAgY29sdW1ucz17dGhpcy5zLmNvbHVtbnNUb1Nob3d9XG4gICAgICAgIGNvbHVtbldpZHRocz17dGhpcy5jb2x1bW5XaWR0aHMoKX1cbiAgICAgICAgZXZlbnRzPXt0aGlzLnR0LmV2ZW50c31cbiAgICAgICAgaW5kZXg9e2luZGV4fVxuICAgICAgICBrZXk9e21vZGVsLmlkKCl9XG4gICAgICAgIG1vZGVsPXttb2RlbH1cbiAgICAgICAgdGFibGU9e3RoaXN9XG4gICAgICAgIHRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleT17dGhpcy5zLnRhYmxlU2V0dGluZ0Z1bGxDYWNoZUtleX1cbiAgICAgIC8+XG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBiYXNlIHN0eWxlIGZvciBhIGRhdGEgY29sdW1uLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncy5jb2x1bW5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuY29sdW1uSW5kZXhcbiAgICogQHBhcmFtIHtib29sZWFufSBhcmdzLmV2ZW5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3Muc3R5bGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MudHlwZVxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgc3R5bGVGb3JDb2x1bW4gPSAoe2NvbHVtbiwgY29sdW1uSW5kZXgsIGV2ZW4sIHN0eWxlLCB0eXBlfSkgPT4ge1xuICAgIGNvbnN0IHtzdHlsZVVJfSA9IHRoaXMucFxuICAgIGNvbnN0IGRlZmF1bHRTdHlsZSA9IHtcbiAgICAgIGp1c3RpZnlDb250ZW50OiBcImNlbnRlclwiLFxuICAgICAgcGFkZGluZzogOCxcbiAgICAgIG92ZXJmbG93OiBcImhpZGRlblwiXG4gICAgfVxuXG4gICAgaWYgKHN0eWxlVUkpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oZGVmYXVsdFN0eWxlLCB7XG4gICAgICAgIGJhY2tncm91bmRDb2xvcjogZXZlbiA/IFwiI2Y1ZjVmNVwiIDogXCIjZmZmXCJcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHR5cGUgPT0gXCJhY3Rpb25zXCIpIHtcbiAgICAgIGRlZmF1bHRTdHlsZS5mbGV4RGlyZWN0aW9uID0gXCJyb3dcIlxuICAgICAgZGVmYXVsdFN0eWxlLmFsaWduSXRlbXMgPSBcImNlbnRlclwiXG5cbiAgICAgIGlmICh0aGlzLnR0Lm1kVXApIHtcbiAgICAgICAgZGVmYXVsdFN0eWxlLm1hcmdpbkxlZnQgPSBcImF1dG9cIlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmYXVsdFN0eWxlLm1hcmdpblJpZ2h0ID0gXCJhdXRvXCJcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMudHQubWRVcCAmJiBzdHlsZVVJKSB7XG4gICAgICBkZWZhdWx0U3R5bGUuYm9yZGVyUmlnaHQgPSBcIjFweCBzb2xpZCAjZGJkYmRiXCJcbiAgICB9XG5cbiAgICBjb25zdCBhY3R1YWxTdHlsZSA9IE9iamVjdC5hc3NpZ24oXG4gICAgICBkZWZhdWx0U3R5bGUsXG4gICAgICBzdHlsZVxuICAgIClcblxuICAgIHJldHVybiBhY3R1YWxTdHlsZVxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHRoZSBiYXNlIHN0eWxlIGZvciBhIGhlYWRlciBjb2x1bW4uXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzLmNvbHVtblxuICAgKiBAcGFyYW0ge251bWJlcn0gYXJncy5jb2x1bW5JbmRleFxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncy5zdHlsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy50eXBlXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBzdHlsZUZvckhlYWRlciA9ICh7Y29sdW1uLCBjb2x1bW5JbmRleCwgc3R5bGUsIHR5cGV9KSA9PiB7XG4gICAgY29uc3Qge21kVXB9ID0gdGhpcy50dFxuICAgIHJldHVybiB0aGlzLmNhY2hlKFxuICAgICAgYGhlYWRlclN0eWxlLSR7dHlwZSB8fCBcImRlZmF1bHRcIn1gLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBkZWZhdWx0U3R5bGUgPSB7XG4gICAgICAgICAgZmxleERpcmVjdGlvbjogXCJyb3dcIixcbiAgICAgICAgICBhbGlnbkl0ZW1zOiBcImNlbnRlclwiLFxuICAgICAgICAgIHBhZGRpbmc6IDhcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlICE9IFwiYWN0aW9uc1wiICYmIG1kVXAgJiYgdGhpcy5wLnN0eWxlVUkpIHtcbiAgICAgICAgICBkZWZhdWx0U3R5bGUuYm9yZGVyUmlnaHQgPSBcIjFweCBzb2xpZCAjZGJkYmRiXCJcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGRlZmF1bHRTdHlsZSwgc3R5bGUpXG4gICAgICB9LFxuICAgICAgW21kVXAsIHRoaXMucC5zdHlsZVVJLCB0eXBlLCBzdHlsZV1cbiAgICApXG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZSBhIGJvbGQgaGVhZGVyIHRleHQgc3R5bGUuXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBzdHlsZUZvckhlYWRlclRleHQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHN0eWxlcy5oZWFkZXJUZXh0U3R5bGUgfHw9IHtmb250V2VpZ2h0OiBcImJvbGRcIn1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdHlsZSBmb3IgYSB0YWJsZSByb3cgd3JhcHBlci5cbiAgICogQHBhcmFtIHtvYmplY3R9IFthcmdzXVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthcmdzLmV2ZW5dXG4gICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAqL1xuICBzdHlsZUZvclJvdyA9ICh7ZXZlbn0gPSB7fSkgPT4ge1xuICAgIHJldHVybiB0aGlzLmNhY2hlKFxuICAgICAgYHJvd1N0eWxlLSR7ZXZlbiA/IFwiZXZlblwiIDogXCJvZGRcIn1gLFxuICAgICAgKCkgPT4ge1xuICAgICAgICBjb25zdCBhY3R1YWxTdHlsZSA9IHtcbiAgICAgICAgICBmbGV4OiAxLFxuICAgICAgICAgIGFsaWduSXRlbXM6IFwic3RyZXRjaFwiXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbiAmJiB0aGlzLnAuc3R5bGVVSSkge1xuICAgICAgICAgIGFjdHVhbFN0eWxlLmJhY2tncm91bmRDb2xvciA9IFwiI2Y1ZjVmNVwiXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWN0dWFsU3R5bGVcbiAgICAgIH0sXG4gICAgICBbZXZlbiwgdGhpcy5wLnN0eWxlVUldXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIFN0eWxlIGZvciB0aGUgaGVhZGVyIHJvdyB3cmFwcGVyLlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgKi9cbiAgc3R5bGVGb3JSb3dIZWFkZXIgPSAoKSA9PiB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUoXG4gICAgICBcInJvd0hlYWRlclN0eWxlXCIsXG4gICAgICAoKSA9PiAoe1xuICAgICAgICBmbGV4OiAxLFxuICAgICAgICBhbGlnbkl0ZW1zOiBcInN0cmV0Y2hcIlxuICAgICAgfSlcbiAgICApXG4gIH1cblxuICB0YWJsZUNvbnRyb2xzKHttb2RlbHMsIHFQYXJhbXMsIHF1ZXJ5LCByZXN1bHR9ID0ge30pIHtcbiAgICBjb25zdCB7Y29udHJvbHN9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtzaG93U2V0dGluZ3N9ID0gdGhpcy5zXG4gICAgY29uc3QgY29sbGVjdGlvbkFyZ3MgPSBkaWdzKHRoaXMuY29sbGVjdGlvbiwgXCJtb2RlbHNcIiwgXCJxUGFyYW1zXCIsIFwicXVlcnlcIiwgXCJyZXN1bHRcIilcbiAgICBjb25zdCBhY3R1YWxNb2RlbHMgPSBtb2RlbHMgPz8gY29sbGVjdGlvbkFyZ3MubW9kZWxzID8/IFtdXG4gICAgY29uc3QgYWN0dWFsUVBhcmFtcyA9IHFQYXJhbXMgPz8gY29sbGVjdGlvbkFyZ3MucVBhcmFtc1xuICAgIGNvbnN0IGFjdHVhbFF1ZXJ5ID0gcXVlcnkgPz8gY29sbGVjdGlvbkFyZ3MucXVlcnlcbiAgICBjb25zdCBhY3R1YWxSZXN1bHQgPSByZXN1bHQgPz8gY29sbGVjdGlvbkFyZ3MucmVzdWx0XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFZpZXcgc3R5bGU9e3N0eWxlcy50YWJsZUNvbnRyb2xzUm9vdFZpZXcgfHw9IHtmbGV4RGlyZWN0aW9uOiBcInJvd1wifX0+XG4gICAgICAgIHtjb250cm9scyAmJiBjb250cm9scyh7bW9kZWxzOiBhY3R1YWxNb2RlbHMsIHFQYXJhbXM6IGFjdHVhbFFQYXJhbXMsIHF1ZXJ5OiBhY3R1YWxRdWVyeSwgcmVzdWx0OiBhY3R1YWxSZXN1bHR9KX1cbiAgICAgICAgPFByZXNzYWJsZVxuICAgICAgICAgIGRhdGFTZXQ9e2RhdGFTZXRzLmZpbHRlckJ1dHRvbiB8fD0ge2NsYXNzOiBcImZpbHRlci1idXR0b25cIn19XG4gICAgICAgICAgb25QcmVzcz17dGhpcy50dC5vbkZpbHRlckNsaWNrZWR9XG4gICAgICAgICAgdGVzdElEPVwiZmlsdGVyQnV0dG9uXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxJY29uIG5hbWU9XCJzZWFyY2hcIiBzaXplPXsyMH0gLz5cbiAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICAgIDxWaWV3PlxuICAgICAgICAgIHtzaG93U2V0dGluZ3MgJiZcbiAgICAgICAgICAgIDxTZXR0aW5ncyBvblJlcXVlc3RDbG9zZT17dGhpcy50dC5vblJlcXVlc3RDbG9zZVNldHRpbmdzfSB0YWJsZT17dGhpc30gLz5cbiAgICAgICAgICB9XG4gICAgICAgICAgPFByZXNzYWJsZSBvblByZXNzPXt0aGlzLnR0Lm9uU2V0dGluZ3NDbGlja2VkfSB0ZXN0SUQ9XCJzZXR0aW5ncy1idXR0b25cIj5cbiAgICAgICAgICAgIDxJY29uIG5hbWU9XCJnZWFyXCIgc2l6ZT17MjB9IC8+XG4gICAgICAgICAgPC9QcmVzc2FibGU+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICB0YWJsZUZvb3RlcigpIHtcbiAgICBjb25zdCB7cmVzdWx0fSA9IGRpZ3ModGhpcy5jb2xsZWN0aW9uLCBcInJlc3VsdFwiKVxuICAgIGNvbnN0IGN1cnJlbnRQYWdlID0gcmVzdWx0LmN1cnJlbnRQYWdlKClcbiAgICBjb25zdCB0b3RhbENvdW50ID0gcmVzdWx0LnRvdGFsQ291bnQoKVxuICAgIGNvbnN0IHBlclBhZ2UgPSByZXN1bHQucGVyUGFnZSgpXG4gICAgY29uc3QgdG8gPSBNYXRoLm1pbihjdXJyZW50UGFnZSAqIHBlclBhZ2UsIHRvdGFsQ291bnQpXG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gXCJTaG93aW5nICV7ZnJvbX0gdG8gJXt0b30gb3V0IG9mICV7dG90YWxfY291bnR9IHRvdGFsLlwiXG4gICAgbGV0IGZyb20gPSAoKGN1cnJlbnRQYWdlIC0gMSkgKiBwZXJQYWdlKSArIDFcblxuICAgIGlmICh0byA9PT0gMCkgZnJvbSA9IDBcblxuICAgIHJldHVybiAoXG4gICAgICA8VmlldyBzdHlsZT17c3R5bGVzLnRhYmxlRm9vdGVyUm9vdFZpZXdTdHlsZSB8fD0ge2ZsZXhEaXJlY3Rpb246IFwicm93XCIsIGp1c3RpZnlDb250ZW50OiBcInNwYWNlLWJldHdlZW5cIiwgbWFyZ2luVG9wOiAxMH19PlxuICAgICAgICA8VmlldyBkYXRhU2V0PXtkYXRhU2V0cy5zaG93aW5nQ291bnRzIHx8PSB7Y2xhc3M6IFwic2hvd2luZy1jb3VudHNcIn19IHN0eWxlPXtzdHlsZXMuc2hvd2luZ0NvdW50cyB8fD0ge2ZsZXhEaXJlY3Rpb246IFwicm93XCJ9fT5cbiAgICAgICAgICA8VGV4dD5cbiAgICAgICAgICAgIHt0aGlzLnQoXCIuc2hvd2luZ19mcm9tX3RvX291dF9vZl90b3RhbFwiLCB7ZGVmYXVsdFZhbHVlLCBmcm9tLCB0bywgdG90YWxfY291bnQ6IHRvdGFsQ291bnR9KX1cbiAgICAgICAgICA8L1RleHQ+XG4gICAgICAgICAge3RoaXMucC53b3JrcGxhY2UgJiYgdGhpcy5zLmN1cnJlbnRXb3JrcGxhY2VDb3VudCAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgPFRleHQgc3R5bGU9e3N0eWxlcy54U2VsZWN0ZWRUZXh0U3R5bGUgfHw9IHttYXJnaW5MZWZ0OiAzfX0+XG4gICAgICAgICAgICAgIHt0aGlzLnQoXCIueF9zZWxlY3RlZFwiLCB7ZGVmYXVsdFZhbHVlOiBcIiV7c2VsZWN0ZWR9IHNlbGVjdGVkLlwiLCBzZWxlY3RlZDogdGhpcy5zLmN1cnJlbnRXb3JrcGxhY2VDb3VudH0pfVxuICAgICAgICAgICAgPC9UZXh0PlxuICAgICAgICAgIH1cbiAgICAgICAgPC9WaWV3PlxuICAgICAgICA8Vmlldz5cbiAgICAgICAgICA8U2VsZWN0XG4gICAgICAgICAgICBjbGFzc05hbWU9XCJwZXItcGFnZS1zZWxlY3RcIlxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlPXtwZXJQYWdlfVxuICAgICAgICAgICAgb25DaGFuZ2U9e3RoaXMudHQub25QZXJQYWdlQ2hhbmdlZH1cbiAgICAgICAgICAgIG9wdGlvbnM9e3BhZ2luYXRpb25PcHRpb25zfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvVmlldz5cbiAgICAgIDwvVmlldz5cbiAgICApXG4gIH1cblxuICBjbGFzc05hbWUoKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IFtcImFwaS1tYWtlci0tdGFibGVcIl1cblxuICAgIGlmICh0aGlzLnByb3BzLmNsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lcy5wdXNoKHRoaXMucHJvcHMuY2xhc3NOYW1lKVxuICAgIH1cblxuICAgIHJldHVybiBjbGFzc05hbWVzLmpvaW4oXCIgXCIpXG4gIH1cblxuICAvKipcbiAgICogQnVpbGQgcGVyLWNvbHVtbiBwcm9wcyBmb3IgdGFibGUgY2VsbHMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb2x1bW5cbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGNvbHVtblByb3BzKGNvbHVtbikge1xuICAgIGxldCBjYWNoZUtleSA9IFwiZGVmYXVsdFwiXG5cbiAgICBpZiAoY29sdW1uLnRleHRDZW50ZXIpIHtcbiAgICAgIGNhY2hlS2V5ID0gXCJjZW50ZXJcIlxuICAgIH0gZWxzZSBpZiAoY29sdW1uLnRleHRSaWdodCkge1xuICAgICAgY2FjaGVLZXkgPSBcInJpZ2h0XCJcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZShcbiAgICAgIGBjb2x1bW5Qcm9wcy0ke2NhY2hlS2V5fWAsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BzID0ge31cblxuICAgICAgICBpZiAoY29sdW1uLnRleHRDZW50ZXIpIHtcbiAgICAgICAgICBwcm9wcy5zdHlsZSB8fD0ge31cbiAgICAgICAgICBwcm9wcy5zdHlsZS50ZXh0QWxpZ24gPSBcImNlbnRlclwiXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sdW1uLnRleHRSaWdodCkge1xuICAgICAgICAgIHByb3BzLnN0eWxlIHx8PSB7fVxuICAgICAgICAgIHByb3BzLnN0eWxlLnRleHRBbGlnbiA9IFwicmlnaHRcIlxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb3BzXG4gICAgICB9LFxuICAgICAgW2NvbHVtbi50ZXh0Q2VudGVyLCBjb2x1bW4udGV4dFJpZ2h0XVxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZCBwZXItY29sdW1uIHByb3BzIGZvciBoZWFkZXIgY2VsbHMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBjb2x1bW5cbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGhlYWRlclByb3BzKGNvbHVtbikge1xuICAgIGxldCBjYWNoZUtleSA9IFwiZGVmYXVsdFwiXG5cbiAgICBpZiAoY29sdW1uLnRleHRDZW50ZXIpIHtcbiAgICAgIGNhY2hlS2V5ID0gXCJjZW50ZXJcIlxuICAgIH0gZWxzZSBpZiAoY29sdW1uLnRleHRSaWdodCkge1xuICAgICAgY2FjaGVLZXkgPSBcInJpZ2h0XCJcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5jYWNoZShcbiAgICAgIGBoZWFkZXJQcm9wcy0ke2NhY2hlS2V5fWAsXG4gICAgICAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BzID0ge31cblxuICAgICAgICBpZiAoY29sdW1uLnRleHRDZW50ZXIpIHtcbiAgICAgICAgICBwcm9wcy5zdHlsZSB8fD0ge31cbiAgICAgICAgICBwcm9wcy5zdHlsZS5qdXN0aWZ5Q29udGVudCA9IFwiY2VudGVyXCJcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb2x1bW4udGV4dFJpZ2h0KSB7XG4gICAgICAgICAgcHJvcHMuc3R5bGUgfHw9IHt9XG4gICAgICAgICAgcHJvcHMuc3R5bGUuanVzdGlmeUNvbnRlbnQgPSBcImVuZFwiXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvcHNcbiAgICAgIH0sXG4gICAgICBbY29sdW1uLnRleHRDZW50ZXIsIGNvbHVtbi50ZXh0UmlnaHRdXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIENvbHVtbiB3aWR0aHMga2V5ZWQgYnkgaWRlbnRpZmllciBmb3IgdGFibGUgcm93cy5cbiAgICogQHJldHVybnMge29iamVjdH1cbiAgICovXG4gIGNvbHVtbldpZHRocygpIHtcbiAgICBjb25zdCBjb2x1bW5XaWR0aHMgPSB7fVxuXG4gICAgZm9yIChjb25zdCBjb2x1bW4gb2YgdGhpcy5zLnByZXBhcmVkQ29sdW1ucykge1xuICAgICAgY29sdW1uV2lkdGhzW2NvbHVtbi50YWJsZVNldHRpbmdDb2x1bW4uaWRlbnRpZmllcigpXSA9IGNvbHVtbi53aWR0aFxuICAgIH1cblxuICAgIHJldHVybiBjb2x1bW5XaWR0aHNcbiAgfVxuXG4gIGhlYWRlcnNDb250ZW50RnJvbUNvbHVtbnMgPSAoKSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgIDxEcmFnZ2FibGVTb3J0XG4gICAgICAgIGFjdGl2ZUl0ZW1TdHlsZT17dGhpcy50dC5kcmFnZ2VkSGVhZGVyU3R5bGUoKX1cbiAgICAgICAgZGF0YT17dGhpcy5zLmNvbHVtbnNUb1Nob3d9XG4gICAgICAgIGV2ZW50cz17dGhpcy50dC5kcmFnZ2FibGVTb3J0RXZlbnRzfVxuICAgICAgICBob3Jpem9udGFsXG4gICAgICAgIGtleUV4dHJhY3Rvcj17dGhpcy50dC5kcmFnTGlzdGtleUV4dHJhY3Rvcn1cbiAgICAgICAgb25JdGVtTW92ZWQ9e3RoaXMudHQub25JdGVtTW92ZWR9XG4gICAgICAgIG9uUmVvcmRlcmVkPXt0aGlzLnR0Lm9uUmVvcmRlcmVkfVxuICAgICAgICByZW5kZXJJdGVtPXt0aGlzLnR0LmRyYWdMaXN0UmVuZGVySXRlbUNvbnRlbnR9XG4gICAgICAvPlxuICAgIClcbiAgfVxuXG4gIGRyYWdMaXN0Q2FjaGVLZXlFeHRyYWN0b3IgPSAoaXRlbSkgPT4gYCR7aXRlbS50YWJsZVNldHRpbmdDb2x1bW4uaWRlbnRpZmllcigpfS0ke3RoaXMucy5yZXNpemluZ31gXG4gIGRyYWdMaXN0a2V5RXh0cmFjdG9yID0gKGl0ZW0pID0+IGl0ZW0udGFibGVTZXR0aW5nQ29sdW1uLmlkZW50aWZpZXIoKVxuXG4gIG9uSXRlbU1vdmVkID0gKHthbmltYXRpb25BcmdzLCBpdGVtSW5kZXgsIHgsIHl9KSA9PiB7XG4gICAgY29uc3QgYW5pbWF0ZWRQb3NpdGlvbiA9IGRpZ2codGhpcywgXCJzXCIsIFwiY29sdW1uc1RvU2hvd1wiLCBpdGVtSW5kZXgsIFwiYW5pbWF0ZWRQb3NpdGlvblwiKVxuXG4gICAgaWYgKGFuaW1hdGlvbkFyZ3MpIHtcbiAgICAgIEFuaW1hdGVkLnRpbWluZyhhbmltYXRlZFBvc2l0aW9uLCBhbmltYXRpb25BcmdzKS5zdGFydCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFuaW1hdGVkUG9zaXRpb24uc2V0VmFsdWUoe3gsIHl9KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJzaXN0IHRoZSBuZXcgY29sdW1uIG9yZGVyaW5nLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJnc1xuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncy5mcm9tSXRlbVxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncy50b0l0ZW1cbiAgICogQHBhcmFtIHtudW1iZXJ9IGFyZ3MuZnJvbVBvc2l0aW9uXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBhcmdzLnRvUG9zaXRpb25cbiAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59XG4gICAqL1xuICBvblJlb3JkZXJlZCA9IGFzeW5jICh7ZnJvbUl0ZW0sIGZyb21Qb3NpdGlvbiwgdG9JdGVtLCB0b1Bvc2l0aW9ufSkgPT4ge1xuICAgIGlmIChmcm9tUG9zaXRpb24gPT0gdG9Qb3NpdGlvbikgcmV0dXJuIC8vIE9ubHkgZG8gcmVxdWVzdHMgYW5kIHF1ZXJpZXMgaWYgY2hhbmdlZFxuXG4gICAgY29uc3QgVGFibGVTZXR0aW5nQ29sdW1uID0gZnJvbUl0ZW0udGFibGVTZXR0aW5nQ29sdW1uLmNvbnN0cnVjdG9yXG4gICAgY29uc3QgdG9Db2x1bW4gPSBhd2FpdCBUYWJsZVNldHRpbmdDb2x1bW4uZmluZCh0b0l0ZW0udGFibGVTZXR0aW5nQ29sdW1uLmlkKCkpIC8vIE5lZWQgdG8gbG9hZCBsYXRlc3QgcG9zaXRpb24gYmVjYXVzZSBBY3RzQXNMaXN0IG1pZ2h0IGhhdmUgY2hhbmdlZCBpdFxuXG4gICAgYXdhaXQgZnJvbUl0ZW0udGFibGVTZXR0aW5nQ29sdW1uLnVwZGF0ZSh7cG9zaXRpb246IHRvQ29sdW1uLnBvc2l0aW9uKCl9KVxuICB9XG5cbiAgZHJhZ0xpc3RSZW5kZXJJdGVtQ29udGVudCA9ICh7aXNBY3RpdmUsIGl0ZW0sIHRvdWNoUHJvcHN9KSA9PiB7XG4gICAgY29uc3Qge2FuaW1hdGVkV2lkdGgsIGFuaW1hdGVkWkluZGV4LCBjb2x1bW4sIHRhYmxlU2V0dGluZ0NvbHVtbn0gPSBpdGVtXG5cbiAgICByZXR1cm4gKFxuICAgICAgPEhlYWRlckNvbHVtblxuICAgICAgICBhY3RpdmU9e2lzQWN0aXZlfVxuICAgICAgICBhbmltYXRlZFdpZHRoPXthbmltYXRlZFdpZHRofVxuICAgICAgICBhbmltYXRlZFpJbmRleD17YW5pbWF0ZWRaSW5kZXh9XG4gICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICBrZXk9e3RhYmxlU2V0dGluZ0NvbHVtbi5pZGVudGlmaWVyKCl9XG4gICAgICAgIHJlc2l6aW5nPXt0aGlzLnMucmVzaXppbmd9XG4gICAgICAgIHRhYmxlPXt0aGlzfVxuICAgICAgICB0YWJsZVNldHRpbmdDb2x1bW49e3RhYmxlU2V0dGluZ0NvbHVtbn1cbiAgICAgICAgdG91Y2hQcm9wcz17dG91Y2hQcm9wc31cbiAgICAgICAgd2lkdGhzPXt0aGlzLnMud2lkdGhzfVxuICAgICAgLz5cbiAgICApXG4gIH1cblxuICBoZWFkZXJDbGFzc05hbWVGb3JDb2x1bW4oY29sdW1uKSB7XG4gICAgY29uc3QgY2xhc3NOYW1lcyA9IFtdXG5cbiAgICBpZiAoY29sdW1uLmNvbW1vblByb3BzICYmIGNvbHVtbi5jb21tb25Qcm9wcy5jbGFzc05hbWUpIGNsYXNzTmFtZXMucHVzaChjb2x1bW4uY29tbW9uUHJvcHMuY2xhc3NOYW1lKVxuICAgIGlmIChjb2x1bW4uaGVhZGVyUHJvcHMgJiYgY29sdW1uLmhlYWRlclByb3BzLmNsYXNzTmFtZSkgY2xhc3NOYW1lcy5wdXNoKGNvbHVtbi5oZWFkZXJQcm9wcy5jbGFzc05hbWUpXG5cbiAgICByZXR1cm4gY2xhc3NOYW1lc1xuICB9XG5cbiAgaGVhZGVyTGFiZWxGb3JDb2x1bW4oY29sdW1uKSB7XG4gICAgY29uc3Qge21vZGVsQ2xhc3N9ID0gdGhpcy5wXG5cbiAgICBpZiAoXCJsYWJlbFwiIGluIGNvbHVtbikge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW4ubGFiZWwgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4ubGFiZWwoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5sYWJlbFxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBjdXJyZW50TW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3NcblxuICAgIC8vIENhbGN1bGF0ZSBjdXJyZW50IG1vZGVsIGNsYXNzIHRocm91Z2ggcGF0aFxuICAgIGlmIChjb2x1bW4ucGF0aCkge1xuICAgICAgZm9yIChjb25zdCBwYXRoUGFydCBvZiBjb2x1bW4ucGF0aCkge1xuICAgICAgICBjb25zdCByZWxhdGlvbnNoaXBzID0gZGlnZyhjdXJyZW50TW9kZWxDbGFzcy5tb2RlbENsYXNzRGF0YSgpLCBcInJlbGF0aW9uc2hpcHNcIilcbiAgICAgICAgY29uc3QgcmVsYXRpb25zaGlwID0gcmVsYXRpb25zaGlwcy5maW5kKChyZWxhdGlvbnNoaXBJbkFycmF5KSA9PiByZWxhdGlvbnNoaXBJbkFycmF5Lm5hbWUgPT0gaW5mbGVjdGlvbi51bmRlcnNjb3JlKHBhdGhQYXJ0KSlcblxuICAgICAgICBjdXJyZW50TW9kZWxDbGFzcyA9IG1vZGVsQ2xhc3NSZXF1aXJlKGRpZ2cocmVsYXRpb25zaGlwLCBcInJlc291cmNlX25hbWVcIikpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbHVtbi5hdHRyaWJ1dGUpIHJldHVybiBjdXJyZW50TW9kZWxDbGFzcy5odW1hbkF0dHJpYnV0ZU5hbWUoY29sdW1uLmF0dHJpYnV0ZSlcblxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vICdsYWJlbCcgb3IgJ2F0dHJpYnV0ZScgd2FzIGdpdmVuXCIpXG4gIH1cblxuICAvKipcbiAgICogUHJvdmlkZSBzdHlsaW5nIGZvciBhIGRyYWdnZWQgaGVhZGVyIGl0ZW0uXG4gICAqIEByZXR1cm5zIHtvYmplY3R8dW5kZWZpbmVkfVxuICAgKi9cbiAgZHJhZ2dlZEhlYWRlclN0eWxlID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnAuZHJhZ2dlZEhlYWRlclN0eWxlICE9PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLnAuZHJhZ2dlZEhlYWRlclN0eWxlXG4gICAgaWYgKHRoaXMucC5zdHlsZVVJKSByZXR1cm4gdW5kZWZpbmVkXG5cbiAgICByZXR1cm4gc3R5bGVzLmRyYWdnZWRIZWFkZXJTdHlsZVRyYW5zcGFyZW50IHx8PSB7YmFja2dyb3VuZENvbG9yOiBcInRyYW5zcGFyZW50XCJ9XG4gIH1cblxuICBvbkZpbHRlckZvcm1TdWJtaXQgPSAoKSA9PiB0aGlzLnN1Ym1pdEZpbHRlcigpXG4gIG9uUmVxdWVzdENsb3NlU2V0dGluZ3MgPSAoKSA9PiB0aGlzLnNldFN0YXRlKHtzaG93U2V0dGluZ3M6IGZhbHNlfSlcblxuICBvblNldHRpbmdzQ2xpY2tlZCA9IChlKSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICB0aGlzLnNldFN0YXRlKHtzaG93U2V0dGluZ3M6ICF0aGlzLnMuc2hvd1NldHRpbmdzfSlcbiAgfVxuXG4gIHN1Ym1pdEZpbHRlciA9ICgpID0+IHtcbiAgICBjb25zdCB7YXBwSGlzdG9yeX0gPSB0aGlzLnByb3BzXG4gICAgY29uc3Qge3F1ZXJ5UU5hbWV9ID0gdGhpcy5zXG4gICAgY29uc3QgY2hhbmdlUGFyYW1zUGFyYW1zID0ge31cbiAgICBjb25zdCBxUGFyYW1zID0gdGhpcy5zLmZpbHRlckZvcm0uYXNPYmplY3QoKVxuXG4gICAgaWYgKFBsYXRmb3JtLk9TID09IFwid2ViXCIpIHtcbiAgICAgIGNvbnN0IGZpbHRlckZvcm0gPSBkaWdnKHRoaXMudHQuZmlsdGVyRm9ybVJlZiwgXCJjdXJyZW50XCIpXG4gICAgICBjb25zdCBuYXZ0aXZlRm9ybVBhcmFtcyA9IFBhcmFtcy5zZXJpYWxpemVGb3JtKGZpbHRlckZvcm0pXG5cbiAgICAgIGluY29ycG9yYXRlKHFQYXJhbXMsIG5hdnRpdmVGb3JtUGFyYW1zKVxuICAgIH1cblxuICAgIGNoYW5nZVBhcmFtc1BhcmFtc1txdWVyeVFOYW1lXSA9IEpTT04uc3RyaW5naWZ5KHFQYXJhbXMpXG5cbiAgICBQYXJhbXMuY2hhbmdlUGFyYW1zKGNoYW5nZVBhcmFtc1BhcmFtcywge2FwcEhpc3Rvcnl9KVxuICB9XG5cbiAgc3VibWl0RmlsdGVyRGVib3VuY2UgPSBkZWJvdW5jZSh0aGlzLnR0LnN1Ym1pdEZpbHRlcilcbn0pKVxuIl19
|
package/build/utils/icon.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ export type ApiMakerUtilsIconProps = {
|
|
|
8
8
|
/**
|
|
9
9
|
* Only `color` is forwarded.
|
|
10
10
|
*/
|
|
11
|
-
style?:
|
|
11
|
+
style?: import("react-native").StyleProp<import("react-native").TextStyle> | undefined;
|
|
12
12
|
version?: ("FontAwesome" | "FontAwesome5" | "FontAwesome6" | "MaterialIcons") | undefined;
|
|
13
13
|
};
|
|
14
14
|
//# sourceMappingURL=icon.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"icon.d.ts","sourceRoot":"/src/","sources":["utils/icon.jsx"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"icon.d.ts","sourceRoot":"/src/","sources":["utils/icon.jsx"],"names":[],"mappings":";;;YA0Bc,CAAA,MAAM,GAAC,MAAM,aAAC;cACd,MAAM,YAAC;UACP,MAAM;WACN,MAAM,YAAC;;;;YACP,OAAO,cAAc,EAAE,SAAS,CAAC,OAAO,cAAc,EAAE,SAAS,CAAC,YAAC;cACnE,CAAC,aAAa,GAAC,cAAc,GAAC,cAAc,GAAC,eAAe,CAAC,YAAC"}
|
package/build/utils/icon.js
CHANGED
|
@@ -8,6 +8,7 @@ import MaterialIconsIcon from "react-native-vector-icons/MaterialIcons.js";
|
|
|
8
8
|
import memo from "set-state-compare/build/memo.js";
|
|
9
9
|
import PropTypes from "prop-types";
|
|
10
10
|
import React, { useMemo } from "react";
|
|
11
|
+
import { StyleSheet } from "react-native";
|
|
11
12
|
import { shapeComponent } from "set-state-compare/build/shape-component.js";
|
|
12
13
|
import { useMergedStyle } from "./default-style";
|
|
13
14
|
const FontAwesomeGlyphMap = FontAwesomeIcon.getRawGlyphMap();
|
|
@@ -25,7 +26,7 @@ const iconMap = {
|
|
|
25
26
|
* @property {object=} dataSet
|
|
26
27
|
* @property {string} name
|
|
27
28
|
* @property {number=} size
|
|
28
|
-
* @property {import("react-native").
|
|
29
|
+
* @property {import("react-native").StyleProp<import("react-native").TextStyle>=} style Only `color` is forwarded.
|
|
29
30
|
* @property {("FontAwesome"|"FontAwesome5"|"FontAwesome6"|"MaterialIcons")=} version
|
|
30
31
|
*/
|
|
31
32
|
export default memo(shapeComponent(class ApiMakerUtilsIcon extends BaseComponent {
|
|
@@ -35,10 +36,7 @@ export default memo(shapeComponent(class ApiMakerUtilsIcon extends BaseComponent
|
|
|
35
36
|
dataSet: PropTypes.object,
|
|
36
37
|
name: PropTypes.string.isRequired,
|
|
37
38
|
size: PropTypes.number,
|
|
38
|
-
style: PropTypes.oneOfType([
|
|
39
|
-
PropTypes.exact({ color: PropTypes.oneOfType([PropTypes.number, PropTypes.string]) }),
|
|
40
|
-
PropTypes.arrayOf(PropTypes.exact({ color: PropTypes.oneOfType([PropTypes.number, PropTypes.string]) }))
|
|
41
|
-
]),
|
|
39
|
+
style: PropTypes.oneOfType([PropTypes.object, PropTypes.array, PropTypes.number]),
|
|
42
40
|
version: PropTypes.oneOf(["FontAwesome", "FontAwesome5", "FontAwesome6", "MaterialIcons"])
|
|
43
41
|
};
|
|
44
42
|
render() {
|
|
@@ -68,19 +66,27 @@ export default memo(shapeComponent(class ApiMakerUtilsIcon extends BaseComponent
|
|
|
68
66
|
// Only forward some styles like color
|
|
69
67
|
const actualStylesList = useMemo(() => {
|
|
70
68
|
const actualStylesList = [];
|
|
69
|
+
const unsupportedStyleKeys = new Set();
|
|
71
70
|
for (const style of stylesList) {
|
|
72
71
|
const newStyle = {};
|
|
73
72
|
let count = 0;
|
|
74
|
-
|
|
73
|
+
const flattenedStyle = StyleSheet.flatten(style) || {};
|
|
74
|
+
for (const key in flattenedStyle) {
|
|
75
75
|
if (key == "color") {
|
|
76
|
-
newStyle[key] =
|
|
76
|
+
newStyle[key] = flattenedStyle[key];
|
|
77
77
|
count++;
|
|
78
78
|
}
|
|
79
|
+
else {
|
|
80
|
+
unsupportedStyleKeys.add(key);
|
|
81
|
+
}
|
|
79
82
|
}
|
|
80
83
|
if (count > 0) {
|
|
81
84
|
actualStylesList.push(newStyle);
|
|
82
85
|
}
|
|
83
86
|
}
|
|
87
|
+
if (unsupportedStyleKeys.size > 0) {
|
|
88
|
+
console.warn("ApiMakerUtilsIcon received unsupported style keys:", Array.from(unsupportedStyleKeys).sort());
|
|
89
|
+
}
|
|
84
90
|
return actualStylesList;
|
|
85
91
|
}, [stylesList, style]);
|
|
86
92
|
const actualDataSet = useMemo(() => Object.assign({ name, version: actualVersion }, dataSet), [actualVersion, dataSet, name]);
|
|
@@ -101,4 +107,4 @@ export default memo(shapeComponent(class ApiMakerUtilsIcon extends BaseComponent
|
|
|
101
107
|
}
|
|
102
108
|
}
|
|
103
109
|
}));
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsidXRpbHMvaWNvbi5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdFQUF3RTtBQUN4RSxPQUFPLGFBQWEsTUFBTSxtQkFBbUIsQ0FBQTtBQUM3QyxPQUFPLGVBQWUsTUFBTSwwQ0FBMEMsQ0FBQTtBQUN0RSxPQUFPLGdCQUFnQixNQUFNLDJDQUEyQyxDQUFBO0FBQ3hFLE9BQU8sZ0JBQWdCLE1BQU0sMkNBQTJDLENBQUE7QUFDeEUsT0FBTyxpQkFBaUIsTUFBTSw0Q0FBNEMsQ0FBQTtBQUMxRSxPQUFPLElBQUksTUFBTSxpQ0FBaUMsQ0FBQTtBQUNsRCxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUE7QUFDbEMsT0FBTyxLQUFLLEVBQUUsRUFBQyxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFDcEMsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLDRDQUE0QyxDQUFBO0FBQ3pFLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQTtBQUU5QyxNQUFNLG1CQUFtQixHQUFHLGVBQWUsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtBQUM1RCxNQUFNLG9CQUFvQixHQUFHLGdCQUFnQixDQUFDLGNBQWMsRUFBRSxDQUFBO0FBQzlELE1BQU0sb0JBQW9CLEdBQUcsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUE7QUFDOUQsTUFBTSxxQkFBcUIsR0FBRyxpQkFBaUIsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtBQUVoRSxNQUFNLE9BQU8sR0FBRztJQUNkLE1BQU0sRUFBRSxhQUFhO0lBQ3JCLE1BQU0sRUFBRSxhQUFhO0lBQ3JCLE1BQU0sRUFBRSxhQUFhO0NBQ3RCLENBQUE7QUFFRDs7Ozs7Ozs7R0FRRztBQUNILGVBQWUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLGlCQUFrQixTQUFRLGFBQWE7SUFDOUUscUNBQXFDO0lBQ3JDLE1BQU0sQ0FBQyxTQUFTLEdBQUc7UUFDakIsS0FBSyxF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bnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tbXVsdGktc3BhY2VzLCBwcmVmZXItb2JqZWN0LXNwcmVhZCwgc29ydC1pbXBvcnRzICovXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tIFwiLi4vYmFzZS1jb21wb25lbnRcIlxuaW1wb3J0IEZvbnRBd2Vzb21lSWNvbiBmcm9tIFwicmVhY3QtbmF0aXZlLXZlY3Rvci1pY29ucy9Gb250QXdlc29tZS5qc1wiXG5pbXBvcnQgRm9udEF3ZXNvbWU1SWNvbiBmcm9tIFwicmVhY3QtbmF0aXZlLXZlY3Rvci1pY29ucy9Gb250QXdlc29tZTUuanNcIlxuaW1wb3J0IEZvbnRBd2Vzb21lNkljb24gZnJvbSBcInJlYWN0LW5hdGl2ZS12ZWN0b3ItaWNvbnMvRm9udEF3ZXNvbWU2LmpzXCJcbmltcG9ydCBNYXRlcmlhbEljb25zSWNvbiBmcm9tIFwicmVhY3QtbmF0aXZlLXZlY3Rvci1pY29ucy9NYXRlcmlhbEljb25zLmpzXCJcbmltcG9ydCBtZW1vIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9tZW1vLmpzXCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IFJlYWN0LCB7dXNlTWVtb30gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7c2hhcGVDb21wb25lbnR9IGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9zaGFwZS1jb21wb25lbnQuanNcIlxuaW1wb3J0IHt1c2VNZXJnZWRTdHlsZX0gZnJvbSBcIi4vZGVmYXVsdC1zdHlsZVwiXG5cbmNvbnN0IEZvbnRBd2Vzb21lR2x5cGhNYXAgPSBGb250QXdlc29tZUljb24uZ2V0UmF3R2x5cGhNYXAoKVxuY29uc3QgRm9udEF3ZXNvbWU1R2x5cGhNYXAgPSBGb250QXdlc29tZTVJY29uLmdldFJhd0dseXBoTWFwKClcbmNvbnN0IEZvbnRBd2Vzb21lNkdseXBoTWFwID0gRm9udEF3ZXNvbWU2SWNvbi5nZXRSYXdHbHlwaE1hcCgpXG5jb25zdCBNYXRlcmlhbEljb25zR2x5cGhNYXAgPSBNYXRlcmlhbEljb25zSWNvbi5nZXRSYXdHbHlwaE1hcCgpXG5cbmNvbnN0IGljb25NYXAgPSB7XG4gIHBlbmNpbDogXCJGb250QXdlc29tZVwiLFxuICByZW1vdmU6IFwiRm9udEF3ZXNvbWVcIixcbiAgc2VhcmNoOiBcIkZvbnRBd2Vzb21lXCJcbn1cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBBcGlNYWtlclV0aWxzSWNvblByb3BzXG4gKiBAcHJvcGVydHkge3N0cmluZ3xudW1iZXI9fSBjb2xvclxuICogQHByb3BlcnR5IHtvYmplY3Q9fSBkYXRhU2V0XG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZVxuICogQHByb3BlcnR5IHtudW1iZXI9fSBzaXplXG4gKiBAcHJvcGVydHkge2ltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5UZXh0U3R5bGV8QXJyYXk8aW1wb3J0KFwicmVhY3QtbmF0aXZlXCIpLlRleHRTdHlsZT49fSBzdHlsZSBPbmx5IGBjb2xvcmAgaXMgZm9yd2FyZGVkLlxuICogQHByb3BlcnR5IHsoXCJGb250QXdlc29tZVwifFwiRm9udEF3ZXNvbWU1XCJ8XCJGb250QXdlc29tZTZcInxcIk1hdGVyaWFsSWNvbnNcIik9fSB2ZXJzaW9uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IG1lbW8oc2hhcGVDb21wb25lbnQoY2xhc3MgQXBpTWFrZXJVdGlsc0ljb24gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgLyoqIEB0eXBlIHtBcGlNYWtlclV0aWxzSWNvblByb3BzfSAqL1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGNvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gICAgZGF0YVNldDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgc2l6ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgICBzdHlsZTogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgICBQcm9wVHlwZXMuZXhhY3Qoe2NvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSl9KSxcbiAgICAgIFByb3BUeXBlcy5hcnJheU9mKFxuICAgICAgICBQcm9wVHlwZXMuZXhhY3Qoe2NvbG9yOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSl9KVxuICAgICAgKVxuICAgIF0pLFxuICAgIHZlcnNpb246IFByb3BUeXBlcy5vbmVPZihbXCJGb250QXdlc29tZVwiLCBcIkZvbnRBd2Vzb21lNVwiLCBcIkZvbnRBd2Vzb21lNlwiLCBcIk1hdGVyaWFsSWNvbnNcIl0pXG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge2RhdGFTZXQsIG5hbWUsIHN0eWxlLCB2ZXJzaW9uLCAuLi5yZXN0UHJvcHN9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtzdHlsZXNMaXN0fSA9IHVzZU1lcmdlZFN0eWxlKHN0eWxlLCBcIlRleHRcIilcbiAgICBsZXQgYWN0dWFsVmVyc2lvbiA9IHZlcnNpb25cblxuICAgIGlmICghYWN0dWFsVmVyc2lvbikge1xuICAgICAgaWYgKG5hbWUgaW4gaWNvbk1hcCkge1xuICAgICAgICBhY3R1YWxWZXJzaW9uID0gaWNvbk1hcFtuYW1lXVxuICAgICAgfSBlbHNlIGlmIChuYW1lIGluIEZvbnRBd2Vzb21lNkdseXBoTWFwKSB7XG4gICAgICAgIGFjdHVhbFZlcnNpb24gPSBcIkZvbnRBd2Vzb21lNlwiXG4gICAgICB9IGVsc2UgaWYgKG5hbWUgaW4gRm9udEF3ZXNvbWU1R2x5cGhNYXApIHtcbiAgICAgICAgYWN0dWFsVmVyc2lvbiA9IFwiRm9udEF3ZXNvbWU1XCJcbiAgICAgIH0gZWxzZSBpZiAobmFtZSBpbiBGb250QXdlc29tZUdseXBoTWFwKSB7XG4gICAgICAgIGFjdHVhbFZlcnNpb24gPSBcIkZvbnRBd2Vzb21lXCJcbiAgICAgIH0gZWxzZSBpZiAobmFtZSBpbiBNYXRlcmlhbEljb25zR2x5cGhNYXApIHtcbiAgICAgICAgYWN0dWFsVmVyc2lvbiA9ICBcIk1hdGVyaWFsSWNvbnNcIlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsVmVyc2lvbiA9IFwiRm9udEF3ZXNvbWVcIlxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9ubHkgZm9yd2FyZCBzb21lIHN0eWxlcyBsaWtlIGNvbG9yXG4gICAgY29uc3QgYWN0dWFsU3R5bGVzTGlzdCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgY29uc3QgYWN0dWFsU3R5bGVzTGlzdCA9IFtdXG5cbiAgICAgIGZvciAoY29uc3Qgc3R5bGUgb2Ygc3R5bGVzTGlzdCkge1xuICAgICAgICBjb25zdCBuZXdTdHlsZSA9IHt9XG4gICAgICAgIGxldCBjb3VudCA9IDBcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBzdHlsZSkge1xuICAgICAgICAgIGlmIChrZXkgPT0gXCJjb2xvclwiKSB7XG4gICAgICAgICAgICBuZXdTdHlsZVtrZXldID0gc3R5bGVba2V5XVxuICAgICAgICAgICAgY291bnQrK1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgICAgICBhY3R1YWxTdHlsZXNMaXN0LnB1c2gobmV3U3R5bGUpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFjdHVhbFN0eWxlc0xpc3RcbiAgICB9LCBbc3R5bGVzTGlzdCwgc3R5bGVdKVxuXG4gICAgY29uc3QgYWN0dWFsRGF0YVNldCA9IHVzZU1lbW8oKCkgPT4gT2JqZWN0LmFzc2lnbih7bmFtZSwgdmVyc2lvbjogYWN0dWFsVmVyc2lvbn0sIGRhdGFTZXQpLCBbYWN0dWFsVmVyc2lvbiwgZGF0YVNldCwgbmFtZV0pXG5cbiAgICBpZiAoYWN0dWFsVmVyc2lvbiA9PSBcIkZvbnRBd2Vzb21lXCIpIHtcbiAgICAgIHJldHVybiA8Rm9udEF3ZXNvbWVJY29uIGRhdGFTZXQ9e2FjdHVhbERhdGFTZXR9IG5hbWU9e25hbWV9IHN0eWxlPXthY3R1YWxTdHlsZXNMaXN0fSB7Li4ucmVzdFByb3BzfSAvPlxuICAgIH0gZWxzZSBpZiAoYWN0dWFsVmVyc2lvbiA9PSBcIkZvbnRBd2Vzb21lNVwiKSB7XG4gICAgICByZXR1cm4gPEZvbnRBd2Vzb21lNUljb24gZGF0YVNldD17YWN0dWFsRGF0YVNldH0gbmFtZT17bmFtZX0gc3R5bGU9e2FjdHVhbFN0eWxlc0xpc3R9IHsuLi5yZXN0UHJvcHN9IC8+XG4gICAgfSBlbHNlIGlmIChhY3R1YWxWZXJzaW9uID09IFwiRm9udEF3ZXNvbWU2XCIpIHtcbiAgICAgIHJldHVybiA8Rm9udEF3ZXNvbWU2SWNvbiBkYXRhU2V0PXthY3R1YWxEYXRhU2V0fSBuYW1lPXtuYW1lfSBzdHlsZT17YWN0dWFsU3R5bGVzTGlzdH0gey4uLnJlc3RQcm9wc30gLz5cbiAgICB9IGVsc2UgaWYgKGFjdHVhbFZlcnNpb24gPT0gXCJNYXRlcmlhbEljb25zXCIpIHtcbiAgICAgIHJldHVybiA8TWF0ZXJpYWxJY29uc0ljb24gZGF0YVNldD17YWN0dWFsRGF0YVNldH0gbmFtZT17bmFtZX0gc3R5bGU9e2FjdHVhbFN0eWxlc0xpc3R9IHsuLi5yZXN0UHJvcHN9IC8+XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biB2ZXJzaW9uOiAke2FjdHVhbFZlcnNpb259YClcbiAgICB9XG4gIH1cbn0pKVxuIl19
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWNvbi5qcyIsInNvdXJjZVJvb3QiOiIvc3JjLyIsInNvdXJjZXMiOlsidXRpbHMvaWNvbi5qc3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdFQUF3RTtBQUN4RSxPQUFPLGFBQWEsTUFBTSxtQkFBbUIsQ0FBQTtBQUM3QyxPQUFPLGVBQWUsTUFBTSwwQ0FBMEMsQ0FBQTtBQUN0RSxPQUFPLGdCQUFnQixNQUFNLDJDQUEyQyxDQUFBO0FBQ3hFLE9BQU8sZ0JBQWdCLE1BQU0sMkNBQTJDLENBQUE7QUFDeEUsT0FBTyxpQkFBaUIsTUFBTSw0Q0FBNEMsQ0FBQTtBQUMxRSxPQUFPLElBQUksTUFBTSxpQ0FBaUMsQ0FBQTtBQUNsRCxPQUFPLFNBQVMsTUFBTSxZQUFZLENBQUE7QUFDbEMsT0FBTyxLQUFLLEVBQUUsRUFBQyxPQUFPLEVBQUMsTUFBTSxPQUFPLENBQUE7QUFDcEMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUN2QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNENBQTRDLENBQUE7QUFDekUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGlCQUFpQixDQUFBO0FBRTlDLE1BQU0sbUJBQW1CLEdBQUcsZUFBZSxDQUFDLGNBQWMsRUFBRSxDQUFBO0FBQzVELE1BQU0sb0JBQW9CLEdBQUcsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLENBQUE7QUFDOUQsTUFBTSxvQkFBb0IsR0FBRyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsQ0FBQTtBQUM5RCxNQUFNLHFCQUFxQixHQUFHLGlCQUFpQixDQUFDLGNBQWMsRUFBRSxDQUFBO0FBRWhFLE1BQU0sT0FBTyxHQUFHO0lBQ2QsTUFBTSxFQUFFLGFBQWE7SUFDckIsTUFBTSxFQUFFLGFBQWE7SUFDckIsTUFBTSxFQUFFLGFBQWE7Q0FDdEIsQ0FBQTtBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsZUFBZSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0saUJBQWtCLFNBQVEsYUFBYTtJQUM5RSxxQ0FB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QUUsS0FBSyxFQUFFLGdCQUFnQixLQUFNLFNBQVMsR0FBSSxDQUFBO1FBQzFHLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQyxvQkFBb0IsYUFBYSxFQUFFLENBQUMsQ0FBQTtRQUN0RCxDQUFDO0lBQ0gsQ0FBQztDQUNGLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tbXVsdGktc3BhY2VzLCBwcmVmZXItb2JqZWN0LXNwcmVhZCwgc29ydC1pbXBvcnRzICovXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tIFwiLi4vYmFzZS1jb21wb25lbnRcIlxuaW1wb3J0IEZvbnRBd2Vzb21lSWNvbiBmcm9tIFwicmVhY3QtbmF0aXZlLXZlY3Rvci1pY29ucy9Gb250QXdlc29tZS5qc1wiXG5pbXBvcnQgRm9udEF3ZXNvbWU1SWNvbiBmcm9tIFwicmVhY3QtbmF0aXZlLXZlY3Rvci1pY29ucy9Gb250QXdlc29tZTUuanNcIlxuaW1wb3J0IEZvbnRBd2Vzb21lNkljb24gZnJvbSBcInJlYWN0LW5hdGl2ZS12ZWN0b3ItaWNvbnMvRm9udEF3ZXNvbWU2LmpzXCJcbmltcG9ydCBNYXRlcmlhbEljb25zSWNvbiBmcm9tIFwicmVhY3QtbmF0aXZlLXZlY3Rvci1pY29ucy9NYXRlcmlhbEljb25zLmpzXCJcbmltcG9ydCBtZW1vIGZyb20gXCJzZXQtc3RhdGUtY29tcGFyZS9idWlsZC9tZW1vLmpzXCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IFJlYWN0LCB7dXNlTWVtb30gZnJvbSBcInJlYWN0XCJcbmltcG9ydCB7U3R5bGVTaGVldH0gZnJvbSBcInJlYWN0LW5hdGl2ZVwiXG5pbXBvcnQge3NoYXBlQ29tcG9uZW50fSBmcm9tIFwic2V0LXN0YXRlLWNvbXBhcmUvYnVpbGQvc2hhcGUtY29tcG9uZW50LmpzXCJcbmltcG9ydCB7dXNlTWVyZ2VkU3R5bGV9IGZyb20gXCIuL2RlZmF1bHQtc3R5bGVcIlxuXG5jb25zdCBGb250QXdlc29tZUdseXBoTWFwID0gRm9udEF3ZXNvbWVJY29uLmdldFJhd0dseXBoTWFwKClcbmNvbnN0IEZvbnRBd2Vzb21lNUdseXBoTWFwID0gRm9udEF3ZXNvbWU1SWNvbi5nZXRSYXdHbHlwaE1hcCgpXG5jb25zdCBGb250QXdlc29tZTZHbHlwaE1hcCA9IEZvbnRBd2Vzb21lNkljb24uZ2V0UmF3R2x5cGhNYXAoKVxuY29uc3QgTWF0ZXJpYWxJY29uc0dseXBoTWFwID0gTWF0ZXJpYWxJY29uc0ljb24uZ2V0UmF3R2x5cGhNYXAoKVxuXG5jb25zdCBpY29uTWFwID0ge1xuICBwZW5jaWw6IFwiRm9udEF3ZXNvbWVcIixcbiAgcmVtb3ZlOiBcIkZvbnRBd2Vzb21lXCIsXG4gIHNlYXJjaDogXCJGb250QXdlc29tZVwiXG59XG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gQXBpTWFrZXJVdGlsc0ljb25Qcm9wc1xuICogQHByb3BlcnR5IHtzdHJpbmd8bnVtYmVyPX0gY29sb3JcbiAqIEBwcm9wZXJ0eSB7b2JqZWN0PX0gZGF0YVNldFxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyPX0gc2l6ZVxuICogQHByb3BlcnR5IHtpbXBvcnQoXCJyZWFjdC1uYXRpdmVcIikuU3R5bGVQcm9wPGltcG9ydChcInJlYWN0LW5hdGl2ZVwiKS5UZXh0U3R5bGU+PX0gc3R5bGUgT25seSBgY29sb3JgIGlzIGZvcndhcmRlZC5cbiAqIEBwcm9wZXJ0eSB7KFwiRm9udEF3ZXNvbWVcInxcIkZvbnRBd2Vzb21lNVwifFwiRm9udEF3ZXNvbWU2XCJ8XCJNYXRlcmlhbEljb25zXCIpPX0gdmVyc2lvblxuICovXG5leHBvcnQgZGVmYXVsdCBtZW1vKHNoYXBlQ29tcG9uZW50KGNsYXNzIEFwaU1ha2VyVXRpbHNJY29uIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8qKiBAdHlwZSB7QXBpTWFrZXJVdGlsc0ljb25Qcm9wc30gKi9cbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBjb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAgIGRhdGFTZXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIHNpemU6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgc3R5bGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5hcnJheSwgUHJvcFR5cGVzLm51bWJlcl0pLFxuICAgIHZlcnNpb246IFByb3BUeXBlcy5vbmVPZihbXCJGb250QXdlc29tZVwiLCBcIkZvbnRBd2Vzb21lNVwiLCBcIkZvbnRBd2Vzb21lNlwiLCBcIk1hdGVyaWFsSWNvbnNcIl0pXG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge2RhdGFTZXQsIG5hbWUsIHN0eWxlLCB2ZXJzaW9uLCAuLi5yZXN0UHJvcHN9ID0gdGhpcy5wcm9wc1xuICAgIGNvbnN0IHtzdHlsZXNMaXN0fSA9IHVzZU1lcmdlZFN0eWxlKHN0eWxlLCBcIlRleHRcIilcbiAgICBsZXQgYWN0dWFsVmVyc2lvbiA9IHZlcnNpb25cblxuICAgIGlmICghYWN0dWFsVmVyc2lvbikge1xuICAgICAgaWYgKG5hbWUgaW4gaWNvbk1hcCkge1xuICAgICAgICBhY3R1YWxWZXJzaW9uID0gaWNvbk1hcFtuYW1lXVxuICAgICAgfSBlbHNlIGlmIChuYW1lIGluIEZvbnRBd2Vzb21lNkdseXBoTWFwKSB7XG4gICAgICAgIGFjdHVhbFZlcnNpb24gPSBcIkZvbnRBd2Vzb21lNlwiXG4gICAgICB9IGVsc2UgaWYgKG5hbWUgaW4gRm9udEF3ZXNvbWU1R2x5cGhNYXApIHtcbiAgICAgICAgYWN0dWFsVmVyc2lvbiA9IFwiRm9udEF3ZXNvbWU1XCJcbiAgICAgIH0gZWxzZSBpZiAobmFtZSBpbiBGb250QXdlc29tZUdseXBoTWFwKSB7XG4gICAgICAgIGFjdHVhbFZlcnNpb24gPSBcIkZvbnRBd2Vzb21lXCJcbiAgICAgIH0gZWxzZSBpZiAobmFtZSBpbiBNYXRlcmlhbEljb25zR2x5cGhNYXApIHtcbiAgICAgICAgYWN0dWFsVmVyc2lvbiA9ICBcIk1hdGVyaWFsSWNvbnNcIlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsVmVyc2lvbiA9IFwiRm9udEF3ZXNvbWVcIlxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9ubHkgZm9yd2FyZCBzb21lIHN0eWxlcyBsaWtlIGNvbG9yXG4gICAgY29uc3QgYWN0dWFsU3R5bGVzTGlzdCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgICAgY29uc3QgYWN0dWFsU3R5bGVzTGlzdCA9IFtdXG4gICAgICBjb25zdCB1bnN1cHBvcnRlZFN0eWxlS2V5cyA9IG5ldyBTZXQoKVxuXG4gICAgICBmb3IgKGNvbnN0IHN0eWxlIG9mIHN0eWxlc0xpc3QpIHtcbiAgICAgICAgY29uc3QgbmV3U3R5bGUgPSB7fVxuICAgICAgICBsZXQgY291bnQgPSAwXG4gICAgICAgIGNvbnN0IGZsYXR0ZW5lZFN0eWxlID0gU3R5bGVTaGVldC5mbGF0dGVuKHN0eWxlKSB8fCB7fVxuXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGZsYXR0ZW5lZFN0eWxlKSB7XG4gICAgICAgICAgaWYgKGtleSA9PSBcImNvbG9yXCIpIHtcbiAgICAgICAgICAgIG5ld1N0eWxlW2tleV0gPSBmbGF0dGVuZWRTdHlsZVtrZXldXG4gICAgICAgICAgICBjb3VudCsrXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHVuc3VwcG9ydGVkU3R5bGVLZXlzLmFkZChrZXkpXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvdW50ID4gMCkge1xuICAgICAgICAgIGFjdHVhbFN0eWxlc0xpc3QucHVzaChuZXdTdHlsZSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodW5zdXBwb3J0ZWRTdHlsZUtleXMuc2l6ZSA+IDApIHtcbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgIFwiQXBpTWFrZXJVdGlsc0ljb24gcmVjZWl2ZWQgdW5zdXBwb3J0ZWQgc3R5bGUga2V5czpcIixcbiAgICAgICAgICBBcnJheS5mcm9tKHVuc3VwcG9ydGVkU3R5bGVLZXlzKS5zb3J0KClcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYWN0dWFsU3R5bGVzTGlzdFxuICAgIH0sIFtzdHlsZXNMaXN0LCBzdHlsZV0pXG5cbiAgICBjb25zdCBhY3R1YWxEYXRhU2V0ID0gdXNlTWVtbygoKSA9PiBPYmplY3QuYXNzaWduKHtuYW1lLCB2ZXJzaW9uOiBhY3R1YWxWZXJzaW9ufSwgZGF0YVNldCksIFthY3R1YWxWZXJzaW9uLCBkYXRhU2V0LCBuYW1lXSlcblxuICAgIGlmIChhY3R1YWxWZXJzaW9uID09IFwiRm9udEF3ZXNvbWVcIikge1xuICAgICAgcmV0dXJuIDxGb250QXdlc29tZUljb24gZGF0YVNldD17YWN0dWFsRGF0YVNldH0gbmFtZT17bmFtZX0gc3R5bGU9e2FjdHVhbFN0eWxlc0xpc3R9IHsuLi5yZXN0UHJvcHN9IC8+XG4gICAgfSBlbHNlIGlmIChhY3R1YWxWZXJzaW9uID09IFwiRm9udEF3ZXNvbWU1XCIpIHtcbiAgICAgIHJldHVybiA8Rm9udEF3ZXNvbWU1SWNvbiBkYXRhU2V0PXthY3R1YWxEYXRhU2V0fSBuYW1lPXtuYW1lfSBzdHlsZT17YWN0dWFsU3R5bGVzTGlzdH0gey4uLnJlc3RQcm9wc30gLz5cbiAgICB9IGVsc2UgaWYgKGFjdHVhbFZlcnNpb24gPT0gXCJGb250QXdlc29tZTZcIikge1xuICAgICAgcmV0dXJuIDxGb250QXdlc29tZTZJY29uIGRhdGFTZXQ9e2FjdHVhbERhdGFTZXR9IG5hbWU9e25hbWV9IHN0eWxlPXthY3R1YWxTdHlsZXNMaXN0fSB7Li4ucmVzdFByb3BzfSAvPlxuICAgIH0gZWxzZSBpZiAoYWN0dWFsVmVyc2lvbiA9PSBcIk1hdGVyaWFsSWNvbnNcIikge1xuICAgICAgcmV0dXJuIDxNYXRlcmlhbEljb25zSWNvbiBkYXRhU2V0PXthY3R1YWxEYXRhU2V0fSBuYW1lPXtuYW1lfSBzdHlsZT17YWN0dWFsU3R5bGVzTGlzdH0gey4uLnJlc3RQcm9wc30gLz5cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHZlcnNpb246ICR7YWN0dWFsVmVyc2lvbn1gKVxuICAgIH1cbiAgfVxufSkpXG4iXX0=
|