adui
Version:
<div> <img src="https://wxa.wxs.qq.com/mpweb/delivery/legacy/wxadtouch/upload/t1/od834zef_52939fc6.png" style="margin:40px 0 0 -8px; background-color: #fcfcfc; box-shadow: none;" /> </div>
321 lines (258 loc) • 46 kB
JavaScript
;
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = _interopRequireWildcard(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _classnames = _interopRequireDefault(require("classnames"));
var _popTrigger = _interopRequireDefault(require("../pop-trigger"));
var _configProvider = require("../config-provider");
var _placements = _interopRequireDefault(require("./placements"));
var _Popup = _interopRequireDefault(require("./Popup"));
require("./style");
var _motion = require("../_util/motion");
var _excluded = ["alignEdge", "autoAdjustPlacement", "children", "defaultVisible", "getPopupContainer", "onVisibleChange", "placement", "popup", "popupClassName", "popupStyle", "popupTransitionName", "trigger", "visible"];
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
var prefix = "adui-tooltip";
var Tooltip = (0, _react.forwardRef)(function (_ref, ref) {
var alignEdge = _ref.alignEdge,
autoAdjustPlacement = _ref.autoAdjustPlacement,
children = _ref.children,
defaultVisible = _ref.defaultVisible,
getPopupContainer = _ref.getPopupContainer,
onVisibleChange = _ref.onVisibleChange,
placementProp = _ref.placement,
popup = _ref.popup,
popupClassName = _ref.popupClassName,
popupStyle = _ref.popupStyle,
popupTransitionName = _ref.popupTransitionName,
trigger = _ref.trigger,
visibleProp = _ref.visible,
otherProps = _objectWithoutProperties(_ref, _excluded);
var triggerRef = (0, _react.useRef)();
var _useState = (0, _react.useState)(placementProp || "bottom"),
_useState2 = _slicedToArray(_useState, 2),
placement = _useState2[0],
setPlacement = _useState2[1];
var _useState3 = (0, _react.useState)(visibleProp),
_useState4 = _slicedToArray(_useState3, 2),
visible = _useState4[0],
setVisible = _useState4[1];
var _useState5 = (0, _react.useState)(popupTransitionName),
_useState6 = _slicedToArray(_useState5, 2),
motionName = _useState6[0],
setMotionName = _useState6[1];
(0, _react.useImperativeHandle)(ref, function () {
return {
current: triggerRef.current
};
});
if (visibleProp !== null && visible !== visibleProp) {
setVisible(!!visibleProp);
}
var _useContext = (0, _react.useContext)(_configProvider.ConfigContext),
getPopupContainerContext = _useContext.getPopupContainer;
var getPopupStyle = function getPopupStyle() {
var transformOrigin = {
x: "50%",
y: "50%"
};
var extraStyle = {};
if (popupStyle) {
if (placement.indexOf("top") === 0) {
transformOrigin.y = "100%";
if (typeof popupStyle.paddingBottom === "undefined" && typeof popupStyle.padding === "undefined") {
extraStyle.paddingBottom = "12px";
}
} else if (placement.indexOf("bottom") === 0) {
transformOrigin.y = "-6px";
if (typeof popupStyle.paddingTop === "undefined" && typeof popupStyle.padding === "undefined") {
extraStyle.paddingTop = "12px";
}
} else if (placement.indexOf("right") === 0) {
transformOrigin.x = "0%";
if (typeof popupStyle.paddingLeft === "undefined" && typeof popupStyle.padding === "undefined") {
extraStyle.paddingLeft = "12px";
}
} else if (placement.indexOf("left") === 0) {
transformOrigin.x = "100%";
if (typeof popupStyle.paddingRight === "undefined" && typeof popupStyle.padding === "undefined") {
extraStyle.paddingRight = "12px";
}
}
if (placement.includes("Left")) {
transformOrigin.x = "18px";
} else if (placement.includes("Right")) {
transformOrigin.x = "calc(100% - 18px)";
} else if (placement.includes("Top")) {
transformOrigin.y = "10px";
} else if (placement.includes("Bottom")) {
transformOrigin.y = "calc(100% - 10px)";
}
extraStyle.transformOrigin = "".concat(transformOrigin.x, " ").concat(transformOrigin.y);
}
return _objectSpread(_objectSpread({}, extraStyle), popupStyle);
};
var handlePopupAlign = function handlePopupAlign(node) {
if (!autoAdjustPlacement) {
return;
}
var rect = node.getBoundingClientRect();
var width = rect.width,
height = rect.height,
Y = rect.top,
X = rect.left;
var newPlacement = placement;
if (width * height > _motion.BOUNCE_SIZE) {
if (motionName === "zoom-big") {
setMotionName("zoom-big-bounce");
} else if (motionName === "slide-up") {
setMotionName("slide-up-bounce");
}
}
setTimeout(function () {
if (triggerRef.current && triggerRef.current.getRootDomNode && placementProp) {
var wrapperRect = triggerRef.current.getRootDomNode().getBoundingClientRect();
if (placementProp.indexOf("top") === 0) {
if (Y < 0 && placement.indexOf("top") === 0) {
newPlacement = "bottom".concat(placement.slice(3));
}
if (Y > rect.height + wrapperRect.height + 12 && placement.indexOf("bottom") === 0) {
newPlacement = "top".concat(placement.slice(6));
}
}
if (placementProp.indexOf("bottom") === 0) {
if (Y + height > window.innerHeight && placement.indexOf("bottom") === 0) {
newPlacement = "top".concat(placement.slice(6));
}
if (wrapperRect.top + wrapperRect.height + height + 12 < window.innerHeight && placement.indexOf("top") === 0) {
newPlacement = "bottom".concat(placement.slice(3));
}
}
if (width + X > window.innerWidth) {
if (["topLeft", "top", "bottomLeft", "bottom"].includes(newPlacement)) {
newPlacement = "".concat(newPlacement.replace("Left", ""), "Right");
}
} else if (X < 0) {
if (["topRight", "top", "bottomRight", "bottom"].includes(newPlacement)) {
newPlacement = "".concat(newPlacement.replace("Right", ""), "Left");
}
}
if (node.className.includes("-top")) {
var nodeTop = node.style.top || "0";
node.style.top = "unset";
node.style.bottom = "-".concat(parseInt(nodeTop, 10) + height, "px");
}
if (placementProp.indexOf("left") === 0) {
if (X < 0 && placement.indexOf("left") === 0) {
newPlacement = "right".concat(placement.slice(4));
}
if (X > rect.width + wrapperRect.width + 12 && placement.indexOf("right") === 0) {
newPlacement = "left".concat(placement.slice(5));
}
}
if (placementProp.indexOf("right") === 0) {
if (X + width > window.innerWidth && placement.indexOf("right") === 0) {
newPlacement = "left".concat(placement.slice(5));
}
if (wrapperRect.left + wrapperRect.width + width + 12 < window.innerWidth && placement.indexOf("left") === 0) {
newPlacement = "right".concat(placement.slice(4));
}
}
if (newPlacement !== placement) {
setPlacement(newPlacement);
if (triggerRef.current.forcePopupAlign) {
triggerRef.current.forcePopupAlign();
}
}
}
}, 0);
};
var handleVisibleChange = function handleVisibleChange(bool) {
if (visibleProp === null) {
setVisible(bool);
}
if (onVisibleChange) {
onVisibleChange(bool);
}
};
return _react["default"].createElement(_popTrigger["default"], _extends({
popupClassName: (0, _classnames["default"])(popupClassName, "".concat(prefix, "-base"), "".concat(prefix, "-base-").concat(placement)),
ref: triggerRef,
action: trigger ? [trigger] : ["hover"],
builtinPlacements: (0, _placements["default"])({
alignEdge: alignEdge,
autoAdjustPlacement: autoAdjustPlacement
}),
defaultPopupVisible: defaultVisible,
getPopupContainer: getPopupContainer || getPopupContainerContext,
onPopupVisibleChange: handleVisibleChange,
onPopupAlign: handlePopupAlign,
popup: _react["default"].createElement(_Popup["default"], {
content: popup,
trigger: triggerRef.current
}),
popupPlacement: placement,
popupMotion: {
motionName: motionName,
motionDeadline: 1000
},
popupStyle: getPopupStyle(),
popupVisible: visible
}, otherProps), children);
});
Tooltip.displayName = "Tooltip";
Tooltip.propTypes = {
alignEdge: _propTypes["default"].bool,
autoAdjustPlacement: _propTypes["default"].bool,
children: _propTypes["default"].node,
defaultVisible: _propTypes["default"].oneOf([null, true, false]),
getPopupContainer: _propTypes["default"].func,
mouseEnterDelay: _propTypes["default"].number,
mouseLeaveDelay: _propTypes["default"].number,
onVisibleChange: _propTypes["default"].func,
placement: _propTypes["default"].oneOf(["top", "left", "right", "bottom", "topLeft", "topRight", "bottomLeft", "bottomRight", "leftTop", "leftBottom", "rightTop", "rightBottom"]),
popup: _propTypes["default"].node,
popupClassName: _propTypes["default"].string,
popupStyle: _propTypes["default"].object,
popupTransitionName: _propTypes["default"].string,
trigger: _propTypes["default"].oneOf(["hover", "focus", "click"]),
visible: _propTypes["default"].oneOf([null, true, false])
};
Tooltip.defaultProps = {
alignEdge: false,
autoAdjustPlacement: true,
children: "",
defaultVisible: null,
getPopupContainer: null,
mouseEnterDelay: 0,
mouseLeaveDelay: 0.1,
onVisibleChange: function onVisibleChange() {},
placement: "bottom",
popup: "复制",
popupClassName: "",
popupStyle: {},
popupTransitionName: "zoom-big",
trigger: "hover",
visible: null,
zIndex: "var(--z-index-tooltip)"
};
var _default = Tooltip;
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJwcmVmaXgiLCJUb29sdGlwIiwiZm9yd2FyZFJlZiIsInJlZiIsImFsaWduRWRnZSIsImF1dG9BZGp1c3RQbGFjZW1lbnQiLCJjaGlsZHJlbiIsImRlZmF1bHRWaXNpYmxlIiwiZ2V0UG9wdXBDb250YWluZXIiLCJvblZpc2libGVDaGFuZ2UiLCJwbGFjZW1lbnRQcm9wIiwicGxhY2VtZW50IiwicG9wdXAiLCJwb3B1cENsYXNzTmFtZSIsInBvcHVwU3R5bGUiLCJwb3B1cFRyYW5zaXRpb25OYW1lIiwidHJpZ2dlciIsInZpc2libGVQcm9wIiwidmlzaWJsZSIsIm90aGVyUHJvcHMiLCJ0cmlnZ2VyUmVmIiwidXNlUmVmIiwidXNlU3RhdGUiLCJzZXRQbGFjZW1lbnQiLCJzZXRWaXNpYmxlIiwibW90aW9uTmFtZSIsInNldE1vdGlvbk5hbWUiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwiY3VycmVudCIsInVzZUNvbnRleHQiLCJDb25maWdDb250ZXh0IiwiZ2V0UG9wdXBDb250YWluZXJDb250ZXh0IiwiZ2V0UG9wdXBTdHlsZSIsInRyYW5zZm9ybU9yaWdpbiIsIngiLCJ5IiwiZXh0cmFTdHlsZSIsImluZGV4T2YiLCJwYWRkaW5nQm90dG9tIiwicGFkZGluZyIsInBhZGRpbmdUb3AiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsImluY2x1ZGVzIiwiaGFuZGxlUG9wdXBBbGlnbiIsIm5vZGUiLCJyZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJZIiwidG9wIiwiWCIsImxlZnQiLCJuZXdQbGFjZW1lbnQiLCJCT1VOQ0VfU0laRSIsInNldFRpbWVvdXQiLCJnZXRSb290RG9tTm9kZSIsIndyYXBwZXJSZWN0IiwiY29uY2F0Iiwic2xpY2UiLCJ3aW5kb3ciLCJpbm5lckhlaWdodCIsImlubmVyV2lkdGgiLCJyZXBsYWNlIiwiY2xhc3NOYW1lIiwibm9kZVRvcCIsInN0eWxlIiwiYm90dG9tIiwicGFyc2VJbnQiLCJmb3JjZVBvcHVwQWxpZ24iLCJoYW5kbGVWaXNpYmxlQ2hhbmdlIiwiYm9vbCIsImNsYXNzTmFtZXMiLCJnZXRQbGFjZW1lbnRzIiwibW90aW9uRGVhZGxpbmUiLCJkaXNwbGF5TmFtZSIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsIm9uZU9mIiwiZnVuYyIsIm1vdXNlRW50ZXJEZWxheSIsIm51bWJlciIsIm1vdXNlTGVhdmVEZWxheSIsInN0cmluZyIsIm9iamVjdCIsImRlZmF1bHRQcm9wcyIsInpJbmRleCJdLCJzb3VyY2VzIjpbIi4uLy4uL2NvbXBvbmVudHMvdG9vbHRpcC9Ub29sdGlwLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuLy8gQHRzLW5vY2hlY2tcbmltcG9ydCBSZWFjdCwge1xuICBmb3J3YXJkUmVmLFxuICB1c2VDb250ZXh0LFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlLFxuICB1c2VSZWYsXG4gIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgUG9wVHJpZ2dlciwgeyBJVHJpZ2dlciwgUGxhY2VtZW50IH0gZnJvbSBcIi4uL3BvcC10cmlnZ2VyXCJcbmltcG9ydCB7IENvbmZpZ0NvbnRleHQgfSBmcm9tIFwiLi4vY29uZmlnLXByb3ZpZGVyXCJcbmltcG9ydCBnZXRQbGFjZW1lbnRzIGZyb20gXCIuL3BsYWNlbWVudHNcIlxuaW1wb3J0IFBvcHVwIGZyb20gXCIuL1BvcHVwXCJcbmltcG9ydCBcIi4vc3R5bGVcIlxuaW1wb3J0IHsgQk9VTkNFX1NJWkUgfSBmcm9tIFwiLi4vX3V0aWwvbW90aW9uXCJcblxuY29uc3QgcHJlZml4ID0gXCJhZHVpLXRvb2x0aXBcIlxuXG5leHBvcnQgaW50ZXJmYWNlIElUb29sdGlwUHJvcHMge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbiAgLyoqXG4gICAqIOaYr+WQpui+uee8mOWvuem9kFxuICAgKi9cbiAgYWxpZ25FZGdlPzogYm9vbGVhblxuICAvKipcbiAgICog6Ieq5Yqo6LCD5pW05L2N572uXG4gICAqL1xuICBhdXRvQWRqdXN0UGxhY2VtZW50PzogYm9vbGVhblxuICAvKipcbiAgICog5a2Q6IqC54K5XG4gICAqL1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZVxuICAvKipcbiAgICog5rCU5rOh5o+Q56S65piv5ZCm6buY6K6k5pi+56S6XG4gICAqL1xuICBkZWZhdWx0VmlzaWJsZT86IG51bGwgfCBib29sZWFuXG4gIC8qKlxuICAgKiBmb3JjZVJlbmRlciBiZWZvcmUgZmlyc3QgdmlzaWJsZVxuICAgKi9cbiAgZm9yY2VSZW5kZXI/OiBib29sZWFuXG4gIC8qKlxuICAgKiDmjIflrprmsJTms6Hmj5DnpLrnmoTniLbnuqfvvIzpu5jorqTkuLogZG9jdW1lbnQuYm9keVxuICAgKi9cbiAgZ2V0UG9wdXBDb250YWluZXI/OiBudWxsIHwgKChub2RlOiBIVE1MRWxlbWVudCkgPT4gSFRNTEVsZW1lbnQpXG4gIC8qKlxuICAgKiBtb3VzZUVudGVyIOaYvuekuueahOW7tuaXtu+8jOWNleS9je+8mnPvvIzlj6rlnKggdHJpZ2dlcj1cImhvdmVyXCIg5pe25pyJ5pWIXG4gICAqL1xuICBtb3VzZUVudGVyRGVsYXk/OiBudW1iZXJcbiAgLyoqXG4gICAqIG1vdXNlTGVhdmUg5raI5aSx55qE5bu25pe277yM5Y2V5L2N77yac++8jOWPquWcqCB0cmlnZ2VyPVwiaG92ZXJcIiDml7bmnInmlYhcbiAgICovXG4gIG1vdXNlTGVhdmVEZWxheT86IG51bWJlclxuICAvKipcbiAgICog5pi+56S65Y+R55Sf5Y+Y5YyW5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uVmlzaWJsZUNoYW5nZT86ICh2aXNpYmxlOiBib29sZWFuKSA9PiB2b2lkXG4gIC8qKlxuICAgKiDlvLnlh7rlsYLkvY3nva5cbiAgICovXG4gIHBvcHVwPzogUmVhY3QuUmVhY3ROb2RlXG4gIC8qKlxuICAgKiDlvLnlh7rlhoXlrrlcbiAgICovXG4gIHBvcHVwQ2xhc3NOYW1lPzogc3RyaW5nXG4gIC8qKlxuICAgKiDmsJTms6Hmj5DnpLrnmoTpmYTliqDnsbvlkI1cbiAgICovXG4gIHBvcHVwVHJhbnNpdGlvbk5hbWU/OiBzdHJpbmdcbiAgLyoqXG4gICAqIOawlOazoeaPkOekuueahOmZhOWKoOagt+W8j1xuICAgKi9cbiAgcGxhY2VtZW50PzogUGxhY2VtZW50XG4gIC8qKlxuICAgKiDlvLnlh7rmoYbnmoTliqjnlLvnsbvlkI3vvIzliqjnlLvmoLzlvI/pgbXlvqogcmMtYW5pbWF0ZVxuICAgKi9cbiAgcG9wdXBTdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXMgfCBudWxsXG4gIC8qKlxuICAgKiDop6blj5HmlrnlvI9cbiAgICovXG4gIHRyaWdnZXI/OiBcImhvdmVyXCIgfCBcImZvY3VzXCIgfCBcImNsaWNrXCJcbiAgLyoqXG4gICAqIOaJi+WKqOaOp+WItuawlOazoeaPkOekuuaYr+WQpuaYvuekulxuICAgKi9cbiAgdmlzaWJsZT86IG51bGwgfCBib29sZWFuXG59XG5cbi8qKlxuICog5bel5YW35o+Q56S655So5LqO6ZKI5a+55p+Q5Liq5YWD57Sg55qE44CB6L276YeP55qE5pON5L2c6K+05piO44CCXG4gKiDkuI7msJTms6Hmj5DnpLogUG9wb3ZlciDkuI3lkIzvvIzlt6Xlhbfmj5DnpLogVG9vbHRpcCDkuI3mib/ovb3lpI3mnYLlhoXlrrnkv6Hmga/vvIzogIzkuLvopoHnlKjkuo7op6Pph4rlt6XlhbfnmoTmk43kvZzlkKvkuYnvvIzlpoLigJzlpI3liLbigJ3jgIHigJznvJbovpHigJ3jgIHigJzliKDpmaTigJ3nrYnjgIJcbiAqIFRvb2x0aXAg5piv5Z+65LqOIFBvcFRyaWdnZXIg6L+b6KGM5bCB6KOF55qE44CCXG4gKiBUb29sdGlwIOi0n+i0o+WumuS5ieeureWktOS4juWGheWuueeahOebuOWFs+agt+W8j+OAglxuICovXG5jb25zdCBUb29sdGlwOiBSZWFjdC5Gb3J3YXJkUmVmRXhvdGljQ29tcG9uZW50PFxuICBJVG9vbHRpcFByb3BzICYgUmVhY3QuUmVmQXR0cmlidXRlczxhbnk+XG4+ID0gZm9yd2FyZFJlZihcbiAgKFxuICAgIHtcbiAgICAgIGFsaWduRWRnZSxcbiAgICAgIGF1dG9BZGp1c3RQbGFjZW1lbnQsXG4gICAgICBjaGlsZHJlbixcbiAgICAgIGRlZmF1bHRWaXNpYmxlLFxuICAgICAgZ2V0UG9wdXBDb250YWluZXIsXG4gICAgICBvblZpc2libGVDaGFuZ2UsXG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFByb3AsXG4gICAgICBwb3B1cCxcbiAgICAgIHBvcHVwQ2xhc3NOYW1lLFxuICAgICAgcG9wdXBTdHlsZSxcbiAgICAgIHBvcHVwVHJhbnNpdGlvbk5hbWUsXG4gICAgICB0cmlnZ2VyLFxuICAgICAgdmlzaWJsZTogdmlzaWJsZVByb3AsXG4gICAgICAuLi5vdGhlclByb3BzXG4gICAgfTogSVRvb2x0aXBQcm9wcyxcbiAgICByZWZcbiAgKSA9PiB7XG4gICAgY29uc3QgdHJpZ2dlclJlZiA9IHVzZVJlZjxJVHJpZ2dlcj4oKVxuICAgIGNvbnN0IFtwbGFjZW1lbnQsIHNldFBsYWNlbWVudF0gPSB1c2VTdGF0ZShwbGFjZW1lbnRQcm9wIHx8IFwiYm90dG9tXCIpXG4gICAgY29uc3QgW3Zpc2libGUsIHNldFZpc2libGVdID0gdXNlU3RhdGUodmlzaWJsZVByb3ApXG4gICAgY29uc3QgW21vdGlvbk5hbWUsIHNldE1vdGlvbk5hbWVdID0gdXNlU3RhdGUocG9wdXBUcmFuc2l0aW9uTmFtZSlcblxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgICAgY3VycmVudDogdHJpZ2dlclJlZi5jdXJyZW50LFxuICAgIH0pKVxuXG4gICAgLy8g55u45b2T5LqO55Sf5ZG95ZGo5pyfIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc1xuICAgIGlmICh2aXNpYmxlUHJvcCAhPT0gbnVsbCAmJiB2aXNpYmxlICE9PSB2aXNpYmxlUHJvcCkge1xuICAgICAgc2V0VmlzaWJsZSghIXZpc2libGVQcm9wKVxuICAgIH1cblxuICAgIGNvbnN0IHsgZ2V0UG9wdXBDb250YWluZXI6IGdldFBvcHVwQ29udGFpbmVyQ29udGV4dCB9ID1cbiAgICAgIHVzZUNvbnRleHQoQ29uZmlnQ29udGV4dClcblxuICAgIC8qKlxuICAgICAqIOagueaNriBwbGFjZW1lbnQg6K6+572u55u45YWz5qC35byPXG4gICAgICovXG4gICAgY29uc3QgZ2V0UG9wdXBTdHlsZSA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHRyYW5zZm9ybU9yaWdpbiA9IHtcbiAgICAgICAgeDogXCI1MCVcIixcbiAgICAgICAgeTogXCI1MCVcIixcbiAgICAgIH1cbiAgICAgIGNvbnN0IGV4dHJhU3R5bGU6IFJlYWN0LkNTU1Byb3BlcnRpZXMgPSB7fVxuICAgICAgaWYgKHBvcHVwU3R5bGUpIHtcbiAgICAgICAgaWYgKHBsYWNlbWVudC5pbmRleE9mKFwidG9wXCIpID09PSAwKSB7XG4gICAgICAgICAgdHJhbnNmb3JtT3JpZ2luLnkgPSBcIjEwMCVcIlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBwb3B1cFN0eWxlLnBhZGRpbmdCb3R0b20gPT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwb3B1cFN0eWxlLnBhZGRpbmcgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGV4dHJhU3R5bGUucGFkZGluZ0JvdHRvbSA9IFwiMTJweFwiXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBsYWNlbWVudC5pbmRleE9mKFwiYm90dG9tXCIpID09PSAwKSB7XG4gICAgICAgICAgdHJhbnNmb3JtT3JpZ2luLnkgPSBcIi02cHhcIlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBwb3B1cFN0eWxlLnBhZGRpbmdUb3AgPT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBwb3B1cFN0eWxlLnBhZGRpbmcgPT09IFwidW5kZWZpbmVkXCJcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGV4dHJhU3R5bGUucGFkZGluZ1RvcCA9IFwiMTJweFwiXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHBsYWNlbWVudC5pbmRleE9mKFwicmlnaHRcIikgPT09IDApIHtcbiAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW4ueCA9IFwiMCVcIlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBwb3B1cFN0eWxlLnBhZGRpbmdMZWZ0ID09PSBcInVuZGVmaW5lZFwiICYmXG4gICAgICAgICAgICB0eXBlb2YgcG9wdXBTdHlsZS5wYWRkaW5nID09PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBleHRyYVN0eWxlLnBhZGRpbmdMZWZ0ID0gXCIxMnB4XCJcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGxhY2VtZW50LmluZGV4T2YoXCJsZWZ0XCIpID09PSAwKSB7XG4gICAgICAgICAgdHJhbnNmb3JtT3JpZ2luLnggPSBcIjEwMCVcIlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHR5cGVvZiBwb3B1cFN0eWxlLnBhZGRpbmdSaWdodCA9PT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAgICAgdHlwZW9mIHBvcHVwU3R5bGUucGFkZGluZyA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZXh0cmFTdHlsZS5wYWRkaW5nUmlnaHQgPSBcIjEycHhcIlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwbGFjZW1lbnQuaW5jbHVkZXMoXCJMZWZ0XCIpKSB7XG4gICAgICAgICAgdHJhbnNmb3JtT3JpZ2luLnggPSBcIjE4cHhcIlxuICAgICAgICB9IGVsc2UgaWYgKHBsYWNlbWVudC5pbmNsdWRlcyhcIlJpZ2h0XCIpKSB7XG4gICAgICAgICAgdHJhbnNmb3JtT3JpZ2luLnggPSBcImNhbGMoMTAwJSAtIDE4cHgpXCJcbiAgICAgICAgfSBlbHNlIGlmIChwbGFjZW1lbnQuaW5jbHVkZXMoXCJUb3BcIikpIHtcbiAgICAgICAgICB0cmFuc2Zvcm1PcmlnaW4ueSA9IFwiMTBweFwiXG4gICAgICAgIH0gZWxzZSBpZiAocGxhY2VtZW50LmluY2x1ZGVzKFwiQm90dG9tXCIpKSB7XG4gICAgICAgICAgdHJhbnNmb3JtT3JpZ2luLnkgPSBcImNhbGMoMTAwJSAtIDEwcHgpXCJcbiAgICAgICAgfVxuICAgICAgICBleHRyYVN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IGAke3RyYW5zZm9ybU9yaWdpbi54fSAke3RyYW5zZm9ybU9yaWdpbi55fWBcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZXh0cmFTdHlsZSxcbiAgICAgICAgLi4ucG9wdXBTdHlsZSxcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDmraTmlrnms5XnmoTnm67nmoTmmK/lnKggd2luZG93IOaXoOazleaYvuekuuWujOaVtCBwb3B1cCDml7bvvIzosIPmlbQgcGxhY2VtZW5077ybXG4gICAgICog5Y+v6IO95a2Y5ZyoIHgsIHkg6L206YO96ZyA6KaB6LCD5pW055qE5oOF5Ya177yMXG4gICAgICog5q+U5aaC5Zyo5bGP5bmV5Y+z5LiL6KeS55qEIFwiYm90dG9tTGVmdFwiIHx8IFwiYm90dG9tXCLvvIzpgqPkuYjnm67moIfmmK/lsIblhbbosIPmlbTkuLogXCJ0b3BSaWdodFwi44CCXG4gICAgICpcbiAgICAgKiAyMDE5MDgyODog5bCd6K+V5bCGIOKAnHRvcCrigJ0g55qEIENTUyDlrprkvY3ku44gdG9wOiB4eHg7IOaUueS4uiBib3R0b206IHh4eDtcbiAgICAgKiDlm6DkuLrov5nml7blgJnlpoLmnpzlvLnlh7rmoYbpq5jluqblj5jljJbnmoTor53vvIzku47kuIvlrprkvY3lsLHkuI3kvJrmnInmoLflvI/pl67popjjgIJcbiAgICAgKi9cbiAgICBjb25zdCBoYW5kbGVQb3B1cEFsaWduID0gKG5vZGU6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICBpZiAoIWF1dG9BZGp1c3RQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB0b3A6IFksIGxlZnQ6IFggfSA9IHJlY3RcblxuICAgICAgbGV0IG5ld1BsYWNlbWVudDogYW55ID0gcGxhY2VtZW50XG5cbiAgICAgIGlmICh3aWR0aCAqIGhlaWdodCA+IEJPVU5DRV9TSVpFKSB7XG4gICAgICAgIGlmIChtb3Rpb25OYW1lID09PSBcInpvb20tYmlnXCIpIHtcbiAgICAgICAgICBzZXRNb3Rpb25OYW1lKFwiem9vbS1iaWctYm91bmNlXCIpXG4gICAgICAgIH0gZWxzZSBpZiAobW90aW9uTmFtZSA9PT0gXCJzbGlkZS11cFwiKSB7XG4gICAgICAgICAgc2V0TW90aW9uTmFtZShcInNsaWRlLXVwLWJvdW5jZVwiKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHJpZ2dlclJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgdHJpZ2dlclJlZi5jdXJyZW50LmdldFJvb3REb21Ob2RlICYmXG4gICAgICAgICAgcGxhY2VtZW50UHJvcFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCB3cmFwcGVyUmVjdCA9IHRyaWdnZXJSZWYuY3VycmVudFxuICAgICAgICAgICAgLmdldFJvb3REb21Ob2RlKClcbiAgICAgICAgICAgIC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIHRvcCArIGJvdHRvbSDnmoTlrprkvY3kvJjljJZcbiAgICAgICAgICAgKiDlr7kgWSDovbTov5vooYzliKTmlq1cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBpZiAocGxhY2VtZW50UHJvcC5pbmRleE9mKFwidG9wXCIpID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoWSA8IDAgJiYgcGxhY2VtZW50LmluZGV4T2YoXCJ0b3BcIikgPT09IDApIHtcbiAgICAgICAgICAgICAgbmV3UGxhY2VtZW50ID0gXCJib3R0b21cIi5jb25jYXQocGxhY2VtZW50LnNsaWNlKDMpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBZID4gcmVjdC5oZWlnaHQgKyB3cmFwcGVyUmVjdC5oZWlnaHQgKyAxMiAmJlxuICAgICAgICAgICAgICBwbGFjZW1lbnQuaW5kZXhPZihcImJvdHRvbVwiKSA9PT0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIG5ld1BsYWNlbWVudCA9IFwidG9wXCIuY29uY2F0KHBsYWNlbWVudC5zbGljZSg2KSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBsYWNlbWVudFByb3AuaW5kZXhPZihcImJvdHRvbVwiKSA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBZICsgaGVpZ2h0ID4gd2luZG93LmlubmVySGVpZ2h0ICYmXG4gICAgICAgICAgICAgIHBsYWNlbWVudC5pbmRleE9mKFwiYm90dG9tXCIpID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgbmV3UGxhY2VtZW50ID0gXCJ0b3BcIi5jb25jYXQocGxhY2VtZW50LnNsaWNlKDYpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB3cmFwcGVyUmVjdC50b3AgKyB3cmFwcGVyUmVjdC5oZWlnaHQgKyBoZWlnaHQgKyAxMiA8XG4gICAgICAgICAgICAgICAgd2luZG93LmlubmVySGVpZ2h0ICYmXG4gICAgICAgICAgICAgIHBsYWNlbWVudC5pbmRleE9mKFwidG9wXCIpID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgbmV3UGxhY2VtZW50ID0gXCJib3R0b21cIi5jb25jYXQocGxhY2VtZW50LnNsaWNlKDMpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiDlr7kgWCDovbTov5vooYzliKTmlq1cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBpZiAod2lkdGggKyBYID4gd2luZG93LmlubmVyV2lkdGgpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgW1widG9wTGVmdFwiLCBcInRvcFwiLCBcImJvdHRvbUxlZnRcIiwgXCJib3R0b21cIl0uaW5jbHVkZXMobmV3UGxhY2VtZW50KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIG5ld1BsYWNlbWVudCA9IGAke25ld1BsYWNlbWVudC5yZXBsYWNlKFwiTGVmdFwiLCBcIlwiKX1SaWdodGBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFggPCAwKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFtcInRvcFJpZ2h0XCIsIFwidG9wXCIsIFwiYm90dG9tUmlnaHRcIiwgXCJib3R0b21cIl0uaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgbmV3UGxhY2VtZW50XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBuZXdQbGFjZW1lbnQgPSBgJHtuZXdQbGFjZW1lbnQucmVwbGFjZShcIlJpZ2h0XCIsIFwiXCIpfUxlZnRgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8g5Yik5pat5piv5ZCm5pivIFwidG9wKlwiIOWumuS9jVxuICAgICAgICAgIGlmIChub2RlLmNsYXNzTmFtZS5pbmNsdWRlcyhcIi10b3BcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVUb3AgPSBub2RlLnN0eWxlLnRvcCB8fCBcIjBcIlxuICAgICAgICAgICAgbm9kZS5zdHlsZS50b3AgPSBcInVuc2V0XCJcbiAgICAgICAgICAgIG5vZGUuc3R5bGUuYm90dG9tID0gYC0ke3BhcnNlSW50KG5vZGVUb3AsIDEwKSArIGhlaWdodH1weGBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBsZWZ0ICsgcmlnaHQg55qE5a6a5L2N5LyY5YyWXG4gICAgICAgICAgICovXG4gICAgICAgICAgaWYgKHBsYWNlbWVudFByb3AuaW5kZXhPZihcImxlZnRcIikgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChYIDwgMCAmJiBwbGFjZW1lbnQuaW5kZXhPZihcImxlZnRcIikgPT09IDApIHtcbiAgICAgICAgICAgICAgbmV3UGxhY2VtZW50ID0gXCJyaWdodFwiLmNvbmNhdChwbGFjZW1lbnQuc2xpY2UoNCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFggPiByZWN0LndpZHRoICsgd3JhcHBlclJlY3Qud2lkdGggKyAxMiAmJlxuICAgICAgICAgICAgICBwbGFjZW1lbnQuaW5kZXhPZihcInJpZ2h0XCIpID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgbmV3UGxhY2VtZW50ID0gXCJsZWZ0XCIuY29uY2F0KHBsYWNlbWVudC5zbGljZSg1KSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBsYWNlbWVudFByb3AuaW5kZXhPZihcInJpZ2h0XCIpID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFggKyB3aWR0aCA+IHdpbmRvdy5pbm5lcldpZHRoICYmXG4gICAgICAgICAgICAgIHBsYWNlbWVudC5pbmRleE9mKFwicmlnaHRcIikgPT09IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBuZXdQbGFjZW1lbnQgPSBcImxlZnRcIi5jb25jYXQocGxhY2VtZW50LnNsaWNlKDUpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB3cmFwcGVyUmVjdC5sZWZ0ICsgd3JhcHBlclJlY3Qud2lkdGggKyB3aWR0aCArIDEyIDxcbiAgICAgICAgICAgICAgICB3aW5kb3cuaW5uZXJXaWR0aCAmJlxuICAgICAgICAgICAgICBwbGFjZW1lbnQuaW5kZXhPZihcImxlZnRcIikgPT09IDBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBuZXdQbGFjZW1lbnQgPSBcInJpZ2h0XCIuY29uY2F0KHBsYWNlbWVudC5zbGljZSg0KSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV3UGxhY2VtZW50ICE9PSBwbGFjZW1lbnQpIHtcbiAgICAgICAgICAgIHNldFBsYWNlbWVudChuZXdQbGFjZW1lbnQpXG4gICAgICAgICAgICBpZiAodHJpZ2dlclJlZi5jdXJyZW50LmZvcmNlUG9wdXBBbGlnbikge1xuICAgICAgICAgICAgICB0cmlnZ2VyUmVmLmN1cnJlbnQuZm9yY2VQb3B1cEFsaWduKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sIDApXG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlVmlzaWJsZUNoYW5nZSA9IChib29sOiBib29sZWFuKSA9PiB7XG4gICAgICBpZiAodmlzaWJsZVByb3AgPT09IG51bGwpIHtcbiAgICAgICAgc2V0VmlzaWJsZShib29sKVxuICAgICAgfVxuICAgICAgaWYgKG9uVmlzaWJsZUNoYW5nZSkge1xuICAgICAgICBvblZpc2libGVDaGFuZ2UoYm9vbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFBvcFRyaWdnZXJcbiAgICAgICAgcG9wdXBDbGFzc05hbWU9e2NsYXNzTmFtZXMoXG4gICAgICAgICAgcG9wdXBDbGFzc05hbWUsXG4gICAgICAgICAgYCR7cHJlZml4fS1iYXNlYCxcbiAgICAgICAgICBgJHtwcmVmaXh9LWJhc2UtJHtwbGFjZW1lbnR9YFxuICAgICAgICApfVxuICAgICAgICByZWY9e3RyaWdnZXJSZWZ9XG4gICAgICAgIGFjdGlvbj17dHJpZ2dlciA/IFt0cmlnZ2VyXSA6IFtcImhvdmVyXCJdfVxuICAgICAgICBidWlsdGluUGxhY2VtZW50cz17Z2V0UGxhY2VtZW50cyh7IGFsaWduRWRnZSwgYXV0b0FkanVzdFBsYWNlbWVudCB9KX1cbiAgICAgICAgZGVmYXVsdFBvcHVwVmlzaWJsZT17ZGVmYXVsdFZpc2libGV9XG4gICAgICAgIGdldFBvcHVwQ29udGFpbmVyPXtnZXRQb3B1cENvbnRhaW5lciB8fCBnZXRQb3B1cENvbnRhaW5lckNvbnRleHR9XG4gICAgICAgIG9uUG9wdXBWaXNpYmxlQ2hhbmdlPXtoYW5kbGVWaXNpYmxlQ2hhbmdlfVxuICAgICAgICBvblBvcHVwQWxpZ249e2hhbmRsZVBvcHVwQWxpZ259XG4gICAgICAgIHBvcHVwPXs8UG9wdXAgY29udGVudD17cG9wdXB9IHRyaWdnZXI9e3RyaWdnZXJSZWYuY3VycmVudH0gLz59XG4gICAgICAgIHBvcHVwUGxhY2VtZW50PXtwbGFjZW1lbnR9XG4gICAgICAgIHBvcHVwTW90aW9uPXt7XG4gICAgICAgICAgbW90aW9uTmFtZSxcbiAgICAgICAgICBtb3Rpb25EZWFkbGluZTogMTAwMCxcbiAgICAgICAgfX1cbiAgICAgICAgcG9wdXBTdHlsZT17Z2V0UG9wdXBTdHlsZSgpfVxuICAgICAgICBwb3B1cFZpc2libGU9e3Zpc2libGV9XG4gICAgICAgIHsuLi5vdGhlclByb3BzfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L1BvcFRyaWdnZXI+XG4gICAgKVxuICB9XG4pXG5cblRvb2x0aXAuZGlzcGxheU5hbWUgPSBcIlRvb2x0aXBcIlxuXG5Ub29sdGlwLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIOaYr+WQpui+uee8mOWvuem9kFxuICAgKi9cbiAgYWxpZ25FZGdlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOiHquWKqOiwg+aVtOS9jee9rlxuICAgKi9cbiAgYXV0b0FkanVzdFBsYWNlbWVudDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDlrZDoioLngrlcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIOawlOazoeaPkOekuuaYr+WQpum7mOiupOaYvuekulxuICAgKi9cbiAgZGVmYXVsdFZpc2libGU6IFByb3BUeXBlcy5vbmVPZihbbnVsbCwgdHJ1ZSwgZmFsc2VdKSxcbiAgLyoqXG4gICAqIOaMh+WumuawlOazoeaPkOekuueahOeItue6p++8jOm7mOiupOS4uiBkb2N1bWVudC5ib2R5XG4gICAqL1xuICBnZXRQb3B1cENvbnRhaW5lcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBtb3VzZUVudGVyIOaYvuekuueahOW7tuaXtu+8jOWNleS9je+8mnPvvIzlj6rlnKggdHJpZ2dlcj1cImhvdmVyXCIg5pe25pyJ5pWIXG4gICAqL1xuICBtb3VzZUVudGVyRGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBtb3VzZUxlYXZlIOa2iOWkseeahOW7tuaXtu+8jOWNleS9je+8mnPvvIzlj6rlnKggdHJpZ2dlcj1cImhvdmVyXCIg5pe25pyJ5pWIXG4gICAqL1xuICBtb3VzZUxlYXZlRGVsYXk6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiDmmL7npLrlj5HnlJ/lj5jljJbml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25WaXNpYmxlQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOW8ueWHuuWxguS9jee9rlxuICAgKi9cbiAgcGxhY2VtZW50OiBQcm9wVHlwZXMub25lT2YoW1xuICAgIFwidG9wXCIsXG4gICAgXCJsZWZ0XCIsXG4gICAgXCJyaWdodFwiLFxuICAgIFwiYm90dG9tXCIsXG4gICAgXCJ0b3BMZWZ0XCIsXG4gICAgXCJ0b3BSaWdodFwiLFxuICAgIFwiYm90dG9tTGVmdFwiLFxuICAgIFwiYm90dG9tUmlnaHRcIixcbiAgICBcImxlZnRUb3BcIixcbiAgICBcImxlZnRCb3R0b21cIixcbiAgICBcInJpZ2h0VG9wXCIsXG4gICAgXCJyaWdodEJvdHRvbVwiLFxuICBdKSxcbiAgLyoqXG4gICAqIOW8ueWHuuWGheWuuVxuICAgKi9cbiAgcG9wdXA6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICog5rCU5rOh5o+Q56S655qE6ZmE5Yqg57G75ZCNXG4gICAqL1xuICBwb3B1cENsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOawlOazoeaPkOekuueahOmZhOWKoOagt+W8j1xuICAgKi9cbiAgcG9wdXBTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIOW8ueWHuuahhueahOWKqOeUu+exu+WQje+8jOWKqOeUu+agvOW8j+mBteW+qiByYy1hbmltYXRlXG4gICAqL1xuICBwb3B1cFRyYW5zaXRpb25OYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog6Kem5Y+R5pa55byPXG4gICAqL1xuICB0cmlnZ2VyOiBQcm9wVHlwZXMub25lT2YoW1wiaG92ZXJcIiwgXCJmb2N1c1wiLCBcImNsaWNrXCJdKSxcbiAgLyoqXG4gICAqIOaJi+WKqOaOp+WItuawlOazoeaPkOekuuaYr+WQpuaYvuekulxuICAgKi9cbiAgdmlzaWJsZTogUHJvcFR5cGVzLm9uZU9mKFtudWxsLCB0cnVlLCBmYWxzZV0pLFxufVxuXG5Ub29sdGlwLmRlZmF1bHRQcm9wcyA9IHtcbiAgYWxpZ25FZGdlOiBmYWxzZSxcbiAgYXV0b0FkanVzdFBsYWNlbWVudDogdHJ1ZSxcbiAgY2hpbGRyZW46IFwiXCIsXG4gIGRlZmF1bHRWaXNpYmxlOiBudWxsLFxuICBnZXRQb3B1cENvbnRhaW5lcjogbnVsbCxcbiAgbW91c2VFbnRlckRlbGF5OiAwLFxuICBtb3VzZUxlYXZlRGVsYXk6IDAuMSxcbiAgb25WaXNpYmxlQ2hhbmdlOiAoKSA9PiB7fSxcbiAgcGxhY2VtZW50OiBcImJvdHRvbVwiLFxuICBwb3B1cDogXCLlpI3liLZcIixcbiAgcG9wdXBDbGFzc05hbWU6IFwiXCIsXG4gIHBvcHVwU3R5bGU6IHt9LFxuICBwb3B1cFRyYW5zaXRpb25OYW1lOiBcInpvb20tYmlnXCIsXG4gIHRyaWdnZXI6IFwiaG92ZXJcIixcbiAgdmlzaWJsZTogbnVsbCxcbiAgekluZGV4OiBcInZhcigtLXotaW5kZXgtdG9vbHRpcClcIixcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9vbHRpcFxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFFQTs7QUFPQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQU1BLE1BQU0sR0FBRyxjQUFmO0FBNEVBLElBQU1DLE9BRUwsR0FBRyxJQUFBQyxpQkFBQSxFQUNGLGdCQWlCRUMsR0FqQkYsRUFrQks7RUFBQSxJQWhCREMsU0FnQkMsUUFoQkRBLFNBZ0JDO0VBQUEsSUFmREMsbUJBZUMsUUFmREEsbUJBZUM7RUFBQSxJQWREQyxRQWNDLFFBZERBLFFBY0M7RUFBQSxJQWJEQyxjQWFDLFFBYkRBLGNBYUM7RUFBQSxJQVpEQyxpQkFZQyxRQVpEQSxpQkFZQztFQUFBLElBWERDLGVBV0MsUUFYREEsZUFXQztFQUFBLElBVlVDLGFBVVYsUUFWREMsU0FVQztFQUFBLElBVERDLEtBU0MsUUFUREEsS0FTQztFQUFBLElBUkRDLGNBUUMsUUFSREEsY0FRQztFQUFBLElBUERDLFVBT0MsUUFQREEsVUFPQztFQUFBLElBTkRDLG1CQU1DLFFBTkRBLG1CQU1DO0VBQUEsSUFMREMsT0FLQyxRQUxEQSxPQUtDO0VBQUEsSUFKUUMsV0FJUixRQUpEQyxPQUlDO0VBQUEsSUFIRUMsVUFHRjs7RUFDSCxJQUFNQyxVQUFVLEdBQUcsSUFBQUMsYUFBQSxHQUFuQjs7RUFDQSxnQkFBa0MsSUFBQUMsZUFBQSxFQUFTWixhQUFhLElBQUksUUFBMUIsQ0FBbEM7RUFBQTtFQUFBLElBQU9DLFNBQVA7RUFBQSxJ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