@mnaoumov/obsidian-lib 1.0.1 → 3.0.0
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/dist/lib/cjs/__merged.cjs +15 -1
- package/dist/lib/cjs/__merged.d.cts +5 -3
- package/dist/lib/cjs/app.cjs +1 -1
- package/dist/lib/cjs/attachment-path.cjs +62 -9
- package/dist/lib/cjs/attachment-path.d.cts +21 -43
- package/dist/lib/cjs/attachment-unit-folder.cjs +1 -1
- package/dist/lib/cjs/attachment-unit-folder.d.cts +8 -9
- package/dist/lib/cjs/components/plugin-notice-component.cjs +7 -2
- package/dist/lib/cjs/components/plugin-notice-component.d.cts +3 -0
- package/dist/lib/cjs/components/release-notes-component.cjs +3 -2
- package/dist/lib/cjs/components/settings-migration-component.cjs +5 -5
- package/dist/lib/cjs/components/settings-migration-component.d.cts +6 -4
- package/dist/lib/cjs/dataview.cjs +1 -1
- package/dist/lib/cjs/dataview.d.cts +9 -3
- package/dist/lib/cjs/demo-vault-helper.cjs +3 -2
- package/dist/lib/cjs/desktop-demo-vault-opener.cjs +9 -8
- package/dist/lib/cjs/file-system.cjs +6 -1
- package/dist/lib/cjs/file-system.d.cts +7 -0
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/metadata-cache.cjs +25 -7
- package/dist/lib/cjs/metadata-cache.d.cts +8 -19
- package/dist/lib/cjs/plugin/index.cjs +4 -1
- package/dist/lib/cjs/plugin/index.d.cts +1 -0
- package/dist/lib/cjs/plugin/plugin-api-schema.cjs +171 -0
- package/dist/lib/cjs/plugin/plugin-api-schema.d.cts +59 -0
- package/dist/lib/cjs/plugin/plugin-api.cjs +7 -1
- package/dist/lib/cjs/plugin/plugin-api.d.cts +83 -10
- package/dist/lib/cjs/plugin/settings-migration-api.cjs +30 -1
- package/dist/lib/cjs/plugin/settings-migration-api.d.cts +16 -3
- package/dist/lib/esm/__merged.d.mts +5 -3
- package/dist/lib/esm/__merged.mjs +15 -1
- package/dist/lib/esm/app.mjs +1 -1
- package/dist/lib/esm/attachment-path.d.mts +21 -43
- package/dist/lib/esm/attachment-path.mjs +65 -9
- package/dist/lib/esm/attachment-unit-folder.d.mts +8 -9
- package/dist/lib/esm/attachment-unit-folder.mjs +1 -1
- package/dist/lib/esm/components/plugin-notice-component.d.mts +3 -0
- package/dist/lib/esm/components/plugin-notice-component.mjs +7 -2
- package/dist/lib/esm/components/release-notes-component.mjs +6 -2
- package/dist/lib/esm/components/settings-migration-component.d.mts +6 -4
- package/dist/lib/esm/components/settings-migration-component.mjs +5 -5
- package/dist/lib/esm/dataview.d.mts +9 -3
- package/dist/lib/esm/dataview.mjs +1 -1
- package/dist/lib/esm/demo-vault-helper.mjs +3 -2
- package/dist/lib/esm/desktop-demo-vault-opener.mjs +12 -8
- package/dist/lib/esm/file-system.d.mts +7 -0
- package/dist/lib/esm/file-system.mjs +5 -1
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/metadata-cache.d.mts +8 -19
- package/dist/lib/esm/metadata-cache.mjs +30 -8
- package/dist/lib/esm/plugin/index.d.mts +1 -0
- package/dist/lib/esm/plugin/index.mjs +3 -1
- package/dist/lib/esm/plugin/plugin-api-schema.d.mts +59 -0
- package/dist/lib/esm/plugin/plugin-api-schema.mjs +73 -0
- package/dist/lib/esm/plugin/plugin-api.d.mts +83 -10
- package/dist/lib/esm/plugin/plugin-api.mjs +6 -1
- package/dist/lib/esm/plugin/settings-migration-api.d.mts +16 -3
- package/dist/lib/esm/plugin/settings-migration-api.mjs +25 -1
- package/dist/styles.css +4 -1
- package/package.json +4 -135
- package/plugin/plugin-api-schema/package.json +6 -0
- package/@types/dataview/api/data-array/package.json +0 -4
- package/@types/dataview/api/extensions/package.json +0 -4
- package/@types/dataview/api/inline-api/package.json +0 -4
- package/@types/dataview/api/plugin-api/package.json +0 -4
- package/@types/dataview/api/result/package.json +0 -4
- package/@types/dataview/data-import/common/package.json +0 -4
- package/@types/dataview/data-import/csv/package.json +0 -4
- package/@types/dataview/data-import/inline-field/package.json +0 -4
- package/@types/dataview/data-import/markdown-file/package.json +0 -4
- package/@types/dataview/data-import/persister/package.json +0 -4
- package/@types/dataview/data-import/web-worker/import-entry/package.json +0 -4
- package/@types/dataview/data-import/web-worker/import-impl/package.json +0 -4
- package/@types/dataview/data-import/web-worker/import-manager/package.json +0 -4
- package/@types/dataview/data-index/index/package.json +0 -4
- package/@types/dataview/data-index/package.json +0 -4
- package/@types/dataview/data-index/resolver/package.json +0 -4
- package/@types/dataview/data-index/source/package.json +0 -4
- package/@types/dataview/data-model/markdown/package.json +0 -4
- package/@types/dataview/data-model/serialized/markdown/package.json +0 -4
- package/@types/dataview/data-model/transferable/package.json +0 -4
- package/@types/dataview/data-model/value/package.json +0 -4
- package/@types/dataview/expression/binaryop/package.json +0 -4
- package/@types/dataview/expression/context/package.json +0 -4
- package/@types/dataview/expression/field/package.json +0 -4
- package/@types/dataview/expression/functions/package.json +0 -4
- package/@types/dataview/expression/parse/package.json +0 -4
- package/@types/dataview/index/package.json +0 -4
- package/@types/dataview/main/package.json +0 -4
- package/@types/dataview/package.json +0 -4
- package/@types/dataview/query/engine/package.json +0 -4
- package/@types/dataview/query/parse/package.json +0 -4
- package/@types/dataview/query/query/package.json +0 -4
- package/@types/dataview/settings/package.json +0 -4
- package/@types/dataview/typings/obsidian-ex/package.json +0 -4
- package/@types/dataview/typings/workers/package.json +0 -4
- package/@types/dataview/ui/export/markdown/package.json +0 -4
- package/@types/dataview/ui/lp-render/package.json +0 -4
- package/@types/dataview/ui/markdown/package.json +0 -4
- package/@types/dataview/ui/refreshable-view/package.json +0 -4
- package/@types/dataview/ui/render/package.json +0 -4
- package/@types/dataview/ui/views/calendar-view/package.json +0 -4
- package/@types/dataview/ui/views/inline-field-live-preview/package.json +0 -4
- package/@types/dataview/ui/views/inline-view/package.json +0 -4
- package/@types/dataview/ui/views/js-view/package.json +0 -4
- package/@types/dataview/ui/views/list-view/package.json +0 -4
- package/@types/dataview/ui/views/table-view/package.json +0 -4
- package/@types/dataview/ui/views/task-view/package.json +0 -4
- package/@types/dataview/util/hash/package.json +0 -4
- package/@types/dataview/util/locale/package.json +0 -4
- package/@types/dataview/util/media/package.json +0 -4
- package/@types/dataview/util/normalize/package.json +0 -4
- package/dist/lib/cjs/@types/dataview/api/data-array.d.cts +0 -137
- package/dist/lib/cjs/@types/dataview/api/extensions.d.cts +0 -16
- package/dist/lib/cjs/@types/dataview/api/inline-api.d.cts +0 -187
- package/dist/lib/cjs/@types/dataview/api/plugin-api.d.cts +0 -210
- package/dist/lib/cjs/@types/dataview/api/result.d.cts +0 -39
- package/dist/lib/cjs/@types/dataview/data-import/common.d.cts +0 -4
- package/dist/lib/cjs/@types/dataview/data-import/csv.d.cts +0 -4
- package/dist/lib/cjs/@types/dataview/data-import/inline-field.d.cts +0 -43
- package/dist/lib/cjs/@types/dataview/data-import/markdown-file.d.cts +0 -53
- package/dist/lib/cjs/@types/dataview/data-import/persister.d.cts +0 -33
- package/dist/lib/cjs/@types/dataview/data-import/web-worker/import-entry.d.cts +0 -2
- package/dist/lib/cjs/@types/dataview/data-import/web-worker/import-impl.d.cts +0 -7
- package/dist/lib/cjs/@types/dataview/data-import/web-worker/import-manager.d.cts +0 -38
- package/dist/lib/cjs/@types/dataview/data-index/index.d.cts +0 -187
- package/dist/lib/cjs/@types/dataview/data-index/resolver.d.cts +0 -24
- package/dist/lib/cjs/@types/dataview/data-index/source.d.cts +0 -72
- package/dist/lib/cjs/@types/dataview/data-model/markdown.d.cts +0 -116
- package/dist/lib/cjs/@types/dataview/data-model/serialized/markdown.d.cts +0 -107
- package/dist/lib/cjs/@types/dataview/data-model/transferable.d.cts +0 -8
- package/dist/lib/cjs/@types/dataview/data-model/value.d.cts +0 -176
- package/dist/lib/cjs/@types/dataview/expression/binaryop.d.cts +0 -44
- package/dist/lib/cjs/@types/dataview/expression/context.d.cts +0 -50
- package/dist/lib/cjs/@types/dataview/expression/field.d.cts +0 -83
- package/dist/lib/cjs/@types/dataview/expression/functions.d.cts +0 -150
- package/dist/lib/cjs/@types/dataview/expression/parse.d.cts +0 -164
- package/dist/lib/cjs/@types/dataview/index.d.cts +0 -56
- package/dist/lib/cjs/@types/dataview/main.d.cts +0 -53
- package/dist/lib/cjs/@types/dataview/query/engine.d.cts +0 -104
- package/dist/lib/cjs/@types/dataview/query/parse.d.cts +0 -45
- package/dist/lib/cjs/@types/dataview/query/query.d.cts +0 -96
- package/dist/lib/cjs/@types/dataview/settings.d.cts +0 -61
- package/dist/lib/cjs/@types/dataview/typings/obsidian-ex.d.cts +0 -29
- package/dist/lib/cjs/@types/dataview/typings/workers.d.cts +0 -5
- package/dist/lib/cjs/@types/dataview/ui/export/markdown.d.cts +0 -16
- package/dist/lib/cjs/@types/dataview/ui/lp-render.d.cts +0 -38
- package/dist/lib/cjs/@types/dataview/ui/markdown.d.cts +0 -87
- package/dist/lib/cjs/@types/dataview/ui/refreshable-view.d.cts +0 -19
- package/dist/lib/cjs/@types/dataview/ui/render.d.cts +0 -34
- package/dist/lib/cjs/@types/dataview/ui/views/calendar-view.d.cts +0 -18
- package/dist/lib/cjs/@types/dataview/ui/views/inline-field-live-preview.d.cts +0 -43
- package/dist/lib/cjs/@types/dataview/ui/views/inline-view.d.cts +0 -29
- package/dist/lib/cjs/@types/dataview/ui/views/js-view.d.cts +0 -24
- package/dist/lib/cjs/@types/dataview/ui/views/list-view.d.cts +0 -26
- package/dist/lib/cjs/@types/dataview/ui/views/table-view.d.cts +0 -29
- package/dist/lib/cjs/@types/dataview/ui/views/task-view.d.cts +0 -52
- package/dist/lib/cjs/@types/dataview/util/hash.d.cts +0 -2
- package/dist/lib/cjs/@types/dataview/util/locale.d.cts +0 -3
- package/dist/lib/cjs/@types/dataview/util/media.d.cts +0 -7
- package/dist/lib/cjs/@types/dataview/util/normalize.d.cts +0 -45
- package/dist/lib/esm/@types/dataview/api/data-array.d.mts +0 -137
- package/dist/lib/esm/@types/dataview/api/extensions.d.mts +0 -16
- package/dist/lib/esm/@types/dataview/api/inline-api.d.mts +0 -187
- package/dist/lib/esm/@types/dataview/api/plugin-api.d.mts +0 -210
- package/dist/lib/esm/@types/dataview/api/result.d.mts +0 -39
- package/dist/lib/esm/@types/dataview/data-import/common.d.mts +0 -4
- package/dist/lib/esm/@types/dataview/data-import/csv.d.mts +0 -4
- package/dist/lib/esm/@types/dataview/data-import/inline-field.d.mts +0 -43
- package/dist/lib/esm/@types/dataview/data-import/markdown-file.d.mts +0 -53
- package/dist/lib/esm/@types/dataview/data-import/persister.d.mts +0 -33
- package/dist/lib/esm/@types/dataview/data-import/web-worker/import-entry.d.mts +0 -2
- package/dist/lib/esm/@types/dataview/data-import/web-worker/import-impl.d.mts +0 -7
- package/dist/lib/esm/@types/dataview/data-import/web-worker/import-manager.d.mts +0 -38
- package/dist/lib/esm/@types/dataview/data-index/index.d.mts +0 -187
- package/dist/lib/esm/@types/dataview/data-index/resolver.d.mts +0 -24
- package/dist/lib/esm/@types/dataview/data-index/source.d.mts +0 -72
- package/dist/lib/esm/@types/dataview/data-model/markdown.d.mts +0 -116
- package/dist/lib/esm/@types/dataview/data-model/serialized/markdown.d.mts +0 -107
- package/dist/lib/esm/@types/dataview/data-model/transferable.d.mts +0 -8
- package/dist/lib/esm/@types/dataview/data-model/value.d.mts +0 -176
- package/dist/lib/esm/@types/dataview/expression/binaryop.d.mts +0 -44
- package/dist/lib/esm/@types/dataview/expression/context.d.mts +0 -50
- package/dist/lib/esm/@types/dataview/expression/field.d.mts +0 -83
- package/dist/lib/esm/@types/dataview/expression/functions.d.mts +0 -150
- package/dist/lib/esm/@types/dataview/expression/parse.d.mts +0 -164
- package/dist/lib/esm/@types/dataview/index.d.mts +0 -56
- package/dist/lib/esm/@types/dataview/main.d.mts +0 -53
- package/dist/lib/esm/@types/dataview/query/engine.d.mts +0 -104
- package/dist/lib/esm/@types/dataview/query/parse.d.mts +0 -45
- package/dist/lib/esm/@types/dataview/query/query.d.mts +0 -96
- package/dist/lib/esm/@types/dataview/settings.d.mts +0 -61
- package/dist/lib/esm/@types/dataview/typings/obsidian-ex.d.mts +0 -29
- package/dist/lib/esm/@types/dataview/typings/workers.d.mts +0 -5
- package/dist/lib/esm/@types/dataview/ui/export/markdown.d.mts +0 -16
- package/dist/lib/esm/@types/dataview/ui/lp-render.d.mts +0 -38
- package/dist/lib/esm/@types/dataview/ui/markdown.d.mts +0 -87
- package/dist/lib/esm/@types/dataview/ui/refreshable-view.d.mts +0 -19
- package/dist/lib/esm/@types/dataview/ui/render.d.mts +0 -34
- package/dist/lib/esm/@types/dataview/ui/views/calendar-view.d.mts +0 -18
- package/dist/lib/esm/@types/dataview/ui/views/inline-field-live-preview.d.mts +0 -43
- package/dist/lib/esm/@types/dataview/ui/views/inline-view.d.mts +0 -29
- package/dist/lib/esm/@types/dataview/ui/views/js-view.d.mts +0 -24
- package/dist/lib/esm/@types/dataview/ui/views/list-view.d.mts +0 -26
- package/dist/lib/esm/@types/dataview/ui/views/table-view.d.mts +0 -29
- package/dist/lib/esm/@types/dataview/ui/views/task-view.d.mts +0 -52
- package/dist/lib/esm/@types/dataview/util/hash.d.mts +0 -2
- package/dist/lib/esm/@types/dataview/util/locale.d.mts +0 -3
- package/dist/lib/esm/@types/dataview/util/media.d.mts +0 -7
- package/dist/lib/esm/@types/dataview/util/normalize.d.mts +0 -45
|
@@ -133,6 +133,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
133
133
|
var attachment_path_exports = {};
|
|
134
134
|
__export(attachment_path_exports, {
|
|
135
135
|
AttachmentPathContext: () => AttachmentPathContext,
|
|
136
|
+
CUSTOM_ATTACHMENT_LOCATION_PLUGIN_ID: () => CUSTOM_ATTACHMENT_LOCATION_PLUGIN_ID,
|
|
136
137
|
DUMMY_PATH: () => DUMMY_PATH,
|
|
137
138
|
getAttachmentFilePath: () => getAttachmentFilePath,
|
|
138
139
|
getAttachmentFolderPath: () => getAttachmentFolderPath,
|
|
@@ -147,12 +148,32 @@ var import_path = require('@mnaoumov/typescript-lib/path');
|
|
|
147
148
|
var import_string = require('@mnaoumov/typescript-lib/string');
|
|
148
149
|
var import_implementations = require('@obsidian-typings/obsidian-public-latest/implementations');
|
|
149
150
|
var import_file_system = require('./file-system.cjs');
|
|
151
|
+
var import_plugin_api_schema = require('./plugin/plugin-api-schema.cjs');
|
|
152
|
+
var import_plugin_api = require('./plugin/plugin-api.cjs');
|
|
150
153
|
var AttachmentPathContext = /* @__PURE__ */ ((AttachmentPathContext2) => {
|
|
151
154
|
AttachmentPathContext2["DeleteNote"] = "DeleteNote";
|
|
152
155
|
AttachmentPathContext2["RenameNote"] = "RenameNote";
|
|
153
156
|
AttachmentPathContext2["Unknown"] = "Unknown";
|
|
154
157
|
return AttachmentPathContext2;
|
|
155
158
|
})(AttachmentPathContext || {});
|
|
159
|
+
const CUSTOM_ATTACHMENT_LOCATION_PLUGIN_ID = "obsidian-custom-attachment-location";
|
|
160
|
+
const CUSTOM_ATTACHMENT_LOCATION_ATTACHMENT_PATH_API_VERSION_RANGE = "^1.3.0";
|
|
161
|
+
const CUSTOM_ATTACHMENT_LOCATION_ATTACHMENT_PATH_API_CONTRACT = {
|
|
162
|
+
getAvailablePathForAttachments: {
|
|
163
|
+
input: (0, import_plugin_api_schema.createArgumentsSchema)([{
|
|
164
|
+
expected: "the attachment-path parameters",
|
|
165
|
+
typeGuard: isGetAvailablePathForAttachmentsExtendedFunctionParams
|
|
166
|
+
}]),
|
|
167
|
+
output: (0, import_plugin_api_schema.createTypeGuardSchema)({ expected: "a string", typeGuard: isString })
|
|
168
|
+
},
|
|
169
|
+
isAttachmentUnitFolder: {
|
|
170
|
+
input: (0, import_plugin_api_schema.createArgumentsSchema)([{
|
|
171
|
+
expected: "an object with a string folderPath",
|
|
172
|
+
typeGuard: isCustomAttachmentLocationIsAttachmentUnitFolderParams
|
|
173
|
+
}]),
|
|
174
|
+
output: (0, import_plugin_api_schema.createTypeGuardSchema)({ expected: "a boolean", typeGuard: isBoolean })
|
|
175
|
+
}
|
|
176
|
+
};
|
|
156
177
|
const DUMMY_PATH = "__DUMMY__";
|
|
157
178
|
async function getAttachmentFilePath(params) {
|
|
158
179
|
const {
|
|
@@ -161,8 +182,8 @@ async function getAttachmentFilePath(params) {
|
|
|
161
182
|
oldAttachmentPathOrFile,
|
|
162
183
|
shouldSkipDuplicateCheck
|
|
163
184
|
} = params;
|
|
164
|
-
const
|
|
165
|
-
if (!
|
|
185
|
+
const customAttachmentLocationApi = findCustomAttachmentLocationApi();
|
|
186
|
+
if (!customAttachmentLocationApi) {
|
|
166
187
|
return getAttachmentFilePathSync({
|
|
167
188
|
app,
|
|
168
189
|
notePathOrFile,
|
|
@@ -174,7 +195,7 @@ async function getAttachmentFilePath(params) {
|
|
|
174
195
|
const attachmentFileExtension = (0, import_path.extname)(attachmentPath);
|
|
175
196
|
const attachmentFileBaseName = (0, import_path.basename)(attachmentPath, attachmentFileExtension);
|
|
176
197
|
const attachmentFile = (0, import_file_system.getFileOrNull)({ app, pathOrFile: attachmentPath });
|
|
177
|
-
return await
|
|
198
|
+
return await customAttachmentLocationApi.getAvailablePathForAttachments({
|
|
178
199
|
attachmentFileBaseName,
|
|
179
200
|
attachmentFileExtension: attachmentFileExtension.slice(1),
|
|
180
201
|
attachmentFileStats: attachmentFile?.stat,
|
|
@@ -208,7 +229,7 @@ function getAttachmentFolderPathSyncOrNull(params) {
|
|
|
208
229
|
app,
|
|
209
230
|
notePathOrFile
|
|
210
231
|
} = params;
|
|
211
|
-
return
|
|
232
|
+
return findCustomAttachmentLocationApi() ? null : (0, import_implementations.parentFolderPath)(getAttachmentFilePathSync({
|
|
212
233
|
app,
|
|
213
234
|
notePathOrFile,
|
|
214
235
|
oldAttachmentPathOrFile: DUMMY_PATH,
|
|
@@ -227,8 +248,9 @@ async function getAvailablePathForAttachments(params) {
|
|
|
227
248
|
}
|
|
228
249
|
return getAvailablePathForAttachmentsSync(params);
|
|
229
250
|
}
|
|
230
|
-
function getCheckIsAttachmentUnitFolderFunction(
|
|
231
|
-
|
|
251
|
+
function getCheckIsAttachmentUnitFolderFunction(_app) {
|
|
252
|
+
const customAttachmentLocationApi = findCustomAttachmentLocationApi();
|
|
253
|
+
return customAttachmentLocationApi ? (folderPath) => customAttachmentLocationApi.isAttachmentUnitFolder({ folderPath }) : void 0;
|
|
232
254
|
}
|
|
233
255
|
async function hasOwnAttachmentFolder(params) {
|
|
234
256
|
const {
|
|
@@ -287,6 +309,13 @@ async function isAtProperAttachmentPath(params) {
|
|
|
287
309
|
const deduplicationSuffix = currentBaseName.slice(deduplicationPrefix.length);
|
|
288
310
|
return /^\d+$/.test(deduplicationSuffix);
|
|
289
311
|
}
|
|
312
|
+
function findCustomAttachmentLocationApi() {
|
|
313
|
+
return (0, import_plugin_api.findPluginApi)({
|
|
314
|
+
apiVersionRange: CUSTOM_ATTACHMENT_LOCATION_ATTACHMENT_PATH_API_VERSION_RANGE,
|
|
315
|
+
contract: CUSTOM_ATTACHMENT_LOCATION_ATTACHMENT_PATH_API_CONTRACT,
|
|
316
|
+
pluginId: CUSTOM_ATTACHMENT_LOCATION_PLUGIN_ID
|
|
317
|
+
});
|
|
318
|
+
}
|
|
290
319
|
function getAttachmentFilePathSync(params) {
|
|
291
320
|
const {
|
|
292
321
|
app,
|
|
@@ -320,8 +349,31 @@ function getAvailablePathForAttachmentsSync(params) {
|
|
|
320
349
|
fileExtension: attachmentFileExtension
|
|
321
350
|
}) : app.vault.getAvailablePath(prefix + attachmentFileBaseName, attachmentFileExtension);
|
|
322
351
|
}
|
|
323
|
-
function
|
|
324
|
-
return
|
|
352
|
+
function isBoolean(value) {
|
|
353
|
+
return typeof value === "boolean";
|
|
354
|
+
}
|
|
355
|
+
function isCustomAttachmentLocationIsAttachmentUnitFolderParams(value) {
|
|
356
|
+
return typeof value === "object" && value !== null && typeof Reflect.get(value, "folderPath") === "string";
|
|
357
|
+
}
|
|
358
|
+
function isGetAvailablePathForAttachmentsExtendedFunctionParams(value) {
|
|
359
|
+
if (typeof value !== "object" || value === null) {
|
|
360
|
+
return false;
|
|
361
|
+
}
|
|
362
|
+
function read(key) {
|
|
363
|
+
return Reflect.get(value, key);
|
|
364
|
+
}
|
|
365
|
+
const attachmentFileStats = read("attachmentFileStats");
|
|
366
|
+
const context = read("context");
|
|
367
|
+
const notePathOrFile = read("notePathOrFile");
|
|
368
|
+
const oldNotePathOrFile = read("oldNotePathOrFile");
|
|
369
|
+
const readAttachmentFileContent = read("readAttachmentFileContent");
|
|
370
|
+
return typeof read("attachmentFileBaseName") === "string" && typeof read("attachmentFileExtension") === "string" && (attachmentFileStats === void 0 || typeof attachmentFileStats === "object" && attachmentFileStats !== null) && Object.values(AttachmentPathContext).includes(context) && (notePathOrFile === null || (0, import_file_system.isPathOrFile)(notePathOrFile)) && (0, import_file_system.isPathOrFile)(read("oldAttachmentPathOrFile")) && (oldNotePathOrFile === void 0 || (0, import_file_system.isPathOrFile)(oldNotePathOrFile)) && (readAttachmentFileContent === null || typeof readAttachmentFileContent === "function") && isOptionalBoolean(read("shouldSkipDuplicateCheck")) && isOptionalBoolean(read("shouldSkipGeneratedAttachmentFileName")) && isOptionalBoolean(read("shouldSkipMissingAttachmentFolderCreation"));
|
|
371
|
+
}
|
|
372
|
+
function isOptionalBoolean(value) {
|
|
373
|
+
return value === void 0 || isBoolean(value);
|
|
374
|
+
}
|
|
375
|
+
function isString(value) {
|
|
376
|
+
return typeof value === "string";
|
|
325
377
|
}
|
|
326
378
|
function normalizeSlashes(path) {
|
|
327
379
|
path = (0, import_string.replaceAll)({
|
|
@@ -367,6 +419,7 @@ function resolveAttachmentFolder(params) {
|
|
|
367
419
|
// Annotate the CommonJS export names for ESM import in node:
|
|
368
420
|
0 && (module.exports = {
|
|
369
421
|
AttachmentPathContext,
|
|
422
|
+
CUSTOM_ATTACHMENT_LOCATION_PLUGIN_ID,
|
|
370
423
|
DUMMY_PATH,
|
|
371
424
|
getAttachmentFilePath,
|
|
372
425
|
getAttachmentFolderPath,
|
|
@@ -376,4 +429,4 @@ function resolveAttachmentFolder(params) {
|
|
|
376
429
|
hasOwnAttachmentFolder,
|
|
377
430
|
isAtProperAttachmentPath
|
|
378
431
|
});
|
|
379
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2F0dGFjaG1lbnQtcGF0aC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggYXR0YWNobWVudCBwYXRocy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgRmlsZVN0YXRzLFxuICBURm9sZGVyLFxuICBWYXVsdFxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB7XG4gIGJhc2VuYW1lLFxuICBkaXJuYW1lLFxuICBleHRuYW1lLFxuICBqb2luLFxuICBtYWtlRmlsZU5hbWVcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHtcbiAgbm9ybWFsaXplU3RyaW5nLFxuICByZXBsYWNlQWxsLFxuICB0cmltU3RhcnRcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3N0cmluZyc7XG5pbXBvcnQge1xuICBnZXREYXRhQWRhcHRlckV4LFxuICBwYXJlbnRGb2xkZXJQYXRoXG59IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QvaW1wbGVtZW50YXRpb25zJztcblxuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5cbmltcG9ydCB7XG4gIGdldEZpbGUsXG4gIGdldEZpbGVPck51bGwsXG4gIGdldEZvbGRlcixcbiAgZ2V0Rm9sZGVyT3JOdWxsLFxuICBnZXRQYXRoLFxuICBNQVJLRE9XTl9GSUxFX0VYVEVOU0lPTlxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcblxuLyoqXG4gKiBBIGNvbnRleHQgZm9yIGFuIGF0dGFjaG1lbnQgcGF0aC5cbiAqL1xuZXhwb3J0IGVudW0gQXR0YWNobWVudFBhdGhDb250ZXh0IHtcbiAgLyoqXG4gICAqIEEgY29udGV4dCBmb3IgYSBkZWxldGUgbm90ZS5cbiAgICovXG4gIERlbGV0ZU5vdGUgPSAnRGVsZXRlTm90ZScsXG5cbiAgLyoqXG4gICAqIEEgY29udGV4dCBmb3IgYSByZW5hbWUgbm90ZS5cbiAgICovXG4gIFJlbmFtZU5vdGUgPSAnUmVuYW1lTm90ZScsXG5cbiAgLyoqXG4gICAqIEFuIHVua25vd24gY29udGV4dC5cbiAgICovXG4gIFVua25vd24gPSAnVW5rbm93bidcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgZ2V0IGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cyBleHRlbmRlZCBmdW5jdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNFeHRlbmRlZEZ1bmN0aW9uUGFyYW1zIHtcbiAgLyoqXG4gICAqIEEgYmFzZSBuYW1lIG9mIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudEZpbGVCYXNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbiBleHRlbnNpb24gb2YgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50RmlsZUV4dGVuc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIHN0YXRzIG9mIHRoZSBhdHRhY2htZW50IGZpbGUuXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50RmlsZVN0YXRzPzogRmlsZVN0YXRzIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBBIGNvbnRleHQuXG4gICAqL1xuICByZWFkb25seSBjb250ZXh0OiBBdHRhY2htZW50UGF0aENvbnRleHQ7XG5cbiAgLyoqXG4gICAqIEEgcGF0aCBvciBmaWxlIG9mIHRoZSBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90ZVBhdGhPckZpbGU6IG51bGwgfCBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBBIHBhdGggb3IgZmlsZSBvZiB0aGUgb2xkIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBvbGRBdHRhY2htZW50UGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogQSBwYXRoIG9yIGZpbGUgb2YgdGhlIG9sZCBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkTm90ZVBhdGhPckZpbGU/OiBQYXRoT3JGaWxlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBMYXppbHkgcmVhZHMgdGhlIGNvbnRlbnQgb2YgdGhlIGF0dGFjaG1lbnQgZmlsZS5cbiAgICpcbiAgICogVGhlIGNvbnRlbnQgaXMgcmVhZCBvbiBkZW1hbmQgb25seSB3aGVuIGEgY29uc3VtZXIgYWN0dWFsbHkgbmVlZHMgdGhlIGJ5dGVzIChlLmcuIGEgdGVtcGxhdGVcbiAgICogdG9rZW4gdGhhdCBlbWJlZHMgdGhlbSkuIEZvciB0aGUgZGVmYXVsdCB0ZW1wbGF0ZXMgbm90aGluZyBwdWxscyB0aGUgYnl0ZXMsIHNvIHRoZSBwb3RlbnRpYWxseVxuICAgKiBleHBlbnNpdmUgKHNpemUtcHJvcG9ydGlvbmFsKSBgcmVhZEJpbmFyeWAgbmV2ZXIgcnVucy4gQ29uc3VtZXJzIHRoYXQgbWF5IGNhbGwgdGhpcyBtb3JlIHRoYW5cbiAgICogb25jZSBzaG91bGQgbWVtb2l6ZSB0aGUgZmlyc3QgY2FsbC4gYG51bGxgIHdoZW4gdGhlcmUgaXMgbm8gYXR0YWNobWVudCBmaWxlIHRvIHJlYWQuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGNvbnRlbnQgb2YgdGhlIGF0dGFjaG1lbnQgZmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IHJlYWRBdHRhY2htZW50RmlsZUNvbnRlbnQ6ICgoKSA9PiBQcm9taXNlPEFycmF5QnVmZmVyPikgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBTaG91bGQgdGhlIGR1cGxpY2F0ZSBjaGVjayBiZSBza2lwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2hvdWxkIHRoZSBnZW5lcmF0ZWQgYXR0YWNobWVudCBmaWxlIG5hbWUgYmUgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBHZW5lcmF0ZWRBdHRhY2htZW50RmlsZU5hbWU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTaG91bGQgbWlzc2luZyBhdHRhY2htZW50IGZvbGRlciBjcmVhdGlvbiBiZSBza2lwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2tpcE1pc3NpbmdBdHRhY2htZW50Rm9sZGVyQ3JlYXRpb246IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICoge0BsaW5rIFZhdWx0LmdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c30gZXh0ZW5kZWQgd3JhcHBlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNGdW5jdGlvbkV4dGVuZGVkIGV4dGVuZHMgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRnVuY3Rpb24ge1xuICAvKipcbiAgICogV2hldGhlciBhIGZvbGRlciBwYXRoIGlzIGRlc2lnbmF0ZWQgYXMgYW4gYXR0YWNobWVudCB1bml0IFx1MjAxNCBhIGZvbGRlciB0aGF0IG11c3QgdHJhdmVsIHdob2xlIHJhdGhlclxuICAgKiB0aGFuIGhhdmUgdGhlIGxpbmtlZCBmaWxlIHJlbG9jYXRlZCBvdXQgb2YgaXQuXG4gICAqXG4gICAqIE9wdGlvbmFsOiBhbiBhdHRhY2htZW50LWxvY2F0aW9uIHBsdWdpbiBtYXkgb3duIHRoZSByZXNvbHV0aW9uIHdpdGhvdXQgZGVzaWduYXRpbmcgYW55dGhpbmcsIGFuZCBhblxuICAgKiBhYnNlbnQgbWVtYmVyIGlzIHRoZSBzYW1lIFwibm9ib2R5IG93bnMgdGhpcyBwb2xpY3lcIiBhbnN3ZXIge0BsaW5rIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0Z1bmN0aW9uRXh0ZW5kZWQuZXh0ZW5kZWR9XG4gICAqIGl0c2VsZiBnaXZlcy5cbiAgICpcbiAgICogQHBhcmFtIGZvbGRlclBhdGggLSBUaGUgdmF1bHQtcmVsYXRpdmUgcGF0aCBvZiB0aGUgZm9sZGVyLlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGZvbGRlciBpcyBkZXNpZ25hdGVkIGFzIGFuIGF0dGFjaG1lbnQgdW5pdCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICBjaGVja0lzQXR0YWNobWVudFVuaXRGb2xkZXI/OiAoZm9sZGVyUGF0aDogc3RyaW5nKSA9PiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBHZXQgYXZhaWxhYmxlIHBhdGggZm9yIGF0dGFjaG1lbnRzIHdpdGggYWRkaXRpb25hbCBwYXJhbXMuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIGZvciB0aGUgZ2V0IGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cy5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgYXZhaWxhYmxlIHBhdGggZm9yIGF0dGFjaG1lbnRzLlxuICAgKi9cbiAgZXh0ZW5kZWQ6IChwYXJhbXM6IEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0V4dGVuZGVkRnVuY3Rpb25QYXJhbXMpID0+IFByb21pc2U8c3RyaW5nPjtcbn1cblxudHlwZSBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNGdW5jdGlvbiA9IFZhdWx0WydnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHMnXTtcblxuLyoqXG4gKiBEdW1teSBwYXRoLlxuICovXG5leHBvcnQgY29uc3QgRFVNTVlfUEFUSCA9ICdfX0RVTU1ZX18nO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBnZXRBdHRhY2htZW50RmlsZVBhdGggZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXR0YWNobWVudEZpbGVQYXRoUGFyYW1zIHtcbiAgLyoqXG4gICAqIEFuIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIEEgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IEF0dGFjaG1lbnRQYXRoQ29udGV4dDtcblxuICAvKipcbiAgICogQSBwYXRoIG9mIHRoZSBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90ZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIEEgcGF0aCBvZiB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBBIHBhdGggb2YgdGhlIG9sZCBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkTm90ZVBhdGhPckZpbGU/OiBQYXRoT3JGaWxlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTaG91bGQgdGhlIGR1cGxpY2F0ZSBjaGVjayBiZSBza2lwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXR0YWNobWVudEZvbGRlclBhdGhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZXh0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgQXR0YWNobWVudFBhdGhDb250ZXh0LlVua25vd259XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0PzogQXR0YWNobWVudFBhdGhDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aFN5bmNPck51bGx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEF0dGFjaG1lbnRGb2xkZXJQYXRoU3luY09yTnVsbFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBub3RlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgZ2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuICAvKipcbiAgICogQSBiYXNlIG5hbWUgb2YgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50RmlsZUJhc2VOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBbiBleHRlbnNpb24gb2YgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50RmlsZUV4dGVuc2lvbjogc3RyaW5nO1xuICAvKipcbiAgICogQSBmaWxlIHRvIGF0dGFjaCB0by5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBudWxsIHwgUGF0aE9yRmlsZTtcbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgZHVwbGljYXRlIGNoZWNrIGJlIHNraXBwZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBEdXBsaWNhdGVDaGVjaz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTaG91bGQgbWlzc2luZyBhdHRhY2htZW50IGZvbGRlciBjcmVhdGlvbiBiZSBza2lwcGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwTWlzc2luZ0F0dGFjaG1lbnRGb2xkZXJDcmVhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGhhc093bkF0dGFjaG1lbnRGb2xkZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhhc093bkF0dGFjaG1lbnRGb2xkZXJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZXh0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgQXR0YWNobWVudFBhdGhDb250ZXh0LlVua25vd259XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0PzogQXR0YWNobWVudFBhdGhDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgaXNBdFByb3BlckF0dGFjaG1lbnRQYXRofS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc0F0UHJvcGVyQXR0YWNobWVudFBhdGhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIGF0dGFjaG1lbnQgdG8gY2hlY2suXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50UGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIGNvbnRleHQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBBdHRhY2htZW50UGF0aENvbnRleHQuVW5rbm93bn1cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ/OiBBdHRhY2htZW50UGF0aENvbnRleHQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIG5vdGUgdGhhdCByZWZlcmVuY2VzIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgbm90ZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldEF0dGFjaG1lbnRGaWxlUGF0aFN5bmN9LlxuICovXG5pbnRlcmZhY2UgR2V0QXR0YWNobWVudEZpbGVQYXRoU3luY1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBBIHBhdGggb2YgdGhlIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBub3RlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogQSBwYXRoIG9mIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkQXR0YWNobWVudFBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgZHVwbGljYXRlIGNoZWNrIGJlIHNraXBwZWQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2s6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c1N5bmN9LlxuICovXG5pbnRlcmZhY2UgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzU3luY1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBBIGJhc2UgbmFtZSBvZiB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGF0dGFjaG1lbnRGaWxlQmFzZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXh0ZW5zaW9uIG9mIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudEZpbGVFeHRlbnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogQSBmaWxlIHRvIGF0dGFjaCB0by5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBudWxsIHwgUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogU2hvdWxkIHRoZSBkdXBsaWNhdGUgY2hlY2sgYmUgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBEdXBsaWNhdGVDaGVjaz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVBdHRhY2htZW50Rm9sZGVyfS5cbiAqL1xuaW50ZXJmYWNlIFJlc29sdmVBdHRhY2htZW50Rm9sZGVyUGFyYW1zIHtcbiAgLyoqXG4gICAqIEFuIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIEEgZmlsZSB0byBhdHRhY2ggdG8uXG4gICAqL1xuICByZWFkb25seSBub3RlUGF0aE9yRmlsZTogbnVsbCB8IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogVGhlIGF0dGFjaG1lbnQgZm9sZGVyIGEgbm90ZSByZXNvbHZlcyB0bywgYmVmb3JlIHRoZSBhdHRhY2htZW50IGZpbGUgbmFtZSBpcyBhcHBlbmRlZC5cbiAqL1xuaW50ZXJmYWNlIFJlc29sdmVBdHRhY2htZW50Rm9sZGVyUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBhdHRhY2htZW50IGZvbGRlciwgb3IgYG51bGxgIHdoZW4gaXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHZhdWx0IHlldC5cbiAgICovXG4gIHJlYWRvbmx5IGZvbGRlcjogbnVsbCB8IFRGb2xkZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBub3JtYWxpemVkIGF0dGFjaG1lbnQgZm9sZGVyIHBhdGgsIHdoZXRoZXIgb3Igbm90IHRoZSBmb2xkZXIgZXhpc3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFydCBvZiB0aGUgYGF0dGFjaG1lbnRGb2xkZXJQYXRoYCBzZXR0aW5nIHRoYXQgZm9sbG93cyBgLi9gLCBvciBgbnVsbGAgd2hlbiB0aGUgc2V0dGluZyBpcyBub3RcbiAgICogcmVsYXRpdmUgdG8gdGhlIG5vdGUuIE9ubHkgYSByZWxhdGl2ZSBzZXR0aW5nIG1heSBoYXZlIGl0cyBtaXNzaW5nIGZvbGRlciBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVsYXRpdmVQYXRoOiBudWxsIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZmlsZSBwYXRoIGZvciBhbiBhdHRhY2htZW50IHdpdGhpbiBhIG5vdGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBnZXQgYXR0YWNobWVudCBmaWxlIHBhdGggZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBmaWxlIHBhdGggb2YgdGhlIGF0dGFjaG1lbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBdHRhY2htZW50RmlsZVBhdGgocGFyYW1zOiBHZXRBdHRhY2htZW50RmlsZVBhdGhQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgIG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlLFxuICAgIHNob3VsZFNraXBEdXBsaWNhdGVDaGVja1xuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGV4dGVuZGVkRnVuY3Rpb24gPSBnZXRFeHRlbmRlZEZ1bmN0aW9uKGFwcCk7XG4gIGlmICghZXh0ZW5kZWRGdW5jdGlvbikge1xuICAgIC8vIE5vYm9keSBvdmVycmlkZXMgdGhlIHJlc29sdXRpb24sIHNvIGl0IGlzIGVudGlyZWx5IHN5bmNocm9ub3VzLlxuICAgIC8vIFRoZSBzYW1lIGNvcmUgYW5zd2VycyBgZ2V0QXR0YWNobWVudEZvbGRlclBhdGhTeW5jT3JOdWxsYCwgd2hpY2ggaXMgd2hhdCBrZWVwcyB0aGUgdHdvIGluIHN0ZXAuXG4gICAgcmV0dXJuIGdldEF0dGFjaG1lbnRGaWxlUGF0aFN5bmMoe1xuICAgICAgYXBwLFxuICAgICAgbm90ZVBhdGhPckZpbGUsXG4gICAgICBvbGRBdHRhY2htZW50UGF0aE9yRmlsZSxcbiAgICAgIHNob3VsZFNraXBEdXBsaWNhdGVDaGVja1xuICAgIH0pO1xuICB9XG5cbiAgY29uc3QgYXR0YWNobWVudFBhdGggPSBnZXRQYXRoKGFwcCwgb2xkQXR0YWNobWVudFBhdGhPckZpbGUpO1xuICBjb25zdCBhdHRhY2htZW50RmlsZUV4dGVuc2lvbiA9IGV4dG5hbWUoYXR0YWNobWVudFBhdGgpO1xuICBjb25zdCBhdHRhY2htZW50RmlsZUJhc2VOYW1lID0gYmFzZW5hbWUoYXR0YWNobWVudFBhdGgsIGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uKTtcbiAgY29uc3QgYXR0YWNobWVudEZpbGUgPSBnZXRGaWxlT3JOdWxsKHsgYXBwLCBwYXRoT3JGaWxlOiBhdHRhY2htZW50UGF0aCB9KTtcblxuICByZXR1cm4gYXdhaXQgZXh0ZW5kZWRGdW5jdGlvbih7XG4gICAgYXR0YWNobWVudEZpbGVCYXNlTmFtZSxcbiAgICBhdHRhY2htZW50RmlsZUV4dGVuc2lvbjogYXR0YWNobWVudEZpbGVFeHRlbnNpb24uc2xpY2UoMSksXG4gICAgYXR0YWNobWVudEZpbGVTdGF0czogYXR0YWNobWVudEZpbGU/LnN0YXQsXG4gICAgY29udGV4dDogcGFyYW1zLmNvbnRleHQsXG4gICAgbm90ZVBhdGhPckZpbGUsXG4gICAgb2xkQXR0YWNobWVudFBhdGhPckZpbGUsXG4gICAgb2xkTm90ZVBhdGhPckZpbGU6IHBhcmFtcy5vbGROb3RlUGF0aE9yRmlsZSxcbiAgICByZWFkQXR0YWNobWVudEZpbGVDb250ZW50OiBhdHRhY2htZW50RmlsZSA/ICgpOiBQcm9taXNlPEFycmF5QnVmZmVyPiA9PiBhcHAudmF1bHQucmVhZEJpbmFyeShhdHRhY2htZW50RmlsZSkgOiBudWxsLFxuICAgIHNob3VsZFNraXBEdXBsaWNhdGVDaGVjayxcbiAgICBzaG91bGRTa2lwTWlzc2luZ0F0dGFjaG1lbnRGb2xkZXJDcmVhdGlvbjogdHJ1ZVxuICB9KTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGF0dGFjaG1lbnQgZm9sZGVyIHBhdGggZm9yIGEgZ2l2ZW4gbm90ZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBmb3IgdGhlIGdldCBhdHRhY2htZW50IGZvbGRlciBwYXRoIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgYXR0YWNobWVudCBmb2xkZXIgcGF0aC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHBhcmFtczogR2V0QXR0YWNobWVudEZvbGRlclBhdGhQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGNvbnRleHQgPSBBdHRhY2htZW50UGF0aENvbnRleHQuVW5rbm93bixcbiAgICBub3RlUGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuICByZXR1cm4gcGFyZW50Rm9sZGVyUGF0aChcbiAgICBhd2FpdCBnZXRBdHRhY2htZW50RmlsZVBhdGgoe1xuICAgICAgYXBwLFxuICAgICAgY29udGV4dCxcbiAgICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgICAgb2xkQXR0YWNobWVudFBhdGhPckZpbGU6IERVTU1ZX1BBVEgsXG4gICAgICBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2s6IHRydWVcbiAgICB9KVxuICApO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYXR0YWNobWVudCBmb2xkZXIgcGF0aCBmb3IgYSBnaXZlbiBub3RlICoqc3luY2hyb25vdXNseSoqLCB3aGVuIHRoYXQgaXMgcG9zc2libGUgYXQgYWxsLlxuICpcbiAqIE9ic2lkaWFuIGJ1aWxkcyBpdHMgZmlsZS9mb2xkZXIgY29udGV4dCBtZW51cyBhbmQgZXZhbHVhdGVzIGEgY29tbWFuZCdzIGBjaGVja0NhbGxiYWNrYCBzeW5jaHJvbm91c2x5LCBzbyBhXG4gKiBjYWxsZXIgZGVjaWRpbmcgd2hldGhlciB0byBtZXJlbHkgKm9mZmVyKiBhIGNvbW1hbmQgY2Fubm90IGF3YWl0IHtAbGluayBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aH0uIFRoaXMgaXNcbiAqIHRoZSBzeW5jaHJvbm91cyB0d2luIHN1Y2ggYSBjYWxsZXIgY2FuIHVzZSBpbnN0ZWFkLlxuICpcbiAqIFRoZSBhbnN3ZXIgaXMgYG51bGxgIHdoZW4gaXQgaXMgbm90IGtub3dhYmxlIHN5bmNocm9ub3VzbHkgXHUyMDE0IHRoYXQgaXMsIHdoZW4gYSBwbHVnaW4gaW5zdGFsbGVkXG4gKiB7QGxpbmsgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRnVuY3Rpb25FeHRlbmRlZC5leHRlbmRlZH0gYW5kIHRoZXJlZm9yZSBvd25zIHRoZSByZXNvbHV0aW9uLCB3aGljaCBpc1xuICogZ2VudWluZWx5IGFzeW5jaHJvbm91cy4gYG51bGxgIG1lYW5zIFwiYXNrIHtAbGluayBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aH1cIiwgbmV2ZXIgXCJ0aGVyZSBpcyBubyBhdHRhY2htZW50XG4gKiBmb2xkZXJcIi4gT3RoZXJ3aXNlIHRoZSBhbnN3ZXIgaXMgZXhhY3QgcmF0aGVyIHRoYW4gYSBndWVzczogaXQgaXMgcHJvZHVjZWQgYnkgdGhlIHZlcnkgc2FtZSBjb2RlXG4gKiB7QGxpbmsgZ2V0QXR0YWNobWVudEZvbGRlclBhdGh9IHJ1bnMsIHdob3NlIG9ubHkgYXN5bmNocm9ub3VzIHN0ZXAgXHUyMDE0IGNyZWF0aW5nIGEgbWlzc2luZyBhdHRhY2htZW50IGZvbGRlciBcdTIwMTRcbiAqIGlzIHVucmVhY2hhYmxlIG9uIHRoaXMgcGF0aC5cbiAqXG4gKiBUaGVyZSBpcyBkZWxpYmVyYXRlbHkgbm8gYGNvbnRleHRgIHBhcmFtZXRlcjoge0BsaW5rIEF0dGFjaG1lbnRQYXRoQ29udGV4dH0gb25seSBldmVyIHJlYWNoZXMgYW5cbiAqIHtAbGluayBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNGdW5jdGlvbkV4dGVuZGVkLmV4dGVuZGVkfSBvdmVycmlkZSwgYW5kIHRoaXMgZnVuY3Rpb24gYW5zd2VycyBgbnVsbGBcbiAqIHdoZW5ldmVyIG9uZSBpcyBpbnN0YWxsZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBnZXQgYXR0YWNobWVudCBmb2xkZXIgcGF0aCBzeW5jIG9yIG51bGwgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBUaGUgYXR0YWNobWVudCBmb2xkZXIgcGF0aCwgb3IgYG51bGxgIHdoZW4gaXQgY2FuIG9ubHkgYmUgcmVzb2x2ZWQgYXN5bmNocm9ub3VzbHkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aFN5bmNPck51bGwocGFyYW1zOiBHZXRBdHRhY2htZW50Rm9sZGVyUGF0aFN5bmNPck51bGxQYXJhbXMpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBub3RlUGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuXG4gIHJldHVybiBnZXRFeHRlbmRlZEZ1bmN0aW9uKGFwcClcbiAgICA/IG51bGxcbiAgICA6IHBhcmVudEZvbGRlclBhdGgoZ2V0QXR0YWNobWVudEZpbGVQYXRoU3luYyh7XG4gICAgICBhcHAsXG4gICAgICBub3RlUGF0aE9yRmlsZSxcbiAgICAgIG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlOiBEVU1NWV9QQVRILFxuICAgICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrOiB0cnVlXG4gICAgfSkpO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYXZhaWxhYmxlIHBhdGggZm9yIGF0dGFjaG1lbnRzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIGZvciB0aGUgZ2V0IGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50cyhwYXJhbXM6IEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c1BhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbm90ZVBhdGhPckZpbGUsXG4gICAgc2hvdWxkU2tpcE1pc3NpbmdBdHRhY2htZW50Rm9sZGVyQ3JlYXRpb25cbiAgfSA9IHBhcmFtcztcblxuICAvLyBNYXRlcmlhbGl6aW5nIGEgbWlzc2luZyBhdHRhY2htZW50IGZvbGRlciBpcyB0aGUgT05FIGdlbnVpbmVseSBhc3luY2hyb25vdXMgc3RlcCBpbiB0aGlzIGZ1bmN0aW9uLlxuICAvLyBFdmVyeXRoaW5nIGVsc2UgbGl2ZXMgaW4gdGhlIHN5bmNocm9ub3VzIGNvcmUsIHdoaWNoIHRoZSBzeW5jaHJvbm91cyBlbnRyeSBwb2ludHMgcmV1c2UgdmVyYmF0aW0uXG4gIGNvbnN0IGF0dGFjaG1lbnRGb2xkZXIgPSByZXNvbHZlQXR0YWNobWVudEZvbGRlcih7IGFwcCwgbm90ZVBhdGhPckZpbGUgfSk7XG4gIGlmICghYXR0YWNobWVudEZvbGRlci5mb2xkZXIgJiYgYXR0YWNobWVudEZvbGRlci5yZWxhdGl2ZVBhdGggJiYgIXNob3VsZFNraXBNaXNzaW5nQXR0YWNobWVudEZvbGRlckNyZWF0aW9uKSB7XG4gICAgYXdhaXQgYXBwLnZhdWx0LmNyZWF0ZUZvbGRlcihhdHRhY2htZW50Rm9sZGVyLnBhdGgpO1xuICB9XG5cbiAgcmV0dXJuIGdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c1N5bmMocGFyYW1zKTtcbn1cblxuLyoqXG4gKiBSZWFkcyB0aGUgYXR0YWNobWVudC11bml0LWZvbGRlciBkZXNpZ25hdGlvbiBhbiBhdHRhY2htZW50LWxvY2F0aW9uIHBsdWdpbiBwdWJsaXNoZWQgb24gdGhlIHZhdWx0LlxuICpcbiAqIFRoZSBkZXNpZ25hdGlvbiBpcyBvbmUgcGx1Z2luJ3Mgc2V0dGluZyBidXQgZXZlcnkgcmVsb2NhdGluZyBwbHVnaW4ncyBidXNpbmVzcywgc28gaXQgcmlkZXMgdGhlIHNhbWUgc2VhbVxuICogdGhhdCBhbHJlYWR5IGNhcnJpZXMgdGhhdCBraW5kIG9mIGFuc3dlcjogYSBtZW1iZXIgaHVuZyBvZmYgdGhlIHBhdGNoZWRcbiAqIHtAbGluayBWYXVsdC5nZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHN9LiBSZWFkaW5nIGl0IGhlcmUgcmF0aGVyIHRoYW4gY29uc3VsdGluZyBhbnkgb25lIHBsdWdpbidzXG4gKiBzZXR0aW5ncyBpcyB0aGUgcG9pbnQgXHUyMDE0IGEgZm9sZGVyIGtlcHQgd2hvbGUgYnkgb25lIHBsdWdpbiBhbmQgdG9ybiBhcGFydCBieSBhbm90aGVyIGlzIGV4YWN0bHkgdGhlIGZhaWx1cmVcbiAqIGBmaW5kQXR0YWNobWVudFVuaXRGb2xkZXJQYXRoYCBleGlzdHMgdG8gcHJldmVudC5cbiAqXG4gKiBgdW5kZWZpbmVkYCBtZWFucyBub2JvZHkgcHVibGlzaGVkIGEgZGVzaWduYXRpb24sIHRoZSBzYW1lIFwibm9ib2R5IG93bnMgdGhpcyBwb2xpY3lcIiBhbnN3ZXIgdGhlXG4gKiB7QGxpbmsgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRnVuY3Rpb25FeHRlbmRlZC5leHRlbmRlZH0gbWVtYmVyIGdpdmVzLiBJdCBpcyBkaXN0aW5jdCBmcm9tIGFcbiAqIGRlc2lnbmF0aW9uIHRoYXQgYW5zd2VycyBgZmFsc2VgIGZvciBldmVyeSBmb2xkZXIuXG4gKlxuICogQHBhcmFtIGFwcCAtIEFuIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHJldHVybnMgVGhlIGRlc2lnbmF0aW9uIHByZWRpY2F0ZSwgb3IgYHVuZGVmaW5lZGAgd2hlbiBub2JvZHkgcHVibGlzaGVkIG9uZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENoZWNrSXNBdHRhY2htZW50VW5pdEZvbGRlckZ1bmN0aW9uKGFwcDogQXBwKTogR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRnVuY3Rpb25FeHRlbmRlZFsnY2hlY2tJc0F0dGFjaG1lbnRVbml0Rm9sZGVyJ10ge1xuICByZXR1cm4gKGFwcC52YXVsdC5nZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHMgYXMgUGFydGlhbDxHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNGdW5jdGlvbkV4dGVuZGVkPikuY2hlY2tJc0F0dGFjaG1lbnRVbml0Rm9sZGVyO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbm90ZSdzIGF0dGFjaG1lbnQgZm9sZGVyIGlzIHNwZWNpZmljIHRvIHRoYXQgbm90ZSByYXRoZXIgdGhhbiBzaGFyZWQgd2l0aCBpdHMgc2libGluZ3MuXG4gKlxuICogVGhlIGFuc3dlciBpcyBkZXJpdmVkIGJ5IGNvbXBhcmluZyB0aGUgbm90ZSdzIGF0dGFjaG1lbnQgZm9sZGVyIHdpdGggdGhlIG9uZSBhIHNhbWUtZm9sZGVyIHNpYmxpbmcgbm90ZVxuICogd291bGQgZ2V0OiB0aGV5IGRpZmZlciBvbmx5IHdoZW4gdGhlIGZvbGRlciBkZXBlbmRzIG9uIHRoZSBub3RlJ3MgTkFNRS4gRXZlcnkgYnVpbHQtaW5cbiAqIGBhdHRhY2htZW50Rm9sZGVyUGF0aGAgbW9kZSBcdTIwMTQgdGhlIHZhdWx0IHJvb3QsIGEgZml4ZWQgZm9sZGVyLCB0aGUgbm90ZSdzIG93biBmb2xkZXIgKGAuL2ApLCBhIHN1YmZvbGRlciBvZlxuICogdGhlIG5vdGUncyBmb2xkZXIgKGAuL3N1YmApIFx1MjAxNCBpcyBzaGFyZWQgYnkgZXZlcnkgbm90ZSBpbiB0aGF0IGZvbGRlciwgc28gaXQgYW5zd2VycyBgZmFsc2VgOyBgdHJ1ZWAgYXJpc2VzXG4gKiBmcm9tIGEge0BsaW5rIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0Z1bmN0aW9uRXh0ZW5kZWQuZXh0ZW5kZWR9IG92ZXJyaWRlIHRoYXQgZGVyaXZlcyB0aGUgZm9sZGVyIGZyb20gdGhlXG4gKiBub3RlJ3MgbmFtZSAod2hhdCBhbiBhdHRhY2htZW50LWxvY2F0aW9uIHBsdWdpbiBwcm9kdWNlcykuXG4gKlxuICogVGhpcyBpcyB0aGUgZGlzdGluY3Rpb24gYSBjYWxsZXIgbmVlZHMgYmVmb3JlIHN3ZWVwaW5nIGFuIGF0dGFjaG1lbnQgZm9sZGVyIHdob2xlc2FsZTogb25seSBhXG4gKiBub3RlLXNwZWNpZmljIGZvbGRlciBjYW4gYmUgdHJlYXRlZCBhcyBiZWxvbmdpbmcgdG8gdGhlIG5vdGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBoYXMgb3duIGF0dGFjaG1lbnQgZm9sZGVyIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBub3RlIGhhcyBpdHMgb3duIGF0dGFjaG1lbnQgZm9sZGVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFzT3duQXR0YWNobWVudEZvbGRlcihwYXJhbXM6IEhhc093bkF0dGFjaG1lbnRGb2xkZXJQYXJhbXMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBjb250ZXh0ID0gQXR0YWNobWVudFBhdGhDb250ZXh0LlVua25vd24sXG4gICAgcGF0aFxuICB9ID0gcGFyYW1zO1xuICBjb25zdCBhdHRhY2htZW50Rm9sZGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHtcbiAgICBhcHAsXG4gICAgY29udGV4dCxcbiAgICBub3RlUGF0aE9yRmlsZTogcGF0aFxuICB9KTtcbiAgY29uc3QgZHVtbXlBdHRhY2htZW50Rm9sZGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoKHtcbiAgICBhcHAsXG4gICAgY29udGV4dCxcbiAgICBub3RlUGF0aE9yRmlsZTogam9pbihkaXJuYW1lKHBhdGgpLCBgJHtEVU1NWV9QQVRIfS4ke01BUktET1dOX0ZJTEVfRVhURU5TSU9OfWApXG4gIH0pO1xuICByZXR1cm4gYXR0YWNobWVudEZvbGRlclBhdGggIT09IGR1bW15QXR0YWNobWVudEZvbGRlclBhdGg7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYW4gYXR0YWNobWVudCBhbHJlYWR5IHNpdHMgYXQgaXRzIHByb3BlciBhdHRhY2htZW50IHBhdGguXG4gKlxuICogUmV0dXJucyBgdHJ1ZWAgd2hlbiB0aGUgYXR0YWNobWVudCdzIGN1cnJlbnQgcGF0aCBpcywgd2l0aGluIGl0cyBwcm9wZXIgYXR0YWNobWVudCBmb2xkZXIsIGVpdGhlciB0aGUgcHJvcGVyXG4gKiBiYXNlIG5hbWUgb3IgdGhlIHByb3BlciBiYXNlIG5hbWUgcGx1cyBhbiBPYnNpZGlhbiBkZWR1cGxpY2F0aW9uIHN1ZmZpeCAoYSBzcGFjZSBmb2xsb3dlZCBieSBkaWdpdHMsIGUuZy5cbiAqIGBpbWcgMWApIHdpdGggdGhlIHNhbWUgZXh0ZW5zaW9uLiBUaGUgcHJvcGVyIHBhdGggaXMgY29tcHV0ZWQgdmlhIHtAbGluayBnZXRBdHRhY2htZW50RmlsZVBhdGh9IHdpdGhcbiAqIHtAbGluayBHZXRBdHRhY2htZW50RmlsZVBhdGhQYXJhbXMuc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrfSBzZXQgdG8gYHRydWVgICh0aGUgdGFyZ2V0IGJlZm9yZSBhbnlcbiAqIGRlZHVwbGljYXRpb24gc3VmZml4KSwgYW5kIHRoZSBjb21wYXJpc29uIHJlc3BlY3RzIHRoZSBmaWxlIHN5c3RlbSBjYXNlLXNlbnNpdGl2aXR5IGZsYWdcbiAqIChgZ2V0RGF0YUFkYXB0ZXJFeChhcHApLmluc2Vuc2l0aXZlYCkgdGhhdCBgZ2V0U2FmZVJlbmFtZVBhdGhgIHVzZXMuXG4gKlxuICogVGhpcyBsZXRzIGEgY2FsbGVyIHJlY29nbml6ZSBhIGRlZHVwbGljYXRpb24tcGFya2VkIGF0dGFjaG1lbnQgYXMgYWxyZWFkeS1jb2xsZWN0ZWQsIHNvIGEgXCJuZWVkcyBtb3ZlP1wiXG4gKiBkZWNpc2lvbiBtYWRlIGFnYWluc3QgdGhlIGRlZHVwbGljYXRpb24tZnJlZSBwcm9wZXIgcGF0aCBjb252ZXJnZXMgaW5zdGVhZCBvZiByZS1zY2hlZHVsaW5nIHRoZSBmaWxlIGZvcmV2ZXIuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBpcyBhdCBwcm9wZXIgYXR0YWNobWVudCBwYXRoIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBgdHJ1ZWAgd2hlbiB0aGUgYXR0YWNobWVudCBpcyBhbHJlYWR5IGF0IGl0cyBwcm9wZXIgcGF0aC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzQXRQcm9wZXJBdHRhY2htZW50UGF0aChwYXJhbXM6IElzQXRQcm9wZXJBdHRhY2htZW50UGF0aFBhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGF0dGFjaG1lbnRQYXRoT3JGaWxlLFxuICAgIGNvbnRleHQgPSBBdHRhY2htZW50UGF0aENvbnRleHQuVW5rbm93bixcbiAgICBub3RlUGF0aE9yRmlsZVxuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGN1cnJlbnRQYXRoID0gZ2V0UGF0aChhcHAsIGF0dGFjaG1lbnRQYXRoT3JGaWxlKTtcbiAgY29uc3QgcHJvcGVyUGF0aCA9IGF3YWl0IGdldEF0dGFjaG1lbnRGaWxlUGF0aCh7XG4gICAgYXBwLFxuICAgIGNvbnRleHQsXG4gICAgbm90ZVBhdGhPckZpbGUsXG4gICAgb2xkQXR0YWNobWVudFBhdGhPckZpbGU6IGF0dGFjaG1lbnRQYXRoT3JGaWxlLFxuICAgIHNob3VsZFNraXBEdXBsaWNhdGVDaGVjazogdHJ1ZVxuICB9KTtcblxuICBjb25zdCBpc0luc2Vuc2l0aXZlID0gZ2V0RGF0YUFkYXB0ZXJFeChhcHApLmluc2Vuc2l0aXZlO1xuXG4gIGZ1bmN0aW9uIGZvbGQodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGlzSW5zZW5zaXRpdmUgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWU7XG4gIH1cblxuICBpZiAoZm9sZChkaXJuYW1lKGN1cnJlbnRQYXRoKSkgIT09IGZvbGQoZGlybmFtZShwcm9wZXJQYXRoKSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBjdXJyZW50RXh0ZW5zaW9uID0gZXh0bmFtZShjdXJyZW50UGF0aCk7XG4gIGNvbnN0IHByb3BlckV4dGVuc2lvbiA9IGV4dG5hbWUocHJvcGVyUGF0aCk7XG4gIGlmIChmb2xkKGN1cnJlbnRFeHRlbnNpb24pICE9PSBmb2xkKHByb3BlckV4dGVuc2lvbikpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBjdXJyZW50QmFzZU5hbWUgPSBiYXNlbmFtZShjdXJyZW50UGF0aCwgY3VycmVudEV4dGVuc2lvbik7XG4gIGNvbnN0IHByb3BlckJhc2VOYW1lID0gYmFzZW5hbWUocHJvcGVyUGF0aCwgcHJvcGVyRXh0ZW5zaW9uKTtcblxuICBpZiAoZm9sZChjdXJyZW50QmFzZU5hbWUpID09PSBmb2xkKHByb3BlckJhc2VOYW1lKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgZGVkdXBsaWNhdGlvblByZWZpeCA9IGAke3Byb3BlckJhc2VOYW1lfSBgO1xuICBpZiAoIWZvbGQoY3VycmVudEJhc2VOYW1lKS5zdGFydHNXaXRoKGZvbGQoZGVkdXBsaWNhdGlvblByZWZpeCkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZGVkdXBsaWNhdGlvblN1ZmZpeCA9IGN1cnJlbnRCYXNlTmFtZS5zbGljZShkZWR1cGxpY2F0aW9uUHJlZml4Lmxlbmd0aCk7XG4gIHJldHVybiAvXlxcZCskLy50ZXN0KGRlZHVwbGljYXRpb25TdWZmaXgpO1xufVxuXG4vKipcbiAqIFRoZSBzeW5jaHJvbm91cyBjb3JlIG9mIHtAbGluayBnZXRBdHRhY2htZW50RmlsZVBhdGh9LCByZWFjaGVkIHdoZW4gbm9ib2R5IGluc3RhbGxlZFxuICoge0BsaW5rIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0Z1bmN0aW9uRXh0ZW5kZWQuZXh0ZW5kZWR9LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIGZvciB0aGUgZ2V0IGF0dGFjaG1lbnQgZmlsZSBwYXRoIHN5bmMgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBUaGUgZmlsZSBwYXRoIG9mIHRoZSBhdHRhY2htZW50LlxuICovXG5mdW5jdGlvbiBnZXRBdHRhY2htZW50RmlsZVBhdGhTeW5jKHBhcmFtczogR2V0QXR0YWNobWVudEZpbGVQYXRoU3luY1BhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbm90ZVBhdGhPckZpbGUsXG4gICAgb2xkQXR0YWNobWVudFBhdGhPckZpbGUsXG4gICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGF0dGFjaG1lbnRQYXRoID0gZ2V0UGF0aChhcHAsIG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlKTtcbiAgY29uc3QgYXR0YWNobWVudEZpbGVFeHRlbnNpb24gPSBleHRuYW1lKGF0dGFjaG1lbnRQYXRoKTtcblxuICByZXR1cm4gZ2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzU3luYyh7XG4gICAgYXBwLFxuICAgIGF0dGFjaG1lbnRGaWxlQmFzZU5hbWU6IGJhc2VuYW1lKGF0dGFjaG1lbnRQYXRoLCBhdHRhY2htZW50RmlsZUV4dGVuc2lvbiksXG4gICAgYXR0YWNobWVudEZpbGVFeHRlbnNpb246IGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uLnNsaWNlKDEpLFxuICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgIHNob3VsZFNraXBEdXBsaWNhdGVDaGVja1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaGUgc3luY2hyb25vdXMgY29yZSBvZiB7QGxpbmsgZ2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzfSwgd2hpY2ggY2Fubm90IGNyZWF0ZSBhIG1pc3NpbmcgYXR0YWNobWVudFxuICogZm9sZGVyLiBJdHMgY2FsbGVyIGNyZWF0ZXMgdGhlIGZvbGRlciBmaXJzdCB3aGVuIHRoYXQgaXMgd2FudGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIGZvciB0aGUgZ2V0IGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cyBzeW5jIGZ1bmN0aW9uLlxuICogQHJldHVybnMgVGhlIGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cy5cbiAqL1xuZnVuY3Rpb24gZ2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzU3luYyhwYXJhbXM6IEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c1N5bmNQYXJhbXMpOiBzdHJpbmcge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uLFxuICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgIHNob3VsZFNraXBEdXBsaWNhdGVDaGVja1xuICB9ID0gcGFyYW1zO1xuICBjb25zdCBhdHRhY2htZW50Rm9sZGVyID0gcmVzb2x2ZUF0dGFjaG1lbnRGb2xkZXIoeyBhcHAsIG5vdGVQYXRoT3JGaWxlIH0pO1xuICBjb25zdCBhdHRhY2htZW50RmlsZUJhc2VOYW1lID0gbm9ybWFsaXplU3RyaW5nKG5vcm1hbGl6ZVNsYXNoZXMocGFyYW1zLmF0dGFjaG1lbnRGaWxlQmFzZU5hbWUpKTtcblxuICAvLyBBIGZvbGRlciB0aGF0IGRvZXMgbm90IGV4aXN0IHlldCBzdGlsbCBvd25zIHRoZSBhdHRhY2htZW50IHBhdGguXG4gIC8vIFJlc29sdmluZyBpdCBhcyBhIG5vbi1leGlzdGluZyBmb2xkZXIgc3RvcHMgdGhlIGFuc3dlciBmcm9tIGNvbGxhcHNpbmcgdG8gdGhlIHZhdWx0IHJvb3QuXG4gIGNvbnN0IGZvbGRlciA9IGF0dGFjaG1lbnRGb2xkZXIuZm9sZGVyID8/IGdldEZvbGRlcih7IGFwcCwgcGF0aE9yRm9sZGVyOiBhdHRhY2htZW50Rm9sZGVyLnBhdGgsIHNob3VsZEluY2x1ZGVOb25FeGlzdGluZzogdHJ1ZSB9KTtcblxuICBjb25zdCBwcmVmaXggPSBmb2xkZXIuZ2V0UGFyZW50UHJlZml4KCk7XG4gIHJldHVybiBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2tcbiAgICA/IG1ha2VGaWxlTmFtZSh7XG4gICAgICBmaWxlQmFzZU5hbWU6IHByZWZpeCArIGF0dGFjaG1lbnRGaWxlQmFzZU5hbWUsXG4gICAgICBmaWxlRXh0ZW5zaW9uOiBhdHRhY2htZW50RmlsZUV4dGVuc2lvblxuICAgIH0pXG4gICAgOiBhcHAudmF1bHQuZ2V0QXZhaWxhYmxlUGF0aChwcmVmaXggKyBhdHRhY2htZW50RmlsZUJhc2VOYW1lLCBhdHRhY2htZW50RmlsZUV4dGVuc2lvbik7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIHtAbGluayBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNGdW5jdGlvbkV4dGVuZGVkLmV4dGVuZGVkfSBtZW1iZXIgYW4gYXR0YWNobWVudC1sb2NhdGlvblxuICogcGx1Z2luIGluc3RhbGxzLiBJdHMgcHJlc2VuY2UgaXMgdGhlIHN5bmNocm9ub3VzIHByb2JlIGZvciBcInNvbWVib2R5IGVsc2Ugb3ducyB0aGUgcmVzb2x1dGlvblwiLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIFRoZSBleHRlbmRlZCBmdW5jdGlvbiwgb3IgYHVuZGVmaW5lZGAgd2hlbiBub2JvZHkgaW5zdGFsbGVkIG9uZS5cbiAqL1xuZnVuY3Rpb24gZ2V0RXh0ZW5kZWRGdW5jdGlvbihhcHA6IEFwcCk6IEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0Z1bmN0aW9uRXh0ZW5kZWRbJ2V4dGVuZGVkJ10gfCB1bmRlZmluZWQge1xuICByZXR1cm4gKGFwcC52YXVsdC5nZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHMgYXMgUGFydGlhbDxHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNGdW5jdGlvbkV4dGVuZGVkPikuZXh0ZW5kZWQ7XG59XG5cbi8qKlxuICogTm9ybWFsaXplcyBhIHBhdGggYnkgY29tYmluaW5nIG11bHRpcGxlIHNsYXNoZXMgaW50byBhIHNpbmdsZSBzbGFzaCBhbmQgcmVtb3ZpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmcgc2xhc2hlcy5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFBhdGggdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgcGF0aC5cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplU2xhc2hlcyhwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBwYXRoID0gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogcGF0aCxcbiAgICByZXBsYWNlcjogJy8nLFxuICAgIHNlYXJjaFZhbHVlOiAvKD86W1xcXFwvXSkrL2dcbiAgfSk7XG4gIHBhdGggPSByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiBwYXRoLFxuICAgIHJlcGxhY2VyOiAnJyxcbiAgICBzZWFyY2hWYWx1ZTogL15cXC8rfFxcLyskL2dcbiAgfSk7XG4gIHJldHVybiBwYXRoIHx8ICcvJztcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgYGF0dGFjaG1lbnRGb2xkZXJQYXRoYCBzZXR0aW5nIGFnYWluc3QgYSBub3RlIGludG8gYSBjb25jcmV0ZSBhdHRhY2htZW50IGZvbGRlci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBmb3IgdGhlIHJlc29sdmUgYXR0YWNobWVudCBmb2xkZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgYXR0YWNobWVudCBmb2xkZXIuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVBdHRhY2htZW50Rm9sZGVyKHBhcmFtczogUmVzb2x2ZUF0dGFjaG1lbnRGb2xkZXJQYXJhbXMpOiBSZXNvbHZlQXR0YWNobWVudEZvbGRlclJlc3VsdCB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbm90ZVBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcbiAgbGV0IGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXBwLnZhdWx0LmdldENvbmZpZygnYXR0YWNobWVudEZvbGRlclBhdGgnKSBhcyBzdHJpbmc7XG4gIGNvbnN0IGlzQ3VycmVudEZvbGRlciA9IGF0dGFjaG1lbnRGb2xkZXJQYXRoID09PSAnLicgfHwgYXR0YWNobWVudEZvbGRlclBhdGggPT09ICcuLyc7XG4gIGNvbnN0IHJlbGF0aXZlUGF0aCA9IGF0dGFjaG1lbnRGb2xkZXJQYXRoLnN0YXJ0c1dpdGgoJy4vJylcbiAgICA/IHRyaW1TdGFydCh7XG4gICAgICAkc3RyaW5nOiBhdHRhY2htZW50Rm9sZGVyUGF0aCxcbiAgICAgIHByZWZpeDogJy4vJ1xuICAgIH0pXG4gICAgOiBudWxsO1xuXG4gIC8vIEEgbm90ZSB0aGF0IGRvZXMgbm90IGV4aXN0IHlldCAoYSByZW5hbWUgdGFyZ2V0LCBhIGR1bW15IHNpYmxpbmcpIHN0aWxsIGJlbG9uZ3MgdG8gaXRzIG93biBmb2xkZXIuXG4gIC8vIE1hdGVyaWFsaXppbmcgaXQgZnJvbSBpdHMgcGF0aCBrZWVwcyB0aGF0IGZvbGRlciwgd2hlcmUgYSB2YXVsdCBsb29rdXAgd291bGQgZmFsbCBiYWNrIHRvIHRoZSByb290LlxuICAvLyBPbmx5IGFuIGV4cGxpY2l0bHkgbm90ZS1sZXNzIGF0dGFjaG1lbnQgcmVzb2x2ZXMgdG8gdGhlIHZhdWx0IHJvb3QuXG4gIGNvbnN0IG5vdGVGaWxlT3JOdWxsID0gbm90ZVBhdGhPckZpbGUgPT09IG51bGxcbiAgICA/IG51bGxcbiAgICA6IGdldEZpbGUoe1xuICAgICAgYXBwLFxuICAgICAgcGF0aE9yRmlsZTogbm90ZVBhdGhPckZpbGUsXG4gICAgICBzaG91bGRJbmNsdWRlTm9uRXhpc3Rpbmc6IHRydWVcbiAgICB9KTtcblxuICBpZiAoaXNDdXJyZW50Rm9sZGVyKSB7XG4gICAgYXR0YWNobWVudEZvbGRlclBhdGggPSBub3RlRmlsZU9yTnVsbCA/IG5vdGVGaWxlT3JOdWxsLnBhcmVudD8ucGF0aCA/PyAnJyA6ICcnO1xuICB9IGVsc2UgaWYgKHJlbGF0aXZlUGF0aCkge1xuICAgIGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gKG5vdGVGaWxlT3JOdWxsID8gbm90ZUZpbGVPck51bGwucGFyZW50Py5nZXRQYXJlbnRQcmVmaXgoKSA/PyAnJyA6ICcnKSArIHJlbGF0aXZlUGF0aDtcbiAgfVxuXG4gIGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gbm9ybWFsaXplU3RyaW5nKG5vcm1hbGl6ZVNsYXNoZXMoYXR0YWNobWVudEZvbGRlclBhdGgpKTtcblxuICByZXR1cm4ge1xuICAgIGZvbGRlcjogZ2V0Rm9sZGVyT3JOdWxsKHsgYXBwLCBpc0Nhc2VJbnNlbnNpdGl2ZTogdHJ1ZSwgcGF0aE9yRm9sZGVyOiBhdHRhY2htZW50Rm9sZGVyUGF0aCB9KSxcbiAgICBwYXRoOiBhdHRhY2htZW50Rm9sZGVyUGF0aCxcbiAgICByZWxhdGl2ZVBhdGhcbiAgfTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|
|
432
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2F0dGFjaG1lbnQtcGF0aC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFByb3ZpZGVzIHV0aWxpdHkgZnVuY3Rpb25zIGZvciB3b3JraW5nIHdpdGggYXR0YWNobWVudCBwYXRocy5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgRmlsZVN0YXRzLFxuICBURm9sZGVyXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGV4dG5hbWUsXG4gIGpvaW4sXG4gIG1ha2VGaWxlTmFtZVxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvcGF0aCc7XG5pbXBvcnQge1xuICBub3JtYWxpemVTdHJpbmcsXG4gIHJlcGxhY2VBbGwsXG4gIHRyaW1TdGFydFxufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvc3RyaW5nJztcbmltcG9ydCB7XG4gIGdldERhdGFBZGFwdGVyRXgsXG4gIHBhcmVudEZvbGRlclBhdGhcbn0gZnJvbSAnQG9ic2lkaWFuLXR5cGluZ3Mvb2JzaWRpYW4tcHVibGljLWxhdGVzdC9pbXBsZW1lbnRhdGlvbnMnO1xuXG5pbXBvcnQgdHlwZSB7IFBhdGhPckZpbGUgfSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luQXBpQ29udHJhY3QgfSBmcm9tICcuL3BsdWdpbi9wbHVnaW4tYXBpLnRzJztcblxuaW1wb3J0IHtcbiAgZ2V0RmlsZSxcbiAgZ2V0RmlsZU9yTnVsbCxcbiAgZ2V0Rm9sZGVyLFxuICBnZXRGb2xkZXJPck51bGwsXG4gIGdldFBhdGgsXG4gIGlzUGF0aE9yRmlsZSxcbiAgTUFSS0RPV05fRklMRV9FWFRFTlNJT05cbn0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQge1xuICBjcmVhdGVBcmd1bWVudHNTY2hlbWEsXG4gIGNyZWF0ZVR5cGVHdWFyZFNjaGVtYVxufSBmcm9tICcuL3BsdWdpbi9wbHVnaW4tYXBpLXNjaGVtYS50cyc7XG5pbXBvcnQgeyBmaW5kUGx1Z2luQXBpIH0gZnJvbSAnLi9wbHVnaW4vcGx1Z2luLWFwaS50cyc7XG5cbi8qKlxuICogQSBjb250ZXh0IGZvciBhbiBhdHRhY2htZW50IHBhdGguXG4gKi9cbmV4cG9ydCBlbnVtIEF0dGFjaG1lbnRQYXRoQ29udGV4dCB7XG4gIC8qKlxuICAgKiBBIGNvbnRleHQgZm9yIGEgZGVsZXRlIG5vdGUuXG4gICAqL1xuICBEZWxldGVOb3RlID0gJ0RlbGV0ZU5vdGUnLFxuXG4gIC8qKlxuICAgKiBBIGNvbnRleHQgZm9yIGEgcmVuYW1lIG5vdGUuXG4gICAqL1xuICBSZW5hbWVOb3RlID0gJ1JlbmFtZU5vdGUnLFxuXG4gIC8qKlxuICAgKiBBbiB1bmtub3duIGNvbnRleHQuXG4gICAqL1xuICBVbmtub3duID0gJ1Vua25vd24nXG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIGdldCBhdmFpbGFibGUgcGF0aCBmb3IgYXR0YWNobWVudHMgZXh0ZW5kZWQgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRXh0ZW5kZWRGdW5jdGlvblBhcmFtcyB7XG4gIC8qKlxuICAgKiBBIGJhc2UgbmFtZSBvZiB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGF0dGFjaG1lbnRGaWxlQmFzZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXh0ZW5zaW9uIG9mIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudEZpbGVFeHRlbnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogQSBzdGF0cyBvZiB0aGUgYXR0YWNobWVudCBmaWxlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudEZpbGVTdGF0cz86IEZpbGVTdGF0cyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQSBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGV4dDogQXR0YWNobWVudFBhdGhDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBBIHBhdGggb3IgZmlsZSBvZiB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBudWxsIHwgUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogQSBwYXRoIG9yIGZpbGUgb2YgdGhlIG9sZCBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkQXR0YWNobWVudFBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIEEgcGF0aCBvciBmaWxlIG9mIHRoZSBvbGQgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG9sZE5vdGVQYXRoT3JGaWxlPzogUGF0aE9yRmlsZSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogTGF6aWx5IHJlYWRzIHRoZSBjb250ZW50IG9mIHRoZSBhdHRhY2htZW50IGZpbGUuXG4gICAqXG4gICAqIFRoZSBjb250ZW50IGlzIHJlYWQgb24gZGVtYW5kIG9ubHkgd2hlbiBhIGNvbnN1bWVyIGFjdHVhbGx5IG5lZWRzIHRoZSBieXRlcyAoZS5nLiBhIHRlbXBsYXRlXG4gICAqIHRva2VuIHRoYXQgZW1iZWRzIHRoZW0pLiBGb3IgdGhlIGRlZmF1bHQgdGVtcGxhdGVzIG5vdGhpbmcgcHVsbHMgdGhlIGJ5dGVzLCBzbyB0aGUgcG90ZW50aWFsbHlcbiAgICogZXhwZW5zaXZlIChzaXplLXByb3BvcnRpb25hbCkgYHJlYWRCaW5hcnlgIG5ldmVyIHJ1bnMuIENvbnN1bWVycyB0aGF0IG1heSBjYWxsIHRoaXMgbW9yZSB0aGFuXG4gICAqIG9uY2Ugc2hvdWxkIG1lbW9pemUgdGhlIGZpcnN0IGNhbGwuIGBudWxsYCB3aGVuIHRoZXJlIGlzIG5vIGF0dGFjaG1lbnQgZmlsZSB0byByZWFkLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBjb250ZW50IG9mIHRoZSBhdHRhY2htZW50IGZpbGUuXG4gICAqL1xuICByZWFkb25seSByZWFkQXR0YWNobWVudEZpbGVDb250ZW50OiAoKCkgPT4gUHJvbWlzZTxBcnJheUJ1ZmZlcj4pIHwgbnVsbDtcblxuICAvKipcbiAgICogU2hvdWxkIHRoZSBkdXBsaWNhdGUgY2hlY2sgYmUgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBEdXBsaWNhdGVDaGVjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgZ2VuZXJhdGVkIGF0dGFjaG1lbnQgZmlsZSBuYW1lIGJlIHNraXBwZWQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwR2VuZXJhdGVkQXR0YWNobWVudEZpbGVOYW1lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2hvdWxkIG1pc3NpbmcgYXR0YWNobWVudCBmb2xkZXIgY3JlYXRpb24gYmUgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBNaXNzaW5nQXR0YWNobWVudEZvbGRlckNyZWF0aW9uOiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSBzbGljZSBvZiBDdXN0b20gQXR0YWNobWVudCBMb2NhdGlvbidzIHJlZ2lzdHJ5IEFQSSB0aGlzIG1vZHVsZSBjYWxscywgZGVjbGFyZWQgaGVyZSByYXRoZXIgdGhhbiBpbXBvcnRlZDpcbiAqIHRoYXQgcGx1Z2luIHNoaXBzIGl0cyBzdXJmYWNlIGFzIGEgaGFuZC13cml0dGVuIGBhcGkuZC50c2AsIG5vdCBhcyBhIHBhY2thZ2UgKHNlZSBydWxlIEw5IGluIGBBR0VOVFMubWRgKS5cbiAqL1xuaW50ZXJmYWNlIEN1c3RvbUF0dGFjaG1lbnRMb2NhdGlvbkF0dGFjaG1lbnRQYXRoQXBpIHtcbiAgLyoqXG4gICAqIFRoZSBwbHVnaW4ncyBmdWxsIGF0dGFjaG1lbnQtcGF0aCByZXNvbHZlci5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBzYW1lIGZpZWxkcyBhcyB7QGxpbmsgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRXh0ZW5kZWRGdW5jdGlvblBhcmFtc30sIHdoaWNoIHRoZVxuICAgKiAgIHBsdWdpbiBkZWNsYXJlcyBmaWVsZCBmb3IgZmllbGQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGF0dGFjaG1lbnQncyBwYXRoIGZyb20gdGhlIHZhdWx0IHJvb3QuXG4gICAqL1xuICBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHM6IChwYXJhbXM6IEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0V4dGVuZGVkRnVuY3Rpb25QYXJhbXMpID0+IFByb21pc2U8c3RyaW5nPjtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdXNlciBkZXNpZ25hdGVkIGEgZm9sZGVyIGFuIGF0dGFjaG1lbnQgdW5pdCBmb2xkZXIuIFN5bmNocm9ub3VzIG9uIHB1cnBvc2UuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZm9sZGVyLlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBmb2xkZXIgaXMgZGVzaWduYXRlZC5cbiAgICovXG4gIGlzQXR0YWNobWVudFVuaXRGb2xkZXI6IChwYXJhbXM6IEN1c3RvbUF0dGFjaG1lbnRMb2NhdGlvbklzQXR0YWNobWVudFVuaXRGb2xkZXJQYXJhbXMpID0+IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIEN1c3RvbUF0dGFjaG1lbnRMb2NhdGlvbkF0dGFjaG1lbnRQYXRoQXBpLmlzQXR0YWNobWVudFVuaXRGb2xkZXJ9LlxuICovXG5pbnRlcmZhY2UgQ3VzdG9tQXR0YWNobWVudExvY2F0aW9uSXNBdHRhY2htZW50VW5pdEZvbGRlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyLCBhcyBhIHZhdWx0LXJlbGF0aXZlIHBhdGguXG4gICAqL1xuICByZWFkb25seSBmb2xkZXJQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHBsdWdpbiBpZCBDdXN0b20gQXR0YWNobWVudCBMb2NhdGlvbiBwdWJsaXNoZXMgaXRzIEFQSSB1bmRlci5cbiAqL1xuZXhwb3J0IGNvbnN0IENVU1RPTV9BVFRBQ0hNRU5UX0xPQ0FUSU9OX1BMVUdJTl9JRCA9ICdvYnNpZGlhbi1jdXN0b20tYXR0YWNobWVudC1sb2NhdGlvbic7XG5cbi8qKlxuICogVGhlIGNvbnRyYWN0IHZlcnNpb25zIG9mIEN1c3RvbSBBdHRhY2htZW50IExvY2F0aW9uJ3MgQVBJIHRoaXMgbW9kdWxlIGNvbXBpbGVkIGFnYWluc3QuIGAxLjMuMGAgaXMgdGhlIGZpcnN0XG4gKiB0byBjYXJyeSB0aGUgdHdvIGF0dGFjaG1lbnQtcGF0aCBtZXRob2RzLlxuICovXG5jb25zdCBDVVNUT01fQVRUQUNITUVOVF9MT0NBVElPTl9BVFRBQ0hNRU5UX1BBVEhfQVBJX1ZFUlNJT05fUkFOR0UgPSAnXjEuMy4wJztcblxuLyoqXG4gKiBUaGUgY29udHJhY3Qgb2YgdGhlIG1lbWJlcnMgb2YgQ3VzdG9tIEF0dGFjaG1lbnQgTG9jYXRpb24ncyBBUEkgdGhpcyBtb2R1bGUgY2FsbHMsIHNvIGEgcmVjb3JkIHRoYXQgbGFja3NcbiAqIGVpdGhlciBpcyBwYXNzZWQgb3ZlciwgYW5kIGEgcGF5bG9hZCB0aGF0IGJyZWFrcyBpdHMgc2lnbmF0dXJlIGlzIHJlcG9ydGVkIHdoaWxlIHRoZSBgUGx1Z2luQXBpYCBkZWJ1Z2dlciBpcyBvbi5cbiAqL1xuY29uc3QgQ1VTVE9NX0FUVEFDSE1FTlRfTE9DQVRJT05fQVRUQUNITUVOVF9QQVRIX0FQSV9DT05UUkFDVDogUGx1Z2luQXBpQ29udHJhY3Q8Q3VzdG9tQXR0YWNobWVudExvY2F0aW9uQXR0YWNobWVudFBhdGhBcGk+ID0ge1xuICBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHM6IHtcbiAgICBpbnB1dDogY3JlYXRlQXJndW1lbnRzU2NoZW1hPFtwYXJhbXM6IEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0V4dGVuZGVkRnVuY3Rpb25QYXJhbXNdPihbe1xuICAgICAgZXhwZWN0ZWQ6ICd0aGUgYXR0YWNobWVudC1wYXRoIHBhcmFtZXRlcnMnLFxuICAgICAgdHlwZUd1YXJkOiBpc0dldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0V4dGVuZGVkRnVuY3Rpb25QYXJhbXNcbiAgICB9XSksXG4gICAgb3V0cHV0OiBjcmVhdGVUeXBlR3VhcmRTY2hlbWEoeyBleHBlY3RlZDogJ2Egc3RyaW5nJywgdHlwZUd1YXJkOiBpc1N0cmluZyB9KVxuICB9LFxuICBpc0F0dGFjaG1lbnRVbml0Rm9sZGVyOiB7XG4gICAgaW5wdXQ6IGNyZWF0ZUFyZ3VtZW50c1NjaGVtYTxbcGFyYW1zOiBDdXN0b21BdHRhY2htZW50TG9jYXRpb25Jc0F0dGFjaG1lbnRVbml0Rm9sZGVyUGFyYW1zXT4oW3tcbiAgICAgIGV4cGVjdGVkOiAnYW4gb2JqZWN0IHdpdGggYSBzdHJpbmcgZm9sZGVyUGF0aCcsXG4gICAgICB0eXBlR3VhcmQ6IGlzQ3VzdG9tQXR0YWNobWVudExvY2F0aW9uSXNBdHRhY2htZW50VW5pdEZvbGRlclBhcmFtc1xuICAgIH1dKSxcbiAgICBvdXRwdXQ6IGNyZWF0ZVR5cGVHdWFyZFNjaGVtYSh7IGV4cGVjdGVkOiAnYSBib29sZWFuJywgdHlwZUd1YXJkOiBpc0Jvb2xlYW4gfSlcbiAgfVxufTtcblxuLyoqXG4gKiBEdW1teSBwYXRoLlxuICovXG5leHBvcnQgY29uc3QgRFVNTVlfUEFUSCA9ICdfX0RVTU1ZX18nO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBnZXRBdHRhY2htZW50RmlsZVBhdGggZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXR0YWNobWVudEZpbGVQYXRoUGFyYW1zIHtcbiAgLyoqXG4gICAqIEFuIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIEEgY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IEF0dGFjaG1lbnRQYXRoQ29udGV4dDtcblxuICAvKipcbiAgICogQSBwYXRoIG9mIHRoZSBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgbm90ZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIEEgcGF0aCBvZiB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xuXG4gIC8qKlxuICAgKiBBIHBhdGggb2YgdGhlIG9sZCBub3RlLlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkTm90ZVBhdGhPckZpbGU/OiBQYXRoT3JGaWxlIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBTaG91bGQgdGhlIGR1cGxpY2F0ZSBjaGVjayBiZSBza2lwcGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QXR0YWNobWVudEZvbGRlclBhdGhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZXh0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgQXR0YWNobWVudFBhdGhDb250ZXh0LlVua25vd259XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0PzogQXR0YWNobWVudFBhdGhDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aFN5bmNPck51bGx9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEF0dGFjaG1lbnRGb2xkZXJQYXRoU3luY09yTnVsbFBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHBhdGggb2YgdGhlIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBub3RlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgZ2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzIGZ1bmN0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuICAvKipcbiAgICogQSBiYXNlIG5hbWUgb2YgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50RmlsZUJhc2VOYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBBbiBleHRlbnNpb24gb2YgdGhlIGF0dGFjaG1lbnQuXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50RmlsZUV4dGVuc2lvbjogc3RyaW5nO1xuICAvKipcbiAgICogQSBmaWxlIHRvIGF0dGFjaCB0by5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBudWxsIHwgUGF0aE9yRmlsZTtcbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgZHVwbGljYXRlIGNoZWNrIGJlIHNraXBwZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBEdXBsaWNhdGVDaGVjaz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBTaG91bGQgbWlzc2luZyBhdHRhY2htZW50IGZvbGRlciBjcmVhdGlvbiBiZSBza2lwcGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwTWlzc2luZ0F0dGFjaG1lbnRGb2xkZXJDcmVhdGlvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGhhc093bkF0dGFjaG1lbnRGb2xkZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEhhc093bkF0dGFjaG1lbnRGb2xkZXJQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZXh0LlxuICAgKlxuICAgKiBAZGVmYXVsdCB7QGxpbmsgQXR0YWNobWVudFBhdGhDb250ZXh0LlVua25vd259XG4gICAqL1xuICByZWFkb25seSBjb250ZXh0PzogQXR0YWNobWVudFBhdGhDb250ZXh0O1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvZiB0aGUgbm90ZS5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgaXNBdFByb3BlckF0dGFjaG1lbnRQYXRofS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJc0F0UHJvcGVyQXR0YWNobWVudFBhdGhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIGF0dGFjaG1lbnQgdG8gY2hlY2suXG4gICAqL1xuICByZWFkb25seSBhdHRhY2htZW50UGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogVGhlIGNvbnRleHQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHtAbGluayBBdHRhY2htZW50UGF0aENvbnRleHQuVW5rbm93bn1cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ/OiBBdHRhY2htZW50UGF0aENvbnRleHQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgb2YgdGhlIG5vdGUgdGhhdCByZWZlcmVuY2VzIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgbm90ZVBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldEF0dGFjaG1lbnRGaWxlUGF0aFN5bmN9LlxuICovXG5pbnRlcmZhY2UgR2V0QXR0YWNobWVudEZpbGVQYXRoU3luY1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBBIHBhdGggb2YgdGhlIG5vdGUuXG4gICAqL1xuICByZWFkb25seSBub3RlUGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogQSBwYXRoIG9mIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgb2xkQXR0YWNobWVudFBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG5cbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgZHVwbGljYXRlIGNoZWNrIGJlIHNraXBwZWQuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2s6IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c1N5bmN9LlxuICovXG5pbnRlcmZhY2UgR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzU3luY1BhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBBIGJhc2UgbmFtZSBvZiB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGF0dGFjaG1lbnRGaWxlQmFzZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQW4gZXh0ZW5zaW9uIG9mIHRoZSBhdHRhY2htZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgYXR0YWNobWVudEZpbGVFeHRlbnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogQSBmaWxlIHRvIGF0dGFjaCB0by5cbiAgICovXG4gIHJlYWRvbmx5IG5vdGVQYXRoT3JGaWxlOiBudWxsIHwgUGF0aE9yRmlsZTtcblxuICAvKipcbiAgICogU2hvdWxkIHRoZSBkdXBsaWNhdGUgY2hlY2sgYmUgc2tpcHBlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNraXBEdXBsaWNhdGVDaGVjaz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlc29sdmVBdHRhY2htZW50Rm9sZGVyfS5cbiAqL1xuaW50ZXJmYWNlIFJlc29sdmVBdHRhY2htZW50Rm9sZGVyUGFyYW1zIHtcbiAgLyoqXG4gICAqIEFuIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBwOiBBcHA7XG5cbiAgLyoqXG4gICAqIEEgZmlsZSB0byBhdHRhY2ggdG8uXG4gICAqL1xuICByZWFkb25seSBub3RlUGF0aE9yRmlsZTogbnVsbCB8IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogVGhlIGF0dGFjaG1lbnQgZm9sZGVyIGEgbm90ZSByZXNvbHZlcyB0bywgYmVmb3JlIHRoZSBhdHRhY2htZW50IGZpbGUgbmFtZSBpcyBhcHBlbmRlZC5cbiAqL1xuaW50ZXJmYWNlIFJlc29sdmVBdHRhY2htZW50Rm9sZGVyUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBhdHRhY2htZW50IGZvbGRlciwgb3IgYG51bGxgIHdoZW4gaXQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIHZhdWx0IHlldC5cbiAgICovXG4gIHJlYWRvbmx5IGZvbGRlcjogbnVsbCB8IFRGb2xkZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBub3JtYWxpemVkIGF0dGFjaG1lbnQgZm9sZGVyIHBhdGgsIHdoZXRoZXIgb3Igbm90IHRoZSBmb2xkZXIgZXhpc3RzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFydCBvZiB0aGUgYGF0dGFjaG1lbnRGb2xkZXJQYXRoYCBzZXR0aW5nIHRoYXQgZm9sbG93cyBgLi9gLCBvciBgbnVsbGAgd2hlbiB0aGUgc2V0dGluZyBpcyBub3RcbiAgICogcmVsYXRpdmUgdG8gdGhlIG5vdGUuIE9ubHkgYSByZWxhdGl2ZSBzZXR0aW5nIG1heSBoYXZlIGl0cyBtaXNzaW5nIGZvbGRlciBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVsYXRpdmVQYXRoOiBudWxsIHwgc3RyaW5nO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZmlsZSBwYXRoIGZvciBhbiBhdHRhY2htZW50IHdpdGhpbiBhIG5vdGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBnZXQgYXR0YWNobWVudCBmaWxlIHBhdGggZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBmaWxlIHBhdGggb2YgdGhlIGF0dGFjaG1lbnQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBdHRhY2htZW50RmlsZVBhdGgocGFyYW1zOiBHZXRBdHRhY2htZW50RmlsZVBhdGhQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgIG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlLFxuICAgIHNob3VsZFNraXBEdXBsaWNhdGVDaGVja1xuICB9ID0gcGFyYW1zO1xuXG4gIGNvbnN0IGN1c3RvbUF0dGFjaG1lbnRMb2NhdGlvbkFwaSA9IGZpbmRDdXN0b21BdHRhY2htZW50TG9jYXRpb25BcGkoKTtcbiAgaWYgKCFjdXN0b21BdHRhY2htZW50TG9jYXRpb25BcGkpIHtcbiAgICAvLyBOb2JvZHkgb3ZlcnJpZGVzIHRoZSByZXNvbHV0aW9uLCBzbyBpdCBpcyBlbnRpcmVseSBzeW5jaHJvbm91cy5cbiAgICAvLyBUaGUgc2FtZSBjb3JlIGFuc3dlcnMgYGdldEF0dGFjaG1lbnRGb2xkZXJQYXRoU3luY09yTnVsbGAsIHdoaWNoIGlzIHdoYXQga2VlcHMgdGhlIHR3byBpbiBzdGVwLlxuICAgIHJldHVybiBnZXRBdHRhY2htZW50RmlsZVBhdGhTeW5jKHtcbiAgICAgIGFwcCxcbiAgICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgICAgb2xkQXR0YWNobWVudFBhdGhPckZpbGUsXG4gICAgICBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2tcbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGF0dGFjaG1lbnRQYXRoID0gZ2V0UGF0aChhcHAsIG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlKTtcbiAgY29uc3QgYXR0YWNobWVudEZpbGVFeHRlbnNpb24gPSBleHRuYW1lKGF0dGFjaG1lbnRQYXRoKTtcbiAgY29uc3QgYXR0YWNobWVudEZpbGVCYXNlTmFtZSA9IGJhc2VuYW1lKGF0dGFjaG1lbnRQYXRoLCBhdHRhY2htZW50RmlsZUV4dGVuc2lvbik7XG4gIGNvbnN0IGF0dGFjaG1lbnRGaWxlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogYXR0YWNobWVudFBhdGggfSk7XG5cbiAgcmV0dXJuIGF3YWl0IGN1c3RvbUF0dGFjaG1lbnRMb2NhdGlvbkFwaS5nZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHMoe1xuICAgIGF0dGFjaG1lbnRGaWxlQmFzZU5hbWUsXG4gICAgYXR0YWNobWVudEZpbGVFeHRlbnNpb246IGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uLnNsaWNlKDEpLFxuICAgIGF0dGFjaG1lbnRGaWxlU3RhdHM6IGF0dGFjaG1lbnRGaWxlPy5zdGF0LFxuICAgIGNvbnRleHQ6IHBhcmFtcy5jb250ZXh0LFxuICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgIG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlLFxuICAgIG9sZE5vdGVQYXRoT3JGaWxlOiBwYXJhbXMub2xkTm90ZVBhdGhPckZpbGUsXG4gICAgcmVhZEF0dGFjaG1lbnRGaWxlQ29udGVudDogYXR0YWNobWVudEZpbGUgPyAoKTogUHJvbWlzZTxBcnJheUJ1ZmZlcj4gPT4gYXBwLnZhdWx0LnJlYWRCaW5hcnkoYXR0YWNobWVudEZpbGUpIDogbnVsbCxcbiAgICBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2ssXG4gICAgc2hvdWxkU2tpcE1pc3NpbmdBdHRhY2htZW50Rm9sZGVyQ3JlYXRpb246IHRydWVcbiAgfSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBhdHRhY2htZW50IGZvbGRlciBwYXRoIGZvciBhIGdpdmVuIG5vdGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBnZXQgYXR0YWNobWVudCBmb2xkZXIgcGF0aCBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGF0dGFjaG1lbnQgZm9sZGVyIHBhdGguXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aChwYXJhbXM6IEdldEF0dGFjaG1lbnRGb2xkZXJQYXRoUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBjb250ZXh0ID0gQXR0YWNobWVudFBhdGhDb250ZXh0LlVua25vd24sXG4gICAgbm90ZVBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcbiAgcmV0dXJuIHBhcmVudEZvbGRlclBhdGgoXG4gICAgYXdhaXQgZ2V0QXR0YWNobWVudEZpbGVQYXRoKHtcbiAgICAgIGFwcCxcbiAgICAgIGNvbnRleHQsXG4gICAgICBub3RlUGF0aE9yRmlsZSxcbiAgICAgIG9sZEF0dGFjaG1lbnRQYXRoT3JGaWxlOiBEVU1NWV9QQVRILFxuICAgICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrOiB0cnVlXG4gICAgfSlcbiAgKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGF0dGFjaG1lbnQgZm9sZGVyIHBhdGggZm9yIGEgZ2l2ZW4gbm90ZSAqKnN5bmNocm9ub3VzbHkqKiwgd2hlbiB0aGF0IGlzIHBvc3NpYmxlIGF0IGFsbC5cbiAqXG4gKiBPYnNpZGlhbiBidWlsZHMgaXRzIGZpbGUvZm9sZGVyIGNvbnRleHQgbWVudXMgYW5kIGV2YWx1YXRlcyBhIGNvbW1hbmQncyBgY2hlY2tDYWxsYmFja2Agc3luY2hyb25vdXNseSwgc28gYVxuICogY2FsbGVyIGRlY2lkaW5nIHdoZXRoZXIgdG8gbWVyZWx5ICpvZmZlciogYSBjb21tYW5kIGNhbm5vdCBhd2FpdCB7QGxpbmsgZ2V0QXR0YWNobWVudEZvbGRlclBhdGh9LiBUaGlzIGlzXG4gKiB0aGUgc3luY2hyb25vdXMgdHdpbiBzdWNoIGEgY2FsbGVyIGNhbiB1c2UgaW5zdGVhZC5cbiAqXG4gKiBUaGUgYW5zd2VyIGlzIGBudWxsYCB3aGVuIGl0IGlzIG5vdCBrbm93YWJsZSBzeW5jaHJvbm91c2x5IFx1MjAxNCB0aGF0IGlzLCB3aGVuIEN1c3RvbSBBdHRhY2htZW50IExvY2F0aW9uIHB1Ymxpc2hlc1xuICogaXRzIGF0dGFjaG1lbnQtcGF0aCBBUEkgYW5kIHRoZXJlZm9yZSBvd25zIHRoZSByZXNvbHV0aW9uLCB3aGljaCBpcyBnZW51aW5lbHkgYXN5bmNocm9ub3VzLiBgbnVsbGAgbWVhbnMgXCJhc2sge0BsaW5rIGdldEF0dGFjaG1lbnRGb2xkZXJQYXRofVwiLCBuZXZlciBcInRoZXJlIGlzIG5vIGF0dGFjaG1lbnRcbiAqIGZvbGRlclwiLiBPdGhlcndpc2UgdGhlIGFuc3dlciBpcyBleGFjdCByYXRoZXIgdGhhbiBhIGd1ZXNzOiBpdCBpcyBwcm9kdWNlZCBieSB0aGUgdmVyeSBzYW1lIGNvZGVcbiAqIHtAbGluayBnZXRBdHRhY2htZW50Rm9sZGVyUGF0aH0gcnVucywgd2hvc2Ugb25seSBhc3luY2hyb25vdXMgc3RlcCBcdTIwMTQgY3JlYXRpbmcgYSBtaXNzaW5nIGF0dGFjaG1lbnQgZm9sZGVyIFx1MjAxNFxuICogaXMgdW5yZWFjaGFibGUgb24gdGhpcyBwYXRoLlxuICpcbiAqIFRoZXJlIGlzIGRlbGliZXJhdGVseSBubyBgY29udGV4dGAgcGFyYW1ldGVyOiB7QGxpbmsgQXR0YWNobWVudFBhdGhDb250ZXh0fSBvbmx5IGV2ZXIgcmVhY2hlcyB0aGF0IHBsdWdpbidzXG4gKiByZXNvbHZlciwgYW5kIHRoaXMgZnVuY3Rpb24gYW5zd2VycyBgbnVsbGAgd2hlbmV2ZXIgaXQgaXMgcHVibGlzaGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBQYXJhbWV0ZXJzIGZvciB0aGUgZ2V0IGF0dGFjaG1lbnQgZm9sZGVyIHBhdGggc3luYyBvciBudWxsIGZ1bmN0aW9uLlxuICogQHJldHVybnMgVGhlIGF0dGFjaG1lbnQgZm9sZGVyIHBhdGgsIG9yIGBudWxsYCB3aGVuIGl0IGNhbiBvbmx5IGJlIHJlc29sdmVkIGFzeW5jaHJvbm91c2x5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QXR0YWNobWVudEZvbGRlclBhdGhTeW5jT3JOdWxsKHBhcmFtczogR2V0QXR0YWNobWVudEZvbGRlclBhdGhTeW5jT3JOdWxsUGFyYW1zKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgbm90ZVBhdGhPckZpbGVcbiAgfSA9IHBhcmFtcztcblxuICByZXR1cm4gZmluZEN1c3RvbUF0dGFjaG1lbnRMb2NhdGlvbkFwaSgpXG4gICAgPyBudWxsXG4gICAgOiBwYXJlbnRGb2xkZXJQYXRoKGdldEF0dGFjaG1lbnRGaWxlUGF0aFN5bmMoe1xuICAgICAgYXBwLFxuICAgICAgbm90ZVBhdGhPckZpbGUsXG4gICAgICBvbGRBdHRhY2htZW50UGF0aE9yRmlsZTogRFVNTVlfUEFUSCxcbiAgICAgIHNob3VsZFNraXBEdXBsaWNhdGVDaGVjazogdHJ1ZVxuICAgIH0pKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGF2YWlsYWJsZSBwYXRoIGZvciBhdHRhY2htZW50cy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBmb3IgdGhlIGdldCBhdmFpbGFibGUgcGF0aCBmb3IgYXR0YWNobWVudHMgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBhdmFpbGFibGUgcGF0aCBmb3IgYXR0YWNobWVudHMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHMocGFyYW1zOiBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIG5vdGVQYXRoT3JGaWxlLFxuICAgIHNob3VsZFNraXBNaXNzaW5nQXR0YWNobWVudEZvbGRlckNyZWF0aW9uXG4gIH0gPSBwYXJhbXM7XG5cbiAgLy8gTWF0ZXJpYWxpemluZyBhIG1pc3NpbmcgYXR0YWNobWVudCBmb2xkZXIgaXMgdGhlIE9ORSBnZW51aW5lbHkgYXN5bmNocm9ub3VzIHN0ZXAgaW4gdGhpcyBmdW5jdGlvbi5cbiAgLy8gRXZlcnl0aGluZyBlbHNlIGxpdmVzIGluIHRoZSBzeW5jaHJvbm91cyBjb3JlLCB3aGljaCB0aGUgc3luY2hyb25vdXMgZW50cnkgcG9pbnRzIHJldXNlIHZlcmJhdGltLlxuICBjb25zdCBhdHRhY2htZW50Rm9sZGVyID0gcmVzb2x2ZUF0dGFjaG1lbnRGb2xkZXIoeyBhcHAsIG5vdGVQYXRoT3JGaWxlIH0pO1xuICBpZiAoIWF0dGFjaG1lbnRGb2xkZXIuZm9sZGVyICYmIGF0dGFjaG1lbnRGb2xkZXIucmVsYXRpdmVQYXRoICYmICFzaG91bGRTa2lwTWlzc2luZ0F0dGFjaG1lbnRGb2xkZXJDcmVhdGlvbikge1xuICAgIGF3YWl0IGFwcC52YXVsdC5jcmVhdGVGb2xkZXIoYXR0YWNobWVudEZvbGRlci5wYXRoKTtcbiAgfVxuXG4gIHJldHVybiBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNTeW5jKHBhcmFtcyk7XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIGF0dGFjaG1lbnQtdW5pdC1mb2xkZXIgZGVzaWduYXRpb24gQ3VzdG9tIEF0dGFjaG1lbnQgTG9jYXRpb24gcHVibGlzaGVzIHRocm91Z2ggaXRzIHBsdWdpbiBBUEkuXG4gKlxuICogVGhlIGRlc2lnbmF0aW9uIGlzIG9uZSBwbHVnaW4ncyBzZXR0aW5nIGJ1dCBldmVyeSByZWxvY2F0aW5nIHBsdWdpbidzIGJ1c2luZXNzLCBzbyBpdCBpcyByZWFkIGZyb20gdGhlIHNhbWVcbiAqIEFQSSB0aGF0IGFuc3dlcnMgdGhlIGF0dGFjaG1lbnQgcGF0aCBpdHNlbGYuIFJlYWRpbmcgaXQgaGVyZSByYXRoZXIgdGhhbiBoYXZpbmcgZWFjaCBjYWxsZXIgbG9vayBmb3IgdGhlXG4gKiBwbHVnaW4gaXMgdGhlIHBvaW50IFx1MjAxNCBhIGZvbGRlciBrZXB0IHdob2xlIGJ5IG9uZSBwbHVnaW4gYW5kIHRvcm4gYXBhcnQgYnkgYW5vdGhlciBpcyBleGFjdGx5IHRoZSBmYWlsdXJlXG4gKiBgZmluZEF0dGFjaG1lbnRVbml0Rm9sZGVyUGF0aGAgZXhpc3RzIHRvIHByZXZlbnQuXG4gKlxuICogYHVuZGVmaW5lZGAgbWVhbnMgbm9ib2R5IHB1Ymxpc2hlZCBhIGRlc2lnbmF0aW9uLCB0aGUgc2FtZSBcIm5vYm9keSBvd25zIHRoaXMgcG9saWN5XCIgYW5zd2VyIHRoYXQgc2VuZHNcbiAqIHtAbGluayBnZXRBdHRhY2htZW50RmlsZVBhdGh9IHRvIE9ic2lkaWFuJ3Mgb3duIHJlc29sdXRpb24uIEl0IGlzIGRpc3RpbmN0IGZyb20gYSBkZXNpZ25hdGlvbiB0aGF0IGFuc3dlcnNcbiAqIGBmYWxzZWAgZm9yIGV2ZXJ5IGZvbGRlci5cbiAqXG4gKiBUaGUgcmVnaXN0cnkgaXMgbG9va2VkIHVwIG9uY2UsIHdoZW4gdGhpcyBpcyBjYWxsZWQsIHNvIGEgY2FsbGVyIHdhbGtpbmcgYSBmb2xkZXIncyBhbmNlc3RvcnMgYXNrcyB0aGUgc2FtZVxuICogQVBJIGFsbCB0aGUgd2F5IHVwLlxuICpcbiAqIEBwYXJhbSBfYXBwIC0gQW4gT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuIFVudXNlZCBzaW5jZSB0aGUgYW5zd2VyIGNvbWVzIGZyb20gdGhlIHBsdWdpbiBBUEkgcmVnaXN0cnk7XG4gKiAgIGtlcHQgc28gZXhpc3RpbmcgY2FsbGVycyBjb21waWxlIHVuY2hhbmdlZC5cbiAqIEByZXR1cm5zIFRoZSBkZXNpZ25hdGlvbiBwcmVkaWNhdGUsIG9yIGB1bmRlZmluZWRgIHdoZW4gbm9ib2R5IHB1Ymxpc2hlZCBvbmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGVja0lzQXR0YWNobWVudFVuaXRGb2xkZXJGdW5jdGlvbihfYXBwOiBBcHApOiAoKGZvbGRlclBhdGg6IHN0cmluZykgPT4gYm9vbGVhbikgfCB1bmRlZmluZWQge1xuICBjb25zdCBjdXN0b21BdHRhY2htZW50TG9jYXRpb25BcGkgPSBmaW5kQ3VzdG9tQXR0YWNobWVudExvY2F0aW9uQXBpKCk7XG4gIHJldHVybiBjdXN0b21BdHRhY2htZW50TG9jYXRpb25BcGlcbiAgICA/IChmb2xkZXJQYXRoOiBzdHJpbmcpOiBib29sZWFuID0+IGN1c3RvbUF0dGFjaG1lbnRMb2NhdGlvbkFwaS5pc0F0dGFjaG1lbnRVbml0Rm9sZGVyKHsgZm9sZGVyUGF0aCB9KVxuICAgIDogdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbm90ZSdzIGF0dGFjaG1lbnQgZm9sZGVyIGlzIHNwZWNpZmljIHRvIHRoYXQgbm90ZSByYXRoZXIgdGhhbiBzaGFyZWQgd2l0aCBpdHMgc2libGluZ3MuXG4gKlxuICogVGhlIGFuc3dlciBpcyBkZXJpdmVkIGJ5IGNvbXBhcmluZyB0aGUgbm90ZSdzIGF0dGFjaG1lbnQgZm9sZGVyIHdpdGggdGhlIG9uZSBhIHNhbWUtZm9sZGVyIHNpYmxpbmcgbm90ZVxuICogd291bGQgZ2V0OiB0aGV5IGRpZmZlciBvbmx5IHdoZW4gdGhlIGZvbGRlciBkZXBlbmRzIG9uIHRoZSBub3RlJ3MgTkFNRS4gRXZlcnkgYnVpbHQtaW5cbiAqIGBhdHRhY2htZW50Rm9sZGVyUGF0aGAgbW9kZSBcdTIwMTQgdGhlIHZhdWx0IHJvb3QsIGEgZml4ZWQgZm9sZGVyLCB0aGUgbm90ZSdzIG93biBmb2xkZXIgKGAuL2ApLCBhIHN1YmZvbGRlciBvZlxuICogdGhlIG5vdGUncyBmb2xkZXIgKGAuL3N1YmApIFx1MjAxNCBpcyBzaGFyZWQgYnkgZXZlcnkgbm90ZSBpbiB0aGF0IGZvbGRlciwgc28gaXQgYW5zd2VycyBgZmFsc2VgOyBgdHJ1ZWAgYXJpc2VzXG4gKiBmcm9tIEN1c3RvbSBBdHRhY2htZW50IExvY2F0aW9uJ3MgcmVzb2x2ZXIgZGVyaXZpbmcgdGhlIGZvbGRlciBmcm9tIHRoZSBub3RlJ3MgbmFtZS5cbiAqXG4gKiBUaGlzIGlzIHRoZSBkaXN0aW5jdGlvbiBhIGNhbGxlciBuZWVkcyBiZWZvcmUgc3dlZXBpbmcgYW4gYXR0YWNobWVudCBmb2xkZXIgd2hvbGVzYWxlOiBvbmx5IGFcbiAqIG5vdGUtc3BlY2lmaWMgZm9sZGVyIGNhbiBiZSB0cmVhdGVkIGFzIGJlbG9uZ2luZyB0byB0aGUgbm90ZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBmb3IgdGhlIGhhcyBvd24gYXR0YWNobWVudCBmb2xkZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG5vdGUgaGFzIGl0cyBvd24gYXR0YWNobWVudCBmb2xkZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoYXNPd25BdHRhY2htZW50Rm9sZGVyKHBhcmFtczogSGFzT3duQXR0YWNobWVudEZvbGRlclBhcmFtcyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIGNvbnRleHQgPSBBdHRhY2htZW50UGF0aENvbnRleHQuVW5rbm93bixcbiAgICBwYXRoXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgoe1xuICAgIGFwcCxcbiAgICBjb250ZXh0LFxuICAgIG5vdGVQYXRoT3JGaWxlOiBwYXRoXG4gIH0pO1xuICBjb25zdCBkdW1teUF0dGFjaG1lbnRGb2xkZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZvbGRlclBhdGgoe1xuICAgIGFwcCxcbiAgICBjb250ZXh0LFxuICAgIG5vdGVQYXRoT3JGaWxlOiBqb2luKGRpcm5hbWUocGF0aCksIGAke0RVTU1ZX1BBVEh9LiR7TUFSS0RPV05fRklMRV9FWFRFTlNJT059YClcbiAgfSk7XG4gIHJldHVybiBhdHRhY2htZW50Rm9sZGVyUGF0aCAhPT0gZHVtbXlBdHRhY2htZW50Rm9sZGVyUGF0aDtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBhdHRhY2htZW50IGFscmVhZHkgc2l0cyBhdCBpdHMgcHJvcGVyIGF0dGFjaG1lbnQgcGF0aC5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBhdHRhY2htZW50J3MgY3VycmVudCBwYXRoIGlzLCB3aXRoaW4gaXRzIHByb3BlciBhdHRhY2htZW50IGZvbGRlciwgZWl0aGVyIHRoZSBwcm9wZXJcbiAqIGJhc2UgbmFtZSBvciB0aGUgcHJvcGVyIGJhc2UgbmFtZSBwbHVzIGFuIE9ic2lkaWFuIGRlZHVwbGljYXRpb24gc3VmZml4IChhIHNwYWNlIGZvbGxvd2VkIGJ5IGRpZ2l0cywgZS5nLlxuICogYGltZyAxYCkgd2l0aCB0aGUgc2FtZSBleHRlbnNpb24uIFRoZSBwcm9wZXIgcGF0aCBpcyBjb21wdXRlZCB2aWEge0BsaW5rIGdldEF0dGFjaG1lbnRGaWxlUGF0aH0gd2l0aFxuICoge0BsaW5rIEdldEF0dGFjaG1lbnRGaWxlUGF0aFBhcmFtcy5zaG91bGRTa2lwRHVwbGljYXRlQ2hlY2t9IHNldCB0byBgdHJ1ZWAgKHRoZSB0YXJnZXQgYmVmb3JlIGFueVxuICogZGVkdXBsaWNhdGlvbiBzdWZmaXgpLCBhbmQgdGhlIGNvbXBhcmlzb24gcmVzcGVjdHMgdGhlIGZpbGUgc3lzdGVtIGNhc2Utc2Vuc2l0aXZpdHkgZmxhZ1xuICogKGBnZXREYXRhQWRhcHRlckV4KGFwcCkuaW5zZW5zaXRpdmVgKSB0aGF0IGBnZXRTYWZlUmVuYW1lUGF0aGAgdXNlcy5cbiAqXG4gKiBUaGlzIGxldHMgYSBjYWxsZXIgcmVjb2duaXplIGEgZGVkdXBsaWNhdGlvbi1wYXJrZWQgYXR0YWNobWVudCBhcyBhbHJlYWR5LWNvbGxlY3RlZCwgc28gYSBcIm5lZWRzIG1vdmU/XCJcbiAqIGRlY2lzaW9uIG1hZGUgYWdhaW5zdCB0aGUgZGVkdXBsaWNhdGlvbi1mcmVlIHByb3BlciBwYXRoIGNvbnZlcmdlcyBpbnN0ZWFkIG9mIHJlLXNjaGVkdWxpbmcgdGhlIGZpbGUgZm9yZXZlci5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gUGFyYW1ldGVycyBmb3IgdGhlIGlzIGF0IHByb3BlciBhdHRhY2htZW50IHBhdGggZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGB0cnVlYCB3aGVuIHRoZSBhdHRhY2htZW50IGlzIGFscmVhZHkgYXQgaXRzIHByb3BlciBwYXRoLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNBdFByb3BlckF0dGFjaG1lbnRQYXRoKHBhcmFtczogSXNBdFByb3BlckF0dGFjaG1lbnRQYXRoUGFyYW1zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXR0YWNobWVudFBhdGhPckZpbGUsXG4gICAgY29udGV4dCA9IEF0dGFjaG1lbnRQYXRoQ29udGV4dC5Vbmtub3duLFxuICAgIG5vdGVQYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgY3VycmVudFBhdGggPSBnZXRQYXRoKGFwcCwgYXR0YWNobWVudFBhdGhPckZpbGUpO1xuICBjb25zdCBwcm9wZXJQYXRoID0gYXdhaXQgZ2V0QXR0YWNobWVudEZpbGVQYXRoKHtcbiAgICBhcHAsXG4gICAgY29udGV4dCxcbiAgICBub3RlUGF0aE9yRmlsZSxcbiAgICBvbGRBdHRhY2htZW50UGF0aE9yRmlsZTogYXR0YWNobWVudFBhdGhPckZpbGUsXG4gICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrOiB0cnVlXG4gIH0pO1xuXG4gIGNvbnN0IGlzSW5zZW5zaXRpdmUgPSBnZXREYXRhQWRhcHRlckV4KGFwcCkuaW5zZW5zaXRpdmU7XG5cbiAgZnVuY3Rpb24gZm9sZCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXNJbnNlbnNpdGl2ZSA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcbiAgfVxuXG4gIGlmIChmb2xkKGRpcm5hbWUoY3VycmVudFBhdGgpKSAhPT0gZm9sZChkaXJuYW1lKHByb3BlclBhdGgpKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRFeHRlbnNpb24gPSBleHRuYW1lKGN1cnJlbnRQYXRoKTtcbiAgY29uc3QgcHJvcGVyRXh0ZW5zaW9uID0gZXh0bmFtZShwcm9wZXJQYXRoKTtcbiAgaWYgKGZvbGQoY3VycmVudEV4dGVuc2lvbikgIT09IGZvbGQocHJvcGVyRXh0ZW5zaW9uKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IGN1cnJlbnRCYXNlTmFtZSA9IGJhc2VuYW1lKGN1cnJlbnRQYXRoLCBjdXJyZW50RXh0ZW5zaW9uKTtcbiAgY29uc3QgcHJvcGVyQmFzZU5hbWUgPSBiYXNlbmFtZShwcm9wZXJQYXRoLCBwcm9wZXJFeHRlbnNpb24pO1xuXG4gIGlmIChmb2xkKGN1cnJlbnRCYXNlTmFtZSkgPT09IGZvbGQocHJvcGVyQmFzZU5hbWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBjb25zdCBkZWR1cGxpY2F0aW9uUHJlZml4ID0gYCR7cHJvcGVyQmFzZU5hbWV9IGA7XG4gIGlmICghZm9sZChjdXJyZW50QmFzZU5hbWUpLnN0YXJ0c1dpdGgoZm9sZChkZWR1cGxpY2F0aW9uUHJlZml4KSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBkZWR1cGxpY2F0aW9uU3VmZml4ID0gY3VycmVudEJhc2VOYW1lLnNsaWNlKGRlZHVwbGljYXRpb25QcmVmaXgubGVuZ3RoKTtcbiAgcmV0dXJuIC9eXFxkKyQvLnRlc3QoZGVkdXBsaWNhdGlvblN1ZmZpeCk7XG59XG5cbi8qKlxuICogRmluZHMgQ3VzdG9tIEF0dGFjaG1lbnQgTG9jYXRpb24ncyBhdHRhY2htZW50LXBhdGggQVBJIGluIHRoZSBwbHVnaW4gQVBJIHJlZ2lzdHJ5LiBJdHMgcHJlc2VuY2UgaXMgdGhlXG4gKiBzeW5jaHJvbm91cyBwcm9iZSBmb3IgXCJzb21lYm9keSBlbHNlIG93bnMgdGhlIHJlc29sdXRpb25cIi5cbiAqXG4gKiBAcmV0dXJucyBUaGUgQVBJLCBvciBgbnVsbGAgd2hlbiB0aGF0IHBsdWdpbiBwdWJsaXNoZXMgbm8gcmVjb3JkIHNhdGlzZnlpbmcgdGhlIHJhbmdlIGFuZCBjb250cmFjdC5cbiAqL1xuZnVuY3Rpb24gZmluZEN1c3RvbUF0dGFjaG1lbnRMb2NhdGlvbkFwaSgpOiBDdXN0b21BdHRhY2htZW50TG9jYXRpb25BdHRhY2htZW50UGF0aEFwaSB8IG51bGwge1xuICByZXR1cm4gZmluZFBsdWdpbkFwaTxDdXN0b21BdHRhY2htZW50TG9jYXRpb25BdHRhY2htZW50UGF0aEFwaT4oe1xuICAgIGFwaVZlcnNpb25SYW5nZTogQ1VTVE9NX0FUVEFDSE1FTlRfTE9DQVRJT05fQVRUQUNITUVOVF9QQVRIX0FQSV9WRVJTSU9OX1JBTkdFLFxuICAgIGNvbnRyYWN0OiBDVVNUT01fQVRUQUNITUVOVF9MT0NBVElPTl9BVFRBQ0hNRU5UX1BBVEhfQVBJX0NPTlRSQUNULFxuICAgIHBsdWdpbklkOiBDVVNUT01fQVRUQUNITUVOVF9MT0NBVElPTl9QTFVHSU5fSURcbiAgfSk7XG59XG5cbi8qKlxuICogVGhlIHN5bmNocm9ub3VzIGNvcmUgb2Yge0BsaW5rIGdldEF0dGFjaG1lbnRGaWxlUGF0aH0sIHJlYWNoZWQgd2hlbiBDdXN0b20gQXR0YWNobWVudCBMb2NhdGlvbiBwdWJsaXNoZXMgbm9cbiAqIGF0dGFjaG1lbnQtcGF0aCBBUEkuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBnZXQgYXR0YWNobWVudCBmaWxlIHBhdGggc3luYyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBmaWxlIHBhdGggb2YgdGhlIGF0dGFjaG1lbnQuXG4gKi9cbmZ1bmN0aW9uIGdldEF0dGFjaG1lbnRGaWxlUGF0aFN5bmMocGFyYW1zOiBHZXRBdHRhY2htZW50RmlsZVBhdGhTeW5jUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3Qge1xuICAgIGFwcCxcbiAgICBub3RlUGF0aE9yRmlsZSxcbiAgICBvbGRBdHRhY2htZW50UGF0aE9yRmlsZSxcbiAgICBzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2tcbiAgfSA9IHBhcmFtcztcbiAgY29uc3QgYXR0YWNobWVudFBhdGggPSBnZXRQYXRoKGFwcCwgb2xkQXR0YWNobWVudFBhdGhPckZpbGUpO1xuICBjb25zdCBhdHRhY2htZW50RmlsZUV4dGVuc2lvbiA9IGV4dG5hbWUoYXR0YWNobWVudFBhdGgpO1xuXG4gIHJldHVybiBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNTeW5jKHtcbiAgICBhcHAsXG4gICAgYXR0YWNobWVudEZpbGVCYXNlTmFtZTogYmFzZW5hbWUoYXR0YWNobWVudFBhdGgsIGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uKSxcbiAgICBhdHRhY2htZW50RmlsZUV4dGVuc2lvbjogYXR0YWNobWVudEZpbGVFeHRlbnNpb24uc2xpY2UoMSksXG4gICAgbm90ZVBhdGhPckZpbGUsXG4gICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrXG4gIH0pO1xufVxuXG4vKipcbiAqIFRoZSBzeW5jaHJvbm91cyBjb3JlIG9mIHtAbGluayBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHN9LCB3aGljaCBjYW5ub3QgY3JlYXRlIGEgbWlzc2luZyBhdHRhY2htZW50XG4gKiBmb2xkZXIuIEl0cyBjYWxsZXIgY3JlYXRlcyB0aGUgZm9sZGVyIGZpcnN0IHdoZW4gdGhhdCBpcyB3YW50ZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSBnZXQgYXZhaWxhYmxlIHBhdGggZm9yIGF0dGFjaG1lbnRzIHN5bmMgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBUaGUgYXZhaWxhYmxlIHBhdGggZm9yIGF0dGFjaG1lbnRzLlxuICovXG5mdW5jdGlvbiBnZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNTeW5jKHBhcmFtczogR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzU3luY1BhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHtcbiAgICBhcHAsXG4gICAgYXR0YWNobWVudEZpbGVFeHRlbnNpb24sXG4gICAgbm90ZVBhdGhPckZpbGUsXG4gICAgc2hvdWxkU2tpcER1cGxpY2F0ZUNoZWNrXG4gIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGF0dGFjaG1lbnRGb2xkZXIgPSByZXNvbHZlQXR0YWNobWVudEZvbGRlcih7IGFwcCwgbm90ZVBhdGhPckZpbGUgfSk7XG4gIGNvbnN0IGF0dGFjaG1lbnRGaWxlQmFzZU5hbWUgPSBub3JtYWxpemVTdHJpbmcobm9ybWFsaXplU2xhc2hlcyhwYXJhbXMuYXR0YWNobWVudEZpbGVCYXNlTmFtZSkpO1xuXG4gIC8vIEEgZm9sZGVyIHRoYXQgZG9lcyBub3QgZXhpc3QgeWV0IHN0aWxsIG93bnMgdGhlIGF0dGFjaG1lbnQgcGF0aC5cbiAgLy8gUmVzb2x2aW5nIGl0IGFzIGEgbm9uLWV4aXN0aW5nIGZvbGRlciBzdG9wcyB0aGUgYW5zd2VyIGZyb20gY29sbGFwc2luZyB0byB0aGUgdmF1bHQgcm9vdC5cbiAgY29uc3QgZm9sZGVyID0gYXR0YWNobWVudEZvbGRlci5mb2xkZXIgPz8gZ2V0Rm9sZGVyKHsgYXBwLCBwYXRoT3JGb2xkZXI6IGF0dGFjaG1lbnRGb2xkZXIucGF0aCwgc2hvdWxkSW5jbHVkZU5vbkV4aXN0aW5nOiB0cnVlIH0pO1xuXG4gIGNvbnN0IHByZWZpeCA9IGZvbGRlci5nZXRQYXJlbnRQcmVmaXgoKTtcbiAgcmV0dXJuIHNob3VsZFNraXBEdXBsaWNhdGVDaGVja1xuICAgID8gbWFrZUZpbGVOYW1lKHtcbiAgICAgIGZpbGVCYXNlTmFtZTogcHJlZml4ICsgYXR0YWNobWVudEZpbGVCYXNlTmFtZSxcbiAgICAgIGZpbGVFeHRlbnNpb246IGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uXG4gICAgfSlcbiAgICA6IGFwcC52YXVsdC5nZXRBdmFpbGFibGVQYXRoKHByZWZpeCArIGF0dGFjaG1lbnRGaWxlQmFzZU5hbWUsIGF0dGFjaG1lbnRGaWxlRXh0ZW5zaW9uKTtcbn1cblxuZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJztcbn1cblxuZnVuY3Rpb24gaXNDdXN0b21BdHRhY2htZW50TG9jYXRpb25Jc0F0dGFjaG1lbnRVbml0Rm9sZGVyUGFyYW1zKHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgQ3VzdG9tQXR0YWNobWVudExvY2F0aW9uSXNBdHRhY2htZW50VW5pdEZvbGRlclBhcmFtcyB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiBSZWZsZWN0LmdldCh2YWx1ZSwgJ2ZvbGRlclBhdGgnKSA9PT0gJ3N0cmluZyc7XG59XG5cbmZ1bmN0aW9uIGlzR2V0QXZhaWxhYmxlUGF0aEZvckF0dGFjaG1lbnRzRXh0ZW5kZWRGdW5jdGlvblBhcmFtcyh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIEdldEF2YWlsYWJsZVBhdGhGb3JBdHRhY2htZW50c0V4dGVuZGVkRnVuY3Rpb25QYXJhbXMge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQoa2V5OiBrZXlvZiBHZXRBdmFpbGFibGVQYXRoRm9yQXR0YWNobWVudHNFeHRlbmRlZEZ1bmN0aW9uUGFyYW1zKTogdW5rbm93biB7XG4gICAgcmV0dXJuIFJlZmxlY3QuZ2V0KHZhbHVlIGFzIG9iamVjdCwga2V5KTtcbiAgfVxuXG4gIGNvbnN0IGF0dGFjaG1lbnRGaWxlU3RhdHMgPSByZWFkKCdhdHRhY2htZW50RmlsZVN0YXRzJyk7XG4gIGNvbnN0IGNvbnRleHQgPSByZWFkKCdjb250ZXh0Jyk7XG4gIGNvbnN0IG5vdGVQYXRoT3JGaWxlID0gcmVhZCgnbm90ZVBhdGhPckZpbGUnKTtcbiAgY29uc3Qgb2xkTm90ZVBhdGhPckZpbGUgPSByZWFkKCdvbGROb3RlUGF0aE9yRmlsZScpO1xuICBjb25zdCByZWFkQXR0YWNobWVudEZpbGVDb250ZW50ID0gcmVhZCgncmVhZEF0dGFjaG1lbnRGaWxlQ29udGVudCcpO1xuICByZXR1cm4gdHlwZW9mIHJlYWQoJ2F0dGFjaG1lbnRGaWxlQmFzZU5hbWUnKSA9PT0gJ3N0cmluZydcbiAgICAmJiB0eXBlb2YgcmVhZCgnYXR0YWNobWVudEZpbGVFeHRlbnNpb24nKSA9PT0gJ3N0cmluZydcbiAgICAmJiAoYXR0YWNobWVudEZpbGVTdGF0cyA9PT0gdW5kZWZpbmVkIHx8ICh0eXBlb2YgYXR0YWNobWVudEZpbGVTdGF0cyA9PT0gJ29iamVjdCcgJiYgYXR0YWNobWVudEZpbGVTdGF0cyAhPT0gbnVsbCkpXG4gICAgJiYgT2JqZWN0LnZhbHVlcyhBdHRhY2htZW50UGF0aENvbnRleHQpLmluY2x1ZGVzKGNvbnRleHQpXG4gICAgJiYgKG5vdGVQYXRoT3JGaWxlID09PSBudWxsIHx8IGlzUGF0aE9yRmlsZShub3RlUGF0aE9yRmlsZSkpXG4gICAgJiYgaXNQYXRoT3JGaWxlKHJlYWQoJ29sZEF0dGFjaG1lbnRQYXRoT3JGaWxlJykpXG4gICAgJiYgKG9sZE5vdGVQYXRoT3JGaWxlID09PSB1bmRlZmluZWQgfHwgaXNQYXRoT3JGaWxlKG9sZE5vdGVQYXRoT3JGaWxlKSlcbiAgICAmJiAocmVhZEF0dGFjaG1lbnRGaWxlQ29udGVudCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVhZEF0dGFjaG1lbnRGaWxlQ29udGVudCA9PT0gJ2Z1bmN0aW9uJylcbiAgICAmJiBpc09wdGlvbmFsQm9vbGVhbihyZWFkKCdzaG91bGRTa2lwRHVwbGljYXRlQ2hlY2snKSlcbiAgICAmJiBpc09wdGlvbmFsQm9vbGVhbihyZWFkKCdzaG91bGRTa2lwR2VuZXJhdGVkQXR0YWNobWVudEZpbGVOYW1lJykpXG4gICAgJiYgaXNPcHRpb25hbEJvb2xlYW4ocmVhZCgnc2hvdWxkU2tpcE1pc3NpbmdBdHRhY2htZW50Rm9sZGVyQ3JlYXRpb24nKSk7XG59XG5mdW5jdGlvbiBpc09wdGlvbmFsQm9vbGVhbih2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIGJvb2xlYW4gfCB1bmRlZmluZWQge1xuICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCBpc0Jvb2xlYW4odmFsdWUpO1xufVxuXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHN0cmluZyB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBwYXRoIGJ5IGNvbWJpbmluZyBtdWx0aXBsZSBzbGFzaGVzIGludG8gYSBzaW5nbGUgc2xhc2ggYW5kIHJlbW92aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nIHNsYXNoZXMuXG4gKlxuICogQHBhcmFtIHBhdGggLSBQYXRoIHRvIG5vcm1hbGl6ZS5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHBhdGguXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVNsYXNoZXMocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcGF0aCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IHBhdGgsXG4gICAgcmVwbGFjZXI6ICcvJyxcbiAgICBzZWFyY2hWYWx1ZTogLyg/OltcXFxcL10pKy9nXG4gIH0pO1xuICBwYXRoID0gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogcGF0aCxcbiAgICByZXBsYWNlcjogJycsXG4gICAgc2VhcmNoVmFsdWU6IC9eXFwvK3xcXC8rJC9nXG4gIH0pO1xuICByZXR1cm4gcGF0aCB8fCAnLyc7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGBhdHRhY2htZW50Rm9sZGVyUGF0aGAgc2V0dGluZyBhZ2FpbnN0IGEgbm90ZSBpbnRvIGEgY29uY3JldGUgYXR0YWNobWVudCBmb2xkZXIuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFBhcmFtZXRlcnMgZm9yIHRoZSByZXNvbHZlIGF0dGFjaG1lbnQgZm9sZGVyIGZ1bmN0aW9uLlxuICogQHJldHVybnMgVGhlIHJlc29sdmVkIGF0dGFjaG1lbnQgZm9sZGVyLlxuICovXG5mdW5jdGlvbiByZXNvbHZlQXR0YWNobWVudEZvbGRlcihwYXJhbXM6IFJlc29sdmVBdHRhY2htZW50Rm9sZGVyUGFyYW1zKTogUmVzb2x2ZUF0dGFjaG1lbnRGb2xkZXJSZXN1bHQge1xuICBjb25zdCB7XG4gICAgYXBwLFxuICAgIG5vdGVQYXRoT3JGaWxlXG4gIH0gPSBwYXJhbXM7XG4gIGxldCBhdHRhY2htZW50Rm9sZGVyUGF0aCA9IGFwcC52YXVsdC5nZXRDb25maWcoJ2F0dGFjaG1lbnRGb2xkZXJQYXRoJykgYXMgc3RyaW5nO1xuICBjb25zdCBpc0N1cnJlbnRGb2xkZXIgPSBhdHRhY2htZW50Rm9sZGVyUGF0aCA9PT0gJy4nIHx8IGF0dGFjaG1lbnRGb2xkZXJQYXRoID09PSAnLi8nO1xuICBjb25zdCByZWxhdGl2ZVBhdGggPSBhdHRhY2htZW50Rm9sZGVyUGF0aC5zdGFydHNXaXRoKCcuLycpXG4gICAgPyB0cmltU3RhcnQoe1xuICAgICAgJHN0cmluZzogYXR0YWNobWVudEZvbGRlclBhdGgsXG4gICAgICBwcmVmaXg6ICcuLydcbiAgICB9KVxuICAgIDogbnVsbDtcblxuICAvLyBBIG5vdGUgdGhhdCBkb2VzIG5vdCBleGlzdCB5ZXQgKGEgcmVuYW1lIHRhcmdldCwgYSBkdW1teSBzaWJsaW5nKSBzdGlsbCBiZWxvbmdzIHRvIGl0cyBvd24gZm9sZGVyLlxuICAvLyBNYXRlcmlhbGl6aW5nIGl0IGZyb20gaXRzIHBhdGgga2VlcHMgdGhhdCBmb2xkZXIsIHdoZXJlIGEgdmF1bHQgbG9va3VwIHdvdWxkIGZhbGwgYmFjayB0byB0aGUgcm9vdC5cbiAgLy8gT25seSBhbiBleHBsaWNpdGx5IG5vdGUtbGVzcyBhdHRhY2htZW50IHJlc29sdmVzIHRvIHRoZSB2YXVsdCByb290LlxuICBjb25zdCBub3RlRmlsZU9yTnVsbCA9IG5vdGVQYXRoT3JGaWxlID09PSBudWxsXG4gICAgPyBudWxsXG4gICAgOiBnZXRGaWxlKHtcbiAgICAgIGFwcCxcbiAgICAgIHBhdGhPckZpbGU6IG5vdGVQYXRoT3JGaWxlLFxuICAgICAgc2hvdWxkSW5jbHVkZU5vbkV4aXN0aW5nOiB0cnVlXG4gICAgfSk7XG5cbiAgaWYgKGlzQ3VycmVudEZvbGRlcikge1xuICAgIGF0dGFjaG1lbnRGb2xkZXJQYXRoID0gbm90ZUZpbGVPck51bGwgPyBub3RlRmlsZU9yTnVsbC5wYXJlbnQ/LnBhdGggPz8gJycgOiAnJztcbiAgfSBlbHNlIGlmIChyZWxhdGl2ZVBhdGgpIHtcbiAgICBhdHRhY2htZW50Rm9sZGVyUGF0aCA9IChub3RlRmlsZU9yTnVsbCA/IG5vdGVGaWxlT3JOdWxsLnBhcmVudD8uZ2V0UGFyZW50UHJlZml4KCkgPz8gJycgOiAnJykgKyByZWxhdGl2ZVBhdGg7XG4gIH1cblxuICBhdHRhY2htZW50Rm9sZGVyUGF0aCA9IG5vcm1hbGl6ZVN0cmluZyhub3JtYWxpemVTbGFzaGVzKGF0dGFjaG1lbnRGb2xkZXJQYXRoKSk7XG5cbiAgcmV0dXJuIHtcbiAgICBmb2xkZXI6IGdldEZvbGRlck9yTnVsbCh7IGFwcCwgaXNDYXNlSW5zZW5zaXRpdmU6IHRydWUsIHBhdGhPckZvbGRlcjogYXR0YWNobWVudEZvbGRlclBhdGggfSksXG4gICAgcGF0aDogYXR0YWNobWVudEZvbGRlclBhdGgsXG4gICAgcmVsYXRpdmVQYXRoXG4gIH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWUEsa0JBTU87QUFDUCxvQkFJTztBQUNQLDZCQUdPO0FBS1AseUJBUU87QUFDUCwrQkFHTztBQUNQLHdCQUE4QjtBQUt2QixJQUFLLHdCQUFMLGtCQUFLQSwyQkFBTDtBQUlMLEVBQUFBLHVCQUFBLGdCQUFhO0FBS2IsRUFBQUEsdUJBQUEsZ0JBQWE7QUFLYixFQUFBQSx1QkFBQSxhQUFVO0FBZEEsU0FBQUE7QUFBQSxHQUFBO0FBd0hMLE1BQU0sdUNBQXVDO0FBTXBELE1BQU0sK0RBQStEO0FBTXJFLE1BQU0sMERBQXdIO0FBQUEsRUFDNUgsZ0NBQWdDO0FBQUEsSUFDOUIsV0FBTyxnREFBc0YsQ0FBQztBQUFBLE1BQzVGLFVBQVU7QUFBQSxNQUNWLFdBQVc7QUFBQSxJQUNiLENBQUMsQ0FBQztBQUFBLElBQ0YsWUFBUSxnREFBc0IsRUFBRSxVQUFVLFlBQVksV0FBVyxTQUFTLENBQUM7QUFBQSxFQUM3RTtBQUFBLEVBQ0Esd0JBQXdCO0FBQUEsSUFDdEIsV0FBTyxnREFBc0YsQ0FBQztBQUFBLE1BQzVGLFVBQVU7QUFBQSxNQUNWLFdBQVc7QUFBQSxJQUNiLENBQUMsQ0FBQztBQUFBLElBQ0YsWUFBUSxnREFBc0IsRUFBRSxVQUFVLGFBQWEsV0FBVyxVQUFVLENBQUM7QUFBQSxFQUMvRTtBQUNGO0FBS08sTUFBTSxhQUFhO0FBOFAxQixlQUFzQixzQkFBc0IsUUFBc0Q7QUFDaEcsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNGLElBQUk7QUFFSixRQUFNLDhCQUE4QixnQ0FBZ0M7QUFDcEUsTUFBSSxDQUFDLDZCQUE2QjtBQUdoQyxXQUFPLDBCQUEwQjtBQUFBLE1BQy9CO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSDtBQUVBLFFBQU0scUJBQWlCLDRCQUFRLEtBQUssdUJBQXVCO0FBQzNELFFBQU0sOEJBQTBCLHFCQUFRLGNBQWM7QUFDdEQsUUFBTSw2QkFBeUIsc0JBQVMsZ0JBQWdCLHVCQUF1QjtBQUMvRSxRQUFNLHFCQUFpQixrQ0FBYyxFQUFFLEtBQUssWUFBWSxlQUFlLENBQUM7QUFFeEUsU0FBTyxNQUFNLDRCQUE0QiwrQkFBK0I7QUFBQSxJQUN0RTtBQUFBLElBQ0EseUJBQXlCLHdCQUF3QixNQUFNLENBQUM7QUFBQSxJQUN4RCxxQkFBcUIsZ0JBQWdCO0FBQUEsSUFDckMsU0FBUyxPQUFPO0FBQUEsSUFDaEI7QUFBQSxJQUNBO0FBQUEsSUFDQSxtQkFBbUIsT0FBTztBQUFBLElBQzFCLDJCQUEyQixpQkFBaUIsTUFBNEIsSUFBSSxNQUFNLFdBQVcsY0FBYyxJQUFJO0FBQUEsSUFDL0c7QUFBQSxJQUNBLDJDQUEyQztBQUFBLEVBQzdDLENBQUM7QUFDSDtBQVFBLGVBQXNCLHdCQUF3QixRQUF3RDtBQUNwRyxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0EsVUFBVTtBQUFBLElBQ1Y7QUFBQSxFQUNGLElBQUk7QUFDSixhQUFPO0FBQUEsSUFDTCxNQUFNLHNCQUFzQjtBQUFBLE1BQzFCO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLHlCQUF5QjtBQUFBLE1BQ3pCLDBCQUEwQjtBQUFBLElBQzVCLENBQUM7QUFBQSxFQUNIO0FBQ0Y7QUFxQk8sU0FBUyxrQ0FBa0MsUUFBZ0U7QUFDaEgsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBRUosU0FBTyxnQ0FBZ0MsSUFDbkMsV0FDQSx5Q0FBaUIsMEJBQTBCO0FBQUEsSUFDM0M7QUFBQSxJQUNBO0FBQUEsSUFDQSx5QkFBeUI7QUFBQSxJQUN6QiwwQkFBMEI7QUFBQSxFQUM1QixDQUFDLENBQUM7QUFDTjtBQVFBLGVBQXNCLCtCQUErQixRQUErRDtBQUNsSCxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBSUosUUFBTSxtQkFBbUIsd0JBQXdCLEVBQUUsS0FBSyxlQUFlLENBQUM7QUFDeEUsTUFBSSxDQUFDLGlCQUFpQixVQUFVLGlCQUFpQixnQkFBZ0IsQ0FBQywyQ0FBMkM7QUFDM0csVUFBTSxJQUFJLE1BQU0sYUFBYSxpQkFBaUIsSUFBSTtBQUFBLEVBQ3BEO0FBRUEsU0FBTyxtQ0FBbUMsTUFBTTtBQUNsRDtBQXFCTyxTQUFTLHVDQUF1QyxNQUEwRDtBQUMvRyxRQUFNLDhCQUE4QixnQ0FBZ0M7QUFDcEUsU0FBTyw4QkFDSCxDQUFDLGVBQWdDLDRCQUE0Qix1QkFBdUIsRUFBRSxXQUFXLENBQUMsSUFDbEc7QUFDTjtBQWlCQSxlQUFzQix1QkFBdUIsUUFBd0Q7QUFDbkcsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBLFVBQVU7QUFBQSxJQUNWO0FBQUEsRUFDRixJQUFJO0FBQ0osUUFBTSx1QkFBdUIsTUFBTSx3QkFBd0I7QUFBQSxJQUN6RDtBQUFBLElBQ0E7QUFBQSxJQUNBLGdCQUFnQjtBQUFBLEVBQ2xCLENBQUM7QUFDRCxRQUFNLDRCQUE0QixNQUFNLHdCQUF3QjtBQUFBLElBQzlEO0FBQUEsSUFDQTtBQUFBLElBQ0Esb0JBQWdCLHNCQUFLLHFCQUFRLElBQUksR0FBRyxHQUFHLFVBQVUsSUFBSSwwQ0FBdUIsRUFBRTtBQUFBLEVBQ2hGLENBQUM7QUFDRCxTQUFPLHlCQUF5QjtBQUNsQztBQWtCQSxlQUFzQix5QkFBeUIsUUFBMEQ7QUFDdkcsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQSxVQUFVO0FBQUEsSUFDVjtBQUFBLEVBQ0YsSUFBSTtBQUVKLFFBQU0sa0JBQWMsNEJBQVEsS0FBSyxvQkFBb0I7QUFDckQsUUFBTSxhQUFhLE1BQU0sc0JBQXNCO0FBQUEsSUFDN0M7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0EseUJBQXlCO0FBQUEsSUFDekIsMEJBQTBCO0FBQUEsRUFDNUIsQ0FBQztBQUVELFFBQU0sb0JBQWdCLHlDQUFpQixHQUFHLEVBQUU7QUFFNUMsV0FBUyxLQUFLLE9BQXVCO0FBQ25DLFdBQU8sZ0JBQWdCLE1BQU0sWUFBWSxJQUFJO0FBQUEsRUFDL0M7QUFFQSxNQUFJLFNBQUsscUJBQVEsV0FBVyxDQUFDLE1BQU0sU0FBSyxxQkFBUSxVQUFVLENBQUMsR0FBRztBQUM1RCxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sdUJBQW1CLHFCQUFRLFdBQVc7QUFDNUMsUUFBTSxzQkFBa0IscUJBQVEsVUFBVTtBQUMxQyxNQUFJLEtBQUssZ0JBQWdCLE1BQU0sS0FBSyxlQUFlLEdBQUc7QUFDcEQsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLHNCQUFrQixzQkFBUyxhQUFhLGdCQUFnQjtBQUM5RCxRQUFNLHFCQUFpQixzQkFBUyxZQUFZLGVBQWU7QUFFM0QsTUFBSSxLQUFLLGVBQWUsTUFBTSxLQUFLLGNBQWMsR0FBRztBQUNsRCxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sc0JBQXNCLEdBQUcsY0FBYztBQUM3QyxNQUFJLENBQUMsS0FBSyxlQUFlLEVBQUUsV0FBVyxLQUFLLG1CQUFtQixDQUFDLEdBQUc7QUFDaEUsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLHNCQUFzQixnQkFBZ0IsTUFBTSxvQkFBb0IsTUFBTTtBQUM1RSxTQUFPLFFBQVEsS0FBSyxtQkFBbUI7QUFDekM7QUFRQSxTQUFTLGtDQUFvRjtBQUMzRixhQUFPLGlDQUF5RDtBQUFBLElBQzlELGlCQUFpQjtBQUFBLElBQ2pCLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxFQUNaLENBQUM7QUFDSDtBQVNBLFNBQVMsMEJBQTBCLFFBQWlEO0FBQ2xGLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBQ0osUUFBTSxxQkFBaUIsNEJBQVEsS0FBSyx1QkFBdUI7QUFDM0QsUUFBTSw4QkFBMEIscUJBQVEsY0FBYztBQUV0RCxTQUFPLG1DQUFtQztBQUFBLElBQ3hDO0FBQUEsSUFDQSw0QkFBd0Isc0JBQVMsZ0JBQWdCLHVCQUF1QjtBQUFBLElBQ3hFLHlCQUF5Qix3QkFBd0IsTUFBTSxDQUFDO0FBQUEsSUFDeEQ7QUFBQSxJQUNBO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFTQSxTQUFTLG1DQUFtQyxRQUEwRDtBQUNwRyxRQUFNO0FBQUEsSUFDSjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUNKLFFBQU0sbUJBQW1CLHdCQUF3QixFQUFFLEtBQUssZUFBZSxDQUFDO0FBQ3hFLFFBQU0sNkJBQXlCLCtCQUFnQixpQkFBaUIsT0FBTyxzQkFBc0IsQ0FBQztBQUk5RixRQUFNLFNBQVMsaUJBQWlCLGNBQVUsOEJBQVUsRUFBRSxLQUFLLGNBQWMsaUJBQWlCLE1BQU0sMEJBQTBCLEtBQUssQ0FBQztBQUVoSSxRQUFNLFNBQVMsT0FBTyxnQkFBZ0I7QUFDdEMsU0FBTywrQkFDSCwwQkFBYTtBQUFBLElBQ2IsY0FBYyxTQUFTO0FBQUEsSUFDdkIsZUFBZTtBQUFBLEVBQ2pCLENBQUMsSUFDQyxJQUFJLE1BQU0saUJBQWlCLFNBQVMsd0JBQXdCLHVCQUF1QjtBQUN6RjtBQUVBLFNBQVMsVUFBVSxPQUFrQztBQUNuRCxTQUFPLE9BQU8sVUFBVTtBQUMxQjtBQUVBLFNBQVMsdURBQXVELE9BQStFO0FBQzdJLFNBQU8sT0FBTyxVQUFVLFlBQVksVUFBVSxRQUFRLE9BQU8sUUFBUSxJQUFJLE9BQU8sWUFBWSxNQUFNO0FBQ3BHO0FBRUEsU0FBUyx1REFBdUQsT0FBK0U7QUFDN0ksTUFBSSxPQUFPLFVBQVUsWUFBWSxVQUFVLE1BQU07QUFDL0MsV0FBTztBQUFBLEVBQ1Q7QUFFQSxXQUFTLEtBQUssS0FBMEU7QUFDdEYsV0FBTyxRQUFRLElBQUksT0FBaUIsR0FBRztBQUFBLEVBQ3pDO0FBRUEsUUFBTSxzQkFBc0IsS0FBSyxxQkFBcUI7QUFDdEQsUUFBTSxVQUFVLEtBQUssU0FBUztBQUM5QixRQUFNLGlCQUFpQixLQUFLLGdCQUFnQjtBQUM1QyxRQUFNLG9CQUFvQixLQUFLLG1CQUFtQjtBQUNsRCxRQUFNLDRCQUE0QixLQUFLLDJCQUEyQjtBQUNsRSxTQUFPLE9BQU8sS0FBSyx3QkFBd0IsTUFBTSxZQUM1QyxPQUFPLEtBQUsseUJBQXlCLE1BQU0sYUFDMUMsd0JBQXdCLFVBQWMsT0FBTyx3QkFBd0IsWUFBWSx3QkFBd0IsU0FDMUcsT0FBTyxPQUFPLHFCQUFxQixFQUFFLFNBQVMsT0FBTyxNQUNwRCxtQkFBbUIsWUFBUSxpQ0FBYSxjQUFjLFVBQ3ZELGlDQUFhLEtBQUsseUJBQXlCLENBQUMsTUFDM0Msc0JBQXNCLGNBQWEsaUNBQWEsaUJBQWlCLE9BQ2pFLDhCQUE4QixRQUFRLE9BQU8sOEJBQThCLGVBQzVFLGtCQUFrQixLQUFLLDBCQUEwQixDQUFDLEtBQ2xELGtCQUFrQixLQUFLLHVDQUF1QyxDQUFDLEtBQy9ELGtCQUFrQixLQUFLLDJDQUEyQyxDQUFDO0FBQzFFO0FBQ0EsU0FBUyxrQkFBa0IsT0FBOEM7QUFDdkUsU0FBTyxVQUFVLFVBQWEsVUFBVSxLQUFLO0FBQy9DO0FBRUEsU0FBUyxTQUFTLE9BQWlDO0FBQ2pELFNBQU8sT0FBTyxVQUFVO0FBQzFCO0FBUUEsU0FBUyxpQkFBaUIsTUFBc0I7QUFDOUMsYUFBTywwQkFBVztBQUFBLElBQ2hCLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLGFBQWE7QUFBQSxFQUNmLENBQUM7QUFDRCxhQUFPLDBCQUFXO0FBQUEsSUFDaEIsU0FBUztBQUFBLElBQ1QsVUFBVTtBQUFBLElBQ1YsYUFBYTtBQUFBLEVBQ2YsQ0FBQztBQUNELFNBQU8sUUFBUTtBQUNqQjtBQVFBLFNBQVMsd0JBQXdCLFFBQXNFO0FBQ3JHLFFBQU07QUFBQSxJQUNKO0FBQUEsSUFDQTtBQUFBLEVBQ0YsSUFBSTtBQUNKLE1BQUksdUJBQXVCLElBQUksTUFBTSxVQUFVLHNCQUFzQjtBQUNyRSxRQUFNLGtCQUFrQix5QkFBeUIsT0FBTyx5QkFBeUI7QUFDakYsUUFBTSxlQUFlLHFCQUFxQixXQUFXLElBQUksUUFDckQseUJBQVU7QUFBQSxJQUNWLFNBQVM7QUFBQSxJQUNULFFBQVE7QUFBQSxFQUNWLENBQUMsSUFDQztBQUtKLFFBQU0saUJBQWlCLG1CQUFtQixPQUN0QyxXQUNBLDRCQUFRO0FBQUEsSUFDUjtBQUFBLElBQ0EsWUFBWTtBQUFBLElBQ1osMEJBQTBCO0FBQUEsRUFDNUIsQ0FBQztBQUVILE1BQUksaUJBQWlCO0FBQ25CLDJCQUF1QixpQkFBaUIsZUFBZSxRQUFRLFFBQVEsS0FBSztBQUFBLEVBQzlFLFdBQVcsY0FBYztBQUN2Qiw0QkFBd0IsaUJBQWlCLGVBQWUsUUFBUSxnQkFBZ0IsS0FBSyxLQUFLLE1BQU07QUFBQSxFQUNsRztBQUVBLDZCQUF1QiwrQkFBZ0IsaUJBQWlCLG9CQUFvQixDQUFDO0FBRTdFLFNBQU87QUFBQSxJQUNMLFlBQVEsb0NBQWdCLEVBQUUsS0FBSyxtQkFBbUIsTUFBTSxjQUFjLHFCQUFxQixDQUFDO0FBQUEsSUFDNUYsTUFBTTtBQUFBLElBQ047QUFBQSxFQUNGO0FBQ0Y7IiwKICAibmFtZXMiOiBbIkF0dGFjaG1lbnRQYXRoQ29udGV4dCJdCn0K
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Provides utility functions for working with attachment paths.
|
|
6
6
|
*/
|
|
7
|
-
import type { App, FileStats
|
|
7
|
+
import type { App, FileStats } from 'obsidian' with { 'resolution-mode': 'import' };
|
|
8
8
|
import type { PathOrFile } from './file-system.cjs';
|
|
9
9
|
/**
|
|
10
10
|
* A context for an attachment path.
|
|
@@ -80,30 +80,9 @@ export interface GetAvailablePathForAttachmentsExtendedFunctionParams {
|
|
|
80
80
|
readonly shouldSkipMissingAttachmentFolderCreation: boolean | undefined;
|
|
81
81
|
}
|
|
82
82
|
/**
|
|
83
|
-
*
|
|
83
|
+
* The plugin id Custom Attachment Location publishes its API under.
|
|
84
84
|
*/
|
|
85
|
-
export
|
|
86
|
-
/**
|
|
87
|
-
* Whether a folder path is designated as an attachment unit — a folder that must travel whole rather
|
|
88
|
-
* than have the linked file relocated out of it.
|
|
89
|
-
*
|
|
90
|
-
* Optional: an attachment-location plugin may own the resolution without designating anything, and an
|
|
91
|
-
* absent member is the same "nobody owns this policy" answer {@link GetAvailablePathForAttachmentsFunctionExtended.extended}
|
|
92
|
-
* itself gives.
|
|
93
|
-
*
|
|
94
|
-
* @param folderPath - The vault-relative path of the folder.
|
|
95
|
-
* @returns `true` if the folder is designated as an attachment unit, `false` otherwise.
|
|
96
|
-
*/
|
|
97
|
-
checkIsAttachmentUnitFolder?: (folderPath: string) => boolean;
|
|
98
|
-
/**
|
|
99
|
-
* Get available path for attachments with additional params.
|
|
100
|
-
*
|
|
101
|
-
* @param params - Parameters for the get available path for attachments.
|
|
102
|
-
* @returns A {@link Promise} that resolves to the available path for attachments.
|
|
103
|
-
*/
|
|
104
|
-
extended: (params: GetAvailablePathForAttachmentsExtendedFunctionParams) => Promise<string>;
|
|
105
|
-
}
|
|
106
|
-
type GetAvailablePathForAttachmentsFunction = Vault['getAvailablePathForAttachments'];
|
|
85
|
+
export declare const CUSTOM_ATTACHMENT_LOCATION_PLUGIN_ID = "obsidian-custom-attachment-location";
|
|
107
86
|
/**
|
|
108
87
|
* Dummy path.
|
|
109
88
|
*/
|
|
@@ -265,16 +244,14 @@ export declare function getAttachmentFolderPath(params: GetAttachmentFolderPathP
|
|
|
265
244
|
* caller deciding whether to merely *offer* a command cannot await {@link getAttachmentFolderPath}. This is
|
|
266
245
|
* the synchronous twin such a caller can use instead.
|
|
267
246
|
*
|
|
268
|
-
* The answer is `null` when it is not knowable synchronously — that is, when
|
|
269
|
-
*
|
|
270
|
-
* genuinely asynchronous. `null` means "ask {@link getAttachmentFolderPath}", never "there is no attachment
|
|
247
|
+
* The answer is `null` when it is not knowable synchronously — that is, when Custom Attachment Location publishes
|
|
248
|
+
* its attachment-path API and therefore owns the resolution, which is genuinely asynchronous. `null` means "ask {@link getAttachmentFolderPath}", never "there is no attachment
|
|
271
249
|
* folder". Otherwise the answer is exact rather than a guess: it is produced by the very same code
|
|
272
250
|
* {@link getAttachmentFolderPath} runs, whose only asynchronous step — creating a missing attachment folder —
|
|
273
251
|
* is unreachable on this path.
|
|
274
252
|
*
|
|
275
|
-
* There is deliberately no `context` parameter: {@link AttachmentPathContext} only ever reaches
|
|
276
|
-
*
|
|
277
|
-
* whenever one is installed.
|
|
253
|
+
* There is deliberately no `context` parameter: {@link AttachmentPathContext} only ever reaches that plugin's
|
|
254
|
+
* resolver, and this function answers `null` whenever it is published.
|
|
278
255
|
*
|
|
279
256
|
* @param params - Parameters for the get attachment folder path sync or null function.
|
|
280
257
|
* @returns The attachment folder path, or `null` when it can only be resolved asynchronously.
|
|
@@ -288,22 +265,25 @@ export declare function getAttachmentFolderPathSyncOrNull(params: GetAttachmentF
|
|
|
288
265
|
*/
|
|
289
266
|
export declare function getAvailablePathForAttachments(params: GetAvailablePathForAttachmentsParams): Promise<string>;
|
|
290
267
|
/**
|
|
291
|
-
* Reads the attachment-unit-folder designation
|
|
268
|
+
* Reads the attachment-unit-folder designation Custom Attachment Location publishes through its plugin API.
|
|
292
269
|
*
|
|
293
|
-
* The designation is one plugin's setting but every relocating plugin's business, so it
|
|
294
|
-
* that
|
|
295
|
-
*
|
|
296
|
-
* settings is the point — a folder kept whole by one plugin and torn apart by another is exactly the failure
|
|
270
|
+
* The designation is one plugin's setting but every relocating plugin's business, so it is read from the same
|
|
271
|
+
* API that answers the attachment path itself. Reading it here rather than having each caller look for the
|
|
272
|
+
* plugin is the point — a folder kept whole by one plugin and torn apart by another is exactly the failure
|
|
297
273
|
* `findAttachmentUnitFolderPath` exists to prevent.
|
|
298
274
|
*
|
|
299
|
-
* `undefined` means nobody published a designation, the same "nobody owns this policy" answer
|
|
300
|
-
* {@link
|
|
301
|
-
*
|
|
275
|
+
* `undefined` means nobody published a designation, the same "nobody owns this policy" answer that sends
|
|
276
|
+
* {@link getAttachmentFilePath} to Obsidian's own resolution. It is distinct from a designation that answers
|
|
277
|
+
* `false` for every folder.
|
|
278
|
+
*
|
|
279
|
+
* The registry is looked up once, when this is called, so a caller walking a folder's ancestors asks the same
|
|
280
|
+
* API all the way up.
|
|
302
281
|
*
|
|
303
|
-
* @param
|
|
282
|
+
* @param _app - An Obsidian application instance. Unused since the answer comes from the plugin API registry;
|
|
283
|
+
* kept so existing callers compile unchanged.
|
|
304
284
|
* @returns The designation predicate, or `undefined` when nobody published one.
|
|
305
285
|
*/
|
|
306
|
-
export declare function getCheckIsAttachmentUnitFolderFunction(
|
|
286
|
+
export declare function getCheckIsAttachmentUnitFolderFunction(_app: App): ((folderPath: string) => boolean) | undefined;
|
|
307
287
|
/**
|
|
308
288
|
* Checks whether a note's attachment folder is specific to that note rather than shared with its siblings.
|
|
309
289
|
*
|
|
@@ -311,8 +291,7 @@ export declare function getCheckIsAttachmentUnitFolderFunction(app: App): GetAva
|
|
|
311
291
|
* would get: they differ only when the folder depends on the note's NAME. Every built-in
|
|
312
292
|
* `attachmentFolderPath` mode — the vault root, a fixed folder, the note's own folder (`./`), a subfolder of
|
|
313
293
|
* the note's folder (`./sub`) — is shared by every note in that folder, so it answers `false`; `true` arises
|
|
314
|
-
* from
|
|
315
|
-
* note's name (what an attachment-location plugin produces).
|
|
294
|
+
* from Custom Attachment Location's resolver deriving the folder from the note's name.
|
|
316
295
|
*
|
|
317
296
|
* This is the distinction a caller needs before sweeping an attachment folder wholesale: only a
|
|
318
297
|
* note-specific folder can be treated as belonging to the note.
|
|
@@ -338,4 +317,3 @@ export declare function hasOwnAttachmentFolder(params: HasOwnAttachmentFolderPar
|
|
|
338
317
|
* @returns A {@link Promise} that resolves to `true` when the attachment is already at its proper path.
|
|
339
318
|
*/
|
|
340
319
|
export declare function isAtProperAttachmentPath(params: IsAtProperAttachmentPathParams): Promise<boolean>;
|
|
341
|
-
export {};
|
|
@@ -165,4 +165,4 @@ function rebasePathOntoFolder(params) {
|
|
|
165
165
|
findAttachmentUnitFolderPath,
|
|
166
166
|
rebasePathOntoFolder
|
|
167
167
|
});
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
168
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2F0dGFjaG1lbnQtdW5pdC1mb2xkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZXNvbHZlcyB3aGljaCBmb2xkZXIgYW4gYXR0YWNobWVudCBiZWxvbmdzIHRvIHdoZW4gdGhlIHVzZXIgaGFzIGRlc2lnbmF0ZWQgZm9sZGVycyB0aGF0IG11c3RcbiAqIHRyYXZlbCBhcyBhIHNpbmdsZSB1bml0LlxuICpcbiAqIFNvbWUgZm9ybWF0cyBhcmUgcmVhbGx5IGEgZGlyZWN0b3J5IHRyZWUgcmF0aGVyIHRoYW4gYSBmaWxlOiBhIHBhZ2Ugc2F2ZWQgZnJvbSBhIGJyb3dzZXIgc2l0cyBuZXh0XG4gKiB0byBhIGBfZmlsZXMvYCBmb2xkZXIgaG9sZGluZyBpdHMgaW1hZ2VzIGFuZCBzdHlsZXNoZWV0cywgYW4gYC5leGNhbGlkcmF3YCBzaXRzIG5leHQgdG8gdGhlIGltYWdlc1xuICogaXQgcmVmZXJlbmNlcy4gUmVsb2NhdGluZyBvbmx5IHRoZSBsaW5rZWQgZmlsZSBsZWF2ZXMgdGhlIHJlc3QgYmVoaW5kIGFuZCB0aGUgYXR0YWNobWVudCBhcnJpdmVzXG4gKiBicm9rZW4uXG4gKlxuICogVGhpcyBsaXZlcyBpbiB0aGUgc2hhcmVkIGxpYnJhcnkgcmF0aGVyIHRoYW4gaW4gb25lIHBsdWdpbiBiZWNhdXNlIG1vcmUgdGhhbiBvbmUgcGx1Z2luIHJlbG9jYXRlc1xuICogYXR0YWNobWVudHMgb3ZlciB0aGUgc2FtZSB2YXVsdC4gSWYgdGhleSBlYWNoIGRlY2lkZWQgc2VwYXJhdGVseSB3aGF0IG9uZSBhdHRhY2htZW50IGlzLCBhIHVzZXJcbiAqIHdpdGggYm90aCBpbnN0YWxsZWQgd291bGQgZ2V0IGEgZm9sZGVyIGtlcHQgd2hvbGUgYnkgb25lIGFuZCB0b3JuIGFwYXJ0IGJ5IHRoZSBvdGhlci5cbiAqXG4gKiBXaGljaCBpcyB3aHkgdGhlIGRlc2lnbmF0aW9uIGl0c2VsZiBpcyByZWFkIGZyb20gb25lIHNoYXJlZCBzb3VyY2UgcmF0aGVyIHRoYW4gc3VwcGxpZWQgcGVyIGNhbGxlcjogcGFzc1xuICogYW4ge0BsaW5rIEFwcH0gYW5kIHtAbGluayBmaW5kQXR0YWNobWVudFVuaXRGb2xkZXJQYXRofSB3YWxrcyB3aXRoIHdoYXRldmVyIEN1c3RvbSBBdHRhY2htZW50IExvY2F0aW9uXG4gKiBwdWJsaXNoZXMgdGhyb3VnaCBpdHMgcGx1Z2luIEFQSSwgc28gZXZlcnkgcGx1Z2luIGRlY2lkZXMgZnJvbSBvbmUgYW5zd2VyLiBUaGUgZXhwbGljaXQtcHJlZGljYXRlIGZvcm0gcmVtYWlucyBmb3IgYSBjYWxsZXIgdGhhdCBnZW51aW5lbHkgb3ducyBpdHMgb3duIHBhdHRlcm5zLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgeyBkaXJuYW1lIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuXG5pbXBvcnQgeyBnZXRDaGVja0lzQXR0YWNobWVudFVuaXRGb2xkZXJGdW5jdGlvbiB9IGZyb20gJy4vYXR0YWNobWVudC1wYXRoLnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZmluZEF0dGFjaG1lbnRVbml0Rm9sZGVyUGF0aH0sIHJlYWRpbmcgdGhlIGRlc2lnbmF0aW9uIEN1c3RvbSBBdHRhY2htZW50IExvY2F0aW9uXG4gKiBwdWJsaXNoZXMgdGhyb3VnaCBpdHMgcGx1Z2luIEFQSS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaW5kQXR0YWNobWVudFVuaXRGb2xkZXJQYXRoRnJvbUFwcFBhcmFtcyB7XG4gIC8qKlxuICAgKiBBbiBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgdmF1bHQtcmVsYXRpdmUgcGF0aCBvZiB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGF0dGFjaG1lbnRQYXRoOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGZpbmRBdHRhY2htZW50VW5pdEZvbGRlclBhdGh9LlxuICpcbiAqIFByZWZlciB7QGxpbmsgRmluZEF0dGFjaG1lbnRVbml0Rm9sZGVyUGF0aEZyb21BcHBQYXJhbXN9IFx1MjAxNCBpdCBpcyB0aGUgZm9ybSB0aGF0IG1ha2VzIGV2ZXJ5IHBsdWdpblxuICogZGVjaWRlIGZyb20gb25lIHB1Ymxpc2hlZCBhbnN3ZXIuXG4gKi9cbmV4cG9ydCB0eXBlIEZpbmRBdHRhY2htZW50VW5pdEZvbGRlclBhdGhQYXJhbXMgPSBGaW5kQXR0YWNobWVudFVuaXRGb2xkZXJQYXRoRnJvbUFwcFBhcmFtcyB8IEZpbmRBdHRhY2htZW50VW5pdEZvbGRlclBhdGhXaXRoUHJlZGljYXRlUGFyYW1zO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBmaW5kQXR0YWNobWVudFVuaXRGb2xkZXJQYXRofSwgd2Fsa2luZyB3aXRoIGEgcHJlZGljYXRlIHRoZSBjYWxsZXIgb3ducy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaW5kQXR0YWNobWVudFVuaXRGb2xkZXJQYXRoV2l0aFByZWRpY2F0ZVBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgdmF1bHQtcmVsYXRpdmUgcGF0aCBvZiB0aGUgYXR0YWNobWVudC5cbiAgICovXG4gIHJlYWRvbmx5IGF0dGFjaG1lbnRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBmb2xkZXIgcGF0aCBpcyBkZXNpZ25hdGVkIGFzIGFuIGF0dGFjaG1lbnQgdW5pdC5cbiAgICpcbiAgICogQHBhcmFtIGZvbGRlclBhdGggLSBUaGUgdmF1bHQtcmVsYXRpdmUgcGF0aCBvZiB0aGUgZm9sZGVyLlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGZvbGRlciBpcyBkZXNpZ25hdGVkIGFzIGFuIGF0dGFjaG1lbnQgdW5pdCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gICAqL1xuICByZWFkb25seSBjaGVja0lzQXR0YWNobWVudFVuaXRGb2xkZXI6IChmb2xkZXJQYXRoOiBzdHJpbmcpID0+IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHJlYmFzZVBhdGhPbnRvRm9sZGVyfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZWJhc2VQYXRoT250b0ZvbGRlclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgZm9sZGVyJ3MgbmV3IHBhdGguXG4gICAqL1xuICByZWFkb25seSBuZXdGb2xkZXJQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXIncyBvbGQgcGF0aC5cbiAgICovXG4gIHJlYWRvbmx5IG9sZEZvbGRlclBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gcmViYXNlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEZpbmRzIHRoZSBmb2xkZXIgdGhhdCBhbiBhdHRhY2htZW50IG11c3QgdHJhdmVsIHdpdGguXG4gKlxuICogUmV0dXJucyB0aGUgKipvdXRlcm1vc3QqKiBkZXNpZ25hdGVkIGFuY2VzdG9yLCBub3QgdGhlIG5lYXJlc3Qgb25lLiBXaXRoIG5lc3RlZCBkZXNpZ25hdGlvbnMsXG4gKiBtb3ZpbmcgdGhlIG5lYXJlc3Qgd291bGQgdGVhciB0aGUgb3V0ZXIgdHJlZSBpbiBoYWxmLCB3aGljaCBpcyB0aGUgZmFpbHVyZSB0aGUgd2hvbGUgZmVhdHVyZSBleGlzdHNcbiAqIHRvIHByZXZlbnQuXG4gKlxuICogVGhlIHZhdWx0IHJvb3QgaXMgbmV2ZXIgYSB1bml0LCBob3dldmVyIHRoZSBwYXR0ZXJucyBhcmUgd3JpdHRlbjogZGVzaWduYXRpbmcgaXQgd291bGQgbWFrZSBldmVyeVxuICogcmVsb2NhdGlvbiBhIG5vLW9wIGF0IGJlc3QgYW5kIGEgdmF1bHQtd2lkZSBtb3ZlIGF0IHdvcnN0LlxuICpcbiAqIFBhc3NpbmcgYW4ge0BsaW5rIEFwcH0gd2Fsa3Mgd2l0aCB0aGUgZGVzaWduYXRpb24gQ3VzdG9tIEF0dGFjaG1lbnQgTG9jYXRpb24gcHVibGlzaGVzIHRocm91Z2ggaXRzIHBsdWdpblxuICogQVBJOyB3aGVuIG5vYm9keSBwdWJsaXNoZWQgb25lLCBub3RoaW5nIGlzIGRlc2lnbmF0ZWQgYW5kIHRoZSBhbnN3ZXIgaXMgYG51bGxgLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgZmluZGluZyB0aGUgYXR0YWNobWVudCB1bml0IGZvbGRlci5cbiAqIEByZXR1cm5zIFRoZSB1bml0IGZvbGRlcidzIHBhdGgsIG9yIGBudWxsYCB3aGVuIHRoZSBhdHRhY2htZW50IGJlbG9uZ3MgdG8gbm8gdW5pdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmRBdHRhY2htZW50VW5pdEZvbGRlclBhdGgocGFyYW1zOiBGaW5kQXR0YWNobWVudFVuaXRGb2xkZXJQYXRoUGFyYW1zKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IHBhcmVudEZvbGRlclBhdGggPSBkaXJuYW1lKHBhcmFtcy5hdHRhY2htZW50UGF0aCk7XG4gIGlmICghcGFyZW50Rm9sZGVyUGF0aCB8fCBwYXJlbnRGb2xkZXJQYXRoID09PSAnLicgfHwgcGFyZW50Rm9sZGVyUGF0aCA9PT0gJy8nKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBjaGVja0lzQXR0YWNobWVudFVuaXRGb2xkZXIgPSAnY2hlY2tJc0F0dGFjaG1lbnRVbml0Rm9sZGVyJyBpbiBwYXJhbXNcbiAgICA/IHBhcmFtcy5jaGVja0lzQXR0YWNobWVudFVuaXRGb2xkZXJcbiAgICA6IGdldENoZWNrSXNBdHRhY2htZW50VW5pdEZvbGRlckZ1bmN0aW9uKHBhcmFtcy5hcHApO1xuXG4gIGlmICghY2hlY2tJc0F0dGFjaG1lbnRVbml0Rm9sZGVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBzZWdtZW50cyA9IHBhcmVudEZvbGRlclBhdGguc3BsaXQoJy8nKS5maWx0ZXIoQm9vbGVhbik7XG4gIGZvciAobGV0IGNvdW50ID0gMTsgY291bnQgPD0gc2VnbWVudHMubGVuZ3RoOyBjb3VudCsrKSB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gc2VnbWVudHMuc2xpY2UoMCwgY291bnQpLmpvaW4oJy8nKTtcbiAgICBpZiAoY2hlY2tJc0F0dGFjaG1lbnRVbml0Rm9sZGVyKGNhbmRpZGF0ZSkpIHtcbiAgICAgIHJldHVybiBjYW5kaWRhdGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbi8qKlxuICogUmViYXNlcyBhIHBhdGggZnJvbSBvbmUgZm9sZGVyIG9udG8gYW5vdGhlci5cbiAqXG4gKiBVc2VkIHRvIHdvcmsgb3V0IHdoZXJlIGEgbGlua2VkIGF0dGFjaG1lbnQgZW5kcyB1cCBvbmNlIGl0cyB3aG9sZSB1bml0IGZvbGRlciBoYXMgbW92ZWQsIHNvIHRoZVxuICogbGluayBjYW4gYmUgcG9pbnRlZCBhdCB0aGUgZmlsZSdzIG5ldyBob21lIHJhdGhlciB0aGFuIGF0IHdoZXJlIHRoZSBmb2xkZXIgdXNlZCB0byBiZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlYmFzaW5nIHRoZSBwYXRoLlxuICogQHJldHVybnMgVGhlIHJlYmFzZWQgcGF0aCwgb3IgYG51bGxgIHdoZW4gdGhlIHBhdGggZG9lcyBub3Qgc2l0IGluc2lkZSB0aGUgb2xkIGZvbGRlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlYmFzZVBhdGhPbnRvRm9sZGVyKHBhcmFtczogUmViYXNlUGF0aE9udG9Gb2xkZXJQYXJhbXMpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3QgcHJlZml4ID0gYCR7cGFyYW1zLm9sZEZvbGRlclBhdGh9L2A7XG4gIHJldHVybiBwYXJhbXMucGF0aC5zdGFydHNXaXRoKHByZWZpeCkgPyBgJHtwYXJhbXMubmV3Rm9sZGVyUGF0aH0vJHtwYXJhbXMucGF0aC5zbGljZShwcmVmaXgubGVuZ3RoKX1gIDogbnVsbDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXNCQSxrQkFBd0I7QUFFeEIsNkJBQXVEO0FBZ0ZoRCxTQUFTLDZCQUE2QixRQUEyRDtBQUN0RyxRQUFNLHVCQUFtQixxQkFBUSxPQUFPLGNBQWM7QUFDdEQsTUFBSSxDQUFDLG9CQUFvQixxQkFBcUIsT0FBTyxxQkFBcUIsS0FBSztBQUM3RSxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sOEJBQThCLGlDQUFpQyxTQUNqRSxPQUFPLGtDQUNQLCtEQUF1QyxPQUFPLEdBQUc7QUFFckQsTUFBSSxDQUFDLDZCQUE2QjtBQUNoQyxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sV0FBVyxpQkFBaUIsTUFBTSxHQUFHLEVBQUUsT0FBTyxPQUFPO0FBQzNELFdBQVMsUUFBUSxHQUFHLFNBQVMsU0FBUyxRQUFRLFNBQVM7QUFDckQsVUFBTSxZQUFZLFNBQVMsTUFBTSxHQUFHLEtBQUssRUFBRSxLQUFLLEdBQUc7QUFDbkQsUUFBSSw0QkFBNEIsU0FBUyxHQUFHO0FBQzFDLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQVdPLFNBQVMscUJBQXFCLFFBQW1EO0FBQ3RGLFFBQU0sU0FBUyxHQUFHLE9BQU8sYUFBYTtBQUN0QyxTQUFPLE9BQU8sS0FBSyxXQUFXLE1BQU0sSUFBSSxHQUFHLE9BQU8sYUFBYSxJQUFJLE9BQU8sS0FBSyxNQUFNLE9BQU8sTUFBTSxDQUFDLEtBQUs7QUFDMUc7IiwKICAibmFtZXMiOiBbXQp9Cg==
|
|
@@ -14,19 +14,18 @@
|
|
|
14
14
|
* attachments over the same vault. If they each decided separately what one attachment is, a user
|
|
15
15
|
* with both installed would get a folder kept whole by one and torn apart by the other.
|
|
16
16
|
*
|
|
17
|
-
* Which is why the designation itself is read from
|
|
18
|
-
* {@link App} and {@link findAttachmentUnitFolderPath} walks with whatever
|
|
19
|
-
*
|
|
20
|
-
* one answer. The explicit-predicate form remains for a caller that genuinely owns its own patterns.
|
|
17
|
+
* Which is why the designation itself is read from one shared source rather than supplied per caller: pass
|
|
18
|
+
* an {@link App} and {@link findAttachmentUnitFolderPath} walks with whatever Custom Attachment Location
|
|
19
|
+
* publishes through its plugin API, so every plugin decides from one answer. The explicit-predicate form remains for a caller that genuinely owns its own patterns.
|
|
21
20
|
*/
|
|
22
21
|
import type { App } from 'obsidian' with { 'resolution-mode': 'import' };
|
|
23
22
|
/**
|
|
24
|
-
* Parameters for {@link findAttachmentUnitFolderPath}, reading the designation
|
|
23
|
+
* Parameters for {@link findAttachmentUnitFolderPath}, reading the designation Custom Attachment Location
|
|
24
|
+
* publishes through its plugin API.
|
|
25
25
|
*/
|
|
26
26
|
export interface FindAttachmentUnitFolderPathFromAppParams {
|
|
27
27
|
/**
|
|
28
|
-
* An Obsidian application instance
|
|
29
|
-
* designation.
|
|
28
|
+
* An Obsidian application instance.
|
|
30
29
|
*/
|
|
31
30
|
readonly app: App;
|
|
32
31
|
/**
|
|
@@ -84,8 +83,8 @@ export interface RebasePathOntoFolderParams {
|
|
|
84
83
|
* The vault root is never a unit, however the patterns are written: designating it would make every
|
|
85
84
|
* relocation a no-op at best and a vault-wide move at worst.
|
|
86
85
|
*
|
|
87
|
-
* Passing an {@link App} walks with the designation
|
|
88
|
-
* when nobody published one, nothing is designated and the answer is `null`.
|
|
86
|
+
* Passing an {@link App} walks with the designation Custom Attachment Location publishes through its plugin
|
|
87
|
+
* API; when nobody published one, nothing is designated and the answer is `null`.
|
|
89
88
|
*
|
|
90
89
|
* @param params - The parameters for finding the attachment unit folder.
|
|
91
90
|
* @returns The unit folder's path, or `null` when the attachment belongs to no unit.
|