UNPKG

payload

Version:

Node, React and MongoDB Headless CMS and Application Framework

183 lines (182 loc) • 20.4 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "default", { enumerable: true, get: function() { return _default; } }); const _executeAccess = /*#__PURE__*/ _interop_require_default(require("../../auth/executeAccess")); const _types = require("../../auth/types"); const _combineQueries = require("../../database/combineQueries"); const _errors = require("../../errors"); const _afterRead = require("../../fields/hooks/afterRead"); const _deleteUserPreferences = require("../../preferences/deleteUserPreferences"); const _deleteAssociatedFiles = require("../../uploads/deleteAssociatedFiles"); const _commitTransaction = require("../../utilities/commitTransaction"); const _initTransaction = require("../../utilities/initTransaction"); const _killTransaction = require("../../utilities/killTransaction"); const _deleteCollectionVersions = require("../../versions/deleteCollectionVersions"); const _utils = require("./utils"); function _interop_require_default(obj) { return obj && obj.__esModule ? obj : { default: obj }; } async function deleteByID(incomingArgs) { let args = incomingArgs; try { const shouldCommit = await (0, _initTransaction.initTransaction)(args.req); // ///////////////////////////////////// // beforeOperation - Collection // ///////////////////////////////////// await args.collection.config.hooks.beforeOperation.reduce(async (priorHook, hook)=>{ await priorHook; args = await hook({ args, collection: args.collection.config, context: args.req.context, operation: 'delete', req: args.req }) || args; }, Promise.resolve()); const { id, collection: { config: collectionConfig }, depth, overrideAccess, req: { fallbackLocale, locale, payload: { config }, payload, t }, req, showHiddenFields } = args; // ///////////////////////////////////// // Access // ///////////////////////////////////// const accessResults = !overrideAccess ? await (0, _executeAccess.default)({ id, req }, collectionConfig.access.delete) : true; const hasWhereAccess = (0, _types.hasWhereAccessResult)(accessResults); // ///////////////////////////////////// // beforeDelete - Collection // ///////////////////////////////////// await collectionConfig.hooks.beforeDelete.reduce(async (priorHook, hook)=>{ await priorHook; return hook({ id, collection: collectionConfig, context: req.context, req }); }, Promise.resolve()); // ///////////////////////////////////// // Retrieve document // ///////////////////////////////////// const docToDelete = await req.payload.db.findOne({ collection: collectionConfig.slug, locale: req.locale, req, where: (0, _combineQueries.combineQueries)({ id: { equals: id } }, accessResults) }); if (!docToDelete && !hasWhereAccess) throw new _errors.NotFound(t); if (!docToDelete && hasWhereAccess) throw new _errors.Forbidden(t); await (0, _deleteAssociatedFiles.deleteAssociatedFiles)({ collectionConfig, config, doc: docToDelete, overrideDelete: true, t }); // ///////////////////////////////////// // Delete versions // ///////////////////////////////////// if (collectionConfig.versions) { await (0, _deleteCollectionVersions.deleteCollectionVersions)({ id, slug: collectionConfig.slug, payload, req }); } // ///////////////////////////////////// // Delete document // ///////////////////////////////////// let result = await req.payload.db.deleteOne({ collection: collectionConfig.slug, req, where: { id: { equals: id } } }); // ///////////////////////////////////// // Delete Preferences // ///////////////////////////////////// await (0, _deleteUserPreferences.deleteUserPreferences)({ collectionConfig, ids: [ id ], payload, req }); // ///////////////////////////////////// // afterRead - Fields // ///////////////////////////////////// result = await (0, _afterRead.afterRead)({ collection: collectionConfig, context: req.context, depth, doc: result, fallbackLocale, global: null, locale, overrideAccess, req, showHiddenFields }); // ///////////////////////////////////// // afterRead - Collection // ///////////////////////////////////// await collectionConfig.hooks.afterRead.reduce(async (priorHook, hook)=>{ await priorHook; result = await hook({ collection: collectionConfig, context: req.context, doc: result, req }) || result; }, Promise.resolve()); // ///////////////////////////////////// // afterDelete - Collection // ///////////////////////////////////// await collectionConfig.hooks.afterDelete.reduce(async (priorHook, hook)=>{ await priorHook; result = await hook({ id, collection: collectionConfig, context: req.context, doc: result, req }) || result; }, Promise.resolve()); // ///////////////////////////////////// // afterOperation - Collection // ///////////////////////////////////// result = await (0, _utils.buildAfterOperation)({ args, collection: collectionConfig, operation: 'deleteByID', result }); // ///////////////////////////////////// // 8. Return results // ///////////////////////////////////// if (shouldCommit) await (0, _commitTransaction.commitTransaction)(req); return result; } catch (error) { await (0, _killTransaction.killTransaction)(args.req); throw error; } } const _default = deleteByID; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2xsZWN0aW9ucy9vcGVyYXRpb25zL2RlbGV0ZUJ5SUQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBHZW5lcmF0ZWRUeXBlcyB9IGZyb20gJy4uLy4uLydcbmltcG9ydCB0eXBlIHsgUGF5bG9hZFJlcXVlc3QgfSBmcm9tICcuLi8uLi9leHByZXNzL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEb2N1bWVudCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBCZWZvcmVPcGVyYXRpb25Ib29rLCBDb2xsZWN0aW9uIH0gZnJvbSAnLi4vY29uZmlnL3R5cGVzJ1xuXG5pbXBvcnQgZXhlY3V0ZUFjY2VzcyBmcm9tICcuLi8uLi9hdXRoL2V4ZWN1dGVBY2Nlc3MnXG5pbXBvcnQgeyBoYXNXaGVyZUFjY2Vzc1Jlc3VsdCB9IGZyb20gJy4uLy4uL2F1dGgvdHlwZXMnXG5pbXBvcnQgeyBjb21iaW5lUXVlcmllcyB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL2NvbWJpbmVRdWVyaWVzJ1xuaW1wb3J0IHsgRm9yYmlkZGVuLCBOb3RGb3VuZCB9IGZyb20gJy4uLy4uL2Vycm9ycydcbmltcG9ydCB7IGFmdGVyUmVhZCB9IGZyb20gJy4uLy4uL2ZpZWxkcy9ob29rcy9hZnRlclJlYWQnXG5pbXBvcnQgeyBkZWxldGVVc2VyUHJlZmVyZW5jZXMgfSBmcm9tICcuLi8uLi9wcmVmZXJlbmNlcy9kZWxldGVVc2VyUHJlZmVyZW5jZXMnXG5pbXBvcnQgeyBkZWxldGVBc3NvY2lhdGVkRmlsZXMgfSBmcm9tICcuLi8uLi91cGxvYWRzL2RlbGV0ZUFzc29jaWF0ZWRGaWxlcydcbmltcG9ydCB7IGNvbW1pdFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2NvbW1pdFRyYW5zYWN0aW9uJ1xuaW1wb3J0IHsgaW5pdFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2luaXRUcmFuc2FjdGlvbidcbmltcG9ydCB7IGtpbGxUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9raWxsVHJhbnNhY3Rpb24nXG5pbXBvcnQgeyBkZWxldGVDb2xsZWN0aW9uVmVyc2lvbnMgfSBmcm9tICcuLi8uLi92ZXJzaW9ucy9kZWxldGVDb2xsZWN0aW9uVmVyc2lvbnMnXG5pbXBvcnQgeyBidWlsZEFmdGVyT3BlcmF0aW9uIH0gZnJvbSAnLi91dGlscydcblxuZXhwb3J0IHR5cGUgQXJndW1lbnRzID0ge1xuICBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uXG4gIGRlcHRoPzogbnVtYmVyXG4gIGlkOiBudW1iZXIgfCBzdHJpbmdcbiAgb3ZlcnJpZGVBY2Nlc3M/OiBib29sZWFuXG4gIHJlcTogUGF5bG9hZFJlcXVlc3RcbiAgc2hvd0hpZGRlbkZpZWxkcz86IGJvb2xlYW5cbn1cblxuYXN5bmMgZnVuY3Rpb24gZGVsZXRlQnlJRDxUU2x1ZyBleHRlbmRzIGtleW9mIEdlbmVyYXRlZFR5cGVzWydjb2xsZWN0aW9ucyddPihcbiAgaW5jb21pbmdBcmdzOiBBcmd1bWVudHMsXG4pOiBQcm9taXNlPERvY3VtZW50PiB7XG4gIGxldCBhcmdzID0gaW5jb21pbmdBcmdzXG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzaG91bGRDb21taXQgPSBhd2FpdCBpbml0VHJhbnNhY3Rpb24oYXJncy5yZXEpXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gYmVmb3JlT3BlcmF0aW9uIC0gQ29sbGVjdGlvblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGF3YWl0IGFyZ3MuY29sbGVjdGlvbi5jb25maWcuaG9va3MuYmVmb3JlT3BlcmF0aW9uLnJlZHVjZShcbiAgICAgIGFzeW5jIChwcmlvckhvb2s6IEJlZm9yZU9wZXJhdGlvbkhvb2sgfCBQcm9taXNlPHZvaWQ+LCBob29rOiBCZWZvcmVPcGVyYXRpb25Ib29rKSA9PiB7XG4gICAgICAgIGF3YWl0IHByaW9ySG9va1xuXG4gICAgICAgIGFyZ3MgPVxuICAgICAgICAgIChhd2FpdCBob29rKHtcbiAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgICBjb2xsZWN0aW9uOiBhcmdzLmNvbGxlY3Rpb24uY29uZmlnLFxuICAgICAgICAgICAgY29udGV4dDogYXJncy5yZXEuY29udGV4dCxcbiAgICAgICAgICAgIG9wZXJhdGlvbjogJ2RlbGV0ZScsXG4gICAgICAgICAgICByZXE6IGFyZ3MucmVxLFxuICAgICAgICAgIH0pKSB8fCBhcmdzXG4gICAgICB9LFxuICAgICAgUHJvbWlzZS5yZXNvbHZlKCksXG4gICAgKVxuXG4gICAgY29uc3Qge1xuICAgICAgaWQsXG4gICAgICBjb2xsZWN0aW9uOiB7IGNvbmZpZzogY29sbGVjdGlvbkNvbmZpZyB9LFxuICAgICAgZGVwdGgsXG4gICAgICBvdmVycmlkZUFjY2VzcyxcbiAgICAgIHJlcToge1xuICAgICAgICBmYWxsYmFja0xvY2FsZSxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBwYXlsb2FkOiB7IGNvbmZpZyB9LFxuICAgICAgICBwYXlsb2FkLFxuICAgICAgICB0LFxuICAgICAgfSxcbiAgICAgIHJlcSxcbiAgICAgIHNob3dIaWRkZW5GaWVsZHMsXG4gICAgfSA9IGFyZ3NcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBBY2Nlc3NcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBjb25zdCBhY2Nlc3NSZXN1bHRzID0gIW92ZXJyaWRlQWNjZXNzXG4gICAgICA/IGF3YWl0IGV4ZWN1dGVBY2Nlc3MoeyBpZCwgcmVxIH0sIGNvbGxlY3Rpb25Db25maWcuYWNjZXNzLmRlbGV0ZSlcbiAgICAgIDogdHJ1ZVxuICAgIGNvbnN0IGhhc1doZXJlQWNjZXNzID0gaGFzV2hlcmVBY2Nlc3NSZXN1bHQoYWNjZXNzUmVzdWx0cylcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBiZWZvcmVEZWxldGUgLSBDb2xsZWN0aW9uXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgYXdhaXQgY29sbGVjdGlvbkNvbmZpZy5ob29rcy5iZWZvcmVEZWxldGUucmVkdWNlKGFzeW5jIChwcmlvckhvb2ssIGhvb2spID0+IHtcbiAgICAgIGF3YWl0IHByaW9ySG9va1xuXG4gICAgICByZXR1cm4gaG9vayh7XG4gICAgICAgIGlkLFxuICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgICAgcmVxLFxuICAgICAgfSlcbiAgICB9LCBQcm9taXNlLnJlc29sdmUoKSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBSZXRyaWV2ZSBkb2N1bWVudFxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGNvbnN0IGRvY1RvRGVsZXRlID0gYXdhaXQgcmVxLnBheWxvYWQuZGIuZmluZE9uZSh7XG4gICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29uZmlnLnNsdWcsXG4gICAgICBsb2NhbGU6IHJlcS5sb2NhbGUsXG4gICAgICByZXEsXG4gICAgICB3aGVyZTogY29tYmluZVF1ZXJpZXMoeyBpZDogeyBlcXVhbHM6IGlkIH0gfSwgYWNjZXNzUmVzdWx0cyksXG4gICAgfSlcblxuICAgIGlmICghZG9jVG9EZWxldGUgJiYgIWhhc1doZXJlQWNjZXNzKSB0aHJvdyBuZXcgTm90Rm91bmQodClcbiAgICBpZiAoIWRvY1RvRGVsZXRlICYmIGhhc1doZXJlQWNjZXNzKSB0aHJvdyBuZXcgRm9yYmlkZGVuKHQpXG5cbiAgICBhd2FpdCBkZWxldGVBc3NvY2lhdGVkRmlsZXMoe1xuICAgICAgY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgIGNvbmZpZyxcbiAgICAgIGRvYzogZG9jVG9EZWxldGUsXG4gICAgICBvdmVycmlkZURlbGV0ZTogdHJ1ZSxcbiAgICAgIHQsXG4gICAgfSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBEZWxldGUgdmVyc2lvbnNcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBpZiAoY29sbGVjdGlvbkNvbmZpZy52ZXJzaW9ucykge1xuICAgICAgYXdhaXQgZGVsZXRlQ29sbGVjdGlvblZlcnNpb25zKHtcbiAgICAgICAgaWQsXG4gICAgICAgIHNsdWc6IGNvbGxlY3Rpb25Db25maWcuc2x1ZyxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgcmVxLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gRGVsZXRlIGRvY3VtZW50XG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgbGV0IHJlc3VsdCA9IGF3YWl0IHJlcS5wYXlsb2FkLmRiLmRlbGV0ZU9uZSh7XG4gICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29uZmlnLnNsdWcsXG4gICAgICByZXEsXG4gICAgICB3aGVyZTogeyBpZDogeyBlcXVhbHM6IGlkIH0gfSxcbiAgICB9KVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERlbGV0ZSBQcmVmZXJlbmNlc1xuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGF3YWl0IGRlbGV0ZVVzZXJQcmVmZXJlbmNlcyh7XG4gICAgICBjb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgaWRzOiBbaWRdLFxuICAgICAgcGF5bG9hZCxcbiAgICAgIHJlcSxcbiAgICB9KVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIGFmdGVyUmVhZCAtIEZpZWxkc1xuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIHJlc3VsdCA9IGF3YWl0IGFmdGVyUmVhZCh7XG4gICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgY29udGV4dDogcmVxLmNvbnRleHQsXG4gICAgICBkZXB0aCxcbiAgICAgIGRvYzogcmVzdWx0LFxuICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICBnbG9iYWw6IG51bGwsXG4gICAgICBsb2NhbGUsXG4gICAgICBvdmVycmlkZUFjY2VzcyxcbiAgICAgIHJlcSxcbiAgICAgIHNob3dIaWRkZW5GaWVsZHMsXG4gICAgfSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhZnRlclJlYWQgLSBDb2xsZWN0aW9uXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgYXdhaXQgY29sbGVjdGlvbkNvbmZpZy5ob29rcy5hZnRlclJlYWQucmVkdWNlKGFzeW5jIChwcmlvckhvb2ssIGhvb2spID0+IHtcbiAgICAgIGF3YWl0IHByaW9ySG9va1xuXG4gICAgICByZXN1bHQgPVxuICAgICAgICAoYXdhaXQgaG9vayh7XG4gICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgICAgICBkb2M6IHJlc3VsdCxcbiAgICAgICAgICByZXEsXG4gICAgICAgIH0pKSB8fCByZXN1bHRcbiAgICB9LCBQcm9taXNlLnJlc29sdmUoKSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhZnRlckRlbGV0ZSAtIENvbGxlY3Rpb25cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBhd2FpdCBjb2xsZWN0aW9uQ29uZmlnLmhvb2tzLmFmdGVyRGVsZXRlLnJlZHVjZShhc3luYyAocHJpb3JIb29rLCBob29rKSA9PiB7XG4gICAgICBhd2FpdCBwcmlvckhvb2tcblxuICAgICAgcmVzdWx0ID1cbiAgICAgICAgKGF3YWl0IGhvb2soe1xuICAgICAgICAgIGlkLFxuICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICAgICAgY29udGV4dDogcmVxLmNvbnRleHQsXG4gICAgICAgICAgZG9jOiByZXN1bHQsXG4gICAgICAgICAgcmVxLFxuICAgICAgICB9KSkgfHwgcmVzdWx0XG4gICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gYWZ0ZXJPcGVyYXRpb24gLSBDb2xsZWN0aW9uXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgcmVzdWx0ID0gYXdhaXQgYnVpbGRBZnRlck9wZXJhdGlvbjxHZW5lcmF0ZWRUeXBlc1snY29sbGVjdGlvbnMnXVtUU2x1Z10+KHtcbiAgICAgIGFyZ3MsXG4gICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgb3BlcmF0aW9uOiAnZGVsZXRlQnlJRCcsXG4gICAgICByZXN1bHQsXG4gICAgfSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyA4LiBSZXR1cm4gcmVzdWx0c1xuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGlmIChzaG91bGRDb21taXQpIGF3YWl0IGNvbW1pdFRyYW5zYWN0aW9uKHJlcSlcblxuICAgIHJldHVybiByZXN1bHRcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBhd2FpdCBraWxsVHJhbnNhY3Rpb24oYXJncy5yZXEpXG4gICAgdGhyb3cgZXJyb3JcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBkZWxldGVCeUlEXG4iXSwibmFtZXMiOlsiZGVsZXRlQnlJRCIsImluY29taW5nQXJncyIsImFyZ3MiLCJzaG91bGRDb21taXQiLCJpbml0VHJhbnNhY3Rpb24iLCJyZXEiLCJjb2xsZWN0aW9uIiwiY29uZmlnIiwiaG9va3MiLCJiZWZvcmVPcGVyYXRpb24iLCJyZWR1Y2UiLCJwcmlvckhvb2siLCJob29rIiwiY29udGV4dCIsIm9wZXJhdGlvbiIsIlByb21pc2UiLCJyZXNvbHZlIiwiaWQiLCJjb2xsZWN0aW9uQ29uZmlnIiwiZGVwdGgiLCJvdmVycmlkZUFjY2VzcyIsImZhbGxiYWNrTG9jYWxlIiwibG9jYWxlIiwicGF5bG9hZCIsInQiLCJzaG93SGlkZGVuRmllbGRzIiwiYWNjZXNzUmVzdWx0cyIsImV4ZWN1dGVBY2Nlc3MiLCJhY2Nlc3MiLCJkZWxldGUiLCJoYXNXaGVyZUFjY2VzcyIsImhhc1doZXJlQWNjZXNzUmVzdWx0IiwiYmVmb3JlRGVsZXRlIiwiZG9jVG9EZWxldGUiLCJkYiIsImZpbmRPbmUiLCJzbHVnIiwid2hlcmUiLCJjb21iaW5lUXVlcmllcyIsImVxdWFscyIsIk5vdEZvdW5kIiwiRm9yYmlkZGVuIiwiZGVsZXRlQXNzb2NpYXRlZEZpbGVzIiwiZG9jIiwib3ZlcnJpZGVEZWxldGUiLCJ2ZXJzaW9ucyIsImRlbGV0ZUNvbGxlY3Rpb25WZXJzaW9ucyIsInJlc3VsdCIsImRlbGV0ZU9uZSIsImRlbGV0ZVVzZXJQcmVmZXJlbmNlcyIsImlkcyIsImFmdGVyUmVhZCIsImdsb2JhbCIsImFmdGVyRGVsZXRlIiwiYnVpbGRBZnRlck9wZXJhdGlvbiIsImNvbW1pdFRyYW5zYWN0aW9uIiwiZXJyb3IiLCJraWxsVHJhbnNhY3Rpb24iXSwibWFwcGluZ3MiOiI7Ozs7K0JBaU9BOzs7ZUFBQTs7O3NF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