UNPKG

payload

Version:

Node, React and MongoDB Headless CMS and Application Framework

248 lines (247 loc) • 26.9 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function _export(target, all) { for(var name in all)Object.defineProperty(target, name, { enumerable: true, get: all[name] }); } _export(exports, { Upload: function() { return Upload; }, UploadActions: function() { return UploadActions; }, editDrawerSlug: function() { return editDrawerSlug; }, sizePreviewSlug: function() { return sizePreviewSlug; } }); const _react = /*#__PURE__*/ _interop_require_wildcard(require("react")); const _reacti18next = require("react-i18next"); const _isImage = /*#__PURE__*/ _interop_require_default(require("../../../../../../uploads/isImage")); const _Button = /*#__PURE__*/ _interop_require_default(require("../../../../elements/Button")); const _Drawer = require("../../../../elements/Drawer"); const _Dropzone = require("../../../../elements/Dropzone"); const _EditUpload = require("../../../../elements/EditUpload"); const _FileDetails = /*#__PURE__*/ _interop_require_default(require("../../../../elements/FileDetails")); const _PreviewSizes = /*#__PURE__*/ _interop_require_default(require("../../../../elements/PreviewSizes")); const _Thumbnail = /*#__PURE__*/ _interop_require_default(require("../../../../elements/Thumbnail")); const _Error = /*#__PURE__*/ _interop_require_default(require("../../../../forms/Error")); const _context = require("../../../../forms/Form/context"); const _reduceFieldsToValues = /*#__PURE__*/ _interop_require_default(require("../../../../forms/Form/reduceFieldsToValues")); const _shared = require("../../../../forms/field-types/shared"); const _useField = /*#__PURE__*/ _interop_require_default(require("../../../../forms/useField")); const _DocumentInfo = require("../../../../utilities/DocumentInfo"); require("./index.scss"); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interop_require_wildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = { __proto__: null }; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for(var key in obj){ if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } const baseClass = 'file-field'; const editDrawerSlug = 'edit-upload'; const sizePreviewSlug = 'preview-sizes'; const validate = (value)=>{ if (!value && value !== undefined) { return 'A file is required.'; } return true; }; const UploadActions = ({ canEdit, showSizePreviews })=>{ const { t } = (0, _reacti18next.useTranslation)('upload'); return /*#__PURE__*/ _react.default.createElement("div", { className: `${baseClass}__file-mutation` }, showSizePreviews && /*#__PURE__*/ _react.default.createElement(_Drawer.DrawerToggler, { className: `${baseClass}__previewSizes`, slug: sizePreviewSlug }, t('upload:previewSizes')), canEdit && /*#__PURE__*/ _react.default.createElement(_Drawer.DrawerToggler, { className: `${baseClass}__edit`, slug: editDrawerSlug }, t('upload:editImage'))); }; const Upload = (props)=>{ const submitted = (0, _context.useFormSubmitted)(); const { collection, internalState, onChange, updatedAt } = props; const [replacingFile, setReplacingFile] = (0, _react.useState)(false); const [fileSrc, setFileSrc] = (0, _react.useState)(null); const { t } = (0, _reacti18next.useTranslation)([ 'upload', 'general' ]); const [doc, setDoc] = (0, _react.useState)((0, _reduceFieldsToValues.default)(internalState || {}, true)); const { docPermissions } = (0, _DocumentInfo.useDocumentInfo)(); const { errorMessage, setValue, showError, value } = (0, _useField.default)({ path: 'file', validate }); const handleFileNameChange = (e)=>{ const updatedFileName = e.target.value; if (value) { const fileValue = value; // Creating a new File object with updated properties const newFile = new File([ fileValue ], updatedFileName, { type: fileValue.type }); setValue(newFile) // Updating the state with the new File object ; } }; const handleFileSelection = _react.default.useCallback((files)=>{ const fileToUpload = files?.[0]; setValue(fileToUpload); }, [ setValue ]); const handleFileRemoval = (0, _react.useCallback)(()=>{ setReplacingFile(true); setValue(null); setFileSrc(''); }, [ setValue ]); (0, _react.useEffect)(()=>{ setDoc((0, _reduceFieldsToValues.default)(internalState || {}, true)); setReplacingFile(false); }, [ internalState ]); (0, _react.useEffect)(()=>{ if (value instanceof File) { const fileReader = new FileReader(); fileReader.onload = (e)=>{ const imgSrc = e.target?.result; if (typeof imgSrc === 'string') { setFileSrc(imgSrc); } }; fileReader.readAsDataURL(value); } if (typeof onChange === 'function') { onChange(value); } }, [ value, onChange, updatedAt ]); const canRemoveUpload = docPermissions?.update?.permission && 'delete' in docPermissions && docPermissions?.delete?.permission; const hasImageSizes = collection?.upload?.imageSizes?.length > 0; const hasResizeOptions = Boolean(collection?.upload?.resizeOptions); const { collection: { upload: { crop: showCrop = true, focalPoint = true } } = {} } = props; const showFocalPoint = focalPoint && (hasImageSizes || hasResizeOptions); const lastSubmittedTime = submitted ? new Date().toISOString() : null; return /*#__PURE__*/ _react.default.createElement("div", { className: [ _shared.fieldBaseClass, baseClass ].filter(Boolean).join(' ') }, /*#__PURE__*/ _react.default.createElement(_Error.default, { message: errorMessage, showError: showError }), doc.filename && !replacingFile && /*#__PURE__*/ _react.default.createElement(_FileDetails.default, { canEdit: showCrop || showFocalPoint, collection: collection, doc: doc, handleRemove: canRemoveUpload ? handleFileRemoval : undefined, hasImageSizes: hasImageSizes, imageCacheTag: lastSubmittedTime }), (!doc.filename || replacingFile) && /*#__PURE__*/ _react.default.createElement("div", { className: `${baseClass}__upload` }, !value && /*#__PURE__*/ _react.default.createElement(_Dropzone.Dropzone, { className: `${baseClass}__dropzone`, mimeTypes: collection?.upload?.mimeTypes, onChange: handleFileSelection }), value && /*#__PURE__*/ _react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/ _react.default.createElement("div", { className: `${baseClass}__thumbnail-wrap` }, /*#__PURE__*/ _react.default.createElement(_Thumbnail.default, { fileSrc: (0, _isImage.default)(value.type) ? fileSrc : null })), /*#__PURE__*/ _react.default.createElement("div", { className: `${baseClass}__file-adjustments` }, /*#__PURE__*/ _react.default.createElement("input", { className: `${baseClass}__filename`, onChange: handleFileNameChange, type: "text", value: value.name }), (0, _isImage.default)(value.type) && value.type !== 'image/svg+xml' && /*#__PURE__*/ _react.default.createElement(UploadActions, { canEdit: showCrop || showFocalPoint, showSizePreviews: hasImageSizes && doc.filename && !replacingFile })), /*#__PURE__*/ _react.default.createElement(_Button.default, { buttonStyle: "icon-label", className: `${baseClass}__remove`, icon: "x", iconStyle: "with-border", onClick: handleFileRemoval, round: true, tooltip: t('general:cancel') }))), (value || doc.filename) && /*#__PURE__*/ _react.default.createElement(_Drawer.Drawer, { header: null, slug: editDrawerSlug }, /*#__PURE__*/ _react.default.createElement(_EditUpload.EditUpload, { doc: doc || undefined, fileName: value?.name || doc?.filename, fileSrc: fileSrc || doc?.url, imageCacheTag: lastSubmittedTime, showCrop: showCrop, showFocalPoint: showFocalPoint })), doc && hasImageSizes && /*#__PURE__*/ _react.default.createElement(_Drawer.Drawer, { className: `${baseClass}__previewDrawer`, hoverTitle: true, slug: sizePreviewSlug, title: t('upload:sizesFor', { label: doc?.filename }) }, /*#__PURE__*/ _react.default.createElement(_PreviewSizes.default, { collection: collection, doc: doc }))); }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL3ZpZXdzL2NvbGxlY3Rpb25zL0VkaXQvVXBsb2FkL2luZGV4LnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tICdyZWFjdCdcbmltcG9ydCB7IHVzZVRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCdcblxuaW1wb3J0IHR5cGUgeyBQcm9wcyB9IGZyb20gJy4vdHlwZXMnXG5cbmltcG9ydCBpc0ltYWdlIGZyb20gJy4uLy4uLy4uLy4uLy4uLy4uL3VwbG9hZHMvaXNJbWFnZSdcbmltcG9ydCBCdXR0b24gZnJvbSAnLi4vLi4vLi4vLi4vZWxlbWVudHMvQnV0dG9uJ1xuaW1wb3J0IHsgRHJhd2VyLCBEcmF3ZXJUb2dnbGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vZWxlbWVudHMvRHJhd2VyJ1xuaW1wb3J0IHsgRHJvcHpvbmUgfSBmcm9tICcuLi8uLi8uLi8uLi9lbGVtZW50cy9Ecm9wem9uZSdcbmltcG9ydCB7IEVkaXRVcGxvYWQgfSBmcm9tICcuLi8uLi8uLi8uLi9lbGVtZW50cy9FZGl0VXBsb2FkJ1xuaW1wb3J0IEZpbGVEZXRhaWxzIGZyb20gJy4uLy4uLy4uLy4uL2VsZW1lbnRzL0ZpbGVEZXRhaWxzJ1xuaW1wb3J0IFByZXZpZXdTaXplcyBmcm9tICcuLi8uLi8uLi8uLi9lbGVtZW50cy9QcmV2aWV3U2l6ZXMnXG5pbXBvcnQgVGh1bWJuYWlsIGZyb20gJy4uLy4uLy4uLy4uL2VsZW1lbnRzL1RodW1ibmFpbCdcbmltcG9ydCBFcnJvciBmcm9tICcuLi8uLi8uLi8uLi9mb3Jtcy9FcnJvcidcbmltcG9ydCB7IHVzZUZvcm1TdWJtaXR0ZWQgfSBmcm9tICcuLi8uLi8uLi8uLi9mb3Jtcy9Gb3JtL2NvbnRleHQnXG5pbXBvcnQgcmVkdWNlRmllbGRzVG9WYWx1ZXMgZnJvbSAnLi4vLi4vLi4vLi4vZm9ybXMvRm9ybS9yZWR1Y2VGaWVsZHNUb1ZhbHVlcydcbmltcG9ydCB7IGZpZWxkQmFzZUNsYXNzIH0gZnJvbSAnLi4vLi4vLi4vLi4vZm9ybXMvZmllbGQtdHlwZXMvc2hhcmVkJ1xuaW1wb3J0IHVzZUZpZWxkIGZyb20gJy4uLy4uLy4uLy4uL2Zvcm1zL3VzZUZpZWxkJ1xuaW1wb3J0IHsgdXNlRG9jdW1lbnRJbmZvIH0gZnJvbSAnLi4vLi4vLi4vLi4vdXRpbGl0aWVzL0RvY3VtZW50SW5mbydcbmltcG9ydCAnLi9pbmRleC5zY3NzJ1xuXG5jb25zdCBiYXNlQ2xhc3MgPSAnZmlsZS1maWVsZCdcbmV4cG9ydCBjb25zdCBlZGl0RHJhd2VyU2x1ZyA9ICdlZGl0LXVwbG9hZCdcbmV4cG9ydCBjb25zdCBzaXplUHJldmlld1NsdWcgPSAncHJldmlldy1zaXplcydcblxuY29uc3QgdmFsaWRhdGUgPSAodmFsdWUpID0+IHtcbiAgaWYgKCF2YWx1ZSAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICdBIGZpbGUgaXMgcmVxdWlyZWQuJ1xuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGNvbnN0IFVwbG9hZEFjdGlvbnMgPSAoeyBjYW5FZGl0LCBzaG93U2l6ZVByZXZpZXdzIH0pID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigndXBsb2FkJylcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZmlsZS1tdXRhdGlvbmB9PlxuICAgICAge3Nob3dTaXplUHJldmlld3MgJiYgKFxuICAgICAgICA8RHJhd2VyVG9nZ2xlciBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3ByZXZpZXdTaXplc2B9IHNsdWc9e3NpemVQcmV2aWV3U2x1Z30+XG4gICAgICAgICAge3QoJ3VwbG9hZDpwcmV2aWV3U2l6ZXMnKX1cbiAgICAgICAgPC9EcmF3ZXJUb2dnbGVyPlxuICAgICAgKX1cbiAgICAgIHtjYW5FZGl0ICYmIChcbiAgICAgICAgPERyYXdlclRvZ2dsZXIgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19lZGl0YH0gc2x1Zz17ZWRpdERyYXdlclNsdWd9PlxuICAgICAgICAgIHt0KCd1cGxvYWQ6ZWRpdEltYWdlJyl9XG4gICAgICAgIDwvRHJhd2VyVG9nZ2xlcj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IFVwbG9hZDogUmVhY3QuRkM8UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHN1Ym1pdHRlZCA9IHVzZUZvcm1TdWJtaXR0ZWQoKVxuICBjb25zdCB7IGNvbGxlY3Rpb24sIGludGVybmFsU3RhdGUsIG9uQ2hhbmdlLCB1cGRhdGVkQXQgfSA9IHByb3BzXG4gIGNvbnN0IFtyZXBsYWNpbmdGaWxlLCBzZXRSZXBsYWNpbmdGaWxlXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbZmlsZVNyYywgc2V0RmlsZVNyY10gPSB1c2VTdGF0ZTxudWxsIHwgc3RyaW5nPihudWxsKVxuICBjb25zdCB7IHQgfSA9IHVzZVRyYW5zbGF0aW9uKFsndXBsb2FkJywgJ2dlbmVyYWwnXSlcbiAgY29uc3QgW2RvYywgc2V0RG9jXSA9IHVzZVN0YXRlKHJlZHVjZUZpZWxkc1RvVmFsdWVzKGludGVybmFsU3RhdGUgfHwge30sIHRydWUpKVxuICBjb25zdCB7IGRvY1Blcm1pc3Npb25zIH0gPSB1c2VEb2N1bWVudEluZm8oKVxuICBjb25zdCB7IGVycm9yTWVzc2FnZSwgc2V0VmFsdWUsIHNob3dFcnJvciwgdmFsdWUgfSA9IHVzZUZpZWxkPEZpbGU+KHtcbiAgICBwYXRoOiAnZmlsZScsXG4gICAgdmFsaWRhdGUsXG4gIH0pXG5cbiAgY29uc3QgaGFuZGxlRmlsZU5hbWVDaGFuZ2UgPSAoZTogUmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICBjb25zdCB1cGRhdGVkRmlsZU5hbWUgPSBlLnRhcmdldC52YWx1ZVxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc3QgZmlsZVZhbHVlID0gdmFsdWVcbiAgICAgIC8vIENyZWF0aW5nIGEgbmV3IEZpbGUgb2JqZWN0IHdpdGggdXBkYXRlZCBwcm9wZXJ0aWVzXG4gICAgICBjb25zdCBuZXdGaWxlID0gbmV3IEZpbGUoW2ZpbGVWYWx1ZV0sIHVwZGF0ZWRGaWxlTmFtZSwgeyB0eXBlOiBmaWxlVmFsdWUudHlwZSB9KVxuICAgICAgc2V0VmFsdWUobmV3RmlsZSkgLy8gVXBkYXRpbmcgdGhlIHN0YXRlIHdpdGggdGhlIG5ldyBGaWxlIG9iamVjdFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGhhbmRsZUZpbGVTZWxlY3Rpb24gPSBSZWFjdC51c2VDYWxsYmFjayhcbiAgICAoZmlsZXM6IEZpbGVMaXN0KSA9PiB7XG4gICAgICBjb25zdCBmaWxlVG9VcGxvYWQgPSBmaWxlcz8uWzBdXG4gICAgICBzZXRWYWx1ZShmaWxlVG9VcGxvYWQpXG4gICAgfSxcbiAgICBbc2V0VmFsdWVdLFxuICApXG5cbiAgY29uc3QgaGFuZGxlRmlsZVJlbW92YWwgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0UmVwbGFjaW5nRmlsZSh0cnVlKVxuICAgIHNldFZhbHVlKG51bGwpXG4gICAgc2V0RmlsZVNyYygnJylcbiAgfSwgW3NldFZhbHVlXSlcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIHNldERvYyhyZWR1Y2VGaWVsZHNUb1ZhbHVlcyhpbnRlcm5hbFN0YXRlIHx8IHt9LCB0cnVlKSlcbiAgICBzZXRSZXBsYWNpbmdGaWxlKGZhbHNlKVxuICB9LCBbaW50ZXJuYWxTdGF0ZV0pXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGaWxlKSB7XG4gICAgICBjb25zdCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICAgICAgZmlsZVJlYWRlci5vbmxvYWQgPSAoZSkgPT4ge1xuICAgICAgICBjb25zdCBpbWdTcmMgPSBlLnRhcmdldD8ucmVzdWx0XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbWdTcmMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgc2V0RmlsZVNyYyhpbWdTcmMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTCh2YWx1ZSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9uQ2hhbmdlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvbkNoYW5nZSh2YWx1ZSlcbiAgICB9XG4gIH0sIFt2YWx1ZSwgb25DaGFuZ2UsIHVwZGF0ZWRBdF0pXG5cbiAgY29uc3QgY2FuUmVtb3ZlVXBsb2FkID1cbiAgICBkb2NQZXJtaXNzaW9ucz8udXBkYXRlPy5wZXJtaXNzaW9uICYmXG4gICAgJ2RlbGV0ZScgaW4gZG9jUGVybWlzc2lvbnMgJiZcbiAgICBkb2NQZXJtaXNzaW9ucz8uZGVsZXRlPy5wZXJtaXNzaW9uXG5cbiAgY29uc3QgaGFzSW1hZ2VTaXplcyA9IGNvbGxlY3Rpb24/LnVwbG9hZD8uaW1hZ2VTaXplcz8ubGVuZ3RoID4gMFxuICBjb25zdCBoYXNSZXNpemVPcHRpb25zID0gQm9vbGVhbihjb2xsZWN0aW9uPy51cGxvYWQ/LnJlc2l6ZU9wdGlvbnMpXG5cbiAgY29uc3QgeyBjb2xsZWN0aW9uOiB7IHVwbG9hZDogeyBjcm9wOiBzaG93Q3JvcCA9IHRydWUsIGZvY2FsUG9pbnQgPSB0cnVlIH0gfSA9IHt9IH0gPSBwcm9wc1xuXG4gIGNvbnN0IHNob3dGb2NhbFBvaW50ID0gZm9jYWxQb2ludCAmJiAoaGFzSW1hZ2VTaXplcyB8fCBoYXNSZXNpemVPcHRpb25zKVxuXG4gIGNvbnN0IGxhc3RTdWJtaXR0ZWRUaW1lID0gc3VibWl0dGVkID8gbmV3IERhdGUoKS50b0lTT1N0cmluZygpIDogbnVsbFxuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e1tmaWVsZEJhc2VDbGFzcywgYmFzZUNsYXNzXS5maWx0ZXIoQm9vbGVhbikuam9pbignICcpfT5cbiAgICAgIDxFcnJvciBtZXNzYWdlPXtlcnJvck1lc3NhZ2V9IHNob3dFcnJvcj17c2hvd0Vycm9yfSAvPlxuXG4gICAgICB7ZG9jLmZpbGVuYW1lICYmICFyZXBsYWNpbmdGaWxlICYmIChcbiAgICAgICAgPEZpbGVEZXRhaWxzXG4gICAgICAgICAgY2FuRWRpdD17c2hvd0Nyb3AgfHwgc2hvd0ZvY2FsUG9pbnR9XG4gICAgICAgICAgY29sbGVjdGlvbj17Y29sbGVjdGlvbn1cbiAgICAgICAgICBkb2M9e2RvY31cbiAgICAgICAgICBoYW5kbGVSZW1vdmU9e2NhblJlbW92ZVVwbG9hZCA/IGhhbmRsZUZpbGVSZW1vdmFsIDogdW5kZWZpbmVkfVxuICAgICAgICAgIGhhc0ltYWdlU2l6ZXM9e2hhc0ltYWdlU2l6ZXN9XG4gICAgICAgICAgaW1hZ2VDYWNoZVRhZz17bGFzdFN1Ym1pdHRlZFRpbWV9XG4gICAgICAgIC8+XG4gICAgICApfVxuXG4gICAgICB7KCFkb2MuZmlsZW5hbWUgfHwgcmVwbGFjaW5nRmlsZSkgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fdXBsb2FkYH0+XG4gICAgICAgICAgeyF2YWx1ZSAmJiAoXG4gICAgICAgICAgICA8RHJvcHpvbmVcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19kcm9wem9uZWB9XG4gICAgICAgICAgICAgIG1pbWVUeXBlcz17Y29sbGVjdGlvbj8udXBsb2FkPy5taW1lVHlwZXN9XG4gICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVGaWxlU2VsZWN0aW9ufVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApfVxuXG4gICAgICAgICAge3ZhbHVlICYmIChcbiAgICAgICAgICAgIDxSZWFjdC5GcmFnbWVudD5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake2Jhc2VDbGFzc31fX3RodW1ibmFpbC13cmFwYH0+XG4gICAgICAgICAgICAgICAgPFRodW1ibmFpbCBmaWxlU3JjPXtpc0ltYWdlKHZhbHVlLnR5cGUpID8gZmlsZVNyYyA6IG51bGx9IC8+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fZmlsZS1hZGp1c3RtZW50c2B9PlxuICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19maWxlbmFtZWB9XG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZT17aGFuZGxlRmlsZU5hbWVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICB2YWx1ZT17dmFsdWUubmFtZX1cbiAgICAgICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICAgICAge2lzSW1hZ2UodmFsdWUudHlwZSkgJiYgdmFsdWUudHlwZSAhPT0gJ2ltYWdlL3N2Zyt4bWwnICYmIChcbiAgICAgICAgICAgICAgICAgIDxVcGxvYWRBY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgIGNhbkVkaXQ9e3Nob3dDcm9wIHx8IHNob3dGb2NhbFBvaW50fVxuICAgICAgICAgICAgICAgICAgICBzaG93U2l6ZVByZXZpZXdzPXtoYXNJbWFnZVNpemVzICYmIGRvYy5maWxlbmFtZSAmJiAhcmVwbGFjaW5nRmlsZX1cbiAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICBidXR0b25TdHlsZT1cImljb24tbGFiZWxcIlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7YmFzZUNsYXNzfV9fcmVtb3ZlYH1cbiAgICAgICAgICAgICAgICBpY29uPVwieFwiXG4gICAgICAgICAgICAgICAgaWNvblN0eWxlPVwid2l0aC1ib3JkZXJcIlxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZUZpbGVSZW1vdmFsfVxuICAgICAgICAgICAgICAgIHJvdW5kXG4gICAgICAgICAgICAgICAgdG9vbHRpcD17dCgnZ2VuZXJhbDpjYW5jZWwnKX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuXG4gICAgICB7KHZhbHVlIHx8IGRvYy5maWxlbmFtZSkgJiYgKFxuICAgICAgICA8RHJhd2VyIGhlYWRlcj17bnVsbH0gc2x1Zz17ZWRpdERyYXdlclNsdWd9PlxuICAgICAgICAgIDxFZGl0VXBsb2FkXG4gICAgICAgICAgICBkb2M9e2RvYyB8fCB1bmRlZmluZWR9XG4gICAgICAgICAgICBmaWxlTmFtZT17dmFsdWU/Lm5hbWUgfHwgZG9jPy5maWxlbmFtZX1cbiAgICAgICAgICAgIGZpbGVTcmM9e2ZpbGVTcmMgfHwgZG9jPy51cmx9XG4gICAgICAgICAgICBpbWFnZUNhY2hlVGFnPXtsYXN0U3VibWl0dGVkVGltZX1cbiAgICAgICAgICAgIHNob3dDcm9wPXtzaG93Q3JvcH1cbiAgICAgICAgICAgIHNob3dGb2NhbFBvaW50PXtzaG93Rm9jYWxQb2ludH1cbiAgICAgICAgICAvPlxuICAgICAgICA8L0RyYXdlcj5cbiAgICAgICl9XG4gICAgICB7ZG9jICYmIGhhc0ltYWdlU2l6ZXMgJiYgKFxuICAgICAgICA8RHJhd2VyXG4gICAgICAgICAgY2xhc3NOYW1lPXtgJHtiYXNlQ2xhc3N9X19wcmV2aWV3RHJhd2VyYH1cbiAgICAgICAgICBob3ZlclRpdGxlXG4gICAgICAgICAgc2x1Zz17c2l6ZVByZXZpZXdTbHVnfVxuICAgICAgICAgIHRpdGxlPXt0KCd1cGxvYWQ6c2l6ZXNGb3InLCB7IGxhYmVsOiBkb2M/LmZpbGVuYW1lIH0pfVxuICAgICAgICA+XG4gICAgICAgICAgPFByZXZpZXdTaXplcyBjb2xsZWN0aW9uPXtjb2xsZWN0aW9ufSBkb2M9e2RvY30gLz5cbiAgICAgICAgPC9EcmF3ZXI+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApXG59XG4iXSwibmFtZXMiOlsiVXBsb2FkIiwiVXBsb2FkQWN0aW9ucyIsImVkaXREcmF3ZXJTbHVnIiwic2l6ZVByZXZpZXdTbHVnIiwiYmFzZUNsYXNzIiwidmFsaWRhdGUiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsImNhbkVkaXQiLCJzaG93U2l6ZVByZXZpZXdzIiwidCIsInVzZVRyYW5zbGF0aW9uIiwiZGl2IiwiY2xhc3NOYW1lIiwiRHJhd2VyVG9nZ2xlciIsInNsdWciLCJwcm9wcyIsInN1Ym1pdHRlZCIsInVzZUZvcm1TdWJtaXR0ZWQiLCJjb2xsZWN0aW9uIiwiaW50ZXJuYWxTdGF0ZSIsIm9uQ2hhbmdlIiwidXBkYXRlZEF0IiwicmVwbGFjaW5nRmlsZSIsInNldFJlcGxhY2luZ0ZpbGUiLCJ1c2VTdGF0ZSIsImZpbGVTcmMiLCJzZXRGaWxlU3JjIiwiZG9jIiwic2V0RG9jIiwicmVkdWNlRmllbGRzVG9WYWx1ZXMiLCJkb2NQZXJtaXNzaW9ucyIsInVzZURvY3VtZW50SW5mbyIsImVycm9yTWVzc2FnZSIsInNldFZhbHVlIiwic2hvd0Vycm9yIiwidXNlRmllbGQiLCJwYXRoIiwiaGFuZGxlRmlsZU5hbWVDaGFuZ2UiLCJlIiwidXBkYXRlZEZpbGVOYW1lIiwidGFyZ2V0IiwiZmlsZVZhbHVlIiwibmV3RmlsZSIsIkZpbGUiLCJ0eXBlIiwiaGFuZGxlRmlsZVNlbGVjdGlvbiIsIlJlYWN0IiwidXNlQ2FsbGJhY2siLCJmaWxlcyIsImZpbGVUb1VwbG9hZCIsImhhbmRsZUZpbGVSZW1vdmFsIiwidXNlRWZmZWN0IiwiZmlsZVJlYWRlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWQiLCJpbWdTcmMiLCJyZXN1bHQiLCJyZWFkQXNEYXRhVVJMIiwiY2FuUmVtb3ZlVXBsb2FkIiwidXBkYXRlIiwicGVybWlzc2lvbiIsImRlbGV0ZSIsImhhc0ltYWdlU2l6ZXMiLCJ1cGxvYWQiLCJpbWFnZVNpemVzIiwibGVuZ3RoIiwiaGFzUmVzaXplT3B0aW9ucyIsIkJvb2xlYW4iLCJyZXNpemVPcHRpb25zIiwiY3JvcCIsInNob3dDcm9wIiwiZm9jYWxQb2ludCIsInNob3dGb2NhbFBvaW50IiwibGFzdFN1Ym1pdHRlZFRpbWUiLCJEYXRlIiwidG9JU09TdHJpbmciLCJmaWVsZEJhc2VDbGFzcyIsImZpbHRlciIsImpvaW4iLCJFcnJvciIsIm1lc3NhZ2UiLCJmaWxlbmFtZSIsIkZpbGVEZXRhaWxzIiwiaGFuZGxlUmVtb3ZlIiwiaW1hZ2VDYWNoZVRhZyIsIkRyb3B6b25lIiwibWltZVR5cGVzIiwiRnJhZ21lbnQiLCJUaHVtYm5haWwiLCJpc0ltYWdlIiwiaW5wdXQiLCJuYW1lIiwiQnV0dG9uIiwiYnV0dG9uU3R5bGUiLCJpY29uIiwiaWNvblN0eWxlIiwib25DbGljayIsInJvdW5kIiwidG9vbHRpcCIsIkRyYXdlciIsImhlYWRlciIsIkVkaXRVcGxvYWQiLCJmaWxlTmFtZSIsInVybCIsImhvdmVyVGl0bGUiLCJ0aXRsZSIsImxhYmVsIiwiUHJldmlld1NpemVzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztJQW1EYUEsTUFBTTtlQUFOQTs7SUFsQkFDLGFBQWE7ZUFBYkE7O0lBWEFDLGNBQWM7ZUFBZEE7O0lBQ0FDLGVBQWU7ZUFBZkE7OzsrREF2QjJDOzhCQUN6QjtnRUFJWDsrREFDRDt3QkFDbUI7MEJBQ2I7NEJBQ0U7b0VBQ0g7cUVBQ0M7a0VBQ0g7OERBQ0o7eUJBQ2U7NkVBQ0E7d0JBQ0Y7aUVBQ1Y7OEJBQ1c7UUFDekI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRVAsTUFBTUMsWUFBWTtBQUNYLE1BQU1GLGlCQUFpQjtBQUN2QixNQUFNQyxrQkFBa0I7QUFFL0IsTUFBTUUsV0FBVyxDQUFDQztJQUNoQixJQUFJLENBQUNBLFNBQVNBLFVBQVVDLFdBQVc7UUFDakMsT0FBTztJQUNUO0lBRUEsT0FBTztBQUNUO0FBRU8sTUFBTU4sZ0JBQWdCLENBQUMsRUFBRU8sT0FBTyxFQUFFQyxnQkFBZ0IsRUFBRTtJQUN6RCxNQUFNLEVB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