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>
256 lines • 37.4 kB
JavaScript
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); }
var _excluded = ["action", "className", "closable", "content", "duration", "getContainer", "intent", "onClose"],
_excluded2 = ["onClose", "getContainer"];
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 _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 _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 _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; }
import React, { forwardRef, useEffect, useImperativeHandle, useRef } from "react";
import * as ReactDOM from "react-dom";
import PropTypes from "prop-types";
import classNames from "classnames";
import Button from "../button";
import "./style";
var prefix = "adui-channels-message";
var INTENTS = ["normal", "primary", "success", "warning", "danger"];
var Message = forwardRef(function (_ref, ref) {
var action = _ref.action,
className = _ref.className,
closable = _ref.closable,
content = _ref.content,
duration = _ref.duration,
getContainer = _ref.getContainer,
intent = _ref.intent,
onClose = _ref.onClose,
otherProps = _objectWithoutProperties(_ref, _excluded);
var messageRef = useRef(null);
var icon = React.createElement("svg", {
className: "".concat(prefix, "-icon"),
width: "20",
height: "20",
viewBox: "0 0 20 20",
fill: "none"
}, React.createElement("path", {
fillRule: "evenodd",
clipRule: "evenodd",
d: "M1.66663 10C1.66663 14.6024 5.39759 18.3333 9.99996 18.3333C14.6023 18.3333 18.3333 14.6024 18.3333 10C18.3333 5.39763 14.6023 1.66667 9.99996 1.66667C5.39759 1.66667 1.66663 5.39763 1.66663 10ZM13.6856 7.11667L9.01949 11.7828L6.71457 9.47785L5.83329 10.3591L8.31438 12.842C8.70481 13.2327 9.33806 13.2329 9.72871 12.8424L14.571 8.00211L13.6856 7.11667Z",
fill: "#07C160",
fillOpacity: "0.9"
}));
switch (intent) {
case "normal":
icon = React.createElement("svg", {
className: "".concat(prefix, "-icon"),
width: "20",
height: "20",
viewBox: "0 0 20 20",
fill: "none"
}, React.createElement("path", {
fillRule: "evenodd",
clipRule: "evenodd",
d: "M9.99996 18.3333C5.39759 18.3333 1.66663 14.6024 1.66663 10C1.66663 5.39762 5.39759 1.66666 9.99996 1.66666C14.6023 1.66666 18.3333 5.39762 18.3333 10C18.3333 14.6024 14.6023 18.3333 9.99996 18.3333ZM10.625 8.33333V14.1667H9.37496V8.33333H10.625ZM9.99996 7.5C10.4602 7.5 10.8333 7.1269 10.8333 6.66666C10.8333 6.20643 10.4602 5.83333 9.99996 5.83333C9.53972 5.83333 9.16663 6.20643 9.16663 6.66666C9.16663 7.1269 9.53972 7.5 9.99996 7.5Z",
fill: "#10AEFF"
}));
break;
case "warning":
icon = React.createElement("svg", {
className: "".concat(prefix, "-icon"),
width: "20",
height: "20",
viewBox: "0 0 20 20",
fill: "none"
}, React.createElement("path", {
fillRule: "evenodd",
clipRule: "evenodd",
d: "M18.3005 16.0439C18.6855 16.7105 18.2044 17.5439 17.4346 17.5439L2.5653 17.5452C1.79551 17.5452 1.31431 16.712 1.69913 16.0453L9.13254 3.16683C9.51738 2.5001 10.4797 2.50002 10.8646 3.16667L18.3005 16.0439ZM9.37253 7.9541H10.6274L10.5298 12.6758H9.47019L9.37253 7.9541ZM9.28952 14.4043C9.28952 14.79 9.60202 15.0977 9.99753 15.0977C10.3979 15.0977 10.7104 14.79 10.7104 14.4043C10.7104 14.0185 10.3979 13.7158 9.99753 13.7158C9.60202 13.7158 9.28952 14.0185 9.28952 14.4043Z",
fill: "#FA9D3B"
}));
break;
case "danger":
icon = React.createElement("svg", {
className: "".concat(prefix, "-icon"),
width: "20",
height: "20",
viewBox: "0 0 20 20",
fill: "none"
}, React.createElement("path", {
fillRule: "evenodd",
clipRule: "evenodd",
d: "M9.99996 18.3333C5.39759 18.3333 1.66663 14.6024 1.66663 10C1.66663 5.39763 5.39759 1.66667 9.99996 1.66667C14.6023 1.66667 18.3333 5.39763 18.3333 10C18.3333 14.6024 14.6023 18.3333 9.99996 18.3333ZM9.36389 5.11312H10.6342L10.5431 11.4437H9.45504L9.36389 5.11312ZM9.24996 13.5173C9.24996 13.9331 9.58036 14.2521 9.99622 14.2521C10.4235 14.2521 10.7482 13.9331 10.7482 13.5173C10.7482 13.1014 10.4235 12.7824 9.99622 12.7824C9.58036 12.7824 9.24996 13.1014 9.24996 13.5173Z",
fill: "#FA5151"
}));
break;
default:
break;
}
var timer;
var clearCloseTimer = function clearCloseTimer() {
if (timer) {
clearTimeout(timer);
timer = null;
}
};
var close = function close() {
if (messageRef && messageRef.current) {
messageRef.current.style.opacity = "0";
messageRef.current.style.visibility = "hidden";
messageRef.current.style.filter = "blur(4px)";
}
clearCloseTimer();
if (onClose) {
onClose();
}
};
var setCloseTimer = function setCloseTimer() {
if (duration) {
timer = setTimeout(function () {
close();
}, duration * 1000);
}
};
useEffect(function () {
setCloseTimer();
return clearCloseTimer;
}, []);
useImperativeHandle(ref, function () {
return {
close: close,
getDomNode: function getDomNode() {
return messageRef.current;
}
};
});
var hasActions = action || closable;
return React.createElement("div", _extends({
className: classNames(className, "".concat(prefix, "-base"), "".concat(prefix, "-").concat(intent), _defineProperty({}, "".concat(prefix, "-hasActions"), hasActions)),
onMouseEnter: clearCloseTimer,
onMouseLeave: setCloseTimer,
ref: messageRef,
"data-duration": duration
}, otherProps), icon, React.createElement("div", {
className: "".concat(prefix, "-content")
}, content), hasActions && React.createElement("div", {
className: "".concat(prefix, "-actions")
}, action && React.createElement("div", {
className: "".concat(prefix, "-action")
}, React.createElement(Button, {
theme: "light",
onClick: function onClick() {
var onClick = action.onClick;
if (onClick) {
onClick();
}
}
}, action.text)), closable && React.createElement(Button, {
leftIcon: "cancel",
theme: "light",
onClick: close
})));
});
Message.displayName = "Message";
Message.propTypes = {
action: PropTypes.any,
className: PropTypes.string,
closable: PropTypes.bool,
content: PropTypes.node,
duration: PropTypes.number,
getContainer: PropTypes.func,
intent: PropTypes.any,
onClose: PropTypes.func
};
Message.defaultProps = {
action: null,
className: undefined,
closable: false,
content: null,
duration: 2,
getContainer: undefined,
intent: "normal",
onClose: null
};
var newInstance = function newInstance(props) {
var instances = Array.from(document.getElementsByClassName("".concat(prefix, "-wrapper")));
instances = instances.filter(function (o) {
return o.dataset.close !== "true";
});
if (instances && instances.length > 2) {
var firstInstance = instances[0];
var firstChild = firstInstance.children[0];
if (firstChild.dataset.duration !== "0") {
firstInstance.dataset.close = "true";
firstChild.style.opacity = "0";
firstChild.style.visibility = "hidden";
firstChild.style.filter = "blur(4px)";
}
}
var instance;
var onClose = props.onClose,
getContainer = props.getContainer,
otherProps = _objectWithoutProperties(props, _excluded2);
var container = document.createElement("div");
container.className = "".concat(prefix, "-wrapper");
if (getContainer) {
getContainer().appendChild(container);
} else {
document.body.appendChild(container);
}
var updateStyles = function updateStyles() {
setTimeout(function () {
var messages = document.getElementsByClassName("".concat(prefix, "-wrapper"));
Array.prototype.forEach.call(messages, function (message, index) {
message.style.opacity = "1";
message.style.transform = "\n translate3d(var(--message-offset-x),\n calc(".concat(56 * (messages.length - 1 - index), "px + var(--message-offset-y)), 0)");
});
}, 50);
};
updateStyles();
var close = function close() {
if (onClose) {
onClose();
}
setTimeout(function () {
var unmountResult = ReactDOM.unmountComponentAtNode(container);
if (unmountResult && container.parentNode) {
container.parentNode.removeChild(container);
updateStyles();
}
}, 300);
};
ReactDOM.render(React.createElement(Message, _extends({
ref: function ref(message) {
instance = message;
},
onClose: close
}, otherProps)), container);
return {
destroy: function destroy() {
if (instance) {
instance.close();
}
}
};
};
INTENTS.forEach(function (intent) {
Message[intent] = function (config) {
var cnfg = {
intent: intent
};
if (typeof config === "string") {
cnfg = {
content: config,
intent: intent
};
} else {
cnfg = config;
}
return newInstance(_objectSpread(_objectSpread({}, cnfg), {}, {
intent: intent
}));
};
});
export default Message;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImZvcndhcmRSZWYiLCJ1c2VFZmZlY3QiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwidXNlUmVmIiwiUmVhY3RET00iLCJQcm9wVHlwZXMiLCJjbGFzc05hbWVzIiwiQnV0dG9uIiwicHJlZml4IiwiSU5URU5UUyIsIk1lc3NhZ2UiLCJfcmVmIiwicmVmIiwiYWN0aW9uIiwiY2xhc3NOYW1lIiwiY2xvc2FibGUiLCJjb250ZW50IiwiZHVyYXRpb24iLCJnZXRDb250YWluZXIiLCJpbnRlbnQiLCJvbkNsb3NlIiwib3RoZXJQcm9wcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsIm1lc3NhZ2VSZWYiLCJpY29uIiwiY3JlYXRlRWxlbWVudCIsImNvbmNhdCIsIndpZHRoIiwiaGVpZ2h0Iiwidmlld0JveCIsImZpbGwiLCJmaWxsUnVsZSIsImNsaXBSdWxlIiwiZCIsImZpbGxPcGFjaXR5IiwidGltZXIiLCJjbGVhckNsb3NlVGltZXIiLCJjbGVhclRpbWVvdXQiLCJjbG9zZSIsImN1cnJlbnQiLCJzdHlsZSIsIm9wYWNpdHkiLCJ2aXNpYmlsaXR5IiwiZmlsdGVyIiwic2V0Q2xvc2VUaW1lciIsInNldFRpbWVvdXQiLCJnZXREb21Ob2RlIiwiaGFzQWN0aW9ucyIsIl9leHRlbmRzIiwiX2RlZmluZVByb3BlcnR5Iiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwidGhlbWUiLCJvbkNsaWNrIiwidGV4dCIsImxlZnRJY29uIiwiZGlzcGxheU5hbWUiLCJwcm9wVHlwZXMiLCJhbnkiLCJzdHJpbmciLCJib29sIiwibm9kZSIsIm51bWJlciIsImZ1bmMiLCJkZWZhdWx0UHJvcHMiLCJ1bmRlZmluZWQiLCJuZXdJbnN0YW5jZSIsInByb3BzIiwiaW5zdGFuY2VzIiwiQXJyYXkiLCJmcm9tIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwibyIsImRhdGFzZXQiLCJsZW5ndGgiLCJmaXJzdEluc3RhbmNlIiwiZmlyc3RDaGlsZCIsImNoaWxkcmVuIiwiaW5zdGFuY2UiLCJfZXhjbHVkZWQyIiwiY29udGFpbmVyIiwiYXBwZW5kQ2hpbGQiLCJib2R5IiwidXBkYXRlU3R5bGVzIiwibWVzc2FnZXMiLCJwcm90b3R5cGUiLCJmb3JFYWNoIiwiY2FsbCIsIm1lc3NhZ2UiLCJpbmRleCIsInRyYW5zZm9ybSIsInVubW91bnRSZXN1bHQiLCJ1bm1vdW50Q29tcG9uZW50QXROb2RlIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwicmVuZGVyIiwiZGVzdHJveSIsImNvbmZpZyIsImNuZmciLCJfb2JqZWN0U3ByZWFkIl0sInNvdXJjZXMiOlsiLi4vLi4vY29tcG9uZW50cy9jaGFubmVscy1tZXNzYWdlL01lc3NhZ2UudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCBSZWFjdCwge1xuICBmb3J3YXJkUmVmLFxuICB1c2VFZmZlY3QsXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUsXG4gIHVzZVJlZixcbn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCAqIGFzIFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgQnV0dG9uIGZyb20gXCIuLi9idXR0b25cIlxuaW1wb3J0IFwiLi9zdHlsZVwiXG5cbmNvbnN0IHByZWZpeCA9IFwiYWR1aS1jaGFubmVscy1tZXNzYWdlXCJcbmNvbnN0IElOVEVOVFMgPSBbXCJub3JtYWxcIiwgXCJwcmltYXJ5XCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIiwgXCJkYW5nZXJcIl1cblxuZXhwb3J0IGludGVyZmFjZSBJTWVzc2FnZVByb3BzIHtcbiAgW2tleTogc3RyaW5nXTogYW55XG4gIC8qKlxuICAgKiDooYzliqjmjInpkq7nmoTphY3nva7vvIzlpoLvvJphY3Rpb246IHsgdGV4dDogXCLop6PplIFcIiwgb25DbGljazogKCkgPT4geyBtZXNzYWdlLmRlc3Ryb3koKSB9IH1cbiAgICovXG4gIGFjdGlvbj86IHsgdGV4dDogc3RyaW5nOyBvbkNsaWNrOiAoKSA9PiB2b2lkIH0gfCBudWxsXG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI1cbiAgICovXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICAvKipcbiAgICog5piv5ZCm5pi+56S65YWz6ZetIEljb27vvIzlpoLmnpzpnIDopoHlj6rmlK/mjIHmiYvliqjlhbPpl63vvIzov5jpnIDopoHkvKDlhaUgZHVyYXRpb246IDBcbiAgICovXG4gIGNsb3NhYmxlPzogYm9vbGVhblxuICAvKipcbiAgICog5YaF5a65XG4gICAqL1xuICBjb250ZW50PzogUmVhY3QuUmVhY3ROb2RlXG4gIC8qKlxuICAgKiDpl7TpmpTlpJrkuYXoh6rliqjlhbPpl63vvIzljZXkvY3kuLogc++8jOWmguaenOS8oOWFpSAw77yM5YiZ6KGo56S65LiN5Lya6Ieq5Yqo5raI5aSxXG4gICAqL1xuICBkdXJhdGlvbj86IG51bWJlclxuICAvKipcbiAgICogTWVzc2FnZSDmj5LlhaXliLDlk6rkuKrlhYPntKDvvIzpu5jorqQgKCkgPT4gZG9jdW1lbnQuYm9keVxuICAgKi9cbiAgZ2V0Q29udGFpbmVyPzogKCkgPT4gSFRNTEVsZW1lbnRcbiAgLyoqXG4gICAqIOiuvue9ruexu+Wei1xuICAgKi9cbiAgaW50ZW50OiBcIm5vcm1hbFwiIHwgXCJwcmltYXJ5XCIgfCBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ1wiIHwgXCJkYW5nZXJcIlxuICAvKipcbiAgICog5YWz6Zet5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2xvc2U/OiAoKCkgPT4gdm9pZCkgfCBudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1lc3NhZ2VcbiAgZXh0ZW5kcyBSZWFjdC5Gb3J3YXJkUmVmRXhvdGljQ29tcG9uZW50PFxuICAgIElNZXNzYWdlUHJvcHMgJiBSZWFjdC5SZWZBdHRyaWJ1dGVzPEhUTUxEaXZFbGVtZW50PlxuICA+IHtcbiAgbm9ybWFsOiBhbnlcbiAgcHJpbWFyeTogYW55XG4gIHN1Y2Nlc3M6IGFueVxuICB3YXJuaW5nOiBhbnlcbiAgZGFuZ2VyOiBhbnlcbn1cblxuLyoqXG4gKiDlhajlsYDmj5DphpLnlKjkuo7lhajlsYDmgKflnLDlsZXnpLrpnIDopoHljbPml7bmgKflhbPms6jnmoTkv6Hmga/jgIJcbiAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgTWVzc2FnZTogSU1lc3NhZ2UgPSBmb3J3YXJkUmVmKFxuICAoXG4gICAge1xuICAgICAgYWN0aW9uLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY2xvc2FibGUsXG4gICAgICBjb250ZW50LFxuICAgICAgZHVyYXRpb24sXG4gICAgICBnZXRDb250YWluZXIsXG4gICAgICBpbnRlbnQsXG4gICAgICBvbkNsb3NlLFxuICAgICAgLi4ub3RoZXJQcm9wc1xuICAgIH06IElNZXNzYWdlUHJvcHMsXG4gICAgcmVmOiBhbnlcbiAgKSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcblxuICAgIGxldCBpY29uID0gKFxuICAgICAgPHN2Z1xuICAgICAgICBjbGFzc05hbWU9e2Ake3ByZWZpeH0taWNvbmB9XG4gICAgICAgIHdpZHRoPVwiMjBcIlxuICAgICAgICBoZWlnaHQ9XCIyMFwiXG4gICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICA+XG4gICAgICAgIDxwYXRoXG4gICAgICAgICAgZmlsbFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICBjbGlwUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgIGQ9XCJNMS42NjY2MyAxMEMxLjY2NjYzIDE0LjYwMjQgNS4zOTc1OSAxOC4zMzMzIDkuOTk5OTYgMTguMzMzM0MxNC42MDIzIDE4LjMzMzMgMTguMzMzMyAxNC42MDI0IDE4LjMzMzMgMTBDMTguMzMzMyA1LjM5NzYzIDE0LjYwMjMgMS42NjY2NyA5Ljk5OTk2IDEuNjY2NjdDNS4zOTc1OSAxLjY2NjY3IDEuNjY2NjMgNS4zOTc2MyAxLjY2NjYzIDEwWk0xMy42ODU2IDcuMTE2NjdMOS4wMTk0OSAxMS43ODI4TDYuNzE0NTcgOS40Nzc4NUw1LjgzMzI5IDEwLjM1OTFMOC4zMTQzOCAxMi44NDJDOC43MDQ4MSAxMy4yMzI3IDkuMzM4MDYgMTMuMjMyOSA5LjcyODcxIDEyLjg0MjRMMTQuNTcxIDguMDAyMTFMMTMuNjg1NiA3LjExNjY3WlwiXG4gICAgICAgICAgZmlsbD1cIiMwN0MxNjBcIlxuICAgICAgICAgIGZpbGxPcGFjaXR5PVwiMC45XCJcbiAgICAgICAgLz5cbiAgICAgIDwvc3ZnPlxuICAgIClcblxuICAgIHN3aXRjaCAoaW50ZW50KSB7XG4gICAgICBjYXNlIFwibm9ybWFsXCI6XG4gICAgICAgIGljb24gPSAoXG4gICAgICAgICAgPHN2Z1xuICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWljb25gfVxuICAgICAgICAgICAgd2lkdGg9XCIyMFwiXG4gICAgICAgICAgICBoZWlnaHQ9XCIyMFwiXG4gICAgICAgICAgICB2aWV3Qm94PVwiMCAwIDIwIDIwXCJcbiAgICAgICAgICAgIGZpbGw9XCJub25lXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICA8cGF0aFxuICAgICAgICAgICAgICBmaWxsUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICBjbGlwUnVsZT1cImV2ZW5vZGRcIlxuICAgICAgICAgICAgICBkPVwiTTkuOTk5OTYgMTguMzMzM0M1LjM5NzU5IDE4LjMzMzMgMS42NjY2MyAxNC42MDI0IDEuNjY2NjMgMTBDMS42NjY2MyA1LjM5NzYyIDUuMzk3NTkgMS42NjY2NiA5Ljk5OTk2IDEuNjY2NjZDMTQuNjAyMyAxLjY2NjY2IDE4LjMzMzMgNS4zOTc2MiAxOC4zMzMzIDEwQzE4LjMzMzMgMTQuNjAyNCAxNC42MDIzIDE4LjMzMzMgOS45OTk5NiAxOC4zMzMzWk0xMC42MjUgOC4zMzMzM1YxNC4xNjY3SDkuMzc0OTZWOC4zMzMzM0gxMC42MjVaTTkuOTk5OTYgNy41QzEwLjQ2MDIgNy41IDEwLjgzMzMgNy4xMjY5IDEwLjgzMzMgNi42NjY2NkMxMC44MzMzIDYuMjA2NDMgMTAuNDYwMiA1LjgzMzMzIDkuOTk5OTYgNS44MzMzM0M5LjUzOTcyIDUuODMzMzMgOS4xNjY2MyA2LjIwNjQzIDkuMTY2NjMgNi42NjY2NkM5LjE2NjYzIDcuMTI2OSA5LjUzOTcyIDcuNSA5Ljk5OTk2IDcuNVpcIlxuICAgICAgICAgICAgICBmaWxsPVwiIzEwQUVGRlwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3ZnPlxuICAgICAgICApXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFwid2FybmluZ1wiOlxuICAgICAgICBpY29uID0gKFxuICAgICAgICAgIDxzdmdcbiAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7cHJlZml4fS1pY29uYH1cbiAgICAgICAgICAgIHdpZHRoPVwiMjBcIlxuICAgICAgICAgICAgaGVpZ2h0PVwiMjBcIlxuICAgICAgICAgICAgdmlld0JveD1cIjAgMCAyMCAyMFwiXG4gICAgICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgZmlsbFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgY2xpcFJ1bGU9XCJldmVub2RkXCJcbiAgICAgICAgICAgICAgZD1cIk0xOC4zMDA1IDE2LjA0MzlDMTguNjg1NSAxNi43MTA1IDE4LjIwNDQgMTcuNTQzOSAxNy40MzQ2IDE3LjU0MzlMMi41NjUzIDE3LjU0NTJDMS43OTU1MSAxNy41NDUyIDEuMzE0MzEgMTYuNzEyIDEuNjk5MTMgMTYuMDQ1M0w5LjEzMjU0IDMuMTY2ODNDOS41MTczOCAyLjUwMDEgMTAuNDc5NyAyLjUwMDAyIDEwLjg2NDYgMy4xNjY2N0wxOC4zMDA1IDE2LjA0MzlaTTkuMzcyNTMgNy45NTQxSDEwLjYyNzRMMTAuNTI5OCAxMi42NzU4SDkuNDcwMTlMOS4zNzI1MyA3Ljk1NDFaTTkuMjg5NTIgMTQuNDA0M0M5LjI4OTUyIDE0Ljc5IDkuNjAyMDIgMTUuMDk3NyA5Ljk5NzUzIDE1LjA5NzdDMTAuMzk3OSAxNS4wOTc3IDEwLjcxMDQgMTQuNzkgMTAuNzEwNCAxNC40MDQzQzEwLjcxMDQgMTQuMDE4NSAxMC4zOTc5IDEzLjcxNTggOS45OTc1MyAxMy43MTU4QzkuNjAyMDIgMTMuNzE1OCA5LjI4OTUyIDE0LjAxODUgOS4yODk1MiAxNC40MDQzWlwiXG4gICAgICAgICAgICAgIGZpbGw9XCIjRkE5RDNCXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIClcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgXCJkYW5nZXJcIjpcbiAgICAgICAgaWNvbiA9IChcbiAgICAgICAgICA8c3ZnXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Ake3ByZWZpeH0taWNvbmB9XG4gICAgICAgICAgICB3aWR0aD1cIjIwXCJcbiAgICAgICAgICAgIGhlaWdodD1cIjIwXCJcbiAgICAgICAgICAgIHZpZXdCb3g9XCIwIDAgMjAgMjBcIlxuICAgICAgICAgICAgZmlsbD1cIm5vbmVcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgIGZpbGxSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgIGNsaXBSdWxlPVwiZXZlbm9kZFwiXG4gICAgICAgICAgICAgIGQ9XCJNOS45OTk5NiAxOC4zMzMzQzUuMzk3NTkgMTguMzMzMyAxLjY2NjYzIDE0LjYwMjQgMS42NjY2MyAxMEMxLjY2NjYzIDUuMzk3NjMgNS4zOTc1OSAxLjY2NjY3IDkuOTk5OTYgMS42NjY2N0MxNC42MDIzIDEuNjY2NjcgMTguMzMzMyA1LjM5NzYzIDE4LjMzMzMgMTBDMTguMzMzMyAxNC42MDI0IDE0LjYwMjMgMTguMzMzMyA5Ljk5OTk2IDE4LjMzMzNaTTkuMzYzODkgNS4xMTMxMkgxMC42MzQyTDEwLjU0MzEgMTEuNDQzN0g5LjQ1NTA0TDkuMzYzODkgNS4xMTMxMlpNOS4yNDk5NiAxMy41MTczQzkuMjQ5OTYgMTMuOTMzMSA5LjU4MDM2IDE0LjI1MjEgOS45OTYyMiAxNC4yNTIxQzEwLjQyMzUgMTQuMjUyMSAxMC43NDgyIDEzLjkzMzEgMTAuNzQ4MiAxMy41MTczQzEwLjc0ODIgMTMuMTAxNCAxMC40MjM1IDEyLjc4MjQgOS45OTYyMiAxMi43ODI0QzkuNTgwMzYgMTIuNzgyNCA5LjI0OTk2IDEzLjEwMTQgOS4yNDk5NiAxMy41MTczWlwiXG4gICAgICAgICAgICAgIGZpbGw9XCIjRkE1MTUxXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9zdmc+XG4gICAgICAgIClcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgbGV0IHRpbWVyOiBudWxsIHwgUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD5cblxuICAgIGNvbnN0IGNsZWFyQ2xvc2VUaW1lciA9ICgpID0+IHtcbiAgICAgIGlmICh0aW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpXG4gICAgICAgIHRpbWVyID0gbnVsbFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuICAgICAgaWYgKG1lc3NhZ2VSZWYgJiYgbWVzc2FnZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIG1lc3NhZ2VSZWYuY3VycmVudC5zdHlsZS5vcGFjaXR5ID0gXCIwXCJcbiAgICAgICAgbWVzc2FnZVJlZi5jdXJyZW50LnN0eWxlLnZpc2liaWxpdHkgPSBcImhpZGRlblwiXG4gICAgICAgIG1lc3NhZ2VSZWYuY3VycmVudC5zdHlsZS5maWx0ZXIgPSBcImJsdXIoNHB4KVwiXG4gICAgICB9XG4gICAgICBjbGVhckNsb3NlVGltZXIoKVxuICAgICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgICAgb25DbG9zZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0Q2xvc2VUaW1lciA9ICgpID0+IHtcbiAgICAgIGlmIChkdXJhdGlvbikge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNsb3NlKClcbiAgICAgICAgfSwgZHVyYXRpb24gKiAxMDAwKVxuICAgICAgfVxuICAgIH1cblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBzZXRDbG9zZVRpbWVyKClcbiAgICAgIHJldHVybiBjbGVhckNsb3NlVGltZXJcbiAgICB9LCBbXSlcblxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgICAgY2xvc2UsXG4gICAgICBnZXREb21Ob2RlOiAoKSA9PiBtZXNzYWdlUmVmLmN1cnJlbnQsXG4gICAgfSkpXG5cbiAgICBjb25zdCBoYXNBY3Rpb25zID0gYWN0aW9uIHx8IGNsb3NhYmxlXG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIGAke3ByZWZpeH0tYmFzZWAsXG4gICAgICAgICAgYCR7cHJlZml4fS0ke2ludGVudH1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFtgJHtwcmVmaXh9LWhhc0FjdGlvbnNgXTogaGFzQWN0aW9ucyxcbiAgICAgICAgICB9XG4gICAgICAgICl9XG4gICAgICAgIG9uTW91c2VFbnRlcj17Y2xlYXJDbG9zZVRpbWVyfVxuICAgICAgICBvbk1vdXNlTGVhdmU9e3NldENsb3NlVGltZXJ9XG4gICAgICAgIHJlZj17bWVzc2FnZVJlZn1cbiAgICAgICAgZGF0YS1kdXJhdGlvbj17ZHVyYXRpb259XG4gICAgICAgIHsuLi5vdGhlclByb3BzfVxuICAgICAgPlxuICAgICAgICB7aWNvbn1cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3ByZWZpeH0tY29udGVudGB9Pntjb250ZW50fTwvZGl2PlxuICAgICAgICB7aGFzQWN0aW9ucyAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3ByZWZpeH0tYWN0aW9uc2B9PlxuICAgICAgICAgICAge2FjdGlvbiAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWFjdGlvbmB9PlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHRoZW1lPVwibGlnaHRcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IG9uQ2xpY2sgfSA9IGFjdGlvblxuICAgICAgICAgICAgICAgICAgICBpZiAob25DbGljaykge1xuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2soKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHthY3Rpb24udGV4dH1cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Nsb3NhYmxlICYmIChcbiAgICAgICAgICAgICAgPEJ1dHRvbiBsZWZ0SWNvbj1cImNhbmNlbFwiIHRoZW1lPVwibGlnaHRcIiBvbkNsaWNrPXtjbG9zZX0gLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cbilcblxuTWVzc2FnZS5kaXNwbGF5TmFtZSA9IFwiTWVzc2FnZVwiXG5cbk1lc3NhZ2UucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICog6KGM5Yqo5oyJ6ZKu55qE6YWN572u77yM5aaC77yaYWN0aW9uOiB7IHRleHQ6IFwi6Kej6ZSBXCIsIG9uQ2xpY2s6ICgpID0+IHsgbWVzc2FnZS5kZXN0cm95KCkgfSB9XG4gICAqL1xuICBhY3Rpb246IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI1cbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOaYr+WQpuaYvuekuuWFs+mXrSBJY29u77yM5aaC5p6c6ZyA6KaB5Y+q5pSv5oyB5omL5Yqo5YWz6Zet77yM6L+Y6ZyA6KaB5Lyg5YWlIGR1cmF0aW9uOiAwXG4gICAqL1xuICBjbG9zYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDlhoXlrrlcbiAgICovXG4gIGNvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICog6Ze06ZqU5aSa5LmF6Ieq5Yqo5YWz6Zet77yM5Y2V5L2N5Li6IHPvvIzlpoLmnpzkvKDlhaUgMO+8jOWImeihqOekuuS4jeS8muiHquWKqOa2iOWksVxuICAgKi9cbiAgZHVyYXRpb246IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBNZXNzYWdlIOaPkuWFpeWIsOWTquS4quWFg+e0oO+8jOm7mOiupCAoKSA9PiBkb2N1bWVudC5ib2R5XG4gICAqL1xuICBnZXRDb250YWluZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog6K6+572u57G75Z6LXG4gICAqL1xuICBpbnRlbnQ6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiDlhbPpl63ml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG59XG5cbk1lc3NhZ2UuZGVmYXVsdFByb3BzID0ge1xuICBhY3Rpb246IG51bGwsXG4gIGNsYXNzTmFtZTogdW5kZWZpbmVkLFxuICBjbG9zYWJsZTogZmFsc2UsXG4gIGNvbnRlbnQ6IG51bGwsXG4gIGR1cmF0aW9uOiAyLFxuICBnZXRDb250YWluZXI6IHVuZGVmaW5lZCxcbiAgaW50ZW50OiBcIm5vcm1hbFwiLFxuICBvbkNsb3NlOiBudWxsLFxufVxuXG5jb25zdCBuZXdJbnN0YW5jZSA9IChwcm9wczogSU1lc3NhZ2VQcm9wcykgPT4ge1xuICBsZXQgaW5zdGFuY2VzID0gQXJyYXkuZnJvbShcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGAke3ByZWZpeH0td3JhcHBlcmApXG4gIClcbiAgaW5zdGFuY2VzID0gaW5zdGFuY2VzLmZpbHRlcihcbiAgICAobzogSFRNTERpdkVsZW1lbnQpID0+IG8uZGF0YXNldC5jbG9zZSAhPT0gXCJ0cnVlXCJcbiAgKVxuICBpZiAoaW5zdGFuY2VzICYmIGluc3RhbmNlcy5sZW5ndGggPiAyKSB7XG4gICAgY29uc3QgZmlyc3RJbnN0YW5jZSA9IGluc3RhbmNlc1swXSBhcyBIVE1MRWxlbWVudFxuICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBmaXJzdEluc3RhbmNlLmNoaWxkcmVuWzBdIGFzIEhUTUxFbGVtZW50XG4gICAgaWYgKGZpcnN0Q2hpbGQuZGF0YXNldC5kdXJhdGlvbiAhPT0gXCIwXCIpIHtcbiAgICAgIGZpcnN0SW5zdGFuY2UuZGF0YXNldC5jbG9zZSA9IFwidHJ1ZVwiXG4gICAgICBmaXJzdENoaWxkLnN0eWxlLm9wYWNpdHkgPSBcIjBcIlxuICAgICAgZmlyc3RDaGlsZC5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIlxuICAgICAgZmlyc3RDaGlsZC5zdHlsZS5maWx0ZXIgPSBcImJsdXIoNHB4KVwiXG4gICAgfVxuICB9XG5cbiAgbGV0IGluc3RhbmNlOiBhbnlcblxuICBjb25zdCB7IG9uQ2xvc2UsIGdldENvbnRhaW5lciwgLi4ub3RoZXJQcm9wcyB9ID0gcHJvcHNcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICBjb250YWluZXIuY2xhc3NOYW1lID0gYCR7cHJlZml4fS13cmFwcGVyYFxuICBpZiAoZ2V0Q29udGFpbmVyKSB7XG4gICAgZ2V0Q29udGFpbmVyKCkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKVxuICB9IGVsc2Uge1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoY29udGFpbmVyKVxuICB9XG5cbiAgY29uc3QgdXBkYXRlU3R5bGVzID0gKCkgPT4ge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgbWVzc2FnZXMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGAke3ByZWZpeH0td3JhcHBlcmApXG4gICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKFxuICAgICAgICBtZXNzYWdlcyxcbiAgICAgICAgKG1lc3NhZ2U6IEhUTUxEaXZFbGVtZW50LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgbWVzc2FnZS5zdHlsZS5vcGFjaXR5ID0gXCIxXCJcbiAgICAgICAgICBtZXNzYWdlLnN0eWxlLnRyYW5zZm9ybSA9IGBcbiAgICAgICAgICB0cmFuc2xhdGUzZCh2YXIoLS1tZXNzYWdlLW9mZnNldC14KSxcbiAgICAgICAgICBjYWxjKCR7XG4gICAgICAgICAgICA1NiAqIChtZXNzYWdlcy5sZW5ndGggLSAxIC0gaW5kZXgpXG4gICAgICAgICAgfXB4ICsgdmFyKC0tbWVzc2FnZS1vZmZzZXQteSkpLCAwKWBcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH0sIDUwKVxuICB9XG5cbiAgdXBkYXRlU3R5bGVzKClcblxuICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICBpZiAob25DbG9zZSkge1xuICAgICAgb25DbG9zZSgpXG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgdW5tb3VudFJlc3VsdCA9IFJlYWN0RE9NLnVubW91bnRDb21wb25lbnRBdE5vZGUoY29udGFpbmVyKVxuICAgICAgaWYgKHVubW91bnRSZXN1bHQgJiYgY29udGFpbmVyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29udGFpbmVyKVxuICAgICAgICB1cGRhdGVTdHlsZXMoKVxuICAgICAgfVxuICAgIH0sIDMwMClcbiAgfVxuXG4gIFJlYWN0RE9NLnJlbmRlcihcbiAgICA8TWVzc2FnZVxuICAgICAgcmVmPXsobWVzc2FnZSkgPT4ge1xuICAgICAgICBpbnN0YW5jZSA9IG1lc3NhZ2VcbiAgICAgIH19XG4gICAgICBvbkNsb3NlPXtjbG9zZX1cbiAgICAgIHsuLi5vdGhlclByb3BzfVxuICAgIC8+LFxuICAgIGNvbnRhaW5lclxuICApXG5cbiAgcmV0dXJuIHtcbiAgICBkZXN0cm95OiAoKSA9PiB7XG4gICAgICBpZiAoaW5zdGFuY2UpIHtcbiAgICAgICAgaW5zdGFuY2UuY2xvc2UoKVxuICAgICAgfVxuICAgIH0sXG4gIH1cbn1cblxuSU5URU5UUy5mb3JFYWNoKFxuICAoaW50ZW50OiBcIm5vcm1hbFwiIHwgXCJwcmltYXJ5XCIgfCBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ1wiIHwgXCJkYW5nZXJcIikgPT4ge1xuICAgIE1lc3NhZ2VbaW50ZW50XSA9IChjb25maWc6IElNZXNzYWdlUHJvcHMgfCBzdHJpbmcpID0+IHtcbiAgICAgIGxldCBjbmZnID0geyBpbnRlbnQgfSBhcyBJTWVzc2FnZVByb3BzXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjbmZnID0geyBjb250ZW50OiBjb25maWcsIGludGVudCB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbmZnID0gY29uZmlnXG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3SW5zdGFuY2Uoe1xuICAgICAgICAuLi5jbmZnLFxuICAgICAgICBpbnRlbnQsXG4gICAgICB9KVxuICAgIH1cbiAgfVxuKVxuXG5leHBvcnQgZGVmYXVsdCBNZXNzYWdlXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQ0EsT0FBT0EsS0FBSyxJQUNWQyxVQUFVLEVBQ1ZDLFNBQVMsRUFDVEMsbUJBQW1CLEVBQ25CQyxNQUFNLFFBQ0QsT0FBTztBQUNkLE9BQU8sS0FBS0MsUUFBUSxNQUFNLFdBQVc7QUFDckMsT0FBT0MsU0FBUyxNQUFNLFlBQVk7QUFDbEMsT0FBT0MsVUFBVSxNQUFNLFlBQVk7QUFDbkMsT0FB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