obsidian-dev-utils 30.5.1 → 30.7.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.
Files changed (46) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/lib/cjs/Async.cjs +12 -6
  3. package/dist/lib/cjs/Async.d.cts +2 -2
  4. package/dist/lib/cjs/Library.cjs +1 -1
  5. package/dist/lib/cjs/ObjectUtils.cjs +12 -1
  6. package/dist/lib/cjs/ObjectUtils.d.cts +8 -0
  7. package/dist/lib/cjs/String.cjs +8 -3
  8. package/dist/lib/cjs/String.d.cts +2 -1
  9. package/dist/lib/cjs/ValueProvider.cjs +6 -3
  10. package/dist/lib/cjs/ValueProvider.d.cts +3 -2
  11. package/dist/lib/cjs/obsidian/FileChange.cjs +20 -12
  12. package/dist/lib/cjs/obsidian/FileChange.d.cts +2 -1
  13. package/dist/lib/cjs/obsidian/FileManager.cjs +5 -3
  14. package/dist/lib/cjs/obsidian/FileManager.d.cts +1 -1
  15. package/dist/lib/cjs/obsidian/Link.cjs +17 -6
  16. package/dist/lib/cjs/obsidian/Link.d.cts +2 -1
  17. package/dist/lib/cjs/obsidian/Logger.cjs +5 -3
  18. package/dist/lib/cjs/obsidian/Logger.d.cts +2 -1
  19. package/dist/lib/cjs/obsidian/MarkdownCodeBlockProcessor.cjs +8 -4
  20. package/dist/lib/cjs/obsidian/MarkdownCodeBlockProcessor.d.cts +2 -1
  21. package/dist/lib/cjs/obsidian/MetadataCache.cjs +7 -2
  22. package/dist/lib/cjs/obsidian/Queue.cjs +6 -2
  23. package/dist/lib/cjs/obsidian/Vault.cjs +9 -3
  24. package/dist/lib/esm/Async.d.mts +2 -2
  25. package/dist/lib/esm/Async.mjs +15 -6
  26. package/dist/lib/esm/Library.mjs +1 -1
  27. package/dist/lib/esm/ObjectUtils.d.mts +8 -0
  28. package/dist/lib/esm/ObjectUtils.mjs +11 -1
  29. package/dist/lib/esm/String.d.mts +2 -1
  30. package/dist/lib/esm/String.mjs +8 -3
  31. package/dist/lib/esm/ValueProvider.d.mts +3 -2
  32. package/dist/lib/esm/ValueProvider.mjs +6 -3
  33. package/dist/lib/esm/obsidian/FileChange.d.mts +2 -1
  34. package/dist/lib/esm/obsidian/FileChange.mjs +20 -12
  35. package/dist/lib/esm/obsidian/FileManager.d.mts +1 -1
  36. package/dist/lib/esm/obsidian/FileManager.mjs +5 -3
  37. package/dist/lib/esm/obsidian/Link.d.mts +2 -1
  38. package/dist/lib/esm/obsidian/Link.mjs +17 -6
  39. package/dist/lib/esm/obsidian/Logger.d.mts +2 -1
  40. package/dist/lib/esm/obsidian/Logger.mjs +5 -3
  41. package/dist/lib/esm/obsidian/MarkdownCodeBlockProcessor.d.mts +2 -1
  42. package/dist/lib/esm/obsidian/MarkdownCodeBlockProcessor.mjs +8 -4
  43. package/dist/lib/esm/obsidian/MetadataCache.mjs +7 -2
  44. package/dist/lib/esm/obsidian/Queue.mjs +6 -2
  45. package/dist/lib/esm/obsidian/Vault.mjs +9 -3
  46. package/package.json +1 -1
@@ -39,6 +39,7 @@ __export(String_exports, {
39
39
  unescape: () => unescape
40
40
  });
41
41
  module.exports = __toCommonJS(String_exports);
42
+ var import_AbortController = require('./AbortController.cjs');
42
43
  var import_Error = require('./Error.cjs');
43
44
  var import_RegExp = require('./RegExp.cjs');
44
45
  var import_ValueProvider = require('./ValueProvider.cjs');
@@ -113,19 +114,23 @@ function replaceAll(str, searchValue, replacer) {
113
114
  return replacer(commonArgs, ...groupArgs) ?? commonArgs.substring;
114
115
  });
115
116
  }
116
- async function replaceAllAsync(str, searchValue, replacer) {
117
+ async function replaceAllAsync(str, searchValue, replacer, abortSignal) {
118
+ abortSignal ??= import_AbortController.abortSignalNever;
119
+ abortSignal.throwIfAborted();
117
120
  if (typeof replacer === "string") {
118
121
  return replaceAll(str, searchValue, replacer);
119
122
  }
120
123
  const replacementAsyncFns = [];
121
124
  replaceAll(str, searchValue, (commonArgs, ...groupArgs) => {
122
- replacementAsyncFns.push(() => (0, import_ValueProvider.resolveValue)(replacer, commonArgs, ...groupArgs));
125
+ replacementAsyncFns.push(() => (0, import_ValueProvider.resolveValue)(replacer, abortSignal, commonArgs, ...groupArgs));
123
126
  return "";
124
127
  });
125
128
  const replacements = [];
126
129
  for (const asyncFn of replacementAsyncFns) {
130
+ abortSignal.throwIfAborted();
127
131
  replacements.push(await asyncFn());
128
132
  }
133
+ abortSignal.throwIfAborted();
129
134
  return replaceAll(str, searchValue, (args) => replacements.shift() ?? args.substring);
130
135
  }
131
136
  function trimEnd(str, suffix, shouldValidate) {
@@ -164,4 +169,4 @@ function unescape(str) {
164
169
  trimStart,
165
170
  unescape
166
171
  });
167
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL1N0cmluZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3Igc3RyaW5nIG9wZXJhdGlvbnMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBNYXliZVJldHVybiB9IGZyb20gJy4vVHlwZS50cyc7XG5pbXBvcnQgdHlwZSB7IFZhbHVlUHJvdmlkZXIgfSBmcm9tICcuL1ZhbHVlUHJvdmlkZXIudHMnO1xuXG5pbXBvcnQgeyB0aHJvd0V4cHJlc3Npb24gfSBmcm9tICcuL0Vycm9yLnRzJztcbmltcG9ydCB7IGVzY2FwZVJlZ0V4cCB9IGZyb20gJy4vUmVnRXhwLnRzJztcbmltcG9ydCB7IHJlc29sdmVWYWx1ZSB9IGZyb20gJy4vVmFsdWVQcm92aWRlci50cyc7XG5cbi8qKlxuICogQSBzeW5jaHJvbm91cy9hc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgcmVwbGFjZW1lbnQgc3RyaW5ncywgb3IgYSBzdHJpbmcgdG8gcmVwbGFjZSB3aXRoLlxuICovXG5leHBvcnQgdHlwZSBBc3luY1JlcGxhY2VyPFJlcGxhY2VHcm91cEFyZ3MgZXh0ZW5kcyBzdHJpbmdbXT4gPSBWYWx1ZVByb3ZpZGVyPFN0cmluZ1JlcGxhY2VtZW50LCBbUmVwbGFjZUNvbW1vbkFyZ3MsIC4uLlJlcGxhY2VHcm91cEFyZ3NdPjtcblxuLyoqXG4gKiBDb21tb24gYXJndW1lbnRzIGZvciB0aGUgYHJlcGxhY2VBbGxgL2ByZXBsYWNlQWxsQXN5bmNgIGZ1bmN0aW9ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZXBsYWNlQ29tbW9uQXJncyB7XG4gIC8qKlxuICAgKiBUaGUgZ3JvdXBzIG9mIHRoZSBtYXRjaC5cbiAgICovXG4gIGdyb3VwczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogVGhlIGluZGljZXMgb2YgdGhlIGdyb3VwcyB0aGF0IHdlcmUgbm90IGZvdW5kIGluIHRoZSBtYXRjaC5cbiAgICovXG4gIG1pc3NpbmdHcm91cEluZGljZXM6IG51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBUaGUgb2Zmc2V0IG9mIHRoZSBtYXRjaC5cbiAgICovXG4gIG9mZnNldDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgc291cmNlIG9mIHRoZSBtYXRjaC5cbiAgICovXG4gIHNvdXJjZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgc3Vic3RyaW5nIG9mIHRoZSBtYXRjaC5cbiAgICovXG4gIHN1YnN0cmluZzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgcmVwbGFjZW1lbnQgc3RyaW5ncywgb3IgYSBzdHJpbmcgdG8gcmVwbGFjZSB3aXRoLlxuICovXG5leHBvcnQgdHlwZSBSZXBsYWNlcjxSZXBsYWNlR3JvdXBBcmdzIGV4dGVuZHMgc3RyaW5nW10+ID0gKCguLi5hcmdzOiBbUmVwbGFjZUNvbW1vbkFyZ3MsIC4uLlJlcGxhY2VHcm91cEFyZ3NdKSA9PiBTdHJpbmdSZXBsYWNlbWVudCkgfCBTdHJpbmdSZXBsYWNlbWVudDtcblxudHlwZSBTdHJpbmdSZXBsYWNlbWVudCA9IE1heWJlUmV0dXJuPHN0cmluZz47XG5cbi8qKlxuICogTWFwcGluZyBvZiBzcGVjaWFsIGNoYXJhY3RlcnMgdG8gdGhlaXIgZXNjYXBlZCBjb3VudGVycGFydHMuXG4gKi9cbmNvbnN0IEVTQ0FQRV9NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICdcXG4nOiAnXFxcXG4nLFxuICAnXFxyJzogJ1xcXFxyJyxcbiAgJ1xcdCc6ICdcXFxcdCcsXG4gICdcXGInOiAnXFxcXGInLFxuICAnXFxmJzogJ1xcXFxmJyxcbiAgJ1xcJyc6ICdcXFxcXFwnJyxcbiAgJ1wiJzogJ1xcXFxcIicsXG4gICdcXFxcJzogJ1xcXFxcXFxcJ1xufSBhcyBjb25zdDtcblxuLyoqXG4gKiBNYXBwaW5nIG9mIGVzY2FwZWQgc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIHRoZWlyIHVuZXNjYXBlZCBjb3VudGVycGFydHMuXG4gKi9cbmNvbnN0IFVORVNDQVBFX01BUDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoRVNDQVBFX01BUCkpIHtcbiAgVU5FU0NBUEVfTUFQW3ZhbHVlXSA9IGtleTtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBzcGVjaWZpZWQgc3VmZml4LCBhZGRpbmcgaXQgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIGNoZWNrLlxuICogQHBhcmFtIHN1ZmZpeCAtIFRoZSBzdWZmaXggdG8gZW5zdXJlLlxuICogQHJldHVybnMgVGhlIHN0cmluZyB0aGF0IGVuZHMgd2l0aCB0aGUgc3VmZml4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlRW5kc1dpdGgoc3RyOiBzdHJpbmcsIHN1ZmZpeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5lbmRzV2l0aChzdWZmaXgpID8gc3RyIDogc3RyICsgc3VmZml4O1xufVxuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCBhIHN0cmluZyBzdGFydHMgd2l0aCB0aGUgc3BlY2lmaWVkIHByZWZpeCwgYWRkaW5nIGl0IGlmIG5lY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byBjaGVjay5cbiAqIEBwYXJhbSBwcmVmaXggLSBUaGUgcHJlZml4IHRvIGVuc3VyZS5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgdGhhdCBzdGFydHMgd2l0aCB0aGUgcHJlZml4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZW5zdXJlU3RhcnRzV2l0aChzdHI6IHN0cmluZywgcHJlZml4OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyLnN0YXJ0c1dpdGgocHJlZml4KSA/IHN0ciA6IHByZWZpeCArIHN0cjtcbn1cblxuLyoqXG4gKiBFc2NhcGVzIHNwZWNpYWwgY2hhcmFjdGVycyBpbiBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byBlc2NhcGUuXG4gKiBAcmV0dXJucyBUaGUgZXNjYXBlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZShzdHIsIEVTQ0FQRV9NQVApO1xufVxuXG4vKipcbiAqIEluc2VydHMgYSBzdWJzdHJpbmcgYXQgYSBzcGVjaWZpZWQgcG9zaXRpb24gaW4gYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gaW5zZXJ0IHRoZSBzdWJzdHJpbmcgaW50by5cbiAqIEBwYXJhbSBzdWJzdHJpbmcgLSBUaGUgc3Vic3RyaW5nIHRvIGluc2VydC5cbiAqIEBwYXJhbSBzdGFydEluZGV4IC0gVGhlIGluZGV4IHRvIGluc2VydCB0aGUgc3Vic3RyaW5nIGF0LlxuICogQHBhcmFtIGVuZEluZGV4IC0gVGhlIGluZGV4IHRvIGVuZCB0aGUgc3Vic3RyaW5nIGF0LlxuICogQHJldHVybnMgVGhlIG1vZGlmaWVkIHN0cmluZyB3aXRoIHRoZSBzdWJzdHJpbmcgaW5zZXJ0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRBdChzdHI6IHN0cmluZywgc3Vic3RyaW5nOiBzdHJpbmcsIHN0YXJ0SW5kZXg6IG51bWJlciwgZW5kSW5kZXg/OiBudW1iZXIpOiBzdHJpbmcge1xuICBlbmRJbmRleCA/Pz0gc3RhcnRJbmRleDtcbiAgcmV0dXJuIHN0ci5zbGljZSgwLCBzdGFydEluZGV4KSArIHN1YnN0cmluZyArIHN0ci5zbGljZShlbmRJbmRleCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgaW50byBhIHZhbGlkIEphdmFTY3JpcHQgdmFyaWFibGUgbmFtZSBieSByZXBsYWNpbmcgaW52YWxpZCBjaGFyYWN0ZXJzIHdpdGggdW5kZXJzY29yZXMuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gY29udmVydC5cbiAqIEByZXR1cm5zIFRoZSB2YWxpZCB2YXJpYWJsZSBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZVZhbGlkVmFyaWFibGVOYW1lKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoc3RyLCAvW15hLXpBLVowLTlfXS9nLCAnXycpO1xufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBzdHJpbmcgYnkgY29udmVydGluZyBpdCB0byB0aGUgTkZDIGZvcm0gYW5kIHJlcGxhY2luZyBub24tYnJlYWtpbmcgc3BhY2VzIHdpdGggcmVndWxhciBzcGFjZXMuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gbm9ybWFsaXplLlxuICogQHJldHVybnMgVGhlIG5vcm1hbGl6ZWQgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoc3RyLCAvXFx1MDBBMHxcXHUyMDJGL2csICcgJykubm9ybWFsaXplKCdORkMnKTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlcyBvY2N1cnJlbmNlcyBvZiBzdHJpbmdzIGluIGEgZ2l2ZW4gc3RyaW5nIGJhc2VkIG9uIGEgcmVwbGFjZW1lbnRzIG1hcC5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byBwZXJmb3JtIHJlcGxhY2VtZW50cyBvbi5cbiAqIEBwYXJhbSByZXBsYWNlbWVudHNNYXAgLSBBbiBvYmplY3QgbWFwcGluZyBzdHJpbmdzIHRvIHRoZWlyIHJlcGxhY2VtZW50IHZhbHVlcy5cbiAqIEByZXR1cm5zIFRoZSBtb2RpZmllZCBzdHJpbmcgd2l0aCByZXBsYWNlbWVudHMgYXBwbGllZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2Uoc3RyOiBzdHJpbmcsIHJlcGxhY2VtZW50c01hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHN0cmluZyB7XG4gIGNvbnN0IHJlZ0V4cCA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMocmVwbGFjZW1lbnRzTWFwKS5tYXAoKHNvdXJjZSkgPT4gZXNjYXBlUmVnRXhwKHNvdXJjZSkpLmpvaW4oJ3wnKSwgJ2cnKTtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoc3RyLCByZWdFeHAsICh7IHN1YnN0cmluZzogc291cmNlIH0pID0+IHJlcGxhY2VtZW50c01hcFtzb3VyY2VdID8/IHRocm93RXhwcmVzc2lvbihuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgcmVwbGFjZW1lbnQgc291cmNlOiAke3NvdXJjZX1gKSkpO1xufVxuXG4vKipcbiAqIFJlcGxhY2VzIGFsbCBvY2N1cnJlbmNlcyBvZiBhIHNlYXJjaCBzdHJpbmcgb3IgcGF0dGVybiB3aXRoIHRoZSByZXN1bHRzIG9mIGFuIHJlcGxhY2VyIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gUmVwbGFjZUdyb3VwQXJncyAtIFRoZSB0eXBlIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgcmVwbGFjZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyBpbiB3aGljaCB0byBwZXJmb3JtIHJlcGxhY2VtZW50cy5cbiAqIEBwYXJhbSBzZWFyY2hWYWx1ZSAtIFRoZSBzdHJpbmcgb3IgcmVndWxhciBleHByZXNzaW9uIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0gcmVwbGFjZXIgLSBBIHJlcGxhY2VyIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHJlcGxhY2VtZW50IHN0cmluZ3MsIG9yIGEgc3RyaW5nIHRvIHJlcGxhY2Ugd2l0aC5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgd2l0aCBhbGwgcmVwbGFjZW1lbnRzIG1hZGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlQWxsPFJlcGxhY2VHcm91cEFyZ3MgZXh0ZW5kcyBzdHJpbmdbXT4oXG4gIHN0cjogc3RyaW5nLFxuICBzZWFyY2hWYWx1ZTogUmVnRXhwIHwgc3RyaW5nLFxuICByZXBsYWNlcjogUmVwbGFjZXI8UmVwbGFjZUdyb3VwQXJncz5cbik6IHN0cmluZyB7XG4gIGlmICh0eXBlb2YgcmVwbGFjZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGlmIChzZWFyY2hWYWx1ZSBpbnN0YW5jZW9mIFJlZ0V4cCAmJiAhc2VhcmNoVmFsdWUuZ2xvYmFsKSB7XG4gICAgc2VhcmNoVmFsdWUgPSBuZXcgUmVnRXhwKHNlYXJjaFZhbHVlLnNvdXJjZSwgYCR7c2VhcmNoVmFsdWUuZmxhZ3N9Z2ApO1xuICB9XG5cbiAgaWYgKHR5cGVvZiByZXBsYWNlciA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2VBbGwoc2VhcmNoVmFsdWUsIHJlcGxhY2VyKTtcbiAgfVxuXG4gIHJldHVybiBzdHIucmVwbGFjZUFsbChzZWFyY2hWYWx1ZSwgKHN1YnN0cmluZzogc3RyaW5nLCAuLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICBjb25zdCBTT1VSQ0VfSU5ERVhfT0ZGU0VUX0ZPUl9HUk9VUF9BUkcgPSAyO1xuICAgIGNvbnN0IGhhc0dyb3Vwc0FyZyA9IHR5cGVvZiBhcmdzLmF0KC0xKSA9PT0gJ29iamVjdCc7XG4gICAgY29uc3Qgc291cmNlSW5kZXggPSBoYXNHcm91cHNBcmcgPyBhcmdzLmxlbmd0aCAtIFNPVVJDRV9JTkRFWF9PRkZTRVRfRk9SX0dST1VQX0FSRyA6IGFyZ3MubGVuZ3RoIC0gMTtcblxuICAgIGNvbnN0IGNvbW1vbkFyZ3M6IFJlcGxhY2VDb21tb25BcmdzID0ge1xuICAgICAgZ3JvdXBzOiBoYXNHcm91cHNBcmcgPyBhcmdzLmF0KC0xKSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+IDogdW5kZWZpbmVkLFxuICAgICAgbWlzc2luZ0dyb3VwSW5kaWNlczogW10sXG4gICAgICBvZmZzZXQ6IGFyZ3MuYXQoc291cmNlSW5kZXggLSAxKSBhcyBudW1iZXIsXG4gICAgICBzb3VyY2U6IGFyZ3MuYXQoc291cmNlSW5kZXgpIGFzIHN0cmluZyxcbiAgICAgIHN1YnN0cmluZ1xuICAgIH07XG5cbiAgICBjb25zdCBncm91cEFyZ3MgPSBhcmdzLnNsaWNlKDAsIHNvdXJjZUluZGV4IC0gMSkubWFwKChhcmcsIGluZGV4KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGNvbW1vbkFyZ3MubWlzc2luZ0dyb3VwSW5kaWNlcy5wdXNoKGluZGV4KTtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgYXJndW1lbnQgdHlwZTogJHt0eXBlb2YgYXJnfWApO1xuICAgIH0pIGFzIFJlcGxhY2VHcm91cEFyZ3M7XG5cbiAgICByZXR1cm4gKHJlcGxhY2VyKGNvbW1vbkFyZ3MsIC4uLmdyb3VwQXJncykgYXMgc3RyaW5nIHwgdW5kZWZpbmVkKSA/PyBjb21tb25BcmdzLnN1YnN0cmluZztcbiAgfSk7XG59XG5cbi8qKlxuICogQXN5bmNocm9ub3VzbHkgcmVwbGFjZXMgYWxsIG9jY3VycmVuY2VzIG9mIGEgc2VhcmNoIHN0cmluZyBvciBwYXR0ZXJuIHdpdGggdGhlIHJlc3VsdHMgb2YgYW4gYXN5bmNocm9ub3VzIHJlcGxhY2VyIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gUmVwbGFjZUdyb3VwQXJncyAtIFRoZSB0eXBlIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgcmVwbGFjZXIgZnVuY3Rpb24uXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyBpbiB3aGljaCB0byBwZXJmb3JtIHJlcGxhY2VtZW50cy5cbiAqIEBwYXJhbSBzZWFyY2hWYWx1ZSAtIFRoZSBzdHJpbmcgb3IgcmVndWxhciBleHByZXNzaW9uIHRvIHNlYXJjaCBmb3IuXG4gKiBAcGFyYW0gcmVwbGFjZXIgLSBBIHN5bmNocm9ub3VzL2FzeW5jaHJvbm91cyBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyByZXBsYWNlbWVudCBzdHJpbmdzLCBvciBhIHN0cmluZyB0byByZXBsYWNlIHdpdGguXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBzdHJpbmcgd2l0aCBhbGwgcmVwbGFjZW1lbnRzIG1hZGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXBsYWNlQWxsQXN5bmM8UmVwbGFjZUdyb3VwQXJncyBleHRlbmRzIHN0cmluZ1tdPihcbiAgc3RyOiBzdHJpbmcsXG4gIHNlYXJjaFZhbHVlOiBSZWdFeHAgfCBzdHJpbmcsXG4gIHJlcGxhY2VyOiBBc3luY1JlcGxhY2VyPFJlcGxhY2VHcm91cEFyZ3M+XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAodHlwZW9mIHJlcGxhY2VyID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiByZXBsYWNlQWxsKHN0ciwgc2VhcmNoVmFsdWUsIHJlcGxhY2VyKTtcbiAgfVxuXG4gIGNvbnN0IHJlcGxhY2VtZW50QXN5bmNGbnM6ICgoKSA9PiBQcm9taXNlPFN0cmluZ1JlcGxhY2VtZW50PilbXSA9IFtdO1xuXG4gIHJlcGxhY2VBbGw8UmVwbGFjZUdyb3VwQXJncz4oc3RyLCBzZWFyY2hWYWx1ZSwgKGNvbW1vbkFyZ3MsIC4uLmdyb3VwQXJncykgPT4ge1xuICAgIHJlcGxhY2VtZW50QXN5bmNGbnMucHVzaCgoKSA9PiByZXNvbHZlVmFsdWUocmVwbGFjZXIsIGNvbW1vbkFyZ3MsIC4uLmdyb3VwQXJncykpO1xuICAgIHJldHVybiAnJztcbiAgfSk7XG5cbiAgY29uc3QgcmVwbGFjZW1lbnRzOiBTdHJpbmdSZXBsYWNlbWVudFtdID0gW107XG5cbiAgZm9yIChjb25zdCBhc3luY0ZuIG9mIHJlcGxhY2VtZW50QXN5bmNGbnMpIHtcbiAgICByZXBsYWNlbWVudHMucHVzaChhd2FpdCBhc3luY0ZuKCkpO1xuICB9XG5cbiAgcmV0dXJuIHJlcGxhY2VBbGwoc3RyLCBzZWFyY2hWYWx1ZSwgKGFyZ3MpOiBzdHJpbmcgPT4gcmVwbGFjZW1lbnRzLnNoaWZ0KCkgPz8gYXJncy5zdWJzdHJpbmcpO1xufVxuXG4vKipcbiAqIFRyaW1zIHRoZSBzcGVjaWZpZWQgc3VmZml4IGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byB0cmltLlxuICogQHBhcmFtIHN1ZmZpeCAtIFRoZSBzdWZmaXggdG8gcmVtb3ZlIGZyb20gdGhlIGVuZCBvZiB0aGUgc3RyaW5nLlxuICogQHBhcmFtIHNob3VsZFZhbGlkYXRlIC0gSWYgdHJ1ZSwgdGhyb3dzIGFuIGVycm9yIGlmIHRoZSBzdHJpbmcgZG9lcyBub3QgZW5kIHdpdGggdGhlIHN1ZmZpeC5cbiAqIEByZXR1cm5zIFRoZSB0cmltbWVkIHN0cmluZy5cbiAqIEB0aHJvd3MgSWYgYHZhbGlkYXRlYCBpcyB0cnVlIGFuZCB0aGUgc3RyaW5nIGRvZXMgbm90IGVuZCB3aXRoIHRoZSBzdWZmaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltRW5kKHN0cjogc3RyaW5nLCBzdWZmaXg6IHN0cmluZywgc2hvdWxkVmFsaWRhdGU/OiBib29sZWFuKTogc3RyaW5nIHtcbiAgaWYgKHN0ci5lbmRzV2l0aChzdWZmaXgpKSB7XG4gICAgcmV0dXJuIHN0ci5zbGljZSgwLCAtc3VmZml4Lmxlbmd0aCk7XG4gIH1cblxuICBpZiAoc2hvdWxkVmFsaWRhdGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmluZyAke3N0cn0gZG9lcyBub3QgZW5kIHdpdGggc3VmZml4ICR7c3VmZml4fWApO1xuICB9XG5cbiAgcmV0dXJuIHN0cjtcbn1cblxuLyoqXG4gKiBUcmltcyB0aGUgc3BlY2lmaWVkIHByZWZpeCBmcm9tIHRoZSBzdGFydCBvZiBhIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byB0cmltLlxuICogQHBhcmFtIHByZWZpeCAtIFRoZSBwcmVmaXggdG8gcmVtb3ZlIGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcuXG4gKiBAcGFyYW0gdmFsaWRhdGUgLSBJZiB0cnVlLCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIHN0cmluZyBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBwcmVmaXguXG4gKiBAcmV0dXJucyBUaGUgdHJpbW1lZCBzdHJpbmcuXG4gKiBAdGhyb3dzIElmIGB2YWxpZGF0ZWAgaXMgdHJ1ZSBhbmQgdGhlIHN0cmluZyBkb2VzIG5vdCBzdGFydCB3aXRoIHRoZSBwcmVmaXguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmltU3RhcnQoc3RyOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nLCB2YWxpZGF0ZT86IGJvb2xlYW4pOiBzdHJpbmcge1xuICBpZiAoc3RyLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgIHJldHVybiBzdHIuc2xpY2UocHJlZml4Lmxlbmd0aCk7XG4gIH1cblxuICBpZiAodmFsaWRhdGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFN0cmluZyAke3N0cn0gZG9lcyBub3Qgc3RhcnQgd2l0aCBwcmVmaXggJHtwcmVmaXh9YCk7XG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIFVuZXNjYXBlcyBhIHN0cmluZyBieSByZXBsYWNpbmcgZXNjYXBlIHNlcXVlbmNlcyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgY2hhcmFjdGVycy5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byB1bmVzY2FwZS5cbiAqIEByZXR1cm5zIFRoZSB1bmVzY2FwZWQgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5lc2NhcGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gcmVwbGFjZShzdHIsIFVORVNDQVBFX01BUCk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFTQSxtQkFBZ0M7QUFDaEMsb0JBQTZCO0FBQzdCLDJCQUE2QjtBQStDN0IsTUFBTSxhQUFxQztBQUFBLEVBQ3pDLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLEtBQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLEtBQU07QUFBQSxFQUNOLEtBQUs7QUFBQSxFQUNMLE1BQU07QUFDUjtBQUtBLE1BQU0sZUFBdUMsQ0FBQztBQUM5QyxXQUFXLENBQUMsS0FBSyxLQUFLLEtBQUssT0FBTyxRQUFRLFVBQVUsR0FBRztBQUNyRCxlQUFhLEtBQUssSUFBSTtBQUN4QjtBQVNPLFNBQVMsZUFBZSxLQUFhLFFBQXdCO0FBQ2xFLFNBQU8sSUFBSSxTQUFTLE1BQU0sSUFBSSxNQUFNLE1BQU07QUFDNUM7QUFTTyxTQUFTLGlCQUFpQixLQUFhLFFBQXdCO0FBQ3BFLFNBQU8sSUFBSSxXQUFXLE1BQU0sSUFBSSxNQUFNLFNBQVM7QUFDakQ7QUFRTyxTQUFTLE9BQU8sS0FBcUI7QUFDMUMsU0FBTyxRQUFRLEtBQUssVUFBVTtBQUNoQztBQVdPLFNBQVMsU0FBUyxLQUFhLFdBQW1CLFlBQW9CLFVBQTJCO0FBQ3RHLGVBQWE7QUFDYixTQUFPLElBQUksTUFBTSxHQUFHLFVBQVUsSUFBSSxZQUFZLElBQUksTUFBTSxRQUFRO0FBQ2xFO0FBUU8sU0FBUyxzQkFBc0IsS0FBcUI7QUFDekQsU0FBTyxXQUFXLEtBQUssa0JBQWtCLEdBQUc7QUFDOUM7QUFRTyxTQUFTLFVBQVUsS0FBcUI7QUFDN0MsU0FBTyxXQUFXLEtBQUssa0JBQWtCLEdBQUcsRUFBRSxVQUFVLEtBQUs7QUFDL0Q7QUFTTyxTQUFTLFFBQVEsS0FBYSxpQkFBaUQ7QUFDcEYsUUFBTSxTQUFTLElBQUksT0FBTyxPQUFPLEtBQUssZUFBZSxFQUFFLElBQUksQ0FBQyxlQUFXLDRCQUFhLE1BQU0sQ0FBQyxFQUFFLEtBQUssR0FBRyxHQUFHLEdBQUc7QUFDM0csU0FBTyxXQUFXLEtBQUssUUFBUSxDQUFDLEVBQUUsV0FBVyxPQUFPLE1BQU0sZ0JBQWdCLE1BQU0sU0FBSyw4QkFBZ0IsSUFBSSxNQUFNLGtDQUFrQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0FBQzdKO0FBV08sU0FBUyxXQUNkLEtBQ0EsYUFDQSxVQUNRO0FBQ1IsTUFBSSxPQUFPLGFBQWEsYUFBYTtBQUNuQyxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksdUJBQXVCLFVBQVUsQ0FBQyxZQUFZLFFBQVE7QUFDeEQsa0JBQWMsSUFBSSxPQUFPLFlBQVksUUFBUSxHQUFHLFlBQVksS0FBSyxHQUFHO0FBQUEsRUFDdEU7QUFFQSxNQUFJLE9BQU8sYUFBYSxVQUFVO0FBQ2hDLFdBQU8sSUFBSSxXQUFXLGFBQWEsUUFBUTtBQUFBLEVBQzdDO0FBRUEsU0FBTyxJQUFJLFdBQVcsYUFBYSxDQUFDLGNBQXNCLFNBQW9CO0FBQzVFLFVBQU0sb0NBQW9DO0FBQzFDLFVBQU0sZUFBZSxPQUFPLEtBQUssR0FBRyxFQUFFLE1BQU07QUFDNUMsVUFBTSxjQUFjLGVBQWUsS0FBSyxTQUFTLG9DQUFvQyxLQUFLLFNBQVM7QUFFbkcsVUFBTSxhQUFnQztBQUFBLE1BQ3BDLFFBQVEsZUFBZSxLQUFLLEdBQUcsRUFBRSxJQUEwQztBQUFBLE1BQzNFLHFCQUFxQixDQUFDO0FBQUEsTUFDdEIsUUFBUSxLQUFLLEdBQUcsY0FBYyxDQUFDO0FBQUEsTUFDL0IsUUFBUSxLQUFLLEdBQUcsV0FBVztBQUFBLE1BQzNCO0FBQUEsSUFDRjtBQUVBLFVBQU0sWUFBWSxLQUFLLE1BQU0sR0FBRyxjQUFjLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxVQUFVO0FBQ25FLFVBQUksT0FBTyxRQUFRLFVBQVU7QUFDM0IsZUFBTztBQUFBLE1BQ1Q7QUFFQSxVQUFJLE9BQU8sUUFBUSxhQUFhO0FBQzlCLG1CQUFXLG9CQUFvQixLQUFLLEtBQUs7QUFDekMsZUFBTztBQUFBLE1BQ1Q7QUFFQSxZQUFNLElBQUksTUFBTSw2QkFBNkIsT0FBTyxHQUFHLEVBQUU7QUFBQSxJQUMzRCxDQUFDO0FBRUQsV0FBUSxTQUFTLFlBQVksR0FBRyxTQUFTLEtBQTRCLFdBQVc7QUFBQSxFQUNsRixDQUFDO0FBQ0g7QUFXQSxlQUFzQixnQkFDcEIsS0FDQSxhQUNBLFVBQ2lCO0FBQ2pCLE1BQUksT0FBTyxhQUFhLFVBQVU7QUFDaEMsV0FBTyxXQUFXLEtBQUssYUFBYSxRQUFRO0FBQUEsRUFDOUM7QUFFQSxRQUFNLHNCQUE0RCxDQUFDO0FBRW5FLGFBQTZCLEtBQUssYUFBYSxDQUFDLGVBQWUsY0FBYztBQUMzRSx3QkFBb0IsS0FBSyxVQUFNLG1DQUFhLFVBQVUsWUFBWSxHQUFHLFNBQVMsQ0FBQztBQUMvRSxXQUFPO0FBQUEsRUFDVCxDQUFDO0FBRUQsUUFBTSxlQUFvQyxDQUFDO0FBRTNDLGFBQVcsV0FBVyxxQkFBcUI7QUFDekMsaUJBQWEsS0FBSyxNQUFNLFFBQVEsQ0FBQztBQUFBLEVBQ25DO0FBRUEsU0FBTyxXQUFXLEtBQUssYUFBYSxDQUFDLFNBQWlCLGFBQWEsTUFBTSxLQUFLLEtBQUssU0FBUztBQUM5RjtBQVdPLFNBQVMsUUFBUSxLQUFhLFFBQWdCLGdCQUFrQztBQUNyRixNQUFJLElBQUksU0FBUyxNQUFNLEdBQUc7QUFDeEIsV0FBTyxJQUFJLE1BQU0sR0FBRyxDQUFDLE9BQU8sTUFBTTtBQUFBLEVBQ3BDO0FBRUEsTUFBSSxnQkFBZ0I7QUFDbEIsVUFBTSxJQUFJLE1BQU0sVUFBVSxHQUFHLDZCQUE2QixNQUFNLEVBQUU7QUFBQSxFQUNwRTtBQUVBLFNBQU87QUFDVDtBQVdPLFNBQVMsVUFBVSxLQUFhLFFBQWdCLFVBQTRCO0FBQ2pGLE1BQUksSUFBSSxXQUFXLE1BQU0sR0FBRztBQUMxQixXQUFPLElBQUksTUFBTSxPQUFPLE1BQU07QUFBQSxFQUNoQztBQUVBLE1BQUksVUFBVTtBQUNaLFVBQU0sSUFBSSxNQUFNLFVBQVUsR0FBRywrQkFBK0IsTUFBTSxFQUFFO0FBQUEsRUFDdEU7QUFFQSxTQUFPO0FBQ1Q7QUFRTyxTQUFTLFNBQVMsS0FBcUI7QUFDNUMsU0FBTyxRQUFRLEtBQUssWUFBWTtBQUNsQzsiLAogICJuYW1lcyI6IFtdCn0K
172
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL1N0cmluZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqXG4gKiBDb250YWlucyB1dGlsaXR5IGZ1bmN0aW9ucyBmb3Igc3RyaW5nIG9wZXJhdGlvbnMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBNYXliZVJldHVybiB9IGZyb20gJy4vVHlwZS50cyc7XG5pbXBvcnQgdHlwZSB7IFZhbHVlUHJvdmlkZXIgfSBmcm9tICcuL1ZhbHVlUHJvdmlkZXIudHMnO1xuXG5pbXBvcnQgeyBhYm9ydFNpZ25hbE5ldmVyIH0gZnJvbSAnLi9BYm9ydENvbnRyb2xsZXIudHMnO1xuaW1wb3J0IHsgdGhyb3dFeHByZXNzaW9uIH0gZnJvbSAnLi9FcnJvci50cyc7XG5pbXBvcnQgeyBlc2NhcGVSZWdFeHAgfSBmcm9tICcuL1JlZ0V4cC50cyc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuL1ZhbHVlUHJvdmlkZXIudHMnO1xuXG4vKipcbiAqIEEgc3luY2hyb25vdXMvYXN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHJlcGxhY2VtZW50IHN0cmluZ3MsIG9yIGEgc3RyaW5nIHRvIHJlcGxhY2Ugd2l0aC5cbiAqL1xuZXhwb3J0IHR5cGUgQXN5bmNSZXBsYWNlcjxSZXBsYWNlR3JvdXBBcmdzIGV4dGVuZHMgc3RyaW5nW10+ID0gVmFsdWVQcm92aWRlcjxTdHJpbmdSZXBsYWNlbWVudCwgW1JlcGxhY2VDb21tb25BcmdzLCAuLi5SZXBsYWNlR3JvdXBBcmdzXT47XG5cbi8qKlxuICogQ29tbW9uIGFyZ3VtZW50cyBmb3IgdGhlIGByZXBsYWNlQWxsYC9gcmVwbGFjZUFsbEFzeW5jYCBmdW5jdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbGFjZUNvbW1vbkFyZ3Mge1xuICAvKipcbiAgICogVGhlIGdyb3VwcyBvZiB0aGUgbWF0Y2guXG4gICAqL1xuICBncm91cHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmRpY2VzIG9mIHRoZSBncm91cHMgdGhhdCB3ZXJlIG5vdCBmb3VuZCBpbiB0aGUgbWF0Y2guXG4gICAqL1xuICBtaXNzaW5nR3JvdXBJbmRpY2VzOiBudW1iZXJbXTtcblxuICAvKipcbiAgICogVGhlIG9mZnNldCBvZiB0aGUgbWF0Y2guXG4gICAqL1xuICBvZmZzZXQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHNvdXJjZSBvZiB0aGUgbWF0Y2guXG4gICAqL1xuICBzb3VyY2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHN1YnN0cmluZyBvZiB0aGUgbWF0Y2guXG4gICAqL1xuICBzdWJzdHJpbmc6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHN5bmNocm9ub3VzIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIHJlcGxhY2VtZW50IHN0cmluZ3MsIG9yIGEgc3RyaW5nIHRvIHJlcGxhY2Ugd2l0aC5cbiAqL1xuZXhwb3J0IHR5cGUgUmVwbGFjZXI8UmVwbGFjZUdyb3VwQXJncyBleHRlbmRzIHN0cmluZ1tdPiA9ICgoLi4uYXJnczogW1JlcGxhY2VDb21tb25BcmdzLCAuLi5SZXBsYWNlR3JvdXBBcmdzXSkgPT4gU3RyaW5nUmVwbGFjZW1lbnQpIHwgU3RyaW5nUmVwbGFjZW1lbnQ7XG5cbnR5cGUgU3RyaW5nUmVwbGFjZW1lbnQgPSBNYXliZVJldHVybjxzdHJpbmc+O1xuXG4vKipcbiAqIE1hcHBpbmcgb2Ygc3BlY2lhbCBjaGFyYWN0ZXJzIHRvIHRoZWlyIGVzY2FwZWQgY291bnRlcnBhcnRzLlxuICovXG5jb25zdCBFU0NBUEVfTUFQOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAnXFxuJzogJ1xcXFxuJyxcbiAgJ1xccic6ICdcXFxccicsXG4gICdcXHQnOiAnXFxcXHQnLFxuICAnXFxiJzogJ1xcXFxiJyxcbiAgJ1xcZic6ICdcXFxcZicsXG4gICdcXCcnOiAnXFxcXFxcJycsXG4gICdcIic6ICdcXFxcXCInLFxuICAnXFxcXCc6ICdcXFxcXFxcXCdcbn0gYXMgY29uc3Q7XG5cbi8qKlxuICogTWFwcGluZyBvZiBlc2NhcGVkIHNwZWNpYWwgY2hhcmFjdGVycyB0byB0aGVpciB1bmVzY2FwZWQgY291bnRlcnBhcnRzLlxuICovXG5jb25zdCBVTkVTQ0FQRV9NQVA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbmZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKEVTQ0FQRV9NQVApKSB7XG4gIFVORVNDQVBFX01BUFt2YWx1ZV0gPSBrZXk7XG59XG5cbi8qKlxuICogRW5zdXJlcyB0aGF0IGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgc3BlY2lmaWVkIHN1ZmZpeCwgYWRkaW5nIGl0IGlmIG5lY2Vzc2FyeS5cbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byBjaGVjay5cbiAqIEBwYXJhbSBzdWZmaXggLSBUaGUgc3VmZml4IHRvIGVuc3VyZS5cbiAqIEByZXR1cm5zIFRoZSBzdHJpbmcgdGhhdCBlbmRzIHdpdGggdGhlIHN1ZmZpeC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZUVuZHNXaXRoKHN0cjogc3RyaW5nLCBzdWZmaXg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIuZW5kc1dpdGgoc3VmZml4KSA/IHN0ciA6IHN0ciArIHN1ZmZpeDtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgYSBzdHJpbmcgc3RhcnRzIHdpdGggdGhlIHNwZWNpZmllZCBwcmVmaXgsIGFkZGluZyBpdCBpZiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gY2hlY2suXG4gKiBAcGFyYW0gcHJlZml4IC0gVGhlIHByZWZpeCB0byBlbnN1cmUuXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHRoYXQgc3RhcnRzIHdpdGggdGhlIHByZWZpeC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZVN0YXJ0c1dpdGgoc3RyOiBzdHJpbmcsIHByZWZpeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHN0ci5zdGFydHNXaXRoKHByZWZpeCkgPyBzdHIgOiBwcmVmaXggKyBzdHI7XG59XG5cbi8qKlxuICogRXNjYXBlcyBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gZXNjYXBlLlxuICogQHJldHVybnMgVGhlIGVzY2FwZWQgc3RyaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXNjYXBlKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlcGxhY2Uoc3RyLCBFU0NBUEVfTUFQKTtcbn1cblxuLyoqXG4gKiBJbnNlcnRzIGEgc3Vic3RyaW5nIGF0IGEgc3BlY2lmaWVkIHBvc2l0aW9uIGluIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIGluc2VydCB0aGUgc3Vic3RyaW5nIGludG8uXG4gKiBAcGFyYW0gc3Vic3RyaW5nIC0gVGhlIHN1YnN0cmluZyB0byBpbnNlcnQuXG4gKiBAcGFyYW0gc3RhcnRJbmRleCAtIFRoZSBpbmRleCB0byBpbnNlcnQgdGhlIHN1YnN0cmluZyBhdC5cbiAqIEBwYXJhbSBlbmRJbmRleCAtIFRoZSBpbmRleCB0byBlbmQgdGhlIHN1YnN0cmluZyBhdC5cbiAqIEByZXR1cm5zIFRoZSBtb2RpZmllZCBzdHJpbmcgd2l0aCB0aGUgc3Vic3RyaW5nIGluc2VydGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0QXQoc3RyOiBzdHJpbmcsIHN1YnN0cmluZzogc3RyaW5nLCBzdGFydEluZGV4OiBudW1iZXIsIGVuZEluZGV4PzogbnVtYmVyKTogc3RyaW5nIHtcbiAgZW5kSW5kZXggPz89IHN0YXJ0SW5kZXg7XG4gIHJldHVybiBzdHIuc2xpY2UoMCwgc3RhcnRJbmRleCkgKyBzdWJzdHJpbmcgKyBzdHIuc2xpY2UoZW5kSW5kZXgpO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgc3RyaW5nIGludG8gYSB2YWxpZCBKYXZhU2NyaXB0IHZhcmlhYmxlIG5hbWUgYnkgcmVwbGFjaW5nIGludmFsaWQgY2hhcmFjdGVycyB3aXRoIHVuZGVyc2NvcmVzLlxuICpcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJucyBUaGUgdmFsaWQgdmFyaWFibGUgbmFtZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1ha2VWYWxpZFZhcmlhYmxlTmFtZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiByZXBsYWNlQWxsKHN0ciwgL1teYS16QS1aMC05X10vZywgJ18nKTtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgc3RyaW5nIGJ5IGNvbnZlcnRpbmcgaXQgdG8gdGhlIE5GQyBmb3JtIGFuZCByZXBsYWNpbmcgbm9uLWJyZWFraW5nIHNwYWNlcyB3aXRoIHJlZ3VsYXIgc3BhY2VzLlxuICpcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIG5vcm1hbGl6ZS5cbiAqIEByZXR1cm5zIFRoZSBub3JtYWxpemVkIHN0cmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiByZXBsYWNlQWxsKHN0ciwgL1xcdTAwQTB8XFx1MjAyRi9nLCAnICcpLm5vcm1hbGl6ZSgnTkZDJyk7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgb2NjdXJyZW5jZXMgb2Ygc3RyaW5ncyBpbiBhIGdpdmVuIHN0cmluZyBiYXNlZCBvbiBhIHJlcGxhY2VtZW50cyBtYXAuXG4gKlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gcGVyZm9ybSByZXBsYWNlbWVudHMgb24uXG4gKiBAcGFyYW0gcmVwbGFjZW1lbnRzTWFwIC0gQW4gb2JqZWN0IG1hcHBpbmcgc3RyaW5ncyB0byB0aGVpciByZXBsYWNlbWVudCB2YWx1ZXMuXG4gKiBAcmV0dXJucyBUaGUgbW9kaWZpZWQgc3RyaW5nIHdpdGggcmVwbGFjZW1lbnRzIGFwcGxpZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlKHN0cjogc3RyaW5nLCByZXBsYWNlbWVudHNNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBzdHJpbmcge1xuICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKE9iamVjdC5rZXlzKHJlcGxhY2VtZW50c01hcCkubWFwKChzb3VyY2UpID0+IGVzY2FwZVJlZ0V4cChzb3VyY2UpKS5qb2luKCd8JyksICdnJyk7XG4gIHJldHVybiByZXBsYWNlQWxsKHN0ciwgcmVnRXhwLCAoeyBzdWJzdHJpbmc6IHNvdXJjZSB9KSA9PiByZXBsYWNlbWVudHNNYXBbc291cmNlXSA/PyB0aHJvd0V4cHJlc3Npb24obmV3IEVycm9yKGBVbmV4cGVjdGVkIHJlcGxhY2VtZW50IHNvdXJjZTogJHtzb3VyY2V9YCkpKTtcbn1cblxuLyoqXG4gKiBSZXBsYWNlcyBhbGwgb2NjdXJyZW5jZXMgb2YgYSBzZWFyY2ggc3RyaW5nIG9yIHBhdHRlcm4gd2l0aCB0aGUgcmVzdWx0cyBvZiBhbiByZXBsYWNlciBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFJlcGxhY2VHcm91cEFyZ3MgLSBUaGUgdHlwZSBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHJlcGxhY2VyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgaW4gd2hpY2ggdG8gcGVyZm9ybSByZXBsYWNlbWVudHMuXG4gKiBAcGFyYW0gc2VhcmNoVmFsdWUgLSBUaGUgc3RyaW5nIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHJlcGxhY2VyIC0gQSByZXBsYWNlciBmdW5jdGlvbiB0aGF0IGdlbmVyYXRlcyByZXBsYWNlbWVudCBzdHJpbmdzLCBvciBhIHN0cmluZyB0byByZXBsYWNlIHdpdGguXG4gKiBAcmV0dXJucyBUaGUgc3RyaW5nIHdpdGggYWxsIHJlcGxhY2VtZW50cyBtYWRlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZUFsbDxSZXBsYWNlR3JvdXBBcmdzIGV4dGVuZHMgc3RyaW5nW10+KFxuICBzdHI6IHN0cmluZyxcbiAgc2VhcmNoVmFsdWU6IFJlZ0V4cCB8IHN0cmluZyxcbiAgcmVwbGFjZXI6IFJlcGxhY2VyPFJlcGxhY2VHcm91cEFyZ3M+XG4pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIHJlcGxhY2VyID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBpZiAoc2VhcmNoVmFsdWUgaW5zdGFuY2VvZiBSZWdFeHAgJiYgIXNlYXJjaFZhbHVlLmdsb2JhbCkge1xuICAgIHNlYXJjaFZhbHVlID0gbmV3IFJlZ0V4cChzZWFyY2hWYWx1ZS5zb3VyY2UsIGAke3NlYXJjaFZhbHVlLmZsYWdzfWdgKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcmVwbGFjZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlQWxsKHNlYXJjaFZhbHVlLCByZXBsYWNlcik7XG4gIH1cblxuICByZXR1cm4gc3RyLnJlcGxhY2VBbGwoc2VhcmNoVmFsdWUsIChzdWJzdHJpbmc6IHN0cmluZywgLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgY29uc3QgU09VUkNFX0lOREVYX09GRlNFVF9GT1JfR1JPVVBfQVJHID0gMjtcbiAgICBjb25zdCBoYXNHcm91cHNBcmcgPSB0eXBlb2YgYXJncy5hdCgtMSkgPT09ICdvYmplY3QnO1xuICAgIGNvbnN0IHNvdXJjZUluZGV4ID0gaGFzR3JvdXBzQXJnID8gYXJncy5sZW5ndGggLSBTT1VSQ0VfSU5ERVhfT0ZGU0VUX0ZPUl9HUk9VUF9BUkcgOiBhcmdzLmxlbmd0aCAtIDE7XG5cbiAgICBjb25zdCBjb21tb25BcmdzOiBSZXBsYWNlQ29tbW9uQXJncyA9IHtcbiAgICAgIGdyb3VwczogaGFzR3JvdXBzQXJnID8gYXJncy5hdCgtMSkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPiA6IHVuZGVmaW5lZCxcbiAgICAgIG1pc3NpbmdHcm91cEluZGljZXM6IFtdLFxuICAgICAgb2Zmc2V0OiBhcmdzLmF0KHNvdXJjZUluZGV4IC0gMSkgYXMgbnVtYmVyLFxuICAgICAgc291cmNlOiBhcmdzLmF0KHNvdXJjZUluZGV4KSBhcyBzdHJpbmcsXG4gICAgICBzdWJzdHJpbmdcbiAgICB9O1xuXG4gICAgY29uc3QgZ3JvdXBBcmdzID0gYXJncy5zbGljZSgwLCBzb3VyY2VJbmRleCAtIDEpLm1hcCgoYXJnLCBpbmRleCkgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBhcmc7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgYXJnID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICBjb21tb25BcmdzLm1pc3NpbmdHcm91cEluZGljZXMucHVzaChpbmRleCk7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIGFyZ3VtZW50IHR5cGU6ICR7dHlwZW9mIGFyZ31gKTtcbiAgICB9KSBhcyBSZXBsYWNlR3JvdXBBcmdzO1xuXG4gICAgcmV0dXJuIChyZXBsYWNlcihjb21tb25BcmdzLCAuLi5ncm91cEFyZ3MpIGFzIHN0cmluZyB8IHVuZGVmaW5lZCkgPz8gY29tbW9uQXJncy5zdWJzdHJpbmc7XG4gIH0pO1xufVxuXG4vKipcbiAqIEFzeW5jaHJvbm91c2x5IHJlcGxhY2VzIGFsbCBvY2N1cnJlbmNlcyBvZiBhIHNlYXJjaCBzdHJpbmcgb3IgcGF0dGVybiB3aXRoIHRoZSByZXN1bHRzIG9mIGFuIGFzeW5jaHJvbm91cyByZXBsYWNlciBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFJlcGxhY2VHcm91cEFyZ3MgLSBUaGUgdHlwZSBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIHJlcGxhY2VyIGZ1bmN0aW9uLlxuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgaW4gd2hpY2ggdG8gcGVyZm9ybSByZXBsYWNlbWVudHMuXG4gKiBAcGFyYW0gc2VhcmNoVmFsdWUgLSBUaGUgc3RyaW5nIG9yIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBzZWFyY2ggZm9yLlxuICogQHBhcmFtIHJlcGxhY2VyIC0gQSBzeW5jaHJvbm91cy9hc3luY2hyb25vdXMgZnVuY3Rpb24gdGhhdCBnZW5lcmF0ZXMgcmVwbGFjZW1lbnQgc3RyaW5ncywgb3IgYSBzdHJpbmcgdG8gcmVwbGFjZSB3aXRoLlxuICogQHBhcmFtIGFib3J0U2lnbmFsIC0gVGhlIGFib3J0IHNpZ25hbCB0byBjb250cm9sIHRoZSBleGVjdXRpb24gb2YgdGhlIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgc3RyaW5nIHdpdGggYWxsIHJlcGxhY2VtZW50cyBtYWRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVwbGFjZUFsbEFzeW5jPFJlcGxhY2VHcm91cEFyZ3MgZXh0ZW5kcyBzdHJpbmdbXT4oXG4gIHN0cjogc3RyaW5nLFxuICBzZWFyY2hWYWx1ZTogUmVnRXhwIHwgc3RyaW5nLFxuICByZXBsYWNlcjogQXN5bmNSZXBsYWNlcjxSZXBsYWNlR3JvdXBBcmdzPixcbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgYWJvcnRTaWduYWwgPz89IGFib3J0U2lnbmFsTmV2ZXI7XG4gIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gIGlmICh0eXBlb2YgcmVwbGFjZXIgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHJlcGxhY2VBbGwoc3RyLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZXIpO1xuICB9XG5cbiAgY29uc3QgcmVwbGFjZW1lbnRBc3luY0ZuczogKCgpID0+IFByb21pc2U8U3RyaW5nUmVwbGFjZW1lbnQ+KVtdID0gW107XG5cbiAgcmVwbGFjZUFsbDxSZXBsYWNlR3JvdXBBcmdzPihzdHIsIHNlYXJjaFZhbHVlLCAoY29tbW9uQXJncywgLi4uZ3JvdXBBcmdzKSA9PiB7XG4gICAgcmVwbGFjZW1lbnRBc3luY0Zucy5wdXNoKCgpID0+IHJlc29sdmVWYWx1ZShyZXBsYWNlciwgYWJvcnRTaWduYWwsIGNvbW1vbkFyZ3MsIC4uLmdyb3VwQXJncykpO1xuICAgIHJldHVybiAnJztcbiAgfSk7XG5cbiAgY29uc3QgcmVwbGFjZW1lbnRzOiBTdHJpbmdSZXBsYWNlbWVudFtdID0gW107XG5cbiAgZm9yIChjb25zdCBhc3luY0ZuIG9mIHJlcGxhY2VtZW50QXN5bmNGbnMpIHtcbiAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgIHJlcGxhY2VtZW50cy5wdXNoKGF3YWl0IGFzeW5jRm4oKSk7XG4gIH1cblxuICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICByZXR1cm4gcmVwbGFjZUFsbChzdHIsIHNlYXJjaFZhbHVlLCAoYXJncyk6IHN0cmluZyA9PiByZXBsYWNlbWVudHMuc2hpZnQoKSA/PyBhcmdzLnN1YnN0cmluZyk7XG59XG5cbi8qKlxuICogVHJpbXMgdGhlIHNwZWNpZmllZCBzdWZmaXggZnJvbSB0aGUgZW5kIG9mIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gKiBAcGFyYW0gc3VmZml4IC0gVGhlIHN1ZmZpeCB0byByZW1vdmUgZnJvbSB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuXG4gKiBAcGFyYW0gc2hvdWxkVmFsaWRhdGUgLSBJZiB0cnVlLCB0aHJvd3MgYW4gZXJyb3IgaWYgdGhlIHN0cmluZyBkb2VzIG5vdCBlbmQgd2l0aCB0aGUgc3VmZml4LlxuICogQHJldHVybnMgVGhlIHRyaW1tZWQgc3RyaW5nLlxuICogQHRocm93cyBJZiBgdmFsaWRhdGVgIGlzIHRydWUgYW5kIHRoZSBzdHJpbmcgZG9lcyBub3QgZW5kIHdpdGggdGhlIHN1ZmZpeC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW1FbmQoc3RyOiBzdHJpbmcsIHN1ZmZpeDogc3RyaW5nLCBzaG91bGRWYWxpZGF0ZT86IGJvb2xlYW4pOiBzdHJpbmcge1xuICBpZiAoc3RyLmVuZHNXaXRoKHN1ZmZpeCkpIHtcbiAgICByZXR1cm4gc3RyLnNsaWNlKDAsIC1zdWZmaXgubGVuZ3RoKTtcbiAgfVxuXG4gIGlmIChzaG91bGRWYWxpZGF0ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RyaW5nICR7c3RyfSBkb2VzIG5vdCBlbmQgd2l0aCBzdWZmaXggJHtzdWZmaXh9YCk7XG4gIH1cblxuICByZXR1cm4gc3RyO1xufVxuXG4vKipcbiAqIFRyaW1zIHRoZSBzcGVjaWZpZWQgcHJlZml4IGZyb20gdGhlIHN0YXJ0IG9mIGEgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIHRyaW0uXG4gKiBAcGFyYW0gcHJlZml4IC0gVGhlIHByZWZpeCB0byByZW1vdmUgZnJvbSB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZy5cbiAqIEBwYXJhbSB2YWxpZGF0ZSAtIElmIHRydWUsIHRocm93cyBhbiBlcnJvciBpZiB0aGUgc3RyaW5nIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIHByZWZpeC5cbiAqIEByZXR1cm5zIFRoZSB0cmltbWVkIHN0cmluZy5cbiAqIEB0aHJvd3MgSWYgYHZhbGlkYXRlYCBpcyB0cnVlIGFuZCB0aGUgc3RyaW5nIGRvZXMgbm90IHN0YXJ0IHdpdGggdGhlIHByZWZpeC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW1TdGFydChzdHI6IHN0cmluZywgcHJlZml4OiBzdHJpbmcsIHZhbGlkYXRlPzogYm9vbGVhbik6IHN0cmluZyB7XG4gIGlmIChzdHIuc3RhcnRzV2l0aChwcmVmaXgpKSB7XG4gICAgcmV0dXJuIHN0ci5zbGljZShwcmVmaXgubGVuZ3RoKTtcbiAgfVxuXG4gIGlmICh2YWxpZGF0ZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgU3RyaW5nICR7c3RyfSBkb2VzIG5vdCBzdGFydCB3aXRoIHByZWZpeCAke3ByZWZpeH1gKTtcbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogVW5lc2NhcGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBlc2NhcGUgc2VxdWVuY2VzIHdpdGggdGhlaXIgY29ycmVzcG9uZGluZyBjaGFyYWN0ZXJzLlxuICpcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIHVuZXNjYXBlLlxuICogQHJldHVybnMgVGhlIHVuZXNjYXBlZCBzdHJpbmcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmVzY2FwZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiByZXBsYWNlKHN0ciwgVU5FU0NBUEVfTUFQKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVNBLDZCQUFpQztBQUNqQyxtQkFBZ0M7QUFDaEMsb0JBQTZCO0FBQzdCLDJCQUE2QjtBQStDN0IsTUFBTSxhQUFxQztBQUFBLEVBQ3pDLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLEtBQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLE1BQU07QUFBQSxFQUNOLEtBQU07QUFBQSxFQUNOLEtBQUs7QUFBQSxFQUNMLE1BQU07QUFDUjtBQUtBLE1BQU0sZUFBdUMsQ0FBQztBQUM5QyxXQUFXLENBQUMsS0FBSyxLQUFLLEtBQUssT0FBTyxRQUFRLFVBQVUsR0FBRztBQUNyRCxlQUFhLEtBQUssSUFBSTtBQUN4QjtBQVNPLFNBQVMsZUFBZSxLQUFhLFFBQXdCO0FBQ2xFLFNBQU8sSUFBSSxTQUFTLE1BQU0sSUFBSSxNQUFNLE1BQU07QUFDNUM7QUFTTyxTQUFTLGlCQUFpQixLQUFh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
@@ -111,9 +111,10 @@ export declare function replaceAll<ReplaceGroupArgs extends string[]>(str: strin
111
111
  * @param str - The string in which to perform replacements.
112
112
  * @param searchValue - The string or regular expression to search for.
113
113
  * @param replacer - A synchronous/asynchronous function that generates replacement strings, or a string to replace with.
114
+ * @param abortSignal - The abort signal to control the execution of the function.
114
115
  * @returns A {@link Promise} that resolves to the string with all replacements made.
115
116
  */
116
- export declare function replaceAllAsync<ReplaceGroupArgs extends string[]>(str: string, searchValue: RegExp | string, replacer: AsyncReplacer<ReplaceGroupArgs>): Promise<string>;
117
+ export declare function replaceAllAsync<ReplaceGroupArgs extends string[]>(str: string, searchValue: RegExp | string, replacer: AsyncReplacer<ReplaceGroupArgs>, abortSignal?: AbortSignal): Promise<string>;
117
118
  /**
118
119
  * Trims the specified suffix from the end of a string.
119
120
  *
@@ -28,9 +28,12 @@ __export(ValueProvider_exports, {
28
28
  resolveValue: () => resolveValue
29
29
  });
30
30
  module.exports = __toCommonJS(ValueProvider_exports);
31
- async function resolveValue(provider, ...args) {
31
+ var import_AbortController = require('./AbortController.cjs');
32
+ async function resolveValue(provider, abortSignal, ...args) {
33
+ abortSignal ??= import_AbortController.abortSignalNever;
34
+ abortSignal.throwIfAborted();
32
35
  if (isFunction(provider)) {
33
- return await provider(...args);
36
+ return await provider(abortSignal, ...args);
34
37
  }
35
38
  return provider;
36
39
  }
@@ -41,4 +44,4 @@ function isFunction(value) {
41
44
  0 && (module.exports = {
42
45
  resolveValue
43
46
  });
44
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL1ZhbHVlUHJvdmlkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSB0eXBlcyBhbmQgZnVuY3Rpb25zIGZvciBoYW5kbGluZyB2YWx1ZSBwcm92aWRlcnMsIHdoaWNoIGNhbiBiZSBlaXRoZXIgZGlyZWN0IHZhbHVlcyBvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gdmFsdWVzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG4vKipcbiAqIFJlcHJlc2VudHMgYSB2YWx1ZSBwcm92aWRlciB0aGF0IGNhbiBlaXRoZXIgYmUgYSBkaXJlY3QgdmFsdWUgb2YgdHlwZSBgVmFsdWVgIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdmFsdWUgb2YgdHlwZSBgVmFsdWVgLlxuICpcbiAqIEB0eXBlUGFyYW0gVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgcHJvdmlkZWQuXG4gKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgdHlwZXMgb2YgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gaWYgdGhlIHByb3ZpZGVyIGlzIGEgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFZhbHVlUHJvdmlkZXI8VmFsdWUsIEFyZ3MgZXh0ZW5kcyB1bmtub3duW10gPSBbXT4gPSAoKC4uLmFyZ3M6IEFyZ3MpID0+IFByb21pc2FibGU8VmFsdWU+KSB8IFZhbHVlO1xuXG4vKipcbiAqIFJlc29sdmVzIGEgdmFsdWUgZnJvbSBhIHZhbHVlIHByb3ZpZGVyLCB3aGljaCBjYW4gYmUgZWl0aGVyIGEgZGlyZWN0IHZhbHVlIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdmFsdWUuXG4gKlxuICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIHR5cGVzIG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGlmIHRoZSBwcm92aWRlciBpcyBhIGZ1bmN0aW9uLlxuICogQHR5cGVQYXJhbSBWYWx1ZSAtIFRoZSB0eXBlIG9mIHRoZSB2YWx1ZSBwcm92aWRlZC5cbiAqIEBwYXJhbSBwcm92aWRlciAtIFRoZSB2YWx1ZSBwcm92aWRlciB0byByZXNvbHZlLlxuICogQHBhcmFtIGFyZ3MgLSBUaGUgYXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGZ1bmN0aW9uIGlmIHRoZSBwcm92aWRlciBpcyBhIGZ1bmN0aW9uLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSB2YWx1ZSBwcm92aWRlZCBieSB0aGUgdmFsdWUgcHJvdmlkZXIuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlVmFsdWU8VmFsdWUsIEFyZ3MgZXh0ZW5kcyB1bmtub3duW10+KHByb3ZpZGVyOiBWYWx1ZVByb3ZpZGVyPFZhbHVlLCBBcmdzPiwgLi4uYXJnczogQXJncyk6IFByb21pc2U8VmFsdWU+IHtcbiAgaWYgKGlzRnVuY3Rpb24ocHJvdmlkZXIpKSB7XG4gICAgcmV0dXJuIGF3YWl0IHByb3ZpZGVyKC4uLmFyZ3MpO1xuICB9XG4gIHJldHVybiBwcm92aWRlcjtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBnaXZlbiB2YWx1ZSBwcm92aWRlciBpcyBhIGZ1bmN0aW9uLlxuICpcbiAqIEB0eXBlUGFyYW0gVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgcHJvdmlkZWQuXG4gKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgdHlwZXMgb2YgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gaWYgdGhlIHByb3ZpZGVyIGlzIGEgZnVuY3Rpb24uXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgcHJvdmlkZXIgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhbHVlIHByb3ZpZGVyIGlzIGEgZnVuY3Rpb24sIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0Z1bmN0aW9uPFZhbHVlLCBBcmdzIGV4dGVuZHMgdW5rbm93bltdPih2YWx1ZTogVmFsdWVQcm92aWRlcjxWYWx1ZSwgQXJncz4pOiB2YWx1ZSBpcyAoLi4uYXJnczogQXJncykgPT4gUHJvbWlzYWJsZTxWYWx1ZT4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUF3QkEsZUFBc0IsYUFBNEMsYUFBeUMsTUFBNEI7QUFDckksTUFBSSxXQUFXLFFBQVEsR0FBRztBQUN4QixXQUFPLE1BQU0sU0FBUyxHQUFHLElBQUk7QUFBQSxFQUMvQjtBQUNBLFNBQU87QUFDVDtBQVVBLFNBQVMsV0FBMEMsT0FBa0Y7QUFDbkksU0FBTyxPQUFPLFVBQVU7QUFDMUI7IiwKICAibmFtZXMiOiBbXQp9Cg==
47
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL1ZhbHVlUHJvdmlkZXIudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSB0eXBlcyBhbmQgZnVuY3Rpb25zIGZvciBoYW5kbGluZyB2YWx1ZSBwcm92aWRlcnMsIHdoaWNoIGNhbiBiZSBlaXRoZXIgZGlyZWN0IHZhbHVlcyBvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gdmFsdWVzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB7IGFib3J0U2lnbmFsTmV2ZXIgfSBmcm9tICcuL0Fib3J0Q29udHJvbGxlci50cyc7XG4vKipcbiAqIFJlcHJlc2VudHMgYSB2YWx1ZSBwcm92aWRlciB0aGF0IGNhbiBlaXRoZXIgYmUgYSBkaXJlY3QgdmFsdWUgb2YgdHlwZSBgVmFsdWVgIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdmFsdWUgb2YgdHlwZSBgVmFsdWVgLlxuICpcbiAqIEB0eXBlUGFyYW0gVmFsdWUgLSBUaGUgdHlwZSBvZiB0aGUgdmFsdWUgcHJvdmlkZWQuXG4gKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgdHlwZXMgb2YgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gaWYgdGhlIHByb3ZpZGVyIGlzIGEgZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCB0eXBlIFZhbHVlUHJvdmlkZXI8VmFsdWUsIEFyZ3MgZXh0ZW5kcyB1bmtub3duW10gPSBbXT4gPSAoKGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCwgLi4uYXJnczogQXJncykgPT4gUHJvbWlzYWJsZTxWYWx1ZT4pIHwgVmFsdWU7XG5cbi8qKlxuICogUmVzb2x2ZXMgYSB2YWx1ZSBmcm9tIGEgdmFsdWUgcHJvdmlkZXIsIHdoaWNoIGNhbiBiZSBlaXRoZXIgYSBkaXJlY3QgdmFsdWUgb3IgYSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB2YWx1ZS5cbiAqXG4gKiBAdHlwZVBhcmFtIEFyZ3MgLSBUaGUgdHlwZXMgb2YgYXJndW1lbnRzIHBhc3NlZCB0byB0aGUgZnVuY3Rpb24gaWYgdGhlIHByb3ZpZGVyIGlzIGEgZnVuY3Rpb24uXG4gKiBAdHlwZVBhcmFtIFZhbHVlIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIHByb3ZpZGVkLlxuICogQHBhcmFtIHByb3ZpZGVyIC0gVGhlIHZhbHVlIHByb3ZpZGVyIHRvIHJlc29sdmUuXG4gKiBAcGFyYW0gYWJvcnRTaWduYWwgLSBUaGUgYWJvcnQgc2lnbmFsIHRvIGNvbnRyb2wgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgZnVuY3Rpb24uXG4gKiBAcGFyYW0gYXJncyAtIFRoZSBhcmd1bWVudHMgdG8gcGFzcyB0byB0aGUgZnVuY3Rpb24gaWYgdGhlIHByb3ZpZGVyIGlzIGEgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHZhbHVlIHByb3ZpZGVkIGJ5IHRoZSB2YWx1ZSBwcm92aWRlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVWYWx1ZTxWYWx1ZSwgQXJncyBleHRlbmRzIHVua25vd25bXT4oXG4gIHByb3ZpZGVyOiBWYWx1ZVByb3ZpZGVyPFZhbHVlLCBBcmdzPixcbiAgYWJvcnRTaWduYWw/OiBBYm9ydFNpZ25hbCxcbiAgLi4uYXJnczogQXJnc1xuKTogUHJvbWlzZTxWYWx1ZT4ge1xuICBhYm9ydFNpZ25hbCA/Pz0gYWJvcnRTaWduYWxOZXZlcjtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgaWYgKGlzRnVuY3Rpb24ocHJvdmlkZXIpKSB7XG4gICAgcmV0dXJuIGF3YWl0IHByb3ZpZGVyKGFib3J0U2lnbmFsLCAuLi5hcmdzKTtcbiAgfVxuICByZXR1cm4gcHJvdmlkZXI7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgZ2l2ZW4gdmFsdWUgcHJvdmlkZXIgaXMgYSBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIFZhbHVlIC0gVGhlIHR5cGUgb2YgdGhlIHZhbHVlIHByb3ZpZGVkLlxuICogQHR5cGVQYXJhbSBBcmdzIC0gVGhlIHR5cGVzIG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGlmIHRoZSBwcm92aWRlciBpcyBhIGZ1bmN0aW9uLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHByb3ZpZGVyIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2YWx1ZSBwcm92aWRlciBpcyBhIGZ1bmN0aW9uLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbjxWYWx1ZSwgQXJncyBleHRlbmRzIHVua25vd25bXT4odmFsdWU6IFZhbHVlUHJvdmlkZXI8VmFsdWUsIEFyZ3M+KTogdmFsdWUgaXMgKGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCwgLi4uYXJnczogQXJncykgPT4gUHJvbWlzYWJsZTxWYWx1ZT4ge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFRQSw2QkFBaUM7QUFtQmpDLGVBQXNCLGFBQ3BCLFVBQ0EsZ0JBQ0csTUFDYTtBQUNoQixrQkFBZ0I7QUFDaEIsY0FBWSxlQUFlO0FBQzNCLE1BQUksV0FBVyxRQUFRLEdBQUc7QUFDeEIsV0FBTyxNQUFNLFNBQVMsYUFBYSxHQUFHLElBQUk7QUFBQSxFQUM1QztBQUNBLFNBQU87QUFDVDtBQVVBLFNBQVMsV0FBMEMsT0FBNEc7QUFDN0osU0FBTyxPQUFPLFVBQVU7QUFDMUI7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -10,14 +10,15 @@ import type { Promisable } from 'type-fest';
10
10
  * @typeParam Value - The type of the value provided.
11
11
  * @typeParam Args - The types of arguments passed to the function if the provider is a function.
12
12
  */
13
- export type ValueProvider<Value, Args extends unknown[] = []> = ((...args: Args) => Promisable<Value>) | Value;
13
+ export type ValueProvider<Value, Args extends unknown[] = []> = ((abortSignal: AbortSignal, ...args: Args) => Promisable<Value>) | Value;
14
14
  /**
15
15
  * Resolves a value from a value provider, which can be either a direct value or a function that returns a value.
16
16
  *
17
17
  * @typeParam Args - The types of arguments passed to the function if the provider is a function.
18
18
  * @typeParam Value - The type of the value provided.
19
19
  * @param provider - The value provider to resolve.
20
+ * @param abortSignal - The abort signal to control the execution of the function.
20
21
  * @param args - The arguments to pass to the function if the provider is a function.
21
22
  * @returns A {@link Promise} that resolves with the value provided by the value provider.
22
23
  */
23
- export declare function resolveValue<Value, Args extends unknown[]>(provider: ValueProvider<Value, Args>, ...args: Args): Promise<Value>;
24
+ export declare function resolveValue<Value, Args extends unknown[]>(provider: ValueProvider<Value, Args>, abortSignal?: AbortSignal, ...args: Args): Promise<Value>;
@@ -44,8 +44,9 @@ var import_Frontmatter = require('./Frontmatter.cjs');
44
44
  var import_FrontmatterLinkCacheWithOffsets = require('./FrontmatterLinkCacheWithOffsets.cjs');
45
45
  var import_Reference = require('./Reference.cjs');
46
46
  var import_Vault = require('./Vault.cjs');
47
- async function applyContentChanges(content, path, changesProvider, shouldRetryOnInvalidChanges = true) {
48
- let changes = await (0, import_ValueProvider.resolveValue)(changesProvider);
47
+ async function applyContentChanges(abortSignal, content, path, changesProvider, shouldRetryOnInvalidChanges = true) {
48
+ abortSignal.throwIfAborted();
49
+ let changes = await (0, import_ValueProvider.resolveValue)(changesProvider, abortSignal);
49
50
  let frontmatter = {};
50
51
  let hasFrontmatterError = false;
51
52
  try {
@@ -129,7 +130,8 @@ async function applyContentChanges(content, path, changesProvider, shouldRetryOn
129
130
  }
130
131
  }
131
132
  }
132
- await applyFrontmatterChangesWithOffsets(frontmatter, frontmatterChangesWithOffsetMap, path);
133
+ await applyFrontmatterChangesWithOffsets(abortSignal, frontmatter, frontmatterChangesWithOffsetMap, path);
134
+ abortSignal.throwIfAborted();
133
135
  newContent += content.slice(lastIndex);
134
136
  if (frontmatterChanged) {
135
137
  newContent = (0, import_Frontmatter.setFrontmatter)(newContent, frontmatter);
@@ -137,11 +139,11 @@ async function applyContentChanges(content, path, changesProvider, shouldRetryOn
137
139
  return newContent;
138
140
  }
139
141
  async function applyFileChanges(app, pathOrFile, changesProvider, processOptions = {}, shouldRetryOnInvalidChanges = true) {
140
- await (0, import_Vault.process)(app, pathOrFile, async (content) => {
142
+ await (0, import_Vault.process)(app, pathOrFile, async (abortSignal, content) => {
141
143
  if ((0, import_FileSystem.isCanvasFile)(app, pathOrFile)) {
142
- return applyCanvasChanges(content, (0, import_FileSystem.getPath)(app, pathOrFile), changesProvider, shouldRetryOnInvalidChanges);
144
+ return await applyCanvasChanges(abortSignal, content, (0, import_FileSystem.getPath)(app, pathOrFile), changesProvider, shouldRetryOnInvalidChanges);
143
145
  }
144
- return await applyContentChanges(content, (0, import_FileSystem.getPath)(app, pathOrFile), changesProvider, shouldRetryOnInvalidChanges);
146
+ return await applyContentChanges(abortSignal, content, (0, import_FileSystem.getPath)(app, pathOrFile), changesProvider, shouldRetryOnInvalidChanges);
145
147
  }, processOptions);
146
148
  }
147
149
  function isCanvasChange(change) {
@@ -162,8 +164,8 @@ function isFrontmatterChange(fileChange) {
162
164
  function isFrontmatterChangeWithOffsets(fileChange) {
163
165
  return (0, import_FrontmatterLinkCacheWithOffsets.isFrontmatterLinkCacheWithOffsets)(fileChange.reference);
164
166
  }
165
- async function applyCanvasChanges(content, path, changesProvider, shouldRetryOnInvalidChanges = true) {
166
- const changes = await (0, import_ValueProvider.resolveValue)(changesProvider);
167
+ async function applyCanvasChanges(abortSignal, content, path, changesProvider, shouldRetryOnInvalidChanges = true) {
168
+ const changes = await (0, import_ValueProvider.resolveValue)(changesProvider, abortSignal);
167
169
  const canvasData = parseJsonSafe(content);
168
170
  const canvasTextChanges = /* @__PURE__ */ new Map();
169
171
  for (const change of changes) {
@@ -220,11 +222,17 @@ async function applyCanvasChanges(content, path, changesProvider, shouldRetryOnI
220
222
  return null;
221
223
  }
222
224
  const contentChanges = canvasTextChangesForNode.map((change) => (0, import_Reference.referenceToFileChange)(change.reference.originalReference, change.newContent));
223
- node.text = await applyContentChanges(node.text, `${path}.node${String(nodeIndex)}.VIRTUAL_FILE.md`, contentChanges, shouldRetryOnInvalidChanges);
225
+ node.text = await applyContentChanges(
226
+ abortSignal,
227
+ node.text,
228
+ `${path}.node${String(nodeIndex)}.VIRTUAL_FILE.md`,
229
+ contentChanges,
230
+ shouldRetryOnInvalidChanges
231
+ );
224
232
  }
225
233
  return JSON.stringify(canvasData, null, " ");
226
234
  }
227
- async function applyFrontmatterChangesWithOffsets(frontmatter, frontmatterChangesWithOffsetMap, path) {
235
+ async function applyFrontmatterChangesWithOffsets(abortSignal, frontmatter, frontmatterChangesWithOffsetMap, path) {
228
236
  for (const [key, frontmatterChangesWithOffsets] of frontmatterChangesWithOffsetMap.entries()) {
229
237
  const propertyValue = (0, import_ObjectUtils.getNestedPropertyValue)(frontmatter, key);
230
238
  if (typeof propertyValue !== "string") {
@@ -250,7 +258,7 @@ async function applyFrontmatterChangesWithOffsets(frontmatter, frontmatterChange
250
258
  }
251
259
  }
252
260
  }));
253
- const newPropertyValue = await applyContentChanges(propertyValue, `${path}.frontmatter.${key}.VIRTUAL_FILE.md`, contentChanges);
261
+ const newPropertyValue = await applyContentChanges(abortSignal, propertyValue, `${path}.frontmatter.${key}.VIRTUAL_FILE.md`, contentChanges);
254
262
  if (newPropertyValue === null) {
255
263
  return;
256
264
  }
@@ -334,4 +342,4 @@ function validateChanges(changes, content, frontmatter, path, shouldShowWarning)
334
342
  isFrontmatterChange,
335
343
  isFrontmatterChangeWithOffsets
336
344
  });
337
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0ZpbGVDaGFuZ2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSB0eXBlcyBhbmQgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBmaWxlIGNoYW5nZXMgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIEZyb250bWF0dGVyTGlua0NhY2hlLFxuICBSZWZlcmVuY2UsXG4gIFJlZmVyZW5jZUNhY2hlXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgQ2FudmFzRGF0YSB9IGZyb20gJ29ic2lkaWFuL0NhbnZhcy5kLnRzJztcblxuaW1wb3J0IHtcbiAgaXNGcm9udG1hdHRlckxpbmtDYWNoZSxcbiAgaXNSZWZlcmVuY2VDYWNoZVxufSBmcm9tICdvYnNpZGlhbi10eXBpbmdzL2ltcGxlbWVudGF0aW9ucyc7XG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJy4uL09iamVjdFV0aWxzLnRzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVQcm92aWRlciB9IGZyb20gJy4uL1ZhbHVlUHJvdmlkZXIudHMnO1xuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9GaWxlU3lzdGVtLnRzJztcbmltcG9ydCB0eXBlIHsgQ29tYmluZWRGcm9udG1hdHRlciB9IGZyb20gJy4vRnJvbnRtYXR0ZXIudHMnO1xuaW1wb3J0IHR5cGUgeyBGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzIH0gZnJvbSAnLi9Gcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgQ2FudmFzRmlsZU5vZGVSZWZlcmVuY2UsXG4gIENhbnZhc1JlZmVyZW5jZSxcbiAgQ2FudmFzVGV4dE5vZGVSZWZlcmVuY2Vcbn0gZnJvbSAnLi9SZWZlcmVuY2UudHMnO1xuaW1wb3J0IHR5cGUgeyBQcm9jZXNzT3B0aW9ucyB9IGZyb20gJy4vVmF1bHQudHMnO1xuXG5pbXBvcnQgeyBnZXREZWJ1Z2dlciB9IGZyb20gJy4uL0RlYnVnLnRzJztcbmltcG9ydCB7XG4gIGRlZXBFcXVhbCxcbiAgZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZSxcbiAgc2V0TmVzdGVkUHJvcGVydHlWYWx1ZVxufSBmcm9tICcuLi9PYmplY3RVdGlscy50cyc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuLi9WYWx1ZVByb3ZpZGVyLnRzJztcbmltcG9ydCB7XG4gIGdldFBhdGgsXG4gIGlzQ2FudmFzRmlsZVxufSBmcm9tICcuL0ZpbGVTeXN0ZW0udHMnO1xuaW1wb3J0IHtcbiAgcGFyc2VGcm9udG1hdHRlcixcbiAgc2V0RnJvbnRtYXR0ZXJcbn0gZnJvbSAnLi9Gcm9udG1hdHRlci50cyc7XG5pbXBvcnQgeyBpc0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMgfSBmcm9tICcuL0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMudHMnO1xuaW1wb3J0IHtcbiAgaXNDYW52YXNSZWZlcmVuY2UsXG4gIHJlZmVyZW5jZVRvRmlsZUNoYW5nZVxufSBmcm9tICcuL1JlZmVyZW5jZS50cyc7XG5pbXBvcnQgeyBwcm9jZXNzIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGZpbGUgY2hhbmdlIGluIHRoZSBWYXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBuZXcgY29udGVudCB0byByZXBsYWNlIHRoZSBvbGQgY29udGVudC5cbiAgICovXG4gIG5ld0NvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9sZCBjb250ZW50IHRoYXQgd2lsbCBiZSByZXBsYWNlZC5cbiAgICovXG4gIG9sZENvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlZmVyZW5jZSB0aGF0IGNhdXNlZCB0aGUgY2hhbmdlLlxuICAgKi9cbiAgcmVmZXJlbmNlOiBSZWZlcmVuY2U7XG59XG50eXBlIENhbnZhc0NoYW5nZSA9IHsgcmVmZXJlbmNlOiBDYW52YXNSZWZlcmVuY2UgfSAmIEZpbGVDaGFuZ2U7XG50eXBlIENhbnZhc0ZpbGVOb2RlQ2hhbmdlID0geyByZWZlcmVuY2U6IENhbnZhc0ZpbGVOb2RlUmVmZXJlbmNlIH0gJiBGaWxlQ2hhbmdlO1xudHlwZSBDYW52YXNUZXh0Tm9kZUNoYW5nZSA9IHsgcmVmZXJlbmNlOiBDYW52YXNUZXh0Tm9kZVJlZmVyZW5jZSB9ICYgRmlsZUNoYW5nZTtcbnR5cGUgQ29udGVudENoYW5nZSA9IHsgcmVmZXJlbmNlOiBSZWZlcmVuY2VDYWNoZSB9ICYgRmlsZUNoYW5nZTtcbnR5cGUgRnJvbnRtYXR0ZXJDaGFuZ2UgPSB7IHJlZmVyZW5jZTogRnJvbnRtYXR0ZXJMaW5rQ2FjaGUgfSAmIEZpbGVDaGFuZ2U7XG50eXBlIEZyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMgPSB7IHJlZmVyZW5jZTogRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyB9ICYgRmlsZUNoYW5nZTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgc2VyaWVzIG9mIGNvbnRlbnQgY2hhbmdlcyB0byB0aGUgc3BlY2lmaWVkIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgY29udGVudCB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gd2hpY2ggdGhlIGNoYW5nZXMgc2hvdWxkIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gY2hhbmdlc1Byb3ZpZGVyIC0gQSBwcm92aWRlciB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2YgY29udGVudCBjaGFuZ2VzIHRvIGFwcGx5LlxuICogQHBhcmFtIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcyAtIFdoZXRoZXIgdG8gcmV0cnkgdGhlIG9wZXJhdGlvbiBpZiB0aGUgY2hhbmdlcyBhcmUgaW52YWxpZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHVwZGF0ZWQgY29udGVudCBvciB0byBgbnVsbGAgaWYgdXBkYXRlIGRpZG4ndCBzdWNjZWVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlDb250ZW50Q2hhbmdlcyhcbiAgY29udGVudDogc3RyaW5nLFxuICBwYXRoOiBzdHJpbmcsXG4gIGNoYW5nZXNQcm92aWRlcjogVmFsdWVQcm92aWRlcjxGaWxlQ2hhbmdlW10+LFxuICBzaG91bGRSZXRyeU9uSW52YWxpZENoYW5nZXMgPSB0cnVlXG4pOiBQcm9taXNlPG51bGwgfCBzdHJpbmc+IHtcbiAgbGV0IGNoYW5nZXMgPSBhd2FpdCByZXNvbHZlVmFsdWUoY2hhbmdlc1Byb3ZpZGVyKTtcbiAgbGV0IGZyb250bWF0dGVyOiBDb21iaW5lZEZyb250bWF0dGVyPHVua25vd24+ID0ge307XG4gIGxldCBoYXNGcm9udG1hdHRlckVycm9yID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgZnJvbnRtYXR0ZXIgPSBwYXJzZUZyb250bWF0dGVyKGNvbnRlbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IobmV3IEVycm9yKGBGcm9udG1hdHRlciBwYXJzaW5nIGZhaWxlZCBpbiAke3BhdGh9YCwgeyBjYXVzZTogZXJyb3IgfSkpO1xuICAgIGhhc0Zyb250bWF0dGVyRXJyb3IgPSB0cnVlO1xuICB9XG5cbiAgaWYgKCF2YWxpZGF0ZUNoYW5nZXMoY2hhbmdlcywgY29udGVudCwgZnJvbnRtYXR0ZXIsIHBhdGgsIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcykpIHtcbiAgICByZXR1cm4gc2hvdWxkUmV0cnlPbkludmFsaWRDaGFuZ2VzID8gbnVsbCA6IGNvbnRlbnQ7XG4gIH1cblxuICBjaGFuZ2VzLnNvcnQoKGEsIGIpID0+IHtcbiAgICBpZiAoaXNDb250ZW50Q2hhbmdlKGEpICYmIGlzQ29udGVudENoYW5nZShiKSkge1xuICAgICAgcmV0dXJuIGEucmVmZXJlbmNlLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCAtIGIucmVmZXJlbmNlLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldDtcbiAgICB9XG5cbiAgICBpZiAoaXNGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzKGEpICYmIGlzRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0cyhiKSkge1xuICAgICAgcmV0dXJuIGEucmVmZXJlbmNlLmtleS5sb2NhbGVDb21wYXJlKGIucmVmZXJlbmNlLmtleSkgfHwgYS5yZWZlcmVuY2Uuc3RhcnRPZmZzZXQgLSBiLnJlZmVyZW5jZS5zdGFydE9mZnNldDtcbiAgICB9XG5cbiAgICBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShhKSAmJiBpc0Zyb250bWF0dGVyQ2hhbmdlKGIpKSB7XG4gICAgICByZXR1cm4gYS5yZWZlcmVuY2Uua2V5LmxvY2FsZUNvbXBhcmUoYi5yZWZlcmVuY2Uua2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNDb250ZW50Q2hhbmdlKGEpID8gLTEgOiAxO1xuICB9KTtcblxuICAvLyBCVUc6IGh0dHBzOi8vZm9ydW0ub2JzaWRpYW4ubWQvdC9idWctZHVwbGljYXRlZC1saW5rcy1pbi1tZXRhZGF0YWNhY2hlLWluc2lkZS1mb290bm90ZXMvODU1NTFcbiAgY2hhbmdlcyA9IGNoYW5nZXMuZmlsdGVyKChjaGFuZ2UsIGluZGV4KSA9PiB7XG4gICAgaWYgKGNoYW5nZS5vbGRDb250ZW50ID09PSBjaGFuZ2UubmV3Q29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gIWRlZXBFcXVhbChjaGFuZ2UsIGNoYW5nZXNbaW5kZXggLSAxXSk7XG4gIH0pO1xuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgY2hhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoYW5nZSA9IGNoYW5nZXNbaV07XG4gICAgaWYgKCFjaGFuZ2UpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBwcmV2aW91c0NoYW5nZSA9IGNoYW5nZXNbaSAtIDFdO1xuICAgIGlmICghcHJldmlvdXNDaGFuZ2UpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGlzQ29udGVudENoYW5nZShwcmV2aW91c0NoYW5nZSkgJiYgaXNDb250ZW50Q2hhbmdlKGNoYW5nZSkgJiYgcHJldmlvdXNDaGFuZ2UucmVmZXJlbmNlLnBvc2l0aW9uLmVuZC5vZmZzZXRcbiAgICAgICYmIHByZXZpb3VzQ2hhbmdlLnJlZmVyZW5jZS5wb3NpdGlvbi5lbmQub2Zmc2V0ID4gY2hhbmdlLnJlZmVyZW5jZS5wb3NpdGlvbi5zdGFydC5vZmZzZXRcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2FybignT3ZlcmxhcHBpbmcgY2hhbmdlcycsIHtcbiAgICAgICAgY2hhbmdlLFxuICAgICAgICBwcmV2aW91c0NoYW5nZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBsZXQgbmV3Q29udGVudCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgbGV0IGZyb250bWF0dGVyQ2hhbmdlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRNYXAgPSBuZXcgTWFwPHN0cmluZywgRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0c1tdPigpO1xuXG4gIGZvciAoY29uc3QgY2hhbmdlIG9mIGNoYW5nZXMpIHtcbiAgICBpZiAoaXNDb250ZW50Q2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIG5ld0NvbnRlbnQgKz0gY29udGVudC5zbGljZShsYXN0SW5kZXgsIGNoYW5nZS5yZWZlcmVuY2UucG9zaXRpb24uc3RhcnQub2Zmc2V0KTtcbiAgICAgIG5ld0NvbnRlbnQgKz0gY2hhbmdlLm5ld0NvbnRlbnQ7XG4gICAgICBsYXN0SW5kZXggPSBjaGFuZ2UucmVmZXJlbmNlLnBvc2l0aW9uLmVuZC5vZmZzZXQ7XG4gICAgfSBlbHNlIGlmIChpc0Zyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMoY2hhbmdlKSkge1xuICAgICAgaWYgKGhhc0Zyb250bWF0dGVyRXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgQ2Fubm90IGFwcGx5IGZyb250bWF0dGVyIGNoYW5nZSBpbiAke3BhdGh9LCBiZWNhdXNlIGZyb250bWF0dGVyIHBhcnNpbmcgZmFpbGVkYCwge1xuICAgICAgICAgIGNoYW5nZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0cyA9IGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRNYXAuZ2V0KGNoYW5nZS5yZWZlcmVuY2Uua2V5KTtcbiAgICAgICAgaWYgKCFmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0cykge1xuICAgICAgICAgIGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRzID0gW107XG4gICAgICAgICAgZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldE1hcC5zZXQoY2hhbmdlLnJlZmVyZW5jZS5rZXksIGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRzKTtcbiAgICAgICAgfVxuICAgICAgICBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0cy5wdXNoKGNoYW5nZSk7XG4gICAgICAgIGZyb250bWF0dGVyQ2hhbmdlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0Zyb250bWF0dGVyQ2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIGlmIChoYXNGcm9udG1hdHRlckVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCBhcHBseSBmcm9udG1hdHRlciBjaGFuZ2UgaW4gJHtwYXRofSwgYmVjYXVzZSBmcm9udG1hdHRlciBwYXJzaW5nIGZhaWxlZGAsIHtcbiAgICAgICAgICBjaGFuZ2VcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKGZyb250bWF0dGVyLCBjaGFuZ2UucmVmZXJlbmNlLmtleSwgY2hhbmdlLm5ld0NvbnRlbnQpO1xuICAgICAgICBmcm9udG1hdHRlckNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGF3YWl0IGFwcGx5RnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHMoZnJvbnRtYXR0ZXIsIGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRNYXAsIHBhdGgpO1xuXG4gIG5ld0NvbnRlbnQgKz0gY29udGVudC5zbGljZShsYXN0SW5kZXgpO1xuICBpZiAoZnJvbnRtYXR0ZXJDaGFuZ2VkKSB7XG4gICAgbmV3Q29udGVudCA9IHNldEZyb250bWF0dGVyKG5ld0NvbnRlbnQsIGZyb250bWF0dGVyKTtcbiAgfVxuXG4gIHJldHVybiBuZXdDb250ZW50O1xufVxuXG4vKipcbiAqIEFwcGxpZXMgYSBzZXJpZXMgb2YgZmlsZSBjaGFuZ2VzIHRvIHRoZSBzcGVjaWZpZWQgZmlsZSBvciBwYXRoIHdpdGhpbiB0aGUgYXBwbGljYXRpb24uXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBhcHBsaWNhdGlvbiBpbnN0YW5jZSB3aGVyZSB0aGUgZmlsZSBjaGFuZ2VzIHdpbGwgYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBjaGFuZ2VzUHJvdmlkZXIgLSBBIHByb3ZpZGVyIHRoYXQgcmV0dXJucyBhbiBhcnJheSBvZiBmaWxlIGNoYW5nZXMgdG8gYXBwbHkuXG4gKiBAcGFyYW0gcHJvY2Vzc09wdGlvbnMgLSBPcHRpb25hbCBvcHRpb25zIGZvciBwcm9jZXNzaW5nL3JldHJ5aW5nIHRoZSBvcGVyYXRpb24uXG4gKiBAcGFyYW0gc2hvdWxkUmV0cnlPbkludmFsaWRDaGFuZ2VzIC0gV2hldGhlciB0byByZXRyeSB0aGUgb3BlcmF0aW9uIGlmIHRoZSBjaGFuZ2VzIGFyZSBpbnZhbGlkLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZmlsZSBjaGFuZ2VzIGhhdmUgYmVlbiBzdWNjZXNzZnVsbHkgYXBwbGllZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFwcGx5RmlsZUNoYW5nZXMoXG4gIGFwcDogQXBwLFxuICBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLFxuICBjaGFuZ2VzUHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8RmlsZUNoYW5nZVtdPixcbiAgcHJvY2Vzc09wdGlvbnM6IFByb2Nlc3NPcHRpb25zID0ge30sXG4gIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcyA9IHRydWVcbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBwcm9jZXNzKGFwcCwgcGF0aE9yRmlsZSwgYXN5bmMgKGNvbnRlbnQpID0+IHtcbiAgICBpZiAoaXNDYW52YXNGaWxlKGFwcCwgcGF0aE9yRmlsZSkpIHtcbiAgICAgIHJldHVybiBhcHBseUNhbnZhc0NoYW5nZXMoY29udGVudCwgZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpLCBjaGFuZ2VzUHJvdmlkZXIsIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IGFwcGx5Q29udGVudENoYW5nZXMoY29udGVudCwgZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpLCBjaGFuZ2VzUHJvdmlkZXIsIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcyk7XG4gIH0sIHByb2Nlc3NPcHRpb25zKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBmaWxlIGNoYW5nZSBpcyBhIGNhbnZhcyBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGNoYW5nZSAtIFRoZSBmaWxlIGNoYW5nZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZpbGUgY2hhbmdlIGlzIGEgY2FudmFzIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FudmFzQ2hhbmdlKGNoYW5nZTogRmlsZUNoYW5nZSk6IGNoYW5nZSBpcyBDYW52YXNDaGFuZ2Uge1xuICByZXR1cm4gaXNDYW52YXNSZWZlcmVuY2UoY2hhbmdlLnJlZmVyZW5jZSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBjYW52YXMgZmlsZSBub2RlIGNoYW5nZS5cbiAqXG4gKiBAcGFyYW0gY2hhbmdlIC0gVGhlIGZpbGUgY2hhbmdlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgZmlsZSBjaGFuZ2UgaXMgYSBjYW52YXMgZmlsZSBub2RlIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FudmFzRmlsZU5vZGVDaGFuZ2UoY2hhbmdlOiBGaWxlQ2hhbmdlKTogY2hhbmdlIGlzIENhbnZhc0ZpbGVOb2RlQ2hhbmdlIHtcbiAgcmV0dXJuIGlzQ2FudmFzQ2hhbmdlKGNoYW5nZSkgJiYgY2hhbmdlLnJlZmVyZW5jZS50eXBlID09PSAnZmlsZSc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBjYW52YXMgdGV4dCBub2RlIGNoYW5nZS5cbiAqXG4gKiBAcGFyYW0gY2hhbmdlIC0gVGhlIGZpbGUgY2hhbmdlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgZmlsZSBjaGFuZ2UgaXMgYSBjYW52YXMgdGV4dCBub2RlIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FudmFzVGV4dE5vZGVDaGFuZ2UoY2hhbmdlOiBGaWxlQ2hhbmdlKTogY2hhbmdlIGlzIENhbnZhc1RleHROb2RlQ2hhbmdlIHtcbiAgcmV0dXJuIGlzQ2FudmFzQ2hhbmdlKGNoYW5nZSkgJiYgY2hhbmdlLnJlZmVyZW5jZS50eXBlID09PSAndGV4dCc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBjb250ZW50IGNoYW5nZS5cbiAqXG4gKiBAcGFyYW0gZmlsZUNoYW5nZSAtIFRoZSBmaWxlIGNoYW5nZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGZpbGUgY2hhbmdlIGlzIGEgY29udGVudCBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnRlbnRDaGFuZ2UoZmlsZUNoYW5nZTogRmlsZUNoYW5nZSk6IGZpbGVDaGFuZ2UgaXMgQ29udGVudENoYW5nZSB7XG4gIHJldHVybiBpc1JlZmVyZW5jZUNhY2hlKGZpbGVDaGFuZ2UucmVmZXJlbmNlKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBmaWxlIGNoYW5nZSBpcyBhIGZyb250bWF0dGVyIGNoYW5nZS5cbiAqXG4gKiBAcGFyYW0gZmlsZUNoYW5nZSAtIFRoZSBmaWxlIGNoYW5nZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGZpbGUgY2hhbmdlIGlzIGEgZnJvbnRtYXR0ZXIgY2hhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGcm9udG1hdHRlckNoYW5nZShmaWxlQ2hhbmdlOiBGaWxlQ2hhbmdlKTogZmlsZUNoYW5nZSBpcyBGcm9udG1hdHRlckNoYW5nZSB7XG4gIHJldHVybiBpc0Zyb250bWF0dGVyTGlua0NhY2hlKGZpbGVDaGFuZ2UucmVmZXJlbmNlKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBmaWxlIGNoYW5nZSBpcyBhIGZyb250bWF0dGVyIGNoYW5nZSB3aXRoIG9mZnNldHMuXG4gKlxuICogQHBhcmFtIGZpbGVDaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGZyb250bWF0dGVyIGNoYW5nZSB3aXRoIG9mZnNldHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Zyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMoZmlsZUNoYW5nZTogRmlsZUNoYW5nZSk6IGZpbGVDaGFuZ2UgaXMgRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0cyB7XG4gIHJldHVybiBpc0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMoZmlsZUNoYW5nZS5yZWZlcmVuY2UpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBhcHBseUNhbnZhc0NoYW5nZXMoXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgcGF0aDogc3RyaW5nLFxuICBjaGFuZ2VzUHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8RmlsZUNoYW5nZVtdPixcbiAgc2hvdWxkUmV0cnlPbkludmFsaWRDaGFuZ2VzID0gdHJ1ZVxuKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIGNvbnN0IGNoYW5nZXMgPSBhd2FpdCByZXNvbHZlVmFsdWUoY2hhbmdlc1Byb3ZpZGVyKTtcbiAgY29uc3QgY2FudmFzRGF0YSA9IHBhcnNlSnNvblNhZmUoY29udGVudCkgYXMgQ2FudmFzRGF0YTtcblxuICBjb25zdCBjYW52YXNUZXh0Q2hhbmdlcyA9IG5ldyBNYXA8bnVtYmVyLCBDYW52YXNUZXh0Tm9kZUNoYW5nZVtdPigpO1xuXG4gIGZvciAoY29uc3QgY2hhbmdlIG9mIGNoYW5nZXMpIHtcbiAgICBpZiAoIWlzQ2FudmFzQ2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIGNvbnNvbGUud2FybignT25seSBjYW52YXMgY2hhbmdlcyBhcmUgc3VwcG9ydGVkIGZvciBjYW52YXMgZmlsZXMnLCB7XG4gICAgICAgIGNoYW5nZSxcbiAgICAgICAgcGF0aFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBub2RlID0gY2FudmFzRGF0YS5ub2Rlc1tjaGFuZ2UucmVmZXJlbmNlLm5vZGVJbmRleF07XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vZGUgbm90IGZvdW5kJywge1xuICAgICAgICBub2RlSW5kZXg6IGNoYW5nZS5yZWZlcmVuY2Uubm9kZUluZGV4LFxuICAgICAgICBwYXRoXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGlmIChpc0NhbnZhc0ZpbGVOb2RlQ2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIGlmIChub2RlLmZpbGUgIT09IGNoYW5nZS5vbGRDb250ZW50KSB7XG4gICAgICAgIGNvbnNvbGUud2FybignQ29udGVudCBtaXNtYXRjaCcsIHtcbiAgICAgICAgICBhY3R1YWxDb250ZW50OiBub2RlLmZpbGUgYXMgc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgICAgICAgIGV4cGVjdGVkQ29udGVudDogY2hhbmdlLm9sZENvbnRlbnQsXG4gICAgICAgICAgbm9kZUluZGV4OiBjaGFuZ2UucmVmZXJlbmNlLm5vZGVJbmRleCxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIHR5cGU6ICdmaWxlJ1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIG5vZGUuZmlsZSA9IGNoYW5nZS5uZXdDb250ZW50O1xuICAgIH0gZWxzZSBpZiAoaXNDYW52YXNUZXh0Tm9kZUNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBsZXQgY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlID0gY2FudmFzVGV4dENoYW5nZXMuZ2V0KGNoYW5nZS5yZWZlcmVuY2Uubm9kZUluZGV4KTtcbiAgICAgIGlmICghY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlKSB7XG4gICAgICAgIGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSA9IFtdO1xuICAgICAgICBjYW52YXNUZXh0Q2hhbmdlcy5zZXQoY2hhbmdlLnJlZmVyZW5jZS5ub2RlSW5kZXgsIGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSk7XG4gICAgICB9XG5cbiAgICAgIGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZS5wdXNoKGNoYW5nZSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBbbm9kZUluZGV4LCBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGVdIG9mIGNhbnZhc1RleHRDaGFuZ2VzLmVudHJpZXMoKSkge1xuICAgIGNvbnN0IG5vZGUgPSBjYW52YXNEYXRhLm5vZGVzW25vZGVJbmRleF07XG4gICAgaWYgKCFub2RlKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vZGUgbm90IGZvdW5kJywge1xuICAgICAgICBub2RlSW5kZXgsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5vZGUudGV4dCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnNvbGUud2FybignTm9kZSB0ZXh0IGlzIG5vdCBhIHN0cmluZycsIHtcbiAgICAgICAgbm9kZUluZGV4LFxuICAgICAgICBwYXRoXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudENoYW5nZXMgPSBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGUubWFwKChjaGFuZ2UpID0+IHJlZmVyZW5jZVRvRmlsZUNoYW5nZShjaGFuZ2UucmVmZXJlbmNlLm9yaWdpbmFsUmVmZXJlbmNlLCBjaGFuZ2UubmV3Q29udGVudCkpO1xuICAgIG5vZGUudGV4dCA9IGF3YWl0IGFwcGx5Q29udGVudENoYW5nZXMobm9kZS50ZXh0LCBgJHtwYXRofS5ub2RlJHtTdHJpbmcobm9kZUluZGV4KX0uVklSVFVBTF9GSUxFLm1kYCwgY29udGVudENoYW5nZXMsIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcyk7XG4gIH1cblxuICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY2FudmFzRGF0YSwgbnVsbCwgJ1xcdCcpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBhcHBseUZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRzKFxuICBmcm9udG1hdHRlcjogQ29tYmluZWRGcm9udG1hdHRlcjx1bmtub3duPixcbiAgZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldE1hcDogTWFwPHN0cmluZywgRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0c1tdPixcbiAgcGF0aDogc3RyaW5nXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgZm9yIChjb25zdCBba2V5LCBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0c10gb2YgZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldE1hcC5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBwcm9wZXJ0eVZhbHVlID0gZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZShmcm9udG1hdHRlciwga2V5KTtcbiAgICBpZiAodHlwZW9mIHByb3BlcnR5VmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29udGVudENoYW5nZXM6IENvbnRlbnRDaGFuZ2VbXSA9IGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRzLm1hcCgoY2hhbmdlKSA9PiAoe1xuICAgICAgbmV3Q29udGVudDogY2hhbmdlLm5ld0NvbnRlbnQsXG4gICAgICBvbGRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgIHJlZmVyZW5jZToge1xuICAgICAgICBsaW5rOiAnJyxcbiAgICAgICAgb3JpZ2luYWw6ICcnLFxuICAgICAgICBwb3NpdGlvbjoge1xuICAgICAgICAgIGVuZDoge1xuICAgICAgICAgICAgY29sOiBjaGFuZ2UucmVmZXJlbmNlLmVuZE9mZnNldCxcbiAgICAgICAgICAgIGxpbmU6IDAsXG4gICAgICAgICAgICBvZmZzZXQ6IGNoYW5nZS5yZWZlcmVuY2UuZW5kT2Zmc2V0XG4gICAgICAgICAgfSxcbiAgICAgICAgICBzdGFydDoge1xuICAgICAgICAgICAgY29sOiBjaGFuZ2UucmVmZXJlbmNlLnN0YXJ0T2Zmc2V0LFxuICAgICAgICAgICAgbGluZTogMCxcbiAgICAgICAgICAgIG9mZnNldDogY2hhbmdlLnJlZmVyZW5jZS5zdGFydE9mZnNldFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gYXMgQ29udGVudENoYW5nZSkpO1xuXG4gICAgY29uc3QgbmV3UHJvcGVydHlWYWx1ZSA9IGF3YWl0IGFwcGx5Q29udGVudENoYW5nZXMocHJvcGVydHlWYWx1ZSwgYCR7cGF0aH0uZnJvbnRtYXR0ZXIuJHtrZXl9LlZJUlRVQUxfRklMRS5tZGAsIGNvbnRlbnRDaGFuZ2VzKTtcbiAgICBpZiAobmV3UHJvcGVydHlWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldE5lc3RlZFByb3BlcnR5VmFsdWUoZnJvbnRtYXR0ZXIsIGtleSwgbmV3UHJvcGVydHlWYWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VKc29uU2FmZShjb250ZW50OiBzdHJpbmcpOiBHZW5lcmljT2JqZWN0IHtcbiAgbGV0IHBhcnNlZDogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICBwYXJzZWQgPSBKU09OLnBhcnNlKGNvbnRlbnQpO1xuICB9IGNhdGNoIHtcbiAgICBwYXJzZWQgPSBudWxsO1xuICB9XG5cbiAgaWYgKHBhcnNlZCA9PT0gbnVsbCB8fCB0eXBlb2YgcGFyc2VkICE9PSAnb2JqZWN0Jykge1xuICAgIHBhcnNlZCA9IHt9O1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlZCBhcyBHZW5lcmljT2JqZWN0O1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUNoYW5nZXMoY2hhbmdlczogRmlsZUNoYW5nZVtdLCBjb250ZW50OiBzdHJpbmcsIGZyb250bWF0dGVyOiBDb21iaW5lZEZyb250bWF0dGVyPHVua25vd24+LCBwYXRoOiBzdHJpbmcsIHNob3VsZFNob3dXYXJuaW5nOiBib29sZWFuKTogYm9vbGVhbiB7XG4gIGNvbnN0IF9kZWJ1Z2dlciA9IGdldERlYnVnZ2VyKCd2YWxpZGF0ZUNoYW5nZXMnKTtcbiAgY29uc3QgbG9nZ2VyID0gc2hvdWxkU2hvd1dhcm5pbmcgPyBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKSA6IF9kZWJ1Z2dlcjtcbiAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgY2hhbmdlcykge1xuICAgIGlmIChpc0NvbnRlbnRDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSBjaGFuZ2UucmVmZXJlbmNlLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldDtcbiAgICAgIGNvbnN0IGVuZE9mZnNldCA9IGNoYW5nZS5yZWZlcmVuY2UucG9zaXRpb24uZW5kLm9mZnNldDtcbiAgICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBjb250ZW50LnNsaWNlKHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpO1xuICAgICAgaWYgKGFjdHVhbENvbnRlbnQgIT09IGNoYW5nZS5vbGRDb250ZW50KSB7XG4gICAgICAgIGxvZ2dlcignQ29udGVudCBtaXNtYXRjaCcsIHtcbiAgICAgICAgICBhY3R1YWxDb250ZW50LFxuICAgICAgICAgIGVuZE9mZnNldCxcbiAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IGNoYW5nZS5vbGRDb250ZW50LFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgc3RhcnRPZmZzZXRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzKGNoYW5nZSkpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5VmFsdWUgPSBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKGZyb250bWF0dGVyLCBjaGFuZ2UucmVmZXJlbmNlLmtleSk7XG4gICAgICBpZiAodHlwZW9mIHByb3BlcnR5VmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGxvZ2dlcignUHJvcGVydHkgdmFsdWUgaXMgbm90IGEgc3RyaW5nJywge1xuICAgICAgICAgIGZyb250bWF0dGVyS2V5OiBjaGFuZ2UucmVmZXJlbmNlLmtleSxcbiAgICAgICAgICBwYXRoLFxuICAgICAgICAgIHByb3BlcnR5VmFsdWVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWN0dWFsQ29udGVudCA9IHByb3BlcnR5VmFsdWUuc2xpY2UoY2hhbmdlLnJlZmVyZW5jZS5zdGFydE9mZnNldCwgY2hhbmdlLnJlZmVyZW5jZS5lbmRPZmZzZXQpO1xuICAgICAgaWYgKGFjdHVhbENvbnRlbnQgIT09IGNoYW5nZS5vbGRDb250ZW50KSB7XG4gICAgICAgIGxvZ2dlcignQ29udGVudCBtaXNtYXRjaCcsIHtcbiAgICAgICAgICBhY3R1YWxDb250ZW50LFxuICAgICAgICAgIGV4cGVjdGVkQ29udGVudDogY2hhbmdlLm9sZENvbnRlbnQsXG4gICAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5yZWZlcmVuY2Uua2V5LFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgc3RhcnRPZmZzZXQ6IGNoYW5nZS5yZWZlcmVuY2Uuc3RhcnRPZmZzZXRcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBjb25zdCBhY3R1YWxDb250ZW50ID0gZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZShmcm9udG1hdHRlciwgY2hhbmdlLnJlZmVyZW5jZS5rZXkpO1xuICAgICAgaWYgKGFjdHVhbENvbnRlbnQgIT09IGNoYW5nZS5vbGRDb250ZW50KSB7XG4gICAgICAgIGxvZ2dlcignQ29udGVudCBtaXNtYXRjaCcsIHtcbiAgICAgICAgICBhY3R1YWxDb250ZW50LFxuICAgICAgICAgIGV4cGVjdGVkQ29udGVudDogY2hhbmdlLm9sZENvbnRlbnQsXG4gICAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5yZWZlcmVuY2Uua2V5LFxuICAgICAgICAgIHBhdGhcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWNBLDZCQUdPO0FBY1AsbUJBQTRCO0FBQzVCLHlCQUlPO0FBQ1AsMkJBQTZCO0FBQzdCLHdCQUdPO0FBQ1AseUJBR087QUFDUCw2Q0FBa0Q7QUFDbEQsdUJBR087QUFDUCxtQkFBd0I7QUFxQ3hCLGVBQXNCLG9CQUNwQixTQUNBLE1BQ0EsaUJBQ0EsOEJBQThCLE1BQ047QUFDeEIsTUFBSSxVQUFVLFVBQU0sbUNBQWEsZUFBZTtBQUNoRCxNQUFJLGNBQTRDLENBQUM7QUFDakQsTUFBSSxzQkFBc0I7QUFDMUIsTUFBSTtBQUNGLHNCQUFjLHFDQUFpQixPQUFPO0FBQUEsRUFDeEMsU0FBUyxPQUFPO0FBQ2QsWUFBUSxNQUFNLElBQUksTUFBTSxpQ0FBaUMsSUFBSSxJQUFJLEVBQUUsT0FBTyxNQUFNLENBQUMsQ0FBQztBQUNsRiwwQkFBc0I7QUFBQSxFQUN4QjtBQUVBLE1BQUksQ0FBQyxnQkFBZ0IsU0FBUyxTQUFTLGFBQWEsTUFBTSwyQkFBMkIsR0FBRztBQUN0RixXQUFPLDhCQUE4QixPQUFPO0FBQUEsRUFDOUM7QUFFQSxVQUFRLEtBQUssQ0FBQyxHQUFHLE1BQU07QUFDckIsUUFBSSxnQkFBZ0IsQ0FBQyxLQUFLLGdCQUFnQixDQUFDLEdBQUc7QUFDNUMsYUFBTyxFQUFFLFVBQVUsU0FBUyxNQUFNLFNBQVMsRUFBRSxVQUFVLFNBQVMsTUFBTTtBQUFBLElBQ3hFO0FBRUEsUUFBSSwrQkFBK0IsQ0FBQyxLQUFLLCtCQUErQixDQUFDLEdBQUc7QUFDMUUsYUFBTyxFQUFFLFVBQVUsSUFBSSxjQUFjLEVBQUUsVUFBVSxHQUFHLEtBQUssRUFBRSxVQUFVLGNBQWMsRUFBRSxVQUFVO0FBQUEsSUFDakc7QUFF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U0FBdUIsU0FBaUIsYUFBMkMsTUFBYyxtQkFBcUM7QUFDN0osUUFBTSxnQkFBWSwwQkFBWSxpQkFBaUI7QUFDL0MsUUFBTSxTQUFTLG9CQUFvQixRQUFRLEtBQUssS0FBSyxPQUFPLElBQUk7QUFDaEUsYUFBVyxVQUFVLFNBQVM7QUFDNUIsUUFBSSxnQkFBZ0IsTUFBTSxHQUFHO0FBQzNCLFlBQU0sY0FBYyxPQUFPLFVBQVUsU0FBUyxNQUFNO0FBQ3BELFlBQU0sWUFBWSxPQUFPLFVBQVUsU0FBUyxJQUFJO0FBQ2hELFlBQU0sZ0JBQWdCLFFBQVEsTUFBTSxhQUFhLFNBQVM7QUFDMUQsVUFBSSxrQkFBa0IsT0FBTyxZQUFZO0FBQ3ZDLGVBQU8sb0JBQW9CO0FBQUEsVUFDekI7QUFBQSxVQUNBO0FBQUEsVUFDQSxpQkFBaUIsT0FBTztBQUFBLFVBQ3hCO0FBQUEsVUFDQTtBQUFBLFFBQ0YsQ0FBQztBQUVELGVBQU87QUFBQSxNQUNUO0FBQUEsSUFDRixXQUFXLCtCQUErQixNQUFNLEdBQUc7QUFDakQsWUFBTSxvQkFBZ0IsMkNBQXVCLGFBQWEsT0FBTyxVQUFVLEdBQUc7QUFDOUUsVUFBSSxPQUFPLGtCQUFrQixVQUFVO0FBQ3JDLGVBQU8sa0NBQWtDO0FBQUEsVUFDdkMsZ0JBQWdCLE9BQU8sVUFBVTtBQUFBLFVBQ2pDO0FBQUEsVUFDQTtBQUFBLFFBQ0YsQ0FBQztBQUNELGVBQU87QUFBQSxNQUNUO0FBRUEsWUFBTSxnQkFBZ0IsY0FBYyxNQUFNLE9BQU8sVUFBVSxhQUFhLE9BQU8sVUFBVSxTQUFTO0FBQ2xHLFVBQUksa0JBQWtCLE9BQU8sWUFBWTtBQUN2QyxlQUFPLG9CQUFvQjtBQUFBLFVBQ3pCO0FBQUEsVUFDQSxpQkFBaUIsT0FBTztBQUFBLFVBQ3hCLGdCQUFnQixPQUFPLFVBQVU7QUFBQSxVQUNqQztBQUFBLFVBQ0EsYUFBYSxPQUFPLFVBQVU7QUFBQSxRQUNoQyxDQUFDO0FBRUQsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGLFdBQVcsb0JBQW9CLE1BQU0sR0FBRztBQUN0QyxZQUFNLG9CQUFnQiwyQ0FBdUIsYUFBYSxPQUFPLFVBQVUsR0FBRztBQUM5RSxVQUFJLGtCQUFrQixPQUFPLFlBQVk7QUFDdkMsZUFBTyxvQkFBb0I7QUFBQSxVQUN6QjtBQUFBLFVBQ0EsaUJBQWlCLE9BQU87QUFBQSxVQUN4QixnQkFBZ0IsT0FBTyxVQUFVO0FBQUEsVUFDakM7QUFBQSxRQUNGLENBQUM7QUFFRCxlQUFPO0FBQUEsTUFDVDtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUOyIsCiAgIm5hbWVzIjogW10KfQo=
345
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0ZpbGVDaGFuZ2UudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKlxuICogQ29udGFpbnMgdXRpbGl0eSB0eXBlcyBhbmQgZnVuY3Rpb25zIGZvciBoYW5kbGluZyBmaWxlIGNoYW5nZXMgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBBcHAsXG4gIEZyb250bWF0dGVyTGlua0NhY2hlLFxuICBSZWZlcmVuY2UsXG4gIFJlZmVyZW5jZUNhY2hlXG59IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgQ2FudmFzRGF0YSB9IGZyb20gJ29ic2lkaWFuL0NhbnZhcy5kLnRzJztcblxuaW1wb3J0IHtcbiAgaXNGcm9udG1hdHRlckxpbmtDYWNoZSxcbiAgaXNSZWZlcmVuY2VDYWNoZVxufSBmcm9tICdvYnNpZGlhbi10eXBpbmdzL2ltcGxlbWVudGF0aW9ucyc7XG5cbmltcG9ydCB0eXBlIHsgR2VuZXJpY09iamVjdCB9IGZyb20gJy4uL09iamVjdFV0aWxzLnRzJztcbmltcG9ydCB0eXBlIHsgVmFsdWVQcm92aWRlciB9IGZyb20gJy4uL1ZhbHVlUHJvdmlkZXIudHMnO1xuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9GaWxlU3lzdGVtLnRzJztcbmltcG9ydCB0eXBlIHsgQ29tYmluZWRGcm9udG1hdHRlciB9IGZyb20gJy4vRnJvbnRtYXR0ZXIudHMnO1xuaW1wb3J0IHR5cGUgeyBGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzIH0gZnJvbSAnLi9Gcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgQ2FudmFzRmlsZU5vZGVSZWZlcmVuY2UsXG4gIENhbnZhc1JlZmVyZW5jZSxcbiAgQ2FudmFzVGV4dE5vZGVSZWZlcmVuY2Vcbn0gZnJvbSAnLi9SZWZlcmVuY2UudHMnO1xuaW1wb3J0IHR5cGUgeyBQcm9jZXNzT3B0aW9ucyB9IGZyb20gJy4vVmF1bHQudHMnO1xuXG5pbXBvcnQgeyBnZXREZWJ1Z2dlciB9IGZyb20gJy4uL0RlYnVnLnRzJztcbmltcG9ydCB7XG4gIGRlZXBFcXVhbCxcbiAgZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZSxcbiAgc2V0TmVzdGVkUHJvcGVydHlWYWx1ZVxufSBmcm9tICcuLi9PYmplY3RVdGlscy50cyc7XG5pbXBvcnQgeyByZXNvbHZlVmFsdWUgfSBmcm9tICcuLi9WYWx1ZVByb3ZpZGVyLnRzJztcbmltcG9ydCB7XG4gIGdldFBhdGgsXG4gIGlzQ2FudmFzRmlsZVxufSBmcm9tICcuL0ZpbGVTeXN0ZW0udHMnO1xuaW1wb3J0IHtcbiAgcGFyc2VGcm9udG1hdHRlcixcbiAgc2V0RnJvbnRtYXR0ZXJcbn0gZnJvbSAnLi9Gcm9udG1hdHRlci50cyc7XG5pbXBvcnQgeyBpc0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMgfSBmcm9tICcuL0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMudHMnO1xuaW1wb3J0IHtcbiAgaXNDYW52YXNSZWZlcmVuY2UsXG4gIHJlZmVyZW5jZVRvRmlsZUNoYW5nZVxufSBmcm9tICcuL1JlZmVyZW5jZS50cyc7XG5pbXBvcnQgeyBwcm9jZXNzIH0gZnJvbSAnLi9WYXVsdC50cyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGZpbGUgY2hhbmdlIGluIHRoZSBWYXVsdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBGaWxlQ2hhbmdlIHtcbiAgLyoqXG4gICAqIFRoZSBuZXcgY29udGVudCB0byByZXBsYWNlIHRoZSBvbGQgY29udGVudC5cbiAgICovXG4gIG5ld0NvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9sZCBjb250ZW50IHRoYXQgd2lsbCBiZSByZXBsYWNlZC5cbiAgICovXG4gIG9sZENvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlZmVyZW5jZSB0aGF0IGNhdXNlZCB0aGUgY2hhbmdlLlxuICAgKi9cbiAgcmVmZXJlbmNlOiBSZWZlcmVuY2U7XG59XG50eXBlIENhbnZhc0NoYW5nZSA9IHsgcmVmZXJlbmNlOiBDYW52YXNSZWZlcmVuY2UgfSAmIEZpbGVDaGFuZ2U7XG50eXBlIENhbnZhc0ZpbGVOb2RlQ2hhbmdlID0geyByZWZlcmVuY2U6IENhbnZhc0ZpbGVOb2RlUmVmZXJlbmNlIH0gJiBGaWxlQ2hhbmdlO1xudHlwZSBDYW52YXNUZXh0Tm9kZUNoYW5nZSA9IHsgcmVmZXJlbmNlOiBDYW52YXNUZXh0Tm9kZVJlZmVyZW5jZSB9ICYgRmlsZUNoYW5nZTtcbnR5cGUgQ29udGVudENoYW5nZSA9IHsgcmVmZXJlbmNlOiBSZWZlcmVuY2VDYWNoZSB9ICYgRmlsZUNoYW5nZTtcbnR5cGUgRnJvbnRtYXR0ZXJDaGFuZ2UgPSB7IHJlZmVyZW5jZTogRnJvbnRtYXR0ZXJMaW5rQ2FjaGUgfSAmIEZpbGVDaGFuZ2U7XG50eXBlIEZyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMgPSB7IHJlZmVyZW5jZTogRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyB9ICYgRmlsZUNoYW5nZTtcblxuLyoqXG4gKiBBcHBsaWVzIGEgc2VyaWVzIG9mIGNvbnRlbnQgY2hhbmdlcyB0byB0aGUgc3BlY2lmaWVkIGNvbnRlbnQuXG4gKlxuICogQHBhcmFtIGFib3J0U2lnbmFsIC0gVGhlIGFib3J0IHNpZ25hbCB0byBjb250cm9sIHRoZSBleGVjdXRpb24gb2YgdGhlIGZ1bmN0aW9uLlxuICogQHBhcmFtIGNvbnRlbnQgLSBUaGUgY29udGVudCB0byB3aGljaCB0aGUgY2hhbmdlcyBzaG91bGQgYmUgYXBwbGllZC5cbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gd2hpY2ggdGhlIGNoYW5nZXMgc2hvdWxkIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gY2hhbmdlc1Byb3ZpZGVyIC0gQSBwcm92aWRlciB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2YgY29udGVudCBjaGFuZ2VzIHRvIGFwcGx5LlxuICogQHBhcmFtIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcyAtIFdoZXRoZXIgdG8gcmV0cnkgdGhlIG9wZXJhdGlvbiBpZiB0aGUgY2hhbmdlcyBhcmUgaW52YWxpZC5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHVwZGF0ZWQgY29udGVudCBvciB0byBgbnVsbGAgaWYgdXBkYXRlIGRpZG4ndCBzdWNjZWVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYXBwbHlDb250ZW50Q2hhbmdlcyhcbiAgYWJvcnRTaWduYWw6IEFib3J0U2lnbmFsLFxuICBjb250ZW50OiBzdHJpbmcsXG4gIHBhdGg6IHN0cmluZyxcbiAgY2hhbmdlc1Byb3ZpZGVyOiBWYWx1ZVByb3ZpZGVyPEZpbGVDaGFuZ2VbXT4sXG4gIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcyA9IHRydWVcbik6IFByb21pc2U8bnVsbCB8IHN0cmluZz4ge1xuICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICBsZXQgY2hhbmdlcyA9IGF3YWl0IHJlc29sdmVWYWx1ZShjaGFuZ2VzUHJvdmlkZXIsIGFib3J0U2lnbmFsKTtcbiAgbGV0IGZyb250bWF0dGVyOiBDb21iaW5lZEZyb250bWF0dGVyPHVua25vd24+ID0ge307XG4gIGxldCBoYXNGcm9udG1hdHRlckVycm9yID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgZnJvbnRtYXR0ZXIgPSBwYXJzZUZyb250bWF0dGVyKGNvbnRlbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IobmV3IEVycm9yKGBGcm9udG1hdHRlciBwYXJzaW5nIGZhaWxlZCBpbiAke3BhdGh9YCwgeyBjYXVzZTogZXJyb3IgfSkpO1xuICAgIGhhc0Zyb250bWF0dGVyRXJyb3IgPSB0cnVlO1xuICB9XG5cbiAgaWYgKCF2YWxpZGF0ZUNoYW5nZXMoY2hhbmdlcywgY29udGVudCwgZnJvbnRtYXR0ZXIsIHBhdGgsIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcykpIHtcbiAgICByZXR1cm4gc2hvdWxkUmV0cnlPbkludmFsaWRDaGFuZ2VzID8gbnVsbCA6IGNvbnRlbnQ7XG4gIH1cblxuICBjaGFuZ2VzLnNvcnQoKGEsIGIpID0+IHtcbiAgICBpZiAoaXNDb250ZW50Q2hhbmdlKGEpICYmIGlzQ29udGVudENoYW5nZShiKSkge1xuICAgICAgcmV0dXJuIGEucmVmZXJlbmNlLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCAtIGIucmVmZXJlbmNlLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldDtcbiAgICB9XG5cbiAgICBpZiAoaXNGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzKGEpICYmIGlzRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0cyhiKSkge1xuICAgICAgcmV0dXJuIGEucmVmZXJlbmNlLmtleS5sb2NhbGVDb21wYXJlKGIucmVmZXJlbmNlLmtleSkgfHwgYS5yZWZlcmVuY2Uuc3RhcnRPZmZzZXQgLSBiLnJlZmVyZW5jZS5zdGFydE9mZnNldDtcbiAgICB9XG5cbiAgICBpZiAoaXNGcm9udG1hdHRlckNoYW5nZShhKSAmJiBpc0Zyb250bWF0dGVyQ2hhbmdlKGIpKSB7XG4gICAgICByZXR1cm4gYS5yZWZlcmVuY2Uua2V5LmxvY2FsZUNvbXBhcmUoYi5yZWZlcmVuY2Uua2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaXNDb250ZW50Q2hhbmdlKGEpID8gLTEgOiAxO1xuICB9KTtcblxuICAvLyBCVUc6IGh0dHBzOi8vZm9ydW0ub2JzaWRpYW4ubWQvdC9idWctZHVwbGljYXRlZC1saW5rcy1pbi1tZXRhZGF0YWNhY2hlLWluc2lkZS1mb290bm90ZXMvODU1NTFcbiAgY2hhbmdlcyA9IGNoYW5nZXMuZmlsdGVyKChjaGFuZ2UsIGluZGV4KSA9PiB7XG4gICAgaWYgKGNoYW5nZS5vbGRDb250ZW50ID09PSBjaGFuZ2UubmV3Q29udGVudCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoaW5kZXggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gIWRlZXBFcXVhbChjaGFuZ2UsIGNoYW5nZXNbaW5kZXggLSAxXSk7XG4gIH0pO1xuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgY2hhbmdlcy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGNoYW5nZSA9IGNoYW5nZXNbaV07XG4gICAgaWYgKCFjaGFuZ2UpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBwcmV2aW91c0NoYW5nZSA9IGNoYW5nZXNbaSAtIDFdO1xuICAgIGlmICghcHJldmlvdXNDaGFuZ2UpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGlzQ29udGVudENoYW5nZShwcmV2aW91c0NoYW5nZSkgJiYgaXNDb250ZW50Q2hhbmdlKGNoYW5nZSkgJiYgcHJldmlvdXNDaGFuZ2UucmVmZXJlbmNlLnBvc2l0aW9uLmVuZC5vZmZzZXRcbiAgICAgICYmIHByZXZpb3VzQ2hhbmdlLnJlZmVyZW5jZS5wb3NpdGlvbi5lbmQub2Zmc2V0ID4gY2hhbmdlLnJlZmVyZW5jZS5wb3NpdGlvbi5zdGFydC5vZmZzZXRcbiAgICApIHtcbiAgICAgIGNvbnNvbGUud2FybignT3ZlcmxhcHBpbmcgY2hhbmdlcycsIHtcbiAgICAgICAgY2hhbmdlLFxuICAgICAgICBwcmV2aW91c0NoYW5nZVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBsZXQgbmV3Q29udGVudCA9ICcnO1xuICBsZXQgbGFzdEluZGV4ID0gMDtcbiAgbGV0IGZyb250bWF0dGVyQ2hhbmdlZCA9IGZhbHNlO1xuXG4gIGNvbnN0IGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRNYXAgPSBuZXcgTWFwPHN0cmluZywgRnJvbnRtYXR0ZXJDaGFuZ2VXaXRoT2Zmc2V0c1tdPigpO1xuXG4gIGZvciAoY29uc3QgY2hhbmdlIG9mIGNoYW5nZXMpIHtcbiAgICBpZiAoaXNDb250ZW50Q2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIG5ld0NvbnRlbnQgKz0gY29udGVudC5zbGljZShsYXN0SW5kZXgsIGNoYW5nZS5yZWZlcmVuY2UucG9zaXRpb24uc3RhcnQub2Zmc2V0KTtcbiAgICAgIG5ld0NvbnRlbnQgKz0gY2hhbmdlLm5ld0NvbnRlbnQ7XG4gICAgICBsYXN0SW5kZXggPSBjaGFuZ2UucmVmZXJlbmNlLnBvc2l0aW9uLmVuZC5vZmZzZXQ7XG4gICAgfSBlbHNlIGlmIChpc0Zyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMoY2hhbmdlKSkge1xuICAgICAgaWYgKGhhc0Zyb250bWF0dGVyRXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgQ2Fubm90IGFwcGx5IGZyb250bWF0dGVyIGNoYW5nZSBpbiAke3BhdGh9LCBiZWNhdXNlIGZyb250bWF0dGVyIHBhcnNpbmcgZmFpbGVkYCwge1xuICAgICAgICAgIGNoYW5nZVxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0cyA9IGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRNYXAuZ2V0KGNoYW5nZS5yZWZlcmVuY2Uua2V5KTtcbiAgICAgICAgaWYgKCFmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0cykge1xuICAgICAgICAgIGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRzID0gW107XG4gICAgICAgICAgZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldE1hcC5zZXQoY2hhbmdlLnJlZmVyZW5jZS5rZXksIGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRzKTtcbiAgICAgICAgfVxuICAgICAgICBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0cy5wdXNoKGNoYW5nZSk7XG4gICAgICAgIGZyb250bWF0dGVyQ2hhbmdlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0Zyb250bWF0dGVyQ2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIGlmIChoYXNGcm9udG1hdHRlckVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYENhbm5vdCBhcHBseSBmcm9udG1hdHRlciBjaGFuZ2UgaW4gJHtwYXRofSwgYmVjYXVzZSBmcm9udG1hdHRlciBwYXJzaW5nIGZhaWxlZGAsIHtcbiAgICAgICAgICBjaGFuZ2VcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKGZyb250bWF0dGVyLCBjaGFuZ2UucmVmZXJlbmNlLmtleSwgY2hhbmdlLm5ld0NvbnRlbnQpO1xuICAgICAgICBmcm9udG1hdHRlckNoYW5nZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGF3YWl0IGFwcGx5RnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHMoYWJvcnRTaWduYWwsIGZyb250bWF0dGVyLCBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0TWFwLCBwYXRoKTtcbiAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICBuZXdDb250ZW50ICs9IGNvbnRlbnQuc2xpY2UobGFzdEluZGV4KTtcbiAgaWYgKGZyb250bWF0dGVyQ2hhbmdlZCkge1xuICAgIG5ld0NvbnRlbnQgPSBzZXRGcm9udG1hdHRlcihuZXdDb250ZW50LCBmcm9udG1hdHRlcik7XG4gIH1cblxuICByZXR1cm4gbmV3Q29udGVudDtcbn1cblxuLyoqXG4gKiBBcHBsaWVzIGEgc2VyaWVzIG9mIGZpbGUgY2hhbmdlcyB0byB0aGUgc3BlY2lmaWVkIGZpbGUgb3IgcGF0aCB3aXRoaW4gdGhlIGFwcGxpY2F0aW9uLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgYXBwbGljYXRpb24gaW5zdGFuY2Ugd2hlcmUgdGhlIGZpbGUgY2hhbmdlcyB3aWxsIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gd2hpY2ggdGhlIGNoYW5nZXMgc2hvdWxkIGJlIGFwcGxpZWQuXG4gKiBAcGFyYW0gY2hhbmdlc1Byb3ZpZGVyIC0gQSBwcm92aWRlciB0aGF0IHJldHVybnMgYW4gYXJyYXkgb2YgZmlsZSBjaGFuZ2VzIHRvIGFwcGx5LlxuICogQHBhcmFtIHByb2Nlc3NPcHRpb25zIC0gT3B0aW9uYWwgb3B0aW9ucyBmb3IgcHJvY2Vzc2luZy9yZXRyeWluZyB0aGUgb3BlcmF0aW9uLlxuICogQHBhcmFtIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcyAtIFdoZXRoZXIgdG8gcmV0cnkgdGhlIG9wZXJhdGlvbiBpZiB0aGUgY2hhbmdlcyBhcmUgaW52YWxpZC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZpbGUgY2hhbmdlcyBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5IGFwcGxpZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhcHBseUZpbGVDaGFuZ2VzKFxuICBhcHA6IEFwcCxcbiAgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSxcbiAgY2hhbmdlc1Byb3ZpZGVyOiBWYWx1ZVByb3ZpZGVyPEZpbGVDaGFuZ2VbXT4sXG4gIHByb2Nlc3NPcHRpb25zOiBQcm9jZXNzT3B0aW9ucyA9IHt9LFxuICBzaG91bGRSZXRyeU9uSW52YWxpZENoYW5nZXMgPSB0cnVlXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcHJvY2VzcyhhcHAsIHBhdGhPckZpbGUsIGFzeW5jIChhYm9ydFNpZ25hbCwgY29udGVudCkgPT4ge1xuICAgIGlmIChpc0NhbnZhc0ZpbGUoYXBwLCBwYXRoT3JGaWxlKSkge1xuICAgICAgcmV0dXJuIGF3YWl0IGFwcGx5Q2FudmFzQ2hhbmdlcyhhYm9ydFNpZ25hbCwgY29udGVudCwgZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpLCBjaGFuZ2VzUHJvdmlkZXIsIHNob3VsZFJldHJ5T25JbnZhbGlkQ2hhbmdlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IGFwcGx5Q29udGVudENoYW5nZXMoYWJvcnRTaWduYWwsIGNvbnRlbnQsIGdldFBhdGgoYXBwLCBwYXRoT3JGaWxlKSwgY2hhbmdlc1Byb3ZpZGVyLCBzaG91bGRSZXRyeU9uSW52YWxpZENoYW5nZXMpO1xuICB9LCBwcm9jZXNzT3B0aW9ucyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBjYW52YXMgY2hhbmdlLlxuICpcbiAqIEBwYXJhbSBjaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGNhbnZhcyBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbnZhc0NoYW5nZShjaGFuZ2U6IEZpbGVDaGFuZ2UpOiBjaGFuZ2UgaXMgQ2FudmFzQ2hhbmdlIHtcbiAgcmV0dXJuIGlzQ2FudmFzUmVmZXJlbmNlKGNoYW5nZS5yZWZlcmVuY2UpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgY2FudmFzIGZpbGUgbm9kZSBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGNoYW5nZSAtIFRoZSBmaWxlIGNoYW5nZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZpbGUgY2hhbmdlIGlzIGEgY2FudmFzIGZpbGUgbm9kZSBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbnZhc0ZpbGVOb2RlQ2hhbmdlKGNoYW5nZTogRmlsZUNoYW5nZSk6IGNoYW5nZSBpcyBDYW52YXNGaWxlTm9kZUNoYW5nZSB7XG4gIHJldHVybiBpc0NhbnZhc0NoYW5nZShjaGFuZ2UpICYmIGNoYW5nZS5yZWZlcmVuY2UudHlwZSA9PT0gJ2ZpbGUnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgY2FudmFzIHRleHQgbm9kZSBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGNoYW5nZSAtIFRoZSBmaWxlIGNoYW5nZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGZpbGUgY2hhbmdlIGlzIGEgY2FudmFzIHRleHQgbm9kZSBjaGFuZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbnZhc1RleHROb2RlQ2hhbmdlKGNoYW5nZTogRmlsZUNoYW5nZSk6IGNoYW5nZSBpcyBDYW52YXNUZXh0Tm9kZUNoYW5nZSB7XG4gIHJldHVybiBpc0NhbnZhc0NoYW5nZShjaGFuZ2UpICYmIGNoYW5nZS5yZWZlcmVuY2UudHlwZSA9PT0gJ3RleHQnO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZpbGUgY2hhbmdlIGlzIGEgY29udGVudCBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGZpbGVDaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGNvbnRlbnQgY2hhbmdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb250ZW50Q2hhbmdlKGZpbGVDaGFuZ2U6IEZpbGVDaGFuZ2UpOiBmaWxlQ2hhbmdlIGlzIENvbnRlbnRDaGFuZ2Uge1xuICByZXR1cm4gaXNSZWZlcmVuY2VDYWNoZShmaWxlQ2hhbmdlLnJlZmVyZW5jZSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBmcm9udG1hdHRlciBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIGZpbGVDaGFuZ2UgLSBUaGUgZmlsZSBjaGFuZ2UgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBmaWxlIGNoYW5nZSBpcyBhIGZyb250bWF0dGVyIGNoYW5nZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRnJvbnRtYXR0ZXJDaGFuZ2UoZmlsZUNoYW5nZTogRmlsZUNoYW5nZSk6IGZpbGVDaGFuZ2UgaXMgRnJvbnRtYXR0ZXJDaGFuZ2Uge1xuICByZXR1cm4gaXNGcm9udG1hdHRlckxpbmtDYWNoZShmaWxlQ2hhbmdlLnJlZmVyZW5jZSk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgZmlsZSBjaGFuZ2UgaXMgYSBmcm9udG1hdHRlciBjaGFuZ2Ugd2l0aCBvZmZzZXRzLlxuICpcbiAqIEBwYXJhbSBmaWxlQ2hhbmdlIC0gVGhlIGZpbGUgY2hhbmdlIHRvIGNoZWNrLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgZmlsZSBjaGFuZ2UgaXMgYSBmcm9udG1hdHRlciBjaGFuZ2Ugd2l0aCBvZmZzZXRzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGcm9udG1hdHRlckNoYW5nZVdpdGhPZmZzZXRzKGZpbGVDaGFuZ2U6IEZpbGVDaGFuZ2UpOiBmaWxlQ2hhbmdlIGlzIEZyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMge1xuICByZXR1cm4gaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKGZpbGVDaGFuZ2UucmVmZXJlbmNlKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYXBwbHlDYW52YXNDaGFuZ2VzKFxuICBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgcGF0aDogc3RyaW5nLFxuICBjaGFuZ2VzUHJvdmlkZXI6IFZhbHVlUHJvdmlkZXI8RmlsZUNoYW5nZVtdPixcbiAgc2hvdWxkUmV0cnlPbkludmFsaWRDaGFuZ2VzID0gdHJ1ZVxuKTogUHJvbWlzZTxudWxsIHwgc3RyaW5nPiB7XG4gIGNvbnN0IGNoYW5nZXMgPSBhd2FpdCByZXNvbHZlVmFsdWUoY2hhbmdlc1Byb3ZpZGVyLCBhYm9ydFNpZ25hbCk7XG4gIGNvbnN0IGNhbnZhc0RhdGEgPSBwYXJzZUpzb25TYWZlKGNvbnRlbnQpIGFzIENhbnZhc0RhdGE7XG5cbiAgY29uc3QgY2FudmFzVGV4dENoYW5nZXMgPSBuZXcgTWFwPG51bWJlciwgQ2FudmFzVGV4dE5vZGVDaGFuZ2VbXT4oKTtcblxuICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBjaGFuZ2VzKSB7XG4gICAgaWYgKCFpc0NhbnZhc0NoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ09ubHkgY2FudmFzIGNoYW5nZXMgYXJlIHN1cHBvcnRlZCBmb3IgY2FudmFzIGZpbGVzJywge1xuICAgICAgICBjaGFuZ2UsXG4gICAgICAgIHBhdGhcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZSA9IGNhbnZhc0RhdGEubm9kZXNbY2hhbmdlLnJlZmVyZW5jZS5ub2RlSW5kZXhdO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgY29uc29sZS53YXJuKCdOb2RlIG5vdCBmb3VuZCcsIHtcbiAgICAgICAgbm9kZUluZGV4OiBjaGFuZ2UucmVmZXJlbmNlLm5vZGVJbmRleCxcbiAgICAgICAgcGF0aFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoaXNDYW52YXNGaWxlTm9kZUNoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBpZiAobm9kZS5maWxlICE9PSBjaGFuZ2Uub2xkQ29udGVudCkge1xuICAgICAgICBjb25zb2xlLndhcm4oJ0NvbnRlbnQgbWlzbWF0Y2gnLCB7XG4gICAgICAgICAgYWN0dWFsQ29udGVudDogbm9kZS5maWxlIGFzIHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICAgICBleHBlY3RlZENvbnRlbnQ6IGNoYW5nZS5vbGRDb250ZW50LFxuICAgICAgICAgIG5vZGVJbmRleDogY2hhbmdlLnJlZmVyZW5jZS5ub2RlSW5kZXgsXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICB0eXBlOiAnZmlsZSdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBub2RlLmZpbGUgPSBjaGFuZ2UubmV3Q29udGVudDtcbiAgICB9IGVsc2UgaWYgKGlzQ2FudmFzVGV4dE5vZGVDaGFuZ2UoY2hhbmdlKSkge1xuICAgICAgbGV0IGNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSA9IGNhbnZhc1RleHRDaGFuZ2VzLmdldChjaGFuZ2UucmVmZXJlbmNlLm5vZGVJbmRleCk7XG4gICAgICBpZiAoIWNhbnZhc1RleHRDaGFuZ2VzRm9yTm9kZSkge1xuICAgICAgICBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGUgPSBbXTtcbiAgICAgICAgY2FudmFzVGV4dENoYW5nZXMuc2V0KGNoYW5nZS5yZWZlcmVuY2Uubm9kZUluZGV4LCBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGUpO1xuICAgICAgfVxuXG4gICAgICBjYW52YXNUZXh0Q2hhbmdlc0Zvck5vZGUucHVzaChjaGFuZ2UpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgW25vZGVJbmRleCwgY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlXSBvZiBjYW52YXNUZXh0Q2hhbmdlcy5lbnRyaWVzKCkpIHtcbiAgICBjb25zdCBub2RlID0gY2FudmFzRGF0YS5ub2Rlc1tub2RlSW5kZXhdO1xuICAgIGlmICghbm9kZSkge1xuICAgICAgY29uc29sZS53YXJuKCdOb2RlIG5vdCBmb3VuZCcsIHtcbiAgICAgICAgbm9kZUluZGV4LFxuICAgICAgICBwYXRoXG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBub2RlLnRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ05vZGUgdGV4dCBpcyBub3QgYSBzdHJpbmcnLCB7XG4gICAgICAgIG5vZGVJbmRleCxcbiAgICAgICAgcGF0aFxuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRlbnRDaGFuZ2VzID0gY2FudmFzVGV4dENoYW5nZXNGb3JOb2RlLm1hcCgoY2hhbmdlKSA9PiByZWZlcmVuY2VUb0ZpbGVDaGFuZ2UoY2hhbmdlLnJlZmVyZW5jZS5vcmlnaW5hbFJlZmVyZW5jZSwgY2hhbmdlLm5ld0NvbnRlbnQpKTtcbiAgICBub2RlLnRleHQgPSBhd2FpdCBhcHBseUNvbnRlbnRDaGFuZ2VzKFxuICAgICAgYWJvcnRTaWduYWwsXG4gICAgICBub2RlLnRleHQsXG4gICAgICBgJHtwYXRofS5ub2RlJHtTdHJpbmcobm9kZUluZGV4KX0uVklSVFVBTF9GSUxFLm1kYCxcbiAgICAgIGNvbnRlbnRDaGFuZ2VzLFxuICAgICAgc2hvdWxkUmV0cnlPbkludmFsaWRDaGFuZ2VzXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiBKU09OLnN0cmluZ2lmeShjYW52YXNEYXRhLCBudWxsLCAnXFx0Jyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFwcGx5RnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHMoXG4gIGFib3J0U2lnbmFsOiBBYm9ydFNpZ25hbCxcbiAgZnJvbnRtYXR0ZXI6IENvbWJpbmVkRnJvbnRtYXR0ZXI8dW5rbm93bj4sXG4gIGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRNYXA6IE1hcDxzdHJpbmcsIEZyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHNbXT4sXG4gIHBhdGg6IHN0cmluZ1xuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGZvciAoY29uc3QgW2tleSwgZnJvbnRtYXR0ZXJDaGFuZ2VzV2l0aE9mZnNldHNdIG9mIGZyb250bWF0dGVyQ2hhbmdlc1dpdGhPZmZzZXRNYXAuZW50cmllcygpKSB7XG4gICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IGdldE5lc3RlZFByb3BlcnR5VmFsdWUoZnJvbnRtYXR0ZXIsIGtleSk7XG4gICAgaWYgKHR5cGVvZiBwcm9wZXJ0eVZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRlbnRDaGFuZ2VzOiBDb250ZW50Q2hhbmdlW10gPSBmcm9udG1hdHRlckNoYW5nZXNXaXRoT2Zmc2V0cy5tYXAoKGNoYW5nZSkgPT4gKHtcbiAgICAgIG5ld0NvbnRlbnQ6IGNoYW5nZS5uZXdDb250ZW50LFxuICAgICAgb2xkQ29udGVudDogY2hhbmdlLm9sZENvbnRlbnQsXG4gICAgICByZWZlcmVuY2U6IHtcbiAgICAgICAgbGluazogJycsXG4gICAgICAgIG9yaWdpbmFsOiAnJyxcbiAgICAgICAgcG9zaXRpb246IHtcbiAgICAgICAgICBlbmQ6IHtcbiAgICAgICAgICAgIGNvbDogY2hhbmdlLnJlZmVyZW5jZS5lbmRPZmZzZXQsXG4gICAgICAgICAgICBsaW5lOiAwLFxuICAgICAgICAgICAgb2Zmc2V0OiBjaGFuZ2UucmVmZXJlbmNlLmVuZE9mZnNldFxuICAgICAgICAgIH0sXG4gICAgICAgICAgc3RhcnQ6IHtcbiAgICAgICAgICAgIGNvbDogY2hhbmdlLnJlZmVyZW5jZS5zdGFydE9mZnNldCxcbiAgICAgICAgICAgIGxpbmU6IDAsXG4gICAgICAgICAgICBvZmZzZXQ6IGNoYW5nZS5yZWZlcmVuY2Uuc3RhcnRPZmZzZXRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGFzIENvbnRlbnRDaGFuZ2UpKTtcblxuICAgIGNvbnN0IG5ld1Byb3BlcnR5VmFsdWUgPSBhd2FpdCBhcHBseUNvbnRlbnRDaGFuZ2VzKGFib3J0U2lnbmFsLCBwcm9wZXJ0eVZhbHVlLCBgJHtwYXRofS5mcm9udG1hdHRlci4ke2tleX0uVklSVFVBTF9GSUxFLm1kYCwgY29udGVudENoYW5nZXMpO1xuICAgIGlmIChuZXdQcm9wZXJ0eVZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc2V0TmVzdGVkUHJvcGVydHlWYWx1ZShmcm9udG1hdHRlciwga2V5LCBuZXdQcm9wZXJ0eVZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUpzb25TYWZlKGNvbnRlbnQ6IHN0cmluZyk6IEdlbmVyaWNPYmplY3Qge1xuICBsZXQgcGFyc2VkOiB1bmtub3duO1xuICB0cnkge1xuICAgIHBhcnNlZCA9IEpTT04ucGFyc2UoY29udGVudCk7XG4gIH0gY2F0Y2gge1xuICAgIHBhcnNlZCA9IG51bGw7XG4gIH1cblxuICBpZiAocGFyc2VkID09PSBudWxsIHx8IHR5cGVvZiBwYXJzZWQgIT09ICdvYmplY3QnKSB7XG4gICAgcGFyc2VkID0ge307XG4gIH1cblxuICByZXR1cm4gcGFyc2VkIGFzIEdlbmVyaWNPYmplY3Q7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlQ2hhbmdlcyhjaGFuZ2VzOiBGaWxlQ2hhbmdlW10sIGNvbnRlbnQ6IHN0cmluZywgZnJvbnRtYXR0ZXI6IENvbWJpbmVkRnJvbnRtYXR0ZXI8dW5rbm93bj4sIHBhdGg6IHN0cmluZywgc2hvdWxkU2hvd1dhcm5pbmc6IGJvb2xlYW4pOiBib29sZWFuIHtcbiAgY29uc3QgX2RlYnVnZ2VyID0gZ2V0RGVidWdnZXIoJ3ZhbGlkYXRlQ2hhbmdlcycpO1xuICBjb25zdCBsb2dnZXIgPSBzaG91bGRTaG93V2FybmluZyA/IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpIDogX2RlYnVnZ2VyO1xuICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBjaGFuZ2VzKSB7XG4gICAgaWYgKGlzQ29udGVudENoYW5nZShjaGFuZ2UpKSB7XG4gICAgICBjb25zdCBzdGFydE9mZnNldCA9IGNoYW5nZS5yZWZlcmVuY2UucG9zaXRpb24uc3RhcnQub2Zmc2V0O1xuICAgICAgY29uc3QgZW5kT2Zmc2V0ID0gY2hhbmdlLnJlZmVyZW5jZS5wb3NpdGlvbi5lbmQub2Zmc2V0O1xuICAgICAgY29uc3QgYWN0dWFsQ29udGVudCA9IGNvbnRlbnQuc2xpY2Uoc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7XG4gICAgICBpZiAoYWN0dWFsQ29udGVudCAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgbG9nZ2VyKCdDb250ZW50IG1pc21hdGNoJywge1xuICAgICAgICAgIGFjdHVhbENvbnRlbnQsXG4gICAgICAgICAgZW5kT2Zmc2V0LFxuICAgICAgICAgIGV4cGVjdGVkQ29udGVudDogY2hhbmdlLm9sZENvbnRlbnQsXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBzdGFydE9mZnNldFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0Zyb250bWF0dGVyQ2hhbmdlV2l0aE9mZnNldHMoY2hhbmdlKSkge1xuICAgICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IGdldE5lc3RlZFByb3BlcnR5VmFsdWUoZnJvbnRtYXR0ZXIsIGNoYW5nZS5yZWZlcmVuY2Uua2V5KTtcbiAgICAgIGlmICh0eXBlb2YgcHJvcGVydHlWYWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgbG9nZ2VyKCdQcm9wZXJ0eSB2YWx1ZSBpcyBub3QgYSBzdHJpbmcnLCB7XG4gICAgICAgICAgZnJvbnRtYXR0ZXJLZXk6IGNoYW5nZS5yZWZlcmVuY2Uua2V5LFxuICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgcHJvcGVydHlWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhY3R1YWxDb250ZW50ID0gcHJvcGVydHlWYWx1ZS5zbGljZShjaGFuZ2UucmVmZXJlbmNlLnN0YXJ0T2Zmc2V0LCBjaGFuZ2UucmVmZXJlbmNlLmVuZE9mZnNldCk7XG4gICAgICBpZiAoYWN0dWFsQ29udGVudCAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgbG9nZ2VyKCdDb250ZW50IG1pc21hdGNoJywge1xuICAgICAgICAgIGFjdHVhbENvbnRlbnQsXG4gICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgICAgICBmcm9udG1hdHRlcktleTogY2hhbmdlLnJlZmVyZW5jZS5rZXksXG4gICAgICAgICAgcGF0aCxcbiAgICAgICAgICBzdGFydE9mZnNldDogY2hhbmdlLnJlZmVyZW5jZS5zdGFydE9mZnNldFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0Zyb250bWF0dGVyQ2hhbmdlKGNoYW5nZSkpIHtcbiAgICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKGZyb250bWF0dGVyLCBjaGFuZ2UucmVmZXJlbmNlLmtleSk7XG4gICAgICBpZiAoYWN0dWFsQ29udGVudCAhPT0gY2hhbmdlLm9sZENvbnRlbnQpIHtcbiAgICAgICAgbG9nZ2VyKCdDb250ZW50IG1pc21hdGNoJywge1xuICAgICAgICAgIGFjdHVhbENvbnRlbnQsXG4gICAgICAgICAgZXhwZWN0ZWRDb250ZW50OiBjaGFuZ2Uub2xkQ29udGVudCxcbiAgICAgICAgICBmcm9udG1hdHRlcktleTogY2hhbmdlLnJlZmVyZW5jZS5rZXksXG4gICAgICAgICAgcGF0aFxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBY0EsNkJBR087QUFjUCxtQkFBNEI7QUFDNUIseUJBSU87QUFDUCwyQkFBNkI7QUFDN0Isd0JBR087QUFDUCx5QkFHTztBQUNQLDZDQUFrRDtBQUNsRCx1QkFHTztBQUNQLG1CQUF3QjtBQXNDeEIsZUFBc0Isb0JBQ3BCLGFBQ0EsU0FDQSxNQUNBLGlCQUNBLDhCQUE4QixNQUNOO0FBQ3hCLGNBQVksZUFBZTtBQUMzQixNQUFJLFVBQVUsVUFBTSxtQ0FBYSxpQkFBaUIsV0FBVztBQUM3RCxNQUFJLGNBQTRDLENBQUM7QUFDakQsTUFBSSxzQkFBc0I7QUFDMUIsTUFBSTtBQUNGLHNCQUFjLHFDQUFpQixPQUFPO0FBQUEsRUFDeEMsU0FBUyxPQUFPO0FBQ2QsWUFBUSxNQUFNLElBQUksTUFBTSxpQ0FBaUMsSUFBSSxJ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
@@ -47,13 +47,14 @@ type FrontmatterChangeWithOffsets = {
47
47
  /**
48
48
  * Applies a series of content changes to the specified content.
49
49
  *
50
+ * @param abortSignal - The abort signal to control the execution of the function.
50
51
  * @param content - The content to which the changes should be applied.
51
52
  * @param path - The path to which the changes should be applied.
52
53
  * @param changesProvider - A provider that returns an array of content changes to apply.
53
54
  * @param shouldRetryOnInvalidChanges - Whether to retry the operation if the changes are invalid.
54
55
  * @returns A {@link Promise} that resolves to the updated content or to `null` if update didn't succeed.
55
56
  */
56
- export declare function applyContentChanges(content: string, path: string, changesProvider: ValueProvider<FileChange[]>, shouldRetryOnInvalidChanges?: boolean): Promise<null | string>;
57
+ export declare function applyContentChanges(abortSignal: AbortSignal, content: string, path: string, changesProvider: ValueProvider<FileChange[]>, shouldRetryOnInvalidChanges?: boolean): Promise<null | string>;
57
58
  /**
58
59
  * Applies a series of file changes to the specified file or path within the application.
59
60
  *
@@ -65,10 +65,12 @@ async function deleteAlias(app, pathOrFile, alias) {
65
65
  }
66
66
  async function processFrontmatter(app, pathOrFile, frontmatterFn, processOptions = {}) {
67
67
  const file = (0, import_FileSystem.getFile)(app, pathOrFile);
68
- await (0, import_Vault.process)(app, file, async (content) => {
68
+ await (0, import_Vault.process)(app, file, async (abortSignal, content) => {
69
+ abortSignal.throwIfAborted();
69
70
  const oldFrontmatter = (0, import_Frontmatter.parseFrontmatter)(content);
70
71
  const newFrontmatter = (0, import_Frontmatter.parseFrontmatter)(content);
71
- const result = await frontmatterFn(newFrontmatter);
72
+ const result = await frontmatterFn(newFrontmatter, abortSignal);
73
+ abortSignal.throwIfAborted();
72
74
  if (result === null) {
73
75
  return null;
74
76
  }
@@ -84,4 +86,4 @@ async function processFrontmatter(app, pathOrFile, frontmatterFn, processOptions
84
86
  deleteAlias,
85
87
  processFrontmatter
86
88
  });
87
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0ZpbGVNYW5hZ2VyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBmaWxlcyBpbiBPYnNpZGlhbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICcuLi9UeXBlLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL0Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB0eXBlIHsgUHJvY2Vzc09wdGlvbnMgfSBmcm9tICcuL1ZhdWx0LnRzJztcblxuaW1wb3J0IHsgZGVlcEVxdWFsIH0gZnJvbSAnLi4vT2JqZWN0VXRpbHMudHMnO1xuaW1wb3J0IHsgZ2V0RmlsZSB9IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQge1xuICBwYXJzZUZyb250bWF0dGVyLFxuICBzZXRGcm9udG1hdHRlclxufSBmcm9tICcuL0Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB7IHByb2Nlc3MgfSBmcm9tICcuL1ZhdWx0LnRzJztcblxuLyoqXG4gKiBBZGRzIGFuIGFsaWFzIHRvIHRoZSBmcm9udCBtYXR0ZXIgb2YgYSBnaXZlbiBmaWxlIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIFRGaWxlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5vdGUuXG4gKiBAcGFyYW0gYWxpYXMgLSBUaGUgYWxpYXMgdG8gYWRkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBhbGlhcyBoYXMgYmVlbiBhZGRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZEFsaWFzKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBhbGlhcz86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWFsaWFzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoYXBwLCBwYXRoT3JGaWxlKTtcbiAgaWYgKGFsaWFzID09PSBmaWxlLmJhc2VuYW1lKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgcHJvY2Vzc0Zyb250bWF0dGVyKGFwcCwgcGF0aE9yRmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XG4gICAgZnJvbnRtYXR0ZXIuYWxpYXNlcyA/Pz0gW107XG5cbiAgICBpZiAoIWZyb250bWF0dGVyLmFsaWFzZXMuaW5jbHVkZXMoYWxpYXMpKSB7XG4gICAgICBmcm9udG1hdHRlci5hbGlhc2VzLnB1c2goYWxpYXMpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogRGVsZXRlcyBhbiBhbGlhcyBmcm9tIHRoZSBmcm9udCBtYXR0ZXIgb2YgYSBnaXZlbiBmaWxlIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgVEZpbGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbm90ZS5cbiAqIEBwYXJhbSBhbGlhcyAtIFRoZSBhbGlhcyB0byBkZWxldGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFsaWFzIGhhcyBiZWVuIGRlbGV0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVBbGlhcyhhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSwgYWxpYXM/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFhbGlhcykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IHByb2Nlc3NGcm9udG1hdHRlcihhcHAsIHBhdGhPckZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xuICAgIGlmICghZnJvbnRtYXR0ZXIuYWxpYXNlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZyb250bWF0dGVyLmFsaWFzZXMgPSBmcm9udG1hdHRlci5hbGlhc2VzLmZpbHRlcigoYSkgPT4gYSAhPT0gYWxpYXMpO1xuXG4gICAgaWYgKGZyb250bWF0dGVyLmFsaWFzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBkZWxldGUgZnJvbnRtYXR0ZXIuYWxpYXNlcztcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgZnJvbnQgbWF0dGVyIG9mIGEgZ2l2ZW4gZmlsZSwgYWxsb3dpbmcgbW9kaWZpY2F0aW9ucyB2aWEgYSBwcm92aWRlZCBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIEN1c3RvbUZyb250bWF0dGVyIC0gVGhlIHR5cGUgb2YgY3VzdG9tIGZyb250IG1hdHRlci5cbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBURmlsZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBub3RlLlxuICogQHBhcmFtIGZyb250bWF0dGVyRm4gLSBBIGZ1bmN0aW9uIHRoYXQgbW9kaWZpZXMgdGhlIGZyb250IG1hdHRlci5cbiAqIEBwYXJhbSBwcm9jZXNzT3B0aW9ucyAtIE9wdGlvbmFsLiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHJldHJ5aW5nIHRoZSBwcm9jZXNzLiBJZiBub3QgcHJvdmlkZWQsIGRlZmF1bHQgb3B0aW9ucyB3aWxsIGJlIHVzZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZyb250IG1hdHRlciBoYXMgYmVlbiBwcm9jZXNzZWQgYW5kIHNhdmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4oXG4gIGFwcDogQXBwLFxuICBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLFxuICBmcm9udG1hdHRlckZuOiAoZnJvbnRtYXR0ZXI6IENvbWJpbmVkRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXI+KSA9PiBQcm9taXNhYmxlPE1heWJlUmV0dXJuPG51bGw+PixcbiAgcHJvY2Vzc09wdGlvbnM6IFByb2Nlc3NPcHRpb25zID0ge31cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZShhcHAsIHBhdGhPckZpbGUpO1xuXG4gIGF3YWl0IHByb2Nlc3MoYXBwLCBmaWxlLCBhc3luYyAoY29udGVudCkgPT4ge1xuICAgIGNvbnN0IG9sZEZyb250bWF0dGVyID0gcGFyc2VGcm9udG1hdHRlcjxDdXN0b21Gcm9udG1hdHRlcj4oY29udGVudCk7XG4gICAgY29uc3QgbmV3RnJvbnRtYXR0ZXIgPSBwYXJzZUZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPihjb250ZW50KTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBmcm9udG1hdHRlckZuKG5ld0Zyb250bWF0dGVyKTtcbiAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVlcEVxdWFsKG9sZEZyb250bWF0dGVyLCBuZXdGcm9udG1hdHRlcikpIHtcbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cblxuICAgIHJldHVybiBzZXRGcm9udG1hdHRlcihjb250ZW50LCBuZXdGcm9udG1hdHRlcik7XG4gIH0sIHByb2Nlc3NPcHRpb25zKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWNBLHlCQUEwQjtBQUMxQix3QkFBd0I7QUFDeEIseUJBR087QUFDUCxtQkFBd0I7QUFVeEIsZUFBc0IsU0FBUyxLQUFVLFlBQXdCLE9BQStCO0FBQzlGLE1BQUksQ0FBQyxPQUFPO0FBQ1Y7QUFBQSxFQUNGO0FBRUEsUUFBTSxXQUFPLDJCQUFRLEtBQUssVUFBVTtBQUNwQyxNQUFJLFVBQVUsS0FBSyxVQUFVO0FBQzNCO0FBQUEsRUFDRjtBQUVBLFFBQU0sbUJBQW1CLEtBQUssWUFBWSxDQUFDLGdCQUFnQjtBQUN6RCxnQkFBWSxZQUFZLENBQUM7QUFFekIsUUFBSSxDQUFDLFlBQVksUUFBUSxTQUFTLEtBQUssR0FBRztBQUN4QyxrQkFBWSxRQUFRLEtBQUssS0FBSztBQUFBLElBQ2hDO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFVQSxlQUFzQixZQUFZLEtBQVUsWUFBd0IsT0FBK0I7QUFDakcsTUFBSSxDQUFDLE9BQU87QUFDVjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLG1CQUFtQixLQUFLLFlBQVksQ0FBQyxnQkFBZ0I7QUFDekQsUUFBSSxDQUFDLFlBQVksU0FBUztBQUN4QjtBQUFBLElBQ0Y7QUFFQSxnQkFBWSxVQUFVLFlBQVksUUFBUSxPQUFPLENBQUMsTUFBTSxNQUFNLEtBQUs7QUFFbkUsUUFBSSxZQUFZLFFBQVEsV0FBVyxHQUFHO0FBQ3BDLGFBQU8sWUFBWTtBQUFBLElBQ3JCO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFZQSxlQUFzQixtQkFDcEIsS0FDQSxZQUNBLGVBQ0EsaUJBQWlDLENBQUMsR0FDbkI7QUFDZixRQUFNLFdBQU8sMkJBQVEsS0FBSyxVQUFVO0FBRXBDLFlBQU0sc0JBQVEsS0FBSyxNQUFNLE9BQU8sWUFBWTtBQUMxQyxVQUFNLHFCQUFpQixxQ0FBb0MsT0FBTztBQUNsRSxVQUFNLHFCQUFpQixxQ0FBb0MsT0FBTztBQUNsRSxVQUFNLFNBQVMsTUFBTSxjQUFjLGNBQWM7QUFDakQsUUFBSSxXQUFXLE1BQU07QUFDbkIsYUFBTztBQUFBLElBQ1Q7QUFFQSxZQUFJLDhCQUFVLGdCQUFnQixjQUFjLEdBQUc7QUFDN0MsYUFBTztBQUFBLElBQ1Q7QUFFQSxlQUFPLG1DQUFlLFNBQVMsY0FBYztBQUFBLEVBQy9DLEdBQUcsY0FBYztBQUNuQjsiLAogICJuYW1lcyI6IFtdCn0K
89
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL29ic2lkaWFuL0ZpbGVNYW5hZ2VyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBmaWxlcyBpbiBPYnNpZGlhbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IEFwcCB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICcuLi9UeXBlLnRzJztcbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL0Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB0eXBlIHsgUHJvY2Vzc09wdGlvbnMgfSBmcm9tICcuL1ZhdWx0LnRzJztcblxuaW1wb3J0IHsgZGVlcEVxdWFsIH0gZnJvbSAnLi4vT2JqZWN0VXRpbHMudHMnO1xuaW1wb3J0IHsgZ2V0RmlsZSB9IGZyb20gJy4vRmlsZVN5c3RlbS50cyc7XG5pbXBvcnQge1xuICBwYXJzZUZyb250bWF0dGVyLFxuICBzZXRGcm9udG1hdHRlclxufSBmcm9tICcuL0Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB7IHByb2Nlc3MgfSBmcm9tICcuL1ZhdWx0LnRzJztcblxuLyoqXG4gKiBBZGRzIGFuIGFsaWFzIHRvIHRoZSBmcm9udCBtYXR0ZXIgb2YgYSBnaXZlbiBmaWxlIGlmIGl0IGRvZXMgbm90IGFscmVhZHkgZXhpc3QuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIFRGaWxlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIG5vdGUuXG4gKiBAcGFyYW0gYWxpYXMgLSBUaGUgYWxpYXMgdG8gYWRkLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBhbGlhcyBoYXMgYmVlbiBhZGRlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFkZEFsaWFzKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLCBhbGlhcz86IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIWFsaWFzKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoYXBwLCBwYXRoT3JGaWxlKTtcbiAgaWYgKGFsaWFzID09PSBmaWxlLmJhc2VuYW1lKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgYXdhaXQgcHJvY2Vzc0Zyb250bWF0dGVyKGFwcCwgcGF0aE9yRmlsZSwgKGZyb250bWF0dGVyKSA9PiB7XG4gICAgZnJvbnRtYXR0ZXIuYWxpYXNlcyA/Pz0gW107XG5cbiAgICBpZiAoIWZyb250bWF0dGVyLmFsaWFzZXMuaW5jbHVkZXMoYWxpYXMpKSB7XG4gICAgICBmcm9udG1hdHRlci5hbGlhc2VzLnB1c2goYWxpYXMpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogRGVsZXRlcyBhbiBhbGlhcyBmcm9tIHRoZSBmcm9udCBtYXR0ZXIgb2YgYSBnaXZlbiBmaWxlIGlmIGl0IGV4aXN0cy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgVEZpbGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgbm90ZS5cbiAqIEBwYXJhbSBhbGlhcyAtIFRoZSBhbGlhcyB0byBkZWxldGUuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGFsaWFzIGhhcyBiZWVuIGRlbGV0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVBbGlhcyhhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSwgYWxpYXM/OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFhbGlhcykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGF3YWl0IHByb2Nlc3NGcm9udG1hdHRlcihhcHAsIHBhdGhPckZpbGUsIChmcm9udG1hdHRlcikgPT4ge1xuICAgIGlmICghZnJvbnRtYXR0ZXIuYWxpYXNlcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZyb250bWF0dGVyLmFsaWFzZXMgPSBmcm9udG1hdHRlci5hbGlhc2VzLmZpbHRlcigoYSkgPT4gYSAhPT0gYWxpYXMpO1xuXG4gICAgaWYgKGZyb250bWF0dGVyLmFsaWFzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBkZWxldGUgZnJvbnRtYXR0ZXIuYWxpYXNlcztcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFByb2Nlc3NlcyB0aGUgZnJvbnQgbWF0dGVyIG9mIGEgZ2l2ZW4gZmlsZSwgYWxsb3dpbmcgbW9kaWZpY2F0aW9ucyB2aWEgYSBwcm92aWRlZCBmdW5jdGlvbi5cbiAqXG4gKiBAdHlwZVBhcmFtIEN1c3RvbUZyb250bWF0dGVyIC0gVGhlIHR5cGUgb2YgY3VzdG9tIGZyb250IG1hdHRlci5cbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBURmlsZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBub3RlLlxuICogQHBhcmFtIGZyb250bWF0dGVyRm4gLSBBIGZ1bmN0aW9uIHRoYXQgbW9kaWZpZXMgdGhlIGZyb250IG1hdHRlci5cbiAqIEBwYXJhbSBwcm9jZXNzT3B0aW9ucyAtIE9wdGlvbmFsLiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHJldHJ5aW5nIHRoZSBwcm9jZXNzLiBJZiBub3QgcHJvdmlkZWQsIGRlZmF1bHQgb3B0aW9ucyB3aWxsIGJlIHVzZWQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGZyb250IG1hdHRlciBoYXMgYmVlbiBwcm9jZXNzZWQgYW5kIHNhdmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4oXG4gIGFwcDogQXBwLFxuICBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlLFxuICBmcm9udG1hdHRlckZuOiAoZnJvbnRtYXR0ZXI6IENvbWJpbmVkRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXI+LCBhYm9ydFNpZ25hbDogQWJvcnRTaWduYWwpID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48bnVsbD4+LFxuICBwcm9jZXNzT3B0aW9uczogUHJvY2Vzc09wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKGFwcCwgcGF0aE9yRmlsZSk7XG5cbiAgYXdhaXQgcHJvY2VzcyhhcHAsIGZpbGUsIGFzeW5jIChhYm9ydFNpZ25hbCwgY29udGVudCkgPT4ge1xuICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBjb25zdCBvbGRGcm9udG1hdHRlciA9IHBhcnNlRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXI+KGNvbnRlbnQpO1xuICAgIGNvbnN0IG5ld0Zyb250bWF0dGVyID0gcGFyc2VGcm9udG1hdHRlcjxDdXN0b21Gcm9udG1hdHRlcj4oY29udGVudCk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZnJvbnRtYXR0ZXJGbihuZXdGcm9udG1hdHRlciwgYWJvcnRTaWduYWwpO1xuICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICBpZiAocmVzdWx0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoZGVlcEVxdWFsKG9sZEZyb250bWF0dGVyLCBuZXdGcm9udG1hdHRlcikpIHtcbiAgICAgIHJldHVybiBjb250ZW50O1xuICAgIH1cblxuICAgIHJldHVybiBzZXRGcm9udG1hdHRlcihjb250ZW50LCBuZXdGcm9udG1hdHRlcik7XG4gIH0sIHByb2Nlc3NPcHRpb25zKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQWNBLHlCQUEwQjtBQUMxQix3QkFBd0I7QUFDeEIseUJBR087QUFDUCxtQkFBd0I7QUFVeEIsZUFBc0IsU0FBUyxLQUFVLFlBQXdCLE9BQStCO0FBQzlGLE1BQUksQ0FBQyxPQUFPO0FBQ1Y7QUFBQSxFQUNGO0FBRUEsUUFBTSxXQUFPLDJCQUFRLEtBQUssVUFBVTtBQUNwQyxNQUFJLFVBQVUsS0FBSyxVQUFVO0FBQzNCO0FBQUEsRUFDRjtBQUVBLFFBQU0sbUJBQW1CLEtBQUssWUFBWSxDQUFDLGdCQUFnQjtBQUN6RCxnQkFBWSxZQUFZLENBQUM7QUFFekIsUUFBSSxDQUFDLFlBQVksUUFBUSxTQUFTLEtBQUssR0FBRztBQUN4QyxrQkFBWSxRQUFRLEtBQUssS0FBSztBQUFBLElBQ2hDO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFVQSxlQUFzQixZQUFZLEtBQVUsWUFBd0IsT0FBK0I7QUFDakcsTUFBSSxDQUFDLE9BQU87QUFDVjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLG1CQUFtQixLQUFLLFlBQVksQ0FBQyxnQkFBZ0I7QUFDekQsUUFBSSxDQUFDLFlBQVksU0FBUztBQUN4QjtBQUFBLElBQ0Y7QUFFQSxnQkFBWSxVQUFVLFlBQVksUUFBUSxPQUFPLENBQUMsTUFBTSxNQUFNLEtBQUs7QUFFbkUsUUFBSSxZQUFZLFFBQVEsV0FBVyxHQUFHO0FBQ3BDLGFBQU8sWUFBWTtBQUFBLElBQ3JCO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFZQSxlQUFzQixtQkFDcEIsS0FDQSxZQUNBLGVBQ0EsaUJBQWlDLENBQUMsR0FDbkI7QUFDZixRQUFNLFdBQU8sMkJBQVEsS0FBSyxVQUFVO0FBRXBDLFlBQU0sc0JBQVEsS0FBSyxNQUFNLE9BQU8sYUFBYSxZQUFZO0FBQ3ZELGdCQUFZLGVBQWU7QUFFM0IsVUFBTSxxQkFBaUIscUNBQW9DLE9BQU87QUFDbEUsVUFBTSxxQkFBaUIscUNBQW9DLE9BQU87QUFDbEUsVUFBTSxTQUFTLE1BQU0sY0FBYyxnQkFBZ0IsV0FBVztBQUM5RCxnQkFBWSxlQUFlO0FBRTNCLFFBQUksV0FBVyxNQUFNO0FBQ25CLGFBQU87QUFBQSxJQUNUO0FBRUEsWUFBSSw4QkFBVSxnQkFBZ0IsY0FBYyxHQUFHO0FBQzdDLGFBQU87QUFBQSxJQUNUO0FBRUEsZUFBTyxtQ0FBZSxTQUFTLGNBQWM7QUFBQSxFQUMvQyxHQUFHLGNBQWM7QUFDbkI7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -37,4 +37,4 @@ export declare function deleteAlias(app: App, pathOrFile: PathOrFile, alias?: st
37
37
  * @param processOptions - Optional. Configuration options for retrying the process. If not provided, default options will be used.
38
38
  * @returns A {@link Promise} that resolves when the front matter has been processed and saved.
39
39
  */
40
- export declare function processFrontmatter<CustomFrontmatter = unknown>(app: App, pathOrFile: PathOrFile, frontmatterFn: (frontmatter: CombinedFrontmatter<CustomFrontmatter>) => Promisable<MaybeReturn<null>>, processOptions?: ProcessOptions): Promise<void>;
40
+ export declare function processFrontmatter<CustomFrontmatter = unknown>(app: App, pathOrFile: PathOrFile, frontmatterFn: (frontmatter: CombinedFrontmatter<CustomFrontmatter>, abortSignal: AbortSignal) => Promisable<MaybeReturn<null>>, processOptions?: ProcessOptions): Promise<void>;