UNPKG

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>

252 lines (251 loc) 53.7 kB
"use strict"; function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 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 _excluded = ["alignEdge", "autoAdjustPlacement", "children", "defaultVisible", "getPopupContainer", "onVisibleChange", "placement", "popup", "popupClassName", "popupStyle", "popupTransitionName", "trigger", "visible"]; function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; } function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; } function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _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(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } } function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayWithHoles(r) { if (Array.isArray(r)) return r; } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; } 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; 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 = exports["default"] = Tooltip; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jbGFzc25hbWVzIiwiX3BvcFRyaWdnZXIiLCJfY29uZmlnUHJvdmlkZXIiLCJfcGxhY2VtZW50cyIsIl9Qb3B1cCIsIl9leGNsdWRlZCIsImUiLCJfX2VzTW9kdWxlIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiV2Vha01hcCIsInIiLCJ0IiwiX3R5cGVvZiIsImhhcyIsImdldCIsIm4iLCJfX3Byb3RvX18iLCJhIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaSIsInNldCIsIl9leHRlbmRzIiwiYXNzaWduIiwiYmluZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFwcGx5Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJfb2JqZWN0U3ByZWFkIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX3RvUHJvcGVydHlLZXkiLCJ2YWx1ZSIsImNvbmZpZ3VyYWJsZSIsIndyaXRhYmxlIiwiX3RvUHJpbWl0aXZlIiwiU3ltYm9sIiwidG9QcmltaXRpdmUiLCJUeXBlRXJyb3IiLCJTdHJpbmciLCJOdW1iZXIiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwibCIsIml0ZXJhdG9yIiwiZiIsIm5leHQiLCJkb25lIiwiaXNBcnJheSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwicyIsImluY2x1ZGVzIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJwcmVmaXgiLCJUb29sdGlwIiwiZm9yd2FyZFJlZiIsIl9yZWYiLCJyZWYiLCJhbGlnbkVkZ2UiLCJhdXRvQWRqdXN0UGxhY2VtZW50IiwiY2hpbGRyZW4iLCJkZWZhdWx0VmlzaWJsZSIsImdldFBvcHVwQ29udGFpbmVyIiwib25WaXNpYmxlQ2hhbmdlIiwicGxhY2VtZW50UHJvcCIsInBsYWNlbWVudCIsInBvcHVwIiwicG9wdXBDbGFzc05hbWUiLCJwb3B1cFN0eWxlIiwicG9wdXBUcmFuc2l0aW9uTmFtZSIsInRyaWdnZXIiLCJ2aXNpYmxlUHJvcCIsInZpc2libGUiLCJvdGhlclByb3BzIiwidHJpZ2dlclJlZiIsInVzZVJlZiIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwiX3VzZVN0YXRlMiIsInNldFBsYWNlbWVudCIsIl91c2VTdGF0ZTMiLCJfdXNlU3RhdGU0Iiwic2V0VmlzaWJsZSIsIl91c2VTdGF0ZTUiLCJfdXNlU3RhdGU2IiwibW90aW9uTmFtZSIsInNldE1vdGlvbk5hbWUiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwiY3VycmVudCIsIl91c2VDb250ZXh0IiwidXNlQ29udGV4dCIsIkNvbmZpZ0NvbnRleHQiLCJnZXRQb3B1cENvbnRhaW5lckNvbnRleHQiLCJnZXRQb3B1cFN0eWxlIiwidHJhbnNmb3JtT3JpZ2luIiwieCIsInkiLCJleHRyYVN0eWxlIiwiaW5kZXhPZiIsInBhZGRpbmdCb3R0b20iLCJwYWRkaW5nIiwicGFkZGluZ1RvcCIsInBhZGRpbmdMZWZ0IiwicGFkZGluZ1JpZ2h0IiwiY29uY2F0IiwiaGFuZGxlUG9wdXBBbGlnbiIsIm5vZGUiLCJyZWN0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJZIiwidG9wIiwiWCIsImxlZnQiLCJuZXdQbGFjZW1lbnQiLCJzZXRUaW1lb3V0IiwiZ2V0Um9vdERvbU5vZGUiLCJ3cmFwcGVyUmVjdCIsIndpbmRvdyIsImlubmVySGVpZ2h0IiwiaW5uZXJXaWR0aCIsInJlcGxhY2UiLCJjbGFzc05hbWUiLCJub2RlVG9wIiwic3R5bGUiLCJib3R0b20iLCJwYXJzZUludCIsImZvcmNlUG9wdXBBbGlnbiIsImhhbmRsZVZpc2libGVDaGFuZ2UiLCJib29sIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZXMiLCJhY3Rpb24iLCJidWlsdGluUGxhY2VtZW50cyIsImdldFBsYWNlbWVudHMiLCJkZWZhdWx0UG9wdXBWaXNpYmxlIiwib25Qb3B1cFZpc2libGVDaGFuZ2UiLCJvblBvcHVwQWxpZ24iLCJjb250ZW50IiwicG9wdXBQbGFjZW1lbnQiLCJwb3B1cE1vdGlvbiIsIm1vdGlvbkRlYWRsaW5lIiwicG9wdXBWaXNpYmxlIiwiZGlzcGxheU5hbWUiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJvbmVPZiIsImZ1bmMiLCJtb3VzZUVudGVyRGVsYXkiLCJudW1iZXIiLCJtb3VzZUxlYXZlRGVsYXkiLCJzdHJpbmciLCJvYmplY3QiLCJkZWZhdWx0UHJvcHMiLCJ6SW5kZXgiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9jb21wb25lbnRzL3Rvb2x0aXAvVG9vbHRpcC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEB0cy1ub2NoZWNrXG5pbXBvcnQgUmVhY3QsIHtcbiAgZm9yd2FyZFJlZixcbiAgdXNlQ29udGV4dCxcbiAgdXNlSW1wZXJhdGl2ZUhhbmRsZSxcbiAgdXNlUmVmLFxuICB1c2VTdGF0ZSxcbn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIlxuaW1wb3J0IFBvcFRyaWdnZXIsIHsgSVRyaWdnZXIsIFBsYWNlbWVudCB9IGZyb20gXCIuLi9wb3AtdHJpZ2dlclwiXG5pbXBvcnQgeyBDb25maWdDb250ZXh0IH0gZnJvbSBcIi4uL2NvbmZpZy1wcm92aWRlclwiXG5pbXBvcnQgZ2V0UGxhY2VtZW50cyBmcm9tIFwiLi9wbGFjZW1lbnRzXCJcbmltcG9ydCBQb3B1cCBmcm9tIFwiLi9Qb3B1cFwiXG5pbXBvcnQgXCIuL3N0eWxlXCJcblxuY29uc3QgcHJlZml4ID0gXCJhZHVpLXRvb2x0aXBcIlxuXG5leHBvcnQgaW50ZXJmYWNlIElUb29sdGlwUHJvcHMge1xuICBba2V5OiBzdHJpbmddOiBhbnlcbiAgLyoqXG4gICAqIOaYr+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/pl67popjjgIJcbiAgICAgKi9cbiAgICBjb25zdCBoYW5kbGVQb3B1cEFsaWduID0gKG5vZGU6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgICBpZiAoIWF1dG9BZGp1c3RQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICBjb25zdCByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0LCB0b3A6IFksIGxlZnQ6IFggfSA9IHJlY3RcblxuICAgICAgbGV0IG5ld1BsYWNlbWVudDogYW55ID0gcGxhY2VtZW50XG5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdHJpZ2dlclJlZi5jdXJyZW50ICYmXG4gICAgICAgICAgdHJpZ2dlclJlZi5jdXJyZW50LmdldFJvb3REb21Ob2RlICYmXG4gICAgICAgICAgcGxhY2VtZW50UHJvcFxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCB3cmFwcGVyUmVjdCA9IHRyaWdnZXJSZWYuY3VycmVudFxuICAgICAgICAgICAgLmdldFJvb3REb21Ob2RlKClcbiAgICAgICAgICAgIC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICAgIC8qKlxuICAgICAgICAgICAqIHRvcCArIGJvdHRvbSDnmoTlrprkvY3kvJjljJZcbiAgICAgICAgICAgKiDlr7kgWSDovbTov5vooYzliKTmlq1cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBpZiAocGxhY2VtZW50UHJvcC5pbmRleE9mKFwidG9wXCIpID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoWSA8IDAgJiYgcGxhY2VtZW50LmluZGV4T2YoXCJ0b3BcIikgPT09IDApIHtcbiAgICAgICAgICAgICAgbmV3UGxhY2VtZW50ID0gXCJib3R0b21cIi5jb25jYXQocGxhY2VtZW50LnNsaWNlKDMpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBZID4gcmVjdC5oZWlnaHQgKyB3cmFwcGVyUmVjdC5oZWlnaHQgKyAxMiAmJlxuICAgICAgICAgICAgICBwbGFjZW1lbnQuaW5kZXhPZihcImJvdHRvbVwiKSA9PT0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIG5ld1BsYWNlbWVudCA9IFwidG9wXCIuY29uY2F0KHBsYWNlbWVudC5zbGljZSg2KSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBsYWNlbWVudFByb3AuaW5kZXhPZihcImJvdHRvbVwiKSA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBZICsgaGVpZ2h0ID4gd2luZG93LmlubmVySGVpZ2h0ICYmXG4gICAgICAgICAgICAgIHBsYWNlbWVudC5pbmRleE9mKFwiYm90dG9tXCIpID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgbmV3UGxhY2VtZW50ID0gXCJ0b3BcIi5jb25jYXQocGxhY2VtZW50LnNsaWNlKDYpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB3cmFwcGVyUmVjdC50b3AgKyB3cmFwcGVyUmVjdC5oZWlnaHQgKyBoZWlnaHQgKyAxMiA8XG4gICAgICAgICAgICAgICAgd2luZG93LmlubmVySGVpZ2h0ICYmXG4gICAgICAgICAgICAgIHBsYWNlbWVudC5pbmRleE9mKFwidG9wXCIpID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgbmV3UGxhY2VtZW50ID0gXCJib3R0b21cIi5jb25jYXQocGxhY2VtZW50LnNsaWNlKDMpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiDlr7kgWCDovbTov5vooYzliKTmlq1cbiAgICAgICAgICAgKi9cbiAgICAgICAgICBpZiAod2lkdGggKyBYID4gd2luZG93LmlubmVyV2lkdGgpIHtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgW1widG9wTGVmdFwiLCBcInRvcFwiLCBcImJvdHRvbUxlZnRcIiwgXCJib3R0b21cIl0uaW5jbHVkZXMobmV3UGxhY2VtZW50KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIG5ld1BsYWNlbWVudCA9IGAke25ld1BsYWNlbWVudC5yZXBsYWNlKFwiTGVmdFwiLCBcIlwiKX1SaWdodGBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKFggPCAwKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFtcInRvcFJpZ2h0XCIsIFwidG9wXCIsIFwiYm90dG9tUmlnaHRcIiwgXCJib3R0b21cIl0uaW5jbHVkZXMoXG4gICAgICAgICAgICAgICAgbmV3UGxhY2VtZW50XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBuZXdQbGFjZW1lbnQgPSBgJHtuZXdQbGFjZW1lbnQucmVwbGFjZShcIlJpZ2h0XCIsIFwiXCIpfUxlZnRgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8g5Yik5pat5piv5ZCm5pivIFwidG9wKlwiIOWumuS9jVxuICAgICAgICAgIGlmIChub2RlLmNsYXNzTmFtZS5pbmNsdWRlcyhcIi10b3BcIikpIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVUb3AgPSBub2RlLnN0eWxlLnRvcCB8fCBcIjBcIlxuICAgICAgICAgICAgbm9kZS5zdHlsZS50b3AgPSBcInVuc2V0XCJcbiAgICAgICAgICAgIG5vZGUuc3R5bGUuYm90dG9tID0gYC0ke3BhcnNlSW50KG5vZGVUb3AsIDEwKSArIGhlaWdodH1weGBcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvKipcbiAgICAgICAgICAgKiBsZWZ0ICsgcmlnaHQg55qE5a6a5L2N5LyY5YyWXG4gICAgICAgICAgICovXG4gICAgICAgICAgaWYgKHBsYWNlbWVudFByb3AuaW5kZXhPZihcImxlZnRcIikgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChYIDwgMCAmJiBwbGFjZW1lbnQuaW5kZXhPZihcImxlZnRcIikgPT09IDApIHtcbiAgICAgICAgICAgICAgbmV3UGxhY2VtZW50ID0gXCJyaWdodFwiLmNvbmNhdChwbGFjZW1lbnQuc2xpY2UoNCkpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFggPiByZWN0LndpZHRoICsgd3JhcHBlclJlY3Qud2lkdGggKyAxMiAmJlxuICAgICAgICAgICAgICBwbGFjZW1lbnQuaW5kZXhPZihcInJpZ2h0XCIpID09PSAwXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgbmV3UGxhY2VtZW50ID0gXCJsZWZ0XCIuY29uY2F0KHBsYWNlbWVudC5zbGljZSg1KSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHBsYWNlbWVudFByb3AuaW5kZXhPZihcInJpZ2h0XCIpID09PSAwKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIFggKyB3aWR0aCA+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+WQpuaYvuekulxuICAgKi9cbiAgdmlzaWJsZTogUHJvcFR5cGVzLm9uZU9mKFtudWxsLCB0cnVlLCBmYWxzZV0pLFxufVxuXG5Ub29sdGlwLmRlZmF1bHRQcm9wcyA9IHtcbiAgYWxpZ25FZGdlOiBmYWxzZSxcbiAgYXV0b0FkanVzdFBsYWNlbWVudDogdHJ1ZSxcbiAgY2hpbGRyZW46IFwiXCIsXG4gIGRlZmF1bHRWaXNpYmxlOiBudWxsLFxuICBnZXRQb3B1cENvbnRhaW5lcjogbnVsbCxcbiAgbW91c2VFbnRlckRlbGF5OiAwLFxuICBtb3VzZUxlYXZlRGVsYXk6IDAuMSxcbiAgb25WaXNpYmxlQ2hhbmdlOiAoKSA9PiB7fSxcbiAgcGxhY2VtZW50OiBcImJvdHRvbVwiLFxuICBwb3B1cDogXCLlpI3liLZcIixcbiAgcG9wdXBDbGFzc05hbWU6IFwiXCIsXG4gIHBvcHVwU3R5bGU6IHt9LFxuICBwb3B1cFRyYW5zaXRpb25OYW1lOiBcInpvb20tYmlnXCIsXG4gIHRyaWdnZXI6IFwiaG92ZXJcIixcbiAgdmlzaWJsZTogbnVsbCxcbiAgekluZGV4OiBcInZhcigtLXotaW5kZXgtdG9vbHRpcClcIixcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9vbHRpcFxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBRUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBT0EsSUFBQUMsVUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsV0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUksV0FBQSxHQUFBRixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUssZUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sV0FBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU8sTUFBQSxHQUFBTCxzQkFBQSxDQUFBRixPQUFBO0FBQ0FBLE9BQUE7QUFBZ0IsSUFBQVEsU0FBQTtBQUFBLFNBQUFOLHVCQUFBTyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsZ0JBQUFBLENBQUE7QUFBQSxTQUFBRSx5QkFBQUYsQ0FBQSw2QkFBQUcsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFBRCx3QkFBQSxZQUFBQSx5QkFBQUYsQ0FBQSxXQUFBQSxDQUFBLEdBQUFLLENBQUEsR0FBQUQsQ0FBQSxLQUFBSixDQUFBO0FBQUEsU0FBQVYsd0JBQUFVLENBQUEsRUFBQUksQ0FBQSxTQUFBQSxDQUFBLElBQUFKLENBQUEsSUFBQUEsQ0FBQSxDQUFB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