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>
393 lines (341 loc) • 48.8 kB
JavaScript
var _excluded = ["allowClear", "changeOnSelect", "children", "className", "defaultValue", "disabled", "displayRender", "expandTrigger", "onChange", "onVisibleChange", "options", "placeholder", "popoverProps", "size", "value", "visible"];
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 _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
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; }
import React, { useRef, useState } from "react";
import PropTypes from "prop-types";
import classNames from "classnames";
import Animate from "rc-animate";
import Button from "../button";
import Icon from "../icon";
import Popover from "../popover";
import isEqualArrays from "../_util/isEqualArrays";
import "./style";
var prefix = "adui-cascader";
var Cascader = function Cascader(_ref) {
var _classNames3;
var allowClear = _ref.allowClear,
changeOnSelect = _ref.changeOnSelect,
children = _ref.children,
className = _ref.className,
defaultValue = _ref.defaultValue,
disabled = _ref.disabled,
_ref$displayRender = _ref.displayRender,
displayRender = _ref$displayRender === void 0 ? function (title) {
return title.join("/");
} : _ref$displayRender,
expandTrigger = _ref.expandTrigger,
onChange = _ref.onChange,
onVisibleChange = _ref.onVisibleChange,
options = _ref.options,
placeholder = _ref.placeholder,
popoverProps = _ref.popoverProps,
size = _ref.size,
valueProps = _ref.value,
visibleProps = _ref.visible,
otherProps = _objectWithoutProperties(_ref, _excluded);
var _useState = useState(valueProps !== null ? valueProps || [] : defaultValue || []),
_useState2 = _slicedToArray(_useState, 2),
value = _useState2[0],
setValue = _useState2[1];
var _useState3 = useState(valueProps !== null ? valueProps || [] : defaultValue || []),
_useState4 = _slicedToArray(_useState3, 2),
activeValue = _useState4[0],
setActiveValue = _useState4[1];
var _useState5 = useState(visibleProps !== null ? visibleProps : false),
_useState6 = _slicedToArray(_useState5, 2),
visible = _useState6[0],
setVisible = _useState6[1];
var delayTimer = useRef(0);
if (valueProps !== null && !isEqualArrays(valueProps || [], value)) {
setValue(valueProps || []);
}
if (visibleProps !== null && visible !== visibleProps) {
setVisible(visibleProps);
}
var setPopupVisible = function setPopupVisible(popupVisible) {
if (visibleProps === null) {
setVisible(popupVisible);
}
if (popupVisible && !visible) {
setActiveValue(value);
}
if (onVisibleChange) {
onVisibleChange(popupVisible);
}
};
var handleClear = function handleClear(e) {
e.preventDefault();
e.stopPropagation();
setPopupVisible(false);
if (!valueProps) {
setValue([]);
}
if (onChange) {
onChange([], []);
}
};
var handleChange = function handleChange(opts, _ref2) {
var popupVisible = _ref2.visible;
setPopupVisible(popupVisible);
if (onChange) {
onChange(opts.map(function (_ref3) {
var v = _ref3.value;
return v || "";
}), opts);
}
};
var hasValue = value === null || value === void 0 ? void 0 : value.length;
var arrayTreeFilter = function arrayTreeFilter() {
var data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
var filterFn = arguments.length > 1 ? arguments[1] : undefined;
var childs = data;
var result = [];
var level = 0;
do {
var foundItem = childs.filter(function (item) {
return filterFn(item, level);
})[0];
if (!foundItem) {
break;
}
result.push(foundItem);
childs = foundItem.children || [];
level += 1;
} while (childs.length > 0);
return result;
};
var getTitle = function getTitle() {
var unwrappedValue = Array.isArray(value[0]) ? value[0] : value;
var selectedOptions = arrayTreeFilter(options, function (o, level) {
return o.value === unwrappedValue[level];
});
var title = selectedOptions.length ? selectedOptions.map(function (o) {
return o.title;
}) : value;
return displayRender(title.map(function (o) {
return (o || "").toString();
}), selectedOptions);
};
var isActiveOption = function isActiveOption(option, menuIndex) {
return activeValue[menuIndex] === option.value;
};
var getActiveOptions = function getActiveOptions(activeValueParam) {
return arrayTreeFilter(options, function (o, level) {
return o.value === (activeValueParam || activeValue)[level];
});
};
var getShowOptions = function getShowOptions() {
var result = getActiveOptions().map(function (_ref4) {
var childs = _ref4.children;
return childs;
}).filter(function (activeOption) {
return activeOption === null || activeOption === void 0 ? void 0 : activeOption.length;
});
result.unshift(options);
return result;
};
var delaySelect = function delaySelect(func) {
if (delayTimer.current) {
clearTimeout(delayTimer.current);
delayTimer.current = 0;
}
if (typeof func === "function") {
delayTimer.current = window.setTimeout(function () {
func();
delayTimer.current = 0;
}, 150);
}
};
var optss = getShowOptions();
var menus = React.createElement("div", {
className: "".concat(prefix, "-menus")
}, React.createElement(Animate, {
transitionAppear: true,
component: "div",
style: {
display: "flex"
},
animation: {
appear: function appear(node, done) {
node.classList.add("".concat(prefix, "-enter"));
setTimeout(function () {
node.classList.add("".concat(prefix, "-enter-active"));
}, 50);
var promise = new Promise(function (resolve) {
return setTimeout(resolve, 200);
});
promise.then(function () {
node.classList.remove("".concat(prefix, "-enter-active"));
node.classList.remove("".concat(prefix, "-enter"));
return done();
});
return done();
},
enter: function enter(node, done) {
node.classList.add("".concat(prefix, "-enter"));
setTimeout(function () {
node.classList.add("".concat(prefix, "-enter-active"));
}, 50);
var promise = new Promise(function (resolve) {
return setTimeout(resolve, 200);
});
promise.then(function () {
node.classList.remove("".concat(prefix, "-enter-active"));
node.classList.remove("".concat(prefix, "-enter"));
return done();
});
return done();
},
leave: function leave(node, done) {
node.classList.add("".concat(prefix, "-leave"));
setTimeout(function () {
node.classList.add("".concat(prefix, "-leave-active"));
}, 50);
var promise = new Promise(function (resolve) {
return setTimeout(resolve, 200);
});
promise.then(function () {
return done();
});
}
}
}, optss.map(function (opts, menuIndex) {
return React.createElement("div", {
className: classNames("".concat(prefix, "-menu"), _defineProperty({}, "".concat(prefix, "-menu-").concat(size), size)),
key: menuIndex
}, (opts || []).map(function (o, j) {
var v = o.value,
title = o.title,
c = o.children,
d = o.disabled;
var handleSelect = function handleSelect() {
if (d) {
return;
}
var activeValueDuplicated = _toConsumableArray(activeValue);
activeValueDuplicated = activeValueDuplicated.slice(0, menuIndex + 1);
activeValueDuplicated[menuIndex] = v || "";
var activeOptions = getActiveOptions(activeValueDuplicated);
setActiveValue(activeValueDuplicated);
if (!(c !== null && c !== void 0 && c.length)) {
handleChange(activeOptions, {
visible: false
});
if (valueProps === null) {
setValue(activeValueDuplicated);
}
} else if (changeOnSelect) {
handleChange(activeOptions, {
visible: true
});
if (valueProps === null) {
setValue(activeValueDuplicated);
}
}
};
return React.createElement("div", {
role: "none",
key: v || j,
className: classNames("".concat(prefix, "-menu-item"), _defineProperty({}, "".concat(prefix, "-menu-item-active"), isActiveOption(o, menuIndex))),
title: title === null || title === void 0 ? void 0 : title.toString(),
onMouseDown: function onMouseDown(e) {
return e.preventDefault();
},
onClick: handleSelect,
onMouseEnter: function onMouseEnter() {
if (expandTrigger === "hover" && c !== null && c !== void 0 && c.length) {
delaySelect(handleSelect);
}
},
onMouseLeave: function onMouseLeave() {
if (expandTrigger === "hover" && c !== null && c !== void 0 && c.length) {
delaySelect();
}
}
}, React.createElement("div", {
className: "".concat(prefix, "-menu-item-content")
}, title), !!(c !== null && c !== void 0 && c.length) && React.createElement(Icon, {
icon: "triangle-right",
className: "".concat(prefix, "-menu-item-icon")
}));
}));
})));
return React.createElement(Popover, _extends({
arrowed: false,
popupClassName: "".concat(prefix, "-popup"),
visible: disabled ? false : visible,
onVisibleChange: setPopupVisible,
trigger: "click",
popup: menus
}, popoverProps), React.createElement(Button, _extends({
disabled: disabled,
className: classNames("".concat(prefix, "-button"), className, (_classNames3 = {}, _defineProperty(_classNames3, "".concat(prefix, "-button-valued"), hasValue), _defineProperty(_classNames3, "".concat(prefix, "-button-clearable"), allowClear), _classNames3)),
size: size
}, otherProps), hasValue ? React.createElement("span", {
className: "".concat(prefix, "-label")
}, getTitle()) : React.createElement("span", {
className: "".concat(prefix, "-placeholder")
}, placeholder), React.createElement("div", {
className: "".concat(prefix, "-icons")
}, React.createElement(Icon, {
icon: "triangle-down",
className: "".concat(prefix, "-suffix"),
color: disabled ? "var(--transparent-gray-600)" : "var(--transparent-gray-700)"
}), allowClear && !disabled && React.createElement(Icon, {
icon: "cancel-circle",
className: "".concat(prefix, "-remove"),
color: "var(--transparent-gray-700)",
onClick: handleClear
}))));
};
Cascader.displayName = "Cascader";
Cascader.propTypes = {
allowClear: PropTypes.bool,
changeOnSelect: PropTypes.bool,
children: PropTypes.node,
className: PropTypes.string,
defaultValue: PropTypes.any,
disabled: PropTypes.bool,
displayRender: PropTypes.any,
expandTrigger: PropTypes.oneOf(["click", "hover"]),
options: PropTypes.any,
onChange: PropTypes.any,
onVisibleChange: PropTypes.any,
placeholder: PropTypes.any,
popoverProps: PropTypes.any,
size: PropTypes.oneOf(["mini", "small", "medium", "large"]),
value: PropTypes.any,
visible: PropTypes.any
};
Cascader.defaultProps = {
allowClear: true,
changeOnSelect: false,
children: null,
className: undefined,
defaultValue: null,
disabled: false,
displayRender: undefined,
expandTrigger: "click",
onChange: undefined,
onVisibleChange: undefined,
options: [],
placeholder: "请选择",
popoverProps: {},
size: "small",
value: null,
visible: null
};
export default Cascader;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsInVzZVJlZiIsInVzZVN0YXRlIiwiUHJvcFR5cGVzIiwiY2xhc3NOYW1lcyIsIkFuaW1hdGUiLCJCdXR0b24iLCJJY29uIiwiUG9wb3ZlciIsImlzRXF1YWxBcnJheXMiLCJwcmVmaXgiLCJDYXNjYWRlciIsImFsbG93Q2xlYXIiLCJjaGFuZ2VPblNlbGVjdCIsImNoaWxkcmVuIiwiY2xhc3NOYW1lIiwiZGVmYXVsdFZhbHVlIiwiZGlzYWJsZWQiLCJkaXNwbGF5UmVuZGVyIiwidGl0bGUiLCJqb2luIiwiZXhwYW5kVHJpZ2dlciIsIm9uQ2hhbmdlIiwib25WaXNpYmxlQ2hhbmdlIiwib3B0aW9ucyIsInBsYWNlaG9sZGVyIiwicG9wb3ZlclByb3BzIiwic2l6ZSIsInZhbHVlUHJvcHMiLCJ2YWx1ZSIsInZpc2libGVQcm9wcyIsInZpc2libGUiLCJvdGhlclByb3BzIiwic2V0VmFsdWUiLCJhY3RpdmVWYWx1ZSIsInNldEFjdGl2ZVZhbHVlIiwic2V0VmlzaWJsZSIsImRlbGF5VGltZXIiLCJzZXRQb3B1cFZpc2libGUiLCJwb3B1cFZpc2libGUiLCJoYW5kbGVDbGVhciIsImUiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImhhbmRsZUNoYW5nZSIsIm9wdHMiLCJtYXAiLCJ2IiwiaGFzVmFsdWUiLCJsZW5ndGgiLCJhcnJheVRyZWVGaWx0ZXIiLCJkYXRhIiwiZmlsdGVyRm4iLCJjaGlsZHMiLCJyZXN1bHQiLCJsZXZlbCIsImZvdW5kSXRlbSIsImZpbHRlciIsIml0ZW0iLCJwdXNoIiwiZ2V0VGl0bGUiLCJ1bndyYXBwZWRWYWx1ZSIsIkFycmF5IiwiaXNBcnJheSIsInNlbGVjdGVkT3B0aW9ucyIsIm8iLCJ0b1N0cmluZyIsImlzQWN0aXZlT3B0aW9uIiwib3B0aW9uIiwibWVudUluZGV4IiwiZ2V0QWN0aXZlT3B0aW9ucyIsImFjdGl2ZVZhbHVlUGFyYW0iLCJnZXRTaG93T3B0aW9ucyIsImFjdGl2ZU9wdGlvbiIsInVuc2hpZnQiLCJkZWxheVNlbGVjdCIsImZ1bmMiLCJjdXJyZW50IiwiY2xlYXJUaW1lb3V0Iiwid2luZG93Iiwic2V0VGltZW91dCIsIm9wdHNzIiwibWVudXMiLCJkaXNwbGF5IiwiYXBwZWFyIiwibm9kZSIsImRvbmUiLCJjbGFzc0xpc3QiLCJhZGQiLCJwcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJ0aGVuIiwicmVtb3ZlIiwiZW50ZXIiLCJsZWF2ZSIsImoiLCJjIiwiZCIsImhhbmRsZVNlbGVjdCIsImFjdGl2ZVZhbHVlRHVwbGljYXRlZCIsInNsaWNlIiwiYWN0aXZlT3B0aW9ucyIsImRpc3BsYXlOYW1lIiwicHJvcFR5cGVzIiwiYm9vbCIsInN0cmluZyIsImFueSIsIm9uZU9mIiwiZGVmYXVsdFByb3BzIiwidW5kZWZpbmVkIl0sInNvdXJjZXMiOlsiLi4vLi4vY29tcG9uZW50cy9jYXNjYWRlci9DYXNjYWRlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVhY3Qvbm8tYXJyYXktaW5kZXgta2V5ICovXG5pbXBvcnQgUmVhY3QsIHsgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCJcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gXCJjbGFzc25hbWVzXCJcbmltcG9ydCBBbmltYXRlIGZyb20gXCJyYy1hbmltYXRlXCJcbmltcG9ydCBCdXR0b24gZnJvbSBcIi4uL2J1dHRvblwiXG5pbXBvcnQgSWNvbiBmcm9tIFwiLi4vaWNvblwiXG5pbXBvcnQgUG9wb3ZlciwgeyBJUG9wb3ZlclByb3BzIH0gZnJvbSBcIi4uL3BvcG92ZXJcIlxuaW1wb3J0IGlzRXF1YWxBcnJheXMgZnJvbSBcIi4uL191dGlsL2lzRXF1YWxBcnJheXNcIlxuaW1wb3J0IFwiLi9zdHlsZVwiXG5cbmNvbnN0IHByZWZpeCA9IFwiYWR1aS1jYXNjYWRlclwiXG5cbmV4cG9ydCB0eXBlIENhc2NhZGVyVmFsdWVUeXBlID0gUmVhY3QuUmVhY3RUZXh0W11cblxuZXhwb3J0IGludGVyZmFjZSBDYXNjYWRlck9wdGlvbiB7XG4gIFtrZXk6IHN0cmluZ106IGFueVxuICB2YWx1ZT86IHN0cmluZyB8IG51bWJlclxuICB0aXRsZTogUmVhY3QuUmVhY3ROb2RlXG4gIGRpc2FibGVkPzogYm9vbGVhblxuICBjaGlsZHJlbj86IENhc2NhZGVyT3B0aW9uW11cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJQ2FzY2FkZXJQcm9wcyB7XG4gIFtrZXk6IHN0cmluZ106IGFueVxuICAvKipcbiAgICog5piv5ZCm5pSv5oyB5riF6ZmkXG4gICAqL1xuICBhbGxvd0NsZWFyPzogYm9vbGVhblxuICAvKipcbiAgICog5b2T5q2k6aG55Li6IHRydWUg5pe277yM54K56YCJ5q+P57qn6I+c5Y2V6YCJ6aG55YC86YO95Lya5Y+R55Sf5Y+Y5YyWXG4gICAqL1xuICBjaGFuZ2VPblNlbGVjdD86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOWtkOiKgueCuVxuICAgKi9cbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGVcbiAgLyoqXG4gICAqIOmZhOWKoOexu+WQje+8jOazqOaEjyBDYXNjYWRlciDmiYDmnInnmoTlsZ7mgKfkvJrpmYTliqDliLDlhoXpg6jnmoTlhoXlrrnlhYPntKDkuIrvvIzogIzkuI3mmK/ljIXlkKsgbWFzayDnmoTmnIDlpJblsYLlhYPntKBcbiAgICovXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICAvKipcbiAgICog6buY6K6k5YC877yM5YaF6YOo6amx5YqoXG4gICAqL1xuICBkZWZhdWx0VmFsdWU/OiBDYXNjYWRlclZhbHVlVHlwZSB8IG51bGxcbiAgLyoqXG4gICAqIOaYr+WQpuemgeeUqFxuICAgKi9cbiAgZGlzYWJsZWQ/OiBib29sZWFuXG4gIC8qKlxuICAgKiDpgInmi6nlkI7lsZXnpLrnmoTmuLLmn5Plh73mlbBcbiAgICovXG4gIGRpc3BsYXlSZW5kZXI/OiAoXG4gICAgdGl0bGU6IHN0cmluZ1tdLFxuICAgIHNlbGVjdGVkT3B0aW9ucz86IENhc2NhZGVyT3B0aW9uW11cbiAgKSA9PiBSZWFjdC5SZWFjdE5vZGVcbiAgLyoqXG4gICAqIOasoee6p+iPnOWNleeahOWxleW8gOaWueW8j++8jOWPr+mAiSAnY2xpY2snIOWSjCAnaG92ZXInXG4gICAqL1xuICBleHBhbmRUcmlnZ2VyPzogXCJjbGlja1wiIHwgXCJob3ZlclwiXG4gIC8qKlxuICAgKiDlgLzlj5jljJbml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25DaGFuZ2U/OiAodmFsdWU6IENhc2NhZGVyVmFsdWVUeXBlLCBzZWxlY3RPcHRpb25zOiBDYXNjYWRlck9wdGlvbltdKSA9PiB2b2lkXG4gIC8qKlxuICAgKiDkuIvmi4nmoYYgdmlzaWJsZSDnirbmgIHmlLnlj5jml7bnmoTlm57osINcbiAgICovXG4gIG9uVmlzaWJsZUNoYW5nZT86ICh2aXNpYmxlOiBib29sZWFuKSA9PiB2b2lkXG4gIC8qKlxuICAgKiDlj6/pgInpobnmlbDmja7mupBcbiAgICovXG4gIG9wdGlvbnM/OiBDYXNjYWRlck9wdGlvbltdXG4gIC8qKlxuICAgKiDljaDkvY3mlofmnKxcbiAgICovXG4gIHBsYWNlaG9sZGVyPzogUmVhY3QuUmVhY3ROb2RlXG4gIC8qKlxuICAgKiDlsZ7mgKflsIbkvJrpgI/kvKDnu5kgUG9wb3ZlciDnu4Tku7ZcbiAgICovXG4gIHBvcG92ZXJQcm9wcz86IElQb3BvdmVyUHJvcHNcbiAgLyoqXG4gICAqIOWwuuWvuFxuICAgKi9cbiAgc2l6ZT86IFwibWluaVwiIHwgXCJzbWFsbFwiIHwgXCJtZWRpdW1cIiB8IFwibGFyZ2VcIlxuICAvKipcbiAgICog5YC877yM5aSW6YOo5o6n5Yi2XG4gICAqL1xuICB2YWx1ZT86IENhc2NhZGVyVmFsdWVUeXBlIHwgbnVsbFxuICAvKipcbiAgICog5aSW6YOo5o6n5Yi25LiL5ouJ5qGGIHZpc2libGUg54q25oCBXG4gICAqL1xuICB2aXNpYmxlPzogYm9vbGVhbiB8IG51bGxcbn1cblxuLyoqXG4gKiDnuqfogZTpgInmi6nlmajnm7Top4LlsZXnpLrlt7LmnInnmoTlsYLnuqflhbPns7vjgIJcbiAqL1xuY29uc3QgQ2FzY2FkZXI6IFJlYWN0LkZDPElDYXNjYWRlclByb3BzPiA9ICh7XG4gIGFsbG93Q2xlYXIsXG4gIGNoYW5nZU9uU2VsZWN0LFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBkZWZhdWx0VmFsdWUsXG4gIGRpc2FibGVkLFxuICBkaXNwbGF5UmVuZGVyID0gKHRpdGxlOiBzdHJpbmdbXSkgPT4gdGl0bGUuam9pbihcIi9cIiksXG4gIGV4cGFuZFRyaWdnZXIsXG4gIG9uQ2hhbmdlLFxuICBvblZpc2libGVDaGFuZ2UsXG4gIG9wdGlvbnMsXG4gIHBsYWNlaG9sZGVyLFxuICBwb3BvdmVyUHJvcHMsXG4gIHNpemUsXG4gIHZhbHVlOiB2YWx1ZVByb3BzLFxuICB2aXNpYmxlOiB2aXNpYmxlUHJvcHMsXG4gIC4uLm90aGVyUHJvcHNcbn0pID0+IHtcbiAgY29uc3QgW3ZhbHVlLCBzZXRWYWx1ZV0gPSB1c2VTdGF0ZTxDYXNjYWRlclZhbHVlVHlwZT4oXG4gICAgdmFsdWVQcm9wcyAhPT0gbnVsbCA/IHZhbHVlUHJvcHMgfHwgW10gOiBkZWZhdWx0VmFsdWUgfHwgW11cbiAgKVxuICBjb25zdCBbYWN0aXZlVmFsdWUsIHNldEFjdGl2ZVZhbHVlXSA9IHVzZVN0YXRlPENhc2NhZGVyVmFsdWVUeXBlPihcbiAgICB2YWx1ZVByb3BzICE9PSBudWxsID8gdmFsdWVQcm9wcyB8fCBbXSA6IGRlZmF1bHRWYWx1ZSB8fCBbXVxuICApXG4gIGNvbnN0IFt2aXNpYmxlLCBzZXRWaXNpYmxlXSA9IHVzZVN0YXRlKFxuICAgIHZpc2libGVQcm9wcyAhPT0gbnVsbCA/IHZpc2libGVQcm9wcyA6IGZhbHNlXG4gIClcbiAgY29uc3QgZGVsYXlUaW1lciA9IHVzZVJlZigwKVxuXG4gIC8vIOebuOW9k+S6jueUn+WRveWRqOacnyBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcbiAgaWYgKHZhbHVlUHJvcHMgIT09IG51bGwgJiYgIWlzRXF1YWxBcnJheXModmFsdWVQcm9wcyB8fCBbXSwgdmFsdWUpKSB7XG4gICAgc2V0VmFsdWUodmFsdWVQcm9wcyB8fCBbXSlcbiAgfVxuICBpZiAodmlzaWJsZVByb3BzICE9PSBudWxsICYmIHZpc2libGUgIT09IHZpc2libGVQcm9wcykge1xuICAgIHNldFZpc2libGUodmlzaWJsZVByb3BzKVxuICB9XG5cbiAgY29uc3Qgc2V0UG9wdXBWaXNpYmxlID0gKHBvcHVwVmlzaWJsZTogYm9vbGVhbikgPT4ge1xuICAgIGlmICh2aXNpYmxlUHJvcHMgPT09IG51bGwpIHtcbiAgICAgIHNldFZpc2libGUocG9wdXBWaXNpYmxlKVxuICAgIH1cbiAgICBpZiAocG9wdXBWaXNpYmxlICYmICF2aXNpYmxlKSB7XG4gICAgICBzZXRBY3RpdmVWYWx1ZSh2YWx1ZSlcbiAgICB9XG4gICAgaWYgKG9uVmlzaWJsZUNoYW5nZSkge1xuICAgICAgb25WaXNpYmxlQ2hhbmdlKHBvcHVwVmlzaWJsZSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVDbGVhciA9IChlOiBSZWFjdC5Nb3VzZUV2ZW50PFNWR1NWR0VsZW1lbnQ+KSA9PiB7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZS5zdG9wUHJvcGFnYXRpb24oKVxuICAgIHNldFBvcHVwVmlzaWJsZShmYWxzZSlcbiAgICBpZiAoIXZhbHVlUHJvcHMpIHtcbiAgICAgIHNldFZhbHVlKFtdKVxuICAgIH1cbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIG9uQ2hhbmdlKFtdLCBbXSlcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSAoXG4gICAgb3B0czogQ2FzY2FkZXJPcHRpb25bXSxcbiAgICB7IHZpc2libGU6IHBvcHVwVmlzaWJsZSB9OiB7IHZpc2libGU6IGJvb2xlYW4gfVxuICApID0+IHtcbiAgICBzZXRQb3B1cFZpc2libGUocG9wdXBWaXNpYmxlKVxuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgb25DaGFuZ2UoXG4gICAgICAgIG9wdHMubWFwKCh7IHZhbHVlOiB2IH0pID0+IHYgfHwgXCJcIiksXG4gICAgICAgIG9wdHNcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICBjb25zdCBoYXNWYWx1ZSA9IHZhbHVlPy5sZW5ndGhcblxuICBjb25zdCBhcnJheVRyZWVGaWx0ZXIgPSA8VCBleHRlbmRzIHVua25vd24+KFxuICAgIGRhdGE6IFRbXSA9IFtdLFxuICAgIGZpbHRlckZuOiAoaXRlbTogVCwgbGV2ZWw6IG51bWJlcikgPT4gYm9vbGVhblxuICApID0+IHtcbiAgICBsZXQgY2hpbGRzID0gZGF0YVxuICAgIGNvbnN0IHJlc3VsdDogVFtdID0gW11cbiAgICBsZXQgbGV2ZWwgPSAwXG4gICAgZG8ge1xuICAgICAgY29uc3QgZm91bmRJdGVtOiBUID0gY2hpbGRzLmZpbHRlcigoaXRlbSkgPT4gZmlsdGVyRm4oaXRlbSwgbGV2ZWwpKVswXVxuICAgICAgaWYgKCFmb3VuZEl0ZW0pIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKGZvdW5kSXRlbSlcbiAgICAgIGNoaWxkcyA9IChmb3VuZEl0ZW0gYXMgYW55KS5jaGlsZHJlbiB8fCBbXVxuICAgICAgbGV2ZWwgKz0gMVxuICAgIH0gd2hpbGUgKGNoaWxkcy5sZW5ndGggPiAwKVxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGNvbnN0IGdldFRpdGxlID0gKCkgPT4ge1xuICAgIGNvbnN0IHVud3JhcHBlZFZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZVswXSkgPyB2YWx1ZVswXSA6IHZhbHVlXG4gICAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zID0gYXJyYXlUcmVlRmlsdGVyKFxuICAgICAgb3B0aW9ucyxcbiAgICAgIChvLCBsZXZlbDogbnVtYmVyKSA9PiBvLnZhbHVlID09PSB1bndyYXBwZWRWYWx1ZVtsZXZlbF1cbiAgICApXG4gICAgY29uc3QgdGl0bGUgPSBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoXG4gICAgICA/IHNlbGVjdGVkT3B0aW9ucy5tYXAoKG8pID0+IG8udGl0bGUpXG4gICAgICA6IHZhbHVlXG4gICAgcmV0dXJuIGRpc3BsYXlSZW5kZXIoXG4gICAgICB0aXRsZS5tYXAoKG8pID0+IChvIHx8IFwiXCIpLnRvU3RyaW5nKCkpLFxuICAgICAgc2VsZWN0ZWRPcHRpb25zXG4gICAgKVxuICB9XG5cbiAgY29uc3QgaXNBY3RpdmVPcHRpb24gPSAob3B0aW9uOiBDYXNjYWRlck9wdGlvbiwgbWVudUluZGV4OiBudW1iZXIpID0+XG4gICAgYWN0aXZlVmFsdWVbbWVudUluZGV4XSA9PT0gb3B0aW9uLnZhbHVlXG5cbiAgY29uc3QgZ2V0QWN0aXZlT3B0aW9ucyA9IChcbiAgICBhY3RpdmVWYWx1ZVBhcmFtPzogQ2FzY2FkZXJWYWx1ZVR5cGVcbiAgKTogQ2FzY2FkZXJPcHRpb25bXSA9PlxuICAgIGFycmF5VHJlZUZpbHRlcihcbiAgICAgIG9wdGlvbnMsXG4gICAgICAobywgbGV2ZWwpID0+IG8udmFsdWUgPT09IChhY3RpdmVWYWx1ZVBhcmFtIHx8IGFjdGl2ZVZhbHVlKVtsZXZlbF1cbiAgICApXG5cbiAgY29uc3QgZ2V0U2hvd09wdGlvbnMgPSAoKTogKENhc2NhZGVyT3B0aW9uW10gfCB1bmRlZmluZWQpW10gPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGdldEFjdGl2ZU9wdGlvbnMoKVxuICAgICAgLm1hcCgoeyBjaGlsZHJlbjogY2hpbGRzIH0pID0+IGNoaWxkcylcbiAgICAgIC5maWx0ZXIoKGFjdGl2ZU9wdGlvbikgPT4gYWN0aXZlT3B0aW9uPy5sZW5ndGgpXG4gICAgcmVzdWx0LnVuc2hpZnQob3B0aW9ucylcblxuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGNvbnN0IGRlbGF5U2VsZWN0ID0gKGZ1bmM/OiAoKSA9PiB2b2lkKSA9PiB7XG4gICAgaWYgKGRlbGF5VGltZXIuY3VycmVudCkge1xuICAgICAgY2xlYXJUaW1lb3V0KGRlbGF5VGltZXIuY3VycmVudClcbiAgICAgIGRlbGF5VGltZXIuY3VycmVudCA9IDBcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBmdW5jID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgIGRlbGF5VGltZXIuY3VycmVudCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgZnVuYygpXG4gICAgICAgIGRlbGF5VGltZXIuY3VycmVudCA9IDBcbiAgICAgIH0sIDE1MClcbiAgICB9XG4gIH1cblxuICBjb25zdCBvcHRzcyA9IGdldFNob3dPcHRpb25zKClcblxuICBjb25zdCBtZW51cyA9IChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cHJlZml4fS1tZW51c2B9PlxuICAgICAgPEFuaW1hdGVcbiAgICAgICAgdHJhbnNpdGlvbkFwcGVhclxuICAgICAgICBjb21wb25lbnQ9XCJkaXZcIlxuICAgICAgICBzdHlsZT17eyBkaXNwbGF5OiBcImZsZXhcIiB9fVxuICAgICAgICBhbmltYXRpb249e3tcbiAgICAgICAgICBhcHBlYXIobm9kZTogSFRNTEVsZW1lbnQsIGRvbmU6ICgpID0+IHZvaWQpIHtcbiAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZChgJHtwcmVmaXh9LWVudGVyYClcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoYCR7cHJlZml4fS1lbnRlci1hY3RpdmVgKVxuICAgICAgICAgICAgfSwgNTApXG4gICAgICAgICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMjAwKSlcbiAgICAgICAgICAgIHByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LnJlbW92ZShgJHtwcmVmaXh9LWVudGVyLWFjdGl2ZWApXG4gICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LnJlbW92ZShgJHtwcmVmaXh9LWVudGVyYClcbiAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHJldHVybiBkb25lKClcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVudGVyKG5vZGU6IEhUTUxFbGVtZW50LCBkb25lOiAoKSA9PiB2b2lkKSB7XG4gICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5hZGQoYCR7cHJlZml4fS1lbnRlcmApXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGAke3ByZWZpeH0tZW50ZXItYWN0aXZlYClcbiAgICAgICAgICAgIH0sIDUwKVxuICAgICAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDIwMCkpXG4gICAgICAgICAgICBwcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoYCR7cHJlZml4fS1lbnRlci1hY3RpdmVgKVxuICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoYCR7cHJlZml4fS1lbnRlcmApXG4gICAgICAgICAgICAgIHJldHVybiBkb25lKClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICByZXR1cm4gZG9uZSgpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBsZWF2ZShub2RlOiBIVE1MRWxlbWVudCwgZG9uZTogKCkgPT4gdm9pZCkge1xuICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKGAke3ByZWZpeH0tbGVhdmVgKVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZChgJHtwcmVmaXh9LWxlYXZlLWFjdGl2ZWApXG4gICAgICAgICAgICB9LCA1MClcbiAgICAgICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCAyMDApKVxuICAgICAgICAgICAgcHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGRvbmUoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICB7b3B0c3MubWFwKChvcHRzLCBtZW51SW5kZXgpID0+IChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoYCR7cHJlZml4fS1tZW51YCwge1xuICAgICAgICAgICAgICBbYCR7cHJlZml4fS1tZW51LSR7c2l6ZX1gXTogc2l6ZSxcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAga2V5PXttZW51SW5kZXh9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgeyhvcHRzIHx8IFtdKS5tYXAoKG8sIGopID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgeyB2YWx1ZTogdiwgdGl0bGUsIGNoaWxkcmVuOiBjLCBkaXNhYmxlZDogZCB9ID0gb1xuICAgICAgICAgICAgICBjb25zdCBoYW5kbGVTZWxlY3QgPSAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGQpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgYWN0aXZlVmFsdWVEdXBsaWNhdGVkID0gWy4uLmFjdGl2ZVZhbHVlXVxuICAgICAgICAgICAgICAgIGFjdGl2ZVZhbHVlRHVwbGljYXRlZCA9IGFjdGl2ZVZhbHVlRHVwbGljYXRlZC5zbGljZShcbiAgICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgICBtZW51SW5kZXggKyAxXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIGFjdGl2ZVZhbHVlRHVwbGljYXRlZFttZW51SW5kZXhdID0gdiB8fCBcIlwiXG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlT3B0aW9ucyA9IGdldEFjdGl2ZU9wdGlvbnMoYWN0aXZlVmFsdWVEdXBsaWNhdGVkKVxuICAgICAgICAgICAgICAgIHNldEFjdGl2ZVZhbHVlKGFjdGl2ZVZhbHVlRHVwbGljYXRlZClcbiAgICAgICAgICAgICAgICBpZiAoIWM/Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgaGFuZGxlQ2hhbmdlKGFjdGl2ZU9wdGlvbnMsIHsgdmlzaWJsZTogZmFsc2UgfSlcbiAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZVByb3BzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFZhbHVlKGFjdGl2ZVZhbHVlRHVwbGljYXRlZClcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoYW5nZU9uU2VsZWN0KSB7XG4gICAgICAgICAgICAgICAgICBoYW5kbGVDaGFuZ2UoYWN0aXZlT3B0aW9ucywgeyB2aXNpYmxlOiB0cnVlIH0pXG4gICAgICAgICAgICAgICAgICBpZiAodmFsdWVQcm9wcyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRWYWx1ZShhY3RpdmVWYWx1ZUR1cGxpY2F0ZWQpXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgcm9sZT1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAga2V5PXt2IHx8IGp9XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoYCR7cHJlZml4fS1tZW51LWl0ZW1gLCB7XG4gICAgICAgICAgICAgICAgICAgIFtgJHtwcmVmaXh9LW1lbnUtaXRlbS1hY3RpdmVgXTogaXNBY3RpdmVPcHRpb24oXG4gICAgICAgICAgICAgICAgICAgICAgbyxcbiAgICAgICAgICAgICAgICAgICAgICBtZW51SW5kZXhcbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgdGl0bGU9e3RpdGxlPy50b1N0cmluZygpfVxuICAgICAgICAgICAgICAgICAgb25Nb3VzZURvd249eyhlKSA9PiBlLnByZXZlbnREZWZhdWx0KCl9XG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWxlY3R9XG4gICAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGFuZFRyaWdnZXIgPT09IFwiaG92ZXJcIiAmJiBjPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZWxheVNlbGVjdChoYW5kbGVTZWxlY3QpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICBvbk1vdXNlTGVhdmU9eygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cGFuZFRyaWdnZXIgPT09IFwiaG92ZXJcIiAmJiBjPy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICBkZWxheVNlbGVjdCgpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3ByZWZpeH0tbWVudS1pdGVtLWNvbnRlbnRgfT57dGl0bGV9PC9kaXY+XG4gICAgICAgICAgICAgICAgICB7ISFjPy5sZW5ndGggJiYgKFxuICAgICAgICAgICAgICAgICAgICA8SWNvblxuICAgICAgICAgICAgICAgICAgICAgIGljb249XCJ0cmlhbmdsZS1yaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LW1lbnUtaXRlbS1pY29uYH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0pfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApKX1cbiAgICAgIDwvQW5pbWF0ZT5cbiAgICA8L2Rpdj5cbiAgKVxuXG4gIHJldHVybiAoXG4gICAgPFBvcG92ZXJcbiAgICAgIGFycm93ZWQ9e2ZhbHNlfVxuICAgICAgcG9wdXBDbGFzc05hbWU9e2Ake3ByZWZpeH0tcG9wdXBgfVxuICAgICAgdmlzaWJsZT17ZGlzYWJsZWQgPyBmYWxzZSA6IHZpc2libGV9XG4gICAgICBvblZpc2libGVDaGFuZ2U9e3NldFBvcHVwVmlzaWJsZX1cbiAgICAgIHRyaWdnZXI9XCJjbGlja1wiXG4gICAgICBwb3B1cD17bWVudXN9XG4gICAgICB7Li4ucG9wb3ZlclByb3BzfVxuICAgID5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoYCR7cHJlZml4fS1idXR0b25gLCBjbGFzc05hbWUsIHtcbiAgICAgICAgICBbYCR7cHJlZml4fS1idXR0b24tdmFsdWVkYF06IGhhc1ZhbHVlLFxuICAgICAgICAgIFtgJHtwcmVmaXh9LWJ1dHRvbi1jbGVhcmFibGVgXTogYWxsb3dDbGVhcixcbiAgICAgICAgfSl9XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIHsuLi5vdGhlclByb3BzfVxuICAgICAgPlxuICAgICAgICB7aGFzVmFsdWUgPyAoXG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWxhYmVsYH0+e2dldFRpdGxlKCl9PC9zcGFuPlxuICAgICAgICApIDogKFxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17YCR7cHJlZml4fS1wbGFjZWhvbGRlcmB9PntwbGFjZWhvbGRlcn08L3NwYW4+XG4gICAgICAgICl9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWljb25zYH0+XG4gICAgICAgICAgPEljb25cbiAgICAgICAgICAgIGljb249XCJ0cmlhbmdsZS1kb3duXCJcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7cHJlZml4fS1zdWZmaXhgfVxuICAgICAgICAgICAgY29sb3I9e1xuICAgICAgICAgICAgICBkaXNhYmxlZFxuICAgICAgICAgICAgICAgID8gXCJ2YXIoLS10cmFuc3BhcmVudC1ncmF5LTYwMClcIlxuICAgICAgICAgICAgICAgIDogXCJ2YXIoLS10cmFuc3BhcmVudC1ncmF5LTcwMClcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2FsbG93Q2xlYXIgJiYgIWRpc2FibGVkICYmIChcbiAgICAgICAgICAgIDxJY29uXG4gICAgICAgICAgICAgIGljb249XCJjYW5jZWwtY2lyY2xlXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LXJlbW92ZWB9XG4gICAgICAgICAgICAgIGNvbG9yPVwidmFyKC0tdHJhbnNwYXJlbnQtZ3JheS03MDApXCJcbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlQ2xlYXJ9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9CdXR0b24+XG4gICAgPC9Qb3BvdmVyPlxuICApXG59XG5cbkNhc2NhZGVyLmRpc3BsYXlOYW1lID0gXCJDYXNjYWRlclwiXG5cbkNhc2NhZGVyLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIOaYr+WQpuaUr+aMgea4hemZpFxuICAgKi9cbiAgYWxsb3dDbGVhcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDlvZPmraTpobnkuLogdHJ1ZSDml7bvvIzngrnpgInmr4/nuqfoj5zljZXpgInpobnlgLzpg73kvJrlj5HnlJ/lj5jljJZcbiAgICovXG4gIGNoYW5nZU9uU2VsZWN0OiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOWtkOiKgueCuVxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICog6ZmE5Yqg57G75ZCN77yM5rOo5oSPIERpYWxvZyDmiYDmnInnmoTlsZ7mgKfkvJrpmYTliqDliLDlhoXpg6jnmoTlhoXlrrnlhYPntKDkuIrvvIzogIzkuI3mmK/ljIXlkKsgbWFzayDnmoTmnIDlpJblsYLlhYPntKBcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOm7mOiupOWAvO+8jOWGhemDqOmpseWKqFxuICAgKi9cbiAgZGVmYXVsdFZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog5piv5ZCm56aB55SoXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDpgInmi6nlkI7lsZXnpLrnmoTmuLLmn5Plh73mlbBcbiAgICovXG4gIGRpc3BsYXlSZW5kZXI6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiDmrKHnuqfoj5zljZXnmoTlsZXlvIDmlrnlvI/vvIzlj6/pgIkgJ2NsaWNrJyDlkowgJ2hvdmVyJ1xuICAgKi9cbiAgZXhwYW5kVHJpZ2dlcjogUHJvcFR5cGVzLm9uZU9mKFtcImNsaWNrXCIsIFwiaG92ZXJcIl0pLFxuICAvKipcbiAgICog5Y+v6YCJ6aG55pWw5o2u5rqQXG4gICAqL1xuICBvcHRpb25zOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog5YC85Y+Y5YyW5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog5LiL5ouJ5qGGIHZpc2libGUg54q25oCB5pS55Y+Y5pe255qE5Zue6LCDXG4gICAqL1xuICBvblZpc2libGVDaGFuZ2U6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiDljaDkvY3mlofmnKxcbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog5bGe5oCn5bCG5Lya6YCP5Lyg57uZIFBvcG92ZXIg57uE5Lu2XG4gICAqL1xuICBwb3BvdmVyUHJvcHM6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiDlsLrlr7hcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihbXCJtaW5pXCIsIFwic21hbGxcIiwgXCJtZWRpdW1cIiwgXCJsYXJnZVwiXSksXG4gIC8qKlxuICAgKiDlgLzvvIzlpJbpg6jmjqfliLZcbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog5aSW6YOo5o6n5Yi25LiL5ouJ5qGGIHZpc2libGUg54q25oCBXG4gICAqL1xuICB2aXNpYmxlOiBQcm9wVHlwZXMuYW55LFxufVxuXG5DYXNjYWRlci5kZWZhdWx0UHJvcHMgPSB7XG4gIGFsbG93Q2xlYXI6IHRydWUsXG4gIGNoYW5nZU9uU2VsZWN0OiBmYWxzZSxcbiAgY2hpbGRyZW46IG51bGwsXG4gIGNsYXNzTmFtZTogdW5kZWZpbmVkLFxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGRpc2FibGVkOiBmYWxzZSxcbiAgZGlzcGxheVJlbmRlcjogdW5kZWZpbmVkLFxuICBleHBhbmRUcmlnZ2VyOiBcImNsaWNrXCIsXG4gIG9uQ2hhbmdlOiB1bmRlZmluZWQsXG4gIG9uVmlzaWJsZUNoYW5nZTogdW5kZWZpbmVkLFxuICBvcHRpb25zOiBbXSxcbiAgcGxhY2Vob2xkZXI6IFwi6K+36YCJ5oupXCIsXG4gIHBvcG92ZXJQcm9wczoge30sXG4gIHNpemU6IFwic21hbGxcIixcbiAgdmFsdWU6IG51bGwsXG4gIHZpc2libGU6IG51bGwsXG59XG5cbmV4cG9ydCBkZWZhdWx0IENhc2NhZGVyXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLE9BQU9BLEtBQVAsSUFBZ0JDLE1BQWhCLEVBQXdCQyxRQUF4QixRQUF3QyxPQUF4QztBQUNBLE9BQU9DLFNBQVAsTUFBc0IsWUFBdEI7QUFDQSxPQUFPQyxVQUFQLE1BQXVCLFlBQXZCO0FBQ0EsT0FBT0MsT0FBUCxN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