obsidian-dev-utils
Version:
This is the collection of useful functions that you can use for your Obsidian plugin development
182 lines (168 loc) • 14.5 kB
JavaScript
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
(function initCjs() {
const globalThisRecord = globalThis;
globalThisRecord['__name'] ??= name;
const originalRequire = require;
if (originalRequire && !originalRequire.__isPatched) {
// eslint-disable-next-line no-global-assign, no-implicit-globals -- We need to patch the `require()` function.
require = Object.assign(
(id) => requirePatched(id),
originalRequire,
{
__isPatched: true
}
);
}
const newFuncs = {
__extractDefault() {
return extractDefault;
},
process() {
const browserProcess = {
browser: true,
cwd() {
return '/';
},
env: {},
platform: 'android'
};
return browserProcess;
}
};
for (const key of Object.keys(newFuncs)) {
globalThisRecord[key] ??= newFuncs[key]?.();
}
function name(obj) {
return obj;
}
function extractDefault(module) {
return module && module.__esModule && 'default' in module ? module.default : module;
}
const OBSIDIAN_BUILT_IN_MODULE_NAMES = [
'obsidian',
'@codemirror/autocomplete',
'@codemirror/collab',
'@codemirror/commands',
'@codemirror/language',
'@codemirror/lint',
'@codemirror/search',
'@codemirror/state',
'@codemirror/text',
'@codemirror/view',
'@lezer/common',
'@lezer/lr',
'@lezer/highlight'];
const DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES = [
'@codemirror/closebrackets',
'@codemirror/comment',
'@codemirror/fold',
'@codemirror/gutter',
'@codemirror/highlight',
'@codemirror/history',
'@codemirror/matchbrackets',
'@codemirror/panel',
'@codemirror/rangeset',
'@codemirror/rectangular-selection',
'@codemirror/stream-parser',
'@codemirror/tooltip'];
function requirePatched(id) {
if (OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id) || DEPRECATED_OBSIDIAN_BUILT_IN_MODULE_NAMES.includes(id)) {
return originalRequire?.(id);
}
// eslint-disable-next-line @typescript-eslint/no-deprecated, @typescript-eslint/no-unnecessary-condition -- We need access to app here which might not be available yet.
if (globalThis?.app?.isMobile) {
if (id === 'process' || id === 'node:process') {
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Fake process object is returned instead.`);
return globalThis.process;
}
} else {
const module = originalRequire?.(id);
if (module) {
return extractDefault(module);
}
}
console.debug(`The most likely you can safely ignore this error. Module not found: ${id}. Empty object is returned instead.`);
return {};
}
})();
;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var Fs_exports = {};
__export(Fs_exports, {
readdirPosix: () => readdirPosix
});
module.exports = __toCommonJS(Fs_exports);
var import_Path = require('../Path.cjs');
var import_NodeModules = require('./NodeModules.cjs');
async function readdirPosix(path, options = {}) {
if (isStringResultOptions(options)) {
const paths = await (0, import_NodeModules.readdir)(path, options);
return paths.map(import_Path.toPosixPath);
}
if (isBufferResultOptions(options)) {
const buffers = await (0, import_NodeModules.readdir)(path, options);
return buffers.map(import_Path.toPosixBuffer);
}
const dirents = await (0, import_NodeModules.readdir)(path, options);
for (const dirent of dirents) {
dirent.name = (0, import_Path.toPosixPath)(dirent.name);
dirent.parentPath = (0, import_Path.toPosixPath)(dirent.parentPath);
}
return dirents;
}
function isBufferResultOptions(options) {
if (options === void 0) {
return false;
}
if (options === "buffer") {
return true;
}
const commonOptions = options;
if (commonOptions.withFileTypes === true) {
return false;
}
if (commonOptions.encoding !== "buffer") {
return false;
}
return true;
}
function isStringResultOptions(options) {
if (options === void 0) {
return true;
}
if (options === "buffer") {
return false;
}
const commonOptions = options;
if (commonOptions.encoding === "buffer") {
return false;
}
if (commonOptions.withFileTypes === true) {
return false;
}
return true;
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
readdirPosix
});
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL1NjcmlwdFV0aWxzL0ZzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLlxuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgRGlyZW50LFxuICBPYmplY3RFbmNvZGluZ09wdGlvbnMsXG4gIFBhdGhMaWtlXG59IGZyb20gJy4vTm9kZU1vZHVsZXMudHMnO1xuXG5pbXBvcnQge1xuICB0b1Bvc2l4QnVmZmVyLFxuICB0b1Bvc2l4UGF0aFxufSBmcm9tICcuLi9QYXRoLnRzJztcbmltcG9ydCB7IHJlYWRkaXIgfSBmcm9tICcuL05vZGVNb2R1bGVzLnRzJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciBjb250cm9sbGluZyB0aGUgZm9ybWF0IG9mIHRoZSByZXN1bHQgd2hlbiByZXR1cm5pbmcgYnVmZmVycy5cbiAqXG4gKiBgZGlyZWN0b3J5YCBpcyB1c2VkIGluc3RlYWQgb2YgYGZvbGRlcmAgdG8gcHJlc2VydmUgY29tcGF0aWJpbGl0eSB3aXRoIGBub2RlOmZzYCBtb2R1bGUuXG4gKi9cbmV4cG9ydCB0eXBlIEJ1ZmZlclJlc3VsdE9wdGlvbnMgPSAnYnVmZmVyJyB8IHtcbiAgLyoqXG4gICAqIFNob3VsZCBiZSBzZXQgdG8gXCJidWZmZXJcIiB0byByZXR1cm4gYnVmZmVycy5cbiAgICovXG4gIGVuY29kaW5nOiAnYnVmZmVyJztcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHN1YmRpcmVjdG9yaWVzIHdoZW4gcmVhZGluZyB0aGUgZGlyZWN0b3J5LiBJZiBub3QgcHJvdmlkZWQsIGRlZmF1bHRzIHRvIGBmYWxzZWAuXG4gICAqL1xuICByZWN1cnNpdmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTaG91bGQgYmUgc2V0IHRvIGBmYWxzZWAgdG8gcmV0dXJuIGJ1ZmZlcnMuXG4gICAqL1xuICB3aXRoRmlsZVR5cGVzPzogZmFsc2U7XG59O1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGNvbnRyb2xsaW5nIHRoZSBmb3JtYXQgb2YgdGhlIHJlc3VsdCB3aGVuIHJldHVybmluZyBEaXJlbnQgb2JqZWN0cy5cbiAqL1xuZXhwb3J0IHR5cGUgRGlyZW50UmVzdWx0T3B0aW9ucyA9IHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSBzdWJkaXJlY3RvcmllcyB3aGVuIHJlYWRpbmcgdGhlIGRpcmVjdG9yeS4gSWYgbm90IHByb3ZpZGVkLCBkZWZhdWx0cyB0byBgZmFsc2VgLlxuICAgKi9cbiAgcmVjdXJzaXZlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2hvdWxkIGJlIHNldCB0byBgdHJ1ZWAgdG8gcmV0dXJuIERpcmVudCBvYmplY3RzLlxuICAgKi9cbiAgd2l0aEZpbGVUeXBlczogdHJ1ZTtcbn0gJiBPYmplY3RFbmNvZGluZ09wdGlvbnM7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgY29udHJvbGxpbmcgdGhlIGZvcm1hdCBvZiB0aGUgcmVzdWx0IHdoZW4gcmV0dXJuaW5nIHN0cmluZ3MuXG4gKi9cbmV4cG9ydCB0eXBlIFN0cmluZ1Jlc3VsdE9wdGlvbnMgPVxuICB8IHtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgc3ViZGlyZWN0b3JpZXMgd2hlbiByZWFkaW5nIHRoZSBkaXJlY3RvcnkuIElmIG5vdCBwcm92aWRlZCwgZGVmYXVsdHMgdG8gYGZhbHNlYC5cbiAgICAgKi9cbiAgICByZWN1cnNpdmU/OiBib29sZWFuO1xuXG4gICAgLyoqXG4gICAgICogU2hvdWxkIGJlIHNldCB0byBgZmFsc2VgIHRvIHJldHVybiBzdHJpbmdzLlxuICAgICAqL1xuICAgIHdpdGhGaWxlVHlwZXM/OiBmYWxzZTtcbiAgfSAmIE9iamVjdEVuY29kaW5nT3B0aW9uc1xuICB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBDb21tb24gb3B0aW9ucyBmb3IgY29udHJvbGxpbmcgdGhlIGZvcm1hdCBvZiB0aGUgcmVzdWx0LlxuICovXG5pbnRlcmZhY2UgQ29tbW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBFbmNvZGluZyB0byB1c2Ugd2hlbiByZXR1cm5pbmcgc3RyaW5ncy5cbiAgICovXG4gIGVuY29kaW5nPzogJ2J1ZmZlcicgfCBOb2RlSlMuQnVmZmVyRW5jb2Rpbmc7XG5cbiAgLyoqXG4gICAqIFNldCBgdHJ1ZWAgdG8gcmV0dXJuIERpcmVudCBvYmplY3RzIG9yIGBmYWxzZWAgdG8gcmV0dXJuIHN0cmluZ3Mgb3IgYnVmZmVycy5cbiAgICovXG4gIHdpdGhGaWxlVHlwZXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBjb250ZW50cyBvZiBhIGRpcmVjdG9yeSBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBzdHJpbmdzIHdpdGggUE9TSVggcGF0aHMuXG4gKlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5LlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbnRyb2wgdGhlIGZvcm1hdCBvZiB0aGUgcmVzdWx0LiBJZiBub3QgcHJvdmlkZWQsIHJldHVybnMgc3RyaW5ncy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2l0aCBhbiBhcnJheSBvZiBQT1NJWC1mb3JtYXR0ZWQgZmlsZSBwYXRocy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRkaXJQb3NpeChwYXRoOiBQYXRoTGlrZSwgb3B0aW9ucz86IFN0cmluZ1Jlc3VsdE9wdGlvbnMpOiBQcm9taXNlPHN0cmluZ1tdPjtcblxuLyoqXG4gKiBSZWFkcyB0aGUgY29udGVudHMgb2YgYSBkaXJlY3RvcnkgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgYnVmZmVycyB3aXRoIFBPU0lYIHBhdGhzLlxuICpcbiAqIEBwYXJhbSBwYXRoIC0gVGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBjb250cm9sIHRoZSBmb3JtYXQgb2YgdGhlIHJlc3VsdC4gU3BlY2lmeSBcImJ1ZmZlclwiIHRvIHJldHVybiBidWZmZXJzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGFuIGFycmF5IG9mIFBPU0lYLWZvcm1hdHRlZCBidWZmZXJzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZGRpclBvc2l4KHBhdGg6IFBhdGhMaWtlLCBvcHRpb25zOiBCdWZmZXJSZXN1bHRPcHRpb25zKTogUHJvbWlzZTxCdWZmZXJbXT47XG5cbi8qKlxuICogUmVhZHMgdGhlIGNvbnRlbnRzIG9mIGEgZGlyZWN0b3J5IGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIERpcmVudCBvYmplY3RzIHdpdGggUE9TSVggcGF0aHMuXG4gKlxuICogQHBhcmFtIHBhdGggLSBUaGUgcGF0aCB0byB0aGUgZGlyZWN0b3J5LlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIHRvIGNvbnRyb2wgdGhlIGZvcm1hdCBvZiB0aGUgcmVzdWx0LiBTcGVjaWZ5IGB3aXRoRmlsZVR5cGVzOiB0cnVlYCB0byByZXR1cm4gRGlyZW50IG9iamVjdHMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgUE9TSVgtZm9ybWF0dGVkIERpcmVudCBvYmplY3RzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZGRpclBvc2l4KHBhdGg6IFBhdGhMaWtlLCBvcHRpb25zOiBEaXJlbnRSZXN1bHRPcHRpb25zKTogUHJvbWlzZTxEaXJlbnRbXT47XG5cbi8qKlxuICogUmVhZHMgdGhlIGNvbnRlbnRzIG9mIGEgZGlyZWN0b3J5IGFuZCBjb252ZXJ0cyBmaWxlIHBhdGhzIG9yIGJ1ZmZlciByZXN1bHRzIHRvIFBPU0lYIGZvcm1hdC5cbiAqXG4gKiBAcGFyYW0gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBkaXJlY3RvcnkuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIE9wdGlvbnMgdG8gY29udHJvbCB0aGUgZm9ybWF0IG9mIHRoZSByZXN1bHQuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2YgUE9TSVgtZm9ybWF0dGVkIGZpbGUgcGF0aHMsIGJ1ZmZlcnMsIG9yIERpcmVudCBvYmplY3RzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZGRpclBvc2l4KFxuICBwYXRoOiBQYXRoTGlrZSxcbiAgb3B0aW9uczogQnVmZmVyUmVzdWx0T3B0aW9ucyB8IERpcmVudFJlc3VsdE9wdGlvbnMgfCBTdHJpbmdSZXN1bHRPcHRpb25zID0ge31cbik6IFByb21pc2U8QnVmZmVyW10gfCBEaXJlbnRbXSB8IHN0cmluZ1tdPiB7XG4gIGlmIChpc1N0cmluZ1Jlc3VsdE9wdGlvbnMob3B0aW9ucykpIHtcbiAgICBjb25zdCBwYXRocyA9IGF3YWl0IHJlYWRkaXIocGF0aCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHBhdGhzLm1hcCh0b1Bvc2l4UGF0aCk7XG4gIH1cblxuICBpZiAoaXNCdWZmZXJSZXN1bHRPcHRpb25zKG9wdGlvbnMpKSB7XG4gICAgY29uc3QgYnVmZmVycyA9IGF3YWl0IHJlYWRkaXIocGF0aCwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGJ1ZmZlcnMubWFwKHRvUG9zaXhCdWZmZXIpO1xuICB9XG5cbiAgY29uc3QgZGlyZW50cyA9IGF3YWl0IHJlYWRkaXIocGF0aCwgb3B0aW9ucyk7XG4gIGZvciAoY29uc3QgZGlyZW50IG9mIGRpcmVudHMpIHtcbiAgICBkaXJlbnQubmFtZSA9IHRvUG9zaXhQYXRoKGRpcmVudC5uYW1lKTtcbiAgICBkaXJlbnQucGFyZW50UGF0aCA9IHRvUG9zaXhQYXRoKGRpcmVudC5wYXJlbnRQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBkaXJlbnRzO1xufVxuXG4vKipcbiAqIFR5cGUgZ3VhcmQgdG8gY2hlY2sgaWYgdGhlIG9wdGlvbnMgYXJlIGZvciByZXR1cm5pbmcgYnVmZmVycy5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBvcHRpb25zIGFyZSBmb3IgcmV0dXJuaW5nIGJ1ZmZlcnMsIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0J1ZmZlclJlc3VsdE9wdGlvbnMob3B0aW9uczogQnVmZmVyUmVzdWx0T3B0aW9ucyB8IERpcmVudFJlc3VsdE9wdGlvbnMgfCBTdHJpbmdSZXN1bHRPcHRpb25zKTogb3B0aW9ucyBpcyBCdWZmZXJSZXN1bHRPcHRpb25zIHtcbiAgaWYgKG9wdGlvbnMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChvcHRpb25zID09PSAnYnVmZmVyJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgY29tbW9uT3B0aW9ucyA9IG9wdGlvbnMgYXMgQ29tbW9uT3B0aW9ucztcblxuICBpZiAoY29tbW9uT3B0aW9ucy53aXRoRmlsZVR5cGVzID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKGNvbW1vbk9wdGlvbnMuZW5jb2RpbmcgIT09ICdidWZmZXInKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogVHlwZSBndWFyZCB0byBjaGVjayBpZiB0aGUgb3B0aW9ucyBhcmUgZm9yIHJldHVybmluZyBzdHJpbmdzLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIG9wdGlvbnMgYXJlIGZvciByZXR1cm5pbmcgc3RyaW5ncywgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gKi9cbmZ1bmN0aW9uIGlzU3RyaW5nUmVzdWx0T3B0aW9ucyhvcHRpb25zOiBCdWZmZXJSZXN1bHRPcHRpb25zIHwgRGlyZW50UmVzdWx0T3B0aW9ucyB8IFN0cmluZ1Jlc3VsdE9wdGlvbnMpOiBvcHRpb25zIGlzIFN0cmluZ1Jlc3VsdE9wdGlvbnMge1xuICBpZiAob3B0aW9ucyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBpZiAob3B0aW9ucyA9PT0gJ2J1ZmZlcicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBjb21tb25PcHRpb25zID0gb3B0aW9ucyBhcyBDb21tb25PcHRpb25zO1xuXG4gIGlmIChjb21tb25PcHRpb25zLmVuY29kaW5nID09PSAnYnVmZmVyJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChjb21tb25PcHRpb25zLndpdGhGaWxlVHlwZXMgPT09IHRydWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBWUEsa0JBR087QUFDUCx5QkFBd0I7QUF5R3hCLGVBQXNCLGFBQ3BCLE1BQ0EsVUFBMkUsQ0FBQyxHQUNuQztBQUN6QyxNQUFJLHNCQUFzQixPQUFPLEdBQUc7QUFDbEMsVUFBTSxRQUFRLFVBQU0sNEJBQVEsTUFBTSxPQUFPO0FBQ3pDLFdBQU8sTUFBTSxJQUFJLHVCQUFXO0FBQUEsRUFDOUI7QUFFQSxNQUFJLHNCQUFzQixPQUFPLEdBQUc7QUFDbEMsVUFBTSxVQUFVLFVBQU0sNEJBQVEsTUFBTSxPQUFPO0FBQzNDLFdBQU8sUUFBUSxJQUFJLHlCQUFhO0FBQUEsRUFDbEM7QUFFQSxRQUFNLFVBQVUsVUFBTSw0QkFBUSxNQUFNLE9BQU87QUFDM0MsYUFBVyxVQUFVLFNBQVM7QUFDNUIsV0FBTyxXQUFPLHlCQUFZLE9BQU8sSUFBSTtBQUNyQyxXQUFPLGlCQUFhLHlCQUFZLE9BQU8sVUFBVTtBQUFBLEVBQ25EO0FBRUEsU0FBTztBQUNUO0FBUUEsU0FBUyxzQkFBc0IsU0FBMEc7QUFDdkksTUFBSSxZQUFZLFFBQVc7QUFDekIsV0FBTztBQUFBLEVBQ1Q7QUFFQSxNQUFJLFlBQVksVUFBVTtBQUN4QixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sZ0JBQWdCO0FBRXRCLE1BQUksY0FBYyxrQkFBa0IsTUFBTTtBQUN4QyxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksY0FBYyxhQUFhLFVBQVU7QUFDdkMsV0FBTztBQUFBLEVBQ1Q7QUFFQSxTQUFPO0FBQ1Q7QUFRQSxTQUFTLHNCQUFzQixTQUEwRztBQUN2SSxNQUFJLFlBQVksUUFBVztBQUN6QixXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksWUFBWSxVQUFVO0FBQ3hCLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxnQkFBZ0I7QUFFdEIsTUFBSSxjQUFjLGFBQWEsVUFBVTtBQUN2QyxXQUFPO0FBQUEsRUFDVDtBQUVBLE1BQUksY0FBYyxrQkFBa0IsTUFBTTtBQUN4QyxXQUFPO0FBQUEsRUFDVDtBQUVBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K