payload 3.0.0-alpha.2 → 3.0.0-alpha.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/auth.js +5 -44
- package/bin.js +40 -1
- package/components.d.ts +14 -0
- package/components.js +71 -0
- package/config.js +10 -59
- package/database.js +21 -108
- package/dist/admin/RichText.js +2 -5
- package/dist/admin/elements/Cell.js +2 -5
- package/dist/admin/elements/DatePicker.js +2 -5
- package/dist/admin/elements/PreviewButton.js +2 -5
- package/dist/admin/elements/PublishButton.js +2 -5
- package/dist/admin/elements/SaveButton.js +2 -5
- package/dist/admin/elements/SaveDraftButton.js +2 -5
- package/dist/admin/elements/Tab.js +2 -5
- package/dist/admin/forms/Error.js +2 -5
- package/dist/admin/forms/FieldDescription.js +2 -5
- package/dist/admin/forms/FieldTypes.js +2 -5
- package/dist/admin/forms/Form.d.ts +22 -0
- package/dist/admin/forms/Form.d.ts.map +1 -1
- package/dist/admin/forms/Form.js +2 -5
- package/dist/admin/forms/Label.js +2 -5
- package/dist/admin/forms/RowLabel.js +2 -5
- package/dist/admin/types.d.ts +2 -1
- package/dist/admin/types.d.ts.map +1 -1
- package/dist/admin/types.js +2 -5
- package/dist/admin/views/types.d.ts +41 -0
- package/dist/admin/views/types.d.ts.map +1 -0
- package/dist/admin/views/types.js +3 -0
- package/dist/assets/assets.d.js +0 -1
- package/dist/auth/baseFields/accountLock.js +2 -12
- package/dist/auth/baseFields/apiKey.js +6 -21
- package/dist/auth/baseFields/auth.js +6 -16
- package/dist/auth/baseFields/verification.js +4 -14
- package/dist/auth/cookies.js +6 -33
- package/dist/auth/crypto.js +7 -30
- package/dist/auth/defaultAccess.js +2 -12
- package/dist/auth/defaultUser.js +4 -14
- package/dist/auth/executeAccess.js +5 -15
- package/dist/auth/extractJWT.js +4 -14
- package/dist/auth/getAccessResults.js +5 -15
- package/dist/auth/getAuthenticatedUser.js +2 -12
- package/dist/auth/getFieldsToSign.js +5 -15
- package/dist/auth/index.js +4 -27
- package/dist/auth/isLocked.js +2 -12
- package/dist/auth/operations/access.js +12 -22
- package/dist/auth/operations/forgotPassword.js +17 -32
- package/dist/auth/operations/init.js +2 -12
- package/dist/auth/operations/local/forgotPassword.js +8 -18
- package/dist/auth/operations/local/index.js +12 -27
- package/dist/auth/operations/local/login.js +8 -18
- package/dist/auth/operations/local/resetPassword.js +8 -18
- package/dist/auth/operations/local/unlock.js +8 -18
- package/dist/auth/operations/local/verifyEmail.js +8 -18
- package/dist/auth/operations/login.js +32 -47
- package/dist/auth/operations/logout.js +6 -21
- package/dist/auth/operations/me.js +4 -19
- package/dist/auth/operations/refresh.js +19 -34
- package/dist/auth/operations/registerFirstUser.js +10 -20
- package/dist/auth/operations/resetPassword.js +20 -43
- package/dist/auth/operations/unlock.js +16 -39
- package/dist/auth/operations/verifyEmail.js +14 -37
- package/dist/auth/sendVerificationEmail.js +4 -14
- package/dist/auth/strategies/apiKey.js +4 -19
- package/dist/auth/strategies/jwt.js +6 -21
- package/dist/auth/strategies/local/authenticate.js +6 -21
- package/dist/auth/strategies/local/generatePasswordSaltHash.js +7 -22
- package/dist/auth/strategies/local/incrementLoginAttempts.js +2 -12
- package/dist/auth/strategies/local/register.js +6 -16
- package/dist/auth/strategies/local/resetLoginAttempts.js +2 -12
- package/dist/auth/types.js +2 -12
- package/dist/bin/generateTypes.js +12 -27
- package/dist/bin/index.js +11 -53
- package/dist/bin/loadEnv.js +13 -26
- package/dist/bin/migrate.js +15 -30
- package/dist/bundlers/mocks/db-mongodb.js +0 -1
- package/dist/bundlers/mocks/db-postgres.js +2 -12
- package/dist/bundlers/mocks/dotENV.js +2 -12
- package/dist/bundlers/mocks/emptyModule.js +2 -12
- package/dist/bundlers/mocks/fileMock.js +2 -12
- package/dist/bundlers/types.js +2 -5
- package/dist/collections/config/build.js +2 -12
- package/dist/collections/config/defaults.js +9 -32
- package/dist/collections/config/sanitize.js +34 -49
- package/dist/collections/config/schema.js +157 -172
- package/dist/collections/config/types.d.ts +5 -5
- package/dist/collections/config/types.d.ts.map +1 -1
- package/dist/collections/config/types.js +2 -5
- package/dist/collections/dataloader.js +8 -23
- package/dist/collections/operations/create.js +38 -53
- package/dist/collections/operations/delete.js +27 -42
- package/dist/collections/operations/deleteByID.js +27 -42
- package/dist/collections/operations/docAccess.js +10 -20
- package/dist/collections/operations/find.js +25 -40
- package/dist/collections/operations/findByID.js +21 -36
- package/dist/collections/operations/findVersionByID.js +19 -34
- package/dist/collections/operations/findVersions.js +20 -35
- package/dist/collections/operations/local/create.js +10 -25
- package/dist/collections/operations/local/delete.js +10 -20
- package/dist/collections/operations/local/find.js +8 -18
- package/dist/collections/operations/local/findByID.js +8 -18
- package/dist/collections/operations/local/findVersionByID.js +8 -18
- package/dist/collections/operations/local/findVersions.js +8 -18
- package/dist/collections/operations/local/index.js +20 -35
- package/dist/collections/operations/local/restoreVersion.js +8 -18
- package/dist/collections/operations/local/update.js +12 -27
- package/dist/collections/operations/restoreVersion.js +26 -41
- package/dist/collections/operations/update.js +43 -58
- package/dist/collections/operations/updateByID.js +44 -59
- package/dist/collections/operations/utils.js +3 -12
- package/dist/config/build.js +9 -15
- package/dist/config/clientFiles.js +2 -12
- package/dist/config/createClientConfig.d.ts.map +1 -1
- package/dist/config/createClientConfig.js +12 -25
- package/dist/config/defaults.js +4 -19
- package/dist/config/find.js +18 -33
- package/dist/config/load.d.ts +1 -3
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +8 -37
- package/dist/config/sanitize.js +25 -40
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +116 -133
- package/dist/config/shared/adminViewSchema.js +9 -24
- package/dist/config/shared/componentSchema.js +21 -50
- package/dist/config/types.d.ts +12 -21
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +9 -21
- package/dist/config/validate.js +15 -71
- package/dist/database/combineQueries.js +4 -14
- package/dist/database/createDatabaseAdapter.js +14 -24
- package/dist/database/flattenWhereToOperators.js +2 -12
- package/dist/database/getLocalizedPaths.js +7 -22
- package/dist/database/migrations/createMigration.js +7 -22
- package/dist/database/migrations/getMigrations.js +4 -12
- package/dist/database/migrations/migrate.js +12 -22
- package/dist/database/migrations/migrateDown.js +12 -22
- package/dist/database/migrations/migrateRefresh.js +16 -24
- package/dist/database/migrations/migrateReset.js +12 -22
- package/dist/database/migrations/migrateStatus.js +8 -18
- package/dist/database/migrations/migrationTemplate.js +2 -12
- package/dist/database/migrations/migrationsCollection.js +2 -12
- package/dist/database/migrations/readMigrationFiles.d.ts.map +1 -1
- package/dist/database/migrations/readMigrationFiles.js +12 -24
- package/dist/database/queryValidation/types.js +2 -5
- package/dist/database/queryValidation/validateQueryPaths.js +13 -28
- package/dist/database/queryValidation/validateSearchParams.js +13 -21
- package/dist/database/types.d.ts +5 -2
- package/dist/database/types.d.ts.map +1 -1
- package/dist/database/types.js +2 -5
- package/dist/email/build.js +11 -26
- package/dist/email/defaults.js +2 -12
- package/dist/email/mockHandler.js +8 -23
- package/dist/email/sendEmail.js +2 -12
- package/dist/email/types.js +2 -5
- package/dist/errors/APIError.js +4 -19
- package/dist/errors/AuthenticationError.js +7 -22
- package/dist/errors/DuplicateCollection.js +4 -19
- package/dist/errors/DuplicateFieldName.js +4 -19
- package/dist/errors/DuplicateGlobal.js +4 -19
- package/dist/errors/ErrorDeletingFile.js +7 -22
- package/dist/errors/FileUploadError.js +7 -22
- package/dist/errors/Forbidden.js +7 -22
- package/dist/errors/InvalidConfiguration.js +6 -21
- package/dist/errors/InvalidFieldName.js +4 -19
- package/dist/errors/InvalidFieldRelationship.js +4 -19
- package/dist/errors/InvalidSchema.js +6 -21
- package/dist/errors/LockedAuth.js +7 -22
- package/dist/errors/MissingCollectionLabel.js +4 -19
- package/dist/errors/MissingFieldInputOptions.js +4 -19
- package/dist/errors/MissingFieldType.js +6 -21
- package/dist/errors/MissingFile.js +7 -22
- package/dist/errors/NotFound.js +7 -22
- package/dist/errors/QueryError.js +6 -21
- package/dist/errors/TimestampsRequired.js +4 -19
- package/dist/errors/UnathorizedError.js +7 -22
- package/dist/errors/ValidationError.js +8 -23
- package/dist/errors/index.js +20 -94
- package/dist/errors/types.js +2 -19
- package/dist/exports/auth.js +5 -44
- package/dist/exports/components/utilities.d.ts +0 -1
- package/dist/exports/components/utilities.js +0 -1
- package/dist/exports/config.js +10 -59
- package/dist/exports/database.js +21 -108
- package/dist/exports/errors.js +2 -68
- package/dist/exports/fields/index.js +3 -26
- package/dist/exports/fields/validations.js +2 -19
- package/dist/exports/operations.js +29 -125
- package/dist/exports/types.js +4 -74
- package/dist/exports/utilities.js +28 -141
- package/dist/exports/versions.js +9 -45
- package/dist/express/middleware/errorHandler.d.ts +0 -1
- package/dist/express/middleware/errorHandler.js +0 -1
- package/dist/express/middleware/index.d.ts +0 -1
- package/dist/express/middleware/index.js +0 -1
- package/dist/fields/baseFields/baseBlockFields.js +4 -14
- package/dist/fields/baseFields/baseIDField.js +4 -19
- package/dist/fields/config/sanitize.js +24 -39
- package/dist/fields/config/sanitize.spec.js +25 -29
- package/dist/fields/config/schema.js +329 -424
- package/dist/fields/config/types.js +15 -69
- package/dist/fields/getDefaultValue.js +2 -12
- package/dist/fields/hooks/afterChange/index.js +6 -16
- package/dist/fields/hooks/afterChange/promise.js +14 -22
- package/dist/fields/hooks/afterChange/traverseFields.js +4 -14
- package/dist/fields/hooks/afterRead/index.js +6 -16
- package/dist/fields/hooks/afterRead/promise.js +28 -36
- package/dist/fields/hooks/afterRead/relationshipPopulationPromise.js +5 -15
- package/dist/fields/hooks/afterRead/traverseFields.js +4 -14
- package/dist/fields/hooks/beforeChange/cloneDataFromOriginalDoc.js +2 -12
- package/dist/fields/hooks/beforeChange/getExistingRowDoc.js +2 -12
- package/dist/fields/hooks/beforeChange/index.js +8 -18
- package/dist/fields/hooks/beforeChange/promise.js +26 -35
- package/dist/fields/hooks/beforeChange/traverseFields.js +4 -14
- package/dist/fields/hooks/beforeValidate/index.js +6 -16
- package/dist/fields/hooks/beforeValidate/promise.js +30 -39
- package/dist/fields/hooks/beforeValidate/traverseFields.js +4 -14
- package/dist/fields/mergeBaseFields.js +8 -23
- package/dist/fields/sortableFieldTypes.js +2 -12
- package/dist/fields/validations.js +31 -97
- package/dist/fields/validations.spec.js +93 -87
- package/dist/globals/config/build.d.ts +0 -1
- package/dist/globals/config/build.js +0 -1
- package/dist/globals/config/sanitize.js +17 -32
- package/dist/globals/config/schema.js +55 -70
- package/dist/globals/config/types.d.ts +5 -5
- package/dist/globals/config/types.d.ts.map +1 -1
- package/dist/globals/config/types.js +2 -5
- package/dist/globals/graphql/resolvers/docAccess.d.ts +0 -1
- package/dist/globals/graphql/resolvers/docAccess.js +0 -1
- package/dist/globals/operations/docAccess.js +10 -20
- package/dist/globals/operations/findOne.js +14 -29
- package/dist/globals/operations/findVersionByID.js +18 -33
- package/dist/globals/operations/findVersions.js +20 -35
- package/dist/globals/operations/local/findOne.js +8 -18
- package/dist/globals/operations/local/findVersionByID.js +8 -18
- package/dist/globals/operations/local/findVersions.js +8 -18
- package/dist/globals/operations/local/index.js +12 -27
- package/dist/globals/operations/local/restoreVersion.js +8 -18
- package/dist/globals/operations/local/update.js +8 -18
- package/dist/globals/operations/restoreVersion.js +16 -31
- package/dist/globals/operations/update.js +23 -38
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +50 -70
- package/dist/localization/middleware.js +2 -12
- package/dist/localization/sanitizeFallbackLocale.js +2 -12
- package/dist/preferences/deleteUserPreferences.js +2 -12
- package/dist/preferences/operations/delete.js +10 -25
- package/dist/preferences/operations/findOne.js +2 -12
- package/dist/preferences/operations/update.js +8 -23
- package/dist/preferences/preferencesCollection.js +8 -18
- package/dist/preferences/requestHandlers/delete.js +6 -21
- package/dist/preferences/requestHandlers/findOne.js +6 -21
- package/dist/preferences/requestHandlers/update.js +6 -21
- package/dist/preferences/types.js +2 -5
- package/dist/translations/extractTranslations.js +4 -14
- package/dist/translations/getLocalI18n.js +5 -15
- package/dist/types/constants.js +2 -12
- package/dist/types/index.js +2 -12
- package/dist/uploads/canResizeImage.js +2 -12
- package/dist/uploads/cropImage.d.ts +3 -7
- package/dist/uploads/cropImage.d.ts.map +1 -1
- package/dist/uploads/cropImage.js +4 -28
- package/dist/uploads/deleteAssociatedFiles.js +11 -26
- package/dist/uploads/docWithFilenameExists.js +2 -12
- package/dist/uploads/fileExists.js +4 -19
- package/dist/uploads/formatFilesize.js +2 -12
- package/dist/uploads/generateFileData.d.ts.map +1 -1
- package/dist/uploads/generateFileData.js +40 -53
- package/dist/uploads/getBaseFields.js +6 -16
- package/dist/uploads/getExternalFile.js +5 -15
- package/dist/uploads/getFileByPath.js +10 -25
- package/dist/uploads/getImageSize.js +7 -22
- package/dist/uploads/getSafeFilename.js +8 -23
- package/dist/uploads/imageResizer.d.ts +3 -1
- package/dist/uploads/imageResizer.d.ts.map +1 -1
- package/dist/uploads/imageResizer.js +28 -44
- package/dist/uploads/isImage.js +2 -12
- package/dist/uploads/mimeTypeValidator.js +2 -12
- package/dist/uploads/mimeTypeValidator.spec.js +11 -15
- package/dist/uploads/saveBufferToFile.js +6 -21
- package/dist/uploads/types.d.ts +7 -1
- package/dist/uploads/types.d.ts.map +1 -1
- package/dist/uploads/types.js +2 -5
- package/dist/uploads/unlinkTempFiles.js +9 -22
- package/dist/uploads/uploadFiles.js +6 -21
- package/dist/utilities/checkDuplicateCollections.js +4 -14
- package/dist/utilities/combineMerge.js +4 -19
- package/dist/utilities/commitTransaction.js +4 -12
- package/dist/utilities/configToJSONSchema.js +22 -41
- package/dist/utilities/configToJSONSchema.spec.js +5 -9
- package/dist/utilities/convertData.js +3 -23
- package/dist/utilities/createArrayFromCommaDelineated.js +2 -12
- package/dist/utilities/createLocalReq.js +6 -16
- package/dist/utilities/deepCopyObject.js +2 -12
- package/dist/utilities/deepMerge.js +2 -12
- package/dist/utilities/fieldSchemaToJSON.js +2 -12
- package/dist/utilities/flattenTopLevelFields.js +6 -16
- package/dist/utilities/formatLabels.js +9 -70
- package/dist/utilities/formatLabels.spec.js +8 -12
- package/dist/utilities/getCSSVariable.js +2 -12
- package/dist/utilities/getEntityPolicies.js +4 -14
- package/dist/utilities/getIDType.js +2 -12
- package/dist/utilities/getObjectDotNotation.js +2 -12
- package/dist/utilities/getUniqueListBy.js +2 -12
- package/dist/utilities/initTransaction.js +5 -12
- package/dist/utilities/isEntityHidden.js +2 -12
- package/dist/utilities/isNumber.js +2 -12
- package/dist/utilities/isValidID.js +5 -20
- package/dist/utilities/isolateObjectProperty.js +2 -12
- package/dist/utilities/killTransaction.js +4 -12
- package/dist/utilities/logger.d.ts.map +1 -1
- package/dist/utilities/logger.js +16 -37
- package/dist/utilities/mapAsync.js +2 -12
- package/dist/utilities/overwriteMerge.js +2 -12
- package/dist/utilities/parseCookies.js +4 -14
- package/dist/utilities/pinoPretty.d.ts +1 -0
- package/dist/utilities/pinoPretty.d.ts.map +1 -0
- package/dist/utilities/pinoPretty.js +2 -0
- package/dist/utilities/sanitizeInternalFields.js +2 -12
- package/dist/utilities/setsAreEqual.js +2 -12
- package/dist/utilities/telemetry/events/adminInit.js +7 -17
- package/dist/utilities/telemetry/events/serverInit.js +4 -14
- package/dist/utilities/telemetry/index.js +17 -40
- package/dist/utilities/telemetry/oneWayHash.js +4 -14
- package/dist/utilities/timestamp.js +2 -12
- package/dist/utilities/toKebabCase.js +2 -12
- package/dist/utilities/wait.js +2 -12
- package/dist/utilities/wordBoundariesRegex.js +3 -13
- package/dist/versions/baseFields.js +5 -23
- package/dist/versions/buildCollectionFields.js +2 -12
- package/dist/versions/buildGlobalFields.js +2 -12
- package/dist/versions/deleteCollectionVersions.js +2 -12
- package/dist/versions/drafts/appendVersionToQueryKey.js +2 -12
- package/dist/versions/drafts/getQueryDraftsSort.js +2 -12
- package/dist/versions/drafts/replaceWithDraftIfAvailable.js +12 -27
- package/dist/versions/enforceMaxVersions.js +2 -12
- package/dist/versions/getLatestCollectionVersion.js +4 -14
- package/dist/versions/getLatestGlobalVersion.js +4 -14
- package/dist/versions/getVersionsModelName.js +2 -12
- package/dist/versions/saveVersion.js +8 -23
- package/dist/versions/types.js +2 -5
- package/errors.js +2 -68
- package/graphql.d.ts +3 -0
- package/graphql.js +27 -0
- package/operations.js +29 -125
- package/package.json +17 -5
- package/types.js +4 -74
- package/utilities.js +28 -141
- package/versions.js +9 -45
|
@@ -1,22 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
Object.defineProperty(exports, "getDataLoader", {
|
|
6
|
-
enumerable: true,
|
|
7
|
-
get: function() {
|
|
8
|
-
return getDataLoader;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
const _dataloader = /*#__PURE__*/ _interop_require_default(require("dataloader"));
|
|
12
|
-
const _types = require("../fields/config/types");
|
|
13
|
-
const _getIDType = require("../utilities/getIDType");
|
|
14
|
-
const _isValidID = require("../utilities/isValidID");
|
|
15
|
-
function _interop_require_default(obj) {
|
|
16
|
-
return obj && obj.__esModule ? obj : {
|
|
17
|
-
default: obj
|
|
18
|
-
};
|
|
19
|
-
}
|
|
1
|
+
import DataLoader from 'dataloader';
|
|
2
|
+
import { fieldAffectsData } from '../fields/config/types';
|
|
3
|
+
import { getIDType } from '../utilities/getIDType';
|
|
4
|
+
import { isValidID } from '../utilities/isValidID';
|
|
20
5
|
// Payload uses `dataloader` to solve the classic GraphQL N+1 problem.
|
|
21
6
|
// We keep a list of all documents requested to be populated for any given request
|
|
22
7
|
// and then batch together documents within the same collection,
|
|
@@ -57,10 +42,10 @@ const batchAndLoadDocs = (req)=>async (keys)=>{
|
|
|
57
42
|
showHiddenFields
|
|
58
43
|
];
|
|
59
44
|
const batchKey = JSON.stringify(batchKeyArray);
|
|
60
|
-
const idField = payload.collections?.[collection].config.fields.find((field)=>
|
|
45
|
+
const idField = payload.collections?.[collection].config.fields.find((field)=>fieldAffectsData(field) && field.name === 'id');
|
|
61
46
|
let sanitizedID = id;
|
|
62
47
|
if (idField?.type === 'number') sanitizedID = parseFloat(id);
|
|
63
|
-
if (
|
|
48
|
+
if (isValidID(sanitizedID, getIDType(idField, payload?.db?.defaultIDType))) {
|
|
64
49
|
return {
|
|
65
50
|
...batches,
|
|
66
51
|
[batchKey]: [
|
|
@@ -118,6 +103,6 @@ const batchAndLoadDocs = (req)=>async (keys)=>{
|
|
|
118
103
|
// and should match the length of the incoming keys arg
|
|
119
104
|
return docs;
|
|
120
105
|
};
|
|
121
|
-
const getDataLoader = (req)=>new
|
|
106
|
+
export const getDataLoader = (req)=>new DataLoader(batchAndLoadDocs(req));
|
|
122
107
|
|
|
123
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9ucy9kYXRhbG9hZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQmF0Y2hMb2FkRm4gfSBmcm9tICdkYXRhbG9hZGVyJ1xuXG5pbXBvcnQgRGF0YUxvYWRlciBmcm9tICdkYXRhbG9hZGVyJ1xuXG5pbXBvcnQgdHlwZSB7IFBheWxvYWRSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFR5cGVXaXRoSUQgfSBmcm9tICcuL2NvbmZpZy90eXBlcydcblxuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSB9IGZyb20gJy4uL2ZpZWxkcy9jb25maWcvdHlwZXMnXG5pbXBvcnQgeyBnZXRJRFR5cGUgfSBmcm9tICcuLi91dGlsaXRpZXMvZ2V0SURUeXBlJ1xuaW1wb3J0IHsgaXNWYWxpZElEIH0gZnJvbSAnLi4vdXRpbGl0aWVzL2lzVmFsaWRJRCdcblxuLy8gUGF5bG9hZCB1c2VzIGBkYXRhbG9hZGVyYCB0byBzb2x2ZSB0aGUgY2xhc3NpYyBHcmFwaFFMIE4rMSBwcm9ibGVtLlxuXG4vLyBXZSBrZWVwIGEgbGlzdCBvZiBhbGwgZG9jdW1lbnRzIHJlcXVlc3RlZCB0byBiZSBwb3B1bGF0ZWQgZm9yIGFueSBnaXZlbiByZXF1ZXN0XG4vLyBhbmQgdGhlbiBiYXRjaCB0b2dldGhlciBkb2N1bWVudHMgd2l0aGluIHRoZSBzYW1lIGNvbGxlY3Rpb24sXG4vLyBtYWtpbmcgb25seSAxIGZpbmQgcGVyIGVhY2ggY29sbGVjdGlvbiwgcmF0aGVyIHRoYW4gYGZpbmRCeUlEYCBwZXIgZWFjaCByZXF1ZXN0ZWQgZG9jLlxuXG4vLyBUaGlzIGRyYW1hdGljYWxseSBpbXByb3ZlcyBwZXJmb3JtYW5jZSBmb3IgUkVTVCBhbmQgTG9jYWwgQVBJIGBkZXB0aGAgcG9wdWxhdGlvbnMsXG4vLyBhbmQgYWxzbyBlbnN1cmVzIGNvbXBsZXggR3JhcGhRTCBxdWVyaWVzIHBlcmZvcm0gbGlnaHRuaW5nLWZhc3QuXG5cbmNvbnN0IGJhdGNoQW5kTG9hZERvY3MgPVxuICAocmVxOiBQYXlsb2FkUmVxdWVzdCk6IEJhdGNoTG9hZEZuPHN0cmluZywgVHlwZVdpdGhJRD4gPT5cbiAgYXN5bmMgKGtleXM6IHN0cmluZ1tdKTogUHJvbWlzZTxUeXBlV2l0aElEW10+ID0+IHtcbiAgICBjb25zdCB7IHBheWxvYWQgfSA9IHJlcVxuXG4gICAgLy8gQ3JlYXRlIGRvY3MgYXJyYXkgb2Ygc2FtZSBsZW5ndGggYXMga2V5cywgdXNpbmcgbnVsbCBhcyB2YWx1ZVxuICAgIC8vIFdlIHdpbGwgcmVwbGFjZSBudWxscyB3aXRoIGluamVjdGVkIGRvY3MgYXMgdGhleSBhcmUgcmV0cmlldmVkXG4gICAgY29uc3QgZG9jczogKFR5cGVXaXRoSUQgfCBudWxsKVtdID0ga2V5cy5tYXAoKCkgPT4gbnVsbClcblxuICAgIC8qKlxuICAgICogQmF0Y2ggSURzIGJ5IHRoZWlyIGBmaW5kYCBhcmdzXG4gICAgKiBzbyB3ZSBjYW4gbWFrZSBvbmUgZmluZCBxdWVyeSBwZXIgY29tYmluYXRpb24gb2YgY29sbGVjdGlvbiwgZGVwdGgsIGxvY2FsZSwgYW5kIGZhbGxiYWNrTG9jYWxlLlxuICAgICpcbiAgICAqIFJlc3VsdGluZyBzaGFwZSB3aWxsIGJlIGFzIGZvbGxvd3M6XG4gICAgICB7XG4gICAgICAgIC8vIGtleSBpcyBzdHJpbmdpZmllZCBzZXQgb2YgZmluZCBhcmdzXG4gICAgICAgICdbbnVsbCxcInBhZ2VzXCIsMiwwLFwiZXNcIixcImVuXCIsZmFsc2UsZmFsc2VdJzogW1xuICAgICAgICAgIC8vIHZhbHVlIGlzIGFycmF5IG9mIElEcyB0byBmaW5kIHdpdGggdGhlc2UgYXJnc1xuICAgICAgICAgICdxMzR0bDIzNDYyMzQ2MjM0NTI0JyxcbiAgICAgICAgICAnNDM1NTIzNTQwMTk0MzI0MjgwJyxcbiAgICAgICAgICAnMjM0NjI0NWozNWwzajUyMzQ1MzJsaScsXG4gICAgICAgIF0sXG4gICAgICAgIC8vIGV0Y1xuICAgICAgfTtcbiAgICAqXG4gICAgKiovXG5cbiAgICBjb25zdCBiYXRjaEJ5RmluZEFyZ3MgPSBrZXlzLnJlZHVjZSgoYmF0Y2hlcywga2V5KSA9PiB7XG4gICAgICBjb25zdCBbXG4gICAgICAgIHRyYW5zYWN0aW9uSUQsXG4gICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgIGlkLFxuICAgICAgICBkZXB0aCxcbiAgICAgICAgY3VycmVudERlcHRoLFxuICAgICAgICBsb2NhbGUsXG4gICAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgICBvdmVycmlkZUFjY2VzcyxcbiAgICAgICAgc2hvd0hpZGRlbkZpZWxkcyxcbiAgICAgIF0gPSBKU09OLnBhcnNlKGtleSlcblxuICAgICAgY29uc3QgYmF0Y2hLZXlBcnJheSA9IFtcbiAgICAgICAgdHJhbnNhY3Rpb25JRCxcbiAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgZGVwdGgsXG4gICAgICAgIGN1cnJlbnREZXB0aCxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBmYWxsYmFja0xvY2FsZSxcbiAgICAgICAgb3ZlcnJpZGVBY2Nlc3MsXG4gICAgICAgIHNob3dIaWRkZW5GaWVsZHMsXG4gICAgICBdXG5cbiAgICAgIGNvbnN0IGJhdGNoS2V5ID0gSlNPTi5zdHJpbmdpZnkoYmF0Y2hLZXlBcnJheSlcblxuICAgICAgY29uc3QgaWRGaWVsZCA9IHBheWxvYWQuY29sbGVjdGlvbnM/Lltjb2xsZWN0aW9uXS5jb25maWcuZmllbGRzLmZpbmQoXG4gICAgICAgIChmaWVsZCkgPT4gZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgZmllbGQubmFtZSA9PT0gJ2lkJyxcbiAgICAgIClcblxuICAgICAgbGV0IHNhbml0aXplZElEOiBudW1iZXIgfCBzdHJpbmcgPSBpZFxuXG4gICAgICBpZiAoaWRGaWVsZD8udHlwZSA9PT0gJ251bWJlcicpIHNhbml0aXplZElEID0gcGFyc2VGbG9hdChpZClcblxuICAgICAgaWYgKGlzVmFsaWRJRChzYW5pdGl6ZWRJRCwgZ2V0SURUeXBlKGlkRmllbGQsIHBheWxvYWQ/LmRiPy5kZWZhdWx0SURUeXBlKSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5iYXRjaGVzLFxuICAgICAgICAgIFtiYXRjaEtleV06IFsuLi4oYmF0Y2hlc1tiYXRjaEtleV0gfHwgW10pLCBzYW5pdGl6ZWRJRF0sXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXRjaGVzXG4gICAgfSwge30pXG5cbiAgICAvLyBSdW4gZmluZCByZXF1ZXN0cyBvbmUgYWZ0ZXIgYW5vdGhlciwgc28gYXMgdG8gbm90IGhhbmcgdHJhbnNhY3Rpb25zXG5cbiAgICBhd2FpdCBPYmplY3QuZW50cmllcyhiYXRjaEJ5RmluZEFyZ3MpLnJlZHVjZShhc3luYyAocHJpb3JGaW5kLCBbYmF0Y2hLZXksIGlkc10pID0+IHtcbiAgICAgIGF3YWl0IHByaW9yRmluZFxuXG4gICAgICBjb25zdCBbXG4gICAgICAgIHRyYW5zYWN0aW9uSUQsXG4gICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgIGRlcHRoLFxuICAgICAgICBjdXJyZW50RGVwdGgsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgICAgICBzaG93SGlkZGVuRmllbGRzLFxuICAgICAgXSA9IEpTT04ucGFyc2UoYmF0Y2hLZXkpXG5cbiAgICAgIHJlcS50cmFuc2FjdGlvbklEID0gdHJhbnNhY3Rpb25JRFxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYXlsb2FkLmZpbmQoe1xuICAgICAgICBjb2xsZWN0aW9uLFxuICAgICAgICBjdXJyZW50RGVwdGgsXG4gICAgICAgIGRlcHRoLFxuICAgICAgICBkaXNhYmxlRXJyb3JzOiB0cnVlLFxuICAgICAgICBmYWxsYmFja0xvY2FsZSxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBvdmVycmlkZUFjY2VzczogQm9vbGVhbihvdmVycmlkZUFjY2VzcyksXG4gICAgICAgIHBhZ2luYXRpb246IGZhbHNlLFxuICAgICAgICByZXEsXG4gICAgICAgIHNob3dIaWRkZW5GaWVsZHM6IEJvb2xlYW4oc2hvd0hpZGRlbkZpZWxkcyksXG4gICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgIGluOiBpZHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIC8vIEZvciBlYWNoIHJldHVybmVkIGRvYywgZmluZCBpbmRleCBpbiBvcmlnaW5hbCBrZXlzXG4gICAgICAvLyBJbmplY3QgZG9jIHdpdGhpbiBkb2NzIGFycmF5IGlmIGluZGV4IGV4aXN0c1xuXG4gICAgICByZXN1bHQuZG9jcy5mb3JFYWNoKChkb2MpID0+IHtcbiAgICAgICAgY29uc3QgZG9jS2V5ID0gSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgIHJlcS50cmFuc2FjdGlvbklELFxuICAgICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgICAgZG9jLmlkLFxuICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgIGN1cnJlbnREZXB0aCxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICAgICAgb3ZlcnJpZGVBY2Nlc3MsXG4gICAgICAgICAgc2hvd0hpZGRlbkZpZWxkcyxcbiAgICAgICAgXSlcbiAgICAgICAgY29uc3QgZG9jc0luZGV4ID0ga2V5cy5maW5kSW5kZXgoKGtleSkgPT4ga2V5ID09PSBkb2NLZXkpXG5cbiAgICAgICAgaWYgKGRvY3NJbmRleCA+
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2xsZWN0aW9ucy9kYXRhbG9hZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQmF0Y2hMb2FkRm4gfSBmcm9tICdkYXRhbG9hZGVyJ1xuXG5pbXBvcnQgRGF0YUxvYWRlciBmcm9tICdkYXRhbG9hZGVyJ1xuXG5pbXBvcnQgdHlwZSB7IFBheWxvYWRSZXF1ZXN0IH0gZnJvbSAnLi4vdHlwZXMnXG5pbXBvcnQgdHlwZSB7IFR5cGVXaXRoSUQgfSBmcm9tICcuL2NvbmZpZy90eXBlcydcblxuaW1wb3J0IHsgZmllbGRBZmZlY3RzRGF0YSB9IGZyb20gJy4uL2ZpZWxkcy9jb25maWcvdHlwZXMnXG5pbXBvcnQgeyBnZXRJRFR5cGUgfSBmcm9tICcuLi91dGlsaXRpZXMvZ2V0SURUeXBlJ1xuaW1wb3J0IHsgaXNWYWxpZElEIH0gZnJvbSAnLi4vdXRpbGl0aWVzL2lzVmFsaWRJRCdcblxuLy8gUGF5bG9hZCB1c2VzIGBkYXRhbG9hZGVyYCB0byBzb2x2ZSB0aGUgY2xhc3NpYyBHcmFwaFFMIE4rMSBwcm9ibGVtLlxuXG4vLyBXZSBrZWVwIGEgbGlzdCBvZiBhbGwgZG9jdW1lbnRzIHJlcXVlc3RlZCB0byBiZSBwb3B1bGF0ZWQgZm9yIGFueSBnaXZlbiByZXF1ZXN0XG4vLyBhbmQgdGhlbiBiYXRjaCB0b2dldGhlciBkb2N1bWVudHMgd2l0aGluIHRoZSBzYW1lIGNvbGxlY3Rpb24sXG4vLyBtYWtpbmcgb25seSAxIGZpbmQgcGVyIGVhY2ggY29sbGVjdGlvbiwgcmF0aGVyIHRoYW4gYGZpbmRCeUlEYCBwZXIgZWFjaCByZXF1ZXN0ZWQgZG9jLlxuXG4vLyBUaGlzIGRyYW1hdGljYWxseSBpbXByb3ZlcyBwZXJmb3JtYW5jZSBmb3IgUkVTVCBhbmQgTG9jYWwgQVBJIGBkZXB0aGAgcG9wdWxhdGlvbnMsXG4vLyBhbmQgYWxzbyBlbnN1cmVzIGNvbXBsZXggR3JhcGhRTCBxdWVyaWVzIHBlcmZvcm0gbGlnaHRuaW5nLWZhc3QuXG5cbmNvbnN0IGJhdGNoQW5kTG9hZERvY3MgPVxuICAocmVxOiBQYXlsb2FkUmVxdWVzdCk6IEJhdGNoTG9hZEZuPHN0cmluZywgVHlwZVdpdGhJRD4gPT5cbiAgYXN5bmMgKGtleXM6IHN0cmluZ1tdKTogUHJvbWlzZTxUeXBlV2l0aElEW10+ID0+IHtcbiAgICBjb25zdCB7IHBheWxvYWQgfSA9IHJlcVxuXG4gICAgLy8gQ3JlYXRlIGRvY3MgYXJyYXkgb2Ygc2FtZSBsZW5ndGggYXMga2V5cywgdXNpbmcgbnVsbCBhcyB2YWx1ZVxuICAgIC8vIFdlIHdpbGwgcmVwbGFjZSBudWxscyB3aXRoIGluamVjdGVkIGRvY3MgYXMgdGhleSBhcmUgcmV0cmlldmVkXG4gICAgY29uc3QgZG9jczogKFR5cGVXaXRoSUQgfCBudWxsKVtdID0ga2V5cy5tYXAoKCkgPT4gbnVsbClcblxuICAgIC8qKlxuICAgICogQmF0Y2ggSURzIGJ5IHRoZWlyIGBmaW5kYCBhcmdzXG4gICAgKiBzbyB3ZSBjYW4gbWFrZSBvbmUgZmluZCBxdWVyeSBwZXIgY29tYmluYXRpb24gb2YgY29sbGVjdGlvbiwgZGVwdGgsIGxvY2FsZSwgYW5kIGZhbGxiYWNrTG9jYWxlLlxuICAgICpcbiAgICAqIFJlc3VsdGluZyBzaGFwZSB3aWxsIGJlIGFzIGZvbGxvd3M6XG4gICAgICB7XG4gICAgICAgIC8vIGtleSBpcyBzdHJpbmdpZmllZCBzZXQgb2YgZmluZCBhcmdzXG4gICAgICAgICdbbnVsbCxcInBhZ2VzXCIsMiwwLFwiZXNcIixcImVuXCIsZmFsc2UsZmFsc2VdJzogW1xuICAgICAgICAgIC8vIHZhbHVlIGlzIGFycmF5IG9mIElEcyB0byBmaW5kIHdpdGggdGhlc2UgYXJnc1xuICAgICAgICAgICdxMzR0bDIzNDYyMzQ2MjM0NTI0JyxcbiAgICAgICAgICAnNDM1NTIzNTQwMTk0MzI0MjgwJyxcbiAgICAgICAgICAnMjM0NjI0NWozNWwzajUyMzQ1MzJsaScsXG4gICAgICAgIF0sXG4gICAgICAgIC8vIGV0Y1xuICAgICAgfTtcbiAgICAqXG4gICAgKiovXG5cbiAgICBjb25zdCBiYXRjaEJ5RmluZEFyZ3MgPSBrZXlzLnJlZHVjZSgoYmF0Y2hlcywga2V5KSA9PiB7XG4gICAgICBjb25zdCBbXG4gICAgICAgIHRyYW5zYWN0aW9uSUQsXG4gICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgIGlkLFxuICAgICAgICBkZXB0aCxcbiAgICAgICAgY3VycmVudERlcHRoLFxuICAgICAgICBsb2NhbGUsXG4gICAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgICBvdmVycmlkZUFjY2VzcyxcbiAgICAgICAgc2hvd0hpZGRlbkZpZWxkcyxcbiAgICAgIF0gPSBKU09OLnBhcnNlKGtleSlcblxuICAgICAgY29uc3QgYmF0Y2hLZXlBcnJheSA9IFtcbiAgICAgICAgdHJhbnNhY3Rpb25JRCxcbiAgICAgICAgY29sbGVjdGlvbixcbiAgICAgICAgZGVwdGgsXG4gICAgICAgIGN1cnJlbnREZXB0aCxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBmYWxsYmFja0xvY2FsZSxcbiAgICAgICAgb3ZlcnJpZGVBY2Nlc3MsXG4gICAgICAgIHNob3dIaWRkZW5GaWVsZHMsXG4gICAgICBdXG5cbiAgICAgIGNvbnN0IGJhdGNoS2V5ID0gSlNPTi5zdHJpbmdpZnkoYmF0Y2hLZXlBcnJheSlcblxuICAgICAgY29uc3QgaWRGaWVsZCA9IHBheWxvYWQuY29sbGVjdGlvbnM/Lltjb2xsZWN0aW9uXS5jb25maWcuZmllbGRzLmZpbmQoXG4gICAgICAgIChmaWVsZCkgPT4gZmllbGRBZmZlY3RzRGF0YShmaWVsZCkgJiYgZmllbGQubmFtZSA9PT0gJ2lkJyxcbiAgICAgIClcblxuICAgICAgbGV0IHNhbml0aXplZElEOiBudW1iZXIgfCBzdHJpbmcgPSBpZFxuXG4gICAgICBpZiAoaWRGaWVsZD8udHlwZSA9PT0gJ251bWJlcicpIHNhbml0aXplZElEID0gcGFyc2VGbG9hdChpZClcblxuICAgICAgaWYgKGlzVmFsaWRJRChzYW5pdGl6ZWRJRCwgZ2V0SURUeXBlKGlkRmllbGQsIHBheWxvYWQ/LmRiPy5kZWZhdWx0SURUeXBlKSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5iYXRjaGVzLFxuICAgICAgICAgIFtiYXRjaEtleV06IFsuLi4oYmF0Y2hlc1tiYXRjaEtleV0gfHwgW10pLCBzYW5pdGl6ZWRJRF0sXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBiYXRjaGVzXG4gICAgfSwge30pXG5cbiAgICAvLyBSdW4gZmluZCByZXF1ZXN0cyBvbmUgYWZ0ZXIgYW5vdGhlciwgc28gYXMgdG8gbm90IGhhbmcgdHJhbnNhY3Rpb25zXG5cbiAgICBhd2FpdCBPYmplY3QuZW50cmllcyhiYXRjaEJ5RmluZEFyZ3MpLnJlZHVjZShhc3luYyAocHJpb3JGaW5kLCBbYmF0Y2hLZXksIGlkc10pID0+IHtcbiAgICAgIGF3YWl0IHByaW9yRmluZFxuXG4gICAgICBjb25zdCBbXG4gICAgICAgIHRyYW5zYWN0aW9uSUQsXG4gICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgIGRlcHRoLFxuICAgICAgICBjdXJyZW50RGVwdGgsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgICAgICBzaG93SGlkZGVuRmllbGRzLFxuICAgICAgXSA9IEpTT04ucGFyc2UoYmF0Y2hLZXkpXG5cbiAgICAgIHJlcS50cmFuc2FjdGlvbklEID0gdHJhbnNhY3Rpb25JRFxuXG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwYXlsb2FkLmZpbmQoe1xuICAgICAgICBjb2xsZWN0aW9uLFxuICAgICAgICBjdXJyZW50RGVwdGgsXG4gICAgICAgIGRlcHRoLFxuICAgICAgICBkaXNhYmxlRXJyb3JzOiB0cnVlLFxuICAgICAgICBmYWxsYmFja0xvY2FsZSxcbiAgICAgICAgbG9jYWxlLFxuICAgICAgICBvdmVycmlkZUFjY2VzczogQm9vbGVhbihvdmVycmlkZUFjY2VzcyksXG4gICAgICAgIHBhZ2luYXRpb246IGZhbHNlLFxuICAgICAgICByZXEsXG4gICAgICAgIHNob3dIaWRkZW5GaWVsZHM6IEJvb2xlYW4oc2hvd0hpZGRlbkZpZWxkcyksXG4gICAgICAgIHdoZXJlOiB7XG4gICAgICAgICAgaWQ6IHtcbiAgICAgICAgICAgIGluOiBpZHMsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG5cbiAgICAgIC8vIEZvciBlYWNoIHJldHVybmVkIGRvYywgZmluZCBpbmRleCBpbiBvcmlnaW5hbCBrZXlzXG4gICAgICAvLyBJbmplY3QgZG9jIHdpdGhpbiBkb2NzIGFycmF5IGlmIGluZGV4IGV4aXN0c1xuXG4gICAgICByZXN1bHQuZG9jcy5mb3JFYWNoKChkb2MpID0+IHtcbiAgICAgICAgY29uc3QgZG9jS2V5ID0gSlNPTi5zdHJpbmdpZnkoW1xuICAgICAgICAgIHJlcS50cmFuc2FjdGlvbklELFxuICAgICAgICAgIGNvbGxlY3Rpb24sXG4gICAgICAgICAgZG9jLmlkLFxuICAgICAgICAgIGRlcHRoLFxuICAgICAgICAgIGN1cnJlbnREZXB0aCxcbiAgICAgICAgICBsb2NhbGUsXG4gICAgICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICAgICAgb3ZlcnJpZGVBY2Nlc3MsXG4gICAgICAgICAgc2hvd0hpZGRlbkZpZWxkcyxcbiAgICAgICAgXSlcbiAgICAgICAgY29uc3QgZG9jc0luZGV4ID0ga2V5cy5maW5kSW5kZXgoKGtleSkgPT4ga2V5ID09PSBkb2NLZXkpXG5cbiAgICAgICAgaWYgKGRvY3NJbmRleCA+IC0xKSB7XG4gICAgICAgICAgZG9jc1tkb2NzSW5kZXhdID0gZG9jXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSwgUHJvbWlzZS5yZXNvbHZlKCkpXG5cbiAgICAvLyBSZXR1cm4gZG9jcyBhcnJheSxcbiAgICAvLyB3aGljaCBoYXMgbm93IGJlZW4gaW5qZWN0ZWQgd2l0aCBhbGwgZmV0Y2hlZCBkb2NzXG4gICAgLy8gYW5kIHNob3VsZCBtYXRjaCB0aGUgbGVuZ3RoIG9mIHRoZSBpbmNvbWluZyBrZXlzIGFyZ1xuICAgIHJldHVybiBkb2NzXG4gIH1cblxuZXhwb3J0IGNvbnN0IGdldERhdGFMb2FkZXIgPSAocmVxOiBQYXlsb2FkUmVxdWVzdCkgPT4gbmV3IERhdGFMb2FkZXIoYmF0Y2hBbmRMb2FkRG9jcyhyZXEpKVxuIl0sIm5hbWVzIjpbIkRhdGFMb2FkZXIiLCJmaWVsZEFmZmVjdHNEYXRhIiwiZ2V0SURUeXBlIiwiaXNWYWxpZElEIiwiYmF0Y2hBbmRMb2FkRG9jcyIsInJlcSIsImtleXMiLCJwYXlsb2FkIiwiZG9jcyIsIm1hcCIsImJhdGNoQnlGaW5kQXJncyIsInJlZHVjZSIsImJhdGNoZXMiLCJrZXkiLCJ0cmFuc2FjdGlvbklEIiwiY29sbGVjdGlvbiIsImlkIiwiZGVwdGgiLCJjdXJyZW50RGVwdGgiLCJsb2NhbGUiLCJmYWxsYmFja0xvY2FsZSIsIm92ZXJyaWRlQWNjZXNzIiwic2hvd0hpZGRlbkZpZWxkcyIsIkpTT04iLCJwYXJzZSIsImJhdGNoS2V5QXJyYXkiLCJiYXRjaEtleSIsInN0cmluZ2lmeSIsImlkRmllbGQiLCJjb2xsZWN0aW9ucyIsImNvbmZpZyIsImZpZWxkcyIsImZpbmQiLCJmaWVsZCIsIm5hbWUiLCJzYW5pdGl6ZWRJRCIsInR5cGUiLCJwYXJzZUZsb2F0IiwiZGIiLCJkZWZhdWx0SURUeXBlIiwiT2JqZWN0IiwiZW50cmllcyIsInByaW9yRmluZCIsImlkcyIsInJlc3VsdCIsImRpc2FibGVFcnJvcnMiLCJCb29sZWFuIiwicGFnaW5hdGlvbiIsIndoZXJlIiwiaW4iLCJmb3JFYWNoIiwiZG9jIiwiZG9jS2V5IiwiZG9jc0luZGV4IiwiZmluZEluZGV4IiwiUHJvbWlzZSIsInJlc29sdmUiLCJnZXREYXRhTG9hZGVyIl0sIm1hcHBpbmdzIjoiQUFFQSxPQUFPQSxnQkFBZ0IsYUFBWTtBQUtuQyxTQUFTQyxnQkFBZ0IsUUFBUSx5QkFBd0I7QUFDekQsU0FBU0MsU0FBUyxRQUFR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
|
|
@@ -1,40 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
const _unlinkTempFiles = require("../../uploads/unlinkTempFiles");
|
|
21
|
-
const _uploadFiles = require("../../uploads/uploadFiles");
|
|
22
|
-
const _commitTransaction = require("../../utilities/commitTransaction");
|
|
23
|
-
const _flattenTopLevelFields = /*#__PURE__*/ _interop_require_default(require("../../utilities/flattenTopLevelFields"));
|
|
24
|
-
const _initTransaction = require("../../utilities/initTransaction");
|
|
25
|
-
const _killTransaction = require("../../utilities/killTransaction");
|
|
26
|
-
const _sanitizeInternalFields = /*#__PURE__*/ _interop_require_default(require("../../utilities/sanitizeInternalFields"));
|
|
27
|
-
const _saveVersion = require("../../versions/saveVersion");
|
|
28
|
-
const _utils = require("./utils");
|
|
29
|
-
function _interop_require_default(obj) {
|
|
30
|
-
return obj && obj.__esModule ? obj : {
|
|
31
|
-
default: obj
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
const createOperation = async (incomingArgs)=>{
|
|
1
|
+
import crypto from 'crypto';
|
|
2
|
+
import executeAccess from '../../auth/executeAccess';
|
|
3
|
+
import sendVerificationEmail from '../../auth/sendVerificationEmail';
|
|
4
|
+
import { registerLocalStrategy } from '../../auth/strategies/local/register';
|
|
5
|
+
import { afterChange } from '../../fields/hooks/afterChange';
|
|
6
|
+
import { afterRead } from '../../fields/hooks/afterRead';
|
|
7
|
+
import { beforeChange } from '../../fields/hooks/beforeChange';
|
|
8
|
+
import { beforeValidate } from '../../fields/hooks/beforeValidate';
|
|
9
|
+
import { generateFileData } from '../../uploads/generateFileData';
|
|
10
|
+
import { unlinkTempFiles } from '../../uploads/unlinkTempFiles';
|
|
11
|
+
import { uploadFiles } from '../../uploads/uploadFiles';
|
|
12
|
+
import { commitTransaction } from '../../utilities/commitTransaction';
|
|
13
|
+
import flattenFields from '../../utilities/flattenTopLevelFields';
|
|
14
|
+
import { initTransaction } from '../../utilities/initTransaction';
|
|
15
|
+
import { killTransaction } from '../../utilities/killTransaction';
|
|
16
|
+
import sanitizeInternalFields from '../../utilities/sanitizeInternalFields';
|
|
17
|
+
import { saveVersion } from '../../versions/saveVersion';
|
|
18
|
+
import { buildAfterOperation } from './utils';
|
|
19
|
+
export const createOperation = async (incomingArgs)=>{
|
|
35
20
|
let args = incomingArgs;
|
|
36
21
|
try {
|
|
37
|
-
const shouldCommit = await
|
|
22
|
+
const shouldCommit = await initTransaction(args.req);
|
|
38
23
|
// /////////////////////////////////////
|
|
39
24
|
// beforeOperation - Collection
|
|
40
25
|
// /////////////////////////////////////
|
|
@@ -55,7 +40,7 @@ const createOperation = async (incomingArgs)=>{
|
|
|
55
40
|
// Access
|
|
56
41
|
// /////////////////////////////////////
|
|
57
42
|
if (!overrideAccess) {
|
|
58
|
-
await (
|
|
43
|
+
await executeAccess({
|
|
59
44
|
data,
|
|
60
45
|
req
|
|
61
46
|
}, collectionConfig.access.create);
|
|
@@ -64,7 +49,7 @@ const createOperation = async (incomingArgs)=>{
|
|
|
64
49
|
// Custom id
|
|
65
50
|
// /////////////////////////////////////
|
|
66
51
|
// @todo: Refactor code to store 'customId' on the collection configuration itself so we don't need to repeat flattenFields
|
|
67
|
-
const hasIdField = (
|
|
52
|
+
const hasIdField = flattenFields(collectionConfig.fields).findIndex((field)=>field.name === 'id') > -1;
|
|
68
53
|
if (hasIdField) {
|
|
69
54
|
data = {
|
|
70
55
|
_id: data.id,
|
|
@@ -74,7 +59,7 @@ const createOperation = async (incomingArgs)=>{
|
|
|
74
59
|
// /////////////////////////////////////
|
|
75
60
|
// Generate data for all files and sizes
|
|
76
61
|
// /////////////////////////////////////
|
|
77
|
-
const { data: newFileData, files: filesToUpload } = await
|
|
62
|
+
const { data: newFileData, files: filesToUpload } = await generateFileData({
|
|
78
63
|
collection,
|
|
79
64
|
config,
|
|
80
65
|
data,
|
|
@@ -86,7 +71,7 @@ const createOperation = async (incomingArgs)=>{
|
|
|
86
71
|
// /////////////////////////////////////
|
|
87
72
|
// beforeValidate - Fields
|
|
88
73
|
// /////////////////////////////////////
|
|
89
|
-
data = await
|
|
74
|
+
data = await beforeValidate({
|
|
90
75
|
collection: collectionConfig,
|
|
91
76
|
context: req.context,
|
|
92
77
|
data,
|
|
@@ -131,7 +116,7 @@ const createOperation = async (incomingArgs)=>{
|
|
|
131
116
|
// /////////////////////////////////////
|
|
132
117
|
// beforeChange - Fields
|
|
133
118
|
// /////////////////////////////////////
|
|
134
|
-
const resultWithLocales = await
|
|
119
|
+
const resultWithLocales = await beforeChange({
|
|
135
120
|
collection: collectionConfig,
|
|
136
121
|
context: req.context,
|
|
137
122
|
data,
|
|
@@ -146,7 +131,7 @@ const createOperation = async (incomingArgs)=>{
|
|
|
146
131
|
// Write files to local storage
|
|
147
132
|
// /////////////////////////////////////
|
|
148
133
|
if (!collectionConfig.upload.disableLocalStorage) {
|
|
149
|
-
await
|
|
134
|
+
await uploadFiles(payload, filesToUpload, req);
|
|
150
135
|
}
|
|
151
136
|
// /////////////////////////////////////
|
|
152
137
|
// Create
|
|
@@ -158,9 +143,9 @@ const createOperation = async (incomingArgs)=>{
|
|
|
158
143
|
}
|
|
159
144
|
if (collectionConfig.auth.verify) {
|
|
160
145
|
resultWithLocales._verified = Boolean(resultWithLocales._verified) || false;
|
|
161
|
-
resultWithLocales._verificationToken =
|
|
146
|
+
resultWithLocales._verificationToken = crypto.randomBytes(20).toString('hex');
|
|
162
147
|
}
|
|
163
|
-
doc = await
|
|
148
|
+
doc = await registerLocalStrategy({
|
|
164
149
|
collection: collectionConfig,
|
|
165
150
|
doc: resultWithLocales,
|
|
166
151
|
password: data.password,
|
|
@@ -175,12 +160,12 @@ const createOperation = async (incomingArgs)=>{
|
|
|
175
160
|
});
|
|
176
161
|
}
|
|
177
162
|
const verificationToken = doc._verificationToken;
|
|
178
|
-
let result = (
|
|
163
|
+
let result = sanitizeInternalFields(doc);
|
|
179
164
|
// /////////////////////////////////////
|
|
180
165
|
// Create version
|
|
181
166
|
// /////////////////////////////////////
|
|
182
167
|
if (collectionConfig.versions) {
|
|
183
|
-
await
|
|
168
|
+
await saveVersion({
|
|
184
169
|
id: result.id,
|
|
185
170
|
autosave,
|
|
186
171
|
collection: collectionConfig,
|
|
@@ -194,7 +179,7 @@ const createOperation = async (incomingArgs)=>{
|
|
|
194
179
|
// /////////////////////////////////////
|
|
195
180
|
if (collectionConfig.auth && collectionConfig.auth.verify) {
|
|
196
181
|
// eslint-disable-next-line @typescript-eslint/no-floating-promises
|
|
197
|
-
(
|
|
182
|
+
sendVerificationEmail({
|
|
198
183
|
collection: {
|
|
199
184
|
config: collectionConfig
|
|
200
185
|
},
|
|
@@ -210,7 +195,7 @@ const createOperation = async (incomingArgs)=>{
|
|
|
210
195
|
// /////////////////////////////////////
|
|
211
196
|
// afterRead - Fields
|
|
212
197
|
// /////////////////////////////////////
|
|
213
|
-
result = await
|
|
198
|
+
result = await afterRead({
|
|
214
199
|
collection: collectionConfig,
|
|
215
200
|
context: req.context,
|
|
216
201
|
depth,
|
|
@@ -237,7 +222,7 @@ const createOperation = async (incomingArgs)=>{
|
|
|
237
222
|
// /////////////////////////////////////
|
|
238
223
|
// afterChange - Fields
|
|
239
224
|
// /////////////////////////////////////
|
|
240
|
-
result = await
|
|
225
|
+
result = await afterChange({
|
|
241
226
|
collection: collectionConfig,
|
|
242
227
|
context: req.context,
|
|
243
228
|
data,
|
|
@@ -264,13 +249,13 @@ const createOperation = async (incomingArgs)=>{
|
|
|
264
249
|
// /////////////////////////////////////
|
|
265
250
|
// afterOperation - Collection
|
|
266
251
|
// /////////////////////////////////////
|
|
267
|
-
result = await
|
|
252
|
+
result = await buildAfterOperation({
|
|
268
253
|
args,
|
|
269
254
|
collection: collectionConfig,
|
|
270
255
|
operation: 'create',
|
|
271
256
|
result
|
|
272
257
|
});
|
|
273
|
-
await
|
|
258
|
+
await unlinkTempFiles({
|
|
274
259
|
collectionConfig,
|
|
275
260
|
config,
|
|
276
261
|
req
|
|
@@ -278,12 +263,12 @@ const createOperation = async (incomingArgs)=>{
|
|
|
278
263
|
// /////////////////////////////////////
|
|
279
264
|
// Return results
|
|
280
265
|
// /////////////////////////////////////
|
|
281
|
-
if (shouldCommit) await
|
|
266
|
+
if (shouldCommit) await commitTransaction(req);
|
|
282
267
|
return result;
|
|
283
268
|
} catch (error) {
|
|
284
|
-
await
|
|
269
|
+
await killTransaction(args.req);
|
|
285
270
|
throw error;
|
|
286
271
|
}
|
|
287
272
|
};
|
|
288
273
|
|
|
289
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2xsZWN0aW9ucy9vcGVyYXRpb25zL2NyZWF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE1hcmtPcHRpb25hbCB9IGZyb20gJ3RzLWVzc2VudGlhbHMnXG5cbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyYXRlZFR5cGVzIH0gZnJvbSAnLi4vLi4vJ1xuaW1wb3J0IHR5cGUgeyBQYXlsb2FkUmVxdWVzdCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEb2N1bWVudCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuICBBZnRlckNoYW5nZUhvb2ssXG4gIEJlZm9yZU9wZXJhdGlvbkhvb2ssXG4gIEJlZm9yZVZhbGlkYXRlSG9vayxcbiAgQ29sbGVjdGlvbixcbn0gZnJvbSAnLi4vY29uZmlnL3R5cGVzJ1xuXG5pbXBvcnQgZXhlY3V0ZUFjY2VzcyBmcm9tICcuLi8uLi9hdXRoL2V4ZWN1dGVBY2Nlc3MnXG5pbXBvcnQgc2VuZFZlcmlmaWNhdGlvbkVtYWlsIGZyb20gJy4uLy4uL2F1dGgvc2VuZFZlcmlmaWNhdGlvbkVtYWlsJ1xuaW1wb3J0IHsgcmVnaXN0ZXJMb2NhbFN0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vYXV0aC9zdHJhdGVnaWVzL2xvY2FsL3JlZ2lzdGVyJ1xuaW1wb3J0IHsgYWZ0ZXJDaGFuZ2UgfSBmcm9tICcuLi8uLi9maWVsZHMvaG9va3MvYWZ0ZXJDaGFuZ2UnXG5pbXBvcnQgeyBhZnRlclJlYWQgfSBmcm9tICcuLi8uLi9maWVsZHMvaG9va3MvYWZ0ZXJSZWFkJ1xuaW1wb3J0IHsgYmVmb3JlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vZmllbGRzL2hvb2tzL2JlZm9yZUNoYW5nZSdcbmltcG9ydCB7IGJlZm9yZVZhbGlkYXRlIH0gZnJvbSAnLi4vLi4vZmllbGRzL2hvb2tzL2JlZm9yZVZhbGlkYXRlJ1xuaW1wb3J0IHsgZ2VuZXJhdGVGaWxlRGF0YSB9IGZyb20gJy4uLy4uL3VwbG9hZHMvZ2VuZXJhdGVGaWxlRGF0YSdcbmltcG9ydCB7IHVubGlua1RlbXBGaWxlcyB9IGZyb20gJy4uLy4uL3VwbG9hZHMvdW5saW5rVGVtcEZpbGVzJ1xuaW1wb3J0IHsgdXBsb2FkRmlsZXMgfSBmcm9tICcuLi8uLi91cGxvYWRzL3VwbG9hZEZpbGVzJ1xuaW1wb3J0IHsgY29tbWl0VHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvY29tbWl0VHJhbnNhY3Rpb24nXG5pbXBvcnQgZmxhdHRlbkZpZWxkcyBmcm9tICcuLi8uLi91dGlsaXRpZXMvZmxhdHRlblRvcExldmVsRmllbGRzJ1xuaW1wb3J0IHsgaW5pdFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2luaXRUcmFuc2FjdGlvbidcbmltcG9ydCB7IGtpbGxUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9raWxsVHJhbnNhY3Rpb24nXG5pbXBvcnQgc2FuaXRpemVJbnRlcm5hbEZpZWxkcyBmcm9tICcuLi8uLi91dGlsaXRpZXMvc2FuaXRpemVJbnRlcm5hbEZpZWxkcydcbmltcG9ydCB7IHNhdmVWZXJzaW9uIH0gZnJvbSAnLi4vLi4vdmVyc2lvbnMvc2F2ZVZlcnNpb24nXG5pbXBvcnQgeyBidWlsZEFmdGVyT3BlcmF0aW9uIH0gZnJvbSAnLi91dGlscydcblxuZXhwb3J0IHR5cGUgQ3JlYXRlVXBkYXRlVHlwZSA9IHsgW2ZpZWxkOiBudW1iZXIgfCBzdHJpbmcgfCBzeW1ib2xdOiB1bmtub3duIH1cblxuZXhwb3J0IHR5cGUgQXJndW1lbnRzPFQgZXh0ZW5kcyBDcmVhdGVVcGRhdGVUeXBlPiA9IHtcbiAgYXV0b3NhdmU/OiBib29sZWFuXG4gIGNvbGxlY3Rpb246IENvbGxlY3Rpb25cbiAgZGF0YTogTWFya09wdGlvbmFsPFQsICdjcmVhdGVkQXQnIHwgJ2lkJyB8ICdzaXplcycgfCAndXBkYXRlZEF0Jz5cbiAgZGVwdGg/OiBudW1iZXJcbiAgZGlzYWJsZVZlcmlmaWNhdGlvbkVtYWlsPzogYm9vbGVhblxuICBkcmFmdD86IGJvb2xlYW5cbiAgb3ZlcnJpZGVBY2Nlc3M/OiBib29sZWFuXG4gIG92ZXJ3cml0ZUV4aXN0aW5nRmlsZXM/OiBib29sZWFuXG4gIHJlcTogUGF5bG9hZFJlcXVlc3RcbiAgc2hvd0hpZGRlbkZpZWxkcz86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU9wZXJhdGlvbiA9IGFzeW5jIDxUU2x1ZyBleHRlbmRzIGtleW9mIEdlbmVyYXRlZFR5cGVzWydjb2xsZWN0aW9ucyddPihcbiAgaW5jb21pbmdBcmdzOiBBcmd1bWVudHM8R2VuZXJhdGVkVHlwZXNbJ2NvbGxlY3Rpb25zJ11bVFNsdWddPixcbik6IFByb21pc2U8R2VuZXJhdGVkVHlwZXNbJ2NvbGxlY3Rpb25zJ11bVFNsdWddPiA9PiB7XG4gIGxldCBhcmdzID0gaW5jb21pbmdBcmdzXG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzaG91bGRDb21taXQgPSBhd2FpdCBpbml0VHJhbnNhY3Rpb24oYXJncy5yZXEpXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gYmVmb3JlT3BlcmF0aW9uIC0gQ29sbGVjdGlvblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGF3YWl0IGFyZ3MuY29sbGVjdGlvbi5jb25maWcuaG9va3MuYmVmb3JlT3BlcmF0aW9uLnJlZHVjZShcbiAgICAgIGFzeW5jIChwcmlvckhvb2s6IEJlZm9yZU9wZXJhdGlvbkhvb2sgfCBQcm9taXNlPHZvaWQ+LCBob29rOiBCZWZvcmVPcGVyYXRpb25Ib29rKSA9PiB7XG4gICAgICAgIGF3YWl0IHByaW9ySG9va1xuXG4gICAgICAgIGFyZ3MgPVxuICAgICAgICAgIChhd2FpdCBob29rKHtcbiAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgICBjb2xsZWN0aW9uOiBhcmdzLmNvbGxlY3Rpb24uY29uZmlnLFxuICAgICAgICAgICAgY29udGV4dDogYXJncy5yZXEuY29udGV4dCxcbiAgICAgICAgICAgIG9wZXJhdGlvbjogJ2NyZWF0ZScsXG4gICAgICAgICAgICByZXE6IGFyZ3MucmVxLFxuICAgICAgICAgIH0pKSB8fCBhcmdzXG4gICAgICB9LFxuICAgICAgUHJvbWlzZS5yZXNvbHZlKCksXG4gICAgKVxuXG4gICAgY29uc3Qge1xuICAgICAgYXV0b3NhdmUgPSBmYWxzZSxcbiAgICAgIGNvbGxlY3Rpb246IHsgY29uZmlnOiBjb2xsZWN0aW9uQ29uZmlnIH0sXG4gICAgICBjb2xsZWN0aW9uLFxuICAgICAgZGVwdGgsXG4gICAgICBkaXNhYmxlVmVyaWZpY2F0aW9uRW1haWwsXG4gICAgICBkcmFmdCA9IGZhbHNlLFxuICAgICAgb3ZlcnJpZGVBY2Nlc3MsXG4gICAgICBvdmVyd3JpdGVFeGlzdGluZ0ZpbGVzID0gZmFsc2UsXG4gICAgICByZXE6IHtcbiAgICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgcGF5bG9hZDogeyBjb25maWcsIGVtYWlsT3B0aW9ucyB9LFxuICAgICAgfSxcbiAgICAgIHJlcSxcbiAgICAgIHNob3dIaWRkZW5GaWVsZHMsXG4gICAgfSA9IGFyZ3NcblxuICAgIGxldCB7IGRhdGEgfSA9IGFyZ3NcblxuICAgIGNvbnN0IHNob3VsZFNhdmVEcmFmdCA9IEJvb2xlYW4oZHJhZnQgJiYgY29sbGVjdGlvbkNvbmZpZy52ZXJzaW9ucy5kcmFmdHMpXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQWNjZXNzXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgaWYgKCFvdmVycmlkZUFjY2Vzcykge1xuICAgICAgYXdhaXQgZXhlY3V0ZUFjY2Vzcyh7IGRhdGEsIHJlcSB9LCBjb2xsZWN0aW9uQ29uZmlnLmFjY2Vzcy5jcmVhdGUpXG4gICAgfVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEN1c3RvbSBpZFxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBAdG9kbzogUmVmYWN0b3IgY29kZSB0byBzdG9yZSAnY3VzdG9tSWQnIG9uIHRoZSBjb2xsZWN0aW9uIGNvbmZpZ3VyYXRpb24gaXRzZWxmIHNvIHdlIGRvbid0IG5lZWQgdG8gcmVwZWF0IGZsYXR0ZW5GaWVsZHNcbiAgICBjb25zdCBoYXNJZEZpZWxkID1cbiAgICAgIGZsYXR0ZW5GaWVsZHMoY29sbGVjdGlvbkNvbmZpZy5maWVsZHMpLmZpbmRJbmRleCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT09ICdpZCcpID4gLTFcblxuICAgIGlmIChoYXNJZEZpZWxkKSB7XG4gICAgICBkYXRhID0ge1xuICAgICAgICBfaWQ6IGRhdGEuaWQsXG4gICAgICAgIC4uLmRhdGEsXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEdlbmVyYXRlIGRhdGEgZm9yIGFsbCBmaWxlcyBhbmQgc2l6ZXNcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBjb25zdCB7IGRhdGE6IG5ld0ZpbGVEYXRhLCBmaWxlczogZmlsZXNUb1VwbG9hZCB9ID0gYXdhaXQgZ2VuZXJhdGVGaWxlRGF0YSh7XG4gICAgICBjb2xsZWN0aW9uLFxuICAgICAgY29uZmlnLFxuICAgICAgZGF0YSxcbiAgICAgIG92ZXJ3cml0ZUV4aXN0aW5nRmlsZXMsXG4gICAgICByZXEsXG4gICAgICB0aHJvd09uTWlzc2luZ0ZpbGU6XG4gICAgICAgICFzaG91bGRTYXZlRHJhZnQgJiYgY29sbGVjdGlvbi5jb25maWcudXBsb2FkLmZpbGVzUmVxdWlyZWRPbkNyZWF0ZSAhPT0gZmFsc2UsXG4gICAgfSlcblxuICAgIGRhdGEgPSBuZXdGaWxlRGF0YVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIGJlZm9yZVZhbGlkYXRlIC0gRmllbGRzXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgZGF0YSA9IGF3YWl0IGJlZm9yZVZhbGlkYXRlKHtcbiAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgIGRhdGEsXG4gICAgICBkb2M6IHt9LFxuICAgICAgZ2xvYmFsOiBudWxsLFxuICAgICAgb3BlcmF0aW9uOiAnY3JlYXRlJyxcbiAgICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgICAgcmVxLFxuICAgIH0pXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gYmVmb3JlVmFsaWRhdGUgLSBDb2xsZWN0aW9uc1xuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGF3YWl0IGNvbGxlY3Rpb25Db25maWcuaG9va3MuYmVmb3JlVmFsaWRhdGUucmVkdWNlKFxuICAgICAgYXN5bmMgKHByaW9ySG9vazogQmVmb3JlVmFsaWRhdGVIb29rIHwgUHJvbWlzZTx2b2lkPiwgaG9vazogQmVmb3JlVmFsaWRhdGVIb29rKSA9PiB7XG4gICAgICAgIGF3YWl0IHByaW9ySG9va1xuXG4gICAgICAgIGRhdGEgPVxuICAgICAgICAgIChhd2FpdCBob29rKHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICAgICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBvcGVyYXRpb246ICdjcmVhdGUnLFxuICAgICAgICAgICAgcmVxLFxuICAgICAgICAgIH0pKSB8fCBkYXRhXG4gICAgICB9LFxuICAgICAgUHJvbWlzZS5yZXNvbHZlKCksXG4gICAgKVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFdyaXRlIGZpbGVzIHRvIGxvY2FsIHN0b3JhZ2VcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAvLyBpZiAoIWNvbGxlY3Rpb25Db25maWcudXBsb2FkLmRpc2FibGVMb2NhbFN0b3JhZ2UpIHtcbiAgICAvLyAgIGF3YWl0IHVwbG9hZEZpbGVzKHBheWxvYWQsIGZpbGVzVG9VcGxvYWQsIHJlcS50KVxuICAgIC8vIH1cblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBiZWZvcmVDaGFuZ2UgLSBDb2xsZWN0aW9uXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgYXdhaXQgY29sbGVjdGlvbkNvbmZpZy5ob29rcy5iZWZvcmVDaGFuZ2UucmVkdWNlKGFzeW5jIChwcmlvckhvb2ssIGhvb2spID0+IHtcbiAgICAgIGF3YWl0IHByaW9ySG9va1xuXG4gICAgICBkYXRhID1cbiAgICAgICAgKGF3YWl0IGhvb2soe1xuICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICAgICAgY29udGV4dDogcmVxLmNvbnRleHQsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBvcGVyYXRpb246ICdjcmVhdGUnLFxuICAgICAgICAgIHJlcSxcbiAgICAgICAgfSkpIHx8IGRhdGFcbiAgICB9LCBQcm9taXNlLnJlc29sdmUoKSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBiZWZvcmVDaGFuZ2UgLSBGaWVsZHNcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBjb25zdCByZXN1bHRXaXRoTG9jYWxlcyA9IGF3YWl0IGJlZm9yZUNoYW5nZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oe1xuICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgIGNvbnRleHQ6IHJlcS5jb250ZXh0LFxuICAgICAgZGF0YSxcbiAgICAgIGRvYzoge30sXG4gICAgICBkb2NXaXRoTG9jYWxlczoge30sXG4gICAgICBnbG9iYWw6IG51bGwsXG4gICAgICBvcGVyYXRpb246ICdjcmVhdGUnLFxuICAgICAgcmVxLFxuICAgICAgc2tpcFZhbGlkYXRpb246IHNob3VsZFNhdmVEcmFmdCxcbiAgICB9KVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFdyaXRlIGZpbGVzIHRvIGxvY2FsIHN0b3JhZ2VcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBpZiAoIWNvbGxlY3Rpb25Db25maWcudXBsb2FkLmRpc2FibGVMb2NhbFN0b3JhZ2UpIHtcbiAgICAgIGF3YWl0IHVwbG9hZEZpbGVzKHBheWxvYWQsIGZpbGVzVG9VcGxvYWQsIHJlcSlcbiAgICB9XG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ3JlYXRlXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgbGV0IGRvY1xuXG4gICAgaWYgKGNvbGxlY3Rpb25Db25maWcuYXV0aCAmJiAhY29sbGVjdGlvbkNvbmZpZy5hdXRoLmRpc2FibGVMb2NhbFN0cmF0ZWd5KSB7XG4gICAgICBpZiAoZGF0YS5lbWFpbCkge1xuICAgICAgICByZXN1bHRXaXRoTG9jYWxlcy5lbWFpbCA9IChkYXRhLmVtYWlsIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKVxuICAgICAgfVxuXG4gICAgICBpZiAoY29sbGVjdGlvbkNvbmZpZy5hdXRoLnZlcmlmeSkge1xuICAgICAgICByZXN1bHRXaXRoTG9jYWxlcy5fdmVyaWZpZWQgPSBCb29sZWFuKHJlc3VsdFdpdGhMb2NhbGVzLl92ZXJpZmllZCkgfHwgZmFsc2VcbiAgICAgICAgcmVzdWx0V2l0aExvY2FsZXMuX3ZlcmlmaWNhdGlvblRva2VuID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDIwKS50b1N0cmluZygnaGV4JylcbiAgICAgIH1cblxuICAgICAgZG9jID0gYXdhaXQgcmVnaXN0ZXJMb2NhbFN0cmF0ZWd5KHtcbiAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgZG9jOiByZXN1bHRXaXRoTG9jYWxlcyxcbiAgICAgICAgcGFzc3dvcmQ6IGRhdGEucGFzc3dvcmQgYXMgc3RyaW5nLFxuICAgICAgICBwYXlsb2FkOiByZXEucGF5bG9hZCxcbiAgICAgICAgcmVxLFxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgZG9jID0gYXdhaXQgcGF5bG9hZC5kYi5jcmVhdGUoe1xuICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29uZmlnLnNsdWcsXG4gICAgICAgIGRhdGE6IHJlc3VsdFdpdGhMb2NhbGVzLFxuICAgICAgICByZXEsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IHZlcmlmaWNhdGlvblRva2VuID0gZG9jLl92ZXJpZmljYXRpb25Ub2tlblxuICAgIGxldCByZXN1bHQ6IERvY3VtZW50ID0gc2FuaXRpemVJbnRlcm5hbEZpZWxkcyhkb2MpXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ3JlYXRlIHZlcnNpb25cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBpZiAoY29sbGVjdGlvbkNvbmZpZy52ZXJzaW9ucykge1xuICAgICAgYXdhaXQgc2F2ZVZlcnNpb24oe1xuICAgICAgICBpZDogcmVzdWx0LmlkLFxuICAgICAgICBhdXRvc2F2ZSxcbiAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgZG9jV2l0aExvY2FsZXM6IHJlc3VsdCxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgcmVxLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU2VuZCB2ZXJpZmljYXRpb24gZW1haWwgaWYgYXBwbGljYWJsZVxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGlmIChjb2xsZWN0aW9uQ29uZmlnLmF1dGggJiYgY29sbGVjdGlvbkNvbmZpZy5hdXRoLnZlcmlmeSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgICAgc2VuZFZlcmlmaWNhdGlvbkVtYWlsKHtcbiAgICAgICAgY29sbGVjdGlvbjogeyBjb25maWc6IGNvbGxlY3Rpb25Db25maWcgfSxcbiAgICAgICAgY29uZmlnOiBwYXlsb2FkLmNvbmZpZyxcbiAgICAgICAgZGlzYWJsZUVtYWlsOiBkaXNhYmxlVmVyaWZpY2F0aW9uRW1haWwsXG4gICAgICAgIGVtYWlsT3B0aW9ucyxcbiAgICAgICAgcmVxLFxuICAgICAgICBzZW5kRW1haWw6IHBheWxvYWQuc2VuZEVtYWlsLFxuICAgICAgICB0b2tlbjogdmVyaWZpY2F0aW9uVG9rZW4sXG4gICAgICAgIHVzZXI6IHJlc3VsdCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIGFmdGVyUmVhZCAtIEZpZWxkc1xuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIHJlc3VsdCA9IGF3YWl0IGFmdGVyUmVhZCh7XG4gICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgY29udGV4dDogcmVxLmNvbnRleHQsXG4gICAgICBkZXB0aCxcbiAgICAgIGRvYzogcmVzdWx0LFxuICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICBnbG9iYWw6IG51bGwsXG4gICAgICBsb2NhbGUsXG4gICAgICBvdmVycmlkZUFjY2VzcyxcbiAgICAgIHJlcSxcbiAgICAgIHNob3dIaWRkZW5GaWVsZHMsXG4gICAgfSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhZnRlclJlYWQgLSBDb2xsZWN0aW9uXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgYXdhaXQgY29sbGVjdGlvbkNvbmZpZy5ob29rcy5hZnRlclJlYWQucmVkdWNlKGFzeW5jIChwcmlvckhvb2ssIGhvb2spID0+IHtcbiAgICAgIGF3YWl0IHByaW9ySG9va1xuXG4gICAgICByZXN1bHQgPVxuICAgICAgICAoYXdhaXQgaG9vayh7XG4gICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgICAgICBkb2M6IHJlc3VsdCxcbiAgICAgICAgICByZXEsXG4gICAgICAgIH0pKSB8fCByZXN1bHRcbiAgICB9LCBQcm9taXNlLnJlc29sdmUoKSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhZnRlckNoYW5nZSAtIEZpZWxkc1xuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIHJlc3VsdCA9IGF3YWl0IGFmdGVyQ2hhbmdlKHtcbiAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgIGRhdGEsXG4gICAgICBkb2M6IHJlc3VsdCxcbiAgICAgIGdsb2JhbDogbnVsbCxcbiAgICAgIG9wZXJhdGlvbjogJ2NyZWF0ZScsXG4gICAgICBwcmV2aW91c0RvYzoge30sXG4gICAgICByZXEsXG4gICAgfSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhZnRlckNoYW5nZSAtIENvbGxlY3Rpb25cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBhd2FpdCBjb2xsZWN0aW9uQ29uZmlnLmhvb2tzLmFmdGVyQ2hhbmdlLnJlZHVjZShcbiAgICAgIGFzeW5jIChwcmlvckhvb2s6IEFmdGVyQ2hhbmdlSG9vayB8IFByb21pc2U8dm9pZD4sIGhvb2s6IEFmdGVyQ2hhbmdlSG9vaykgPT4ge1xuICAgICAgICBhd2FpdCBwcmlvckhvb2tcblxuICAgICAgICByZXN1bHQgPVxuICAgICAgICAgIChhd2FpdCBob29rKHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICAgICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgICAgICAgIGRvYzogcmVzdWx0LFxuICAgICAgICAgICAgb3BlcmF0aW9uOiAnY3JlYXRlJyxcbiAgICAgICAgICAgIHByZXZpb3VzRG9jOiB7fSxcbiAgICAgICAgICAgIHJlcTogYXJncy5yZXEsXG4gICAgICAgICAgfSkpIHx8IHJlc3VsdFxuICAgICAgfSxcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLFxuICAgIClcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhZnRlck9wZXJhdGlvbiAtIENvbGxlY3Rpb25cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICByZXN1bHQgPSBhd2FpdCBidWlsZEFmdGVyT3BlcmF0aW9uPEdlbmVyYXRlZFR5cGVzWydjb2xsZWN0aW9ucyddW1RTbHVnXT4oe1xuICAgICAgYXJncyxcbiAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICBvcGVyYXRpb246ICdjcmVhdGUnLFxuICAgICAgcmVzdWx0LFxuICAgIH0pXG5cbiAgICBhd2FpdCB1bmxpbmtUZW1wRmlsZXMoeyBjb2xsZWN0aW9uQ29uZmlnLCBjb25maWcsIHJlcSB9KVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFJldHVybiByZXN1bHRzXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgaWYgKHNob3VsZENvbW1pdCkgYXdhaXQgY29tbWl0VHJhbnNhY3Rpb24ocmVxKVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGF3YWl0IGtpbGxUcmFuc2FjdGlvbihhcmdzLnJlcSlcbiAgICB0aHJvdyBlcnJvclxuICB9XG59XG4iXSwibmFtZXMiOlsiY3JlYXRlT3BlcmF0aW9uIiwiaW5jb21pbmdBcmdzIiwiYXJncyIsInNob3VsZENvbW1pdCIsImluaXRUcmFuc2FjdGlvbiIsInJlcSIsImNvbGxlY3Rpb24iLCJjb25maWciLCJob29rcyIsImJlZm9yZU9wZXJhdGlvbiIsInJlZHVjZSIsInByaW9ySG9vayIsImhvb2siLCJjb250ZXh0Iiwib3BlcmF0aW9uIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhdXRvc2F2ZSIsImNvbGxlY3Rpb25Db25maWciLCJkZXB0aCIsImRpc2FibGVWZXJpZmljYXRpb25FbWFpbCIsImRyYWZ0Iiwib3ZlcnJpZGVBY2Nlc3MiLCJvdmVyd3JpdGVFeGlzdGluZ0ZpbGVzIiwiZmFsbGJhY2tMb2NhbGUiLCJsb2NhbGUiLCJwYXlsb2FkIiwiZW1haWxPcHRpb25zIiwic2hvd0hpZGRlbkZpZWxkcyIsImRhdGEiLCJzaG91bGRTYXZlRHJhZnQiLCJCb29sZWFuIiwidmVyc2lvbnMiLCJkcmFmdHMiLCJleGVjdXRlQWNjZXNzIiwiYWNjZXNzIiwiY3JlYXRlIiwiaGFzSWRGaWVsZCIsImZsYXR0ZW5GaWVsZHMiLCJmaWVsZHMiLCJmaW5kSW5kZXgiLCJmaWVsZCIsIm5hbWUiLCJfaWQiLCJpZCIsIm5ld0ZpbGVEYXRhIiwiZmlsZXMiLCJmaWxlc1RvVXBsb2FkIiwiZ2VuZXJhdGVGaWxlRGF0YSIsInRocm93T25NaXNzaW5nRmlsZSIsInVwbG9hZCIsImZpbGVzUmVxdWlyZWRPbkNyZWF0ZSIsImJlZm9yZVZhbGlkYXRlIiwiZG9jIiwiZ2xvYmFsIiwiYmVmb3JlQ2hhbmdlIiwicmVzdWx0V2l0aExvY2FsZXMiLCJkb2NXaXRoTG9jYWxlcyIsInNraXBWYWxpZGF0aW9uIiwiZGlzYWJsZUxvY2FsU3RvcmFnZSIsInVwbG9hZEZpbGVzIiwiYXV0aCIsImRpc2FibGVMb2NhbFN0cmF0ZWd5IiwiZW1haWwiLCJ0b0xvd2VyQ2FzZSIsInZlcmlmeSIsIl92ZXJpZmllZCIsIl92ZXJpZmljYXRpb25Ub2tlbiIsImNyeXB0byIsInJhbmRvbUJ5dGVzIiwidG9TdHJpbmciLCJyZWdpc3RlckxvY2FsU3RyYXRlZ3kiLCJwYXNzd29yZCIsImRiIiwic2x1ZyIsInZlcmlmaWNhdGlvblRva2VuIiwicmVzdWx0Iiwic2FuaXRpemVJbnRlcm5hbEZpZWxkcyIsInNhdmVWZXJzaW9uIiwic2VuZFZlcmlmaWNhdGlvbkVtYWlsIiwiZGlzYWJsZUVtYWlsIiwic2VuZEVtYWlsIiwidG9rZW4iLCJ1c2VyIiwiYWZ0ZXJSZWFkIiwiYWZ0ZXJDaGFuZ2UiLCJwcmV2aW91c0RvYyIsImJ1aWxkQWZ0ZXJPcGVyYXRpb24iLCJ1bmxpbmtUZW1wRmlsZXMiLCJjb21taXRUcmFuc2FjdGlvbiIsImVycm9yIiwia2lsbFRyYW5zYWN0aW9uIl0sIm1hcHBpbmdzIjoiOzs7OytCQStDYUE7OztlQUFBQTs7OytEQTdDTTtzRUFZTzs4RUFDUTswQkFDSTs2QkFDVjsy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
|
|
274
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2xsZWN0aW9ucy9vcGVyYXRpb25zL2NyZWF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IE1hcmtPcHRpb25hbCB9IGZyb20gJ3RzLWVzc2VudGlhbHMnXG5cbmltcG9ydCBjcnlwdG8gZnJvbSAnY3J5cHRvJ1xuXG5pbXBvcnQgdHlwZSB7IEdlbmVyYXRlZFR5cGVzIH0gZnJvbSAnLi4vLi4vJ1xuaW1wb3J0IHR5cGUgeyBQYXlsb2FkUmVxdWVzdCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBEb2N1bWVudCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUge1xuICBBZnRlckNoYW5nZUhvb2ssXG4gIEJlZm9yZU9wZXJhdGlvbkhvb2ssXG4gIEJlZm9yZVZhbGlkYXRlSG9vayxcbiAgQ29sbGVjdGlvbixcbn0gZnJvbSAnLi4vY29uZmlnL3R5cGVzJ1xuXG5pbXBvcnQgZXhlY3V0ZUFjY2VzcyBmcm9tICcuLi8uLi9hdXRoL2V4ZWN1dGVBY2Nlc3MnXG5pbXBvcnQgc2VuZFZlcmlmaWNhdGlvbkVtYWlsIGZyb20gJy4uLy4uL2F1dGgvc2VuZFZlcmlmaWNhdGlvbkVtYWlsJ1xuaW1wb3J0IHsgcmVnaXN0ZXJMb2NhbFN0cmF0ZWd5IH0gZnJvbSAnLi4vLi4vYXV0aC9zdHJhdGVnaWVzL2xvY2FsL3JlZ2lzdGVyJ1xuaW1wb3J0IHsgYWZ0ZXJDaGFuZ2UgfSBmcm9tICcuLi8uLi9maWVsZHMvaG9va3MvYWZ0ZXJDaGFuZ2UnXG5pbXBvcnQgeyBhZnRlclJlYWQgfSBmcm9tICcuLi8uLi9maWVsZHMvaG9va3MvYWZ0ZXJSZWFkJ1xuaW1wb3J0IHsgYmVmb3JlQ2hhbmdlIH0gZnJvbSAnLi4vLi4vZmllbGRzL2hvb2tzL2JlZm9yZUNoYW5nZSdcbmltcG9ydCB7IGJlZm9yZVZhbGlkYXRlIH0gZnJvbSAnLi4vLi4vZmllbGRzL2hvb2tzL2JlZm9yZVZhbGlkYXRlJ1xuaW1wb3J0IHsgZ2VuZXJhdGVGaWxlRGF0YSB9IGZyb20gJy4uLy4uL3VwbG9hZHMvZ2VuZXJhdGVGaWxlRGF0YSdcbmltcG9ydCB7IHVubGlua1RlbXBGaWxlcyB9IGZyb20gJy4uLy4uL3VwbG9hZHMvdW5saW5rVGVtcEZpbGVzJ1xuaW1wb3J0IHsgdXBsb2FkRmlsZXMgfSBmcm9tICcuLi8uLi91cGxvYWRzL3VwbG9hZEZpbGVzJ1xuaW1wb3J0IHsgY29tbWl0VHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvY29tbWl0VHJhbnNhY3Rpb24nXG5pbXBvcnQgZmxhdHRlbkZpZWxkcyBmcm9tICcuLi8uLi91dGlsaXRpZXMvZmxhdHRlblRvcExldmVsRmllbGRzJ1xuaW1wb3J0IHsgaW5pdFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2luaXRUcmFuc2FjdGlvbidcbmltcG9ydCB7IGtpbGxUcmFuc2FjdGlvbiB9IGZyb20gJy4uLy4uL3V0aWxpdGllcy9raWxsVHJhbnNhY3Rpb24nXG5pbXBvcnQgc2FuaXRpemVJbnRlcm5hbEZpZWxkcyBmcm9tICcuLi8uLi91dGlsaXRpZXMvc2FuaXRpemVJbnRlcm5hbEZpZWxkcydcbmltcG9ydCB7IHNhdmVWZXJzaW9uIH0gZnJvbSAnLi4vLi4vdmVyc2lvbnMvc2F2ZVZlcnNpb24nXG5pbXBvcnQgeyBidWlsZEFmdGVyT3BlcmF0aW9uIH0gZnJvbSAnLi91dGlscydcblxuZXhwb3J0IHR5cGUgQ3JlYXRlVXBkYXRlVHlwZSA9IHsgW2ZpZWxkOiBudW1iZXIgfCBzdHJpbmcgfCBzeW1ib2xdOiB1bmtub3duIH1cblxuZXhwb3J0IHR5cGUgQXJndW1lbnRzPFQgZXh0ZW5kcyBDcmVhdGVVcGRhdGVUeXBlPiA9IHtcbiAgYXV0b3NhdmU/OiBib29sZWFuXG4gIGNvbGxlY3Rpb246IENvbGxlY3Rpb25cbiAgZGF0YTogTWFya09wdGlvbmFsPFQsICdjcmVhdGVkQXQnIHwgJ2lkJyB8ICdzaXplcycgfCAndXBkYXRlZEF0Jz5cbiAgZGVwdGg/OiBudW1iZXJcbiAgZGlzYWJsZVZlcmlmaWNhdGlvbkVtYWlsPzogYm9vbGVhblxuICBkcmFmdD86IGJvb2xlYW5cbiAgb3ZlcnJpZGVBY2Nlc3M/OiBib29sZWFuXG4gIG92ZXJ3cml0ZUV4aXN0aW5nRmlsZXM/OiBib29sZWFuXG4gIHJlcTogUGF5bG9hZFJlcXVlc3RcbiAgc2hvd0hpZGRlbkZpZWxkcz86IGJvb2xlYW5cbn1cblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU9wZXJhdGlvbiA9IGFzeW5jIDxUU2x1ZyBleHRlbmRzIGtleW9mIEdlbmVyYXRlZFR5cGVzWydjb2xsZWN0aW9ucyddPihcbiAgaW5jb21pbmdBcmdzOiBBcmd1bWVudHM8R2VuZXJhdGVkVHlwZXNbJ2NvbGxlY3Rpb25zJ11bVFNsdWddPixcbik6IFByb21pc2U8R2VuZXJhdGVkVHlwZXNbJ2NvbGxlY3Rpb25zJ11bVFNsdWddPiA9PiB7XG4gIGxldCBhcmdzID0gaW5jb21pbmdBcmdzXG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzaG91bGRDb21taXQgPSBhd2FpdCBpbml0VHJhbnNhY3Rpb24oYXJncy5yZXEpXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gYmVmb3JlT3BlcmF0aW9uIC0gQ29sbGVjdGlvblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGF3YWl0IGFyZ3MuY29sbGVjdGlvbi5jb25maWcuaG9va3MuYmVmb3JlT3BlcmF0aW9uLnJlZHVjZShcbiAgICAgIGFzeW5jIChwcmlvckhvb2s6IEJlZm9yZU9wZXJhdGlvbkhvb2sgfCBQcm9taXNlPHZvaWQ+LCBob29rOiBCZWZvcmVPcGVyYXRpb25Ib29rKSA9PiB7XG4gICAgICAgIGF3YWl0IHByaW9ySG9va1xuXG4gICAgICAgIGFyZ3MgPVxuICAgICAgICAgIChhd2FpdCBob29rKHtcbiAgICAgICAgICAgIGFyZ3MsXG4gICAgICAgICAgICBjb2xsZWN0aW9uOiBhcmdzLmNvbGxlY3Rpb24uY29uZmlnLFxuICAgICAgICAgICAgY29udGV4dDogYXJncy5yZXEuY29udGV4dCxcbiAgICAgICAgICAgIG9wZXJhdGlvbjogJ2NyZWF0ZScsXG4gICAgICAgICAgICByZXE6IGFyZ3MucmVxLFxuICAgICAgICAgIH0pKSB8fCBhcmdzXG4gICAgICB9LFxuICAgICAgUHJvbWlzZS5yZXNvbHZlKCksXG4gICAgKVxuXG4gICAgY29uc3Qge1xuICAgICAgYXV0b3NhdmUgPSBmYWxzZSxcbiAgICAgIGNvbGxlY3Rpb246IHsgY29uZmlnOiBjb2xsZWN0aW9uQ29uZmlnIH0sXG4gICAgICBjb2xsZWN0aW9uLFxuICAgICAgZGVwdGgsXG4gICAgICBkaXNhYmxlVmVyaWZpY2F0aW9uRW1haWwsXG4gICAgICBkcmFmdCA9IGZhbHNlLFxuICAgICAgb3ZlcnJpZGVBY2Nlc3MsXG4gICAgICBvdmVyd3JpdGVFeGlzdGluZ0ZpbGVzID0gZmFsc2UsXG4gICAgICByZXE6IHtcbiAgICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgcGF5bG9hZDogeyBjb25maWcsIGVtYWlsT3B0aW9ucyB9LFxuICAgICAgfSxcbiAgICAgIHJlcSxcbiAgICAgIHNob3dIaWRkZW5GaWVsZHMsXG4gICAgfSA9IGFyZ3NcblxuICAgIGxldCB7IGRhdGEgfSA9IGFyZ3NcblxuICAgIGNvbnN0IHNob3VsZFNhdmVEcmFmdCA9IEJvb2xlYW4oZHJhZnQgJiYgY29sbGVjdGlvbkNvbmZpZy52ZXJzaW9ucy5kcmFmdHMpXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQWNjZXNzXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgaWYgKCFvdmVycmlkZUFjY2Vzcykge1xuICAgICAgYXdhaXQgZXhlY3V0ZUFjY2Vzcyh7IGRhdGEsIHJlcSB9LCBjb2xsZWN0aW9uQ29uZmlnLmFjY2Vzcy5jcmVhdGUpXG4gICAgfVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEN1c3RvbSBpZFxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBAdG9kbzogUmVmYWN0b3IgY29kZSB0byBzdG9yZSAnY3VzdG9tSWQnIG9uIHRoZSBjb2xsZWN0aW9uIGNvbmZpZ3VyYXRpb24gaXRzZWxmIHNvIHdlIGRvbid0IG5lZWQgdG8gcmVwZWF0IGZsYXR0ZW5GaWVsZHNcbiAgICBjb25zdCBoYXNJZEZpZWxkID1cbiAgICAgIGZsYXR0ZW5GaWVsZHMoY29sbGVjdGlvbkNvbmZpZy5maWVsZHMpLmZpbmRJbmRleCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT09ICdpZCcpID4gLTFcblxuICAgIGlmIChoYXNJZEZpZWxkKSB7XG4gICAgICBkYXRhID0ge1xuICAgICAgICBfaWQ6IGRhdGEuaWQsXG4gICAgICAgIC4uLmRhdGEsXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIEdlbmVyYXRlIGRhdGEgZm9yIGFsbCBmaWxlcyBhbmQgc2l6ZXNcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBjb25zdCB7IGRhdGE6IG5ld0ZpbGVEYXRhLCBmaWxlczogZmlsZXNUb1VwbG9hZCB9ID0gYXdhaXQgZ2VuZXJhdGVGaWxlRGF0YSh7XG4gICAgICBjb2xsZWN0aW9uLFxuICAgICAgY29uZmlnLFxuICAgICAgZGF0YSxcbiAgICAgIG92ZXJ3cml0ZUV4aXN0aW5nRmlsZXMsXG4gICAgICByZXEsXG4gICAgICB0aHJvd09uTWlzc2luZ0ZpbGU6XG4gICAgICAgICFzaG91bGRTYXZlRHJhZnQgJiYgY29sbGVjdGlvbi5jb25maWcudXBsb2FkLmZpbGVzUmVxdWlyZWRPbkNyZWF0ZSAhPT0gZmFsc2UsXG4gICAgfSlcblxuICAgIGRhdGEgPSBuZXdGaWxlRGF0YVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIGJlZm9yZVZhbGlkYXRlIC0gRmllbGRzXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgZGF0YSA9IGF3YWl0IGJlZm9yZVZhbGlkYXRlKHtcbiAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgIGRhdGEsXG4gICAgICBkb2M6IHt9LFxuICAgICAgZ2xvYmFsOiBudWxsLFxuICAgICAgb3BlcmF0aW9uOiAnY3JlYXRlJyxcbiAgICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgICAgcmVxLFxuICAgIH0pXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gYmVmb3JlVmFsaWRhdGUgLSBDb2xsZWN0aW9uc1xuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGF3YWl0IGNvbGxlY3Rpb25Db25maWcuaG9va3MuYmVmb3JlVmFsaWRhdGUucmVkdWNlKFxuICAgICAgYXN5bmMgKHByaW9ySG9vazogQmVmb3JlVmFsaWRhdGVIb29rIHwgUHJvbWlzZTx2b2lkPiwgaG9vazogQmVmb3JlVmFsaWRhdGVIb29rKSA9PiB7XG4gICAgICAgIGF3YWl0IHByaW9ySG9va1xuXG4gICAgICAgIGRhdGEgPVxuICAgICAgICAgIChhd2FpdCBob29rKHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICAgICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBvcGVyYXRpb246ICdjcmVhdGUnLFxuICAgICAgICAgICAgcmVxLFxuICAgICAgICAgIH0pKSB8fCBkYXRhXG4gICAgICB9LFxuICAgICAgUHJvbWlzZS5yZXNvbHZlKCksXG4gICAgKVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFdyaXRlIGZpbGVzIHRvIGxvY2FsIHN0b3JhZ2VcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAvLyBpZiAoIWNvbGxlY3Rpb25Db25maWcudXBsb2FkLmRpc2FibGVMb2NhbFN0b3JhZ2UpIHtcbiAgICAvLyAgIGF3YWl0IHVwbG9hZEZpbGVzKHBheWxvYWQsIGZpbGVzVG9VcGxvYWQsIHJlcS50KVxuICAgIC8vIH1cblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBiZWZvcmVDaGFuZ2UgLSBDb2xsZWN0aW9uXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgYXdhaXQgY29sbGVjdGlvbkNvbmZpZy5ob29rcy5iZWZvcmVDaGFuZ2UucmVkdWNlKGFzeW5jIChwcmlvckhvb2ssIGhvb2spID0+IHtcbiAgICAgIGF3YWl0IHByaW9ySG9va1xuXG4gICAgICBkYXRhID1cbiAgICAgICAgKGF3YWl0IGhvb2soe1xuICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICAgICAgY29udGV4dDogcmVxLmNvbnRleHQsXG4gICAgICAgICAgZGF0YSxcbiAgICAgICAgICBvcGVyYXRpb246ICdjcmVhdGUnLFxuICAgICAgICAgIHJlcSxcbiAgICAgICAgfSkpIHx8IGRhdGFcbiAgICB9LCBQcm9taXNlLnJlc29sdmUoKSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBiZWZvcmVDaGFuZ2UgLSBGaWVsZHNcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBjb25zdCByZXN1bHRXaXRoTG9jYWxlcyA9IGF3YWl0IGJlZm9yZUNoYW5nZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oe1xuICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgIGNvbnRleHQ6IHJlcS5jb250ZXh0LFxuICAgICAgZGF0YSxcbiAgICAgIGRvYzoge30sXG4gICAgICBkb2NXaXRoTG9jYWxlczoge30sXG4gICAgICBnbG9iYWw6IG51bGwsXG4gICAgICBvcGVyYXRpb246ICdjcmVhdGUnLFxuICAgICAgcmVxLFxuICAgICAgc2tpcFZhbGlkYXRpb246IHNob3VsZFNhdmVEcmFmdCxcbiAgICB9KVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFdyaXRlIGZpbGVzIHRvIGxvY2FsIHN0b3JhZ2VcbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBpZiAoIWNvbGxlY3Rpb25Db25maWcudXBsb2FkLmRpc2FibGVMb2NhbFN0b3JhZ2UpIHtcbiAgICAgIGF3YWl0IHVwbG9hZEZpbGVzKHBheWxvYWQsIGZpbGVzVG9VcGxvYWQsIHJlcSlcbiAgICB9XG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ3JlYXRlXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgbGV0IGRvY1xuXG4gICAgaWYgKGNvbGxlY3Rpb25Db25maWcuYXV0aCAmJiAhY29sbGVjdGlvbkNvbmZpZy5hdXRoLmRpc2FibGVMb2NhbFN0cmF0ZWd5KSB7XG4gICAgICBpZiAoZGF0YS5lbWFpbCkge1xuICAgICAgICByZXN1bHRXaXRoTG9jYWxlcy5lbWFpbCA9IChkYXRhLmVtYWlsIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKVxuICAgICAgfVxuXG4gICAgICBpZiAoY29sbGVjdGlvbkNvbmZpZy5hdXRoLnZlcmlmeSkge1xuICAgICAgICByZXN1bHRXaXRoTG9jYWxlcy5fdmVyaWZpZWQgPSBCb29sZWFuKHJlc3VsdFdpdGhMb2NhbGVzLl92ZXJpZmllZCkgfHwgZmFsc2VcbiAgICAgICAgcmVzdWx0V2l0aExvY2FsZXMuX3ZlcmlmaWNhdGlvblRva2VuID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDIwKS50b1N0cmluZygnaGV4JylcbiAgICAgIH1cblxuICAgICAgZG9jID0gYXdhaXQgcmVnaXN0ZXJMb2NhbFN0cmF0ZWd5KHtcbiAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgZG9jOiByZXN1bHRXaXRoTG9jYWxlcyxcbiAgICAgICAgcGFzc3dvcmQ6IGRhdGEucGFzc3dvcmQgYXMgc3RyaW5nLFxuICAgICAgICBwYXlsb2FkOiByZXEucGF5bG9hZCxcbiAgICAgICAgcmVxLFxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgZG9jID0gYXdhaXQgcGF5bG9hZC5kYi5jcmVhdGUoe1xuICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29uZmlnLnNsdWcsXG4gICAgICAgIGRhdGE6IHJlc3VsdFdpdGhMb2NhbGVzLFxuICAgICAgICByZXEsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IHZlcmlmaWNhdGlvblRva2VuID0gZG9jLl92ZXJpZmljYXRpb25Ub2tlblxuICAgIGxldCByZXN1bHQ6IERvY3VtZW50ID0gc2FuaXRpemVJbnRlcm5hbEZpZWxkcyhkb2MpXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQ3JlYXRlIHZlcnNpb25cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBpZiAoY29sbGVjdGlvbkNvbmZpZy52ZXJzaW9ucykge1xuICAgICAgYXdhaXQgc2F2ZVZlcnNpb24oe1xuICAgICAgICBpZDogcmVzdWx0LmlkLFxuICAgICAgICBhdXRvc2F2ZSxcbiAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgZG9jV2l0aExvY2FsZXM6IHJlc3VsdCxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgcmVxLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gU2VuZCB2ZXJpZmljYXRpb24gZW1haWwgaWYgYXBwbGljYWJsZVxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGlmIChjb2xsZWN0aW9uQ29uZmlnLmF1dGggJiYgY29sbGVjdGlvbkNvbmZpZy5hdXRoLnZlcmlmeSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgICAgc2VuZFZlcmlmaWNhdGlvbkVtYWlsKHtcbiAgICAgICAgY29sbGVjdGlvbjogeyBjb25maWc6IGNvbGxlY3Rpb25Db25maWcgfSxcbiAgICAgICAgY29uZmlnOiBwYXlsb2FkLmNvbmZpZyxcbiAgICAgICAgZGlzYWJsZUVtYWlsOiBkaXNhYmxlVmVyaWZpY2F0aW9uRW1haWwsXG4gICAgICAgIGVtYWlsT3B0aW9ucyxcbiAgICAgICAgcmVxLFxuICAgICAgICBzZW5kRW1haWw6IHBheWxvYWQuc2VuZEVtYWlsLFxuICAgICAgICB0b2tlbjogdmVyaWZpY2F0aW9uVG9rZW4sXG4gICAgICAgIHVzZXI6IHJlc3VsdCxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIGFmdGVyUmVhZCAtIEZpZWxkc1xuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIHJlc3VsdCA9IGF3YWl0IGFmdGVyUmVhZCh7XG4gICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgY29udGV4dDogcmVxLmNvbnRleHQsXG4gICAgICBkZXB0aCxcbiAgICAgIGRvYzogcmVzdWx0LFxuICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICBnbG9iYWw6IG51bGwsXG4gICAgICBsb2NhbGUsXG4gICAgICBvdmVycmlkZUFjY2VzcyxcbiAgICAgIHJlcSxcbiAgICAgIHNob3dIaWRkZW5GaWVsZHMsXG4gICAgfSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhZnRlclJlYWQgLSBDb2xsZWN0aW9uXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgYXdhaXQgY29sbGVjdGlvbkNvbmZpZy5ob29rcy5hZnRlclJlYWQucmVkdWNlKGFzeW5jIChwcmlvckhvb2ssIGhvb2spID0+IHtcbiAgICAgIGF3YWl0IHByaW9ySG9va1xuXG4gICAgICByZXN1bHQgPVxuICAgICAgICAoYXdhaXQgaG9vayh7XG4gICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgICAgICBkb2M6IHJlc3VsdCxcbiAgICAgICAgICByZXEsXG4gICAgICAgIH0pKSB8fCByZXN1bHRcbiAgICB9LCBQcm9taXNlLnJlc29sdmUoKSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhZnRlckNoYW5nZSAtIEZpZWxkc1xuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIHJlc3VsdCA9IGF3YWl0IGFmdGVyQ2hhbmdlKHtcbiAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgIGRhdGEsXG4gICAgICBkb2M6IHJlc3VsdCxcbiAgICAgIGdsb2JhbDogbnVsbCxcbiAgICAgIG9wZXJhdGlvbjogJ2NyZWF0ZScsXG4gICAgICBwcmV2aW91c0RvYzoge30sXG4gICAgICByZXEsXG4gICAgfSlcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhZnRlckNoYW5nZSAtIENvbGxlY3Rpb25cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBhd2FpdCBjb2xsZWN0aW9uQ29uZmlnLmhvb2tzLmFmdGVyQ2hhbmdlLnJlZHVjZShcbiAgICAgIGFzeW5jIChwcmlvckhvb2s6IEFmdGVyQ2hhbmdlSG9vayB8IFByb21pc2U8dm9pZD4sIGhvb2s6IEFmdGVyQ2hhbmdlSG9vaykgPT4ge1xuICAgICAgICBhd2FpdCBwcmlvckhvb2tcblxuICAgICAgICByZXN1bHQgPVxuICAgICAgICAgIChhd2FpdCBob29rKHtcbiAgICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICAgICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgICAgICAgIGRvYzogcmVzdWx0LFxuICAgICAgICAgICAgb3BlcmF0aW9uOiAnY3JlYXRlJyxcbiAgICAgICAgICAgIHByZXZpb3VzRG9jOiB7fSxcbiAgICAgICAgICAgIHJlcTogYXJncy5yZXEsXG4gICAgICAgICAgfSkpIHx8IHJlc3VsdFxuICAgICAgfSxcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLFxuICAgIClcblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhZnRlck9wZXJhdGlvbiAtIENvbGxlY3Rpb25cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICByZXN1bHQgPSBhd2FpdCBidWlsZEFmdGVyT3BlcmF0aW9uPEdlbmVyYXRlZFR5cGVzWydjb2xsZWN0aW9ucyddW1RTbHVnXT4oe1xuICAgICAgYXJncyxcbiAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICBvcGVyYXRpb246ICdjcmVhdGUnLFxuICAgICAgcmVzdWx0LFxuICAgIH0pXG5cbiAgICBhd2FpdCB1bmxpbmtUZW1wRmlsZXMoeyBjb2xsZWN0aW9uQ29uZmlnLCBjb25maWcsIHJlcSB9KVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIFJldHVybiByZXN1bHRzXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgaWYgKHNob3VsZENvbW1pdCkgYXdhaXQgY29tbWl0VHJhbnNhY3Rpb24ocmVxKVxuXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGF3YWl0IGtpbGxUcmFuc2FjdGlvbihhcmdzLnJlcSlcbiAgICB0aHJvdyBlcnJvclxuICB9XG59XG4iXSwibmFtZXMiOlsiY3J5cHRvIiwiZXhlY3V0ZUFjY2VzcyIsInNlbmRWZXJpZmljYXRpb25FbWFpbCIsInJlZ2lzdGVyTG9jYWxTdHJhdGVneSIsImFmdGVyQ2hhbmdlIiwiYWZ0ZXJSZWFkIiwiYmVmb3JlQ2hhbmdlIiwiYmVmb3JlVmFsaWRhdGUiLCJnZW5lcmF0ZUZpbGVEYXRhIiwidW5saW5rVGVtcEZpbGVzIiwidXBsb2FkRmlsZXMiLCJjb21taXRUcmFuc2FjdGlvbiIsImZsYXR0ZW5GaWVsZHMiLCJpbml0VHJhbnNhY3Rpb24iLCJraWxsVHJhbnNhY3Rpb24iLCJzYW5pdGl6ZUludGVybmFsRmllbGRzIiwic2F2ZVZlcnNpb24iLCJidWlsZEFmdGVyT3BlcmF0aW9uIiwiY3JlYXRlT3BlcmF0aW9uIiwiaW5jb21pbmdBcmdzIiwiYXJncyIsInNob3VsZENvbW1pdCIsInJlcSIsImNvbGxlY3Rpb24iLCJjb25maWciLCJob29rcyIsImJlZm9yZU9wZXJhdGlvbiIsInJlZHVjZSIsInByaW9ySG9vayIsImhvb2siLCJjb250ZXh0Iiwib3BlcmF0aW9uIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhdXRvc2F2ZSIsImNvbGxlY3Rpb25Db25maWciLCJkZXB0aCIsImRpc2FibGVWZXJpZmljYXRpb25FbWFpbCIsImRyYWZ0Iiwib3ZlcnJpZGVBY2Nlc3MiLCJvdmVyd3JpdGVFeGlzdGluZ0ZpbGVzIiwiZmFsbGJhY2tMb2NhbGUiLCJsb2NhbGUiLCJwYXlsb2FkIiwiZW1haWxPcHRpb25zIiwic2hvd0hpZGRlbkZpZWxkcyIsImRhdGEiLCJzaG91bGRTYXZlRHJhZnQiLCJCb29sZWFuIiwidmVyc2lvbnMiLCJkcmFmdHMiLCJhY2Nlc3MiLCJjcmVhdGUiLCJoYXNJZEZpZWxkIiwiZmllbGRzIiwiZmluZEluZGV4IiwiZmllbGQiLCJuYW1lIiwiX2lkIiwiaWQiLCJuZXdGaWxlRGF0YSIsImZpbGVzIiwiZmlsZXNUb1VwbG9hZCIsInRocm93T25NaXNzaW5nRmlsZSIsInVwbG9hZCIsImZpbGVzUmVxdWlyZWRPbkNyZWF0ZSIsImRvYyIsImdsb2JhbCIsInJlc3VsdFdpdGhMb2NhbGVzIiwiZG9jV2l0aExvY2FsZXMiLCJza2lwVmFsaWRhdGlvbiIsImRpc2FibGVMb2NhbFN0b3JhZ2UiLCJhdXRoIiwiZGlzYWJsZUxvY2FsU3RyYXRlZ3kiLCJlbWFpbCIsInRvTG93ZXJDYXNlIiwidmVyaWZ5IiwiX3ZlcmlmaWVkIiwiX3ZlcmlmaWNhdGlvblRva2VuIiwicmFuZG9tQnl0ZXMiLCJ0b1N0cmluZyIsInBhc3N3b3JkIiwiZGIiLCJzbHVnIiwidmVyaWZpY2F0aW9uVG9rZW4iLCJyZXN1bHQiLCJkaXNhYmxlRW1haWwiLCJzZW5kRW1haWwiLCJ0b2tlbiIsInVzZXIiLCJwcmV2aW91c0RvYyIsImVycm9yIl0sIm1hcHBpbmdzIjoiQUFFQSxPQUFPQSxZQUFZLFNBQVE7QUFZM0IsT0FBT0MsbUJBQW1CLDJCQUEwQjtBQUNwRCxP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
|
|
@@ -1,35 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
const _errors = require("../../errors");
|
|
16
|
-
const _afterRead = require("../../fields/hooks/afterRead");
|
|
17
|
-
const _deleteUserPreferences = require("../../preferences/deleteUserPreferences");
|
|
18
|
-
const _deleteAssociatedFiles = require("../../uploads/deleteAssociatedFiles");
|
|
19
|
-
const _commitTransaction = require("../../utilities/commitTransaction");
|
|
20
|
-
const _initTransaction = require("../../utilities/initTransaction");
|
|
21
|
-
const _killTransaction = require("../../utilities/killTransaction");
|
|
22
|
-
const _deleteCollectionVersions = require("../../versions/deleteCollectionVersions");
|
|
23
|
-
const _utils = require("./utils");
|
|
24
|
-
function _interop_require_default(obj) {
|
|
25
|
-
return obj && obj.__esModule ? obj : {
|
|
26
|
-
default: obj
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
const deleteOperation = async (incomingArgs)=>{
|
|
1
|
+
import httpStatus from 'http-status';
|
|
2
|
+
import executeAccess from '../../auth/executeAccess';
|
|
3
|
+
import { combineQueries } from '../../database/combineQueries';
|
|
4
|
+
import { validateQueryPaths } from '../../database/queryValidation/validateQueryPaths';
|
|
5
|
+
import { APIError } from '../../errors';
|
|
6
|
+
import { afterRead } from '../../fields/hooks/afterRead';
|
|
7
|
+
import { deleteUserPreferences } from '../../preferences/deleteUserPreferences';
|
|
8
|
+
import { deleteAssociatedFiles } from '../../uploads/deleteAssociatedFiles';
|
|
9
|
+
import { commitTransaction } from '../../utilities/commitTransaction';
|
|
10
|
+
import { initTransaction } from '../../utilities/initTransaction';
|
|
11
|
+
import { killTransaction } from '../../utilities/killTransaction';
|
|
12
|
+
import { deleteCollectionVersions } from '../../versions/deleteCollectionVersions';
|
|
13
|
+
import { buildAfterOperation } from './utils';
|
|
14
|
+
export const deleteOperation = async (incomingArgs)=>{
|
|
30
15
|
let args = incomingArgs;
|
|
31
16
|
try {
|
|
32
|
-
const shouldCommit = await
|
|
17
|
+
const shouldCommit = await initTransaction(args.req);
|
|
33
18
|
// /////////////////////////////////////
|
|
34
19
|
// beforeOperation - Collection
|
|
35
20
|
// /////////////////////////////////////
|
|
@@ -45,24 +30,24 @@ const deleteOperation = async (incomingArgs)=>{
|
|
|
45
30
|
}, Promise.resolve());
|
|
46
31
|
const { collection: { config: collectionConfig }, depth, overrideAccess, req: { fallbackLocale, locale, payload: { config }, payload }, req, showHiddenFields, where } = args;
|
|
47
32
|
if (!where) {
|
|
48
|
-
throw new
|
|
33
|
+
throw new APIError("Missing 'where' query of documents to delete.", httpStatus.BAD_REQUEST);
|
|
49
34
|
}
|
|
50
35
|
// /////////////////////////////////////
|
|
51
36
|
// Access
|
|
52
37
|
// /////////////////////////////////////
|
|
53
38
|
let accessResult;
|
|
54
39
|
if (!overrideAccess) {
|
|
55
|
-
accessResult = await (
|
|
40
|
+
accessResult = await executeAccess({
|
|
56
41
|
req
|
|
57
42
|
}, collectionConfig.access.delete);
|
|
58
43
|
}
|
|
59
|
-
await
|
|
44
|
+
await validateQueryPaths({
|
|
60
45
|
collectionConfig,
|
|
61
46
|
overrideAccess,
|
|
62
47
|
req,
|
|
63
48
|
where
|
|
64
49
|
});
|
|
65
|
-
const fullWhere =
|
|
50
|
+
const fullWhere = combineQueries(where, accessResult);
|
|
66
51
|
// /////////////////////////////////////
|
|
67
52
|
// Retrieve documents
|
|
68
53
|
// /////////////////////////////////////
|
|
@@ -89,7 +74,7 @@ const deleteOperation = async (incomingArgs)=>{
|
|
|
89
74
|
req
|
|
90
75
|
});
|
|
91
76
|
}, Promise.resolve());
|
|
92
|
-
await
|
|
77
|
+
await deleteAssociatedFiles({
|
|
93
78
|
collectionConfig,
|
|
94
79
|
config,
|
|
95
80
|
doc,
|
|
@@ -100,7 +85,7 @@ const deleteOperation = async (incomingArgs)=>{
|
|
|
100
85
|
// Delete versions
|
|
101
86
|
// /////////////////////////////////////
|
|
102
87
|
if (collectionConfig.versions) {
|
|
103
|
-
await
|
|
88
|
+
await deleteCollectionVersions({
|
|
104
89
|
id,
|
|
105
90
|
slug: collectionConfig.slug,
|
|
106
91
|
payload,
|
|
@@ -122,7 +107,7 @@ const deleteOperation = async (incomingArgs)=>{
|
|
|
122
107
|
// /////////////////////////////////////
|
|
123
108
|
// afterRead - Fields
|
|
124
109
|
// /////////////////////////////////////
|
|
125
|
-
result = await
|
|
110
|
+
result = await afterRead({
|
|
126
111
|
collection: collectionConfig,
|
|
127
112
|
context: req.context,
|
|
128
113
|
depth,
|
|
@@ -175,7 +160,7 @@ const deleteOperation = async (incomingArgs)=>{
|
|
|
175
160
|
// /////////////////////////////////////
|
|
176
161
|
// Delete Preferences
|
|
177
162
|
// /////////////////////////////////////
|
|
178
|
-
await
|
|
163
|
+
await deleteUserPreferences({
|
|
179
164
|
collectionConfig,
|
|
180
165
|
ids: docs.map(({ id })=>id),
|
|
181
166
|
payload,
|
|
@@ -188,18 +173,18 @@ const deleteOperation = async (incomingArgs)=>{
|
|
|
188
173
|
// /////////////////////////////////////
|
|
189
174
|
// afterOperation - Collection
|
|
190
175
|
// /////////////////////////////////////
|
|
191
|
-
result = await
|
|
176
|
+
result = await buildAfterOperation({
|
|
192
177
|
args,
|
|
193
178
|
collection: collectionConfig,
|
|
194
179
|
operation: 'delete',
|
|
195
180
|
result
|
|
196
181
|
});
|
|
197
|
-
if (shouldCommit) await
|
|
182
|
+
if (shouldCommit) await commitTransaction(req);
|
|
198
183
|
return result;
|
|
199
184
|
} catch (error) {
|
|
200
|
-
await
|
|
185
|
+
await killTransaction(args.req);
|
|
201
186
|
throw error;
|
|
202
187
|
}
|
|
203
188
|
};
|
|
204
189
|
|
|
205
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2xsZWN0aW9ucy9vcGVyYXRpb25zL2RlbGV0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaHR0cFN0YXR1cyBmcm9tICdodHRwLXN0YXR1cydcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmF0ZWRUeXBlcyB9IGZyb20gJy4uLy4uLydcbmltcG9ydCB0eXBlIHsgQWNjZXNzUmVzdWx0IH0gZnJvbSAnLi4vLi4vY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBQYXlsb2FkUmVxdWVzdCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBXaGVyZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBCZWZvcmVPcGVyYXRpb25Ib29rLCBDb2xsZWN0aW9uIH0gZnJvbSAnLi4vY29uZmlnL3R5cGVzJ1xuXG5pbXBvcnQgZXhlY3V0ZUFjY2VzcyBmcm9tICcuLi8uLi9hdXRoL2V4ZWN1dGVBY2Nlc3MnXG5pbXBvcnQgeyBjb21iaW5lUXVlcmllcyB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL2NvbWJpbmVRdWVyaWVzJ1xuaW1wb3J0IHsgdmFsaWRhdGVRdWVyeVBhdGhzIH0gZnJvbSAnLi4vLi4vZGF0YWJhc2UvcXVlcnlWYWxpZGF0aW9uL3ZhbGlkYXRlUXVlcnlQYXRocydcbmltcG9ydCB7IEFQSUVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzJ1xuaW1wb3J0IHsgYWZ0ZXJSZWFkIH0gZnJvbSAnLi4vLi4vZmllbGRzL2hvb2tzL2FmdGVyUmVhZCdcbmltcG9ydCB7IGRlbGV0ZVVzZXJQcmVmZXJlbmNlcyB9IGZyb20gJy4uLy4uL3ByZWZlcmVuY2VzL2RlbGV0ZVVzZXJQcmVmZXJlbmNlcydcbmltcG9ydCB7IGRlbGV0ZUFzc29jaWF0ZWRGaWxlcyB9IGZyb20gJy4uLy4uL3VwbG9hZHMvZGVsZXRlQXNzb2NpYXRlZEZpbGVzJ1xuaW1wb3J0IHsgY29tbWl0VHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvY29tbWl0VHJhbnNhY3Rpb24nXG5pbXBvcnQgeyBpbml0VHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvaW5pdFRyYW5zYWN0aW9uJ1xuaW1wb3J0IHsga2lsbFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2tpbGxUcmFuc2FjdGlvbidcbmltcG9ydCB7IGRlbGV0ZUNvbGxlY3Rpb25WZXJzaW9ucyB9IGZyb20gJy4uLy4uL3ZlcnNpb25zL2RlbGV0ZUNvbGxlY3Rpb25WZXJzaW9ucydcbmltcG9ydCB7IGJ1aWxkQWZ0ZXJPcGVyYXRpb24gfSBmcm9tICcuL3V0aWxzJ1xuXG5leHBvcnQgdHlwZSBBcmd1bWVudHMgPSB7XG4gIGNvbGxlY3Rpb246IENvbGxlY3Rpb25cbiAgZGVwdGg/OiBudW1iZXJcbiAgb3ZlcnJpZGVBY2Nlc3M/OiBib29sZWFuXG4gIHJlcTogUGF5bG9hZFJlcXVlc3RcbiAgc2hvd0hpZGRlbkZpZWxkcz86IGJvb2xlYW5cbiAgd2hlcmU6IFdoZXJlXG59XG5cbmV4cG9ydCBjb25zdCBkZWxldGVPcGVyYXRpb24gPSBhc3luYyA8VFNsdWcgZXh0ZW5kcyBrZXlvZiBHZW5lcmF0ZWRUeXBlc1snY29sbGVjdGlvbnMnXT4oXG4gIGluY29taW5nQXJnczogQXJndW1lbnRzLFxuKTogUHJvbWlzZTx7XG4gIGRvY3M6IEdlbmVyYXRlZFR5cGVzWydjb2xsZWN0aW9ucyddW1RTbHVnXVtdXG4gIGVycm9yczoge1xuICAgIGlkOiBHZW5lcmF0ZWRUeXBlc1snY29sbGVjdGlvbnMnXVtUU2x1Z11bJ2lkJ11cbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgfVtdXG59PiA9PiB7XG4gIGxldCBhcmdzID0gaW5jb21pbmdBcmdzXG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzaG91bGRDb21taXQgPSBhd2FpdCBpbml0VHJhbnNhY3Rpb24oYXJncy5yZXEpXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIGJlZm9yZU9wZXJhdGlvbiAtIENvbGxlY3Rpb25cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBhd2FpdCBhcmdzLmNvbGxlY3Rpb24uY29uZmlnLmhvb2tzLmJlZm9yZU9wZXJhdGlvbi5yZWR1Y2UoXG4gICAgICBhc3luYyAocHJpb3JIb29rOiBCZWZvcmVPcGVyYXRpb25Ib29rIHwgUHJvbWlzZTx2b2lkPiwgaG9vazogQmVmb3JlT3BlcmF0aW9uSG9vaykgPT4ge1xuICAgICAgICBhd2FpdCBwcmlvckhvb2tcblxuICAgICAgICBhcmdzID1cbiAgICAgICAgICAoYXdhaXQgaG9vayh7XG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgY29sbGVjdGlvbjogYXJncy5jb2xsZWN0aW9uLmNvbmZpZyxcbiAgICAgICAgICAgIGNvbnRleHQ6IGFyZ3MucmVxLmNvbnRleHQsXG4gICAgICAgICAgICBvcGVyYXRpb246ICdkZWxldGUnLFxuICAgICAgICAgICAgcmVxOiBhcmdzLnJlcSxcbiAgICAgICAgICB9KSkgfHwgYXJnc1xuICAgICAgfSxcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLFxuICAgIClcblxuICAgIGNvbnN0IHtcbiAgICAgIGNvbGxlY3Rpb246IHsgY29uZmlnOiBjb2xsZWN0aW9uQ29uZmlnIH0sXG4gICAgICBkZXB0aCxcbiAgICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgICAgcmVxOiB7XG4gICAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgICBsb2NhbGUsXG4gICAgICAgIHBheWxvYWQ6IHsgY29uZmlnIH0sXG4gICAgICAgIHBheWxvYWQsXG4gICAgICB9LFxuICAgICAgcmVxLFxuICAgICAgc2hvd0hpZGRlbkZpZWxkcyxcbiAgICAgIHdoZXJlLFxuICAgIH0gPSBhcmdzXG5cbiAgICBpZiAoIXdoZXJlKSB7XG4gICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoXCJNaXNzaW5nICd3aGVyZScgcXVlcnkgb2YgZG9jdW1lbnRzIHRvIGRlbGV0ZS5cIiwgaHR0cFN0YXR1cy5CQURfUkVRVUVTVClcbiAgICB9XG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQWNjZXNzXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgbGV0IGFjY2Vzc1Jlc3VsdDogQWNjZXNzUmVzdWx0XG5cbiAgICBpZiAoIW92ZXJyaWRlQWNjZXNzKSB7XG4gICAgICBhY2Nlc3NSZXN1bHQgPSBhd2FpdCBleGVjdXRlQWNjZXNzKHsgcmVxIH0sIGNvbGxlY3Rpb25Db25maWcuYWNjZXNzLmRlbGV0ZSlcbiAgICB9XG5cbiAgICBhd2FpdCB2YWxpZGF0ZVF1ZXJ5UGF0aHMoe1xuICAgICAgY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgICAgcmVxLFxuICAgICAgd2hlcmUsXG4gICAgfSlcblxuICAgIGNvbnN0IGZ1bGxXaGVyZSA9IGNvbWJpbmVRdWVyaWVzKHdoZXJlLCBhY2Nlc3NSZXN1bHQpXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUmV0cmlldmUgZG9jdW1lbnRzXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgY29uc3QgeyBkb2NzIH0gPSBhd2FpdCBwYXlsb2FkLmRiLmZpbmQ8R2VuZXJhdGVkVHlwZXNbJ2NvbGxlY3Rpb25zJ11bVFNsdWddPih7XG4gICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29uZmlnLnNsdWcsXG4gICAgICBsb2NhbGUsXG4gICAgICByZXEsXG4gICAgICB3aGVyZTogZnVsbFdoZXJlLFxuICAgIH0pXG5cbiAgICBjb25zdCBlcnJvcnMgPSBbXVxuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbiAgICBjb25zdCBwcm9taXNlcyA9IGRvY3MubWFwKGFzeW5jIChkb2MpID0+IHtcbiAgICAgIGxldCByZXN1bHRcblxuICAgICAgY29uc3QgeyBpZCB9ID0gZG9jXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgLy8gYmVmb3JlRGVsZXRlIC0gQ29sbGVjdGlvblxuICAgICAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgYXdhaXQgY29sbGVjdGlvbkNvbmZpZy5ob29rcy5iZWZvcmVEZWxldGUucmVkdWNlKGFzeW5jIChwcmlvckhvb2ssIGhvb2spID0+IHtcbiAgICAgICAgICBhd2FpdCBwcmlvckhvb2tcblxuICAgICAgICAgIHJldHVybiBob29rKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgICAgIGNvbnRleHQ6IHJlcS5jb250ZXh0LFxuICAgICAgICAgICAgcmVxLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKVxuXG4gICAgICAgIGF3YWl0IGRlbGV0ZUFzc29jaWF0ZWRGaWxlcyh7XG4gICAgICAgICAgY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZG9jLFxuICAgICAgICAgIG92ZXJyaWRlRGVsZXRlOiB0cnVlLFxuICAgICAgICAgIHJlcSxcbiAgICAgICAgfSlcblxuICAgICAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIERlbGV0ZSB2ZXJzaW9uc1xuICAgICAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgaWYgKGNvbGxlY3Rpb25Db25maWcudmVyc2lvbnMpIHtcbiAgICAgICAgICBhd2FpdCBkZWxldGVDb2xsZWN0aW9uVmVyc2lvbnMoe1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBzbHVnOiBjb2xsZWN0aW9uQ29uZmlnLnNsdWcsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgICAgcmVxLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIERlbGV0ZSBkb2N1bWVudFxuICAgICAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgYXdhaXQgcGF5bG9hZC5kYi5kZWxldGVPbmUoe1xuICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcuc2x1ZyxcbiAgICAgICAgICByZXEsXG4gICAgICAgICAgd2hlcmU6IHtcbiAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgIGVxdWFsczogaWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICAvLyBhZnRlclJlYWQgLSBGaWVsZHNcbiAgICAgICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IGFmdGVyUmVhZCh7XG4gICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICBkb2M6IHJlc3VsdCB8fCBkb2MsXG4gICAgICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICAgICAgZ2xvYmFsOiBudWxsLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBvdmVycmlkZUFjY2VzcyxcbiAgICAgICAgICByZXEsXG4gICAgICAgICAgc2hvd0hpZGRlbkZpZWxkcyxcbiAgICAgICAgfSlcblxuICAgICAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIGFmdGVyUmVhZCAtIENvbGxlY3Rpb25cbiAgICAgICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICAgIGF3YWl0IGNvbGxlY3Rpb25Db25maWcuaG9va3MuYWZ0ZXJSZWFkLnJlZHVjZShhc3luYyAocHJpb3JIb29rLCBob29rKSA9PiB7XG4gICAgICAgICAgYXdhaXQgcHJpb3JIb29rXG5cbiAgICAgICAgICByZXN1bHQgPVxuICAgICAgICAgICAgKGF3YWl0IGhvb2soe1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgICAgICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgICAgICAgICAgZG9jOiByZXN1bHQgfHwgZG9jLFxuICAgICAgICAgICAgICByZXEsXG4gICAgICAgICAgICB9KSkgfHwgcmVzdWx0XG4gICAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKVxuXG4gICAgICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgLy8gYWZ0ZXJEZWxldGUgLSBDb2xsZWN0aW9uXG4gICAgICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgICBhd2FpdCBjb2xsZWN0aW9uQ29uZmlnLmhvb2tzLmFmdGVyRGVsZXRlLnJlZHVjZShhc3luYyAocHJpb3JIb29rLCBob29rKSA9PiB7XG4gICAgICAgICAgYXdhaXQgcHJpb3JIb29rXG5cbiAgICAgICAgICByZXN1bHQgPVxuICAgICAgICAgICAgKGF3YWl0IGhvb2soe1xuICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgICAgICAgY29udGV4dDogcmVxLmNvbnRleHQsXG4gICAgICAgICAgICAgIGRvYzogcmVzdWx0LFxuICAgICAgICAgICAgICByZXEsXG4gICAgICAgICAgICB9KSkgfHwgcmVzdWx0XG4gICAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKVxuXG4gICAgICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgLy8gOC4gUmV0dXJuIHJlc3VsdHNcbiAgICAgICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICBpZDogZG9jLmlkLFxuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0pXG5cbiAgICBjb25zdCBhd2FpdGVkRG9jcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERlbGV0ZSBQcmVmZXJlbmNlc1xuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGF3YWl0IGRlbGV0ZVVzZXJQcmVmZXJlbmNlcyh7XG4gICAgICBjb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgaWRzOiBkb2NzLm1hcCgoeyBpZCB9KSA9PiBpZCksXG4gICAgICBwYXlsb2FkLFxuICAgICAgcmVxLFxuICAgIH0pXG5cbiAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgZG9jczogYXdhaXRlZERvY3MuZmlsdGVyKEJvb2xlYW4pLFxuICAgICAgZXJyb3JzLFxuICAgIH1cblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhZnRlck9wZXJhdGlvbiAtIENvbGxlY3Rpb25cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICByZXN1bHQgPSBhd2FpdCBidWlsZEFmdGVyT3BlcmF0aW9uPEdlbmVyYXRlZFR5cGVzWydjb2xsZWN0aW9ucyddW1RTbHVnXT4oe1xuICAgICAgYXJncyxcbiAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICBvcGVyYXRpb246ICdkZWxldGUnLFxuICAgICAgcmVzdWx0LFxuICAgIH0pXG5cbiAgICBpZiAoc2hvdWxkQ29tbWl0KSBhd2FpdCBjb21taXRUcmFuc2FjdGlvbihyZXEpXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgYXdhaXQga2lsbFRyYW5zYWN0aW9uKGFyZ3MucmVxKVxuICAgIHRocm93IGVycm9yXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJkZWxldGVPcGVyYXRpb24iLCJpbmNvbWluZ0FyZ3MiLCJhcmdzIiwic2hvdWxkQ29tbWl0IiwiaW5pdFRyYW5zYWN0aW9uIiwicmVxIiwiY29sbGVjdGlvbiIsImNvbmZpZyIsImhvb2tzIiwiYmVmb3JlT3BlcmF0aW9uIiwicmVkdWNlIiwicHJpb3JIb29rIiwiaG9vayIsImNvbnRleHQiLCJvcGVyYXRpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsImNvbGxlY3Rpb25Db25maWciLCJkZXB0aCIsIm92ZXJyaWRlQWNjZXNzIiwiZmFsbGJhY2tMb2NhbGUiLCJsb2NhbGUiLCJwYXlsb2FkIiwic2hvd0hpZGRlbkZpZWxkcyIsIndoZXJlIiwiQVBJRXJyb3IiLCJodHRwU3RhdHVzIiwiQkFEX1JFUVVFU1QiLCJhY2Nlc3NSZXN1bHQiLCJleGVjdXRlQWNjZXNzIiwiYWNjZXNzIiwiZGVsZXRlIiwidmFsaWRhdGVRdWVyeVBhdGhzIiwiZnVsbFdoZXJlIiwiY29tYmluZVF1ZXJpZXMiLCJkb2NzIiwiZGIiLCJmaW5kIiwic2x1ZyIsImVycm9ycyIsInByb21pc2VzIiwibWFwIiwiZG9jIiwicmVzdWx0IiwiaWQiLCJiZWZvcmVEZWxldGUiLCJkZWxldGVBc3NvY2lhdGVkRmlsZXMiLCJvdmVycmlkZURlbGV0ZSIsInZlcnNpb25zIiwiZGVsZXRlQ29sbGVjdGlvblZlcnNpb25zIiwiZGVsZXRlT25lIiwiZXF1YWxzIiwiYWZ0ZXJSZWFkIiwiZ2xvYmFsIiwiYWZ0ZXJEZWxldGUiLCJlcnJvciIsInB1c2giLCJtZXNzYWdlIiwiYXdhaXRlZERvY3MiLCJhbGwiLCJkZWxldGVVc2VyUHJlZmVyZW5jZXMiLCJpZHMiLCJmaWx0ZXIiLCJCb29sZWFuIiwiYnVpbGRBZnRlck9wZXJhdGlvbiIsImNvbW1pdFRyYW5zYWN0aW9uIiwia2lsbFRyYW5zYWN0aW9uIl0sIm1hcHBpbmdzIjoiOzs7OytCQThCYUE7OztlQUFBQTs7O21FQTlCVTtzRUFRRztnQ0FDSztvQ0FDSTt3QkFDVjsyQkFDQzt1Q0FDWTt1Q0FDQTttQ0FDSjtpQ0FDRjtpQ0FDQTswQ0FDUzt1QkFDTDs7Ozs7O0FBVzdCLE1BQU1BLGtCQUFrQixPQUM3QkM7SUFRQSxJQUFJQyxPQUFPRDtJQUVYLElBQUk7UUFDRixNQUFNRSxlQUFlLE1BQU1DLElBQUFBLGdDQUFlLEVBQUNGLEtBQUtHLEdBQUc7UUFDbkQsd0NBQXdDO1FBQ3hDLCtCQUErQjtRQUMvQix3Q0FBd0M7UUFFeEMsTUFBTUgsS0FBS0ksVUFBVSxDQUFDQyxNQUFNLENBQUNDLEtBQUssQ0FBQ0MsZUFBZSxDQUFDQyxNQUFNLENBQ3ZELE9BQU9DLFdBQWdEQztZQUNyRCxNQUFNRDtZQUVOVCxPQUNFLEFBQUMsTUFBTVUsS0FBSztnQkFDVlY7Z0JBQ0FJLFlBQVlKLEtBQUtJLFVBQVUsQ0FBQ0MsTUFBTTtnQkFDbENNLFNBQVNYLEtBQUtHLEdBQUcsQ0FBQ1EsT0FBTztnQkFDekJDLFdBQVc7Z0JBQ1hULEtBQUtILEtBQUtHLEdBQUc7WUFDZixNQUFPSDtRQUNYLEdBQ0FhLFFBQVFDLE9BQU87UUFHakIsTUFBTSxFQUNKVixZQUFZLEVBQUVDLFFBQVFVLGdCQUFnQixFQUFFLEVBQ3hDQyxLQUFLLEVBQ0xDLGNBQWMsRUFDZGQsS0FBSyxFQUNIZSxjQUFjLEVBQ2RDLE1BQU0sRUFDTkMsU0FBUyxFQUFFZixNQUFNLEVBQUUsRUFDbkJlLE9BQU8sRUFDUixFQUNEakIsR0FBRyxFQUNIa0IsZ0JBQWdCLEVBQ2hCQyxLQUFLLEVBQ04sR0FBR3RCO1FBRUosSUFBSSxDQUFDc0IsT0FBTztZQUNWLE1BQU0sSUFBSUMsZ0JBQVEsQ0FBQyxpREFBaURDLG1CQUFVLENBQUNDLFdBQVc7UUFDNUY7UUFFQSx3Q0FBd0M7UUFDeEMsU0FBUztRQUNULHdDQUF3QztRQUV4QyxJQUFJQztRQUVKLElBQUksQ0FBQ1QsZ0JBQWdCO1lBQ25CUyxlQUFlLE1BQU1DLElBQUFBLHNCQUFhLEVBQUM7Z0JBQUV4QjtZQUFJLEdBQUdZLGlCQUFpQmEsTUFBTSxDQUFDQyxNQUFNO1FBQzVFO1FBRUEsTUFBTUMsSUFBQUEsc0NBQWtCLEVBQUM7WUFDdkJmO1lBQ0FFO1lBQ0FkO1lBQ0FtQjtRQUNGO1FBRUEsTUFBTVMsWUFBWUMsSUFBQUEsOEJBQWMsRUFBQ1YsT0FBT0k7UUFFeEMsd0NBQXdDO1FBQ3hDLHFCQUFxQjtRQUNyQix3Q0FBd0M7UUFFeEMsTUFBTSxFQUFFTyxJQUFJLEVBQUUsR0FBRyxNQUFNYixRQUFRYyxFQUFFLENBQUNDLElBQUksQ0FBdUM7WUFDM0UvQixZQUFZVyxpQkFBaUJxQixJQUFJO1lBQ2pDakI7WUFDQWhCO1lBQ0FtQixPQUFPUztRQUNUO1FBRUEsTUFBTU0sU0FBUyxFQUFFO1FBRWpCLG9DQUFvQyxHQUNwQyxNQUFNQyxXQUFXTCxLQUFLTSxHQUFHLENBQUMsT0FBT0M7WUFDL0IsSUFBSUM7WUFFSixNQUFNLEVBQUVDLEVBQUUsRUFBRSxHQUFHRjtZQUVmLElBQUk7Z0JBQ0Ysd0NBQXdDO2dCQUN4Qyw0QkFBNEI7Z0JBQzVCLHdDQUF3QztnQkFFeEMsTUFBTXpCLGlCQUFpQlQsS0FBSyxDQUFDcUMsWUFBWSxDQUFDbkMsTUFBTSxDQUFDLE9BQU9DLFdBQVdDO29CQUNqRSxNQUFNRDtvQkFFTixPQUFPQyxLQUFLO3dCQUNWZ0M7d0JBQ0F0QyxZQUFZVzt3QkFDWkosU0FBU1IsSUFBSVEsT0FBTzt3QkFDcEJSO29CQUNGO2dCQUNGLEdBQUdVLFFBQVFDLE9BQU87Z0JBRWxCLE1BQU04QixJQUFBQSw0Q0FBcUIsRUFBQztvQkFDMUI3QjtvQkFDQVY7b0JBQ0FtQztvQkFDQUssZ0JBQWdCO29CQUNoQjFDO2dCQUNGO2dCQUVBLHdDQUF3QztnQkFDeEMsa0JBQWtCO2dCQUNsQix3Q0FBd0M7Z0JBRXhDLElBQUlZLGlCQUFpQitCLFFBQVEsRUFBRTtvQkFDN0IsTUFBTUMsSUFBQUEsa0RBQXdCLEVBQUM7d0JBQzdCTDt3QkFDQU4sTUFBTXJCLGlCQUFpQnFCLElBQUk7d0JBQzNCaEI7d0JBQ0FqQjtvQkFDRjtnQkFDRjtnQkFFQSx3Q0FBd0M7Z0JBQ3hDLGtCQUFrQjtnQkFDbEIsd0NBQXdDO2dCQUV4QyxNQUFNaUIsUUFBUWMsRUFBRSxDQUFDYyxTQUFTLENBQUM7b0JBQ3pCNUMsWUFBWVcsaUJBQWlCcUIsSUFBSTtvQkFDakNqQztvQkFDQW1CLE9BQU87d0JBQ0xvQixJQUFJOzRCQUNGTyxRQUFRUDt3QkFDVjtvQkFDRjtnQkFDRjtnQkFFQSx3Q0FBd0M7Z0JBQ3hDLHFCQUFxQjtnQkFDckIsd0NBQXdDO2dCQUV4Q0QsU0FBUyxNQUFNUyxJQUFBQSxvQkFBUyxFQUFDO29CQUN2QjlDLFlBQVlXO29CQUNaSixTQUFTUixJQUFJUSxPQUFPO29CQUNwQks7b0JBQ0F3QixLQUFLQyxVQUFVRDtvQkFDZnRCO29CQUNBaUMsUUFBUTtvQkFDUmhDO29CQUNBRjtvQkFDQWQ7b0JBQ0FrQjtnQkFDRjtnQkFFQSx3Q0FBd0M7Z0JBQ3hDLHlCQUF5QjtnQkFDekIsd0NBQXdDO2dCQUV4QyxNQUFNTixpQkFBaUJULEtBQUssQ0FBQzRDLFNBQVMsQ0FBQzFDLE1BQU0sQ0FBQyxPQUFPQyxXQUFXQztvQkFDOUQsTUFBTUQ7b0JBRU5nQyxTQUNFLEFBQUMsTUFBTS9CLEtBQUs7d0JBQ1ZOLFlBQVlXO3dCQUNaSixTQUFTUixJQUFJUSxPQUFPO3dCQUNwQjZCLEtBQUtDLFVBQVVEO3dCQUNmckM7b0JBQ0YsTUFBT3NDO2dCQUNYLEdBQUc1QixRQUFRQyxPQUFPO2dCQUVsQix3Q0FBd0M7Z0JBQ3hDLDJCQUEyQjtnQkFDM0Isd0NBQXdDO2dCQUV4QyxNQUFNQyxpQkFBaUJULEtBQUssQ0FBQzhDLFdBQVcsQ0FBQzVDLE1BQU0sQ0FBQyxPQUFPQyxXQUFXQztvQkFDaEUsTUFBTUQ7b0JBRU5nQyxTQUNFLEFBQUMsTUFBTS9CLEtBQUs7d0JBQ1ZnQzt3QkFDQXRDLFlBQVlXO3dCQUNaSixTQUFTUixJQUFJUSxPQUFPO3dCQUNwQjZCLEtBQUtDO3dCQUNMdEM7b0JBQ0YsTUFBT3NDO2dCQUNYLEdBQUc1QixRQUFRQyxPQUFPO2dCQUVsQix3Q0FBd0M7Z0JBQ3hDLG9CQUFvQjtnQkFDcEIsd0NBQXdDO2dCQUV4QyxPQUFPMkI7WUFDVCxFQUFFLE9BQU9ZLE9BQU87Z0JBQ2RoQixPQUFPaUIsSUFBSSxDQUFDO29CQUNWWixJQUFJRixJQUFJRSxFQUFFO29CQUNWYSxTQUFTRixNQUFNRSxPQUFPO2dCQUN4QjtZQUNGO1lBQ0EsT0FBTztRQUNUO1FBRUEsTUFBTUMsY0FBYyxNQUFNM0MsUUFBUTRDLEdBQUcsQ0FBQ25CO1FBRXRDLHdDQUF3QztRQUN4QyxxQkFBcUI7UUFDckIsd0NBQXdDO1FBRXhDLE1BQU1vQixJQUFBQSw0Q0FBcUIsRUFBQztZQUMxQjNDO1lBQ0E0QyxLQUFLMUIsS0FBS00sR0FBRyxDQUFDLENBQUMsRUFBRUcsRUFBRSxFQUFFLEdBQUtBO1lBQzFCdEI7WUFDQWpCO1FBQ0Y7UUFFQSxJQUFJc0MsU0FBUztZQUNYUixNQUFNdUIsWUFBWUksTUFBTSxDQUFDQztZQUN6QnhCO1FBQ0Y7UUFFQSx3Q0FBd0M7UUFDeEMsOEJBQThCO1FBQzlCLHdDQUF3QztRQUV4Q0ksU0FBUyxNQUFNcUIsSUFBQUEsMEJBQW1CLEVBQXVDO1lBQ3ZFOUQ7WUFDQUksWUFBWVc7WUFDWkgsV0FBVztZQUNYNkI7UUFDRjtRQUVBLElBQUl4QyxjQUFjLE1BQU04RCxJQUFBQSxvQ0FBaUIsRUFBQzVEO1FBRTFDLE9BQU9zQztJQUNULEVBQUUsT0FBT1ksT0FBZ0I7UUFDdkIsTUFBTVcsSUFBQUEsZ0NBQWUsRUFBQ2hFLEtBQUtHLEdBQUc7UUFDOUIsTUFBTWtEO0lBQ1I7QUFDRiJ9
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb2xsZWN0aW9ucy9vcGVyYXRpb25zL2RlbGV0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaHR0cFN0YXR1cyBmcm9tICdodHRwLXN0YXR1cydcblxuaW1wb3J0IHR5cGUgeyBHZW5lcmF0ZWRUeXBlcyB9IGZyb20gJy4uLy4uLydcbmltcG9ydCB0eXBlIHsgQWNjZXNzUmVzdWx0IH0gZnJvbSAnLi4vLi4vY29uZmlnL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBQYXlsb2FkUmVxdWVzdCB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBXaGVyZSB9IGZyb20gJy4uLy4uL3R5cGVzJ1xuaW1wb3J0IHR5cGUgeyBCZWZvcmVPcGVyYXRpb25Ib29rLCBDb2xsZWN0aW9uIH0gZnJvbSAnLi4vY29uZmlnL3R5cGVzJ1xuXG5pbXBvcnQgZXhlY3V0ZUFjY2VzcyBmcm9tICcuLi8uLi9hdXRoL2V4ZWN1dGVBY2Nlc3MnXG5pbXBvcnQgeyBjb21iaW5lUXVlcmllcyB9IGZyb20gJy4uLy4uL2RhdGFiYXNlL2NvbWJpbmVRdWVyaWVzJ1xuaW1wb3J0IHsgdmFsaWRhdGVRdWVyeVBhdGhzIH0gZnJvbSAnLi4vLi4vZGF0YWJhc2UvcXVlcnlWYWxpZGF0aW9uL3ZhbGlkYXRlUXVlcnlQYXRocydcbmltcG9ydCB7IEFQSUVycm9yIH0gZnJvbSAnLi4vLi4vZXJyb3JzJ1xuaW1wb3J0IHsgYWZ0ZXJSZWFkIH0gZnJvbSAnLi4vLi4vZmllbGRzL2hvb2tzL2FmdGVyUmVhZCdcbmltcG9ydCB7IGRlbGV0ZVVzZXJQcmVmZXJlbmNlcyB9IGZyb20gJy4uLy4uL3ByZWZlcmVuY2VzL2RlbGV0ZVVzZXJQcmVmZXJlbmNlcydcbmltcG9ydCB7IGRlbGV0ZUFzc29jaWF0ZWRGaWxlcyB9IGZyb20gJy4uLy4uL3VwbG9hZHMvZGVsZXRlQXNzb2NpYXRlZEZpbGVzJ1xuaW1wb3J0IHsgY29tbWl0VHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvY29tbWl0VHJhbnNhY3Rpb24nXG5pbXBvcnQgeyBpbml0VHJhbnNhY3Rpb24gfSBmcm9tICcuLi8uLi91dGlsaXRpZXMvaW5pdFRyYW5zYWN0aW9uJ1xuaW1wb3J0IHsga2lsbFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vLi4vdXRpbGl0aWVzL2tpbGxUcmFuc2FjdGlvbidcbmltcG9ydCB7IGRlbGV0ZUNvbGxlY3Rpb25WZXJzaW9ucyB9IGZyb20gJy4uLy4uL3ZlcnNpb25zL2RlbGV0ZUNvbGxlY3Rpb25WZXJzaW9ucydcbmltcG9ydCB7IGJ1aWxkQWZ0ZXJPcGVyYXRpb24gfSBmcm9tICcuL3V0aWxzJ1xuXG5leHBvcnQgdHlwZSBBcmd1bWVudHMgPSB7XG4gIGNvbGxlY3Rpb246IENvbGxlY3Rpb25cbiAgZGVwdGg/OiBudW1iZXJcbiAgb3ZlcnJpZGVBY2Nlc3M/OiBib29sZWFuXG4gIHJlcTogUGF5bG9hZFJlcXVlc3RcbiAgc2hvd0hpZGRlbkZpZWxkcz86IGJvb2xlYW5cbiAgd2hlcmU6IFdoZXJlXG59XG5cbmV4cG9ydCBjb25zdCBkZWxldGVPcGVyYXRpb24gPSBhc3luYyA8VFNsdWcgZXh0ZW5kcyBrZXlvZiBHZW5lcmF0ZWRUeXBlc1snY29sbGVjdGlvbnMnXT4oXG4gIGluY29taW5nQXJnczogQXJndW1lbnRzLFxuKTogUHJvbWlzZTx7XG4gIGRvY3M6IEdlbmVyYXRlZFR5cGVzWydjb2xsZWN0aW9ucyddW1RTbHVnXVtdXG4gIGVycm9yczoge1xuICAgIGlkOiBHZW5lcmF0ZWRUeXBlc1snY29sbGVjdGlvbnMnXVtUU2x1Z11bJ2lkJ11cbiAgICBtZXNzYWdlOiBzdHJpbmdcbiAgfVtdXG59PiA9PiB7XG4gIGxldCBhcmdzID0gaW5jb21pbmdBcmdzXG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzaG91bGRDb21taXQgPSBhd2FpdCBpbml0VHJhbnNhY3Rpb24oYXJncy5yZXEpXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIGJlZm9yZU9wZXJhdGlvbiAtIENvbGxlY3Rpb25cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICBhd2FpdCBhcmdzLmNvbGxlY3Rpb24uY29uZmlnLmhvb2tzLmJlZm9yZU9wZXJhdGlvbi5yZWR1Y2UoXG4gICAgICBhc3luYyAocHJpb3JIb29rOiBCZWZvcmVPcGVyYXRpb25Ib29rIHwgUHJvbWlzZTx2b2lkPiwgaG9vazogQmVmb3JlT3BlcmF0aW9uSG9vaykgPT4ge1xuICAgICAgICBhd2FpdCBwcmlvckhvb2tcblxuICAgICAgICBhcmdzID1cbiAgICAgICAgICAoYXdhaXQgaG9vayh7XG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgY29sbGVjdGlvbjogYXJncy5jb2xsZWN0aW9uLmNvbmZpZyxcbiAgICAgICAgICAgIGNvbnRleHQ6IGFyZ3MucmVxLmNvbnRleHQsXG4gICAgICAgICAgICBvcGVyYXRpb246ICdkZWxldGUnLFxuICAgICAgICAgICAgcmVxOiBhcmdzLnJlcSxcbiAgICAgICAgICB9KSkgfHwgYXJnc1xuICAgICAgfSxcbiAgICAgIFByb21pc2UucmVzb2x2ZSgpLFxuICAgIClcblxuICAgIGNvbnN0IHtcbiAgICAgIGNvbGxlY3Rpb246IHsgY29uZmlnOiBjb2xsZWN0aW9uQ29uZmlnIH0sXG4gICAgICBkZXB0aCxcbiAgICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgICAgcmVxOiB7XG4gICAgICAgIGZhbGxiYWNrTG9jYWxlLFxuICAgICAgICBsb2NhbGUsXG4gICAgICAgIHBheWxvYWQ6IHsgY29uZmlnIH0sXG4gICAgICAgIHBheWxvYWQsXG4gICAgICB9LFxuICAgICAgcmVxLFxuICAgICAgc2hvd0hpZGRlbkZpZWxkcyxcbiAgICAgIHdoZXJlLFxuICAgIH0gPSBhcmdzXG5cbiAgICBpZiAoIXdoZXJlKSB7XG4gICAgICB0aHJvdyBuZXcgQVBJRXJyb3IoXCJNaXNzaW5nICd3aGVyZScgcXVlcnkgb2YgZG9jdW1lbnRzIHRvIGRlbGV0ZS5cIiwgaHR0cFN0YXR1cy5CQURfUkVRVUVTVClcbiAgICB9XG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gQWNjZXNzXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgbGV0IGFjY2Vzc1Jlc3VsdDogQWNjZXNzUmVzdWx0XG5cbiAgICBpZiAoIW92ZXJyaWRlQWNjZXNzKSB7XG4gICAgICBhY2Nlc3NSZXN1bHQgPSBhd2FpdCBleGVjdXRlQWNjZXNzKHsgcmVxIH0sIGNvbGxlY3Rpb25Db25maWcuYWNjZXNzLmRlbGV0ZSlcbiAgICB9XG5cbiAgICBhd2FpdCB2YWxpZGF0ZVF1ZXJ5UGF0aHMoe1xuICAgICAgY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgIG92ZXJyaWRlQWNjZXNzLFxuICAgICAgcmVxLFxuICAgICAgd2hlcmUsXG4gICAgfSlcblxuICAgIGNvbnN0IGZ1bGxXaGVyZSA9IGNvbWJpbmVRdWVyaWVzKHdoZXJlLCBhY2Nlc3NSZXN1bHQpXG5cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgLy8gUmV0cmlldmUgZG9jdW1lbnRzXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgY29uc3QgeyBkb2NzIH0gPSBhd2FpdCBwYXlsb2FkLmRiLmZpbmQ8R2VuZXJhdGVkVHlwZXNbJ2NvbGxlY3Rpb25zJ11bVFNsdWddPih7XG4gICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29uZmlnLnNsdWcsXG4gICAgICBsb2NhbGUsXG4gICAgICByZXEsXG4gICAgICB3aGVyZTogZnVsbFdoZXJlLFxuICAgIH0pXG5cbiAgICBjb25zdCBlcnJvcnMgPSBbXVxuXG4gICAgLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbiAgICBjb25zdCBwcm9taXNlcyA9IGRvY3MubWFwKGFzeW5jIChkb2MpID0+IHtcbiAgICAgIGxldCByZXN1bHRcblxuICAgICAgY29uc3QgeyBpZCB9ID0gZG9jXG5cbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgLy8gYmVmb3JlRGVsZXRlIC0gQ29sbGVjdGlvblxuICAgICAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgYXdhaXQgY29sbGVjdGlvbkNvbmZpZy5ob29rcy5iZWZvcmVEZWxldGUucmVkdWNlKGFzeW5jIChwcmlvckhvb2ssIGhvb2spID0+IHtcbiAgICAgICAgICBhd2FpdCBwcmlvckhvb2tcblxuICAgICAgICAgIHJldHVybiBob29rKHtcbiAgICAgICAgICAgIGlkLFxuICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgICAgIGNvbnRleHQ6IHJlcS5jb250ZXh0LFxuICAgICAgICAgICAgcmVxLFxuICAgICAgICAgIH0pXG4gICAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKVxuXG4gICAgICAgIGF3YWl0IGRlbGV0ZUFzc29jaWF0ZWRGaWxlcyh7XG4gICAgICAgICAgY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgZG9jLFxuICAgICAgICAgIG92ZXJyaWRlRGVsZXRlOiB0cnVlLFxuICAgICAgICAgIHJlcSxcbiAgICAgICAgfSlcblxuICAgICAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIERlbGV0ZSB2ZXJzaW9uc1xuICAgICAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgaWYgKGNvbGxlY3Rpb25Db25maWcudmVyc2lvbnMpIHtcbiAgICAgICAgICBhd2FpdCBkZWxldGVDb2xsZWN0aW9uVmVyc2lvbnMoe1xuICAgICAgICAgICAgaWQsXG4gICAgICAgICAgICBzbHVnOiBjb2xsZWN0aW9uQ29uZmlnLnNsdWcsXG4gICAgICAgICAgICBwYXlsb2FkLFxuICAgICAgICAgICAgcmVxLFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIERlbGV0ZSBkb2N1bWVudFxuICAgICAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICAgICAgYXdhaXQgcGF5bG9hZC5kYi5kZWxldGVPbmUoe1xuICAgICAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcuc2x1ZyxcbiAgICAgICAgICByZXEsXG4gICAgICAgICAgd2hlcmU6IHtcbiAgICAgICAgICAgIGlkOiB7XG4gICAgICAgICAgICAgIGVxdWFsczogaWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG5cbiAgICAgICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgICAgICAvLyBhZnRlclJlYWQgLSBGaWVsZHNcbiAgICAgICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICAgIHJlc3VsdCA9IGF3YWl0IGFmdGVyUmVhZCh7XG4gICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgICAgICBkZXB0aCxcbiAgICAgICAgICBkb2M6IHJlc3VsdCB8fCBkb2MsXG4gICAgICAgICAgZmFsbGJhY2tMb2NhbGUsXG4gICAgICAgICAgZ2xvYmFsOiBudWxsLFxuICAgICAgICAgIGxvY2FsZSxcbiAgICAgICAgICBvdmVycmlkZUFjY2VzcyxcbiAgICAgICAgICByZXEsXG4gICAgICAgICAgc2hvd0hpZGRlbkZpZWxkcyxcbiAgICAgICAgfSlcblxuICAgICAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4gICAgICAgIC8vIGFmdGVyUmVhZCAtIENvbGxlY3Rpb25cbiAgICAgICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICAgIGF3YWl0IGNvbGxlY3Rpb25Db25maWcuaG9va3MuYWZ0ZXJSZWFkLnJlZHVjZShhc3luYyAocHJpb3JIb29rLCBob29rKSA9PiB7XG4gICAgICAgICAgYXdhaXQgcHJpb3JIb29rXG5cbiAgICAgICAgICByZXN1bHQgPVxuICAgICAgICAgICAgKGF3YWl0IGhvb2soe1xuICAgICAgICAgICAgICBjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgICAgICAgICBjb250ZXh0OiByZXEuY29udGV4dCxcbiAgICAgICAgICAgICAgZG9jOiByZXN1bHQgfHwgZG9jLFxuICAgICAgICAgICAgICByZXEsXG4gICAgICAgICAgICB9KSkgfHwgcmVzdWx0XG4gICAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKVxuXG4gICAgICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgLy8gYWZ0ZXJEZWxldGUgLSBDb2xsZWN0aW9uXG4gICAgICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgICAgICBhd2FpdCBjb2xsZWN0aW9uQ29uZmlnLmhvb2tzLmFmdGVyRGVsZXRlLnJlZHVjZShhc3luYyAocHJpb3JIb29rLCBob29rKSA9PiB7XG4gICAgICAgICAgYXdhaXQgcHJpb3JIb29rXG5cbiAgICAgICAgICByZXN1bHQgPVxuICAgICAgICAgICAgKGF3YWl0IGhvb2soe1xuICAgICAgICAgICAgICBpZCxcbiAgICAgICAgICAgICAgY29sbGVjdGlvbjogY29sbGVjdGlvbkNvbmZpZyxcbiAgICAgICAgICAgICAgY29udGV4dDogcmVxLmNvbnRleHQsXG4gICAgICAgICAgICAgIGRvYzogcmVzdWx0LFxuICAgICAgICAgICAgICByZXEsXG4gICAgICAgICAgICB9KSkgfHwgcmVzdWx0XG4gICAgICAgIH0sIFByb21pc2UucmVzb2x2ZSgpKVxuXG4gICAgICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAgICAgLy8gOC4gUmV0dXJuIHJlc3VsdHNcbiAgICAgICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXG4gICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKHtcbiAgICAgICAgICBpZDogZG9jLmlkLFxuICAgICAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0pXG5cbiAgICBjb25zdCBhd2FpdGVkRG9jcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxuXG4gICAgLy8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuICAgIC8vIERlbGV0ZSBQcmVmZXJlbmNlc1xuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cblxuICAgIGF3YWl0IGRlbGV0ZVVzZXJQcmVmZXJlbmNlcyh7XG4gICAgICBjb2xsZWN0aW9uQ29uZmlnLFxuICAgICAgaWRzOiBkb2NzLm1hcCgoeyBpZCB9KSA9PiBpZCksXG4gICAgICBwYXlsb2FkLFxuICAgICAgcmVxLFxuICAgIH0pXG5cbiAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgZG9jczogYXdhaXRlZERvY3MuZmlsdGVyKEJvb2xlYW4pLFxuICAgICAgZXJyb3JzLFxuICAgIH1cblxuICAgIC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbiAgICAvLyBhZnRlck9wZXJhdGlvbiAtIENvbGxlY3Rpb25cbiAgICAvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cbiAgICByZXN1bHQgPSBhd2FpdCBidWlsZEFmdGVyT3BlcmF0aW9uPEdlbmVyYXRlZFR5cGVzWydjb2xsZWN0aW9ucyddW1RTbHVnXT4oe1xuICAgICAgYXJncyxcbiAgICAgIGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db25maWcsXG4gICAgICBvcGVyYXRpb246ICdkZWxldGUnLFxuICAgICAgcmVzdWx0LFxuICAgIH0pXG5cbiAgICBpZiAoc2hvdWxkQ29tbWl0KSBhd2FpdCBjb21taXRUcmFuc2FjdGlvbihyZXEpXG5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgYXdhaXQga2lsbFRyYW5zYWN0aW9uKGFyZ3MucmVxKVxuICAgIHRocm93IGVycm9yXG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJodHRwU3RhdHVzIiwiZXhlY3V0ZUFjY2VzcyIsImNvbWJpbmVRdWVyaWVzIiwidmFsaWRhdGVRdWVyeVBhdGhzIiwiQVBJRXJyb3IiLCJhZnRlclJlYWQiLCJkZWxldGVVc2VyUHJlZmVyZW5jZXMiLCJkZWxldGVBc3NvY2lhdGVkRmlsZXMiLCJjb21taXRUcmFuc2FjdGlvbiIsImluaXRUcmFuc2FjdGlvbiIsImtpbGxUcmFuc2FjdGlvbiIsImRlbGV0ZUNvbGxlY3Rpb25WZXJzaW9ucyIsImJ1aWxkQWZ0ZXJPcGVyYXRpb24iLCJkZWxldGVPcGVyYXRpb24iLCJpbmNvbWluZ0FyZ3MiLCJhcmdzIiwic2hvdWxkQ29tbWl0IiwicmVxIiwiY29sbGVjdGlvbiIsImNvbmZpZyIsImhvb2tzIiwiYmVmb3JlT3BlcmF0aW9uIiwicmVkdWNlIiwicHJpb3JIb29rIiwiaG9vayIsImNvbnRleHQiLCJvcGVyYXRpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsImNvbGxlY3Rpb25Db25maWciLCJkZXB0aCIsIm92ZXJyaWRlQWNjZXNzIiwiZmFsbGJhY2tMb2NhbGUiLCJsb2NhbGUiLCJwYXlsb2FkIiwic2hvd0hpZGRlbkZpZWxkcyIsIndoZXJlIiwiQkFEX1JFUVVFU1QiLCJhY2Nlc3NSZXN1bHQiLCJhY2Nlc3MiLCJkZWxldGUiLCJmdWxsV2hlcmUiLCJkb2NzIiwiZGIiLCJmaW5kIiwic2x1ZyIsImVycm9ycyIsInByb21pc2VzIiwibWFwIiwiZG9jIiwicmVzdWx0IiwiaWQiLCJiZWZvcmVEZWxldGUiLCJvdmVycmlkZURlbGV0ZSIsInZlcnNpb25zIiwiZGVsZXRlT25lIiwiZXF1YWxzIiwiZ2xvYmFsIiwiYWZ0ZXJEZWxldGUiLCJlcnJvciIsInB1c2giLCJtZXNzYWdlIiwiYXdhaXRlZERvY3MiLCJhbGwiLCJpZHMiLCJmaWx0ZXIiLCJCb29sZWFuIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxnQkFBZ0IsY0FBYTtBQVFwQyxPQUFPQyxtQkFBbUIsMkJBQTBCO0FBQ3BELFNBQVNDLGNBQWMsUUFBUSxnQ0FBK0I7QUFDOUQsU0FBU0Msa0JBQWtCLFFBQVEsb0RBQW1EO0FBQ3RGLFNBQVNDLFFBQVEsUUFBUSxlQUFjO0FBQ3ZDLFNBQVNDLFNBQVMsUUFBUSwrQkFBOEI7QUFDeEQsU0FBU0MscUJBQXFCLFFBQVEsMENBQXlDO0FBQy9FLFNBQVNDLHFCQUFxQixRQUFRLHNDQUFxQztBQUMzRSxTQUFTQyxpQkFBaUIsUUFBUSxvQ0FBbUM7QUFDckUsU0FBU0MsZUFBZSxRQUFRLGtDQUFpQztBQUNqRSxTQUFTQyxlQUFlLFFBQVEsa0NBQWlDO0FBQ2pFLFNBQVNDLHdCQUF3QixRQUFRLDBDQUF5QztBQUNsRixTQUFTQyxtQkFBbUIsUUFBUSxVQUFTO0FBVzdDLE9BQU8sTUFBTUMsa0JBQWtCLE9BQzdCQztJQVFBLElBQUlDLE9BQU9EO0lBRVgsSUFBSTtRQUNGLE1BQU1FLGVBQWUsTUFBTVAsZ0JBQWdCTSxLQUFLRSxHQUFHO1FBQ25ELHdDQUF3QztRQUN4QywrQkFBK0I7UUFDL0Isd0NBQXdDO1FBRXhDLE1BQU1GLEtBQUtHLFVBQVUsQ0FB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
|