matrix-react-sdk
Version:
SDK for matrix.org using React
269 lines (267 loc) • 46.9 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.createSpace = exports.SpaceCreateForm = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireWildcard(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _matrix = require("matrix-js-sdk/src/matrix");
var _logger = require("matrix-js-sdk/src/logger");
var _languageHandler = require("../../../languageHandler");
var _ContextMenu = _interopRequireWildcard(require("../../structures/ContextMenu"));
var _createRoom = _interopRequireDefault(require("../../../createRoom"));
var _MatrixClientContext = _interopRequireWildcard(require("../../../contexts/MatrixClientContext"));
var _SpaceBasicSettings = require("./SpaceBasicSettings");
var _AccessibleButton = _interopRequireDefault(require("../elements/AccessibleButton"));
var _Field = _interopRequireDefault(require("../elements/Field"));
var _Validation = _interopRequireDefault(require("../elements/Validation"));
var _RoomAliasField = _interopRequireDefault(require("../elements/RoomAliasField"));
var _KeyBindingsManager = require("../../../KeyBindingsManager");
var _KeyboardShortcuts = require("../../../accessibility/KeyboardShortcuts");
var _dispatcher = _interopRequireDefault(require("../../../dispatcher/dispatcher"));
var _actions = require("../../../dispatcher/actions");
var _Filter = require("../dialogs/spotlight/Filter");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (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 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) { (0, _defineProperty2.default)(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; } /*
Copyright 2024 New Vector Ltd.
Copyright 2021 The Matrix.org Foundation C.I.C.
SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only
Please see LICENSE files in the repository root for full details.
*/
const createSpace = async (client, name, isPublic, alias, topic, avatar, createOpts = {}, otherOpts = {}) => {
return (0, _createRoom.default)(client, _objectSpread({
createOpts: _objectSpread({
name,
preset: isPublic ? _matrix.Preset.PublicChat : _matrix.Preset.PrivateChat,
visibility: isPublic && (await client.doesServerSupportUnstableFeature("org.matrix.msc3827.stable")) ? _matrix.Visibility.Public : _matrix.Visibility.Private,
power_level_content_override: {
// Only allow Admins to write to the timeline to prevent hidden sync spam
events_default: 100,
invite: isPublic ? 0 : 50
},
room_alias_name: isPublic && alias ? alias.substring(1, alias.indexOf(":")) : undefined,
topic
}, createOpts),
avatar,
roomType: _matrix.RoomType.Space,
historyVisibility: isPublic ? _matrix.HistoryVisibility.WorldReadable : _matrix.HistoryVisibility.Invited,
spinner: false,
encryption: false,
andView: true,
inlineErrors: true
}, otherOpts));
};
exports.createSpace = createSpace;
const SpaceCreateMenuType = ({
title,
description,
className,
onClick
}) => {
return /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
className: (0, _classnames.default)("mx_SpaceCreateMenuType", className),
onClick: onClick
}, title, /*#__PURE__*/_react.default.createElement("div", null, description));
};
const spaceNameValidator = (0, _Validation.default)({
rules: [{
key: "required",
test: async ({
value
}) => !!value,
invalid: () => (0, _languageHandler._t)("create_space|name_required")
}]
});
const nameToLocalpart = name => {
return name.trim().toLowerCase().replace(/\s+/g, "-").replace(/[^a-z0-9_-]+/gi, "");
};
const SpaceCreateForm = ({
busy,
onSubmit,
avatarUrl,
setAvatar,
name,
setName,
nameFieldRef,
alias,
aliasFieldRef,
setAlias,
showAliasField,
topic,
setTopic,
children
}) => {
const cli = (0, _react.useContext)(_MatrixClientContext.default);
const domain = cli.getDomain() ?? undefined;
const onKeyDown = ev => {
const action = (0, _KeyBindingsManager.getKeyBindingsManager)().getAccessibilityAction(ev);
switch (action) {
case _KeyboardShortcuts.KeyBindingAction.Enter:
onSubmit(ev);
break;
}
};
return /*#__PURE__*/_react.default.createElement("form", {
className: "mx_SpaceBasicSettings",
onSubmit: onSubmit
}, /*#__PURE__*/_react.default.createElement(_SpaceBasicSettings.SpaceAvatar, {
avatarUrl: avatarUrl,
setAvatar: setAvatar,
avatarDisabled: busy
}), /*#__PURE__*/_react.default.createElement(_Field.default, {
name: "spaceName",
label: (0, _languageHandler._t)("common|name"),
autoFocus: true,
value: name,
onChange: ev => {
const newName = ev.target.value;
if (!alias || alias === `#${nameToLocalpart(name)}:${domain}`) {
setAlias(`#${nameToLocalpart(newName)}:${domain}`);
aliasFieldRef.current?.validate({
allowEmpty: true
});
}
setName(newName);
},
onKeyDown: onKeyDown,
ref: nameFieldRef,
onValidate: spaceNameValidator,
disabled: busy,
autoComplete: "off"
}), showAliasField ? /*#__PURE__*/_react.default.createElement(_RoomAliasField.default, {
ref: aliasFieldRef,
onChange: setAlias,
domain: domain,
value: alias,
placeholder: name ? nameToLocalpart(name) : (0, _languageHandler._t)("create_space|address_placeholder"),
label: (0, _languageHandler._t)("create_space|address_label"),
disabled: busy,
onKeyDown: onKeyDown
}) : null, /*#__PURE__*/_react.default.createElement(_Field.default, {
name: "spaceTopic",
element: "textarea",
label: (0, _languageHandler._t)("common|description"),
value: topic ?? "",
onChange: ev => setTopic(ev.target.value),
rows: 3,
disabled: busy
}), children);
};
exports.SpaceCreateForm = SpaceCreateForm;
const SpaceCreateMenu = ({
onFinished
}) => {
const cli = (0, _MatrixClientContext.useMatrixClientContext)();
const [visibility, setVisibility] = (0, _react.useState)(null);
const [busy, setBusy] = (0, _react.useState)(false);
const [name, setName] = (0, _react.useState)("");
const spaceNameField = (0, _react.useRef)(null);
const [alias, setAlias] = (0, _react.useState)("");
const spaceAliasField = (0, _react.useRef)(null);
const [avatar, setAvatar] = (0, _react.useState)(undefined);
const [topic, setTopic] = (0, _react.useState)("");
const [supportsSpaceFiltering, setSupportsSpaceFiltering] = (0, _react.useState)(true); // assume it does until we find out it doesn't
(0, _react.useEffect)(() => {
cli.isVersionSupported("v1.4").then(supported => {
return supported || cli.doesServerSupportUnstableFeature("org.matrix.msc3827.stable");
}).then(supported => {
setSupportsSpaceFiltering(supported);
});
}, [cli]);
const onSpaceCreateClick = async e => {
e.preventDefault();
if (busy) return;
setBusy(true);
// require & validate the space name field
if (spaceNameField.current && !(await spaceNameField.current.validate({
allowEmpty: false
}))) {
spaceNameField.current.focus();
spaceNameField.current.validate({
allowEmpty: false,
focused: true
});
setBusy(false);
return;
}
if (spaceAliasField.current && visibility === _matrix.Visibility.Public && !(await spaceAliasField.current.validate({
allowEmpty: false
}))) {
spaceAliasField.current.focus();
spaceAliasField.current.validate({
allowEmpty: false,
focused: true
});
setBusy(false);
return;
}
try {
await createSpace(cli, name, visibility === _matrix.Visibility.Public, alias, topic, avatar);
onFinished();
} catch (e) {
_logger.logger.error(e);
}
};
const onSearchClick = () => {
_dispatcher.default.dispatch({
action: _actions.Action.OpenSpotlight,
initialFilter: _Filter.Filter.PublicSpaces
});
};
let body;
if (visibility === null) {
body = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement("h2", null, (0, _languageHandler._t)("create_space|label")), /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("create_space|explainer")), /*#__PURE__*/_react.default.createElement(SpaceCreateMenuType, {
title: (0, _languageHandler._t)("common|public"),
description: (0, _languageHandler._t)("create_space|public_description"),
className: "mx_SpaceCreateMenuType_public",
onClick: () => setVisibility(_matrix.Visibility.Public)
}), /*#__PURE__*/_react.default.createElement(SpaceCreateMenuType, {
title: (0, _languageHandler._t)("common|private"),
description: (0, _languageHandler._t)("create_space|private_description"),
className: "mx_SpaceCreateMenuType_private",
onClick: () => setVisibility(_matrix.Visibility.Private)
}), supportsSpaceFiltering && /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
kind: "primary_outline",
onClick: onSearchClick
}, (0, _languageHandler._t)("create_space|search_public_button")));
} else {
body = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
className: "mx_SpaceCreateMenu_back",
onClick: () => setVisibility(null),
title: (0, _languageHandler._t)("action|go_back")
}), /*#__PURE__*/_react.default.createElement("h2", null, visibility === _matrix.Visibility.Public ? (0, _languageHandler._t)("create_space|public_heading") : (0, _languageHandler._t)("create_space|private_heading")), /*#__PURE__*/_react.default.createElement("p", null, (0, _languageHandler._t)("create_space|add_details_prompt"), " ", (0, _languageHandler._t)("create_space|add_details_prompt_2")), /*#__PURE__*/_react.default.createElement(SpaceCreateForm, {
busy: busy,
onSubmit: onSpaceCreateClick,
setAvatar: setAvatar,
name: name,
setName: setName,
nameFieldRef: spaceNameField,
topic: topic,
setTopic: setTopic,
alias: alias,
setAlias: setAlias,
showAliasField: visibility === _matrix.Visibility.Public,
aliasFieldRef: spaceAliasField
}), /*#__PURE__*/_react.default.createElement(_AccessibleButton.default, {
kind: "primary",
onClick: onSpaceCreateClick,
disabled: busy
}, busy ? (0, _languageHandler._t)("create_space|creating") : (0, _languageHandler._t)("action|create")));
}
return /*#__PURE__*/_react.default.createElement(_ContextMenu.default, {
left: 72,
top: 62,
chevronOffset: 0,
chevronFace: _ContextMenu.ChevronFace.None,
onFinished: onFinished,
wrapperClassName: "mx_SpaceCreateMenu_wrapper",
managed: false,
focusLock: true
}, body);
};
var _default = exports.default = SpaceCreateMenu;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfbWF0cml4IiwiX2xvZ2dlciIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfQ29udGV4dE1lbnUiLCJfY3JlYXRlUm9vbSIsIl9NYXRyaXhDbGllbnRDb250ZXh0IiwiX1NwYWNlQmFzaWNTZXR0aW5ncyIsIl9BY2Nlc3NpYmxlQnV0dG9uIiwiX0ZpZWxkIiwiX1ZhbGlkYXRpb24iLCJfUm9vbUFsaWFzRmllbGQiLCJfS2V5QmluZGluZ3NNYW5hZ2VyIiwiX0tleWJvYXJkU2hvcnRjdXRzIiwiX2Rpc3BhdGNoZXIiLCJfYWN0aW9ucyIsIl9GaWx0ZXIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJjcmVhdGVTcGFjZSIsImNsaWVudCIsIm5hbWUiLCJpc1B1YmxpYyIsImFsaWFzIiwidG9waWMiLCJhdmF0YXIiLCJjcmVhdGVPcHRzIiwib3RoZXJPcHRzIiwiY3JlYXRlUm9vbSIsInByZXNldCIsIlByZXNldCIsIlB1YmxpY0NoYXQiLCJQcml2YXRlQ2hhdCIsInZpc2liaWxpdHkiLCJkb2VzU2VydmVyU3VwcG9ydFVuc3RhYmxlRmVhdHVyZSIsIlZpc2liaWxpdHkiLCJQdWJsaWMiLCJQcml2YXRlIiwicG93ZXJfbGV2ZWxfY29udGVudF9vdmVycmlkZSIsImV2ZW50c19kZWZhdWx0IiwiaW52aXRlIiwicm9vbV9hbGlhc19uYW1lIiwic3Vic3RyaW5nIiwiaW5kZXhPZiIsInVuZGVmaW5lZCIsInJvb21UeXBlIiwiUm9vbVR5cGUiLCJTcGFjZSIsImhpc3RvcnlWaXNpYmlsaXR5IiwiSGlzdG9yeVZpc2liaWxpdHkiLCJXb3JsZFJlYWRhYmxlIiwiSW52aXRlZCIsInNwaW5uZXIiLCJlbmNyeXB0aW9uIiwiYW5kVmlldyIsImlubGluZUVycm9ycyIsImV4cG9ydHMiLCJTcGFjZUNyZWF0ZU1lbnVUeXBlIiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsImNsYXNzTmFtZSIsIm9uQ2xpY2siLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lcyIsInNwYWNlTmFtZVZhbGlkYXRvciIsIndpdGhWYWxpZGF0aW9uIiwicnVsZXMiLCJrZXkiLCJ0ZXN0IiwidmFsdWUiLCJpbnZhbGlkIiwiX3QiLCJuYW1lVG9Mb2NhbHBhcnQiLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJyZXBsYWNlIiwiU3BhY2VDcmVhdGVGb3JtIiwiYnVzeSIsIm9uU3VibWl0IiwiYXZhdGFyVXJsIiwic2V0QXZhdGFyIiwic2V0TmFtZSIsIm5hbWVGaWVsZFJlZiIsImFsaWFzRmllbGRSZWYiLCJzZXRBbGlhcyIsInNob3dBbGlhc0ZpZWxkIiwic2V0VG9waWMiLCJjaGlsZHJlbiIsImNsaSIsInVzZUNvbnRleHQiLCJNYXRyaXhDbGllbnRDb250ZXh0IiwiZG9tYWluIiwiZ2V0RG9tYWluIiwib25LZXlEb3duIiwiZXYiLCJhY3Rpb24iLCJnZXRLZXlCaW5kaW5nc01hbmFnZXIiLCJnZXRBY2Nlc3NpYmlsaXR5QWN0aW9uIiwiS2V5QmluZGluZ0FjdGlvbiIsIkVudGVyIiwiU3BhY2VBdmF0YXIiLCJhdmF0YXJEaXNhYmxlZCIsImxhYmVsIiwiYXV0b0ZvY3VzIiwib25DaGFuZ2UiLCJuZXdOYW1lIiwidGFyZ2V0IiwiY3VycmVudCIsInZhbGlkYXRlIiwiYWxsb3dFbXB0eSIsInJlZiIsIm9uVmFsaWRhdGUiLCJkaXNhYmxlZCIsImF1dG9Db21wbGV0ZSIsInBsYWNlaG9sZGVyIiwiZWxlbWVudCIsInJvd3MiLCJTcGFjZUNyZWF0ZU1lbnUiLCJvbkZpbmlzaGVkIiwidXNlTWF0cml4Q2xpZW50Q29udGV4dCIsInNldFZpc2liaWxpdHkiLCJ1c2VTdGF0ZSIsInNldEJ1c3kiLCJzcGFjZU5hbWVGaWVsZCIsInVzZVJlZiIsInNwYWNlQWxpYXNGaWVsZCIsInN1cHBvcnRzU3BhY2VGaWx0ZXJpbmciLCJzZXRTdXBwb3J0c1NwYWNlRmlsdGVyaW5nIiwidXNlRWZmZWN0IiwiaXNWZXJzaW9uU3VwcG9ydGVkIiwidGhlbiIsInN1cHBvcnRlZCIsIm9uU3BhY2VDcmVhdGVDbGljayIsInByZXZlbnREZWZhdWx0IiwiZm9jdXMiLCJmb2N1c2VkIiwibG9nZ2VyIiwiZXJyb3IiLCJvblNlYXJjaENsaWNrIiwiZGVmYXVsdERpc3BhdGNoZXIiLCJkaXNwYXRjaCIsIkFjdGlvbiIsIk9wZW5TcG90bGlnaHQiLCJpbml0aWFsRmlsdGVyIiwiRmlsdGVyIiwiUHVibGljU3BhY2VzIiwiYm9keSIsIkZyYWdtZW50Iiwia2luZCIsImxlZnQiLCJ0b3AiLCJjaGV2cm9uT2Zmc2V0IiwiY2hldnJvbkZhY2UiLCJDaGV2cm9uRmFjZSIsIk5vbmUiLCJ3cmFwcGVyQ2xhc3NOYW1lIiwibWFuYWdlZCIsImZvY3VzTG9jayIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3Mvc3BhY2VzL1NwYWNlQ3JlYXRlTWVudS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMjEgVGhlIE1hdHJpeC5vcmcgRm91bmRhdGlvbiBDLkkuQy5cblxuU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFHUEwtMy4wLW9ubHkgT1IgR1BMLTMuMC1vbmx5XG5QbGVhc2Ugc2VlIExJQ0VOU0UgZmlsZXMgaW4gdGhlIHJlcG9zaXRvcnkgcm9vdCBmb3IgZnVsbCBkZXRhaWxzLlxuKi9cblxuaW1wb3J0IFJlYWN0LCB7XG4gICAgQ29tcG9uZW50UHJvcHMsXG4gICAgUmVmT2JqZWN0LFxuICAgIFN5bnRoZXRpY0V2ZW50LFxuICAgIEtleWJvYXJkRXZlbnQsXG4gICAgdXNlQ29udGV4dCxcbiAgICB1c2VSZWYsXG4gICAgdXNlU3RhdGUsXG4gICAgQ2hhbmdlRXZlbnQsXG4gICAgUmVhY3ROb2RlLFxuICAgIHVzZUVmZmVjdCxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xuaW1wb3J0IHtcbiAgICBSb29tVHlwZSxcbiAgICBIaXN0b3J5VmlzaWJpbGl0eSxcbiAgICBQcmVzZXQsXG4gICAgVmlzaWJpbGl0eSxcbiAgICBNYXRyaXhDbGllbnQsXG4gICAgSUNyZWF0ZVJvb21PcHRzLFxufSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbG9nZ2VyXCI7XG5cbmltcG9ydCB7IF90IH0gZnJvbSBcIi4uLy4uLy4uL2xhbmd1YWdlSGFuZGxlclwiO1xuaW1wb3J0IENvbnRleHRNZW51LCB7IENoZXZyb25GYWNlIH0gZnJvbSBcIi4uLy4uL3N0cnVjdHVyZXMvQ29udGV4dE1lbnVcIjtcbmltcG9ydCBjcmVhdGVSb29tLCB7IElPcHRzIGFzIElDcmVhdGVPcHRzIH0gZnJvbSBcIi4uLy4uLy4uL2NyZWF0ZVJvb21cIjtcbmltcG9ydCBNYXRyaXhDbGllbnRDb250ZXh0LCB7IHVzZU1hdHJpeENsaWVudENvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vY29udGV4dHMvTWF0cml4Q2xpZW50Q29udGV4dFwiO1xuaW1wb3J0IFNwYWNlQmFzaWNTZXR0aW5ncywgeyBTcGFjZUF2YXRhciB9IGZyb20gXCIuL1NwYWNlQmFzaWNTZXR0aW5nc1wiO1xuaW1wb3J0IEFjY2Vzc2libGVCdXR0b24sIHsgQnV0dG9uRXZlbnQgfSBmcm9tIFwiLi4vZWxlbWVudHMvQWNjZXNzaWJsZUJ1dHRvblwiO1xuaW1wb3J0IEZpZWxkIGZyb20gXCIuLi9lbGVtZW50cy9GaWVsZFwiO1xuaW1wb3J0IHdpdGhWYWxpZGF0aW9uIGZyb20gXCIuLi9lbGVtZW50cy9WYWxpZGF0aW9uXCI7XG5pbXBvcnQgUm9vbUFsaWFzRmllbGQgZnJvbSBcIi4uL2VsZW1lbnRzL1Jvb21BbGlhc0ZpZWxkXCI7XG5pbXBvcnQgeyBnZXRLZXlCaW5kaW5nc01hbmFnZXIgfSBmcm9tIFwiLi4vLi4vLi4vS2V5QmluZGluZ3NNYW5hZ2VyXCI7XG5pbXBvcnQgeyBLZXlCaW5kaW5nQWN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uL2FjY2Vzc2liaWxpdHkvS2V5Ym9hcmRTaG9ydGN1dHNcIjtcbmltcG9ydCBkZWZhdWx0RGlzcGF0Y2hlciBmcm9tIFwiLi4vLi4vLi4vZGlzcGF0Y2hlci9kaXNwYXRjaGVyXCI7XG5pbXBvcnQgeyBBY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vZGlzcGF0Y2hlci9hY3Rpb25zXCI7XG5pbXBvcnQgeyBGaWx0ZXIgfSBmcm9tIFwiLi4vZGlhbG9ncy9zcG90bGlnaHQvRmlsdGVyXCI7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTcGFjZSA9IGFzeW5jIChcbiAgICBjbGllbnQ6IE1hdHJpeENsaWVudCxcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgaXNQdWJsaWM6IGJvb2xlYW4sXG4gICAgYWxpYXM/OiBzdHJpbmcsXG4gICAgdG9waWM/OiBzdHJpbmcsXG4gICAgYXZhdGFyPzogc3RyaW5nIHwgRmlsZSxcbiAgICBjcmVhdGVPcHRzOiBQYXJ0aWFsPElDcmVhdGVSb29tT3B0cz4gPSB7fSxcbiAgICBvdGhlck9wdHM6IFBhcnRpYWw8T21pdDxJQ3JlYXRlT3B0cywgXCJjcmVhdGVPcHRzXCI+PiA9IHt9LFxuKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiA9PiB7XG4gICAgcmV0dXJuIGNyZWF0ZVJvb20oY2xpZW50LCB7XG4gICAgICAgIGNyZWF0ZU9wdHM6IHtcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICBwcmVzZXQ6IGlzUHVibGljID8gUHJlc2V0LlB1YmxpY0NoYXQgOiBQcmVzZXQuUHJpdmF0ZUNoYXQsXG4gICAgICAgICAgICB2aXNpYmlsaXR5OlxuICAgICAgICAgICAgICAgIGlzUHVibGljICYmIChhd2FpdCBjbGllbnQuZG9lc1NlcnZlclN1cHBvcnRVbnN0YWJsZUZlYXR1cmUoXCJvcmcubWF0cml4Lm1zYzM4Mjcuc3RhYmxlXCIpKVxuICAgICAgICAgICAgICAgICAgICA/IFZpc2liaWxpdHkuUHVibGljXG4gICAgICAgICAgICAgICAgICAgIDogVmlzaWJpbGl0eS5Qcml2YXRlLFxuICAgICAgICAgICAgcG93ZXJfbGV2ZWxfY29udGVudF9vdmVycmlkZToge1xuICAgICAgICAgICAgICAgIC8vIE9ubHkgYWxsb3cgQWRtaW5zIHRvIHdyaXRlIHRvIHRoZSB0aW1lbGluZSB0byBwcmV2ZW50IGhpZGRlbiBzeW5jIHNwYW1cbiAgICAgICAgICAgICAgICBldmVudHNfZGVmYXVsdDogMTAwLFxuICAgICAgICAgICAgICAgIGludml0ZTogaXNQdWJsaWMgPyAwIDogNTAsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcm9vbV9hbGlhc19uYW1lOiBpc1B1YmxpYyAmJiBhbGlhcyA/IGFsaWFzLnN1YnN0cmluZygxLCBhbGlhcy5pbmRleE9mKFwiOlwiKSkgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0b3BpYyxcbiAgICAgICAgICAgIC4uLmNyZWF0ZU9wdHMsXG4gICAgICAgIH0sXG4gICAgICAgIGF2YXRhcixcbiAgICAgICAgcm9vbVR5cGU6IFJvb21UeXBlLlNwYWNlLFxuICAgICAgICBoaXN0b3J5VmlzaWJpbGl0eTogaXNQdWJsaWMgPyBIaXN0b3J5VmlzaWJpbGl0eS5Xb3JsZFJlYWRhYmxlIDogSGlzdG9yeVZpc2liaWxpdHkuSW52aXRlZCxcbiAgICAgICAgc3Bpbm5lcjogZmFsc2UsXG4gICAgICAgIGVuY3J5cHRpb246IGZhbHNlLFxuICAgICAgICBhbmRWaWV3OiB0cnVlLFxuICAgICAgICBpbmxpbmVFcnJvcnM6IHRydWUsXG4gICAgICAgIC4uLm90aGVyT3B0cyxcbiAgICB9KTtcbn07XG5cbmNvbnN0IFNwYWNlQ3JlYXRlTWVudVR5cGU6IFJlYWN0LkZDPHtcbiAgICB0aXRsZTogc3RyaW5nO1xuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgb25DbGljaygpOiB2b2lkO1xufT4gPSAoeyB0aXRsZSwgZGVzY3JpcHRpb24sIGNsYXNzTmFtZSwgb25DbGljayB9KSA9PiB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgPEFjY2Vzc2libGVCdXR0b24gY2xhc3NOYW1lPXtjbGFzc05hbWVzKFwibXhfU3BhY2VDcmVhdGVNZW51VHlwZVwiLCBjbGFzc05hbWUpfSBvbkNsaWNrPXtvbkNsaWNrfT5cbiAgICAgICAgICAgIHt0aXRsZX1cbiAgICAgICAgICAgIDxkaXY+e2Rlc2NyaXB0aW9ufTwvZGl2PlxuICAgICAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICAgKTtcbn07XG5cbmNvbnN0IHNwYWNlTmFtZVZhbGlkYXRvciA9IHdpdGhWYWxpZGF0aW9uKHtcbiAgICBydWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgICBrZXk6IFwicmVxdWlyZWRcIixcbiAgICAgICAgICAgIHRlc3Q6IGFzeW5jICh7IHZhbHVlIH0pID0+ICEhdmFsdWUsXG4gICAgICAgICAgICBpbnZhbGlkOiAoKSA9PiBfdChcImNyZWF0ZV9zcGFjZXxuYW1lX3JlcXVpcmVkXCIpLFxuICAgICAgICB9LFxuICAgIF0sXG59KTtcblxuY29uc3QgbmFtZVRvTG9jYWxwYXJ0ID0gKG5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIG5hbWVcbiAgICAgICAgLnRyaW0oKVxuICAgICAgICAudG9Mb3dlckNhc2UoKVxuICAgICAgICAucmVwbGFjZSgvXFxzKy9nLCBcIi1cIilcbiAgICAgICAgLnJlcGxhY2UoL1teYS16MC05Xy1dKy9naSwgXCJcIik7XG59O1xuXG50eXBlIEJQcm9wcyA9IE9taXQ8Q29tcG9uZW50UHJvcHM8dHlwZW9mIFNwYWNlQmFzaWNTZXR0aW5ncz4sIFwibmFtZURpc2FibGVkXCIgfCBcInRvcGljRGlzYWJsZWRcIiB8IFwiYXZhdGFyRGlzYWJsZWRcIj47XG5pbnRlcmZhY2UgSVNwYWNlQ3JlYXRlRm9ybVByb3BzIGV4dGVuZHMgQlByb3BzIHtcbiAgICBidXN5OiBib29sZWFuO1xuICAgIGFsaWFzOiBzdHJpbmc7XG4gICAgbmFtZUZpZWxkUmVmOiBSZWZPYmplY3Q8RmllbGQ+O1xuICAgIGFsaWFzRmllbGRSZWY6IFJlZk9iamVjdDxSb29tQWxpYXNGaWVsZD47XG4gICAgc2hvd0FsaWFzRmllbGQ/OiBib29sZWFuO1xuICAgIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICAgIG9uU3VibWl0KGU6IFN5bnRoZXRpY0V2ZW50KTogdm9pZDtcbiAgICBzZXRBbGlhcyhhbGlhczogc3RyaW5nKTogdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IFNwYWNlQ3JlYXRlRm9ybTogUmVhY3QuRkM8SVNwYWNlQ3JlYXRlRm9ybVByb3BzPiA9ICh7XG4gICAgYnVzeSxcbiAgICBvblN1Ym1pdCxcbiAgICBhdmF0YXJVcmwsXG4gICAgc2V0QXZhdGFyLFxuICAgIG5hbWUsXG4gICAgc2V0TmFtZSxcbiAgICBuYW1lRmllbGRSZWYsXG4gICAgYWxpYXMsXG4gICAgYWxpYXNGaWVsZFJlZixcbiAgICBzZXRBbGlhcyxcbiAgICBzaG93QWxpYXNGaWVsZCxcbiAgICB0b3BpYyxcbiAgICBzZXRUb3BpYyxcbiAgICBjaGlsZHJlbixcbn0pID0+IHtcbiAgICBjb25zdCBjbGkgPSB1c2VDb250ZXh0KE1hdHJpeENsaWVudENvbnRleHQpO1xuICAgIGNvbnN0IGRvbWFpbiA9IGNsaS5nZXREb21haW4oKSA/PyB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBvbktleURvd24gPSAoZXY6IEtleWJvYXJkRXZlbnQpOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gZ2V0S2V5QmluZGluZ3NNYW5hZ2VyKCkuZ2V0QWNjZXNzaWJpbGl0eUFjdGlvbihldik7XG4gICAgICAgIHN3aXRjaCAoYWN0aW9uKSB7XG4gICAgICAgICAgICBjYXNlIEtleUJpbmRpbmdBY3Rpb24uRW50ZXI6XG4gICAgICAgICAgICAgICAgb25TdWJtaXQoZXYpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICAgIDxmb3JtIGNsYXNzTmFtZT1cIm14X1NwYWNlQmFzaWNTZXR0aW5nc1wiIG9uU3VibWl0PXtvblN1Ym1pdH0+XG4gICAgICAgICAgICA8U3BhY2VBdmF0YXIgYXZhdGFyVXJsPXthdmF0YXJVcmx9IHNldEF2YXRhcj17c2V0QXZhdGFyfSBhdmF0YXJEaXNhYmxlZD17YnVzeX0gLz5cblxuICAgICAgICAgICAgPEZpZWxkXG4gICAgICAgICAgICAgICAgbmFtZT1cInNwYWNlTmFtZVwiXG4gICAgICAgICAgICAgICAgbGFiZWw9e190KFwiY29tbW9ufG5hbWVcIil9XG4gICAgICAgICAgICAgICAgYXV0b0ZvY3VzPXt0cnVlfVxuICAgICAgICAgICAgICAgIHZhbHVlPXtuYW1lfVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXY6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld05hbWUgPSBldi50YXJnZXQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYWxpYXMgfHwgYWxpYXMgPT09IGAjJHtuYW1lVG9Mb2NhbHBhcnQobmFtZSl9OiR7ZG9tYWlufWApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFsaWFzKGAjJHtuYW1lVG9Mb2NhbHBhcnQobmV3TmFtZSl9OiR7ZG9tYWlufWApO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxpYXNGaWVsZFJlZi5jdXJyZW50Py52YWxpZGF0ZSh7IGFsbG93RW1wdHk6IHRydWUgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc2V0TmFtZShuZXdOYW1lKTtcbiAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgICAgICAgICAgIHJlZj17bmFtZUZpZWxkUmVmfVxuICAgICAgICAgICAgICAgIG9uVmFsaWRhdGU9e3NwYWNlTmFtZVZhbGlkYXRvcn1cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17YnVzeX1cbiAgICAgICAgICAgICAgICBhdXRvQ29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAge3Nob3dBbGlhc0ZpZWxkID8gKFxuICAgICAgICAgICAgICAgIDxSb29tQWxpYXNGaWVsZFxuICAgICAgICAgICAgICAgICAgICByZWY9e2FsaWFzRmllbGRSZWZ9XG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtzZXRBbGlhc31cbiAgICAgICAgICAgICAgICAgICAgZG9tYWluPXtkb21haW59XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlPXthbGlhc31cbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9e25hbWUgPyBuYW1lVG9Mb2NhbHBhcnQobmFtZSkgOiBfdChcImNyZWF0ZV9zcGFjZXxhZGRyZXNzX3BsYWNlaG9sZGVyXCIpfVxuICAgICAgICAgICAgICAgICAgICBsYWJlbD17X3QoXCJjcmVhdGVfc3BhY2V8YWRkcmVzc19sYWJlbFwiKX1cbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2J1c3l9XG4gICAgICAgICAgICAgICAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICApIDogbnVsbH1cblxuICAgICAgICAgICAgPEZpZWxkXG4gICAgICAgICAgICAgICAgbmFtZT1cInNwYWNlVG9waWNcIlxuICAgICAgICAgICAgICAgIGVsZW1lbnQ9XCJ0ZXh0YXJlYVwiXG4gICAgICAgICAgICAgICAgbGFiZWw9e190KFwiY29tbW9ufGRlc2NyaXB0aW9uXCIpfVxuICAgICAgICAgICAgICAgIHZhbHVlPXt0b3BpYyA/PyBcIlwifVxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXsoZXYpID0+IHNldFRvcGljKGV2LnRhcmdldC52YWx1ZSl9XG4gICAgICAgICAgICAgICAgcm93cz17M31cbiAgICAgICAgICAgICAgICBkaXNhYmxlZD17YnVzeX1cbiAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9mb3JtPlxuICAgICk7XG59O1xuXG5jb25zdCBTcGFjZUNyZWF0ZU1lbnU6IFJlYWN0LkZDPHtcbiAgICBvbkZpbmlzaGVkKCk6IHZvaWQ7XG59PiA9ICh7IG9uRmluaXNoZWQgfSkgPT4ge1xuICAgIGNvbnN0IGNsaSA9IHVzZU1hdHJpeENsaWVudENvbnRleHQoKTtcbiAgICBjb25zdCBbdmlzaWJpbGl0eSwgc2V0VmlzaWJpbGl0eV0gPSB1c2VTdGF0ZTxWaXNpYmlsaXR5IHwgbnVsbD4obnVsbCk7XG4gICAgY29uc3QgW2J1c3ksIHNldEJ1c3ldID0gdXNlU3RhdGU8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgY29uc3QgW25hbWUsIHNldE5hbWVdID0gdXNlU3RhdGUoXCJcIik7XG4gICAgY29uc3Qgc3BhY2VOYW1lRmllbGQgPSB1c2VSZWY8RmllbGQ+KG51bGwpO1xuICAgIGNvbnN0IFthbGlhcywgc2V0QWxpYXNdID0gdXNlU3RhdGUoXCJcIik7XG4gICAgY29uc3Qgc3BhY2VBbGlhc0ZpZWxkID0gdXNlUmVmPFJvb21BbGlhc0ZpZWxkPihudWxsKTtcbiAgICBjb25zdCBbYXZhdGFyLCBzZXRBdmF0YXJdID0gdXNlU3RhdGU8RmlsZSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBjb25zdCBbdG9waWMsIHNldFRvcGljXSA9IHVzZVN0YXRlPHN0cmluZz4oXCJcIik7XG5cbiAgICBjb25zdCBbc3VwcG9ydHNTcGFjZUZpbHRlcmluZywgc2V0U3VwcG9ydHNTcGFjZUZpbHRlcmluZ10gPSB1c2VTdGF0ZSh0cnVlKTsgLy8gYXNzdW1lIGl0IGRvZXMgdW50aWwgd2UgZmluZCBvdXQgaXQgZG9lc24ndFxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICAgIGNsaS5pc1ZlcnNpb25TdXBwb3J0ZWQoXCJ2MS40XCIpXG4gICAgICAgICAgICAudGhlbigoc3VwcG9ydGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN1cHBvcnRlZCB8fCBjbGkuZG9lc1NlcnZlclN1cHBvcnRVbnN0YWJsZUZlYXR1cmUoXCJvcmcubWF0cml4Lm1zYzM4Mjcuc3RhYmxlXCIpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC50aGVuKChzdXBwb3J0ZWQpID0+IHtcbiAgICAgICAgICAgICAgICBzZXRTdXBwb3J0c1NwYWNlRmlsdGVyaW5nKHN1cHBvcnRlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9LCBbY2xpXSk7XG5cbiAgICBjb25zdCBvblNwYWNlQ3JlYXRlQ2xpY2sgPSBhc3luYyAoZTogQnV0dG9uRXZlbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAoYnVzeSkgcmV0dXJuO1xuXG4gICAgICAgIHNldEJ1c3kodHJ1ZSk7XG4gICAgICAgIC8vIHJlcXVpcmUgJiB2YWxpZGF0ZSB0aGUgc3BhY2UgbmFtZSBmaWVsZFxuICAgICAgICBpZiAoc3BhY2VOYW1lRmllbGQuY3VycmVudCAmJiAhKGF3YWl0IHNwYWNlTmFtZUZpZWxkLmN1cnJlbnQudmFsaWRhdGUoeyBhbGxvd0VtcHR5OiBmYWxzZSB9KSkpIHtcbiAgICAgICAgICAgIHNwYWNlTmFtZUZpZWxkLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHNwYWNlTmFtZUZpZWxkLmN1cnJlbnQudmFsaWRhdGUoeyBhbGxvd0VtcHR5OiBmYWxzZSwgZm9jdXNlZDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHNldEJ1c3koZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgc3BhY2VBbGlhc0ZpZWxkLmN1cnJlbnQgJiZcbiAgICAgICAgICAgIHZpc2liaWxpdHkgPT09IFZpc2liaWxpdHkuUHVibGljICYmXG4gICAgICAgICAgICAhKGF3YWl0IHNwYWNlQWxpYXNGaWVsZC5jdXJyZW50LnZhbGlkYXRlKHsgYWxsb3dFbXB0eTogZmFsc2UgfSkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgc3BhY2VBbGlhc0ZpZWxkLmN1cnJlbnQuZm9jdXMoKTtcbiAgICAgICAgICAgIHNwYWNlQWxpYXNGaWVsZC5jdXJyZW50LnZhbGlkYXRlKHsgYWxsb3dFbXB0eTogZmFsc2UsIGZvY3VzZWQ6IHRydWUgfSk7XG4gICAgICAgICAgICBzZXRCdXN5KGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCBjcmVhdGVTcGFjZShjbGksIG5hbWUsIHZpc2liaWxpdHkgPT09IFZpc2liaWxpdHkuUHVibGljLCBhbGlhcywgdG9waWMsIGF2YXRhcik7XG5cbiAgICAgICAgICAgIG9uRmluaXNoZWQoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgbG9nZ2VyLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IG9uU2VhcmNoQ2xpY2sgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgIGRlZmF1bHREaXNwYXRjaGVyLmRpc3BhdGNoKHtcbiAgICAgICAgICAgIGFjdGlvbjogQWN0aW9uLk9wZW5TcG90bGlnaHQsXG4gICAgICAgICAgICBpbml0aWFsRmlsdGVyOiBGaWx0ZXIuUHVibGljU3BhY2VzLFxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgbGV0IGJvZHk7XG4gICAgaWYgKHZpc2liaWxpdHkgPT09IG51bGwpIHtcbiAgICAgICAgYm9keSA9IChcbiAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICA8aDI+e190KFwiY3JlYXRlX3NwYWNlfGxhYmVsXCIpfTwvaDI+XG4gICAgICAgICAgICAgICAgPHA+e190KFwiY3JlYXRlX3NwYWNlfGV4cGxhaW5lclwiKX08L3A+XG5cbiAgICAgICAgICAgICAgICA8U3BhY2VDcmVhdGVNZW51VHlwZVxuICAgICAgICAgICAgICAgICAgICB0aXRsZT17X3QoXCJjb21tb258cHVibGljXCIpfVxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17X3QoXCJjcmVhdGVfc3BhY2V8cHVibGljX2Rlc2NyaXB0aW9uXCIpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9TcGFjZUNyZWF0ZU1lbnVUeXBlX3B1YmxpY1wiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFZpc2liaWxpdHkoVmlzaWJpbGl0eS5QdWJsaWMpfVxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgPFNwYWNlQ3JlYXRlTWVudVR5cGVcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU9e190KFwiY29tbW9ufHByaXZhdGVcIil9XG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtfdChcImNyZWF0ZV9zcGFjZXxwcml2YXRlX2Rlc2NyaXB0aW9uXCIpfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9TcGFjZUNyZWF0ZU1lbnVUeXBlX3ByaXZhdGVcIlxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBzZXRWaXNpYmlsaXR5KFZpc2liaWxpdHkuUHJpdmF0ZSl9XG4gICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgIHtzdXBwb3J0c1NwYWNlRmlsdGVyaW5nICYmIChcbiAgICAgICAgICAgICAgICAgICAgPEFjY2Vzc2libGVCdXR0b24ga2luZD1cInByaW1hcnlfb3V0bGluZVwiIG9uQ2xpY2s9e29uU2VhcmNoQ2xpY2t9PlxuICAgICAgICAgICAgICAgICAgICAgICAge190KFwiY3JlYXRlX3NwYWNlfHNlYXJjaF9wdWJsaWNfYnV0dG9uXCIpfVxuICAgICAgICAgICAgICAgICAgICA8L0FjY2Vzc2libGVCdXR0b24+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYm9keSA9IChcbiAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgICA8QWNjZXNzaWJsZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJteF9TcGFjZUNyZWF0ZU1lbnVfYmFja1wiXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHNldFZpc2liaWxpdHkobnVsbCl9XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlPXtfdChcImFjdGlvbnxnb19iYWNrXCIpfVxuICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICA8aDI+XG4gICAgICAgICAgICAgICAgICAgIHt2aXNpYmlsaXR5ID09PSBWaXNpYmlsaXR5LlB1YmxpY1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBfdChcImNyZWF0ZV9zcGFjZXxwdWJsaWNfaGVhZGluZ1wiKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBfdChcImNyZWF0ZV9zcGFjZXxwcml2YXRlX2hlYWRpbmdcIil9XG4gICAgICAgICAgICAgICAgPC9oMj5cbiAgICAgICAgICAgICAgICA8cD5cbiAgICAgICAgICAgICAgICAgICAge190KFwiY3JlYXRlX3NwYWNlfGFkZF9kZXRhaWxzX3Byb21wdFwiKX0ge190KFwiY3JlYXRlX3NwYWNlfGFkZF9kZXRhaWxzX3Byb21wdF8yXCIpfVxuICAgICAgICAgICAgICAgIDwvcD5cblxuICAgICAgICAgICAgICAgIDxTcGFjZUNyZWF0ZUZvcm1cbiAgICAgICAgICAgICAgICAgICAgYnVzeT17YnVzeX1cbiAgICAgICAgICAgICAgICAgICAgb25TdWJtaXQ9e29uU3BhY2VDcmVhdGVDbGlja31cbiAgICAgICAgICAgICAgICAgICAgc2V0QXZhdGFyPXtzZXRBdmF0YXJ9XG4gICAgICAgICAgICAgICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgICAgICAgICAgICAgIHNldE5hbWU9e3NldE5hbWV9XG4gICAgICAgICAgICAgICAgICAgIG5hbWVGaWVsZFJlZj17c3BhY2VOYW1lRmllbGR9XG4gICAgICAgICAgICAgICAgICAgIHRvcGljPXt0b3BpY31cbiAgICAgICAgICAgICAgICAgICAgc2V0VG9waWM9e3NldFRvcGljfVxuICAgICAgICAgICAgICAgICAgICBhbGlhcz17YWxpYXN9XG4gICAgICAgICAgICAgICAgICAgIHNldEFsaWFzPXtzZXRBbGlhc31cbiAgICAgICAgICAgICAgICAgICAgc2hvd0FsaWFzRmllbGQ9e3Zpc2liaWxpdHkgPT09IFZpc2liaWxpdHkuUHVibGljfVxuICAgICAgICAgICAgICAgICAgICBhbGlhc0ZpZWxkUmVmPXtzcGFjZUFsaWFzRmllbGR9XG4gICAgICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgICAgIDxBY2Nlc3NpYmxlQnV0dG9uIGtpbmQ9XCJwcmltYXJ5XCIgb25DbGljaz17b25TcGFjZUNyZWF0ZUNsaWNrfSBkaXNhYmxlZD17YnVzeX0+XG4gICAgICAgICAgICAgICAgICAgIHtidXN5ID8gX3QoXCJjcmVhdGVfc3BhY2V8Y3JlYXRpbmdcIikgOiBfdChcImFjdGlvbnxjcmVhdGVcIil9XG4gICAgICAgICAgICAgICAgPC9BY2Nlc3NpYmxlQnV0dG9uPlxuICAgICAgICAgICAgPC9SZWFjdC5GcmFnbWVudD5cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gKFxuICAgICAgICA8Q29udGV4dE1lbnVcbiAgICAgICAgICAgIGxlZnQ9ezcyfVxuICAgICAgICAgICAgdG9wPXs2Mn1cbiAgICAgICAgICAgIGNoZXZyb25PZmZzZXQ9ezB9XG4gICAgICAgICAgICBjaGV2cm9uRmFjZT17Q2hldnJvbkZhY2UuTm9uZX1cbiAgICAgICAgICAgIG9uRmluaXNoZWQ9e29uRmluaXNoZWR9XG4gICAgICAgICAgICB3cmFwcGVyQ2xhc3NOYW1lPVwibXhfU3BhY2VDcmVhdGVNZW51X3dyYXBwZXJcIlxuICAgICAgICAgICAgbWFuYWdlZD17ZmFsc2V9XG4gICAgICAgICAgICBmb2N1c0xvY2s9e3RydWV9XG4gICAgICAgID5cbiAgICAgICAgICAgIHtib2R5fVxuICAgICAgICA8L0NvbnRleHRNZW51PlxuICAgICk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBTcGFjZUNyZWF0ZU1lbnU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBUUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBWUEsSUFBQUMsV0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsT0FBQSxHQUFBSCxPQUFBO0FBUUEsSUFBQUksT0FBQSxHQUFBSixPQUFBO0FBRUEsSUFBQUssZ0JBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFlBQUEsR0FBQVAsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFPLFdBQUEsR0FBQUwsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFRLG9CQUFBLEdBQUFULHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBUyxtQkFBQSxHQUFBVCxPQUFB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