UNPKG

payload

Version:

Node, React and MongoDB Headless CMS and Application Framework

182 lines (181 loc) • 17.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return _default; } }); const _react = /*#__PURE__*/ _interop_require_wildcard(require("react")); const _reacti18next = require("react-i18next"); const _reactrouterdom = require("react-router-dom"); const _usePayloadAPI = /*#__PURE__*/ _interop_require_default(require("../../../hooks/usePayloadAPI")); const _buildStateFromSchema = /*#__PURE__*/ _interop_require_default(require("../../forms/Form/buildStateFromSchema")); const _fieldtypes = require("../../forms/field-types"); const _Auth = require("../../utilities/Auth"); const _Config = require("../../utilities/Config"); const _DocumentEvents = require("../../utilities/DocumentEvents"); const _DocumentInfo = require("../../utilities/DocumentInfo"); const _EditDepth = require("../../utilities/EditDepth"); const _Locale = require("../../utilities/Locale"); const _Preferences = require("../../utilities/Preferences"); const _RenderCustomComponent = /*#__PURE__*/ _interop_require_default(require("../../utilities/RenderCustomComponent")); const _Default = /*#__PURE__*/ _interop_require_default(require("./Default")); 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 GlobalView = (props)=>{ const { global } = props; const { state: locationState } = (0, _reactrouterdom.useLocation)(); const { code: locale } = (0, _Locale.useLocale)(); const { permissions, user } = (0, _Auth.useAuth)(); const [initialState, setInitialState] = (0, _react.useState)(); const [updatedAt, setUpdatedAt] = (0, _react.useState)(); const { docPermissions, getDocPermissions, getDocPreferences, getVersions, preferencesKey } = (0, _DocumentInfo.useDocumentInfo)(); const { getPreference } = (0, _Preferences.usePreferences)(); const { t } = (0, _reacti18next.useTranslation)(); const config = (0, _Config.useConfig)(); const { routes: { api }, serverURL } = (0, _Config.useConfig)(); const { reportUpdate } = (0, _DocumentEvents.useDocumentEvents)(); const { slug, admin: { components: { views: { Edit: Edit } = {} } = {} } = {}, fields } = global; const onSave = (0, _react.useCallback)(async (json)=>{ reportUpdate({ entitySlug: global.slug, updatedAt: json?.result?.updatedAt || new Date().toISOString() }); getVersions(); getDocPermissions(); setUpdatedAt(json?.result?.updatedAt); const preferences = await getDocPreferences(); const state = await (0, _buildStateFromSchema.default)({ config, data: json.result, fieldSchema: fields, locale, operation: 'update', preferences, t, user }); setInitialState(state); }, [ getVersions, fields, user, locale, t, getDocPermissions, getDocPreferences, config, global, reportUpdate ]); const [{ data, isLoading: isLoadingData }] = (0, _usePayloadAPI.default)(`${serverURL}${api}/globals/${slug}`, { initialData: null, initialParams: { depth: 0, draft: 'true', 'fallback-locale': 'null' } }); const dataToRender = locationState?.data || data; (0, _react.useEffect)(()=>{ const awaitInitialState = async ()=>{ const preferences = await getDocPreferences(); const state = await (0, _buildStateFromSchema.default)({ config, data: dataToRender, fieldSchema: fields, locale, operation: 'update', preferences, t, user }); if (preferencesKey) { await getPreference(preferencesKey); } setInitialState(state); }; if (dataToRender) awaitInitialState(); }, [ dataToRender, fields, user, locale, getPreference, preferencesKey, t, getDocPreferences, config ]); const isLoading = !initialState || !docPermissions || isLoadingData; const componentProps = { action: `${serverURL}${api}/globals/${slug}?locale=${locale}&fallback-locale=null`, apiURL: `${serverURL}${api}/globals/${slug}?locale=${locale}${global.versions?.drafts ? '&draft=true' : ''}`, canAccessAdmin: permissions?.canAccessAdmin, data: dataToRender, fieldTypes: _fieldtypes.fieldTypes, global, initialState, isLoading, onSave, permissions: docPermissions, updatedAt: updatedAt || dataToRender?.updatedAt, user }; return /*#__PURE__*/ _react.default.createElement(_EditDepth.EditDepthContext.Provider, { value: 1 }, /*#__PURE__*/ _react.default.createElement(_RenderCustomComponent.default, { CustomComponent: typeof Edit === 'function' ? Edit : undefined, DefaultComponent: _Default.default, componentProps: componentProps })); }; const _default = GlobalView; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hZG1pbi9jb21wb25lbnRzL3ZpZXdzL0dsb2JhbC9pbmRleC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlIH0gZnJvbSAncmVhY3QnXG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnXG5pbXBvcnQgeyB1c2VMb2NhdGlvbiB9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nXG5cbmltcG9ydCB0eXBlIHsgRmllbGRzIH0gZnJvbSAnLi4vLi4vZm9ybXMvRm9ybS90eXBlcydcbmltcG9ydCB0eXBlIHsgRGVmYXVsdEdsb2JhbFZpZXdQcm9wcyB9IGZyb20gJy4vRGVmYXVsdCdcbmltcG9ydCB0eXBlIHsgSW5kZXhQcm9wcyB9IGZyb20gJy4vdHlwZXMnXG5cbmltcG9ydCB1c2VQYXlsb2FkQVBJIGZyb20gJy4uLy4uLy4uL2hvb2tzL3VzZVBheWxvYWRBUEknXG5pbXBvcnQgYnVpbGRTdGF0ZUZyb21TY2hlbWEgZnJvbSAnLi4vLi4vZm9ybXMvRm9ybS9idWlsZFN0YXRlRnJvbVNjaGVtYSdcbmltcG9ydCB7IGZpZWxkVHlwZXMgfSBmcm9tICcuLi8uLi9mb3Jtcy9maWVsZC10eXBlcydcbmltcG9ydCB7IHVzZUF1dGggfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvQXV0aCdcbmltcG9ydCB7IHVzZUNvbmZpZyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9Db25maWcnXG5pbXBvcnQgeyB1c2VEb2N1bWVudEV2ZW50cyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9Eb2N1bWVudEV2ZW50cydcbmltcG9ydCB7IHVzZURvY3VtZW50SW5mbyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9Eb2N1bWVudEluZm8nXG5pbXBvcnQgeyBFZGl0RGVwdGhDb250ZXh0IH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL0VkaXREZXB0aCdcbmltcG9ydCB7IHVzZUxvY2FsZSB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9Mb2NhbGUnXG5pbXBvcnQgeyB1c2VQcmVmZXJlbmNlcyB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9QcmVmZXJlbmNlcydcbmltcG9ydCBSZW5kZXJDdXN0b21Db21wb25lbnQgZnJvbSAnLi4vLi4vdXRpbGl0aWVzL1JlbmRlckN1c3RvbUNvbXBvbmVudCdcbmltcG9ydCBEZWZhdWx0R2xvYmFsVmlldyBmcm9tICcuL0RlZmF1bHQnXG5cbmNvbnN0IEdsb2JhbFZpZXc6IFJlYWN0LkZDPEluZGV4UHJvcHM+ID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgZ2xvYmFsIH0gPSBwcm9wc1xuXG4gIGNvbnN0IHsgc3RhdGU6IGxvY2F0aW9uU3RhdGUgfSA9IHVzZUxvY2F0aW9uPHsgZGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+IH0+KClcbiAgY29uc3QgeyBjb2RlOiBsb2NhbGUgfSA9IHVzZUxvY2FsZSgpXG4gIGNvbnN0IHsgcGVybWlzc2lvbnMsIHVzZXIgfSA9IHVzZUF1dGgoKVxuICBjb25zdCBbaW5pdGlhbFN0YXRlLCBzZXRJbml0aWFsU3RhdGVdID0gdXNlU3RhdGU8RmllbGRzPigpXG4gIGNvbnN0IFt1cGRhdGVkQXQsIHNldFVwZGF0ZWRBdF0gPSB1c2VTdGF0ZTxzdHJpbmc+KClcbiAgY29uc3QgeyBkb2NQZXJtaXNzaW9ucywgZ2V0RG9jUGVybWlzc2lvbnMsIGdldERvY1ByZWZlcmVuY2VzLCBnZXRWZXJzaW9ucywgcHJlZmVyZW5jZXNLZXkgfSA9XG4gICAgdXNlRG9jdW1lbnRJbmZvKClcbiAgY29uc3QgeyBnZXRQcmVmZXJlbmNlIH0gPSB1c2VQcmVmZXJlbmNlcygpXG4gIGNvbnN0IHsgdCB9ID0gdXNlVHJhbnNsYXRpb24oKVxuICBjb25zdCBjb25maWcgPSB1c2VDb25maWcoKVxuXG4gIGNvbnN0IHtcbiAgICByb3V0ZXM6IHsgYXBpIH0sXG4gICAgc2VydmVyVVJMLFxuICB9ID0gdXNlQ29uZmlnKClcblxuICBjb25zdCB7IHJlcG9ydFVwZGF0ZSB9ID0gdXNlRG9jdW1lbnRFdmVudHMoKVxuXG4gIGNvbnN0IHsgc2x1ZywgYWRtaW46IHsgY29tcG9uZW50czogeyB2aWV3czogeyBFZGl0OiBFZGl0IH0gPSB7fSB9ID0ge30gfSA9IHt9LCBmaWVsZHMgfSA9IGdsb2JhbFxuXG4gIGNvbnN0IG9uU2F2ZSA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChqc29uKSA9PiB7XG4gICAgICByZXBvcnRVcGRhdGUoe1xuICAgICAgICBlbnRpdHlTbHVnOiBnbG9iYWwuc2x1ZyxcbiAgICAgICAgdXBkYXRlZEF0OiBqc29uPy5yZXN1bHQ/LnVwZGF0ZWRBdCB8fCBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9KVxuXG4gICAgICBnZXRWZXJzaW9ucygpXG4gICAgICBnZXREb2NQZXJtaXNzaW9ucygpXG4gICAgICBzZXRVcGRhdGVkQXQoanNvbj8ucmVzdWx0Py51cGRhdGVkQXQpXG5cbiAgICAgIGNvbnN0IHByZWZlcmVuY2VzID0gYXdhaXQgZ2V0RG9jUHJlZmVyZW5jZXMoKVxuXG4gICAgICBjb25zdCBzdGF0ZSA9IGF3YWl0IGJ1aWxkU3RhdGVGcm9tU2NoZW1hKHtcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBkYXRhOiBqc29uLnJlc3VsdCxcbiAgICAgICAgZmllbGRTY2hlbWE6IGZpZWxkcyxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBvcGVyYXRpb246ICd1cGRhdGUnLFxuICAgICAgICBwcmVmZXJlbmNlcyxcbiAgICAgICAgdCxcbiAgICAgICAgdXNlcixcbiAgICAgIH0pXG4gICAgICBzZXRJbml0aWFsU3RhdGUoc3RhdGUpXG4gICAgfSxcbiAgICBbXG4gICAgICBnZXRWZXJzaW9ucyxcbiAgICAgIGZpZWxkcyxcbiAgICAgIHVzZXIsXG4gICAgICBsb2NhbGUsXG4gICAgICB0LFxuICAgICAgZ2V0RG9jUGVybWlzc2lvbnMsXG4gICAgICBnZXREb2NQcmVmZXJlbmNlcyxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGdsb2JhbCxcbiAgICAgIHJlcG9ydFVwZGF0ZSxcbiAgICBdLFxuICApXG5cbiAgY29uc3QgW3sgZGF0YSwgaXNMb2FkaW5nOiBpc0xvYWRpbmdEYXRhIH1dID0gdXNlUGF5bG9hZEFQSShgJHtzZXJ2ZXJVUkx9JHthcGl9L2dsb2JhbHMvJHtzbHVnfWAsIHtcbiAgICBpbml0aWFsRGF0YTogbnVsbCxcbiAgICBpbml0aWFsUGFyYW1zOiB7IGRlcHRoOiAwLCBkcmFmdDogJ3RydWUnLCAnZmFsbGJhY2stbG9jYWxlJzogJ251bGwnIH0sXG4gIH0pXG5cbiAgY29uc3QgZGF0YVRvUmVuZGVyID0gbG9jYXRpb25TdGF0ZT8uZGF0YSB8fCBkYXRhXG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBhd2FpdEluaXRpYWxTdGF0ZSA9IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHByZWZlcmVuY2VzID0gYXdhaXQgZ2V0RG9jUHJlZmVyZW5jZXMoKVxuICAgICAgY29uc3Qgc3RhdGUgPSBhd2FpdCBidWlsZFN0YXRlRnJvbVNjaGVtYSh7XG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgZGF0YTogZGF0YVRvUmVuZGVyLFxuICAgICAgICBmaWVsZFNjaGVtYTogZmllbGRzLFxuICAgICAgICBsb2NhbGUsXG4gICAgICAgIG9wZXJhdGlvbjogJ3VwZGF0ZScsXG4gICAgICAgIHByZWZlcmVuY2VzLFxuICAgICAgICB0LFxuICAgICAgICB1c2VyLFxuICAgICAgfSlcblxuICAgICAgaWYgKHByZWZlcmVuY2VzS2V5KSB7XG4gICAgICAgIGF3YWl0IGdldFByZWZlcmVuY2UocHJlZmVyZW5jZXNLZXkpXG4gICAgICB9XG5cbiAgICAgIHNldEluaXRpYWxTdGF0ZShzdGF0ZSlcbiAgICB9XG5cbiAgICBpZiAoZGF0YVRvUmVuZGVyKSBhd2FpdEluaXRpYWxTdGF0ZSgpXG4gIH0sIFtcbiAgICBkYXRhVG9SZW5kZXIsXG4gICAgZmllbGRzLFxuICAgIHVzZXIsXG4gICAgbG9jYWxlLFxuICAgIGdldFByZWZlcmVuY2UsXG4gICAgcHJlZmVyZW5jZXNLZXksXG4gICAgdCxcbiAgICBnZXREb2NQcmVmZXJlbmNlcyxcbiAgICBjb25maWcsXG4gIF0pXG5cbiAgY29uc3QgaXNMb2FkaW5nID0gIWluaXRpYWxTdGF0ZSB8fCAhZG9jUGVybWlzc2lvbnMgfHwgaXNMb2FkaW5nRGF0YVxuXG4gIGNvbnN0IGNvbXBvbmVudFByb3BzOiBEZWZhdWx0R2xvYmFsVmlld1Byb3BzID0ge1xuICAgIGFjdGlvbjogYCR7c2VydmVyVVJMfSR7YXBpfS9nbG9iYWxzLyR7c2x1Z30/bG9jYWxlPSR7bG9jYWxlfSZmYWxsYmFjay1sb2NhbGU9bnVsbGAsXG4gICAgYXBpVVJMOiBgJHtzZXJ2ZXJVUkx9JHthcGl9L2dsb2JhbHMvJHtzbHVnfT9sb2NhbGU9JHtsb2NhbGV9JHtcbiAgICAgIGdsb2JhbC52ZXJzaW9ucz8uZHJhZnRzID8gJyZkcmFmdD10cnVlJyA6ICcnXG4gICAgfWAsXG4gICAgY2FuQWNjZXNzQWRtaW46IHBlcm1pc3Npb25zPy5jYW5BY2Nlc3NBZG1pbixcbiAgICBkYXRhOiBkYXRhVG9SZW5kZXIsXG4gICAgZmllbGRUeXBlcyxcbiAgICBnbG9iYWwsXG4gICAgaW5pdGlhbFN0YXRlLFxuICAgIGlzTG9hZGluZyxcbiAgICBvblNhdmUsXG4gICAgcGVybWlzc2lvbnM6IGRvY1Blcm1pc3Npb25zLFxuICAgIHVwZGF0ZWRBdDogdXBkYXRlZEF0IHx8IGRhdGFUb1JlbmRlcj8udXBkYXRlZEF0LFxuICAgIHVzZXIsXG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxFZGl0RGVwdGhDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXsxfT5cbiAgICAgIDxSZW5kZXJDdXN0b21Db21wb25lbnRcbiAgICAgICAgQ3VzdG9tQ29tcG9uZW50PXt0eXBlb2YgRWRpdCA9PT0gJ2Z1bmN0aW9uJyA/IEVkaXQgOiB1bmRlZmluZWR9XG4gICAgICAgIERlZmF1bHRDb21wb25lbnQ9e0RlZmF1bHRHbG9iYWxWaWV3fVxuICAgICAgICBjb21wb25lbnRQcm9wcz17Y29tcG9uZW50UHJvcHN9XG4gICAgICAvPlxuICAgIDwvRWRpdERlcHRoQ29udGV4dC5Qcm92aWRlcj5cbiAgKVxufVxuZXhwb3J0IGRlZmF1bHQgR2xvYmFsVmlld1xuIl0sIm5hbWVzIjpbIkdsb2JhbFZpZXciLCJwcm9wcyIsImdsb2JhbCIsInN0YXRlIiwibG9jYXRpb25TdGF0ZSIsInVzZUxvY2F0aW9uIiwiY29kZSIsImxvY2FsZSIsInVzZUxvY2FsZSIsInBlcm1pc3Npb25zIiwidXNlciIsInVzZUF1dGgiLCJpbml0aWFsU3RhdGUiLCJzZXRJbml0aWFsU3RhdGUiLCJ1c2VTdGF0ZSIsInVwZGF0ZWRBdCIsInNldFVwZGF0ZWRBdCIsImRvY1Blcm1pc3Npb25zIiwiZ2V0RG9jUGVybWlzc2lvbnMiLCJnZXREb2NQcmVmZXJlbmNlcyIsImdldFZlcnNpb25zIiwicHJlZmVyZW5jZXNLZXkiLCJ1c2VEb2N1bWVudEluZm8iLCJnZXRQcmVmZXJlbmNlIiwidXNlUHJlZmVyZW5jZXMiLCJ0IiwidXNlVHJhbnNsYXRpb24iLCJjb25maWciLCJ1c2VDb25maWciLCJyb3V0ZXMiLCJhcGkiLCJzZXJ2ZXJVUkwiLCJyZXBvcnRVcGRhdGUiLCJ1c2VEb2N1bWVudEV2ZW50cyIsInNsdWciLCJhZG1pbiIsImNvbXBvbmVudHMiLCJ2aWV3cyIsIkVkaXQiLCJmaWVsZHMiLCJvblNhdmUiLCJ1c2VDYWxsYmFjayIsImpzb24iLCJlbnRpdHlTbHVnIiwicmVzdWx0IiwiRGF0ZSIsInRvSVNPU3RyaW5nIiwicHJlZmVyZW5jZXMiLCJidWlsZFN0YXRlRnJvbVNjaGVtYSIsImRhdGEiLCJmaWVsZFNjaGVtYSIsIm9wZXJhdGlvbiIsImlzTG9hZGluZyIsImlzTG9hZGluZ0RhdGEiLCJ1c2VQYXlsb2FkQVBJIiwiaW5pdGlhbERhdGEiLCJpbml0aWFsUGFyYW1zIiwiZGVwdGgiLCJkcmFmdCIsImRhdGFUb1JlbmRlciIsInVzZUVmZmVjdCIsImF3YWl0SW5pdGlhbFN0YXRlIiwiY29tcG9uZW50UHJvcHMiLCJhY3Rpb24iLCJhcGlVUkwiLCJ2ZXJzaW9ucyIsImRyYWZ0cyIsImNhbkFjY2Vzc0FkbWluIiwiZmllbGRUeXBlcyIsIkVkaXREZXB0aENvbnRleHQiLCJQcm92aWRlciIsInZhbHVlIiwiUmVuZGVyQ3VzdG9tQ29tcG9uZW50IiwiQ3VzdG9tQ29tcG9uZW50IiwidW5kZWZpbmVkIiwiRGVmYXVsdENvbXBvbmVudCIsIkRlZmF1bHRHbG9iYWxWaWV3Il0sIm1hcHBpbmdzIjoiOzs7OytCQXlKQTs7O2VBQUE7OzsrREF6SndEOzhCQUN6QjtnQ0FDSDtzRUFNRjs2RUFDTzs0QkFDTjtzQkFDSDt3QkFDRTtnQ0FDUTs4QkFDRjsyQkFDQzt3QkFDUDs2QkFDSzs4RUFDRztnRUFDSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFOUIsTUFBTUEsYUFBbUMsQ0FBQ0M7SUFDeEMsTUFBTSxFQUFFQyxNQUFNLEVBQUUsR0FBR0Q7SUFFbkIsTUFBTSxFQUFFRSxPQUFPQyxhQUFhLEVBQUUsR0FBR0MsSUFBQUEsMkJBQVc7SUFDNUMsTUFBTSxFQUFFQyxNQUFNQyxNQUFNLEVBQUUsR0FBR0MsSUFBQUEsaUJBQVM7SUFDbEMsTUFBTSxFQUFFQyxXQUFXLEVBQUVDLElBQUksRUFBRSxHQUFHQyxJQUFBQSxhQUFPO0lBQ3JDLE1BQU0sQ0FBQ0MsY0FBY0MsZ0JBQWdCLEdBQUdDLElBQUFBLGVBQVE7SUFDaEQsTUFBTSxDQUFDQyxXQUFXQyxhQUFhLEdBQUdGLElBQUFBLGVBQVE7SUFDMUMsTUFBTSxFQUFFRyxjQUFjLEVBQUVDLGlCQUFpQixFQUFFQyxpQkFBaUIsRUFBRUMsV0FBVyxFQUFFQyxjQUFjLEVBQUUsR0FDekZDLElBQUFBLDZCQUFlO0lBQ2pCLE1BQU0sRUFBRUMsYUFBYSxFQUFFLEdBQUdDLElBQUFBLDJCQUFjO0lBQ3hDLE1BQU0sRUFBRUMsQ0FBQyxFQUFFLEdBQUdDLElBQUFB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