react-float-anchor
Advanced tools
Comparing version 3.2.0 to 3.3.0
@@ -0,1 +1,5 @@ | ||
## 3.3.0 (2019-10-22) | ||
* The choice return value from contain-by-screen is now available if you pass a callback as the `float` prop. | ||
## 3.2.0 (2019-10-15) | ||
@@ -2,0 +6,0 @@ |
import * as React from 'react'; | ||
import {Options} from 'contain-by-screen'; | ||
import {Options, Choice} from 'contain-by-screen'; | ||
export {Options} from 'contain-by-screen'; | ||
export {Options, Choice} from 'contain-by-screen'; | ||
export type Props = { | ||
anchor: (anchorRef: React.Ref<any>) => React.ReactNode; | ||
float?: React.ReactNode | null | undefined; | ||
float?: React.ReactNode | ((choice: Choice | null) => React.ReactNode) | null | undefined; | ||
options?: Options | null | undefined; | ||
@@ -11,0 +11,0 @@ zIndex?: number | string | null | undefined; |
@@ -69,2 +69,6 @@ "use strict"; | ||
_this = (0, _possibleConstructorReturn2["default"])(this, (_getPrototypeOf2 = (0, _getPrototypeOf3["default"])(FloatAnchor)).call.apply(_getPrototypeOf2, [this].concat(args))); | ||
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", { | ||
choice: null, | ||
floatNode: null | ||
}); | ||
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_portalEl", void 0); | ||
@@ -162,3 +166,3 @@ (0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "_portalRemoval", (0, _kefirBus["default"])()); | ||
if (this.props["float"] != null) { | ||
if (this.state.floatNode != null) { | ||
// We need to reposition after the page has had its layout done. | ||
@@ -169,8 +173,20 @@ this.repositionAsync(); | ||
}, { | ||
key: "shouldComponentUpdate", | ||
value: function shouldComponentUpdate(nextProps, nextState) { | ||
// If the only thing changed is state.choice *and* typeof props.float !== 'function', don't re-render. | ||
// If nothing has changed, allow the re-render so we keep the same behavior on a plain forceUpdate of a parent. | ||
// TODO in next major version, don't re-render when nothing has changed. | ||
if (typeof nextProps["float"] !== 'function' && this.state.choice !== nextState.choice && this.props.anchor === nextProps.anchor && this.props.parentElement === nextProps.parentElement && this.props["float"] === nextProps["float"] && this.props.options === nextProps.options && this.props.zIndex === nextProps.zIndex && this.props.floatContainerClassName === nextProps.floatContainerClassName) { | ||
return false; | ||
} | ||
return true; | ||
} | ||
}, { | ||
key: "componentDidUpdate", | ||
value: function componentDidUpdate(prevProps) { | ||
value: function componentDidUpdate(prevProps, prevState) { | ||
var portalEl = this._portalEl; | ||
if (portalEl) { | ||
if (this.props["float"] == null) { | ||
if (this.state.floatNode == null) { | ||
this._portalRemoval.value(null); | ||
@@ -190,5 +206,6 @@ } else { | ||
portalEl.style.zIndex = String(this.props.zIndex); | ||
} | ||
} // If this re-render happened because of a change in position choice, don't reposition again now. | ||
if (prevProps["float"] !== this.props["float"] || !(0, _isEqual["default"])(prevProps.options, this.props.options)) { | ||
if (prevState.floatNode !== this.state.floatNode && prevState.choice === this.state.choice || !(0, _isEqual["default"])(prevProps.options, this.props.options)) { | ||
this.repositionAsync(); | ||
@@ -198,3 +215,3 @@ } | ||
} else { | ||
if (this.props["float"] != null) { | ||
if (this.state.floatNode != null) { | ||
throw new Error('Should not happen: portalEl was null after rendering with float prop'); | ||
@@ -261,4 +278,11 @@ } | ||
if (portalEl && portalEl.parentElement && anchorRef) { | ||
(0, _containByScreen["default"])(portalEl, anchorRef, this.props.options || {}); // Make any child FloatAnchors reposition | ||
var _choice = (0, _containByScreen["default"])(portalEl, anchorRef, this.props.options || {}); | ||
if (!(0, _isEqual["default"])(this.state.choice, _choice)) { | ||
this.setState({ | ||
choice: _choice | ||
}); | ||
} // Make any child FloatAnchors reposition | ||
this._childContext.repositionEvents.value(null); | ||
@@ -270,5 +294,4 @@ } | ||
value: function render() { | ||
var _this$props = this.props, | ||
anchor = _this$props.anchor, | ||
_float = _this$props["float"]; | ||
var anchor = this.props.anchor; | ||
var _float = this.state.floatNode; | ||
var floatPortal = null; | ||
@@ -313,2 +336,9 @@ | ||
}) | ||
}, { | ||
key: "getDerivedStateFromProps", | ||
value: function getDerivedStateFromProps(props, state) { | ||
return { | ||
floatNode: typeof props["float"] === 'function' ? props["float"](state.choice) : props["float"] | ||
}; | ||
} | ||
}]); | ||
@@ -322,3 +352,3 @@ return FloatAnchor; | ||
parentElement: _propTypes["default"].object, | ||
"float": _propTypes["default"].node, | ||
"float": _propTypes["default"].oneOfType([_propTypes["default"].node, _propTypes["default"].func]), | ||
options: _propTypes["default"].object, | ||
@@ -331,2 +361,2 @@ zIndex: _propTypes["default"].oneOfType([_propTypes["default"].number, _propTypes["default"].string]), | ||
module.exports.default = exports.default; | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJnbG9iYWwiLCJjYiIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIkZsb2F0QW5jaG9yQ29udGV4dCIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsIkZsb2F0QW5jaG9yIiwicmVwb3NpdGlvbkV2ZW50cyIsInJlcG9zaXRpb25Bc3luY1F1ZXVlZCIsInJlcG9zaXRpb25Bc3luY0V2ZW50cyIsImFuY2hvclJlZiIsIl9hbmNob3JSZWYiLCJwb3J0YWxFbCIsIl9wb3J0YWxFbCIsInJmYUFuY2hvciIsInVuZGVmaW5lZCIsInBhcmVudEVsZW1lbnQiLCJFcnJvciIsInRhcmdldCIsInByb3BzIiwiZG9jdW1lbnQiLCJib2R5IiwiZG9jdW1lbnRFbGVtZW50IiwiYXBwZW5kQ2hpbGQiLCJLZWZpciIsIm1lcmdlIiwiZnJvbUV2ZW50cyIsIndpbmRvdyIsImNhcHR1cmUiLCJwYXNzaXZlIiwiZmlsdGVyIiwiZXZlbnQiLCJjb250YWlucyIsInRha2VVbnRpbEJ5IiwiX3BvcnRhbFJlbW92YWwiLCJvblZhbHVlIiwicmVwb3NpdGlvbkFzeW5jIiwib25FbmQiLCJyZW1vdmVDaGlsZCIsInBvcnRhbEVsX2ZpcnN0Q2hlY2siLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiZmxvYXRDb250YWluZXJDbGFzc05hbWUiLCJzdHlsZSIsInpJbmRleCIsIlN0cmluZyIsInBvc2l0aW9uIiwicGFyZW50Q3R4IiwiY29udGV4dCIsIl91bm1vdW50IiwicmVwb3NpdGlvbiIsIl9jaGlsZENvbnRleHQiLCJ2YWx1ZSIsInByZXZQcm9wcyIsIl9tb3VudFBvcnRhbEVsIiwib3B0aW9ucyIsImVuZCIsImFuY2hvciIsImZsb2F0IiwiZmxvYXRQb3J0YWwiLCJfZ2V0T3JDcmVhdGVQb3J0YWxFbCIsIl9zZXRBbmNob3JSZWYiLCJub2RlIiwicGFyZW50Tm9kZSIsIkNvbXBvbmVudCIsIlByb3BUeXBlcyIsImZ1bmMiLCJpc1JlcXVpcmVkIiwib2JqZWN0Iiwib25lT2ZUeXBlIiwibnVtYmVyIiwic3RyaW5nIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBRUEsSUFBTUEscUJBQXFCLEdBQUdDLE1BQU0sQ0FBQ0QscUJBQVAsSUFBaUMsVUFBQUUsRUFBRTtBQUFBLFNBQUlDLE9BQU8sQ0FBQ0MsT0FBUixHQUFrQkMsSUFBbEIsQ0FBdUJILEVBQXZCLENBQUo7QUFBQSxDQUFqRTs7QUFlQTtBQUNBO0FBQ0EsSUFBTUksa0JBQWtCLEdBQUdDLGtCQUFNQyxhQUFOLENBQTZDLElBQTdDLENBQTNCOztJQVlxQkMsVzs7Ozs7Ozs7Ozs7Ozs7Ozs7O3VHQWFTLDJCO2lHQUNOLDJCO3NHQUNOO0FBQ2RDLE1BQUFBLGdCQUFnQixFQUFHLDJCQURMO0FBRWRDLE1BQUFBLHFCQUFxQixFQUFFLEtBRlQ7QUFHZEMsTUFBQUEscUJBQXFCLEVBQUc7QUFIVixLO21HQU1XLEk7c0dBUVgsVUFBQ0MsU0FBRCxFQUE2QjtBQUMzQyxZQUFLQyxVQUFMLEdBQWtCRCxTQUFsQjtBQUVBLFVBQU1FLFFBQVEsR0FBRyxNQUFLQyxTQUF0Qjs7QUFDQSxVQUFJRCxRQUFKLEVBQWM7QUFDWEEsUUFBQUEsUUFBRCxDQUFnQkUsU0FBaEIsR0FBNEJKLFNBQVMsR0FBR0EsU0FBSCxHQUFlSyxTQUFwRDtBQUNEO0FBQ0YsSzt1R0E0SGdCLFlBQU07QUFDckIsVUFBTUgsUUFBUSxHQUFHLE1BQUtDLFNBQXRCO0FBQ0E7O0FBQ0EsVUFBSUQsUUFBUSxDQUFDSSxhQUFiLEVBQTRCO0FBQzFCLGNBQU0sSUFBSUMsS0FBSixDQUFVLDZDQUFWLENBQU47QUFDRDs7QUFFRCxVQUFNUCxTQUFTLEdBQUcsTUFBS0MsVUFBdkI7QUFDQSxVQUFJLENBQUNELFNBQUwsRUFBZ0IsTUFBTSxJQUFJTyxLQUFKLENB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TUFGUjtBQUdqQixXQUFPSCxzQkFBVUgsSUFIQTtBQUlqQlAsRUFBQUEsT0FBTyxFQUFFVSxzQkFBVUcsTUFKRjtBQUtqQnhCLEVBQUFBLE1BQU0sRUFBRXFCLHNCQUFVSSxTQUFWLENBQW9CLENBQUNKLHNCQUFVSyxNQUFYLEVBQW1CTCxzQkFBVU0sTUFBN0IsQ0FBcEIsQ0FMUztBQU1qQjdCLEVBQUFBLHVCQUF1QixFQUFFdUIsc0JBQVVNO0FBTmxCLEM7aUNBREFqRSxXLGlCQVVFSCxrQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIEBmbG93ICovXG5cbmltcG9ydCBmcm9tRXZlbnRzV2l0aE9wdGlvbnMgZnJvbSAnLi9saWIvZnJvbUV2ZW50c1dpdGhPcHRpb25zJztcbmltcG9ydCBMaWZlY3ljbGVIZWxwZXIgZnJvbSAnLi9MaWZlY3ljbGVIZWxwZXInO1xuaW1wb3J0IEtlZmlyIGZyb20gJ2tlZmlyJztcbmltcG9ydCBrZWZpckJ1cyBmcm9tICdrZWZpci1idXMnO1xuaW1wb3J0IHR5cGUge0J1c30gZnJvbSAna2VmaXItYnVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge2NyZWF0ZVBvcnRhbH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY29udGFpbkJ5U2NyZWVuIGZyb20gJ2NvbnRhaW4tYnktc2NyZWVuJztcbmltcG9ydCB0eXBlIHtPcHRpb25zfSBmcm9tICdjb250YWluLWJ5LXNjcmVlbic7XG5pbXBvcnQgaXNFcXVhbCBmcm9tICdsb2Rhc2gvaXNFcXVhbCc7XG5cbmNvbnN0IHJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGdsb2JhbC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgfHwgKGNiID0+IFByb21pc2UucmVzb2x2ZSgpLnRoZW4oY2IpKTtcblxudHlwZSBGbG9hdEFuY2hvckNvbnRleHRUeXBlID0ge1xuICAvLyBFbWl0cyBhbiBldmVudCBhZnRlciB0aGUgY29tcG9uZW50IHJlcG9zaXRpb25zLCBzbyB0aGUgY2hpbGRyZW4gY2FuIHJlcG9zaXRpb24gdGhlbXNlbHZlcyB0byBtYXRjaC5cbiAgcmVwb3NpdGlvbkV2ZW50czogS2VmaXIuT2JzZXJ2YWJsZTxudWxsPixcblxuICAvLyBTaWduaWZpZXMgdGhpcyBjb21wb25lbnQgaGFzIGEgcmVwb3NpdGlvbkFzeW5jIHF1ZXVlZCB1cC4gQ2hpbGRyZW4gY29tcG9uZW50cyBzaG91bGQgaWdub3JlIHJlcG9zaXRpb25Bc3luY1xuICAvLyBjYWxscyB3aGlsZSB0aGlzIGlzIHRydWUuIENoaWxkcmVuIHNob3VsZCBjb3B5IHRoZWlyIHBhcmVudCB3aGVuZXZlciB0aGVpciBwYXJlbnQgc2V0cyB0aGVpcnMgdG8gdHJ1ZS5cbiAgLy8gQ29tcG9uZW50cyBzaG91bGQgY2xlYXIgdGhpcyBmbGFnIHdoZW4gdGhleSByZXBvc2l0aW9uIHVubGVzcyB0aGV5IGhhdmUgYSBwYXJlbnQgd2l0aCBpdCBzdGlsbCBzZXQuXG4gIHJlcG9zaXRpb25Bc3luY1F1ZXVlZDogYm9vbGVhbixcblxuICAvLyBFbWl0cyBldmVyeSB0aW1lIHJlcG9zaXRpb25Bc3luY1F1ZXVlZCBiZWNvbWVzIHRydWUuXG4gIHJlcG9zaXRpb25Bc3luY0V2ZW50czogS2VmaXIuT2JzZXJ2YWJsZTxudWxsPlxufTtcblxuLy8gQ29udGV4dCBpcyB1c2VkIHNvIHRoYXQgd2hlbiBhIEZsb2F0QW5jaG9yIGhhcyByZXBvc2l0aW9uKCkgY2FsbGVkIG9uIGl0LFxuLy8gYWxsIG9mIGl0cyBkZXNjZW5kYW50IEZsb2F0QW5jaG9yIGVsZW1lbnRzIHJlcG9zaXRpb24gdG9vLlxuY29uc3QgRmxvYXRBbmNob3JDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDw/RmxvYXRBbmNob3JDb250ZXh0VHlwZT4obnVsbCk7XG5cbmV4cG9ydCB0eXBlIHtPcHRpb25zfSBmcm9tICdjb250YWluLWJ5LXNjcmVlbic7XG5cbmV4cG9ydCB0eXBlIFByb3BzID0ge1xuICBhbmNob3I6IChhbmNob3JSZWY6IFJlYWN0JFJlZjxhbnk+KSA9PiBSZWFjdCROb2RlO1xuICBwYXJlbnRFbGVtZW50PzogP0hUTUxFbGVtZW50O1xuICBmbG9hdD86ID9SZWFjdCROb2RlO1xuICBvcHRpb25zPzogP09wdGlvbnM7XG4gIHpJbmRleD86ID9udW1iZXJ8c3RyaW5nO1xuICBmbG9hdENvbnRhaW5lckNsYXNzTmFtZT86ID9zdHJpbmc7XG59O1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRmxvYXRBbmNob3IgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8UHJvcHM+IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBhbmNob3I6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgcGFyZW50RWxlbWVudDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBmbG9hdDogUHJvcFR5cGVzLm5vZGUsXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB6SW5kZXg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgICBmbG9hdENvbnRhaW5lckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xuICB9O1xuXG4gIHN0YXRpYyBjb250ZXh0VHlwZSA9IEZsb2F0QW5jaG9yQ29udGV4dDtcblxuICBfcG9ydGFsRWw6ID9IVE1MRWxlbWVudDtcbiAgX3BvcnRhbFJlbW92YWw6IEJ1czxudWxsPiA9IGtlZmlyQnVzKCk7XG4gIF91bm1vdW50OiBCdXM8bnVsbD4gPSBrZWZpckJ1cygpO1xuICBfY2hpbGRDb250ZXh0ID0ge1xuICAgIHJlcG9zaXRpb25FdmVudHM6IChrZWZpckJ1cygpOiBCdXM8bnVsbD4pLFxuICAgIHJlcG9zaXRpb25Bc3luY1F1ZXVlZDogZmFsc2UsXG4gICAgcmVwb3NpdGlvbkFzeW5jRXZlbnRzOiAoa2VmaXJCdXMoKTogQnVzPG51bGw+KVxuICB9O1xuXG4gIF9hbmNob3JSZWY6ID9IVE1MRWxlbWVudCA9IG51bGw7XG5cbiAgc3RhdGljICpwYXJlbnROb2Rlcyhub2RlOiBOb2RlKTogSXRlcmF0b3I8Tm9kZT4ge1xuICAgIGRvIHtcbiAgICAgIHlpZWxkIChub2RlOiBOb2RlKTtcbiAgICB9IHdoaWxlICgobm9kZSA9IChub2RlOiBhbnkpLnJmYUFuY2hvciB8fCAobm9kZTogYW55KS5wYXJlbnROb2RlKSk7XG4gIH1cblxuICBfc2V0QW5jaG9yUmVmID0gKGFuY2hvclJlZjogP0hUTUxFbGVtZW50KSA9PiB7XG4gICAgdGhpcy5fYW5jaG9yUmVmID0gYW5jaG9yUmVmO1xuXG4gICAgY29uc3QgcG9ydGFsRWwgPSB0aGlzLl9wb3J0YWxFbDtcbiAgICBpZiAocG9ydGFsRWwpIHtcbiAgICAgIChwb3J0YWxFbDogYW55KS5yZmFBbmNob3IgPSBhbmNob3JSZWYgPyBhbmNob3JSZWYgOiB1bmRlZmluZWQ7XG4gICAgfVxuICB9O1xuXG4gIF9nZXRPckNyZWF0ZVBvcnRhbEVsKCk6IEhUTUxFbGVtZW50IHtcbiAgICBjb25zdCBwb3J0YWxFbF9maXJzdENoZWNrID0gdGhpcy5fcG9ydGFsRWw7XG4gICAgaWYgKHBvcnRhbEVsX2ZpcnN0Q2hlY2spIHtcbiAgICAgIHJldHVybiBwb3J0YWxFbF9maXJzdENoZWNrO1xuICAgIH1cblxuICAgIGNvbnN0IHBvcnRhbEVsID0gdGhpcy5fcG9ydGFsRWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBwb3J0YWxFbC5jbGFzc05hbWUgPSB0aGlzLnByb3BzLmZsb2F0Q29udGFpbmVyQ2xhc3NOYW1lIHx8ICcnO1xuICAgIHBvcnRhbEVsLnN0eWxlLnpJbmRleCA9IFN0cmluZyh0aGlzLnByb3BzLnpJbmRleCk7XG4gICAgcG9ydGFsRWwuc3R5bGUucG9zaXRpb24gPSAnZml4ZWQnO1xuXG4gICAgcmV0dXJuIHBvcnRhbEVsO1xuICB9XG5cbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgY29uc3QgcGFyZW50Q3R4OiA/RmxvYXRBbmNob3JDb250ZXh0VHlwZSA9IHRoaXMuY29udGV4dDtcbiAgICBpZiAocGFyZW50Q3R4KSB7XG4gICAgICBwYXJlbnRDdHgucmVwb3NpdGlvbkV2ZW50c1xuICAgICAgICAudGFrZVVudGlsQnkodGhpcy5fdW5tb3VudClcbiAgICAgICAgLm9uVmFsdWUoKCkgPT4gdGhpcy5yZXBvc2l0aW9uKCkpO1xuXG4gICAgICBwYXJlbnRDdHgucmVwb3NpdGlvbkFzeW5jRXZlbnRzXG4gICAgICAgIC50YWtlVW50aWxCeSh0aGlzLl91bm1vdW50KVxuICAgICAgICAub25WYWx1ZSgoKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLl9jaGlsZENvbnRleHQucmVwb3NpdGlvbkFzeW5jUXVldWVkKSB7XG4gICAgICAgICAgICB0aGlzLl9jaGlsZENvbnRleHQucmVwb3NpdGlvbkFzeW5jUXVldWVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuX2NoaWxkQ29udGV4dC5yZXBvc2l0aW9uQXN5bmNFdmVudHMudmFsdWUobnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgaWYgKHBhcmVudEN0eC5yZXBvc2l0aW9uQXN5bmNRdWV1ZWQpIHtcbiAgICAgICAgdGhpcy5fY2hpbGRDb250ZXh0LnJlcG9zaXRpb25Bc3luY1F1ZXVlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoaWxkQ29udGV4dC5yZXBvc2l0aW9uQXN5bmNFdmVudHMudmFsdWUobnVsbCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuZmxvYXQgIT0gbnVsbCkge1xuICAgICAgLy8gV2UgbmVlZCB0byByZXBvc2l0aW9uIGFmdGVyIHRoZSBwYWdlIGhhcyBoYWQgaXRzIGxheW91dCBkb25lLlxuICAgICAgdGhpcy5yZXBvc2l0aW9uQXN5bmMoKTtcbiAgICB9XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzOiBQcm9wcykge1xuICAgIGNvbnN0IHBvcnRhbEVsID0gdGhpcy5fcG9ydGFsRWw7XG4gICAgaWYgKHBvcnRhbEVsKSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5mbG9hdCA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuX3BvcnRhbFJlbW92YWwudmFsdWUobnVsbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocHJldlByb3BzLnBhcmVudEVsZW1lbnQgIT09IHRoaXMucHJvcHMucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgIHRoaXMuX3BvcnRhbFJlbW92YWwudmFsdWUobnVsbCk7XG4gICAgICAgICAgdGhpcy5fbW91bnRQb3J0YWxFbCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2UHJvcHMuZmxvYXRDb250YWluZXJDbGFzc05hbWUgIT09IHRoaXMucHJvcHMuZmxvYXRDb250YWluZXJDbGFzc05hbWUpIHtcbiAgICAgICAgICBwb3J0YWxFbC5jbGFzc05hbWUgPSB0aGlzLnByb3BzLmZsb2F0Q29udGFpbmVyQ2xhc3NOYW1lIHx8ICcnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwcmV2UHJvcHMuekluZGV4ICE9PSB0aGlzLnByb3BzLnpJbmRleCkge1xuICAgICAgICAgIHBvcnRhbEVsLnN0eWxlLnpJbmRleCA9IFN0cmluZyh0aGlzLnByb3BzLnpJbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgcHJldlByb3BzLmZsb2F0ICE9PSB0aGlzLnByb3BzLmZsb2F0IHx8XG4gICAgICAgICAgIWlzRXF1YWwocHJldlByb3BzLm9wdGlvbnMsIHRoaXMucHJvcHMub3B0aW9ucylcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5yZXBvc2l0aW9uQXN5bmMoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5wcm9wcy5mbG9hdCAhPSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2hvdWxkIG5vdCBoYXBwZW46IHBvcnRhbEVsIHdhcyBudWxsIGFmdGVyIHJlbmRlcmluZyB3aXRoIGZsb2F0IHByb3AnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLl9wb3J0YWxSZW1vdmFsLnZhbHVlKG51bGwpO1xuICAgIHRoaXMuX3VubW91bnQudmFsdWUobnVsbCk7XG4gICAgdGhpcy5fY2hpbGRDb250ZXh0LnJlcG9zaXRpb25FdmVudHMuZW5kKCk7XG4gICAgdGhpcy5fY2hpbGRDb250ZXh0LnJlcG9zaXRpb25Bc3luY0V2ZW50cy5lbmQoKTtcbiAgfVxuXG4gIC8vIFJlcG9zaXRpb25zIG9uIHRoZSBuZXh0IGFuaW1hdGlvbiBmcmFtZS4gQXV0b21hdGljYWxseSBiYXRjaGVzIHdpdGggb3RoZXIgcmVwb3NpdGlvbkFzeW5jIGNhbGxzXG4gIC8vIGluIHRoZSBzYW1lIHRyZWUuXG4gIHJlcG9zaXRpb25Bc3luYygpIHtcbiAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYSByZXBvc2l0aW9uQXN5bmMgcXVldWVkIHVwLCB0aGVyZSdzIG5vIHJlYXNvbiB0byBxdWV1ZSBhbm90aGVyLlxuICAgIGlmICh0aGlzLl9jaGlsZENvbnRleHQucmVwb3NpdGlvbkFzeW5jUXVldWVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NoaWxkQ29udGV4dC5yZXBvc2l0aW9uQXN5bmNRdWV1ZWQgPSB0cnVlO1xuICAgIHRoaXMuX2NoaWxkQ29udGV4dC5yZXBvc2l0aW9uQXN5bmNFdmVudHMudmFsdWUobnVsbCk7XG5cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgLy8gSWYgb3VyIHBhcmVudCBzdGlsbCBoYXMgYSByZXBvc2l0aW9uQXN5bmMgcXVldWVkIHVwLCB0aGVuIGRvbid0IGZpcmUuXG4gICAgICAvLyBUaGUgcGFyZW50IG1heSBoYXZlIHF1ZXVlZCB1cCBhIHJlcG9zaXRpb25Bc3luYyBpbiB0aGUgdGltZSBzaW5jZSB0aGlzIHJlcG9zaXRpb25Bc3luYygpIHdhcyBjYWxsZWQuXG4gICAgICBjb25zdCBwYXJlbnRDdHg6ID9GbG9hdEFuY2hvckNvbnRleHRUeXBlID0gdGhpcy5jb250ZXh0O1xuICAgICAgaWYgKCFwYXJlbnRDdHggfHwgIXBhcmVudEN0eC5yZXBvc2l0aW9uQXN5bmNRdWV1ZWQpIHtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHdlIHN0aWxsIGhhdmUgYSByZXBvc2l0aW9uQXN5bmMgcXVldWVkIHVwLiBJdCBjb3VsZCBiZSB0aGF0IHJlcG9zaXRpb24oKSBoYXMgYmVlbiBjYWxsZWRcbiAgICAgICAgLy8gaW4gdGhlIHRpbWUgc2luY2UgcmVwb3NpdGlvbkFzeW5jKCkuXG4gICAgICAgIGlmICh0aGlzLl9jaGlsZENvbnRleHQucmVwb3NpdGlvbkFzeW5jUXVldWVkKSB7XG4gICAgICAgICAgdGhpcy5fY2hpbGRDb250ZXh0LnJlcG9zaXRpb25Bc3luY1F1ZXVlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMucmVwb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXBvc2l0aW9uKCkge1xuICAgIC8vIE9ubHkgY2xlYXIgb3VyIHJlcG9zaXRpb25Bc3luY1F1ZXVlZCBmbGFnIGlmIHdlJ3JlIG5vdCByZWZsZWN0aW5nIG91ciBwYXJlbnQncyB0cnVlIHZhbHVlLlxuICAgIGNvbnN0IHBhcmVudEN0eDogP0Zsb2F0QW5jaG9yQ29udGV4dFR5cGUgPSB0aGlzLmNvbnRleHQ7XG4gICAgaWYgKCFwYXJlbnRDdHggfHwgIXBhcmVudEN0eC5yZXBvc2l0aW9uQXN5bmNRdWV1ZWQpIHtcbiAgICAgIHRoaXMuX2NoaWxkQ29udGV4dC5yZXBvc2l0aW9uQXN5bmNRdWV1ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBwb3J0YWxFbCA9IHRoaXMuX3BvcnRhbEVsO1xuICAgIGNvbnN0IGFuY2hvclJlZiA9IHRoaXMuX2FuY2hvclJlZjtcbiAgICBpZiAocG9ydGFsRWwgJiYgcG9ydGFsRWwucGFyZW50RWxlbWVudCAmJiBhbmNob3JSZWYpIHtcbiAgICAgIGNvbnRhaW5CeVNjcmVlbihwb3J0YWxFbCwgYW5jaG9yUmVmLCB0aGlzLnByb3BzLm9wdGlvbnMgfHwge30pO1xuXG4gICAgICAvLyBNYWtlIGFueSBjaGlsZCBGbG9hdEFuY2hvcnMgcmVwb3NpdGlvblxuICAgICAgdGhpcy5fY2hpbGRDb250ZXh0LnJlcG9zaXRpb25FdmVudHMudmFsdWUobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgX21vdW50UG9ydGFsRWwgPSAoKSA9PiB7XG4gICAgY29uc3QgcG9ydGFsRWwgPSB0aGlzLl9wb3J0YWxFbDtcbiAgICAvKjo6IGlmICghcG9ydGFsRWwpIHRocm93IG5ldyBFcnJvcigpOyAqL1xuICAgIGlmIChwb3J0YWxFbC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBub3QgaGFwcGVuOiBwb3J0YWxFbCBhbHJlYWR5IGluIHBhZ2UnKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbmNob3JSZWYgPSB0aGlzLl9hbmNob3JSZWY7XG4gICAgaWYgKCFhbmNob3JSZWYpIHRocm93IG5ldyBFcnJvcignUmVhY3RGbG9hdEFuY2hvciBtaXNzaW5nIGFuY2hvclJlZiBlbGVtZW50Jyk7XG4gICAgKHBvcnRhbEVsOiBhbnkpLnJmYUFuY2hvciA9IGFuY2hvclJlZjtcblxuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMucHJvcHMucGFyZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAvKjo6IGlmICghdGFyZ2V0KSB0aHJvdyBuZXcgRXJyb3IoKTsgKi9cbiAgICB0YXJnZXQuYXBwZW5kQ2hpbGQocG9ydGFsRWwpO1xuXG4gICAgS2VmaXIubWVyZ2UoW1xuICAgICAgS2VmaXIuZnJvbUV2ZW50cyh3aW5kb3csICdyZXNpemUnKSxcbiAgICAgIGZyb21FdmVudHNXaXRoT3B0aW9ucyh3aW5kb3csICdzY3JvbGwnLCB7XG4gICAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgICAgIHBhc3NpdmU6IHRydWVcbiAgICAgIH0pLmZpbHRlcihldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGFuY2hvclJlZiA9IHRoaXMuX2FuY2hvclJlZjtcbiAgICAgICAgcmV0dXJuIGFuY2hvclJlZiAmJiBldmVudC50YXJnZXQuY29udGFpbnMoYW5jaG9yUmVmKTtcbiAgICAgIH0pXG4gICAgXSlcbiAgICAgIC50YWtlVW50aWxCeSh0aGlzLl9wb3J0YWxSZW1vdmFsKVxuICAgICAgLm9uVmFsdWUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlcG9zaXRpb25Bc3luYygpO1xuICAgICAgfSlcbiAgICAgIC5vbkVuZCgoKSA9PiB7XG4gICAgICAgIChwb3J0YWxFbDogYW55KS5yZmFBbmNob3IgPSB1bmRlZmluZWQ7XG4gICAgICAgIC8qOjogaWYgKCFwb3J0YWxFbC5wYXJlbnRFbGVtZW50KSB0aHJvdyBuZXcgRXJyb3IoKTsgKi9cbiAgICAgICAgcG9ydGFsRWwucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChwb3J0YWxFbCk7XG4gICAgICB9KTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge2FuY2hvciwgZmxvYXR9ID0gdGhpcy5wcm9wcztcbiAgICBsZXQgZmxvYXRQb3J0YWwgPSBudWxsO1xuICAgIGlmIChmbG9hdCAhPSBudWxsKSB7XG4gICAgICBjb25zdCBwb3J0YWxFbCA9IHRoaXMuX2dldE9yQ3JlYXRlUG9ydGFsRWwoKTtcbiAgICAgIGZsb2F0UG9ydGFsID0gKFxuICAgICAgICA8RmxvYXRBbmNob3JDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXsodGhpcy5fY2hpbGRDb250ZXh0OiBGbG9hdEFuY2hvckNvbnRleHRUeXBlKX0+XG4gICAgICAgICAgPExpZmVjeWNsZUhlbHBlciBvbk1vdW50PXt0aGlzLl9tb3VudFBvcnRhbEVsfSAvPlxuICAgICAgICAgIHtjcmVhdGVQb3J0YWwoZmxvYXQsIHBvcnRhbEVsKX1cbiAgICAgICAgPC9GbG9hdEFuY2hvckNvbnRleHQuUHJvdmlkZXI+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8PlxuICAgICAgICB7YW5jaG9yKCh0aGlzLl9zZXRBbmNob3JSZWY6IGFueSkpfVxuICAgICAgICB7ZmxvYXRQb3J0YWx9XG4gICAgICA8Lz5cbiAgICApO1xuICB9XG59XG4iXX0= | ||
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJnbG9iYWwiLCJjYiIsIlByb21pc2UiLCJyZXNvbHZlIiwidGhlbiIsIkZsb2F0QW5jaG9yQ29udGV4dCIsIlJlYWN0IiwiY3JlYXRlQ29udGV4dCIsIkZsb2F0QW5jaG9yIiwiY2hvaWNlIiwiZmxvYXROb2RlIiwicmVwb3NpdGlvbkV2ZW50cyIsInJlcG9zaXRpb25Bc3luY1F1ZXVlZCIsInJlcG9zaXRpb25Bc3luY0V2ZW50cyIsImFuY2hvclJlZiIsIl9hbmNob3JSZWYiLCJwb3J0YWxFbCIsIl9wb3J0YWxFbCIsInJmYUFuY2hvciIsInVuZGVmaW5lZCIsInBhcmVudEVsZW1lbnQiLCJFcnJvciIsInRhcmdldCIsInByb3BzIiwiZG9jdW1lbnQiLCJib2R5IiwiZG9jdW1lbnRFbGVtZW50IiwiYXBwZW5kQ2hpbGQiLCJLZWZpciIsIm1lcmdlIiwiZnJvbUV2ZW50cyIsIndpbmRvdyIsImNhcHR1cmUiLCJwYXNzaXZlIiwiZmlsdGVyIiwiZXZlbnQiLCJjb250YWlucyIsInRha2VVbnRpbEJ5IiwiX3BvcnRhbFJlbW92YWwiLCJvblZhbHVlIiwicmVwb3NpdGlvbkFzeW5jIiwib25FbmQiLCJyZW1vdmVDaGlsZCIsInBvcnRhbEVsX2ZpcnN0Q2hlY2siLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiZmxvYXRDb250YWluZXJDbGFzc05hbWUiLCJzdHlsZSIsInpJbmRleCIsIlN0cmluZyIsInBvc2l0aW9uIiwicGFyZW50Q3R4IiwiY29udGV4dCIsIl91bm1vdW50IiwicmVwb3NpdGlvbiIsIl9jaGlsZENvbnRleHQiLCJ2YWx1ZSIsInN0YXRlIiwibmV4dFByb3BzIiwibmV4dFN0YXRlIiwiYW5jaG9yIiwib3B0aW9ucyIsInByZXZQcm9wcyIsInByZXZTdGF0ZSIsIl9tb3VudFBvcnRhbEVsIiwiZW5kIiwic2V0U3RhdGUiLCJmbG9hdCIsImZsb2F0UG9ydGFsIiwiX2dldE9yQ3JlYXRlUG9ydGFsRWwiLCJfc2V0QW5jaG9yUmVmIiwibm9kZSIsInBhcmVudE5vZGUiLCJDb21wb25lbnQiLCJQcm9wVHlwZXMiLCJmdW5jIiwiaXNSZXF1aXJlZCIsIm9iamVjdCIsIm9uZU9mVHlwZSIsIm51bWJlciIsInN0cmluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQUVBOztBQUVBLElBQU1BLHFCQUFxQixHQUFHQyxNQUFNLENBQUNELHFCQUFQLElBQWlDLFVBQUFFLEVBQUU7QUFBQSxTQUFJQyxPQUFPLENBQUNDLE9BQVIsR0FBa0JDLElBQWxCLENBQXVCSCxFQUF2QixDQUFKO0FBQUEsQ0FBakU7O0FBZUE7QUFDQTtBQUNBLElBQU1JLGtCQUFrQixHQUFHQyxrQkFBTUMsYUFBTixDQUE2QyxJQUE3QyxDQUEzQjs7SUFnQnFCQyxXOzs7Ozs7Ozs7Ozs7Ozs7Ozs4RkFZSjtBQUNiQyxNQUFBQSxNQUFNLEVBQUUsSUFESztBQUViQyxNQUFBQSxTQUFTLEVBQUU7QUFGRSxLOzt1R0FNYSwyQjtpR0FDTiwyQjtzR0FDTjtBQUNkQyxNQUFBQSxnQkFBZ0IsRUFBRywyQkFETDtBQUVkQyxNQUFBQSxxQkFBcUIsRUFBRSxLQUZUO0FBR2RDLE1BQUFBLHFCQUFxQixFQUFHO0FBSFYsSzttR0FNVyxJO3NHQVFYLFVBQUNDLFNBQUQsRUFBNkI7QUFDM0MsWUFBS0MsVUFBTCxHQUFrQkQsU0FBbEI7QUFFQSxVQUFNRSxRQUFRLEdBQUcsTUFBS0MsU0FBdEI7O0FBQ0EsVUFBSUQsUUFBSixFQUFjO0FBQ1hBLFFBQUFBLFFBQUQsQ0FBZ0JFLFNBQWhCLEdBQTRCSixTQUFTLEdBQUdBLFNBQUgsR0FBZUssU0FBcEQ7QUFDRDtBQUNGLEs7dUdBeUpnQixZQUFNO0FBQ3JCLFVBQU1ILFFBQVEsR0FBRyxNQUFLQyxTQUF0QjtBQUNBOztBQUNBLFVBQUlELFFBQVEsQ0FBQ0ksYUFBYixFQUE0QjtBQUMxQixjQUFNLElBQUlDLEtBQUosQ0FBVSw2Q0FBVixDQUFOO0FBQ0Q7O0FBRUQsVUFBTVAsU0FBUyxHQUFHLE1BQUtDLFVBQXZCO0FBQ0EsVUFBSSxDQUFDRCxTQUFMLEVBQWdCLE1BQU0sSUFBSU8sS0FBSixDQUFVLDRDQUFWLENBQU47QUFDZkwsTUFBQUEsUUFBRCxDQUFnQkUsU0FBaEIsR0FBNEJKLFNBQTVCO0FBRUEsVUFBTVEsTUFBTSxHQUFHLE1BQUtDLEtBQUwsQ0FBV0gsYUFBWCxJQUE0QkksUUFBUSxDQUFDQyxJQUFyQyxJQUE2Q0QsUUFBUSxDQUFDRSxlQUFyRTtBQUNBOztBQUNBSixNQUFBQSxNQUFNLENBQUNLLFdBQVAsQ0FBbUJYLFFBQW5COztBQUVBWSx3QkFBTUMsS0FBTixDQUFZLENBQ1ZELGtCQUFNRSxVQUFOLENBQWlCQyxNQUFqQixFQUF5QixRQUF6QixDQURVLEVBRVYsdUNBQXNCQSxNQUF0QixFQUE4QixRQUE5QixFQUF3QztBQUN0Q0MsUUFBQUEsT0FBTyxFQUFFLElBRDZCO0FBRXRDQyxRQUFBQSxPQUFPLEVBQUU7QUFGNkIsT0FBeEMsRUFHR0MsTUFISCxDQUdVLFVBQUFDLEtBQUssRUFBSTtBQUNqQixZQUFNckIsU0FBUyxHQUFHLE1BQUtDLFVBQXZCO0FBQ0EsZUFBT0QsU0FBUyxJQUFJcUIsS0FBSyxDQUFDYixNQUFOLENBQWFjLFFBQWIsQ0FBc0J0QixTQUF0QixDQUFwQjtBQUNELE9BTkQsQ0FGVSxDQUFaLEVBVUd1QixXQVZILENBVWUsTUFBS0MsY0FWcEIsRUFXR0MsT0FYSCxDQVdXLFlBQU07QUFDYixjQUFLQyxlQUFMO0FBQ0QsT0FiSCxFQWNHQyxLQWRILENBY1MsWUFBTTtBQUNWekIsUUFBQUEsUUFBRCxDQUFnQkUsU0FBaEIsR0FBNEJDLFNBQTVCO0FBQ0E7O0FBQ0FILFFBQUFBLFFBQVEsQ0FBQ0ksYUFBVCxDQUF1QnNCLFdBQXZCLENBQW1DMUIsUUFBbkM7QUFDRCxPQWxCSDtBQW1CRCxLOzs7Ozs7MkNBekxtQztBQUNsQyxVQUFNMkIsbUJBQW1CLEdBQUcsS0FBSzFCLFNBQWpDOztBQUNBLFVBQUkwQixtQkFBSixFQUF5QjtBQUN2QixlQUFPQSxtQkFBUDtBQUNEOztBQUVELFVBQU0zQixRQUFRLEdBQUcsS0FBS0MsU0FBTCxHQUFpQk8sUUFBUSxDQUFDb0IsYUFBVCxDQUF1QixLQUF2QixDQUFsQztBQUNBNUIsTUFBQUEsUUFBUSxDQUFDNkIsU0FBVCxHQUFxQixLQUFLdEIsS0FBTCxDQUFXdUIsdUJBQVgsSUFBc0MsRUFBM0Q7QUFDQTlCLE1BQUFBLFFBQVEsQ0FBQytCLEtBQVQsQ0FBZUMsTUFBZixHQUF3QkMsTUFBTSxDQUFDLEtBQUsxQixLQUFMLENBQVd5QixNQUFaLENBQTlCO0FBQ0FoQyxNQUFBQSxRQUFRLENBQUMrQixLQUFULENBQWVHLFFBQWYsR0FBMEIsT0FBMUI7QUFFQSxhQUFPbEMsUUFBUDtBQUNEOzs7d0NBRW1CO0FBQUE7O0FBQ2xCLFVBQU1tQyxTQUFrQyxHQUFHLEtBQUtDLE9BQWhEOztBQUNBLFVBQUlELFNBQUosRUFBZTtBQUNiQSxRQUFBQSxTQUFTLENBQUN4QyxnQkFBVixDQUNHMEIsV0FESCxDQUNlLEtBQUtnQixRQURwQixFQUVHZCxPQUZILENBRVc7QUFBQSxpQkFBTSxNQUFJLENBQUNlLFVBQUwsRUFBTjtBQUFBLFNBRlg7QUFJQUgsUUFBQUEsU0FBUyxDQUFDdEMscUJBQVYsQ0FDR3dCLFdBREgsQ0FDZSxLQUFLZ0IsUUFEcEIsRUFFR2QsT0FGSCxDQUVXLFlBQU07QUFDYixjQUFJLENBQUMsTUFBSSxDQUFDZ0IsYUFBTCxDQUFtQjNDLHFCQUF4QixFQUErQztBQUM3QyxZQUFBLE1BQUksQ0FBQzJDLGFBQUwsQ0FBbUIzQyxxQkFBbkIsR0FBMkMsSUFBM0M7O0FBQ0EsWUFBQSxNQUFJLENBQUMyQyxhQUFMLENBQW1CMUMscUJBQW5CLENBQXlDMkMsS0FBekMsQ0FBK0MsSUFBL0M7QUFDRDtBQUNGLFNBUEg7O0FBU0EsWUFBSUwsU0FBUyxDQUFDdkMscUJBQWQsRUFBcUM7QUFDbkMsZUFBSzJDLGFBQUwsQ0FBbUIzQyxxQkFBbkIsR0FBMkMsSUFBM0M7O0FBQ0EsZUFBSzJDLGFBQUwsQ0FBbUIxQyxxQkFBbkIsQ0FBeUMyQyxLQUF6QyxDQUErQyxJQUEvQztBQUNEO0FBQ0Y7O0FBRUQsVUFBSSxLQUFLQyxLQUFMLENBQVcvQyxTQUFYLElBQXdCLElBQTVCLEVBQWtDO0FBQ2hDO0FBQ0EsYUFBSzhCLGVBQUw7QUFDRDtBQUNGOzs7MENBUXFCa0IsUyxFQUFrQkMsUyxFQUFrQjtBQUN4RDtBQUNBO0FBQ0E7QUFDQSxVQUNFLE9BQU9ELFNBQVMsU0FBaEIsS0FBMkIsVUFBM0IsSUFDQSxLQUFLRCxLQUFMLENBQVdoRCxNQUFYLEtBQXNCa0QsU0FBUyxDQUFDbEQsTUFEaEMsSUFFQSxLQUFLYyxLQUFMLENBQVdxQyxNQUFYLEtBQXNCRixTQUFTLENBQUNFLE1BRmhDLElBR0EsS0FBS3JDLEtBQUwsQ0FBV0gsYUFBWCxLQUE2QnNDLFNBQVMsQ0FBQ3RDLGFBSHZDLElBSUEsS0FBS0csS0FBTCxjQUFxQm1DLFNBQVMsU0FKOUIsSUFLQSxLQUFLbkMsS0FBTCxDQUFXc0MsT0FBWCxLQUF1QkgsU0FBUyxDQUFDRyxPQUxqQyxJQU1BLEtBQUt0QyxLQUFMLENBQVd5QixNQUFYLEtBQXNCVSxTQUFTLENBQUNWLE1BTmhDLElBT0EsS0FBS3pCLEtBQUwsQ0FBV3VCLHVCQUFYLEtBQXVDWSxTQUFTLENBQUNaLHVCQVJuRCxFQVNFO0FBQ0EsZUFBTyxLQUFQO0FBQ0Q7O0FBQ0QsYUFBTyxJQUFQO0FBQ0Q7Ozt1Q0FFa0JnQixTLEVBQWtCQyxTLEVBQWtCO0FBQ3JELFVBQU0vQyxRQUFRLEdBQUcsS0FBS0MsU0FBdEI7O0FBQ0EsVUFBSUQsUUFBSixFQUFjO0FBQ1osWUFBSSxLQUFLeUMsS0FBTCxDQUFXL0MsU0FBWCxJQUF3QixJQUE1QixFQUFrQztBQUNoQyxlQUFLNEIsY0FBTCxDQUFvQmtCLEtBQXBCLENBQTBCLElBQTFCO0FBQ0QsU0FGRCxNQUVPO0FBQ0wsY0FBSU0sU0FBUyxDQUFDMUMsYUFBVixLQUE0QixLQUFLRyxLQUFMLENBQVdILGFBQTNDLEVBQTBEO0FBQ3hELGlCQUFLa0IsY0FBTCxDQUFvQmtCLEtBQXBCLENBQTBCLElBQTFCOztBQUNBLGlCQUFLUSxjQUFMO0FBQ0Q7O0FBQ0QsY0FBSUYsU0FBUyxDQUFDaEIsdUJBQVYsS0FBc0MsS0FBS3ZCLEtBQUwsQ0FBV3VCLHVCQUFyRCxFQUE4RTtBQUM1RTlCLFlBQUFBLFFBQVEsQ0FBQzZCLFNBQVQsR0FBcUIsS0FBS3RCLEtBQUwsQ0FBV3VCLHVCQUFYLElBQXNDLEVBQTNEO0FBQ0Q7O0FBQ0QsY0FBSWdCLFNBQVMsQ0FBQ2QsTUFBVixLQUFxQixLQUFLekIsS0FBTCxDQUFXeUIsTUFBcEMsRUFBNEM7QUFDMUNoQyxZQUFBQSxRQUFRLENBQUMrQixLQUFULENBQWVDLE1BQWYsR0FBd0JDLE1BQU0sQ0FBQyxLQUFLMUIsS0FBTCxDQUFXeUIsTUFBWixDQUE5QjtBQUNELFdBVkksQ0FZTDs7O0FBQ0EsY0FDR2UsU0FBUyxDQUFDckQsU0FBVixLQUF3QixLQUFLK0MsS0FBTCxDQUFXL0MsU0FBbkMsSUFBZ0RxRCxTQUFTLENBQUN0RCxNQUFWLEtBQXFCLEtBQUtnRCxLQUFMLENBQVdoRCxNQUFqRixJQUNBLENBQUMseUJBQVFxRCxTQUFTLENBQUNELE9BQWxCLEVBQTJCLEtBQUt0QyxLQUFMLENBQVdzQyxPQUF0QyxDQUZILEVBR0U7QUFDQSxpQkFBS3JCLGVBQUw7QUFDRDtBQUNGO0FBQ0YsT0F2QkQsTUF1Qk87QUFDTCxZQUFJLEtBQUtpQixLQUFMLENBQVcvQyxTQUFYLElBQXdCLElBQTVCLEVBQWtDO0FBQ2hDLGdCQUFNLElBQUlXLEtBQUosQ0FBVSxzRUFBVixDQUFOO0FBQ0Q7QUFDRjtBQUNGOzs7MkNBRXNCO0FBQ3JCLFdBQUtpQixjQUFMLENBQW9Ca0IsS0FBcEIsQ0FBMEIsSUFBMUI7O0FBQ0EsV0FBS0gsUUFBTCxDQUFjRyxLQUFkLENBQW9CLElBQXBCOztBQUNBLFdBQUtELGFBQUwsQ0FBbUI1QyxnQkFBbkIsQ0FBb0NzRCxHQUFwQzs7QUFDQSxXQUFLVixhQUFMLENBQW1CMUMscUJBQW5CLENBQXlDb0QsR0FBekM7QUFDRCxLLENBRUQ7QUFDQTs7OztzQ0FDa0I7QUFBQTs7QUFDaEI7QUFDQSxVQUFJLEtBQUtWLGFBQUwsQ0FBbUIzQyxxQkFBdkIsRUFBOEM7QUFDNUM7QUFDRDs7QUFDRCxXQUFLMkMsYUFBTCxDQUFtQjNDLHFCQUFuQixHQUEyQyxJQUEzQzs7QUFDQSxXQUFLMkMsYUFBTCxDQUFtQjFDLHFCQUFuQixDQUF5QzJDLEtBQXpDLENBQStDLElBQS9DOztBQUVBekQsTUFBQUEscUJBQXFCLENBQUMsWUFBTTtBQUMxQjtBQUNBO0FBQ0EsWUFBTW9ELFNBQWtDLEdBQUcsTUFBSSxDQUFDQyxPQUFoRDs7QUFDQSxZQUFJLENBQUNELFNBQUQsSUFBYyxDQUFDQSxTQUFTLENBQUN2QyxxQkFBN0IsRUFBb0Q7QUFDbEQ7QUFDQTtBQUNBLGNBQUksTUFBSSxDQUFDMkMsYUFBTCxDQUFtQjNDLHFCQUF2QixFQUE4QztBQUM1QyxZQUFBLE1BQUksQ0FBQzJDLGFBQUwsQ0FBbUIzQyxxQkFBbkIsR0FBMkMsS0FBM0M7O0FBQ0EsWUFBQSxNQUFJLENBQUMwQyxVQUFMO0FBQ0Q7QUFDRjtBQUNGLE9BWm9CLENBQXJCO0FBYUQ7OztpQ0FFWTtBQUNYO0FBQ0EsVUFBTUgsU0FBa0MsR0FBRyxLQUFLQyxPQUFoRDs7QUFDQSxVQUFJLENBQUNELFNBQUQsSUFBYyxDQUFDQSxTQUFTLENBQUN2QyxxQkFBN0IsRUFBb0Q7QUFDbEQsYUFBSzJDLGFBQUwsQ0FBbUIzQyxxQkFBbkIsR0FBMkMsS0FBM0M7QUFDRDs7QUFFRCxVQUFNSSxRQUFRLEdBQUcsS0FBS0MsU0FBdEI7QUFDQSxVQUFNSCxTQUFTLEdBQUcsS0FBS0MsVUFBdkI7O0FBQ0EsVUFBSUMsUUFBUSxJQUFJQSxRQUFRLENBQUNJLGFBQXJCLElBQXNDTixTQUExQyxFQUFxRDtBQUNuRCxZQUFNTCxPQUFNLEdBQUcsaUNBQWdCTyxRQUFoQixFQUEwQkYsU0FBMUIsRUFBcUMsS0FBS1MsS0FBTCxDQUFXc0MsT0FBWCxJQUFzQixFQUEzRCxDQUFmOztBQUNBLFlBQUksQ0FBQyx5QkFBUSxLQUFLSixLQUFMLENBQVdoRCxNQUFuQixFQUEyQkEsT0FBM0IsQ0FBTCxFQUF5QztBQUN2QyxlQUFLeUQsUUFBTCxDQUFjO0FBQUN6RCxZQUFBQSxNQUFNLEVBQU5BO0FBQUQsV0FBZDtBQUNELFNBSmtELENBTW5EOzs7QUFDQSxhQUFLOEMsYUFBTCxDQUFtQjVDLGdCQUFuQixDQUFvQzZDLEtBQXBDLENBQTBDLElBQTFDO0FBQ0Q7QUFDRjs7OzZCQXNDUTtBQUFBLFVBQ0FJLE1BREEsR0FDVSxLQUFLckMsS0FEZixDQUNBcUMsTUFEQTtBQUVQLFVBQU1PLE1BQUssR0FBRyxLQUFLVixLQUFMLENBQVcvQyxTQUF6QjtBQUNBLFVBQUkwRCxXQUFXLEdBQUcsSUFBbEI7O0FBQ0EsVUFBSUQsTUFBSyxJQUFJLElBQWIsRUFBbUI7QUFDakIsWUFBTW5ELFFBQVEsR0FBRyxLQUFLcUQsb0JBQUwsRUFBakI7O0FBQ0FELFFBQUFBLFdBQVcsR0FDVCxnQ0FBQyxrQkFBRCxDQUFvQixRQUFwQjtBQUE2QixVQUFBLEtBQUssRUFBRyxLQUFLYjtBQUExQyxXQUNFLGdDQUFDLDJCQUFEO0FBQWlCLFVBQUEsT0FBTyxFQUFFLEtBQUtTO0FBQS9CLFVBREYsRUFFRyw0QkFBYUcsTUFBYixFQUFvQm5ELFFBQXBCLENBRkgsQ0FERjtBQU1EOztBQUVELGFBQ0Usa0VBQ0c0QyxNQUFNLENBQUUsS0FBS1UsYUFBUCxDQURULEVBRUdGLFdBRkgsQ0FERjtBQU1EOzs7OztzREE5Tm1CRyxJOzs7Ozs7QUFFaEIscUJBQU9BLElBQVA7OztrQkFDUUEsSUFBSSxHQUFJQSxJQUFELENBQVlyRCxTQUFaLElBQTBCcUQsSUFBRCxDQUFZQyxVOzs7Ozs7Ozs7Ozs7Ozs2Q0FzRHhCakQsSyxFQUFja0MsSyxFQUFvQztBQUNoRixhQUFPO0FBQ0wvQyxRQUFBQSxTQUFTLEVBQUUsT0FBT2EsS0FBSyxTQUFaLEtBQXVCLFVBQXZCLEdBQW9DQSxLQUFLLFNBQUwsQ0FBWWtDLEtBQUssQ0FBQ2hELE1BQWxCLENBQXBDLEdBQWdFYyxLQUFLO0FBRDNFLE9BQVA7QUFHRDs7O0VBekZzQ2pCLGtCQUFNbUUsUzs7O2lDQUExQmpFLFcsZUFDQTtBQUNqQm9ELEVBQUFBLE1BQU0sRUFBRWMsc0JBQVVDLElBQVYsQ0FBZUMsVUFETjtBQUVqQnhELEVBQUFBLGFBQWEsRUFBRXNELHNCQUFVRyxNQUZSO0FBR2pCLFdBQU9ILHNCQUFVSSxTQUFWLENBQW9CLENBQUNKLHNCQUFVSCxJQUFYLEVBQWlCRyxzQkFBVUMsSUFBM0IsQ0FBcEIsQ0FIVTtBQUlqQmQsRUFBQUEsT0FBTyxFQUFFYSxzQkFBVUcsTUFKRjtBQUtqQjdCLEVBQUFBLE1BQU0sRUFBRTBCLHNCQUFVSSxTQUFWLENBQW9CLENBQUNKLHNCQUFVSyxNQUFYLEVBQW1CTCxzQkFBVU0sTUFBN0IsQ0FBcEIsQ0FMUztBQU1qQmxDLEVBQUFBLHVCQUF1QixFQUFFNEIsc0JBQVVNO0FBTmxCLEM7aUNBREF4RSxXLGlCQVVFSCxrQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIEBmbG93ICovXG5cbmltcG9ydCBmcm9tRXZlbnRzV2l0aE9wdGlvbnMgZnJvbSAnLi9saWIvZnJvbUV2ZW50c1dpdGhPcHRpb25zJztcbmltcG9ydCBMaWZlY3ljbGVIZWxwZXIgZnJvbSAnLi9MaWZlY3ljbGVIZWxwZXInO1xuaW1wb3J0IEtlZmlyIGZyb20gJ2tlZmlyJztcbmltcG9ydCBrZWZpckJ1cyBmcm9tICdrZWZpci1idXMnO1xuaW1wb3J0IHR5cGUge0J1c30gZnJvbSAna2VmaXItYnVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQge2NyZWF0ZVBvcnRhbH0gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY29udGFpbkJ5U2NyZWVuIGZyb20gJ2NvbnRhaW4tYnktc2NyZWVuJztcbmltcG9ydCB0eXBlIHtPcHRpb25zLCBDaG9pY2V9IGZyb20gJ2NvbnRhaW4tYnktc2NyZWVuJztcbmltcG9ydCBpc0VxdWFsIGZyb20gJ2xvZGFzaC9pc0VxdWFsJztcblxuY29uc3QgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZ2xvYmFsLnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCAoY2IgPT4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihjYikpO1xuXG50eXBlIEZsb2F0QW5jaG9yQ29udGV4dFR5cGUgPSB7XG4gIC8vIEVtaXRzIGFuIGV2ZW50IGFmdGVyIHRoZSBjb21wb25lbnQgcmVwb3NpdGlvbnMsIHNvIHRoZSBjaGlsZHJlbiBjYW4gcmVwb3NpdGlvbiB0aGVtc2VsdmVzIHRvIG1hdGNoLlxuICByZXBvc2l0aW9uRXZlbnRzOiBLZWZpci5PYnNlcnZhYmxlPG51bGw+LFxuXG4gIC8vIFNpZ25pZmllcyB0aGlzIGNvbXBvbmVudCBoYXMgYSByZXBvc2l0aW9uQXN5bmMgcXVldWVkIHVwLiBDaGlsZHJlbiBjb21wb25lbnRzIHNob3VsZCBpZ25vcmUgcmVwb3NpdGlvbkFzeW5jXG4gIC8vIGNhbGxzIHdoaWxlIHRoaXMgaXMgdHJ1ZS4gQ2hpbGRyZW4gc2hvdWxkIGNvcHkgdGhlaXIgcGFyZW50IHdoZW5ldmVyIHRoZWlyIHBhcmVudCBzZXRzIHRoZWlycyB0byB0cnVlLlxuICAvLyBDb21wb25lbnRzIHNob3VsZCBjbGVhciB0aGlzIGZsYWcgd2hlbiB0aGV5IHJlcG9zaXRpb24gdW5sZXNzIHRoZXkgaGF2ZSBhIHBhcmVudCB3aXRoIGl0IHN0aWxsIHNldC5cbiAgcmVwb3NpdGlvbkFzeW5jUXVldWVkOiBib29sZWFuLFxuXG4gIC8vIEVtaXRzIGV2ZXJ5IHRpbWUgcmVwb3NpdGlvbkFzeW5jUXVldWVkIGJlY29tZXMgdHJ1ZS5cbiAgcmVwb3NpdGlvbkFzeW5jRXZlbnRzOiBLZWZpci5PYnNlcnZhYmxlPG51bGw+XG59O1xuXG4vLyBDb250ZXh0IGlzIHVzZWQgc28gdGhhdCB3aGVuIGEgRmxvYXRBbmNob3IgaGFzIHJlcG9zaXRpb24oKSBjYWxsZWQgb24gaXQsXG4vLyBhbGwgb2YgaXRzIGRlc2NlbmRhbnQgRmxvYXRBbmNob3IgZWxlbWVudHMgcmVwb3NpdGlvbiB0b28uXG5jb25zdCBGbG9hdEFuY2hvckNvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PD9GbG9hdEFuY2hvckNvbnRleHRUeXBlPihudWxsKTtcblxuZXhwb3J0IHR5cGUge09wdGlvbnMsIENob2ljZX0gZnJvbSAnY29udGFpbi1ieS1zY3JlZW4nO1xuXG5leHBvcnQgdHlwZSBQcm9wcyA9IHtcbiAgYW5jaG9yOiAoYW5jaG9yUmVmOiBSZWFjdCRSZWY8YW55PikgPT4gUmVhY3QkTm9kZTtcbiAgcGFyZW50RWxlbWVudD86ID9IVE1MRWxlbWVudDtcbiAgZmxvYXQ/OiA/UmVhY3QkTm9kZSB8ICgoY2hvaWNlOiBDaG9pY2UgfCBudWxsKSA9PiBSZWFjdCROb2RlKTtcbiAgb3B0aW9ucz86ID9PcHRpb25zO1xuICB6SW5kZXg/OiA/bnVtYmVyfHN0cmluZztcbiAgZmxvYXRDb250YWluZXJDbGFzc05hbWU/OiA/c3RyaW5nO1xufTtcbnR5cGUgU3RhdGUgPSB7XG4gIGNob2ljZTogQ2hvaWNlIHwgbnVsbDtcbiAgZmxvYXROb2RlOiA/UmVhY3QkTm9kZTtcbn07XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGbG9hdEFuY2hvciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxQcm9wcywgU3RhdGU+IHtcbiAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICBhbmNob3I6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgcGFyZW50RWxlbWVudDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBmbG9hdDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm5vZGUsIFByb3BUeXBlcy5mdW5jXSksXG4gICAgb3B0aW9uczogUHJvcFR5cGVzLm9iamVjdCxcbiAgICB6SW5kZXg6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgICBmbG9hdENvbnRhaW5lckNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZ1xuICB9O1xuXG4gIHN0YXRpYyBjb250ZXh0VHlwZSA9IEZsb2F0QW5jaG9yQ29udGV4dDtcblxuICBzdGF0ZTogU3RhdGUgPSB7XG4gICAgY2hvaWNlOiBudWxsLFxuICAgIGZsb2F0Tm9kZTogbnVsbFxuICB9O1xuXG4gIF9wb3J0YWxFbDogP0hUTUxFbGVtZW50O1xuICBfcG9ydGFsUmVtb3ZhbDogQnVzPG51bGw+ID0ga2VmaXJCdXMoKTtcbiAgX3VubW91bnQ6IEJ1czxudWxsPiA9IGtlZmlyQnVzKCk7XG4gIF9jaGlsZENvbnRleHQgPSB7XG4gICAgcmVwb3NpdGlvbkV2ZW50czogKGtlZmlyQnVzKCk6IEJ1czxudWxsPiksXG4gICAgcmVwb3NpdGlvbkFzeW5jUXVldWVkOiBmYWxzZSxcbiAgICByZXBvc2l0aW9uQXN5bmNFdmVudHM6IChrZWZpckJ1cygpOiBCdXM8bnVsbD4pXG4gIH07XG5cbiAgX2FuY2hvclJlZjogP0hUTUxFbGVtZW50ID0gbnVsbDtcblxuICBzdGF0aWMgKnBhcmVudE5vZGVzKG5vZGU6IE5vZGUpOiBJdGVyYXRvcjxOb2RlPiB7XG4gICAgZG8ge1xuICAgICAgeWllbGQgKG5vZGU6IE5vZGUpO1xuICAgIH0gd2hpbGUgKChub2RlID0gKG5vZGU6IGFueSkucmZhQW5jaG9yIHx8IChub2RlOiBhbnkpLnBhcmVudE5vZGUpKTtcbiAgfVxuXG4gIF9zZXRBbmNob3JSZWYgPSAoYW5jaG9yUmVmOiA/SFRNTEVsZW1lbnQpID0+IHtcbiAgICB0aGlzLl9hbmNob3JSZWYgPSBhbmNob3JSZWY7XG5cbiAgICBjb25zdCBwb3J0YWxFbCA9IHRoaXMuX3BvcnRhbEVsO1xuICAgIGlmIChwb3J0YWxFbCkge1xuICAgICAgKHBvcnRhbEVsOiBhbnkpLnJmYUFuY2hvciA9IGFuY2hvclJlZiA/IGFuY2hvclJlZiA6IHVuZGVmaW5lZDtcbiAgICB9XG4gIH07XG5cbiAgX2dldE9yQ3JlYXRlUG9ydGFsRWwoKTogSFRNTEVsZW1lbnQge1xuICAgIGNvbnN0IHBvcnRhbEVsX2ZpcnN0Q2hlY2sgPSB0aGlzLl9wb3J0YWxFbDtcbiAgICBpZiAocG9ydGFsRWxfZmlyc3RDaGVjaykge1xuICAgICAgcmV0dXJuIHBvcnRhbEVsX2ZpcnN0Q2hlY2s7XG4gICAgfVxuXG4gICAgY29uc3QgcG9ydGFsRWwgPSB0aGlzLl9wb3J0YWxFbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHBvcnRhbEVsLmNsYXNzTmFtZSA9IHRoaXMucHJvcHMuZmxvYXRDb250YWluZXJDbGFzc05hbWUgfHwgJyc7XG4gICAgcG9ydGFsRWwuc3R5bGUuekluZGV4ID0gU3RyaW5nKHRoaXMucHJvcHMuekluZGV4KTtcbiAgICBwb3J0YWxFbC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7XG5cbiAgICByZXR1cm4gcG9ydGFsRWw7XG4gIH1cblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBjb25zdCBwYXJlbnRDdHg6ID9GbG9hdEFuY2hvckNvbnRleHRUeXBlID0gdGhpcy5jb250ZXh0O1xuICAgIGlmIChwYXJlbnRDdHgpIHtcbiAgICAgIHBhcmVudEN0eC5yZXBvc2l0aW9uRXZlbnRzXG4gICAgICAgIC50YWtlVW50aWxCeSh0aGlzLl91bm1vdW50KVxuICAgICAgICAub25WYWx1ZSgoKSA9PiB0aGlzLnJlcG9zaXRpb24oKSk7XG5cbiAgICAgIHBhcmVudEN0eC5yZXBvc2l0aW9uQXN5bmNFdmVudHNcbiAgICAgICAgLnRha2VVbnRpbEJ5KHRoaXMuX3VubW91bnQpXG4gICAgICAgIC5vblZhbHVlKCgpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMuX2NoaWxkQ29udGV4dC5yZXBvc2l0aW9uQXN5bmNRdWV1ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoaWxkQ29udGV4dC5yZXBvc2l0aW9uQXN5bmNRdWV1ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5fY2hpbGRDb250ZXh0LnJlcG9zaXRpb25Bc3luY0V2ZW50cy52YWx1ZShudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICBpZiAocGFyZW50Q3R4LnJlcG9zaXRpb25Bc3luY1F1ZXVlZCkge1xuICAgICAgICB0aGlzLl9jaGlsZENvbnRleHQucmVwb3NpdGlvbkFzeW5jUXVldWVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hpbGRDb250ZXh0LnJlcG9zaXRpb25Bc3luY0V2ZW50cy52YWx1ZShudWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5zdGF0ZS5mbG9hdE5vZGUgIT0gbnVsbCkge1xuICAgICAgLy8gV2UgbmVlZCB0byByZXBvc2l0aW9uIGFmdGVyIHRoZSBwYWdlIGhhcyBoYWQgaXRzIGxheW91dCBkb25lLlxuICAgICAgdGhpcy5yZXBvc2l0aW9uQXN5bmMoKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKHByb3BzOiBQcm9wcywgc3RhdGU6IFN0YXRlKTogJFNoYXBlPFN0YXRlPiB8IG51bGwge1xuICAgIHJldHVybiB7XG4gICAgICBmbG9hdE5vZGU6IHR5cGVvZiBwcm9wcy5mbG9hdCA9PT0gJ2Z1bmN0aW9uJyA/IHByb3BzLmZsb2F0KHN0YXRlLmNob2ljZSkgOiBwcm9wcy5mbG9hdFxuICAgIH07XG4gIH1cblxuICBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzOiBQcm9wcywgbmV4dFN0YXRlOiBTdGF0ZSkge1xuICAgIC8vIElmIHRoZSBvbmx5IHRoaW5nIGNoYW5nZWQgaXMgc3RhdGUuY2hvaWNlICphbmQqIHR5cGVvZiBwcm9wcy5mbG9hdCAhPT0gJ2Z1bmN0aW9uJywgZG9uJ3QgcmUtcmVuZGVyLlxuICAgIC8vIElmIG5vdGhpbmcgaGFzIGNoYW5nZWQsIGFsbG93IHRoZSByZS1yZW5kZXIgc28gd2Uga2VlcCB0aGUgc2FtZSBiZWhhdmlvciBvbiBhIHBsYWluIGZvcmNlVXBkYXRlIG9mIGEgcGFyZW50LlxuICAgIC8vIFRPRE8gaW4gbmV4dCBtYWpvciB2ZXJzaW9uLCBkb24ndCByZS1yZW5kZXIgd2hlbiBub3RoaW5nIGhhcyBjaGFuZ2VkLlxuICAgIGlmIChcbiAgICAgIHR5cGVvZiBuZXh0UHJvcHMuZmxvYXQgIT09ICdmdW5jdGlvbicgJiZcbiAgICAgIHRoaXMuc3RhdGUuY2hvaWNlICE9PSBuZXh0U3RhdGUuY2hvaWNlICYmXG4gICAgICB0aGlzLnByb3BzLmFuY2hvciA9PT0gbmV4dFByb3BzLmFuY2hvciAmJlxuICAgICAgdGhpcy5wcm9wcy5wYXJlbnRFbGVtZW50ID09PSBuZXh0UHJvcHMucGFyZW50RWxlbWVudCAmJlxuICAgICAgdGhpcy5wcm9wcy5mbG9hdCA9PT0gbmV4dFByb3BzLmZsb2F0ICYmXG4gICAgICB0aGlzLnByb3BzLm9wdGlvbnMgPT09IG5leHRQcm9wcy5vcHRpb25zICYmXG4gICAgICB0aGlzLnByb3BzLnpJbmRleCA9PT0gbmV4dFByb3BzLnpJbmRleCAmJlxuICAgICAgdGhpcy5wcm9wcy5mbG9hdENvbnRhaW5lckNsYXNzTmFtZSA9PT0gbmV4dFByb3BzLmZsb2F0Q29udGFpbmVyQ2xhc3NOYW1lXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wczogUHJvcHMsIHByZXZTdGF0ZTogU3RhdGUpIHtcbiAgICBjb25zdCBwb3J0YWxFbCA9IHRoaXMuX3BvcnRhbEVsO1xuICAgIGlmIChwb3J0YWxFbCkge1xuICAgICAgaWYgKHRoaXMuc3RhdGUuZmxvYXROb2RlID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5fcG9ydGFsUmVtb3ZhbC52YWx1ZShudWxsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwcmV2UHJvcHMucGFyZW50RWxlbWVudCAhPT0gdGhpcy5wcm9wcy5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgdGhpcy5fcG9ydGFsUmVtb3ZhbC52YWx1ZShudWxsKTtcbiAgICAgICAgICB0aGlzLl9tb3VudFBvcnRhbEVsKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZQcm9wcy5mbG9hdENvbnRhaW5lckNsYXNzTmFtZSAhPT0gdGhpcy5wcm9wcy5mbG9hdENvbnRhaW5lckNsYXNzTmFtZSkge1xuICAgICAgICAgIHBvcnRhbEVsLmNsYXNzTmFtZSA9IHRoaXMucHJvcHMuZmxvYXRDb250YWluZXJDbGFzc05hbWUgfHwgJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByZXZQcm9wcy56SW5kZXggIT09IHRoaXMucHJvcHMuekluZGV4KSB7XG4gICAgICAgICAgcG9ydGFsRWwuc3R5bGUuekluZGV4ID0gU3RyaW5nKHRoaXMucHJvcHMuekluZGV4KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHRoaXMgcmUtcmVuZGVyIGhhcHBlbmVkIGJlY2F1c2Ugb2YgYSBjaGFuZ2UgaW4gcG9zaXRpb24gY2hvaWNlLCBkb24ndCByZXBvc2l0aW9uIGFnYWluIG5vdy5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIChwcmV2U3RhdGUuZmxvYXROb2RlICE9PSB0aGlzLnN0YXRlLmZsb2F0Tm9kZSAmJiBwcmV2U3RhdGUuY2hvaWNlID09PSB0aGlzLnN0YXRlLmNob2ljZSkgfHxcbiAgICAgICAgICAhaXNFcXVhbChwcmV2UHJvcHMub3B0aW9ucywgdGhpcy5wcm9wcy5vcHRpb25zKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGlzLnJlcG9zaXRpb25Bc3luYygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnN0YXRlLmZsb2F0Tm9kZSAhPSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2hvdWxkIG5vdCBoYXBwZW46IHBvcnRhbEVsIHdhcyBudWxsIGFmdGVyIHJlbmRlcmluZyB3aXRoIGZsb2F0IHByb3AnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLl9wb3J0YWxSZW1vdmFsLnZhbHVlKG51bGwpO1xuICAgIHRoaXMuX3VubW91bnQudmFsdWUobnVsbCk7XG4gICAgdGhpcy5fY2hpbGRDb250ZXh0LnJlcG9zaXRpb25FdmVudHMuZW5kKCk7XG4gICAgdGhpcy5fY2hpbGRDb250ZXh0LnJlcG9zaXRpb25Bc3luY0V2ZW50cy5lbmQoKTtcbiAgfVxuXG4gIC8vIFJlcG9zaXRpb25zIG9uIHRoZSBuZXh0IGFuaW1hdGlvbiBmcmFtZS4gQXV0b21hdGljYWxseSBiYXRjaGVzIHdpdGggb3RoZXIgcmVwb3NpdGlvbkFzeW5jIGNhbGxzXG4gIC8vIGluIHRoZSBzYW1lIHRyZWUuXG4gIHJlcG9zaXRpb25Bc3luYygpIHtcbiAgICAvLyBJZiB3ZSBhbHJlYWR5IGhhdmUgYSByZXBvc2l0aW9uQXN5bmMgcXVldWVkIHVwLCB0aGVyZSdzIG5vIHJlYXNvbiB0byBxdWV1ZSBhbm90aGVyLlxuICAgIGlmICh0aGlzLl9jaGlsZENvbnRleHQucmVwb3NpdGlvbkFzeW5jUXVldWVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NoaWxkQ29udGV4dC5yZXBvc2l0aW9uQXN5bmNRdWV1ZWQgPSB0cnVlO1xuICAgIHRoaXMuX2NoaWxkQ29udGV4dC5yZXBvc2l0aW9uQXN5bmNFdmVudHMudmFsdWUobnVsbCk7XG5cbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgLy8gSWYgb3VyIHBhcmVudCBzdGlsbCBoYXMgYSByZXBvc2l0aW9uQXN5bmMgcXVldWVkIHVwLCB0aGVuIGRvbid0IGZpcmUuXG4gICAgICAvLyBUaGUgcGFyZW50IG1heSBoYXZlIHF1ZXVlZCB1cCBhIHJlcG9zaXRpb25Bc3luYyBpbiB0aGUgdGltZSBzaW5jZSB0aGlzIHJlcG9zaXRpb25Bc3luYygpIHdhcyBjYWxsZWQuXG4gICAgICBjb25zdCBwYXJlbnRDdHg6ID9GbG9hdEFuY2hvckNvbnRleHRUeXBlID0gdGhpcy5jb250ZXh0O1xuICAgICAgaWYgKCFwYXJlbnRDdHggfHwgIXBhcmVudEN0eC5yZXBvc2l0aW9uQXN5bmNRdWV1ZWQpIHtcbiAgICAgICAgLy8gTWFrZSBzdXJlIHdlIHN0aWxsIGhhdmUgYSByZXBvc2l0aW9uQXN5bmMgcXVldWVkIHVwLiBJdCBjb3VsZCBiZSB0aGF0IHJlcG9zaXRpb24oKSBoYXMgYmVlbiBjYWxsZWRcbiAgICAgICAgLy8gaW4gdGhlIHRpbWUgc2luY2UgcmVwb3NpdGlvbkFzeW5jKCkuXG4gICAgICAgIGlmICh0aGlzLl9jaGlsZENvbnRleHQucmVwb3NpdGlvbkFzeW5jUXVldWVkKSB7XG4gICAgICAgICAgdGhpcy5fY2hpbGRDb250ZXh0LnJlcG9zaXRpb25Bc3luY1F1ZXVlZCA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMucmVwb3NpdGlvbigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXBvc2l0aW9uKCkge1xuICAgIC8vIE9ubHkgY2xlYXIgb3VyIHJlcG9zaXRpb25Bc3luY1F1ZXVlZCBmbGFnIGlmIHdlJ3JlIG5vdCByZWZsZWN0aW5nIG91ciBwYXJlbnQncyB0cnVlIHZhbHVlLlxuICAgIGNvbnN0IHBhcmVudEN0eDogP0Zsb2F0QW5jaG9yQ29udGV4dFR5cGUgPSB0aGlzLmNvbnRleHQ7XG4gICAgaWYgKCFwYXJlbnRDdHggfHwgIXBhcmVudEN0eC5yZXBvc2l0aW9uQXN5bmNRdWV1ZWQpIHtcbiAgICAgIHRoaXMuX2NoaWxkQ29udGV4dC5yZXBvc2l0aW9uQXN5bmNRdWV1ZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBwb3J0YWxFbCA9IHRoaXMuX3BvcnRhbEVsO1xuICAgIGNvbnN0IGFuY2hvclJlZiA9IHRoaXMuX2FuY2hvclJlZjtcbiAgICBpZiAocG9ydGFsRWwgJiYgcG9ydGFsRWwucGFyZW50RWxlbWVudCAmJiBhbmNob3JSZWYpIHtcbiAgICAgIGNvbnN0IGNob2ljZSA9IGNvbnRhaW5CeVNjcmVlbihwb3J0YWxFbCwgYW5jaG9yUmVmLCB0aGlzLnByb3BzLm9wdGlvbnMgfHwge30pO1xuICAgICAgaWYgKCFpc0VxdWFsKHRoaXMuc3RhdGUuY2hvaWNlLCBjaG9pY2UpKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2Nob2ljZX0pO1xuICAgICAgfVxuXG4gICAgICAvLyBNYWtlIGFueSBjaGlsZCBGbG9hdEFuY2hvcnMgcmVwb3NpdGlvblxuICAgICAgdGhpcy5fY2hpbGRDb250ZXh0LnJlcG9zaXRpb25FdmVudHMudmFsdWUobnVsbCk7XG4gICAgfVxuICB9XG5cbiAgX21vdW50UG9ydGFsRWwgPSAoKSA9PiB7XG4gICAgY29uc3QgcG9ydGFsRWwgPSB0aGlzLl9wb3J0YWxFbDtcbiAgICAvKjo6IGlmICghcG9ydGFsRWwpIHRocm93IG5ldyBFcnJvcigpOyAqL1xuICAgIGlmIChwb3J0YWxFbC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Nob3VsZCBub3QgaGFwcGVuOiBwb3J0YWxFbCBhbHJlYWR5IGluIHBhZ2UnKTtcbiAgICB9XG5cbiAgICBjb25zdCBhbmNob3JSZWYgPSB0aGlzLl9hbmNob3JSZWY7XG4gICAgaWYgKCFhbmNob3JSZWYpIHRocm93IG5ldyBFcnJvcignUmVhY3RGbG9hdEFuY2hvciBtaXNzaW5nIGFuY2hvclJlZiBlbGVtZW50Jyk7XG4gICAgKHBvcnRhbEVsOiBhbnkpLnJmYUFuY2hvciA9IGFuY2hvclJlZjtcblxuICAgIGNvbnN0IHRhcmdldCA9IHRoaXMucHJvcHMucGFyZW50RWxlbWVudCB8fCBkb2N1bWVudC5ib2R5IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAvKjo6IGlmICghdGFyZ2V0KSB0aHJvdyBuZXcgRXJyb3IoKTsgKi9cbiAgICB0YXJnZXQuYXBwZW5kQ2hpbGQocG9ydGFsRWwpO1xuXG4gICAgS2VmaXIubWVyZ2UoW1xuICAgICAgS2VmaXIuZnJvbUV2ZW50cyh3aW5kb3csICdyZXNpemUnKSxcbiAgICAgIGZyb21FdmVudHNXaXRoT3B0aW9ucyh3aW5kb3csICdzY3JvbGwnLCB7XG4gICAgICAgIGNhcHR1cmU6IHRydWUsXG4gICAgICAgIHBhc3NpdmU6IHRydWVcbiAgICAgIH0pLmZpbHRlcihldmVudCA9PiB7XG4gICAgICAgIGNvbnN0IGFuY2hvclJlZiA9IHRoaXMuX2FuY2hvclJlZjtcbiAgICAgICAgcmV0dXJuIGFuY2hvclJlZiAmJiBldmVudC50YXJnZXQuY29udGFpbnMoYW5jaG9yUmVmKTtcbiAgICAgIH0pXG4gICAgXSlcbiAgICAgIC50YWtlVW50aWxCeSh0aGlzLl9wb3J0YWxSZW1vdmFsKVxuICAgICAgLm9uVmFsdWUoKCkgPT4ge1xuICAgICAgICB0aGlzLnJlcG9zaXRpb25Bc3luYygpO1xuICAgICAgfSlcbiAgICAgIC5vbkVuZCgoKSA9PiB7XG4gICAgICAgIChwb3J0YWxFbDogYW55KS5yZmFBbmNob3IgPSB1bmRlZmluZWQ7XG4gICAgICAgIC8qOjogaWYgKCFwb3J0YWxFbC5wYXJlbnRFbGVtZW50KSB0aHJvdyBuZXcgRXJyb3IoKTsgKi9cbiAgICAgICAgcG9ydGFsRWwucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChwb3J0YWxFbCk7XG4gICAgICB9KTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge2FuY2hvcn0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IGZsb2F0ID0gdGhpcy5zdGF0ZS5mbG9hdE5vZGU7XG4gICAgbGV0IGZsb2F0UG9ydGFsID0gbnVsbDtcbiAgICBpZiAoZmxvYXQgIT0gbnVsbCkge1xuICAgICAgY29uc3QgcG9ydGFsRWwgPSB0aGlzLl9nZXRPckNyZWF0ZVBvcnRhbEVsKCk7XG4gICAgICBmbG9hdFBvcnRhbCA9IChcbiAgICAgICAgPEZsb2F0QW5jaG9yQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17KHRoaXMuX2NoaWxkQ29udGV4dDogRmxvYXRBbmNob3JDb250ZXh0VHlwZSl9PlxuICAgICAgICAgIDxMaWZlY3ljbGVIZWxwZXIgb25Nb3VudD17dGhpcy5fbW91bnRQb3J0YWxFbH0gLz5cbiAgICAgICAgICB7Y3JlYXRlUG9ydGFsKGZsb2F0LCBwb3J0YWxFbCl9XG4gICAgICAgIDwvRmxvYXRBbmNob3JDb250ZXh0LlByb3ZpZGVyPlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPD5cbiAgICAgICAge2FuY2hvcigodGhpcy5fc2V0QW5jaG9yUmVmOiBhbnkpKX1cbiAgICAgICAge2Zsb2F0UG9ydGFsfVxuICAgICAgPC8+XG4gICAgKTtcbiAgfVxufVxuIl19 |
{ | ||
"name": "react-float-anchor", | ||
"version": "3.2.0", | ||
"version": "3.3.0", | ||
"description": "React component for positioning an element aligned to another", | ||
@@ -5,0 +5,0 @@ "main": "js/index.js", |
@@ -35,10 +35,15 @@ # react-float-anchor | ||
`FloatAnchor` element was used, with no added wrapper elements around it. | ||
* `float` must be null, or a React node. If null, then FloatAnchor won't do | ||
anything other than render `anchor` as-is. If non-null, `float` will be | ||
rendered in a container div which has `position:fixed` styling, is attached | ||
directly to the document body (or parentElement), and is positioned to line up | ||
with the anchorRef element. | ||
* `float` must be null, a React node, or a function that returns a React node. | ||
If null, then FloatAnchor won't do anything other than render `anchor` as-is. | ||
If non-null, the `float` React node will be rendered in a container div which | ||
has `position:fixed` styling, is attached directly to the document body (or | ||
parentElement), and is positioned to line up with the anchorRef element. | ||
If `float` is a function, then the function will receive the return value from | ||
the most recent call to [contain-by-screen](https://github.com/Macil/contain-by-screen), | ||
or null if it hasn't been called yet. The initial render will pass null, and | ||
then the component will be re-rendered after having been positioned by | ||
contain-by-screen. | ||
* `options` is an optional object of options to control how the float element's | ||
container is aligned to the anchor element. The options are the same as those | ||
supported by [contain-by-screen (version ^1.0)](https://github.com/AgentME/contain-by-screen#readme). | ||
supported by [contain-by-screen (version ^1.0)](https://github.com/Macil/contain-by-screen#readme). | ||
* `zIndex` is an optional number controlling the z-index CSS property of the | ||
@@ -45,0 +50,0 @@ float element's container. |
Sorry, the diff of this file is not supported yet
65318
351
86