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>

419 lines (418 loc) 67 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 _dayPickerReact = _interopRequireWildcard(require("day-picker-react")); var _RangePicker = _interopRequireDefault(require("./RangePicker")); require("./style"); var _classNames = _interopRequireDefault(require("./classNames")); var _configProvider = require("../config-provider"); var _icon = _interopRequireDefault(require("../icon")); var _input = _interopRequireDefault(require("../input")); var _popover = _interopRequireDefault(require("../popover")); var _Caption = _interopRequireDefault(require("./Caption")); var _Navbar = _interopRequireDefault(require("./Navbar")); var _Shortcuts = _interopRequireDefault(require("./Shortcuts")); var _core = require("./core"); var _excluded = ["allowClear", "className", "closeOnSelect", "defaultValue", "defaultVisible", "disabled", "disabledDays", "dropdownRender", "hour", "intent", "maxDate", "minDate", "onChange", "onClick", "onVisibleChange", "placeholder", "placement", "popoverProps", "renderDay", "shortcuts", "size", "theme", "triggerElement", "value", "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 _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 DayPicker = _dayPickerReact["default"].__esModule ? _dayPickerReact["default"]["default"] : _dayPickerReact["default"]; var prefix = "adui-date"; var noop = function noop() {}; var DatePicker = (0, _react.forwardRef)(function (_ref, ref) { var allowClear = _ref.allowClear, className = _ref.className, closeOnSelect = _ref.closeOnSelect, defaultValue = _ref.defaultValue, defaultVisible = _ref.defaultVisible, disabled = _ref.disabled, disabledDays = _ref.disabledDays, dropdownRender = _ref.dropdownRender, _ref$hour = _ref.hour, hour = _ref$hour === void 0 ? 12 : _ref$hour, intent = _ref.intent, maxDate = _ref.maxDate, minDate = _ref.minDate, onChange = _ref.onChange, _onClick = _ref.onClick, onVisibleChange = _ref.onVisibleChange, placeholder = _ref.placeholder, placement = _ref.placement, popoverProps = _ref.popoverProps, _renderDay = _ref.renderDay, shortcuts = _ref.shortcuts, sizeProp = _ref.size, theme = _ref.theme, triggerElement = _ref.triggerElement, valueProp = _ref.value, visibleProp = _ref.visible, otherProps = _objectWithoutProperties(_ref, _excluded); var _useState = (0, _react.useState)(function () { if (valueProp !== null) { return valueProp; } if (defaultValue !== null) { return defaultValue; } return undefined; }), _useState2 = _slicedToArray(_useState, 2), month = _useState2[0], setMonth = _useState2[1]; var _useState3 = (0, _react.useState)(function () { if (valueProp !== null) { return valueProp; } if (defaultValue !== null) { return defaultValue; } return undefined; }), _useState4 = _slicedToArray(_useState3, 2), selectedDay = _useState4[0], setSelectedDay = _useState4[1]; var _useState5 = (0, _react.useState)(function () { if (valueProp !== null) { return (0, _core.convertDateToString)(valueProp); } if (defaultValue !== null) { return (0, _core.convertDateToString)(defaultValue); } return ""; }), _useState6 = _slicedToArray(_useState5, 2), value = _useState6[0], setValue = _useState6[1]; var _useState7 = (0, _react.useState)(function () { if (visibleProp !== null && visibleProp !== undefined) { return visibleProp; } if (defaultVisible !== null && defaultVisible !== undefined) { return defaultVisible; } return false; }), _useState8 = _slicedToArray(_useState7, 2), visible = _useState8[0], setVisible = _useState8[1]; var _useState9 = (0, _react.useState)("out"), _useState10 = _slicedToArray(_useState9, 2), clearIconState = _useState10[0], setClearIconState = _useState10[1]; var nextClickInsideRef = (0, _react.useRef)(false); if (valueProp !== null && selectedDay !== valueProp) { setMonth(valueProp); setSelectedDay(valueProp); setValue((0, _core.convertDateToString)(valueProp)); } if (visibleProp !== null && visible !== !!visibleProp) { setVisible(!!visibleProp); } var inputRef = (0, _react.useRef)(null); var _useContext = (0, _react.useContext)(_configProvider.ConfigContext), sizeContext = _useContext.size; var size = (0, _configProvider.getComputedSize)(sizeProp, sizeContext); var classSet = (0, _classnames["default"])(className, "".concat(prefix, "-dateBase"), "".concat(prefix, "-").concat(size)); var shortcutsEnabled = shortcuts && shortcuts.length > 0; var isDayDisabled = function isDayDisabled(day) { return disabledDays && disabledDays(day) || _dayPickerReact.DateUtils.isDayBefore(day, minDate) || _dayPickerReact.DateUtils.isDayAfter(day, maxDate); }; var handleVisibleChange = function handleVisibleChange(bool) { if (disabled) { return; } setTimeout(function () { if (nextClickInsideRef.current === true) { nextClickInsideRef.current = false; if (!bool) { return; } } var newVal = (0, _core.convertDateToString)(selectedDay); if (!bool && value !== newVal) { setValue(newVal); } if (onVisibleChange) { onVisibleChange(bool); } if (visibleProp === null) { setVisible(bool); } }, 0); }; var handleDayClick = function handleDayClick(selectedDayNew, _ref2) { var bool = _ref2.disabled; if (isDayDisabled(selectedDayNew)) { return; } selectedDayNew.setHours(hour, 0, 0, 0); if (!bool) { if (closeOnSelect) { setTimeout(function () { if (onVisibleChange) { onVisibleChange(false); } if (visibleProp === null) { setVisible(false); } }, 100); } if (!_dayPickerReact.DateUtils.isSameDay(selectedDayNew, selectedDay)) { if (valueProp === null) { setSelectedDay(selectedDayNew); setValue((0, _core.convertDateToString)(selectedDayNew)); } if (onChange) { onChange(selectedDayNew); } } } }; var handleInputChange = function handleInputChange(_ref3) { var val = _ref3.target.value; setValue(val); if (val.trim() === "") { if (valueProp === null) { setSelectedDay(null); } if (onChange) { onChange(""); } } else if ((0, _core.isLegalDateString)(val)) { var newDate = new Date(val); newDate.setHours(hour, 0, 0, 0); if (!isDayDisabled(newDate) && !_dayPickerReact.DateUtils.isSameDay(newDate, selectedDay)) { if (valueProp === null) { setSelectedDay(newDate); setValue((0, _core.convertDateToString)(newDate)); if (!_dayPickerReact.DateUtils.isSameMonth(newDate, selectedDay)) { setMonth(newDate); } } if (onChange) { onChange(newDate); } } } }; var handleInputFocus = function handleInputFocus() { if (!visible) { if (onVisibleChange) { onVisibleChange(true); } if (visibleProp === null) { setVisible(true); } } }; var handleInputKeyDown = function handleInputKeyDown(_ref4) { var key = _ref4.key; var keys = ["Tab", "Escape", "Enter"]; if (keys.includes(key)) { var _inputRef$current; handleVisibleChange(false); (_inputRef$current = inputRef.current) === null || _inputRef$current === void 0 || _inputRef$current.input.blur(); } }; var handleMonthChange = function handleMonthChange(date) { var newDate = date; if (minDate && _dayPickerReact.DateUtils.isDayBefore(date, minDate)) { newDate.setMonth(minDate.getMonth()); } else if (maxDate && _dayPickerReact.DateUtils.isDayAfter(date, maxDate)) { newDate.setMonth(maxDate.getMonth()); } setMonth(newDate); }; (0, _react.useImperativeHandle)(ref, function () { return { input: inputRef.current, handleDayClick: handleDayClick, handleVisibleChange: handleVisibleChange }; }); var popupElement = _react["default"].createElement("div", { className: "".concat(prefix, "-popup") }, shortcutsEnabled && _react["default"].createElement(_Shortcuts["default"], { onShortcutClick: function onShortcutClick(valueShortcut) { handleDayClick(valueShortcut, {}); setMonth(valueShortcut); }, selectedDay: selectedDay, shortcuts: shortcuts }), _react["default"].createElement(DayPicker, { disabledDays: isDayDisabled, fromMonth: minDate, toMonth: maxDate, canChangeMonth: true, classNames: _classNames["default"], month: month || undefined, months: _core.MONTHS, weekdaysLong: _core.WEEKDAYS_LONG, weekdaysShort: _core.WEEKDAYS_SHORT, selectedDays: selectedDay || undefined, navbarElement: _react["default"].createElement(_Navbar["default"], _extends({ maxDate: maxDate, minDate: minDate }, _dayPickerReact.NavbarElementProps)), captionElement: _react["default"].createElement(_Caption["default"], _extends({ maxDate: maxDate, minDate: minDate, onDateChange: handleMonthChange }, _dayPickerReact.CaptionElementProps)), onDayClick: handleDayClick, onMonthChange: handleMonthChange, renderDay: function renderDay(day) { return _react["default"].createElement("div", { className: "".concat(prefix, "-cell") }, _renderDay && _renderDay(day) ? _renderDay(day) : day.getDate()); } })); var inputElement = _react["default"].createElement(_input["default"], _extends({ className: classSet, cleaveOptions: { blocks: [4, 2, 2], delimiter: "-" }, disabled: disabled, intent: intent, onChange: handleInputChange, onFocus: handleInputFocus, onKeyDown: handleInputKeyDown, onClick: function onClick() { if (_onClick) { _onClick(); } nextClickInsideRef.current = true; }, placeholder: placeholder, ref: inputRef, rightElement: allowClear ? _react["default"].createElement(_icon["default"], { icon: clearIconState === "in" ? "cancel-circle" : "calendar-outlined", onMouseEnter: function onMouseEnter() { if (value) { setClearIconState("in"); } }, onMouseLeave: function onMouseLeave() { setClearIconState("out"); }, onClick: function onClick(e) { if (value) { e.stopPropagation(); if (valueProp === null) { setSelectedDay(""); setValue(""); } if (onChange) { onChange(""); } if (visible) { if (onVisibleChange) { onVisibleChange(false); } if (visibleProp === null) { setVisible(false); } } setTimeout(function () { nextClickInsideRef.current = false; }); } } }) : _react["default"].createElement(_icon["default"], { icon: "calendar-outlined", onClick: function onClick() { setTimeout(function () { nextClickInsideRef.current = false; }); } }), size: size, theme: theme, value: value }, otherProps)); return _react["default"].createElement(_popover["default"], _extends({ arrowed: false, onVisibleChange: handleVisibleChange, placement: placement, popup: _react["default"].createElement(_react["default"].Fragment, null, dropdownRender && dropdownRender(popupElement) ? dropdownRender(popupElement) : popupElement), popupStyle: { maxWidth: shortcutsEnabled ? "342px" : "242px", width: shortcutsEnabled ? "342px" : "242px" }, trigger: "click", visible: visible }, popoverProps), triggerElement || inputElement); }); DatePicker.displayName = "DatePicker"; DatePicker.RangePicker = _RangePicker["default"]; DatePicker.propTypes = { allowClear: _propTypes["default"].bool, className: _propTypes["default"].string, closeOnSelect: _propTypes["default"].bool, defaultValue: _propTypes["default"].any, defaultVisible: _propTypes["default"].bool, disabled: _propTypes["default"].bool, disabledDays: _propTypes["default"].func, dropdownRender: _propTypes["default"].any, hour: _propTypes["default"].number, intent: _propTypes["default"].oneOf(["normal", "primary", "success", "warning", "danger"]), maxDate: _propTypes["default"].instanceOf(Date), minDate: _propTypes["default"].instanceOf(Date), onChange: _propTypes["default"].func, onVisibleChange: _propTypes["default"].func, placeholder: _propTypes["default"].string, placement: _propTypes["default"].oneOf(["top", "left", "right", "bottom", "topLeft", "topRight", "bottomLeft", "bottomRight", "leftTop", "leftBottom", "rightTop", "rightBottom"]), popoverProps: _propTypes["default"].object, renderDay: _propTypes["default"].any, shortcuts: _propTypes["default"].any, size: _propTypes["default"].oneOf(["mini", "small", "medium", "large"]), theme: _propTypes["default"].oneOf([null, "light"]), triggerElement: _propTypes["default"].any, value: _propTypes["default"].any, visible: _propTypes["default"].bool }; DatePicker.defaultProps = { allowClear: false, className: "", closeOnSelect: false, defaultValue: null, defaultVisible: null, disabled: false, disabledDays: noop, dropdownRender: undefined, hour: 12, intent: "normal", maxDate: (0, _core.getDefaultMaxDate)(), minDate: (0, _core.getDefaultMinDate)(), onChange: noop, onVisibleChange: noop, placeholder: "选择日期", placement: "bottomLeft", popoverProps: {}, renderDay: undefined, shortcuts: undefined, size: "small", theme: null, triggerElement: undefined, value: null, visible: null }; var _default = exports["default"] = DatePicker; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcHJvcFR5cGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jbGFzc25hbWVzIiwiX2RheVBpY2tlclJlYWN0IiwiX1JhbmdlUGlja2VyIiwiX2NsYXNzTmFtZXMiLCJfY29uZmlnUHJvdmlkZXIiLCJfaWNvbiIsIl9pbnB1dCIsIl9wb3BvdmVyIiwiX0NhcHRpb24iLCJfTmF2YmFyIiwiX1Nob3J0Y3V0cyIsIl9jb3JlIiwiX2V4Y2x1ZGVkIiwiZSIsIl9fZXNNb2R1bGUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJXZWFrTWFwIiwiciIsInQiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiX2V4dGVuZHMiLCJhc3NpZ24iLCJiaW5kIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXBwbHkiLCJfc2xpY2VkVG9BcnJheSIsIl9hcnJheVdpdGhIb2xlcyIsIl9pdGVyYWJsZVRvQXJyYXlMaW1pdCIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVJlc3QiLCJUeXBlRXJyb3IiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJBcnJheSIsImZyb20iLCJ0ZXN0IiwibCIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiZiIsIm8iLCJuZXh0IiwiZG9uZSIsInB1c2giLCJ2YWx1ZSIsImlzQXJyYXkiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsImdldE93blByb3BlcnR5U3ltYm9scyIsInMiLCJpbmNsdWRlcyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwiRGF5UGlja2VyIiwiRFBSIiwicHJlZml4Iiwibm9vcCIsIkRhdGVQaWNrZXIiLCJmb3J3YXJkUmVmIiwiX3JlZiIsInJlZiIsImFsbG93Q2xlYXIiLCJjbGFzc05hbWUiLCJjbG9zZU9uU2VsZWN0IiwiZGVmYXVsdFZhbHVlIiwiZGVmYXVsdFZpc2libGUiLCJkaXNhYmxlZCIsImRpc2FibGVkRGF5cyIsImRyb3Bkb3duUmVuZGVyIiwiX3JlZiRob3VyIiwiaG91ciIsImludGVudCIsIm1heERhdGUiLCJtaW5EYXRlIiwib25DaGFuZ2UiLCJvbkNsaWNrIiwib25WaXNpYmxlQ2hhbmdlIiwicGxhY2Vob2xkZXIiLCJwbGFjZW1lbnQiLCJwb3BvdmVyUHJvcHMiLCJyZW5kZXJEYXkiLCJzaG9ydGN1dHMiLCJzaXplUHJvcCIsInNpemUiLCJ0aGVtZSIsInRyaWdnZXJFbGVtZW50IiwidmFsdWVQcm9wIiwidmlzaWJsZVByb3AiLCJ2aXNpYmxlIiwib3RoZXJQcm9wcyIsIl91c2VTdGF0ZSIsInVzZVN0YXRlIiwidW5kZWZpbmVkIiwiX3VzZVN0YXRlMiIsIm1vbnRoIiwic2V0TW9udGgiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsInNlbGVjdGVkRGF5Iiwic2V0U2VsZWN0ZWREYXkiLCJfdXNlU3RhdGU1IiwiY29udmVydERhdGVUb1N0cmluZyIsIl91c2VTdGF0ZTYiLCJzZXRWYWx1ZSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4Iiwic2V0VmlzaWJsZSIsIl91c2VTdGF0ZTkiLCJfdXNlU3RhdGUxMCIsImNsZWFySWNvblN0YXRlIiwic2V0Q2xlYXJJY29uU3RhdGUiLCJuZXh0Q2xpY2tJbnNpZGVSZWYiLCJ1c2VSZWYiLCJpbnB1dFJlZiIsIl91c2VDb250ZXh0IiwidXNlQ29udGV4dCIsIkNvbmZpZ0NvbnRleHQiLCJzaXplQ29udGV4dCIsImdldENvbXB1dGVkU2l6ZSIsImNsYXNzU2V0IiwiY2xhc3NOYW1lcyIsImNvbmNhdCIsInNob3J0Y3V0c0VuYWJsZWQiLCJpc0RheURpc2FibGVkIiwiZGF5IiwiRGF0ZVV0aWxzIiwiaXNEYXlCZWZvcmUiLCJpc0RheUFmdGVyIiwiaGFuZGxlVmlzaWJsZUNoYW5nZSIsImJvb2wiLCJzZXRUaW1lb3V0IiwiY3VycmVudCIsIm5ld1ZhbCIsImhhbmRsZURheUNsaWNrIiwic2VsZWN0ZWREYXlOZXciLCJfcmVmMiIsInNldEhvdXJzIiwiaXNTYW1lRGF5IiwiaGFuZGxlSW5wdXRDaGFuZ2UiLCJfcmVmMyIsInZhbCIsInRhcmdldCIsInRyaW0iLCJpc0xlZ2FsRGF0ZVN0cmluZyIsIm5ld0RhdGUiLCJEYXRlIiwiaXNTYW1lTW9udGgiLCJoYW5kbGVJbnB1dEZvY3VzIiwiaGFuZGxlSW5wdXRLZXlEb3duIiwiX3JlZjQiLCJrZXkiLCJrZXlzIiwiX2lucHV0UmVmJGN1cnJlbnQiLCJpbnB1dCIsImJsdXIiLCJoYW5kbGVNb250aENoYW5nZSIsImRhdGUiLCJnZXRNb250aCIsInVzZUltcGVyYXRpdmVIYW5kbGUiLCJwb3B1cEVsZW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwib25TaG9ydGN1dENsaWNrIiwidmFsdWVTaG9ydGN1dCIsImZyb21Nb250aCIsInRvTW9udGgiLCJjYW5DaGFuZ2VNb250aCIsInN0eWxlcyIsIm1vbnRocyIsIk1PTlRIUyIsIndlZWtkYXlzTG9uZyIsIldFRUtEQVlTX0xPTkciLCJ3ZWVrZGF5c1Nob3J0IiwiV0VFS0RBWVNfU0hPUlQiLCJzZWxlY3RlZERheXMiLCJuYXZiYXJFbGVtZW50IiwiTmF2YmFyRWxlbWVudFByb3BzIiwiY2FwdGlvbkVsZW1lbnQiLCJvbkRhdGVDaGFuZ2UiLCJDYXB0aW9uRWxlbWVudFByb3BzIiwib25EYXlDbGljayIsIm9uTW9udGhDaGFuZ2UiLCJnZXREYXRlIiwiaW5wdXRFbGVtZW50IiwiY2xlYXZlT3B0aW9ucyIsImJsb2NrcyIsImRlbGltaXRlciIsIm9uRm9jdXMiLCJvbktleURvd24iLCJyaWdodEVsZW1lbnQiLCJpY29uIiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwic3RvcFByb3BhZ2F0aW9uIiwiYXJyb3dlZCIsInBvcHVwIiwiRnJhZ21lbnQiLCJwb3B1cFN0eWxlIiwibWF4V2lkdGgiLCJ3aWR0aCIsInRyaWdnZXIiLCJkaXNwbGF5TmFtZSIsIlJhbmdlUGlja2VyIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwic3RyaW5nIiwiYW55IiwiZnVuYyIsIm51bWJlciIsIm9uZU9mIiwiaW5zdGFuY2VPZiIsIm9iamVjdCIsImRlZmF1bHRQcm9wcyIsImdldERlZmF1bHRNYXhEYXRlIiwiZ2V0RGVmYXVsdE1pbkRhdGUiLCJfZGVmYXVsdCIsImV4cG9ydHMiXSwic291cmNlcyI6WyIuLi8uLi9jb21wb25lbnRzL2RhdGUtcGlja2VyL0RhdGVQaWNrZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1kdXBsaWNhdGVzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuaW1wb3J0IFJlYWN0LCB7XG4gIGZvcndhcmRSZWYsXG4gIHVzZUNvbnRleHQsXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUsXG4gIHVzZVJlZixcbiAgdXNlU3RhdGUsXG59IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCJcbmltcG9ydCBEUFIgZnJvbSBcImRheS1waWNrZXItcmVhY3RcIlxuaW1wb3J0IHtcbiAgQ2FwdGlvbkVsZW1lbnRQcm9wcyxcbiAgRGF0ZVV0aWxzLFxuICBOYXZiYXJFbGVtZW50UHJvcHMsXG59IGZyb20gXCJkYXktcGlja2VyLXJlYWN0XCJcbmltcG9ydCBSYW5nZVBpY2tlciBmcm9tIFwiLi9SYW5nZVBpY2tlclwiXG5pbXBvcnQgXCIuL3N0eWxlXCJcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vY2xhc3NOYW1lc1wiXG5pbXBvcnQgeyBDb25maWdDb250ZXh0LCBnZXRDb21wdXRlZFNpemUgfSBmcm9tIFwiLi4vY29uZmlnLXByb3ZpZGVyXCJcbmltcG9ydCBJY29uIGZyb20gXCIuLi9pY29uXCJcbmltcG9ydCBJbnB1dCBmcm9tIFwiLi4vaW5wdXRcIlxuaW1wb3J0IHsgUGxhY2VtZW50IH0gZnJvbSBcIi4uL3BvcC10cmlnZ2VyXCJcbmltcG9ydCBQb3BvdmVyLCB7IElQb3BvdmVyUHJvcHMgfSBmcm9tIFwiLi4vcG9wb3ZlclwiXG5pbXBvcnQgQ2FwdGlvbiBmcm9tIFwiLi9DYXB0aW9uXCJcbmltcG9ydCBOYXZiYXIgZnJvbSBcIi4vTmF2YmFyXCJcbmltcG9ydCBTaG9ydGN1dHMgZnJvbSBcIi4vU2hvcnRjdXRzXCJcbmltcG9ydCB7XG4gIE1PTlRIUyxcbiAgV0VFS0RBWVNfTE9ORyxcbiAgV0VFS0RBWVNfU0hPUlQsXG4gIGdldERlZmF1bHRNYXhEYXRlLFxuICBnZXREZWZhdWx0TWluRGF0ZSxcbiAgaXNMZWdhbERhdGVTdHJpbmcsXG4gIGNvbnZlcnREYXRlVG9TdHJpbmcsXG59IGZyb20gXCIuL2NvcmVcIlxuXG5jb25zdCBEYXlQaWNrZXIgPSBEUFIuX19lc01vZHVsZSA/IERQUi5kZWZhdWx0IDogRFBSXG5jb25zdCBwcmVmaXggPSBcImFkdWktZGF0ZVwiXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuZXhwb3J0IGludGVyZmFjZSBJRGF0ZVBpY2tlclByb3BzIHtcbiAgW2tleTogc3RyaW5nXTogYW55XG4gIC8qKlxuICAgKiDmmK/lkKbmlK/mjIHmuIXpmaRcbiAgICovXG4gIGFsbG93Q2xlYXI/OiBib29sZWFuXG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI1cbiAgICovXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICAvKipcbiAgICog5piv5ZCm5Zyo6YCJ5oup5ZCO77yM5raI5aSxIFBvcG92ZXJcbiAgICovXG4gIGNsb3NlT25TZWxlY3Q/OiBib29sZWFuXG4gIC8qKlxuICAgKiDlhoXpg6jpqbHliqjvvJrpu5jorqTml6XmnJ9cbiAgICovXG4gIGRlZmF1bHRWYWx1ZT86IERhdGUgfCBcIlwiIHwgbnVsbFxuICAvKipcbiAgICog5YaF6YOo6amx5Yqo77ya6buY6K6k5piv5ZCm5pi+56S65LiL5ouJXG4gICAqL1xuICBkZWZhdWx0VmlzaWJsZT86IGJvb2xlYW4gfCBudWxsXG4gIC8qKlxuICAgKiDmmK/lkKbnpoHnlKhcbiAgICovXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICAvKipcbiAgICog56aB5q2i6YCJ5oup55qE5aSp77yMZGF5ID0+IGJvb2zvvIzmr4/kuIDlpKnmmK/nmoTml7bpl7TkuLogMTI6MDA6MDDvvIzov5nkuIDkuKrmmK/nlLEgZGF5LXBpY2tlci1yZWFjdCDlhrPlrprnmoTvvJtcbiAgICog5q+U6L6D5pel5pyf55qE5pe25YCZ5bCP5b+D6L+Z5LiA54K544CCXG4gICAqL1xuICBkaXNhYmxlZERheXM/OiAoZGF0ZTogRGF0ZSkgPT4gYm9vbGVhbiB8IHZvaWRcbiAgLyoqXG4gICAqIOiHquWumuS5ieS4i+aLieahhuWGheWuuVxuICAgKi9cbiAgZHJvcGRvd25SZW5kZXI/OiAoZWxlbWVudDogSlNYLkVsZW1lbnQpID0+IFJlYWN0LlJlYWN0Tm9kZVxuICAvKipcbiAgICogMjAyMjA0MDc6IOm7mOiupOeahOaXpeacn+aXtumXtOS4uiAxMiDngrnvvIzlj6/ku6Xkvb/nlKjmraQgUHJvcCDkv67mlLnlsI/ml7ZcbiAgICovXG4gIGhvdXI/OiBudW1iZXJcbiAgLyoqXG4gICAqIOiuvue9rui+k+WFpeahhuexu+Wei1xuICAgKi9cbiAgaW50ZW50PzogXCJub3JtYWxcIiB8IFwicHJpbWFyeVwiIHwgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIiB8IFwiZGFuZ2VyXCJcbiAgLyoqXG4gICAqIOacgOWkp+mZkOWItuaXpeacn1xuICAgKi9cbiAgbWF4RGF0ZT86IERhdGUgfCBudWxsXG4gIC8qKlxuICAgKiDmnIDlsI/pmZDliLbml6XmnJ9cbiAgICovXG4gIG1pbkRhdGU/OiBEYXRlIHwgbnVsbFxuICAvKipcbiAgICog5pel5pyf5pS55Y+Y5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2hhbmdlPzogKGRhdGU/OiBEYXRlIHwgXCJcIiB8IG51bGwpID0+IHZvaWRcbiAgLyoqXG4gICAqIOaYvuekuueKtuaAgeWPkeeUn+WPmOWMluaXtueahGhhbmRsZXJcbiAgICovXG4gIG9uVmlzaWJsZUNoYW5nZT86ICh2aXNpYmxlOiBib29sZWFuKSA9PiB2b2lkXG4gIC8qKlxuICAgKiDljaDkvY3lrZfnrKZcbiAgICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nXG4gIC8qKlxuICAgKiDlvLnlh7rlsYLkvY3nva5cbiAgICovXG4gIHBsYWNlbWVudD86IFBsYWNlbWVudFxuICAvKipcbiAgICog5Lyg5YWlIFBvcG92ZXIg55qEIHByb3BzXG4gICAqL1xuICBwb3BvdmVyUHJvcHM/OiBJUG9wb3ZlclByb3BzXG4gIC8qKlxuICAgKiDoh6rlrprkuYnlpoLkvZXmuLLmn5Pmr4/kuKrml6XmnJ9cbiAgICovXG4gIHJlbmRlckRheT86IChkYXk6IERhdGUpID0+IFJlYWN0LlJlYWN0Tm9kZVxuICAvKipcbiAgICog5b+r5o236YCJ5oup6aG577yM5qC85byP77yaW3sgbGFiZWw6IFwi56WW5Zu955Sf5pelXCIsIHZhbHVlOiBuZXcgRGF0ZShcIjIwMjItMTAtMDFcIikgfV1cbiAgICovXG4gIHNob3J0Y3V0cz86IHtcbiAgICAvKipcbiAgICAgKiDor6XpobnnmoTmloflrZdcbiAgICAgKi9cbiAgICBsYWJlbDogUmVhY3QuUmVhY3ROb2RlXG4gICAgLyoqXG4gICAgICog6K+l6aG555qE5pel5pyfXG4gICAgICovXG4gICAgdmFsdWU6IERhdGVcbiAgfVtdXG4gIC8qKlxuICAgKiDorr7nva7lsLrlr7hcbiAgICovXG4gIHNpemU/OiBcIm1pbmlcIiB8IFwic21hbGxcIiB8IFwibWVkaXVtXCIgfCBcImxhcmdlXCJcbiAgLyoqXG4gICAqIOiuvue9ruS4u+mimFxuICAgKi9cbiAgdGhlbWU/OiBudWxsIHwgXCJsaWdodFwiXG4gIC8qKlxuICAgKiDoh6rlrprkuYnop6blj5HkuIvmi4nnmoTlhYPntKBcbiAgICovXG4gIHRyaWdnZXJFbGVtZW50PzogSlNYLkVsZW1lbnRcbiAgLyoqXG4gICAqIOWklumDqOaOp+WItu+8muW9k+WJjeaXpeacn1xuICAgKi9cbiAgdmFsdWU/OiBEYXRlIHwgXCJcIiB8IG51bGxcbiAgLyoqXG4gICAqIOWklumDqOaOp+WItu+8muaYr+WQpuaYvuekuuS4i+aLiemAieaLqVxuICAgKi9cbiAgdmlzaWJsZT86IGJvb2xlYW4gfCBudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSURhdGVQaWNrZXJcbiAgZXh0ZW5kcyBSZWFjdC5Gb3J3YXJkUmVmRXhvdGljQ29tcG9uZW50PFxuICAgIElEYXRlUGlja2VyUHJvcHMgJiBSZWFjdC5SZWZBdHRyaWJ1dGVzPGFueT5cbiAgPiB7XG4gIFJhbmdlUGlja2VyOiB0eXBlb2YgUmFuZ2VQaWNrZXJcbn1cblxuLyoqXG4gKiDml6XmnJ/pgInmi6nlmajnlKjkuo7kuobop6PlvZPliY3lt7LpgInml6XmnJ/vvIzpgInmi6nmiJbovpPlhaXpnIDopoHnmoTml6XmnJ/jgIHml6XmnJ/ojIPlm7TnrYnjgIJcbiAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgRGF0ZVBpY2tlcjogSURhdGVQaWNrZXIgPSBmb3J3YXJkUmVmKFxuICAoXG4gICAge1xuICAgICAgYWxsb3dDbGVhcixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNsb3NlT25TZWxlY3QsXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkZWZhdWx0VmlzaWJsZSxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZGlzYWJsZWREYXlzLFxuICAgICAgZHJvcGRvd25SZW5kZXIsXG4gICAgICBob3VyID0gMTIsXG4gICAgICBpbnRlbnQsXG4gICAgICBtYXhEYXRlLFxuICAgICAgbWluRGF0ZSxcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25DbGljayxcbiAgICAgIG9uVmlzaWJsZUNoYW5nZSxcbiAgICAgIHBsYWNlaG9sZGVyLFxuICAgICAgcGxhY2VtZW50LFxuICAgICAgcG9wb3ZlclByb3BzLFxuICAgICAgcmVuZGVyRGF5LFxuICAgICAgc2hvcnRjdXRzLFxuICAgICAgc2l6ZTogc2l6ZVByb3AsXG4gICAgICB0aGVtZSxcbiAgICAgIHRyaWdnZXJFbGVtZW50LFxuICAgICAgdmFsdWU6IHZhbHVlUHJvcCxcbiAgICAgIHZpc2libGU6IHZpc2libGVQcm9wLFxuICAgICAgLi4ub3RoZXJQcm9wc1xuICAgIH06IElEYXRlUGlja2VyUHJvcHMsXG4gICAgcmVmXG4gICkgPT4ge1xuICAgIGNvbnN0IFttb250aCwgc2V0TW9udGhdID0gdXNlU3RhdGU8RGF0ZSB8IFwiXCIgfCB1bmRlZmluZWQ+KCgpID0+IHtcbiAgICAgIGlmICh2YWx1ZVByb3AgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlUHJvcFxuICAgICAgfVxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlXG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgfSlcbiAgICBjb25zdCBbc2VsZWN0ZWREYXksIHNldFNlbGVjdGVkRGF5XSA9IHVzZVN0YXRlPFxuICAgICAgRGF0ZSB8IFwiXCIgfCBudWxsIHwgdW5kZWZpbmVkXG4gICAgPigoKSA9PiB7XG4gICAgICBpZiAodmFsdWVQcm9wICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVByb3BcbiAgICAgIH1cbiAgICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgIH0pXG4gICAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZTxzdHJpbmc+KCgpID0+IHtcbiAgICAgIGlmICh2YWx1ZVByb3AgIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnREYXRlVG9TdHJpbmcodmFsdWVQcm9wKVxuICAgICAgfVxuICAgICAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gY29udmVydERhdGVUb1N0cmluZyhkZWZhdWx0VmFsdWUpXG4gICAgICB9XG4gICAgICByZXR1cm4gXCJcIlxuICAgIH0pXG4gICAgY29uc3QgW3Zpc2libGUsIHNldFZpc2libGVdID0gdXNlU3RhdGU8Ym9vbGVhbj4oKCkgPT4ge1xuICAgICAgaWYgKHZpc2libGVQcm9wICE9PSBudWxsICYmIHZpc2libGVQcm9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHZpc2libGVQcm9wXG4gICAgICB9XG4gICAgICBpZiAoZGVmYXVsdFZpc2libGUgIT09IG51bGwgJiYgZGVmYXVsdFZpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZGVmYXVsdFZpc2libGVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0pXG4gICAgY29uc3QgW2NsZWFySWNvblN0YXRlLCBzZXRDbGVhckljb25TdGF0ZV0gPSB1c2VTdGF0ZTxcImluXCIgfCBcIm91dFwiPihcIm91dFwiKVxuICAgIGNvbnN0IG5leHRDbGlja0luc2lkZVJlZiA9IHVzZVJlZihmYWxzZSlcblxuICAgIC8vIOebuOW9k+S6jueUn+WRveWRqOacnyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcbiAgICBpZiAodmFsdWVQcm9wICE9PSBudWxsICYmIHNlbGVjdGVkRGF5ICE9PSB2YWx1ZVByb3ApIHtcbiAgICAgIHNldE1vbnRoKHZhbHVlUHJvcClcbiAgICAgIHNldFNlbGVjdGVkRGF5KHZhbHVlUHJvcClcbiAgICAgIHNldFZhbHVlKGNvbnZlcnREYXRlVG9TdHJpbmcodmFsdWVQcm9wKSlcbiAgICB9XG4gICAgaWYgKHZpc2libGVQcm9wICE9PSBudWxsICYmIHZpc2libGUgIT09ICEhdmlzaWJsZVByb3ApIHtcbiAgICAgIHNldFZpc2libGUoISF2aXNpYmxlUHJvcClcbiAgICB9XG5cbiAgICBjb25zdCBpbnB1dFJlZiA9IHVzZVJlZjxhbnk+KG51bGwpXG5cbiAgICBjb25zdCB7IHNpemU6IHNpemVDb250ZXh0IH0gPSB1c2VDb250ZXh0KENvbmZpZ0NvbnRleHQpXG4gICAgY29uc3Qgc2l6ZSA9IGdldENvbXB1dGVkU2l6ZShzaXplUHJvcCwgc2l6ZUNvbnRleHQpXG5cbiAgICBjb25zdCBjbGFzc1NldCA9IGNsYXNzTmFtZXMoXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBgJHtwcmVmaXh9LWRhdGVCYXNlYCxcbiAgICAgIGAke3ByZWZpeH0tJHtzaXplfWBcbiAgICApXG5cbiAgICBjb25zdCBzaG9ydGN1dHNFbmFibGVkID0gc2hvcnRjdXRzICYmIHNob3J0Y3V0cy5sZW5ndGggPiAwXG5cbiAgICBjb25zdCBpc0RheURpc2FibGVkID0gKGRheTogRGF0ZSkgPT4ge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKGRpc2FibGVkRGF5cyAmJiBkaXNhYmxlZERheXMoZGF5KSkgfHxcbiAgICAgICAgRGF0ZVV0aWxzLmlzRGF5QmVmb3JlKGRheSwgbWluRGF0ZSkgfHxcbiAgICAgICAgRGF0ZVV0aWxzLmlzRGF5QWZ0ZXIoZGF5LCBtYXhEYXRlKVxuICAgICAgKVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZVZpc2libGVDaGFuZ2UgPSAoYm9vbDogYm9vbGVhbikgPT4ge1xuICAgICAgaWYgKGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmIChuZXh0Q2xpY2tJbnNpZGVSZWYuY3VycmVudCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIG5leHRDbGlja0luc2lkZVJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICAvLyDlsZXlvIDml7bvvIzlpoLmnpzlnKjlhoXpg6jlhYPntKDngrnlh7vvvIzliJnkuI3lgZrpu5jorqTnmoTmlLbotbfmk43kvZxcbiAgICAgICAgICBpZiAoIWJvb2wpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdWYWwgPSBjb252ZXJ0RGF0ZVRvU3RyaW5nKHNlbGVjdGVkRGF5KVxuICAgICAgICBpZiAoIWJvb2wgJiYgdmFsdWUgIT09IG5ld1ZhbCkge1xuICAgICAgICAgIHNldFZhbHVlKG5ld1ZhbClcbiAgICAgICAgfVxuICAgICAgICBpZiAob25WaXNpYmxlQ2hhbmdlKSB7XG4gICAgICAgICAgb25WaXNpYmxlQ2hhbmdlKGJvb2wpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZpc2libGVQcm9wID09PSBudWxsKSB7XG4gICAgICAgICAgc2V0VmlzaWJsZShib29sKVxuICAgICAgICB9XG4gICAgICB9LCAwKVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZURheUNsaWNrID0gKFxuICAgICAgc2VsZWN0ZWREYXlOZXc6IERhdGUsXG4gICAgICB7IGRpc2FibGVkOiBib29sIH06IHsgW2tleTogc3RyaW5nXTogYW55IH1cbiAgICApID0+IHtcbiAgICAgIGlmIChpc0RheURpc2FibGVkKHNlbGVjdGVkRGF5TmV3KSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHNlbGVjdGVkRGF5TmV3LnNldEhvdXJzKGhvdXIsIDAsIDAsIDApXG4gICAgICBpZiAoIWJvb2wpIHtcbiAgICAgICAgaWYgKGNsb3NlT25TZWxlY3QpIHtcbiAgICAgICAgICAvLyDlu7bov5/mmK/kuLrkuoborqnnirbmgIHnmoTlj5jljJblnKjop4bop4nkuIrlhYjooqvmjqXlj5dcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChvblZpc2libGVDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgb25WaXNpYmxlQ2hhbmdlKGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZpc2libGVQcm9wID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHNldFZpc2libGUoZmFsc2UpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSwgMTAwKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFEYXRlVXRpbHMuaXNTYW1lRGF5KHNlbGVjdGVkRGF5TmV3LCBzZWxlY3RlZERheSkpIHtcbiAgICAgICAgICBpZiAodmFsdWVQcm9wID09PSBudWxsKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZERheShzZWxlY3RlZERheU5ldylcbiAgICAgICAgICAgIHNldFZhbHVlKGNvbnZlcnREYXRlVG9TdHJpbmcoc2VsZWN0ZWREYXlOZXcpKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgICAgIG9uQ2hhbmdlKHNlbGVjdGVkRGF5TmV3KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUlucHV0Q2hhbmdlID0gKHtcbiAgICAgIHRhcmdldDogeyB2YWx1ZTogdmFsIH0sXG4gICAgfTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIHNldFZhbHVlKHZhbClcbiAgICAgIGlmICh2YWwudHJpbSgpID09PSBcIlwiKSB7XG4gICAgICAgIGlmICh2YWx1ZVByb3AgPT09IG51bGwpIHtcbiAgICAgICAgICBzZXRTZWxlY3RlZERheShudWxsKVxuICAgICAgICB9XG4gICAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICAgIG9uQ2hhbmdlKFwiXCIpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNMZWdhbERhdGVTdHJpbmcodmFsKSkge1xuICAgICAgICBjb25zdCBuZXdEYXRlID0gbmV3IERhdGUodmFsKVxuICAgICAgICBuZXdEYXRlLnNldEhvdXJzKGhvdXIsIDAsIDAsIDApXG4gICAgICAgIGlmIChcbiAgICAgICAgICAhaXNEYXlEaXNhYmxlZChuZXdEYXRlKSAmJlxuICAgICAgICAgICFEYXRlVXRpbHMuaXNTYW1lRGF5KG5ld0RhdGUsIHNlbGVjdGVkRGF5KVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAodmFsdWVQcm9wID09PSBudWxsKSB7XG4gICAgICAgICAgICBzZXRTZWxlY3RlZERheShuZXdEYXRlKVxuICAgICAgICAgICAgc2V0VmFsdWUoY29udmVydERhdGVUb1N0cmluZyhuZXdEYXRlKSlcbiAgICAgICAgICAgIGlmICghRGF0ZVV0aWxzLmlzU2FtZU1vbnRoKG5ld0RhdGUsIHNlbGVjdGVkRGF5KSkge1xuICAgICAgICAgICAgICBzZXRNb250aChuZXdEYXRlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgICAgIG9uQ2hhbmdlKG5ld0RhdGUpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXRGb2N1cyA9ICgpID0+IHtcbiAgICAgIGlmICghdmlzaWJsZSkge1xuICAgICAgICBpZiAob25WaXNpYmxlQ2hhbmdlKSB7XG4gICAgICAgICAgb25WaXNpYmxlQ2hhbmdlKHRydWUpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZpc2libGVQcm9wID09PSBudWxsKSB7XG4gICAgICAgICAgc2V0VmlzaWJsZSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlSW5wdXRLZXlEb3duID0gKHtcbiAgICAgIGtleSxcbiAgICB9OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCBrZXlzID0gW1wiVGFiXCIsIFwiRXNjYXBlXCIsIFwiRW50ZXJcIl1cbiAgICAgIGlmIChrZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgaGFuZGxlVmlzaWJsZUNoYW5nZShmYWxzZSlcbiAgICAgICAgaW5wdXRSZWYuY3VycmVudD8uaW5wdXQuYmx1cigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlTW9udGhDaGFuZ2UgPSAoZGF0ZTogRGF0ZSkgPT4ge1xuICAgICAgY29uc3QgbmV3RGF0ZSA9IGRhdGVcbiAgICAgIGlmIChtaW5EYXRlICYmIERhdGVVdGlscy5pc0RheUJlZm9yZShkYXRlLCBtaW5EYXRlKSkge1xuICAgICAgICBuZXdEYXRlLnNldE1vbnRoKG1pbkRhdGUuZ2V0TW9udGgoKSlcbiAgICAgIH0gZWxzZSBpZiAobWF4RGF0ZSAmJiBEYXRlVXRpbHMuaXNEYXlBZnRlcihkYXRlLCBtYXhEYXRlKSkge1xuICAgICAgICBuZXdEYXRlLnNldE1vbnRoKG1heERhdGUuZ2V0TW9udGgoKSlcbiAgICAgIH1cbiAgICAgIHNldE1vbnRoKG5ld0RhdGUpXG4gICAgfVxuXG4gICAgdXNlSW1wZXJhdGl2ZUhhbmRsZShyZWYsICgpID0+ICh7XG4gICAgICBpbnB1dDogaW5wdXRSZWYuY3VycmVudCxcbiAgICAgIGhhbmRsZURheUNsaWNrLFxuICAgICAgaGFuZGxlVmlzaWJsZUNoYW5nZSxcbiAgICB9KSlcblxuICAgIGNvbnN0IHBvcHVwRWxlbWVudCA9IChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LXBvcHVwYH0+XG4gICAgICAgIHtzaG9ydGN1dHNFbmFibGVkICYmIChcbiAgICAgICAgICA8U2hvcnRjdXRzXG4gICAgICAgICAgICBvblNob3J0Y3V0Q2xpY2s9eyh2YWx1ZVNob3J0Y3V0OiBEYXRlKSA9PiB7XG4gICAgICAgICAgICAgIGhhbmRsZURheUNsaWNrKHZhbHVlU2hvcnRjdXQsIHt9KVxuICAgICAgICAgICAgICBzZXRNb250aCh2YWx1ZVNob3J0Y3V0KVxuICAgICAgICAgICAgfX1cbiAgICAgICAgICAgIHNlbGVjdGVkRGF5PXtzZWxlY3RlZERheX1cbiAgICAgICAgICAgIHNob3J0Y3V0cz17c2hvcnRjdXRzfVxuICAgICAgICAgIC8+XG4gICAgICAgICl9XG4gICAgICAgIDxEYXlQaWNrZXJcbiAgICAgICAgICBkaXNhYmxlZERheXM9e2lzRGF5RGlzYWJsZWR9XG4gICAgICAgICAgZnJvbU1vbnRoPXttaW5EYXRlfVxuICAgICAgICAgIHRvTW9udGg9e21heERhdGV9XG4gICAgICAgICAgY2FuQ2hhbmdlTW9udGhcbiAgICAgICAgICBjbGFzc05hbWVzPXtzdHlsZXN9XG4gICAgICAgICAgbW9udGg9e21vbnRoIHx8IHVuZGVmaW5lZH1cbiAgICAgICAgICBtb250aHM9e01PTlRIU31cbiAgICAgICAgICB3ZWVrZGF5c0xvbmc9e1dFRUtEQVlTX0xPTkd9XG4gICAgICAgICAgd2Vla2RheXNTaG9ydD17V0VFS0RBWVNfU0hPUlR9XG4gICAgICAgICAgc2VsZWN0ZWREYXlzPXtzZWxlY3RlZERheSB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgbmF2YmFyRWxlbWVudD17XG4gICAgICAgICAgICA8TmF2YmFyXG4gICAgICAgICAgICAgIG1heERhdGU9e21heERhdGV9XG4gICAgICAgICAgICAgIG1pbkRhdGU9e21pbkRhdGV9XG4gICAgICAgICAgICAgIHsuLi5OYXZiYXJFbGVtZW50UHJvcHN9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIH1cbiAgICAgICAgICBjYXB0aW9uRWxlbWVudD17XG4gICAgICAgICAgICA8Q2FwdGlvblxuICAgICAgICAgICAgICBtYXhEYXRlPXttYXhEYXRlfVxuICAgICAgICAgICAgICBtaW5EYXRlPXttaW5EYXRlfVxuICAgICAgICAgICAgICBvbkRhdGVDaGFuZ2U9e2hhbmRsZU1vbnRoQ2hhbmdlfVxuICAgICAgICAgICAgICB7Li4uQ2FwdGlvbkVsZW1lbnRQcm9wc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgfVxuICAgICAgICAgIG9uRGF5Q2xpY2s9e2hhbmRsZURheUNsaWNrfVxuICAgICAgICAgIG9uTW9udGhDaGFuZ2U9e2hhbmRsZU1vbnRoQ2hhbmdlfVxuICAgICAgICAgIHJlbmRlckRheT17KGRheTogRGF0ZSkgPT4gKFxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3ByZWZpeH0tY2VsbGB9PlxuICAgICAgICAgICAgICB7cmVuZGVyRGF5ICYmIHJlbmRlckRheShkYXkpID8gcmVuZGVyRGF5KGRheSkgOiBkYXkuZ2V0RGF0ZSgpfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgIClcblxuICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IChcbiAgICAgIDxJbnB1dFxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzU2V0fVxuICAgICAgICBjbGVhdmVPcHRpb25zPXt7XG4gICAgICAgICAgYmxvY2tzOiBbNCwgMiwgMl0sXG4gICAgICAgICAgZGVsaW1pdGVyOiBcIi1cIixcbiAgICAgICAgfX1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBpbnRlbnQ9e2ludGVudH1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUlucHV0Q2hhbmdlfVxuICAgICAgICBvbkZvY3VzPXtoYW5kbGVJbnB1dEZvY3VzfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUlucHV0S2V5RG93bn1cbiAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgICAgICBvbkNsaWNrKClcbiAgICAgICAgICB9XG4gICAgICAgICAgbmV4dENsaWNrSW5zaWRlUmVmLmN1cnJlbnQgPSB0cnVlXG4gICAgICAgIH19XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgcmlnaHRFbGVtZW50PXtcbiAgICAgICAgICBhbGxvd0NsZWFyID8gKFxuICAgICAgICAgICAgPEljb25cbiAgICAgICAgICAgICAgaWNvbj17XG4gICAgICAgICAgICAgICAgY2xlYXJJY29uU3RhdGUgPT09IFwiaW5cIiA/IFwiY2FuY2VsLWNpcmNsZVwiIDogXCJjYWxlbmRhci1vdXRsaW5lZFwiXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb25Nb3VzZUVudGVyPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBzZXRDbGVhckljb25TdGF0ZShcImluXCIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRDbGVhckljb25TdGF0ZShcIm91dFwiKVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlUHJvcCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZERheShcIlwiKVxuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShcIlwiKVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlKFwiXCIpXG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIGlmICh2aXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvblZpc2libGVDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICBvblZpc2libGVDaGFuZ2UoZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpc2libGVQcm9wID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgc2V0VmlzaWJsZShmYWxzZSlcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dENsaWNrSW5zaWRlUmVmLmN1cnJlbnQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8SWNvblxuICAgICAgICAgICAgICBpY29uPVwiY2FsZW5kYXItb3V0bGluZWRcIlxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gc2V0VGltZW91dCDnlKjkuo7opobnm5YgSW5wdXQg5pys6Lqr6K6+572u55qEIG5leHRDbGlja0luc2lkZVJlZlxuICAgICAgICAgICAgICAgIC8vIOazqOaEjyDkuIvkuIDmrKEgaGFuZGxlVmlzaWJsZUNoYW5nZSDosIPnlKjkuK3nmoQgc2V0VGltZW91dFxuICAgICAgICAgICAgICAgIC8vIOeUseS6juaYr+WcqOWFqOWxgCBjbGljayDkuovku7bkuK3op6blj5HvvIzlm6DmraTlj6/ku6Xkv53or4Hpobrluo/lnKjmraTkuYvlkI5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIG5leHRDbGlja0luc2lkZVJlZi5jdXJyZW50ID0gZmFsc2VcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgdGhlbWU9e3RoZW1lfVxuICAgICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICAgIHsuLi5vdGhlclByb3BzfVxuICAgICAgLz5cbiAgICApXG5cbiAgICByZXR1cm4gKFxuICAgICAgPFBvcG92ZXJcbiAgICAgICAgYXJyb3dlZD17ZmFsc2V9XG4gICAgICAgIG9uVmlzaWJsZUNoYW5nZT17aGFuZGxlVmlzaWJsZUNoYW5nZX1cbiAgICAgICAgcGxhY2VtZW50PXtwbGFjZW1lbnR9XG4gICAgICAgIHBvcHVwPXtcbiAgICAgICAgICA8PlxuICAgICAgICAgICAge2Ryb3Bkb3duUmVuZGVyICYmIGRyb3Bkb3duUmVuZGVyKHBvcHVwRWxlbWVudClcbiAgICAgICAgICAgICAgPyBkcm9wZG93blJlbmRlcihwb3B1cEVsZW1lbnQpXG4gICAgICAgICAgICAgIDogcG9wdXBFbGVtZW50fVxuICAgICAgICAgIDwvPlxuICAgICAgICB9XG4gICAgICAgIHBvcHVwU3R5bGU9e3tcbiAgICAgICAgICBtYXhXaWR0aDogc2hvcnRjdXRzRW5hYmxlZCA/IFwiMzQycHhcIiA6IFwiMjQycHhcIixcbiAgICAgICAgICB3aWR0aDogc2hvcnRjdXRzRW5hYmxlZCA/IFwiMzQycHhcIiA6IFwiMjQycHhcIixcbiAgICAgICAgfX1cbiAgICAgICAgdHJpZ2dlcj1cImNsaWNrXCJcbiAgICAgICAgdmlzaWJsZT17dmlzaWJsZX1cbiAgICAgICAgey4uLnBvcG92ZXJQcm9wc31cbiAgICAgID5cbiAgICAgICAge3RyaWdnZXJFbGVtZW50IHx8IGlucHV0RWxlbWVudH1cbiAgICAgIDwvUG9wb3Zlcj5cbiAgICApXG4gIH1cbilcblxuRGF0ZVBpY2tlci5kaXNwbGF5TmFtZSA9IFwiRGF0ZVBpY2tlclwiXG5cbkRhdGVQaWNrZXIuUmFuZ2VQaWNrZXIgPSBSYW5nZVBpY2tlclxuXG5EYXRlUGlja2VyLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIOaYr+WQpuaUr+aMgea4hemZpFxuICAgKi9cbiAgYWxsb3dDbGVhcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI1cbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOaYr+WQpuWcqOmAieaLqeWQju+8jOa2iOWksSBQb3BvdmVyXG4gICAqL1xuICBjbG9zZU9uU2VsZWN0OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOWGhemDqOmpseWKqO+8mum7mOiupOaXpeacn1xuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog5YaF6YOo6amx5Yqo77ya6buY6K6k5piv5ZCm5pi+56S65LiL5ouJXG4gICAqL1xuICBkZWZhdWx0VmlzaWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDmmK/lkKbnpoHnlKhcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOemgeatoumAieaLqeeahOWkqe+8jGRheSA9PiBib29s77yM5q+P5LiA5aSp5piv55qE5pe26Ze05Li6IDEyOjAwOjAw77yM6L+Z5LiA5Liq5piv55SxIGRheS1waWNrZXItcmVhY3Qg5Yaz5a6a55qE77ybXG4gICAqIOavlOi+g+aXpeacn+eahOaXtuWAmeWwj+W/g+i/meS4gOeCueOAglxuICAgKi9cbiAgZGlzYWJsZWREYXlzOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIOiHquWumuS5ieS4i+aLieahhuWGheWuuVxuICAgKi9cbiAgZHJvcGRvd25SZW5kZXI6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiAyMDIyMDQwNzog6buY6K6k55qE5pel5pyf5pe26Ze05Li6IDEyIOeCue+8jOWPr+S7peS9v+eUqOatpCBQcm9wIOS/ruaUueWwj+aXtlxuICAgKi9cbiAgaG91cjogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIOiuvue9rui+k+WFpeahhuexu+Wei1xuICAgKi9cbiAgaW50ZW50OiBQcm9wVHlwZXMub25lT2YoW1xuICAgIFwibm9ybWFsXCIsXG4gICAgXCJwcmltYXJ5XCIsXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJ3YXJuaW5nXCIsXG4gICAgXCJkYW5nZXJcIixcbiAgXSksXG4gIC8qKlxuICAgKiDmnIDlpKfpmZDliLbml6XmnJ9cbiAgICovXG4gIG1heERhdGU6IFByb3BUeXBlcy5pbnN0YW5jZU9mKERhdGUpLFxuICAvKipcbiAgICog5pyA5bCP6ZmQ5Yi25pel5pyfXG4gICAqL1xuICBtaW5EYXRlOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihEYXRlKSxcbiAgLyoqXG4gICAqIOaXpeacn+aUueWPmOaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDmmL7npLrnirbmgIHlj5HnlJ/lj5jljJbml7bnmoRoYW5kbGVyXG4gICAqL1xuICBvblZpc2libGVDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog5Y2g5L2N5a2X56ymXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOW8ueWHuuWxguS9jee9rlxuICAgKi9cbiAgcGxhY2VtZW50OiBQcm9wVHlwZXMub25lT2YoW1xuICAgIFwidG9wXCIsXG4gICAgXCJsZWZ0XCIsXG4gICAgXCJyaWdodFwiLFxuICAgIFwiYm90dG9tXCIsXG4gICAgXCJ0b3BMZWZ0XCIsXG4gICAgXCJ0b3BSaWdodFwiLFxuICAgIFwiYm90dG9tTGVmdFwiLFxuICAgIFwiYm90dG9tUmlnaHRcIixcbiAgICBcImxlZnRUb3BcIixcbiAgICBcImxlZnRCb3R0b21cIixcbiAgICBcInJpZ2h0VG9wXCIsXG4gICAgXCJyaWdodEJvdHRvbVwiLFxuICBdKSxcbiAgLyoqXG4gICAqIOS8oOWFpSBQb3BvdmVyIOeahCBwcm9wc1xuICAgKi9cbiAgcG9wb3ZlclByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICog6Ieq5a6a5LmJ5aaC5L2V5riy5p+T5q+P5Liq5pel5pyfXG4gICAqL1xuICByZW5kZXJEYXk6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiDlv6vmjbfpgInmi6npobnvvIzmoLzlvI/vvJpbeyBsYWJlbDogXCLnpZblm73nlJ/ml6VcIiwgdmFsdWU6IG5ldyBEYXRlKFwiMjAyMi0xMC0wMVwiKSB9XVxuICAgKi9cbiAgc2hvcnRjdXRzOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog6K6+572u5bC65a+4XG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2YoW1wibWluaVwiLCBcInNtYWxsXCIsIFwibWVkaXVtXCIsIFwibGFyZ2VcIl0pLFxuICAvKipcbiAgICog6K6+572u5Li76aKYXG4gICAqL1xuICB0aGVtZTogUHJvcFR5cGVzLm9uZU9mKFtudWxsLCBcImxpZ2h0XCJdKSxcbiAgLyoqXG4gICAqIOiHquWumuS5ieinpuWPkeS4i+aLieeahOWFg+e0oFxuICAgKi9cbiAgdHJpZ2dlckVsZW1lbnQ6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiDlpJbpg6jmjqfliLbvvJrlvZPliY3ml6XmnJ9cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog5aSW6YOo5o6n5Yi277ya5piv5ZCm5pi+56S65LiL5ouJ6YCJ5oupXG4gICAqL1xuICB2aXNpYmxlOiBQcm9wVHlwZXMuYm9vbCxcbn1cblxuRGF0ZVBpY2tlci5kZWZhdWx0UHJvcHMgPSB7XG4gIGFsbG93Q2xlYXI6IGZhbHNlLFxuICBjbGFzc05hbWU6IFwiXCIsXG4gIGNsb3NlT25TZWxlY3Q6IGZhbHNlLFxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGRlZmF1bHRWaXNpYmxlOiBudWxsLFxuICBkaXNhYmxlZDogZmFsc2UsXG4gIGRpc2FibGVkRGF5czogbm9vcCxcbiAgZHJvcGRvd25SZW5kZXI6IHVuZGVmaW5lZCxcbiAgaG91cjogMTIsXG4gIGludGVudDogXCJub3JtYWxcIixcbiAgbWF4RGF0ZTogZ2V0RGVmYXVsdE1heERhdGUoKSxcbiAgbWluRGF0ZTogZ2V0RGVmYXVsdE1pbkRhdGUoKSxcbiAgb25DaGFuZ2U6IG5vb3AsXG4gIG9uVmlzaWJsZUNoYW5nZTogbm9vcCxcbiAgcGxhY2Vob2xkZXI6IFwi6YCJ5oup5pel5pyfXCIsXG4gIHBsYWNlbWVudDogXCJib3R0b21MZWZ0XCIsXG4gIHBvcG92ZXJQcm9wczoge30sXG4gIHJlbmRlckRheTogdW5kZWZpbmVkLFxuICBzaG9ydGN1dHM6IHVuZGVmaW5lZCxcbiAgc2l6ZTogXCJzbWFsbFwiLFxuICB0aGVtZTogbnVsbCxcbiAgdHJpZ2dlckVsZW1lbnQ6IHVuZGVmaW5lZCxcbiAgdmFsdWU6IG51bGwsXG4gIHZpc2libGU6IG51bGwsXG59XG5cbmV4cG9ydCBkZWZhdWx0IERhdGVQaWNrZXJcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQU9BLElBQUFDLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLFdBQUEsR0FBQUQsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFJLGVBQUEsR0FBQUwsdUJBQUEsQ0FBQUMsT0FBQTtBQU1BLElBQUFLLFlBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBQSxPQUFBO0FBQ0EsSUFBQU0sV0FBQSxHQUFBSixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQU8sZUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsS0FBQSxHQUFBTixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVMsTUFBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQVUsUUFBQSxHQUFBUixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVcsUUFBQSxHQUFBVCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVksT0FBQSxHQUFBVixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQWEsVUFBQSxHQUFBWCxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQWMsS0FBQSxHQUFBZCxPQUFBO0FBUWUsSUFBQWUsU0FBQTtBQUFBLFNBQUFiLHVCQUFBYyxDQUFBLFdBQUFBLENBQUEsSUFBQUEsQ0FBQSxDQUFBQyxVQUFBLEdBQUFELENBQUEsZ0JBQUFBLENBQUE7QUFBQSxTQUFBRSx5QkFBQUYsQ0FBQSw2QkFBQUcsT0FBQSxtQkFBQUMsQ0FBQSxP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