@mnaoumov/obsidian-lib 3.1.0 → 3.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cjs/__merged.cjs +30 -4
- package/dist/lib/cjs/__merged.d.cts +2 -2
- package/dist/lib/cjs/attachment-path.cjs +6 -6
- package/dist/lib/cjs/components/settings-migration-component.cjs +1 -1
- package/dist/lib/cjs/components/settings-migration-component.d.cts +2 -2
- package/dist/lib/cjs/generated-during-build.cjs +1 -1
- package/dist/lib/cjs/loop.cjs +3 -2
- package/dist/lib/cjs/loop.d.cts +4 -1
- package/dist/lib/cjs/metadata-cache.cjs +4 -4
- package/dist/lib/cjs/plugin/plugin-api-schema.cjs +4 -30
- package/dist/lib/cjs/plugin/plugin-api-schema.d.cts +18 -40
- package/dist/lib/cjs/plugin/plugin-api.cjs +1 -1
- package/dist/lib/cjs/plugin/plugin-api.d.cts +34 -49
- package/dist/lib/cjs/plugin/settings-migration-api.cjs +4 -4
- package/dist/lib/cjs/plugin/settings-migration-api.d.cts +2 -2
- package/dist/lib/esm/__merged.d.mts +2 -2
- package/dist/lib/esm/__merged.mjs +32 -6
- package/dist/lib/esm/attachment-path.mjs +5 -5
- package/dist/lib/esm/components/settings-migration-component.d.mts +2 -2
- package/dist/lib/esm/components/settings-migration-component.mjs +1 -1
- package/dist/lib/esm/generated-during-build.mjs +1 -1
- package/dist/lib/esm/loop.d.mts +4 -1
- package/dist/lib/esm/loop.mjs +3 -2
- package/dist/lib/esm/metadata-cache.mjs +5 -5
- package/dist/lib/esm/plugin/plugin-api-schema.d.mts +18 -40
- package/dist/lib/esm/plugin/plugin-api-schema.mjs +5 -28
- package/dist/lib/esm/plugin/plugin-api.d.mts +34 -49
- package/dist/lib/esm/plugin/plugin-api.mjs +1 -1
- package/dist/lib/esm/plugin/settings-migration-api.d.mts +2 -2
- package/dist/lib/esm/plugin/settings-migration-api.mjs +2 -2
- package/package.json +2 -2
|
@@ -195,6 +195,7 @@ __export(metadata_cache_exports, {
|
|
|
195
195
|
unregisterFiles: () => unregisterFiles
|
|
196
196
|
});
|
|
197
197
|
module.exports = __toCommonJS(metadata_cache_exports);
|
|
198
|
+
var import_api_contract = require('@mnaoumov/typescript-lib/api-contract');
|
|
198
199
|
var import_disposable = require('@mnaoumov/typescript-lib/disposable');
|
|
199
200
|
var import_object_utils = require('@mnaoumov/typescript-lib/object-utils');
|
|
200
201
|
var import_type_guards = require('@mnaoumov/typescript-lib/type-guards');
|
|
@@ -207,7 +208,6 @@ var import_frontmatter = require('./frontmatter.cjs');
|
|
|
207
208
|
var import_i18n = require('./i18n/i18n.cjs');
|
|
208
209
|
var import_obsidian_dev_utils_state = require('./obsidian-dev-utils-state.cjs');
|
|
209
210
|
var import_parse_link = require('./parse-link.cjs');
|
|
210
|
-
var import_plugin_api_schema = require('./plugin/plugin-api-schema.cjs');
|
|
211
211
|
var import_plugin_api = require('./plugin/plugin-api.cjs');
|
|
212
212
|
var import_reference = require('./reference.cjs');
|
|
213
213
|
var import_vault = require('./vault.cjs');
|
|
@@ -222,8 +222,8 @@ var CachedMetadataExFeature = /* @__PURE__ */ ((CachedMetadataExFeature2) => {
|
|
|
222
222
|
const ADVANCED_METADATA_CACHE_PLUGIN_ID = "advanced-metadata-cache";
|
|
223
223
|
const ADVANCED_METADATA_CACHE_BACKLINKS_API_VERSION_RANGE = "^1.3.0";
|
|
224
224
|
const ADVANCED_METADATA_CACHE_BACKLINKS_METHOD_CONTRACT = {
|
|
225
|
-
input: (0,
|
|
226
|
-
output: (0,
|
|
225
|
+
input: (0, import_api_contract.createArgumentsSchema)([{ expected: "a path or a file", typeGuard: import_file_system.isPathOrFile }]),
|
|
226
|
+
output: (0, import_api_contract.createTypeGuardSchema)({ expected: "a backlinks dictionary or null", typeGuard: isNullableBacklinksDict })
|
|
227
227
|
};
|
|
228
228
|
const ADVANCED_METADATA_CACHE_BACKLINKS_API_CONTRACT = {
|
|
229
229
|
getBacklinksForFile: ADVANCED_METADATA_CACHE_BACKLINKS_METHOD_CONTRACT,
|
|
@@ -559,4 +559,4 @@ function toParsedCachedMetadataEx(params) {
|
|
|
559
559
|
unregisterFileCacheForNonExistingFile,
|
|
560
560
|
unregisterFiles
|
|
561
561
|
});
|
|
562
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21ldGFkYXRhLWNhY2hlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgbWV0YWRhdGEgY2FjaGUgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBSZXRyeU9wdGlvbnMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21BcnJheURpY3QgfSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0JztcbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBDYWNoZWRNZXRhZGF0YSxcbiAgUmVmZXJlbmNlLFxuICBUQWJzdHJhY3RGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgQ2FsbGJhY2tEaXNwb3NhYmxlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Rpc3Bvc2FibGUnO1xuaW1wb3J0IHsgZ2V0TmVzdGVkUHJvcGVydHlWYWx1ZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9vYmplY3QtdXRpbHMnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHtcbiAgQ3VzdG9tQXJyYXlEaWN0SW1wbCxcbiAgaXNGcm9udG1hdHRlckxpbmtDYWNoZSxcbiAgaXNSZWZlcmVuY2VDYWNoZSxcbiAgcGFyZW50Rm9sZGVyUGF0aFxufSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0L2ltcGxlbWVudGF0aW9ucyc7XG5cbmltcG9ydCB0eXBlIHsgUGF0aE9yRmlsZSB9IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHR5cGUgeyBDb21iaW5lZEZyb250bWF0dGVyIH0gZnJvbSAnLi9mcm9udG1hdHRlci50cyc7XG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlLFxuICBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZVdpdGhPZmZzZXRzLFxuICBQYXJzZUxpbmtSZWZlcmVuY2Vcbn0gZnJvbSAnLi9wYXJzZS1saW5rLnRzJztcbmltcG9ydCB0eXBlIHsgUGx1Z2luQXBpQ29udHJhY3QgfSBmcm9tICcuL3BsdWdpbi9wbHVnaW4tYXBpLnRzJztcblxuaW1wb3J0IHsgcmV0cnlXaXRoVGltZW91dE5vdGljZSB9IGZyb20gJy4vYXN5bmMtd2l0aC1ub3RpY2UudHMnO1xuaW1wb3J0IHsgZ2V0SW5kZXhlZEJhY2tsaW5rc0ZvckZpbGUgfSBmcm9tICcuL2JhY2tsaW5rLWluZGV4LnRzJztcbmltcG9ydCB7XG4gIGdldEZpbGUsXG4gIGdldEZpbGVPck51bGwsXG4gIGdldEZvbGRlcixcbiAgZ2V0UGF0aCxcbiAgaXNDYW52YXNGaWxlLFxuICBpc0ZpbGUsXG4gIGlzUGF0aE9yRmlsZVxufSBmcm9tICcuL2ZpbGUtc3lzdGVtLnRzJztcbmltcG9ydCB7XG4gIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyxcbiAgdG9Gcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzXG59IGZyb20gJy4vZnJvbnRtYXR0ZXItbGluay1jYWNoZS13aXRoLW9mZnNldHMudHMnO1xuaW1wb3J0IHsgcGFyc2VGcm9udG1hdHRlciB9IGZyb20gJy4vZnJvbnRtYXR0ZXIudHMnO1xuaW1wb3J0IHsgdCB9IGZyb20gJy4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7IGdldE9ic2lkaWFuRGV2VXRpbHNTdGF0ZSB9IGZyb20gJy4vb2JzaWRpYW4tZGV2LXV0aWxzLXN0YXRlLnRzJztcbmltcG9ydCB7XG4gIHBhcnNlRnJvbnRtYXR0ZXJMaW5rcyxcbiAgcGFyc2VMaW5rcyxcbiAgdG9QYXJzZUxpbmtSZWZlcmVuY2Vcbn0gZnJvbSAnLi9wYXJzZS1saW5rLnRzJztcbmltcG9ydCB7XG4gIGNyZWF0ZUFyZ3VtZW50c1NjaGVtYSxcbiAgY3JlYXRlVHlwZUd1YXJkU2NoZW1hXG59IGZyb20gJy4vcGx1Z2luL3BsdWdpbi1hcGktc2NoZW1hLnRzJztcbmltcG9ydCB7IGZpbmRQbHVnaW5BcGkgfSBmcm9tICcuL3BsdWdpbi9wbHVnaW4tYXBpLnRzJztcbmltcG9ydCB7IHNvcnRSZWZlcmVuY2VzIH0gZnJvbSAnLi9yZWZlcmVuY2UudHMnO1xuaW1wb3J0IHtcbiAgcmVhZFNhZmUsXG4gIHNhdmVOb3RlXG59IGZyb20gJy4vdmF1bHQudHMnO1xuXG4vKipcbiAqIEEgcGFyc2luZyBmZWF0dXJlIHRoYXQgd2FzIGFwcGxpZWQgd2hlbiBjb21wdXRpbmcgYSB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeH0uXG4gKi9cbmV4cG9ydCBlbnVtIENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlIHtcbiAgLyoqXG4gICAqIFRoZSBleHRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSB0aGUgbm90ZSBjb250ZW50IGJvZHkuXG4gICAqL1xuICBFeHRlcm5hbExpbmtzID0gJ0V4dGVybmFsTGlua3MnLFxuXG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gc2luZ2xlLWxpbmsgbm90ZSBmcm9udG1hdHRlciB2YWx1ZXMuXG4gICAqL1xuICBGcm9udG1hdHRlckV4dGVybmFsTGlua3MgPSAnRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzJyxcblxuICAvKipcbiAgICogVGhlIGV4dGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIG11bHRpLWxpbmsgbm90ZSBmcm9udG1hdHRlciB2YWx1ZXMuXG4gICAqL1xuICBNdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzID0gJ011bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3MnLFxuXG4gIC8qKlxuICAgKiBUaGUgaW50ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gbXVsdGktbGluayBub3RlIGZyb250bWF0dGVyIHZhbHVlcywgd2hpY2ggT2JzaWRpYW4gZG9lcyBub3QgbmF0aXZlbHkgY2FjaGUuXG4gICAqL1xuICBNdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rcyA9ICdNdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rcycsXG5cbiAgLyoqXG4gICAqIE9ic2lkaWFuJ3MgbmF0aXZlIG1ldGFkYXRhIHBhcnNpbmcgKGludGVybmFsIGxpbmtzLCBlbWJlZHMsIGZyb250bWF0dGVyIGxpbmtzKS5cbiAgICovXG4gIE5hdGl2ZSA9ICdOYXRpdmUnXG59XG5cbi8qKlxuICogQW4gZXh0ZW5kZWQge0BsaW5rIENhY2hlZE1ldGFkYXRhfSB0aGF0IHJlY29yZHMgd2hpY2ggcGFyc2luZyB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmV9cyB3ZXJlXG4gKiBhcHBsaWVkICh2aWEge0BsaW5rIENhY2hlZE1ldGFkYXRhRXguZmVhdHVyZXN9KSBhbmQgY2FycmllcyB0aGUgcmVzdWx0aW5nIGV4dGVybmFsIGxpbmtzLiBFYWNoIGxpbmtzXG4gKiBhcnJheSBpcyBwb3B1bGF0ZWQgb25seSB3aGVuIGl0cyBjb3JyZXNwb25kaW5nIGZlYXR1cmUgaXMgcHJlc2VudCBpbiB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeC5mZWF0dXJlc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FjaGVkTWV0YWRhdGFFeCBleHRlbmRzIENhY2hlZE1ldGFkYXRhIHtcbiAgLyoqXG4gICAqIFRoZSBleHRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSB0aGUgbm90ZSBjb250ZW50IGJvZHkuIFBvcHVsYXRlZCBvbmx5IHdoZW5cbiAgICoge0BsaW5rIENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlLkV4dGVybmFsTGlua3N9IGlzIGFwcGxpZWQuXG4gICAqL1xuICBleHRlcm5hbExpbmtzPzogUGFyc2VMaW5rUmVmZXJlbmNlW107XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJzaW5nIGZlYXR1cmVzIHRoYXQgd2VyZSBhcHBsaWVkIHdoZW4gY29tcHV0aW5nIHRoaXMgY2FjaGUuXG4gICAqL1xuICByZWFkb25seSBmZWF0dXJlczogQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmVbXTtcblxuICAvKipcbiAgICogVGhlIGV4dGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIHNpbmdsZS1saW5rIChzaW5nbGUtdmFsdWUpIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLiBQb3B1bGF0ZWQgb25seVxuICAgKiB3aGVuIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5Gcm9udG1hdHRlckV4dGVybmFsTGlua3N9IGlzIGFwcGxpZWQuXG4gICAqL1xuICBmcm9udG1hdHRlckV4dGVybmFsTGlua3M/OiBQYXJzZUxpbmtGcm9udG1hdHRlclJlZmVyZW5jZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gbXVsdGktbGluayAobXVsdGktdmFsdWUpIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLiBQb3B1bGF0ZWQgb25seSB3aGVuXG4gICAqIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5NdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzfSBpcyBhcHBsaWVkLlxuICAgKi9cbiAgbXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcz86IFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlV2l0aE9mZnNldHNbXTtcblxuICAvKipcbiAgICogVGhlIGludGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIG11bHRpLWxpbmsgKG11bHRpLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcy4gUG9wdWxhdGVkIG9ubHkgd2hlblxuICAgKiB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuTXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3N9IGlzIGFwcGxpZWQuXG4gICAqL1xuICBtdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rcz86IFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlV2l0aE9mZnNldHNbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEJhY2tsaW5rc0ZvckZpbGVTYWZlT3B0aW9ucyBleHRlbmRzIFJldHJ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNob3cgYSB0aW1lb3V0IG5vdGljZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRTaG93VGltZW91dE5vdGljZT86IGJvb2xlYW47XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRCYWNrbGlua3NGb3JGaWxlU2FmZVBhcmFtcyBleHRlbmRzIEdldEJhY2tsaW5rc0ZvckZpbGVTYWZlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZSBvYmplY3QuXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZXRDYWNoZVNhZmV9LlxuICovXG5leHBvcnQgdHlwZSBHZXRDYWNoZVNhZmVPcHRpb25zID0gUGFyc2VDYWNoZU9wdGlvbnM7XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZ2V0TGlua3N9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldExpbmtzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBjYWNoZWQgbWV0YWRhdGEgdG8gcmV0cmlldmUgdGhlIGxpbmtzIGZyb20uXG4gICAqL1xuICByZWFkb25seSBjYWNoZTogQ2FjaGVkTWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgZW1iZWRzIChgY2FjaGUuZW1iZWRzYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZUVtYmVkcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gdGhlIG5vdGUgYm9keS4gUmVxdWlyZXMgdGhlIGNhY2hlIHRvIGJlIGFcbiAgICoge0BsaW5rIENhY2hlZE1ldGFkYXRhRXh9LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRXh0ZXJuYWxMaW5rcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gc2luZ2xlLWxpbmsgKHNpbmdsZS12YWx1ZSkgbm90ZSBmcm9udG1hdHRlclxuICAgKiB2YWx1ZXMuIFJlcXVpcmVzIHRoZSBjYWNoZSB0byBiZSBhIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4fS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgZnJvbnRtYXR0ZXIgbGlua3MgKGBjYWNoZS5mcm9udG1hdHRlckxpbmtzYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZUZyb250bWF0dGVyTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIGV4dGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIG11bHRpLWxpbmsgKG11bHRpLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcyxcbiAgICogaS5lLiB0aGUgb2Zmc2V0LWNhcnJ5aW5nIGZyb250bWF0dGVyIGV4dGVybmFsIGxpbmtzIChuYXJyb3dlZCB2aWFcbiAgICoge0BsaW5rIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0c30pLiBSZXF1aXJlcyB0aGUgY2FjaGUgdG8gYmUgYSB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeH0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVNdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBpbnRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBtdWx0aS1saW5rIChtdWx0aS12YWx1ZSkgbm90ZSBmcm9udG1hdHRlciB2YWx1ZXMuXG4gICAqIFJlcXVpcmVzIHRoZSBjYWNoZSB0byBiZSBhIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4fS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZU11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSByZWZlcmVuY2UgbGlua3MgKGBjYWNoZS5saW5rc2ApLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVSZWZlcmVuY2VzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgcGFyc2luZyBwZXJmb3JtZWQgYnkge0BsaW5rIGdldENhY2hlU2FmZX0gYW5kIHtAbGluayBwYXJzZU1ldGFkYXRhfSBiZXlvbmQgT2JzaWRpYW4nc1xuICogbmF0aXZlIG1ldGFkYXRhIHBhcnNpbmcuIEVhY2ggb3B0aW9uIGlzIG9wdC1pbjsgZW5hYmxpbmcgaXQgYWRkcyB0aGUgY29ycmVzcG9uZGluZ1xuICoge0BsaW5rIENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlfSBhbmQgcG9wdWxhdGVzIHRoZSBtYXRjaGluZyBsaW5rcyBhcnJheS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJzZUNhY2hlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHBhcnNlIHRoZSBleHRlcm5hbCBsaW5rcyBmcm9tIHRoZSBub3RlIGNvbnRlbnQgYm9keS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUGFyc2VFeHRlcm5hbExpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBwYXJzZSB0aGUgZXh0ZXJuYWwgbGlua3MgZnJvbSBzaW5nbGUtbGluayAoc2luZ2xlLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUGFyc2VGcm9udG1hdHRlckV4dGVybmFsTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHBhcnNlIHRoZSBleHRlcm5hbCBsaW5rcyBmcm9tIG11bHRpLWxpbmsgKG11bHRpLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUGFyc2VNdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBwYXJzZSB0aGUgaW50ZXJuYWwgbGlua3MgZnJvbSBtdWx0aS1saW5rIChtdWx0aS12YWx1ZSkgbm90ZSBmcm9udG1hdHRlciB2YWx1ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFBhcnNlTXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3M/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBwYXJzZU1ldGFkYXRhfS5cbiAqL1xuZXhwb3J0IHR5cGUgUGFyc2VNZXRhZGF0YU9wdGlvbnMgPSBQYXJzZUNhY2hlT3B0aW9ucztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZ2lzdGVyRmlsZUNhY2hlRm9yTm9uRXhpc3RpbmdGaWxlUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBhcHA6IEFwcDtcblxuICAvKipcbiAgICogVGhlIGZpbGUgY2FjaGUgdG8gcmVnaXN0ZXIuXG4gICAqL1xuICByZWFkb25seSBjYWNoZTogQ2FjaGVkTWV0YWRhdGE7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9yIGZpbGUgdG8gcmVnaXN0ZXIgdGhlIGZpbGUgY2FjaGUgZm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aE9yRmlsZTogUGF0aE9yRmlsZTtcbn1cblxuLyoqXG4gKiBUaGUgc2xpY2Ugb2YgYEFkdmFuY2VkIE1ldGFkYXRhIENhY2hlYCdzIHB1Ymxpc2hlZCBBUEkgdGhpcyBtb2R1bGUgY2FsbHMsIGRlY2xhcmVkIGhlcmUgcmF0aGVyIHRoYW4gaW1wb3J0ZWQsXG4gKiBiZWNhdXNlIHRoYXQgcGx1Z2luIGlzIG5vdCBhIGRlcGVuZGVuY3kgKHJ1bGUgTDkgaW4gYEFHRU5UUy5tZGApLiBJdHMgYGFwaS5kLnRzYCBkZWNsYXJlcyB0aGUgd2hvbGUgb2YgaXQuXG4gKi9cbmludGVyZmFjZSBBZHZhbmNlZE1ldGFkYXRhQ2FjaGVCYWNrbGlua3NBcGkge1xuICAvKipcbiAgICogQW5zd2VycyBmcm9tIHRoZSBwbHVnaW4ncyBiYWNrbGluayBjYWNoZS5cbiAgICpcbiAgICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9iamVjdC5cbiAgICogQHJldHVybnMgVGhlIGJhY2tsaW5rcywgb3IgYG51bGxgIHdoaWxlIHRoZSBwbHVnaW4ncyBgQmFja2xpbmtzYCBtb2R1bGUgaXMgb2ZmLlxuICAgKi9cbiAgZ2V0QmFja2xpbmtzRm9yRmlsZTogKHBhdGhPckZpbGU6IFBhdGhPckZpbGUpID0+IEN1c3RvbUFycmF5RGljdDxSZWZlcmVuY2U+IHwgbnVsbDtcblxuICAvKipcbiAgICogQW5zd2VycyBmcm9tIHRoZSBwbHVnaW4ncyBiYWNrbGluayBjYWNoZSBvbmNlIHRoZSBwZW5kaW5nIGZpbGUgY2hhbmdlcyBoYXZlIGJlZW4gcHJvY2Vzc2VkLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSBiYWNrbGlua3MsIG9yIHRvIGBudWxsYCB3aGlsZSB0aGUgcGx1Z2luJ3MgYEJhY2tsaW5rc2BcbiAgICogICBtb2R1bGUgaXMgb2ZmLlxuICAgKi9cbiAgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmU6IChwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKSA9PiBQcm9taXNlPEN1c3RvbUFycmF5RGljdDxSZWZlcmVuY2U+IHwgbnVsbD47XG59XG5cbi8qKlxuICogQSBzZWxlY3RvciBmb3IgYSBmZWF0dXJlLWdhdGVkIGxpbmsgY2F0ZWdvcnkgaW4ge0BsaW5rIGdldExpbmtzfS5cbiAqL1xuaW50ZXJmYWNlIEZlYXR1cmVMaW5rU2VsZWN0b3Ige1xuICAvKipcbiAgICogQSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgbGluayBjYXRlZ29yeSwgdXNlZCBpbiBlcnJvciBtZXNzYWdlcy5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmZWF0dXJlIHRoYXQgbXVzdCBiZSBwcmVzZW50IGluIHRoZSBjYWNoZSBmb3IgdGhpcyBjYXRlZ29yeSB0byBiZSBhdmFpbGFibGUuXG4gICAqL1xuICByZWFkb25seSBmZWF0dXJlOiBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZTtcblxuICAvKipcbiAgICogU2VsZWN0cyB0aGUgbGlua3MgZm9yIHRoaXMgY2F0ZWdvcnkgZnJvbSB0aGUgY2FjaGUuXG4gICAqL1xuICBzZWxlY3Q6IChjYWNoZTogQ2FjaGVkTWV0YWRhdGFFeCkgPT4gUmVmZXJlbmNlW10gfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGlzIGNhdGVnb3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbXMgZm9yIHtAbGluayB0b1BhcnNlZENhY2hlZE1ldGFkYXRhRXh9LlxuICovXG5pbnRlcmZhY2UgVG9QYXJzZWRDYWNoZWRNZXRhZGF0YUV4UGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBwbGFpbiBjYWNoZWQgbWV0YWRhdGEgdG8gd3JhcC5cbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlOiBDYWNoZWRNZXRhZGF0YTtcblxuICAvKipcbiAgICogVGhlIG5vdGUgY29udGVudCB0aGUgb2Zmc2V0cyBpbmRleCBpbnRvLCB1c2VkIGZvciBib2R5IGV4dGVybmFsLWxpbmsgcGFyc2luZy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhcnNlIG9wdGlvbnMgY29udHJvbGxpbmcgd2hpY2ggbGlua3MgdG8gcGFyc2UuXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zOiBQYXJzZUNhY2hlT3B0aW9ucztcbn1cblxuLyoqXG4gKiBUaGUgcGx1Z2luIGlkIG9mIHRoZSBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgIHBsdWdpbiwgdGhlIHN1Y2Nlc3NvciB0byBgQmFja2xpbmsgQ2FjaGVgLlxuICpcbiAqIFVzZWQgYnkge0BsaW5rIGhhc0JhY2tsaW5rQ2FjaGVQbHVnaW59LCBhbmQgYXMgdGhlIHByb3ZpZGVyIGlkIHVuZGVyIHdoaWNoIHtAbGluayBnZXRCYWNrbGlua3NGb3JGaWxlT3JQYXRofSBhbmQge0BsaW5rIGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlfSBsb29rIHVwIHRoZSBwbHVnaW4ncyBwdWJsaXNoZWQgQVBJLlxuICovXG5leHBvcnQgY29uc3QgQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfUExVR0lOX0lEID0gJ2FkdmFuY2VkLW1ldGFkYXRhLWNhY2hlJztcblxuLyoqXG4gKiBUaGUgY29udHJhY3QgdmVyc2lvbnMgb2YgYEFkdmFuY2VkIE1ldGFkYXRhIENhY2hlYCdzIEFQSSB0aGlzIG1vZHVsZSBjb21waWxlZCBhZ2FpbnN0LiBgMS4zLjBgIGlzIHRoZSBmaXJzdCB0byBjYXJyeSB0aGUgdHdvIGJhY2tsaW5rIG1ldGhvZHMuXG4gKi9cbmNvbnN0IEFEVkFOQ0VEX01FVEFEQVRBX0NBQ0hFX0JBQ0tMSU5LU19BUElfVkVSU0lPTl9SQU5HRSA9ICdeMS4zLjAnO1xuXG4vKipcbiAqIFRoZSBzY2hlbWFzIG9mIGEgYmFja2xpbmsgbWV0aG9kJ3MgcGF5bG9hZHM6IHRoZSBvbmUgcGF0aC1vci1maWxlIGFyZ3VtZW50LCBhbmQgdGhlIGJhY2tsaW5rcyBvciBgbnVsbGAuXG4gKlxuICogQSBjb3B5IG9mIHRoZSBgZ2V0QmFja2xpbmtzRm9yRmlsZWAgYW5kIGBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZWAgZW50cmllcyBvZiBgQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfQVBJX0NPTlRSQUNUYCwgd2hpY2ggYEFkdmFuY2VkIE1ldGFkYXRhIENhY2hlYCBzaGlwcyBhc1xuICogaXRzIHJvb3QgYGFwaS1jb250cmFjdC50c2AgYW5kIHB1Ymxpc2hlcy4gS2VlcCB0aGUgZ3VhcmRzIGluIGFncmVlbWVudCB3aXRoIHRoYXQgZmlsZSwgc28gdGhlIHByb3ZpZGVyIGFuZCB0aGlzIGNvbnN1bWVyIGNoZWNrIG9uZSBkZWZpbml0aW9uLlxuICovXG5jb25zdCBBRFZBTkNFRF9NRVRBREFUQV9DQUNIRV9CQUNLTElOS1NfTUVUSE9EX0NPTlRSQUNUID0ge1xuICBpbnB1dDogY3JlYXRlQXJndW1lbnRzU2NoZW1hPFtwYXRoT3JGaWxlOiBQYXRoT3JGaWxlXT4oW3sgZXhwZWN0ZWQ6ICdhIHBhdGggb3IgYSBmaWxlJywgdHlwZUd1YXJkOiBpc1BhdGhPckZpbGUgfV0pLFxuICBvdXRwdXQ6IGNyZWF0ZVR5cGVHdWFyZFNjaGVtYSh7IGV4cGVjdGVkOiAnYSBiYWNrbGlua3MgZGljdGlvbmFyeSBvciBudWxsJywgdHlwZUd1YXJkOiBpc051bGxhYmxlQmFja2xpbmtzRGljdCB9KVxufTtcblxuLyoqXG4gKiBUaGUgY29udHJhY3Qgb2YgdGhlIG1lbWJlcnMgb2YgYEFkdmFuY2VkIE1ldGFkYXRhIENhY2hlYCdzIEFQSSB0aGlzIG1vZHVsZSBjYWxscywgc28gYSByZWNvcmQgdGhhdCBsYWNrcyBlaXRoZXIgaXMgcGFzc2VkIG92ZXIsIGFuZCBhIHBheWxvYWQgdGhhdCBicmVha3MgaXRzIHNpZ25hdHVyZSBpcyByZXBvcnRlZCB3aGlsZSB0aGUgYFBsdWdpbkFwaWAgZGVidWdnZXIgaXMgb24uXG4gKi9cbmNvbnN0IEFEVkFOQ0VEX01FVEFEQVRBX0NBQ0hFX0JBQ0tMSU5LU19BUElfQ09OVFJBQ1Q6IFBsdWdpbkFwaUNvbnRyYWN0PEFkdmFuY2VkTWV0YWRhdGFDYWNoZUJhY2tsaW5rc0FwaT4gPSB7XG4gIGdldEJhY2tsaW5rc0ZvckZpbGU6IEFEVkFOQ0VEX01FVEFEQVRBX0NBQ0hFX0JBQ0tMSU5LU19NRVRIT0RfQ09OVFJBQ1QsXG4gIGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlOiBBRFZBTkNFRF9NRVRBREFUQV9DQUNIRV9CQUNLTElOS1NfTUVUSE9EX0NPTlRSQUNUXG59O1xuXG4vKipcbiAqIFRoZSBwbHVnaW4gaWQgb2YgdGhlIHJldGlyZWQgYEJhY2tsaW5rIENhY2hlYCBwbHVnaW4sIHN1cGVyc2VkZWQgYnkge0BsaW5rIEFEVkFOQ0VEX01FVEFEQVRBX0NBQ0hFX1BMVUdJTl9JRH0uXG4gKlxuICogU3RpbGwgcmVjb2duaXplZCBieSB7QGxpbmsgaGFzQmFja2xpbmtDYWNoZVBsdWdpbn0sIGRlbGliZXJhdGVseS4gUmVtb3ZpbmcgYSBwbHVnaW4gZnJvbSB0aGUgY29tbXVuaXR5IHJlZ2lzdHJ5IGJsb2NrcyBuZXcgaW5zdGFsbHM7IGl0IHVuaW5zdGFsbHMgbm90aGluZywgc28gZXZlcnkgZXhpc3RpbmcgdXNlciBrZWVwcyBpdCB1bnRpbCB0aGV5IG1pZ3JhdGUgYnkgaGFuZC5cbiAqXG4gKiBJdCBtYXkgYmUgZHJvcHBlZCB3aGVuIGFsbCB0aHJlZSBvZiB0aGUgZm9sbG93aW5nIGhvbGQsIGFuZCBub3QgYmVmb3JlOiBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgIGlzIGxpc3RlZCBpbiB0aGUgY29tbXVuaXR5IHJlZ2lzdHJ5LCBzbyBtaWdyYXRpbmcgaXMgcG9zc2libGUgYXQgYWxsOyB0aGUgZmluYWwgYEJhY2tsaW5rIENhY2hlYCBoYW5kb3ZlciByZWxlYXNlIGhhcyBiZWVuIG91dCBmb3IgYXQgbGVhc3QgdHdlbHZlIG1vbnRoczsgYW5kIHRoaXMgbGlicmFyeSBpcyBjdXR0aW5nIGEgbWFqb3IgcmVsZWFzZSBhbnl3YXksIGJlY2F1c2UgZHJvcHBpbmcgdGhlIGlkIHNpbGVudGx5IHVuLWdhdGVzIGNhbnZhcyBsaW5rIGhhbmRsaW5nIGZvciBhbnlvbmUgd2hvIGhhcyBub3QgbWlncmF0ZWQuIFRoZXJlIGlzIG5vIGNvc3QgcHJlc3N1cmUgdG8gZHJvcCBpdCBlYXJsaWVyIC0gcmVjb2duaXppbmcgYSBkZWFkIGlkIGlzIG9uZSBzdHJpbmcgY29tcGFyaXNvbiBvbiBhIHBhdGggdGhhdCBhbHJlYWR5IHJlYWRzIGEgcGx1Z2luIHJlZ2lzdHJ5LlxuICovXG5leHBvcnQgY29uc3QgQkFDS0xJTktfQ0FDSEVfUExVR0lOX0lEID0gJ2JhY2tsaW5rLWNhY2hlJztcblxuLyoqXG4gKiBFbnN1cmVzIHRoYXQgdGhlIG1ldGFkYXRhIGNhY2hlIGlzIHJlYWR5IGZvciBhbGwgZmlsZXMuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG1ldGFkYXRhIGNhY2hlIGlzIHJlYWR5LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlTWV0YWRhdGFDYWNoZVJlYWR5KGFwcDogQXBwKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgYXBwLm1ldGFkYXRhQ2FjaGUub25DbGVhbkNhY2hlKHJlc29sdmUpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJhY2tsaW5rcyBmb3IgYSBmaWxlIG9yIHBhdGguXG4gKiBOT1RFOiBUaGUgZmlsZSBtYXkgYmUgbm9uLWV4aXN0ZW50LlxuICpcbiAqIFdoZW4gYEFkdmFuY2VkIE1ldGFkYXRhIENhY2hlYCBwdWJsaXNoZXMgaXRzIGJhY2tsaW5rcyBBUEkgYW5kIGl0cyBgQmFja2xpbmtzYCBtb2R1bGUgaXMgb24sIGl0cyBjYWNoZSBhbnN3ZXJzLlxuICogT3RoZXJ3aXNlIHRoZSBhbnN3ZXIgY29tZXMgZnJvbSBhIGJhY2tsaW5rIGluZGV4IHdob3NlIGNvc3QgaXMgcHJvcG9ydGlvbmFsIHRvIHRoZSBjYW5kaWRhdGUgbm90ZXMgcmF0aGVyIHRoYW5cbiAqIHRvIGV2ZXJ5IHJlZmVyZW5jZSBpbiB0aGUgdmF1bHQsIGFuZCB3aGljaCBnaXZlcyB0aGUgc2FtZSByZWZlcmVuY2VzIE9ic2lkaWFuJ3Mgb3duIGBnZXRCYWNrbGlua3NGb3JGaWxlYCBnaXZlcy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICogQHBhcmFtIHBhdGhPckZpbGUgLSBUaGUgcGF0aCBvciBmaWxlIG9iamVjdC5cbiAqIEByZXR1cm5zIFRoZSBiYWNrbGlua3MgZm9yIHRoZSBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmFja2xpbmtzRm9yRmlsZU9yUGF0aChhcHA6IEFwcCwgcGF0aE9yRmlsZTogUGF0aE9yRmlsZSk6IEN1c3RvbUFycmF5RGljdDxSZWZlcmVuY2U+IHtcbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoeyBhcHAsIHBhdGhPckZpbGUsIHNob3VsZEluY2x1ZGVOb25FeGlzdGluZzogdHJ1ZSB9KTtcbiAgdXNpbmcgX3JlZ2lzdHJhdGlvbiA9IHJlZ2lzdGVyRmlsZXMoYXBwLCBbZmlsZV0pO1xuICByZXR1cm4gZmluZEFkdmFuY2VkTWV0YWRhdGFDYWNoZUJhY2tsaW5rc0FwaSgpPy5nZXRCYWNrbGlua3NGb3JGaWxlKGZpbGUpID8/IGdldEluZGV4ZWRCYWNrbGlua3NGb3JGaWxlKGFwcCwgZmlsZSk7XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBiYWNrbGlua3MgZm9yIGEgZmlsZSBzYWZlbHkuXG4gKlxuICogV2hlbiBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgIHB1Ymxpc2hlcyBpdHMgYmFja2xpbmtzIEFQSSBhbmQgaXRzIGBCYWNrbGlua3NgIG1vZHVsZSBpcyBvbiwgdGhhdCBBUEkgYW5zd2Vycy5cbiAqXG4gKiBPdGhlcndpc2UgdGhpcyBpcyBOT1QgYSBwdXJlIHJlYWQuIEl0IHZlcmlmaWVzXG4gKiBlYWNoIGJhY2tsaW5rIGFnYWluc3QgdGhlIG5vdGUncyBjdXJyZW50IHRleHQsIGFuZCB0byBkbyB0aGF0IGl0IGNhbGxzIHtAbGluayBzYXZlTm90ZX0gb24gZXZlcnlcbiAqIG5vdGUgdGhhdCBsaW5rcyB0byB0aGUgZmlsZSwgd2hpY2ggc2F2ZXMgYW55IG9wZW4gZWRpdG9yIHZpZXcgb2YgdGhvc2Ugbm90ZXMgdGhhdCBoYXMgdW5zYXZlZFxuICogY2hhbmdlcy4gQ2FsbCBpdCBmcm9tIGFuIGV4cGxpY2l0IHVzZXIgYWN0aW9uLiBEbyBub3QgY2FsbCBpdCBmcm9tIGFuIGF1dG9tYXRpYyB0cmlnZ2VyIChhIHZhdWx0IG9yXG4gKiBtZXRhZGF0YSBldmVudCwgYSBzYXZlIG9yIHJlbmRlciBwYXRjaCkgdGhhdCBvbmx5IGRlY2lkZXMgd2hldGhlciB0byBhY3QuIFRoZXJlLCBhIGZvcmNlZCBzYXZlIGNhblxuICogcmFjZSBhbm90aGVyIHBsdWdpbidzIGluLWZsaWdodCBlZGl0b3IgY2hhbmdlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmV0cmlldmluZyB0aGUgYmFja2xpbmtzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byBhbiBhcnJheSBkaWN0aW9uYXJ5IG9mIGJhY2tsaW5rcy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlKHBhcmFtczogR2V0QmFja2xpbmtzRm9yRmlsZVNhZmVQYXJhbXMpOiBQcm9taXNlPEN1c3RvbUFycmF5RGljdDxSZWZlcmVuY2U+PiB7XG4gIGNvbnN0IHsgYXBwLCBwYXRoT3JGaWxlLCAuLi5vcHRpb25zIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGNhY2hlZEJhY2tsaW5rcyA9IGF3YWl0IGZpbmRBZHZhbmNlZE1ldGFkYXRhQ2FjaGVCYWNrbGlua3NBcGkoKT8uZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUocGF0aE9yRmlsZSk7XG4gIGlmIChjYWNoZWRCYWNrbGlua3MpIHtcbiAgICByZXR1cm4gY2FjaGVkQmFja2xpbmtzO1xuICB9XG5cbiAgbGV0IGJhY2tsaW5rczogQ3VzdG9tQXJyYXlEaWN0PFJlZmVyZW5jZT4gPSBuZXcgQ3VzdG9tQXJyYXlEaWN0SW1wbDxSZWZlcmVuY2U+KCk7XG4gIGF3YWl0IHJldHJ5V2l0aFRpbWVvdXROb3RpY2Uoe1xuICAgIGFzeW5jIG9wZXJhdGlvbkZ1bmN0aW9uKGFib3J0U2lnbmFsKSB7XG4gICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgY29uc3QgZmlsZSA9IGdldEZpbGUoeyBhcHAsIHBhdGhPckZpbGUgfSk7XG4gICAgICBhd2FpdCBlbnN1cmVNZXRhZGF0YUNhY2hlUmVhZHkoYXBwKTtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBiYWNrbGlua3MgPSBnZXRCYWNrbGlua3NGb3JGaWxlT3JQYXRoKGFwcCwgZmlsZSk7XG4gICAgICBmb3IgKGNvbnN0IG5vdGVQYXRoIG9mIGJhY2tsaW5rcy5rZXlzKCkpIHtcbiAgICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgY29uc3Qgbm90ZSA9IGdldEZpbGVPck51bGwoeyBhcHAsIHBhdGhPckZpbGU6IG5vdGVQYXRoIH0pO1xuICAgICAgICBpZiAoIW5vdGUpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBBIGNhbnZhcyBob2xkZXIgY2Fubm90IGJlIGNoZWNrZWQgYWdhaW5zdCBpdHMgdGV4dC4gSXRzIGZpbGUtbm9kZSByZWZlcmVuY2VzIGNhcnJ5IG5vIHBvc2l0aW9uLCBhbmRcbiAgICAgICAgLy8gT2JzaWRpYW4gcmVwb3J0cyBhIHRleHQtbm9kZSBlbWJlZCB3aXRoIGEgcG9zaXRpb24gaW50byB0aGF0IG5vZGUncyBvd24gdGV4dCwgbm90IGludG8gdGhlIGNhbnZhcyBKU09OLFxuICAgICAgICAvLyBzbyBzbGljaW5nIHRoZSBmaWxlIGF0IGl0IG5ldmVyIGdpdmVzIHRoZSBsaW5rIGJhY2sgYW5kIHRoZSByZXRyeSB3b3VsZCBuZXZlciBlbmQuXG4gICAgICAgIGlmIChpc0NhbnZhc0ZpbGUobm90ZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IHNhdmVOb3RlKGFwcCwgbm90ZSk7XG4gICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG5cbiAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRTYWZlKGFwcCwgbm90ZSk7XG4gICAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICAgIGlmICghY29udGVudCkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmcm9udG1hdHRlciA9IHBhcnNlRnJvbnRtYXR0ZXIoY29udGVudCk7XG4gICAgICAgIGNvbnN0IGxpbmtzID0gYmFja2xpbmtzLmdldChub3RlUGF0aCk7XG4gICAgICAgIGlmICghbGlua3MpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgICBsZXQgYWN0dWFsTGluazogc3RyaW5nO1xuICAgICAgICAgIGlmIChpc1JlZmVyZW5jZUNhY2hlKGxpbmspKSB7XG4gICAgICAgICAgICBhY3R1YWxMaW5rID0gY29udGVudC5zbGljZShsaW5rLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCwgbGluay5wb3NpdGlvbi5lbmQub2Zmc2V0KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUobGluaykpIHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5VmFsdWUgPSBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlKGZyb250bWF0dGVyLCBsaW5rLmtleSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHByb3BlcnR5VmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGlua1dpdGhPZmZzZXRzID0gdG9Gcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKGxpbmspO1xuICAgICAgICAgICAgYWN0dWFsTGluayA9IHByb3BlcnR5VmFsdWUuc2xpY2UobGlua1dpdGhPZmZzZXRzLnN0YXJ0T2Zmc2V0LCBsaW5rV2l0aE9mZnNldHMuZW5kT2Zmc2V0KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChhY3R1YWxMaW5rICE9PSBsaW5rLm9yaWdpbmFsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgb3BlcmF0aW9uTmFtZTogdCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLm1ldGFkYXRhQ2FjaGUuZ2V0QmFja2xpbmtzRm9yRmlsZVBhdGgsIHsgZmlsZVBhdGg6IGdldFBhdGgoYXBwLCBwYXRoT3JGaWxlKSB9KSxcbiAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IG51bGwsXG4gICAgcmV0cnlPcHRpb25zOiBvcHRpb25zLFxuICAgIHNob3VsZFNob3dUaW1lb3V0Tm90aWNlOiBvcHRpb25zLnNob3VsZFNob3dUaW1lb3V0Tm90aWNlID8/IHRydWVcbiAgfSk7XG5cbiAgcmV0dXJuIGJhY2tsaW5rcztcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGNhY2hlZCBtZXRhZGF0YSBmb3IgYSBnaXZlbiBmaWxlIG9yIHBhdGguXG4gKlxuICogVGhpcyBpcyBOT1QgYSBwdXJlIHJlYWQ6IGJlZm9yZSBpdCByZWFkcyB0aGUgY2FjaGUsIGl0IGNhbGxzIHtAbGluayBzYXZlTm90ZX0sIHdoaWNoIHNhdmVzIGFueVxuICogb3BlbiBlZGl0b3IgdmlldyBvZiB0aGUgbm90ZSB0aGF0IGhhcyB1bnNhdmVkIGNoYW5nZXMuIFRoYXQgc2F2ZSBpcyB3aHkgdGhlIGNhY2hlIG1hdGNoZXMgd2hhdCB0aGVcbiAqIHVzZXIgc2VlcywgYW5kIHdoeSBhIGNvbW1hbmQgdGhhdCByZXdyaXRlcyB0aGUgbm90ZSBjYW4gdXNlIHRoaXMgc2FmZWx5IHdpdGhvdXQgaXRzIHJld3JpdGUgYmVpbmdcbiAqIGNsb2JiZXJlZC4gSXQgaXMgYWxzbyBhIHdyaXRlIG9uIHRoZSBub3RlLiBTbyBkbyBub3QgY2FsbCB0aGlzIGZyb20gYW4gYXV0b21hdGljIHRyaWdnZXIgKGEgdmF1bHRcbiAqIG9yIG1ldGFkYXRhIGV2ZW50LCBhIHNhdmUgb3IgcmVuZGVyIHBhdGNoLCBhIGxheW91dCBob29rKSB0aGF0IG9ubHkgZGVjaWRlcyB3aGV0aGVyIHRvIGFjdDogYVxuICogZm9yY2VkIHNhdmUgb25lIHRpY2sgYWZ0ZXIgYW5vdGhlciBwbHVnaW4gaGFzIGRpc3BhdGNoZWQgYSBjaGFuZ2UgaW50byB0aGUgZWRpdG9yIGNhbiBsZWF2ZVxuICogT2JzaWRpYW4ncyBlZGl0b3IgcmVuZGVyaW5nIHN0YWxlIHN0YXRlLiBBIHJlYWQtb25seSBwcm9iZSBvbiB0aGUgbm90ZSdzIGN1cnJlbnQgdGV4dCBzaG91bGQgdXNlXG4gKiB7QGxpbmsgcGFyc2VNZXRhZGF0YX0gb24gdGhhdCB0ZXh0IGluc3RlYWQuIEl0IG5lZWRzIG5vIHZpZXcsIG5vIGNhY2hlIGFuZCBubyBzYXZlLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIGZpbGVPclBhdGggLSBUaGUgZmlsZSBvciBwYXRoIHRvIHJldHJpZXZlIHRoZSBtZXRhZGF0YSBmb3IuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJzZSBvcHRpb25zIGNvbnRyb2xsaW5nIHdoaWNoIGFkZGl0aW9uYWwgbGlua3MgdG8gcGFyc2UuXG4gKiBAcmV0dXJucyBUaGUgY2FjaGVkIG1ldGFkYXRhIGZvciB0aGUgZmlsZSwgb3IgYG51bGxgIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRDYWNoZVNhZmUoYXBwOiBBcHAsIGZpbGVPclBhdGg6IFBhdGhPckZpbGUsIG9wdGlvbnM6IEdldENhY2hlU2FmZU9wdGlvbnMgPSB7fSk6IFByb21pc2U8Q2FjaGVkTWV0YWRhdGFFeCB8IG51bGw+IHtcbiAgY29uc3QgZmlsZSA9IGdldEZpbGVPck51bGwoeyBhcHAsIHBhdGhPckZpbGU6IGZpbGVPclBhdGggfSk7XG5cbiAgdHJ5IHtcbiAgICBpZiAoIWZpbGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGxldCBjYWNoZTogQ2FjaGVkTWV0YWRhdGEgfCBudWxsO1xuICAgIGlmIChmaWxlLmRlbGV0ZWQpIHtcbiAgICAgIGNhY2hlID0gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGZpbGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBzYXZlTm90ZShhcHAsIGZpbGUpO1xuXG4gICAgICBjb25zdCBmaWxlQ2FjaGVFbnRyeSA9IGFwcC5tZXRhZGF0YUNhY2hlLmZpbGVDYWNoZVtmaWxlLnBhdGhdO1xuICAgICAgY29uc3QgaXNVcFRvRGF0ZSA9IGZpbGVDYWNoZUVudHJ5Py5tdGltZSA9PT0gZmlsZS5zdGF0Lm10aW1lXG4gICAgICAgICYmIGZpbGVDYWNoZUVudHJ5LnNpemUgPT09IGZpbGUuc3RhdC5zaXplXG4gICAgICAgICYmIE9iamVjdC5oYXNPd24oYXBwLm1ldGFkYXRhQ2FjaGUubWV0YWRhdGFDYWNoZSwgZmlsZUNhY2hlRW50cnkuaGFzaCk7XG4gICAgICBpZiAoIWlzVXBUb0RhdGUpIHtcbiAgICAgICAgYXdhaXQgYXBwLm1ldGFkYXRhQ2FjaGUuY29tcHV0ZUZpbGVNZXRhZGF0YUFzeW5jKGZpbGUpO1xuICAgICAgICBhd2FpdCBlbnN1cmVNZXRhZGF0YUNhY2hlUmVhZHkoYXBwKTtcbiAgICAgIH1cbiAgICAgIGNhY2hlID0gYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGZpbGUpO1xuICAgIH1cblxuICAgIGlmIChjYWNoZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gT25seSB0aGUgYm9keS1leHRlcm5hbCBwYXJzZSBuZWVkcyB0aGUgZmlsZSBjb250ZW50OyBmcm9udG1hdHRlciBwYXJzaW5nIHVzZXMgdGhlIGNhY2hlZFxuICAgIC8vIGZyb250bWF0dGVyLCBzbyBhdm9pZCByZWFkaW5nIHRoZSBjb250ZW50IHVubGVzcyBpdCBpcyBhY3R1YWxseSBuZWVkZWQuXG4gICAgY29uc3QgY29udGVudCA9IG9wdGlvbnMuc2hvdWxkUGFyc2VFeHRlcm5hbExpbmtzID8gYXdhaXQgYXBwLnZhdWx0LmNhY2hlZFJlYWQoZmlsZSkgOiAnJztcbiAgICByZXR1cm4gdG9QYXJzZWRDYWNoZWRNZXRhZGF0YUV4KHsgY2FjaGUsIGNvbnRlbnQsIG9wdGlvbnMgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKCFmaWxlIHx8IGZpbGUuZGVsZXRlZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGZyb250IG1hdHRlciBmcm9tIHRoZSBtZXRhZGF0YSBjYWNoZSBzYWZlbHkuXG4gKlxuICogSXQgcmVhZHMgdGhyb3VnaCB7QGxpbmsgZ2V0Q2FjaGVTYWZlfSwgc28gaXQgc2F2ZXMgYW55IG9wZW4gZWRpdG9yIHZpZXcgb2YgdGhlIG5vdGUgdGhhdCBoYXNcbiAqIHVuc2F2ZWQgY2hhbmdlcy4gU2VlIHtAbGluayBnZXRDYWNoZVNhZmV9IGZvciB3aGVuIHRoYXQgc2F2ZSBtYXR0ZXJzIGFuZCB3aGF0IHRvIHVzZSBpbnN0ZWFkLlxuICpcbiAqIEB0eXBlUGFyYW0gQ3VzdG9tRnJvbnRtYXR0ZXIgLSBUaGUgdHlwZSBvZiBjdXN0b20gZnJvbnQgbWF0dGVyLlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gcmV0cmlldmUgdGhlIGZyb250IG1hdHRlciBmcm9tLlxuICogQHJldHVybnMgVGhlIGNvbWJpbmVkIGZyb250IG1hdHRlci5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldEZyb250bWF0dGVyU2FmZTxDdXN0b21Gcm9udG1hdHRlciA9IHVua25vd24+KGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogUHJvbWlzZTxDb21iaW5lZEZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPj4ge1xuICBjb25zdCBjYWNoZSA9IGF3YWl0IGdldENhY2hlU2FmZShhcHAsIHBhdGhPckZpbGUpO1xuICByZXR1cm4gKGNhY2hlPy5mcm9udG1hdHRlciA/PyB7fSkgYXMgQ29tYmluZWRGcm9udG1hdHRlcjxDdXN0b21Gcm9udG1hdHRlcj47XG59XG5cbi8qKlxuICogUmV0cmlldmVzIHRoZSBzZWxlY3RlZCBsaW5rcyBmcm9tIHRoZSBwcm92aWRlZCBjYWNoZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJldHJpZXZpbmcgdGhlIGxpbmtzLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgcmVmZXJlbmNlcyByZXByZXNlbnRpbmcgdGhlIHNlbGVjdGVkIGxpbmtzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlua3MocGFyYW1zOiBHZXRMaW5rc1BhcmFtcyk6IFJlZmVyZW5jZVtdIHtcbiAgY29uc3Qge1xuICAgIGNhY2hlLFxuICAgIHNob3VsZEluY2x1ZGVFbWJlZHMgPSB0cnVlLFxuICAgIHNob3VsZEluY2x1ZGVFeHRlcm5hbExpbmtzID0gZmFsc2UsXG4gICAgc2hvdWxkSW5jbHVkZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyA9IGZhbHNlLFxuICAgIHNob3VsZEluY2x1ZGVGcm9udG1hdHRlckxpbmtzID0gdHJ1ZSxcbiAgICBzaG91bGRJbmNsdWRlTXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyA9IGZhbHNlLFxuICAgIHNob3VsZEluY2x1ZGVNdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rcyA9IGZhbHNlLFxuICAgIHNob3VsZEluY2x1ZGVSZWZlcmVuY2VzID0gdHJ1ZVxuICB9ID0gcGFyYW1zO1xuXG4gIGxldCBsaW5rczogUmVmZXJlbmNlW10gPSBbXG4gICAgLi4uKHNob3VsZEluY2x1ZGVSZWZlcmVuY2VzID8gY2FjaGUubGlua3MgPz8gW10gOiBbXSksXG4gICAgLi4uKHNob3VsZEluY2x1ZGVFbWJlZHMgPyBjYWNoZS5lbWJlZHMgPz8gW10gOiBbXSksXG4gICAgLi4uKHNob3VsZEluY2x1ZGVGcm9udG1hdHRlckxpbmtzID8gY2FjaGUuZnJvbnRtYXR0ZXJMaW5rcyA/PyBbXSA6IFtdKVxuICBdO1xuXG4gIGNvbnN0IGZlYXR1cmVMaW5rU2VsZWN0b3JzOiBGZWF0dXJlTGlua1NlbGVjdG9yW10gPSBbXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246ICdib2R5IGV4dGVybmFsIGxpbmtzJyxcbiAgICAgIGZlYXR1cmU6IENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlLkV4dGVybmFsTGlua3MsXG4gICAgICBzZWxlY3Q6IChjYWNoZUV4KSA9PiBjYWNoZUV4LmV4dGVybmFsTGlua3MsXG4gICAgICBzaG91bGRJbmNsdWRlOiBzaG91bGRJbmNsdWRlRXh0ZXJuYWxMaW5rc1xuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246ICdmcm9udG1hdHRlciBleHRlcm5hbCBsaW5rcycsXG4gICAgICBmZWF0dXJlOiBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5Gcm9udG1hdHRlckV4dGVybmFsTGlua3MsXG4gICAgICBzZWxlY3Q6IChjYWNoZUV4KSA9PiBjYWNoZUV4LmZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyxcbiAgICAgIHNob3VsZEluY2x1ZGU6IHNob3VsZEluY2x1ZGVGcm9udG1hdHRlckV4dGVybmFsTGlua3NcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnbXVsdGktdmFsdWUgZnJvbnRtYXR0ZXIgZXh0ZXJuYWwgbGlua3MnLFxuICAgICAgZmVhdHVyZTogQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuTXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyxcbiAgICAgIHNlbGVjdDogKGNhY2hlRXgpID0+IGNhY2hlRXgubXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyxcbiAgICAgIHNob3VsZEluY2x1ZGU6IHNob3VsZEluY2x1ZGVNdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogJ211bHRpLXZhbHVlIGZyb250bWF0dGVyIGxpbmtzJyxcbiAgICAgIGZlYXR1cmU6IENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlLk11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzLFxuICAgICAgc2VsZWN0OiAoY2FjaGVFeCkgPT4gY2FjaGVFeC5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rcyxcbiAgICAgIHNob3VsZEluY2x1ZGU6IHNob3VsZEluY2x1ZGVNdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rc1xuICAgIH1cbiAgXTtcblxuICBmb3IgKGNvbnN0IGZlYXR1cmVMaW5rU2VsZWN0b3Igb2YgZmVhdHVyZUxpbmtTZWxlY3RvcnMpIHtcbiAgICBpZiAoIWZlYXR1cmVMaW5rU2VsZWN0b3Iuc2hvdWxkSW5jbHVkZSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCFpc0NhY2hlZE1ldGFkYXRhRXgoY2FjaGUpIHx8ICFjYWNoZS5mZWF0dXJlcy5pbmNsdWRlcyhmZWF0dXJlTGlua1NlbGVjdG9yLmZlYXR1cmUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBpbmNsdWRlICR7ZmVhdHVyZUxpbmtTZWxlY3Rvci5kZXNjcmlwdGlvbn06IHRoZSBjYWNoZSB3YXMgbm90IGNvbXB1dGVkIHdpdGggdGhlICR7ZmVhdHVyZUxpbmtTZWxlY3Rvci5mZWF0dXJlfSBmZWF0dXJlLmApO1xuICAgIH1cblxuICAgIGxpbmtzLnB1c2goLi4uZW5zdXJlTm9uTnVsbGFibGUoZmVhdHVyZUxpbmtTZWxlY3Rvci5zZWxlY3QoY2FjaGUpKSk7XG4gIH1cblxuICBzb3J0UmVmZXJlbmNlcyhsaW5rcyk7XG5cbiAgLy8gQlVHOiBodHRwczovL2ZvcnVtLm9ic2lkaWFuLm1kL3QvYnVnLWR1cGxpY2F0ZWQtbGlua3MtaW4tbWV0YWRhdGFjYWNoZS1pbnNpZGUtZm9vdG5vdGVzLzg1NTUxXG4gIGxpbmtzID0gbGlua3MuZmlsdGVyKChsaW5rLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgcHJldmlvdXNMaW5rID0gZW5zdXJlTm9uTnVsbGFibGUobGlua3NbaW5kZXggLSAxXSk7XG5cbiAgICBpZiAoaXNSZWZlcmVuY2VDYWNoZShsaW5rKSAmJiBpc1JlZmVyZW5jZUNhY2hlKHByZXZpb3VzTGluaykpIHtcbiAgICAgIHJldHVybiBsaW5rLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCAhPT0gcHJldmlvdXNMaW5rLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldDtcbiAgICB9XG5cbiAgICBpZiAoaXNGcm9udG1hdHRlckxpbmtDYWNoZShsaW5rKSAmJiBpc0Zyb250bWF0dGVyTGlua0NhY2hlKHByZXZpb3VzTGluaykpIHtcbiAgICAgIGNvbnN0IGxpbmtTdGFydE9mZnNldCA9IGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyhsaW5rKSA/IGxpbmsuc3RhcnRPZmZzZXQgOiAwO1xuICAgICAgY29uc3QgcHJldmlvdXNMaW5rU3RhcnRPZmZzZXQgPSBpc0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMocHJldmlvdXNMaW5rKSA/IHByZXZpb3VzTGluay5zdGFydE9mZnNldCA6IDA7XG4gICAgICByZXR1cm4gbGluay5rZXkgIT09IHByZXZpb3VzTGluay5rZXkgfHwgaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKGxpbmspICE9PSBpc0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMocHJldmlvdXNMaW5rKVxuICAgICAgICB8fCBsaW5rU3RhcnRPZmZzZXQgIT09IHByZXZpb3VzTGlua1N0YXJ0T2Zmc2V0O1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9KTtcblxuICByZXR1cm4gbGlua3M7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgYmFja2xpbmsgY2FjaGUgcGx1Z2luIGlzIGN1cnJlbnRseSBsb2FkZWQgLSBlaXRoZXIgYEFkdmFuY2VkIE1ldGFkYXRhIENhY2hlYCAoe0BsaW5rIEFEVkFOQ0VEX01FVEFEQVRBX0NBQ0hFX1BMVUdJTl9JRH0pIG9yIGl0cyByZXRpcmVkIHByZWRlY2Vzc29yIGBCYWNrbGluayBDYWNoZWAgKHtAbGluayBCQUNLTElOS19DQUNIRV9QTFVHSU5fSUR9KS5cbiAqXG4gKiBTdWNoIGEgcGx1Z2luIGtlZXBzIGEgZHJhaW4tb24tcmVhZCBiYWNrbGluayBpbmRleCBhbmQgaW5kZXhlcyBjYW52YXMgbWV0YWRhdGEsIHNvIGEgY2FsbGVyIHRoYXQgY29tcGVuc2F0ZXMgZm9yIE9ic2lkaWFuJ3Mgb3duIGdhcHMgY2FuIHN0YW5kIGRvd24gd2hpbGUgb25lIGlzIHByZXNlbnQuIEJvdGggaWRzIGFyZSByZWNvZ25pemVkOyB7QGxpbmsgQkFDS0xJTktfQ0FDSEVfUExVR0lOX0lEfSByZWNvcmRzIHdoZW4gdGhlIHJldGlyZWQgb25lIG1heSBiZSBkcm9wcGVkLlxuICpcbiAqIFRoaXMgcmVhZHMgdGhlIExPQURFRCBwbHVnaW4gaW5zdGFuY2UgcmF0aGVyIHRoYW4gYGFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zYCwgZGVsaWJlcmF0ZWx5OiB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGUgcGx1Z2luJ3MgcGF0Y2hlcyBhcmUgaW4gcGxhY2UgcmlnaHQgbm93LCBhbmQgdGhleSBhcmUgbm90IHVudGlsIGl0IGhhcyBsb2FkZWQuIFBsdWdpbnMgbG9hZCBpbiBhbiB1bnNwZWNpZmllZCBvcmRlciwgc28gY2FsbCB0aGlzIGZyb20gYSB1c2VyLWRyaXZlbiBwYXRoIHJhdGhlciB0aGFuIGZyb20gcGx1Z2luIGxvYWQgLSBzZWUgcnVsZSBMMjUgaW4gYEFHRU5UUy5tZGAuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgYSBiYWNrbGluayBjYWNoZSBwbHVnaW4gaXMgbG9hZGVkLCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc0JhY2tsaW5rQ2FjaGVQbHVnaW4oYXBwOiBBcHApOiBib29sZWFuIHtcbiAgcmV0dXJuIGFwcC5wbHVnaW5zLmdldFBsdWdpbihBRFZBTkNFRF9NRVRBREFUQV9DQUNIRV9QTFVHSU5fSUQpICE9PSBudWxsIHx8IGFwcC5wbHVnaW5zLmdldFBsdWdpbihCQUNLTElOS19DQUNIRV9QTFVHSU5fSUQpICE9PSBudWxsO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIGNhY2hlIGlzIGEge0BsaW5rIENhY2hlZE1ldGFkYXRhRXh9IChpLmUuIGl0IHdhcyBjb21wdXRlZCB3aXRoIGV4dGVybmFsLWxpbmtcbiAqIHBhcnNpbmcgZW5hYmxlZCkuXG4gKlxuICogQHBhcmFtIGNhY2hlIC0gVGhlIGNhY2hlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBjYWNoZSBpcyBhIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4fSwgb3RoZXJ3aXNlIGBmYWxzZWAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NhY2hlZE1ldGFkYXRhRXgoY2FjaGU6IENhY2hlZE1ldGFkYXRhKTogY2FjaGUgaXMgQ2FjaGVkTWV0YWRhdGFFeCB7XG4gIHJldHVybiAnZmVhdHVyZXMnIGluIGNhY2hlO1xufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgbWV0YWRhdGEgZm9yIGEgZ2l2ZW4gc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtICRzdHJpbmcgLSBUaGUgc3RyaW5nIHRvIHBhcnNlIHRoZSBtZXRhZGF0YSBmb3IuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJzZSBvcHRpb25zIGNvbnRyb2xsaW5nIHdoaWNoIGFkZGl0aW9uYWwgbGlua3MgdG8gcGFyc2UuXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIG1ldGFkYXRhLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFyc2VNZXRhZGF0YShhcHA6IEFwcCwgJHN0cmluZzogc3RyaW5nLCBvcHRpb25zOiBQYXJzZU1ldGFkYXRhT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxDYWNoZWRNZXRhZGF0YUV4PiB7XG4gIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgY29uc3QgYnVmZmVyID0gZW5jb2Rlci5lbmNvZGUoJHN0cmluZykuYnVmZmVyO1xuICBjb25zdCBjYWNoZSA9IGF3YWl0IGFwcC5tZXRhZGF0YUNhY2hlLmNvbXB1dGVNZXRhZGF0YUFzeW5jKGJ1ZmZlcikgPz8ge307XG4gIHJldHVybiB0b1BhcnNlZENhY2hlZE1ldGFkYXRhRXgoeyBjYWNoZSwgY29udGVudDogJHN0cmluZywgb3B0aW9ucyB9KTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgdGhlIGZpbGUgY2FjaGUgZm9yIGEgbm9uLWV4aXN0aW5nIGZpbGUuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZWdpc3RlcmluZyB0aGUgZmlsZSBjYWNoZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIERpc3Bvc2FibGV9IHRoYXQgdW5yZWdpc3RlcnMgdGhlIGZpbGUgY2FjaGUgd2hlbiBkaXNwb3NlZCwgZm9yIHVzZSB3aXRoIGB1c2luZ2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckZpbGVDYWNoZUZvck5vbkV4aXN0aW5nRmlsZShwYXJhbXM6IFJlZ2lzdGVyRmlsZUNhY2hlRm9yTm9uRXhpc3RpbmdGaWxlUGFyYW1zKTogRGlzcG9zYWJsZSB7XG4gIGNvbnN0IHsgYXBwLCBjYWNoZSwgcGF0aE9yRmlsZSB9ID0gcGFyYW1zO1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZSwgc2hvdWxkSW5jbHVkZU5vbkV4aXN0aW5nOiB0cnVlIH0pO1xuICBpZiAoIWZpbGUuZGVsZXRlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRmlsZSBpcyBleGlzdGluZycpO1xuICB9XG5cbiAgYXBwLm1ldGFkYXRhQ2FjaGUuZmlsZUNhY2hlW2ZpbGUucGF0aF0gPSB7XG4gICAgaGFzaDogZmlsZS5wYXRoLFxuICAgIG10aW1lOiAwLFxuICAgIHNpemU6IDBcbiAgfTtcblxuICBhcHAubWV0YWRhdGFDYWNoZS5tZXRhZGF0YUNhY2hlW2ZpbGUucGF0aF0gPSBjYWNoZTtcblxuICByZXR1cm4gbmV3IENhbGxiYWNrRGlzcG9zYWJsZSh7XG4gICAgY2FsbGJhY2s6ICgpOiB2b2lkID0+IHtcbiAgICAgIHVucmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGUoYXBwLCBmaWxlKTtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBmaWxlcyBpbiB0aGUgT2JzaWRpYW4gYXBwLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIGZpbGVzIC0gVGhlIGZpbGVzIHRvIHJlZ2lzdGVyLlxuICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCB1bnJlZ2lzdGVycyB0aGUgZmlsZXMgd2hlbiBkaXNwb3NlZCwgZm9yIHVzZSB3aXRoIGB1c2luZ2AuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlckZpbGVzKGFwcDogQXBwLCBmaWxlczogVEFic3RyYWN0RmlsZVtdKTogRGlzcG9zYWJsZSB7XG4gIGNvbnN0IHJlZ2lzdGVyZWRGaWxlc0NvdW50cyA9IGdldFJlZ2lzdGVyZWRGaWxlc0NvdW50cygpO1xuXG4gIGZvciAobGV0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICB3aGlsZSAoZmlsZS5kZWxldGVkKSB7XG4gICAgICBsZXQgY291bnQgPSByZWdpc3RlcmVkRmlsZXNDb3VudHMuZ2V0KGZpbGUucGF0aCkgPz8gMDtcbiAgICAgIGNvdW50Kys7XG4gICAgICByZWdpc3RlcmVkRmlsZXNDb3VudHMuc2V0KGZpbGUucGF0aCwgY291bnQpO1xuXG4gICAgICBhcHAudmF1bHQuZmlsZU1hcFtmaWxlLnBhdGhdID0gZmlsZTtcblxuICAgICAgaWYgKGlzRmlsZShmaWxlKSkge1xuICAgICAgICBhcHAubWV0YWRhdGFDYWNoZS51bmlxdWVGaWxlTG9va3VwLmFkZChmaWxlLm5hbWUudG9Mb3dlckNhc2UoKSwgZmlsZSk7XG4gICAgICB9XG5cbiAgICAgIGZpbGUgPSBnZXRGb2xkZXIoe1xuICAgICAgICBhcHAsXG4gICAgICAgIHBhdGhPckZvbGRlcjogcGFyZW50Rm9sZGVyUGF0aChmaWxlLnBhdGgpLFxuICAgICAgICBzaG91bGRJbmNsdWRlTm9uRXhpc3Rpbmc6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgQ2FsbGJhY2tEaXNwb3NhYmxlKHtcbiAgICBjYWxsYmFjazogKCk6IHZvaWQgPT4ge1xuICAgICAgdW5yZWdpc3RlckZpbGVzKGFwcCwgZmlsZXMpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogVW5yZWdpc3RlcnMgdGhlIGZpbGUgY2FjaGUgZm9yIGEgbm9uLWV4aXN0aW5nIGZpbGUuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgdG8gdW5yZWdpc3RlciB0aGUgZmlsZSBjYWNoZSBmb3IuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bnJlZ2lzdGVyRmlsZUNhY2hlRm9yTm9uRXhpc3RpbmdGaWxlKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogdm9pZCB7XG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKHsgYXBwLCBwYXRoT3JGaWxlLCBzaG91bGRJbmNsdWRlTm9uRXhpc3Rpbmc6IHRydWUgfSk7XG4gIGlmICghZmlsZS5kZWxldGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGaWxlIGlzIGV4aXN0aW5nJyk7XG4gIH1cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZSAtLSBXZSBoYXZlIG5vIG90aGVyIHdheSB0byBkZWxldGUgdGhlIHByb3BlcnR5LlxuICBkZWxldGUgYXBwLm1ldGFkYXRhQ2FjaGUuZmlsZUNhY2hlW2ZpbGUucGF0aF07XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gV2UgaGF2ZSBubyBvdGhlciB3YXkgdG8gZGVsZXRlIHRoZSBwcm9wZXJ0eS5cbiAgZGVsZXRlIGFwcC5tZXRhZGF0YUNhY2hlLm1ldGFkYXRhQ2FjaGVbZmlsZS5wYXRoXTtcbn1cblxuLyoqXG4gKiBVbnJlZ2lzdGVycyBmaWxlcyBmcm9tIHRoZSBPYnNpZGlhbiBhcHAuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gZmlsZXMgLSBUaGUgZmlsZXMgdG8gdW5yZWdpc3Rlci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVucmVnaXN0ZXJGaWxlcyhhcHA6IEFwcCwgZmlsZXM6IFRBYnN0cmFjdEZpbGVbXSk6IHZvaWQge1xuICBjb25zdCByZWdpc3RlcmVkRmlsZXNDb3VudHMgPSBnZXRSZWdpc3RlcmVkRmlsZXNDb3VudHMoKTtcblxuICBmb3IgKGxldCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgd2hpbGUgKGZpbGUuZGVsZXRlZCkge1xuICAgICAgbGV0IGNvdW50ID0gcmVnaXN0ZXJlZEZpbGVzQ291bnRzLmdldChmaWxlLnBhdGgpID8/IDE7XG4gICAgICBjb3VudC0tO1xuICAgICAgcmVnaXN0ZXJlZEZpbGVzQ291bnRzLnNldChmaWxlLnBhdGgsIGNvdW50KTtcbiAgICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgICByZWdpc3RlcmVkRmlsZXNDb3VudHMuZGVsZXRlKGZpbGUucGF0aCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGUgLS0gV2UgaGF2ZSBubyBvdGhlciB3YXkgdG8gZGVsZXRlIHRoZSBwcm9wZXJ0eS5cbiAgICAgICAgZGVsZXRlIGFwcC52YXVsdC5maWxlTWFwW2ZpbGUucGF0aF07XG5cbiAgICAgICAgaWYgKGlzRmlsZShmaWxlKSkge1xuICAgICAgICAgIGFwcC5tZXRhZGF0YUNhY2hlLnVuaXF1ZUZpbGVMb29rdXAucmVtb3ZlKGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLCBmaWxlKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmaWxlID0gZ2V0Rm9sZGVyKHtcbiAgICAgICAgYXBwLFxuICAgICAgICBwYXRoT3JGb2xkZXI6IHBhcmVudEZvbGRlclBhdGgoZmlsZS5wYXRoKSxcbiAgICAgICAgc2hvdWxkSW5jbHVkZU5vbkV4aXN0aW5nOiB0cnVlXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEFkdmFuY2VkTWV0YWRhdGFDYWNoZUJhY2tsaW5rc0FwaSgpOiBBZHZhbmNlZE1ldGFkYXRhQ2FjaGVCYWNrbGlua3NBcGkgfCBudWxsIHtcbiAgcmV0dXJuIGZpbmRQbHVnaW5BcGk8QWR2YW5jZWRNZXRhZGF0YUNhY2hlQmFja2xpbmtzQXBpPih7XG4gICAgYXBpVmVyc2lvblJhbmdlOiBBRFZBTkNFRF9NRVRBREFUQV9DQUNIRV9CQUNLTElOS1NfQVBJX1ZFUlNJT05fUkFOR0UsXG4gICAgY29udHJhY3Q6IEFEVkFOQ0VEX01FVEFEQVRBX0NBQ0hFX0JBQ0tMSU5LU19BUElfQ09OVFJBQ1QsXG4gICAgcGx1Z2luSWQ6IEFEVkFOQ0VEX01FVEFEQVRBX0NBQ0hFX1BMVUdJTl9JRFxuICB9KTtcbn1cblxuZnVuY3Rpb24gZ2V0UmVnaXN0ZXJlZEZpbGVzQ291bnRzKCk6IE1hcDxzdHJpbmcsIG51bWJlcj4ge1xuICByZXR1cm4gZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlKCdyZWdpc3RlcmVkRmlsZXNDb3VudHMnLCBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpKS52YWx1ZTtcbn1cblxuLyoqXG4gKiBTdHJ1Y3R1cmFsbHkgcmVjb2duaXplcyB0aGUgYmFja2xpbmtzIGRpY3Rpb25hcnkgYW5vdGhlciBwbHVnaW4ncyBjb3B5IGJ1aWx0LCBvciBgbnVsbGAuIFRoZSBjbGFzcyBpdCB3YXMgYnVpbHQgZnJvbSBsaXZlcyBpbiB0aGF0IGNvcHksIHNvIGBpbnN0YW5jZW9mYCBjYW5ub3QgYmUgdXNlZCAocnVsZSBMOSBpbiBgQUdFTlRTLm1kYCkuXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgdmFsdWUgaXMgYG51bGxgIG9yIHJlYWRzIGFzIGEgYmFja2xpbmtzIGRpY3Rpb25hcnkuXG4gKi9cbmZ1bmN0aW9uIGlzTnVsbGFibGVCYWNrbGlua3NEaWN0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgQ3VzdG9tQXJyYXlEaWN0PFJlZmVyZW5jZT4gfCBudWxsIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsXG4gICAgfHwgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCdcbiAgICAgICYmIFJlZmxlY3QuZ2V0KHZhbHVlLCAnZGF0YScpIGluc3RhbmNlb2YgTWFwXG4gICAgICAmJiB0eXBlb2YgUmVmbGVjdC5nZXQodmFsdWUsICdnZXQnKSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgJiYgdHlwZW9mIFJlZmxlY3QuZ2V0KHZhbHVlLCAna2V5cycpID09PSAnZnVuY3Rpb24nKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VFeHRlcm5hbEJvZHlMaW5rcyhjb250ZW50OiBzdHJpbmcsIGNhY2hlOiBDYWNoZWRNZXRhZGF0YSk6IFBhcnNlTGlua1JlZmVyZW5jZVtdIHtcbiAgY29uc3QgZnJvbnRtYXR0ZXJFbmRPZmZzZXQgPSBjYWNoZS5mcm9udG1hdHRlclBvc2l0aW9uPy5lbmQub2Zmc2V0ID8/IDA7XG4gIHJldHVybiBwYXJzZUxpbmtzKGNvbnRlbnQpXG4gICAgLmZpbHRlcigocGFyc2VMaW5rUmVzdWx0KSA9PiBwYXJzZUxpbmtSZXN1bHQuaXNFeHRlcm5hbCAmJiBwYXJzZUxpbmtSZXN1bHQuc3RhcnRPZmZzZXQgPj0gZnJvbnRtYXR0ZXJFbmRPZmZzZXQpXG4gICAgLm1hcCgocGFyc2VMaW5rUmVzdWx0KSA9PiB0b1BhcnNlTGlua1JlZmVyZW5jZSh7IGNvbnRlbnQsIHBhcnNlTGlua1Jlc3VsdCB9KSk7XG59XG5cbmZ1bmN0aW9uIHRvUGFyc2VkQ2FjaGVkTWV0YWRhdGFFeChwYXJhbXM6IFRvUGFyc2VkQ2FjaGVkTWV0YWRhdGFFeFBhcmFtcyk6IENhY2hlZE1ldGFkYXRhRXgge1xuICBjb25zdCB7IGNhY2hlLCBjb250ZW50LCBvcHRpb25zIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGZlYXR1cmVzOiBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZVtdID0gW0NhY2hlZE1ldGFkYXRhRXhGZWF0dXJlLk5hdGl2ZV07XG4gIGNvbnN0IHJlc3VsdDogQ2FjaGVkTWV0YWRhdGFFeCA9IHsgLi4uY2FjaGUsIGZlYXR1cmVzIH07XG5cbiAgaWYgKG9wdGlvbnMuc2hvdWxkUGFyc2VFeHRlcm5hbExpbmtzKSB7XG4gICAgcmVzdWx0LmV4dGVybmFsTGlua3MgPSBwYXJzZUV4dGVybmFsQm9keUxpbmtzKGNvbnRlbnQsIGNhY2hlKTtcbiAgICBmZWF0dXJlcy5wdXNoKENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlLkV4dGVybmFsTGlua3MpO1xuICB9XG5cbiAgaWYgKFxuICAgIG9wdGlvbnMuc2hvdWxkUGFyc2VGcm9udG1hdHRlckV4dGVybmFsTGlua3NcbiAgICB8fCBvcHRpb25zLnNob3VsZFBhcnNlTXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rc1xuICAgIHx8IG9wdGlvbnMuc2hvdWxkUGFyc2VNdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rc1xuICApIHtcbiAgICBjb25zdCBmcm9udG1hdHRlckxpbmtzID0gcGFyc2VGcm9udG1hdHRlckxpbmtzKGNhY2hlLmZyb250bWF0dGVyKTtcblxuICAgIGlmIChvcHRpb25zLnNob3VsZFBhcnNlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzKSB7XG4gICAgICByZXN1bHQuZnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzID0gZnJvbnRtYXR0ZXJMaW5rcy5mcm9udG1hdHRlckV4dGVybmFsTGlua3M7XG4gICAgICBmZWF0dXJlcy5wdXNoKENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlLkZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc2hvdWxkUGFyc2VNdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzKSB7XG4gICAgICByZXN1bHQubXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyA9IGZyb250bWF0dGVyTGlua3MubXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcztcbiAgICAgIGZlYXR1cmVzLnB1c2goQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuTXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuc2hvdWxkUGFyc2VNdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rcykge1xuICAgICAgcmVzdWx0Lm11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzID0gZnJvbnRtYXR0ZXJMaW5rcy5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rcztcbiAgICAgIGZlYXR1cmVzLnB1c2goQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuTXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3MpO1xuICAgIH1c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
|
|
562
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL21ldGFkYXRhLWNhY2hlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhpcyBtb2R1bGUgcHJvdmlkZXMgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgbWV0YWRhdGEgY2FjaGUgaW4gT2JzaWRpYW4uXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcGlDb250cmFjdCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hcGktY29udHJhY3QnO1xuaW1wb3J0IHR5cGUgeyBSZXRyeU9wdGlvbnMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21BcnJheURpY3QgfSBmcm9tICdAb2JzaWRpYW4tdHlwaW5ncy9vYnNpZGlhbi1wdWJsaWMtbGF0ZXN0JztcbmltcG9ydCB0eXBlIHtcbiAgQXBwLFxuICBDYWNoZWRNZXRhZGF0YSxcbiAgUmVmZXJlbmNlLFxuICBUQWJzdHJhY3RGaWxlXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHtcbiAgY3JlYXRlQXJndW1lbnRzU2NoZW1hLFxuICBjcmVhdGVUeXBlR3VhcmRTY2hlbWFcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FwaS1jb250cmFjdCc7XG5pbXBvcnQgeyBDYWxsYmFja0Rpc3Bvc2FibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvZGlzcG9zYWJsZSc7XG5pbXBvcnQgeyBnZXROZXN0ZWRQcm9wZXJ0eVZhbHVlIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQgeyBlbnN1cmVOb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5pbXBvcnQge1xuICBDdXN0b21BcnJheURpY3RJbXBsLFxuICBpc0Zyb250bWF0dGVyTGlua0NhY2hlLFxuICBpc1JlZmVyZW5jZUNhY2hlLFxuICBwYXJlbnRGb2xkZXJQYXRoXG59IGZyb20gJ0BvYnNpZGlhbi10eXBpbmdzL29ic2lkaWFuLXB1YmxpYy1sYXRlc3QvaW1wbGVtZW50YXRpb25zJztcblxuaW1wb3J0IHR5cGUgeyBQYXRoT3JGaWxlIH0gZnJvbSAnLi9maWxlLXN5c3RlbS50cyc7XG5pbXBvcnQgdHlwZSB7IENvbWJpbmVkRnJvbnRtYXR0ZXIgfSBmcm9tICcuL2Zyb250bWF0dGVyLnRzJztcbmltcG9ydCB0eXBlIHtcbiAgUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2UsXG4gIFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlV2l0aE9mZnNldHMsXG4gIFBhcnNlTGlua1JlZmVyZW5jZVxufSBmcm9tICcuL3BhcnNlLWxpbmsudHMnO1xuXG5pbXBvcnQgeyByZXRyeVdpdGhUaW1lb3V0Tm90aWNlIH0gZnJvbSAnLi9hc3luYy13aXRoLW5vdGljZS50cyc7XG5pbXBvcnQgeyBnZXRJbmRleGVkQmFja2xpbmtzRm9yRmlsZSB9IGZyb20gJy4vYmFja2xpbmstaW5kZXgudHMnO1xuaW1wb3J0IHtcbiAgZ2V0RmlsZSxcbiAgZ2V0RmlsZU9yTnVsbCxcbiAgZ2V0Rm9sZGVyLFxuICBnZXRQYXRoLFxuICBpc0NhbnZhc0ZpbGUsXG4gIGlzRmlsZSxcbiAgaXNQYXRoT3JGaWxlXG59IGZyb20gJy4vZmlsZS1zeXN0ZW0udHMnO1xuaW1wb3J0IHtcbiAgaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzLFxuICB0b0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHNcbn0gZnJvbSAnLi9mcm9udG1hdHRlci1saW5rLWNhY2hlLXdpdGgtb2Zmc2V0cy50cyc7XG5pbXBvcnQgeyBwYXJzZUZyb250bWF0dGVyIH0gZnJvbSAnLi9mcm9udG1hdHRlci50cyc7XG5pbXBvcnQgeyB0IH0gZnJvbSAnLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHsgZ2V0T2JzaWRpYW5EZXZVdGlsc1N0YXRlIH0gZnJvbSAnLi9vYnNpZGlhbi1kZXYtdXRpbHMtc3RhdGUudHMnO1xuaW1wb3J0IHtcbiAgcGFyc2VGcm9udG1hdHRlckxpbmtzLFxuICBwYXJzZUxpbmtzLFxuICB0b1BhcnNlTGlua1JlZmVyZW5jZVxufSBmcm9tICcuL3BhcnNlLWxpbmsudHMnO1xuaW1wb3J0IHsgZmluZFBsdWdpbkFwaSB9IGZyb20gJy4vcGx1Z2luL3BsdWdpbi1hcGkudHMnO1xuaW1wb3J0IHsgc29ydFJlZmVyZW5jZXMgfSBmcm9tICcuL3JlZmVyZW5jZS50cyc7XG5pbXBvcnQge1xuICByZWFkU2FmZSxcbiAgc2F2ZU5vdGVcbn0gZnJvbSAnLi92YXVsdC50cyc7XG5cbi8qKlxuICogQSBwYXJzaW5nIGZlYXR1cmUgdGhhdCB3YXMgYXBwbGllZCB3aGVuIGNvbXB1dGluZyBhIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4fS5cbiAqL1xuZXhwb3J0IGVudW0gQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUge1xuICAvKipcbiAgICogVGhlIGV4dGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIHRoZSBub3RlIGNvbnRlbnQgYm9keS5cbiAgICovXG4gIEV4dGVybmFsTGlua3MgPSAnRXh0ZXJuYWxMaW5rcycsXG5cbiAgLyoqXG4gICAqIFRoZSBleHRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBzaW5nbGUtbGluayBub3RlIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICovXG4gIEZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyA9ICdGcm9udG1hdHRlckV4dGVybmFsTGlua3MnLFxuXG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gbXVsdGktbGluayBub3RlIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICovXG4gIE11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3MgPSAnTXVsdGlWYWx1ZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcycsXG5cbiAgLyoqXG4gICAqIFRoZSBpbnRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBtdWx0aS1saW5rIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLCB3aGljaCBPYnNpZGlhbiBkb2VzIG5vdCBuYXRpdmVseSBjYWNoZS5cbiAgICovXG4gIE11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzID0gJ011bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzJyxcblxuICAvKipcbiAgICogT2JzaWRpYW4ncyBuYXRpdmUgbWV0YWRhdGEgcGFyc2luZyAoaW50ZXJuYWwgbGlua3MsIGVtYmVkcywgZnJvbnRtYXR0ZXIgbGlua3MpLlxuICAgKi9cbiAgTmF0aXZlID0gJ05hdGl2ZSdcbn1cblxuLyoqXG4gKiBBbiBleHRlbmRlZCB7QGxpbmsgQ2FjaGVkTWV0YWRhdGF9IHRoYXQgcmVjb3JkcyB3aGljaCBwYXJzaW5nIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZX1zIHdlcmVcbiAqIGFwcGxpZWQgKHZpYSB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeC5mZWF0dXJlc30pIGFuZCBjYXJyaWVzIHRoZSByZXN1bHRpbmcgZXh0ZXJuYWwgbGlua3MuIEVhY2ggbGlua3NcbiAqIGFycmF5IGlzIHBvcHVsYXRlZCBvbmx5IHdoZW4gaXRzIGNvcnJlc3BvbmRpbmcgZmVhdHVyZSBpcyBwcmVzZW50IGluIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4LmZlYXR1cmVzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDYWNoZWRNZXRhZGF0YUV4IGV4dGVuZHMgQ2FjaGVkTWV0YWRhdGEge1xuICAvKipcbiAgICogVGhlIGV4dGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIHRoZSBub3RlIGNvbnRlbnQgYm9keS4gUG9wdWxhdGVkIG9ubHkgd2hlblxuICAgKiB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRXh0ZXJuYWxMaW5rc30gaXMgYXBwbGllZC5cbiAgICovXG4gIGV4dGVybmFsTGlua3M/OiBQYXJzZUxpbmtSZWZlcmVuY2VbXTtcblxuICAvKipcbiAgICogVGhlIHBhcnNpbmcgZmVhdHVyZXMgdGhhdCB3ZXJlIGFwcGxpZWQgd2hlbiBjb21wdXRpbmcgdGhpcyBjYWNoZS5cbiAgICovXG4gIHJlYWRvbmx5IGZlYXR1cmVzOiBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gc2luZ2xlLWxpbmsgKHNpbmdsZS12YWx1ZSkgbm90ZSBmcm9udG1hdHRlciB2YWx1ZXMuIFBvcHVsYXRlZCBvbmx5XG4gICAqIHdoZW4ge0BsaW5rIENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlLkZyb250bWF0dGVyRXh0ZXJuYWxMaW5rc30gaXMgYXBwbGllZC5cbiAgICovXG4gIGZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcz86IFBhcnNlTGlua0Zyb250bWF0dGVyUmVmZXJlbmNlW107XG5cbiAgLyoqXG4gICAqIFRoZSBleHRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBtdWx0aS1saW5rIChtdWx0aS12YWx1ZSkgbm90ZSBmcm9udG1hdHRlciB2YWx1ZXMuIFBvcHVsYXRlZCBvbmx5IHdoZW5cbiAgICoge0BsaW5rIENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlLk11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3N9IGlzIGFwcGxpZWQuXG4gICAqL1xuICBtdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzPzogUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VXaXRoT2Zmc2V0c1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgaW50ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gbXVsdGktbGluayAobXVsdGktdmFsdWUpIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLiBQb3B1bGF0ZWQgb25seSB3aGVuXG4gICAqIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5NdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rc30gaXMgYXBwbGllZC5cbiAgICovXG4gIG11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzPzogUGFyc2VMaW5rRnJvbnRtYXR0ZXJSZWZlcmVuY2VXaXRoT2Zmc2V0c1tdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0QmFja2xpbmtzRm9yRmlsZVNhZmVPcHRpb25zIGV4dGVuZHMgUmV0cnlPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2hvdyBhIHRpbWVvdXQgbm90aWNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFNob3dUaW1lb3V0Tm90aWNlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmV9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldEJhY2tsaW5rc0ZvckZpbGVTYWZlUGFyYW1zIGV4dGVuZHMgR2V0QmFja2xpbmtzRm9yRmlsZVNhZmVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBPYnNpZGlhbiBhcHBsaWNhdGlvbiBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgcGF0aCBvciBmaWxlIG9iamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhPckZpbGU6IFBhdGhPckZpbGU7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGdldENhY2hlU2FmZX0uXG4gKi9cbmV4cG9ydCB0eXBlIEdldENhY2hlU2FmZU9wdGlvbnMgPSBQYXJzZUNhY2hlT3B0aW9ucztcblxuLyoqXG4gKiBQYXJhbXMgZm9yIHtAbGluayBnZXRMaW5rc30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0TGlua3NQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNhY2hlZCBtZXRhZGF0YSB0byByZXRyaWV2ZSB0aGUgbGlua3MgZnJvbS5cbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlOiBDYWNoZWRNZXRhZGF0YTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBlbWJlZHMgKGBjYWNoZS5lbWJlZHNgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRW1iZWRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBleHRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSB0aGUgbm90ZSBib2R5LiBSZXF1aXJlcyB0aGUgY2FjaGUgdG8gYmUgYVxuICAgKiB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeH0uXG4gICAqXG4gICAqIEBkZWZhdWx0IGBmYWxzZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZEluY2x1ZGVFeHRlcm5hbExpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBleHRlcm5hbCBsaW5rcyBwYXJzZWQgZnJvbSBzaW5nbGUtbGluayAoc2luZ2xlLXZhbHVlKSBub3RlIGZyb250bWF0dGVyXG4gICAqIHZhbHVlcy4gUmVxdWlyZXMgdGhlIGNhY2hlIHRvIGJlIGEge0BsaW5rIENhY2hlZE1ldGFkYXRhRXh9LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoZSBmcm9udG1hdHRlciBsaW5rcyAoYGNhY2hlLmZyb250bWF0dGVyTGlua3NgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlRnJvbnRtYXR0ZXJMaW5rcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gaW5jbHVkZSB0aGUgZXh0ZXJuYWwgbGlua3MgcGFyc2VkIGZyb20gbXVsdGktbGluayAobXVsdGktdmFsdWUpIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLFxuICAgKiBpLmUuIHRoZSBvZmZzZXQtY2FycnlpbmcgZnJvbnRtYXR0ZXIgZXh0ZXJuYWwgbGlua3MgKG5hcnJvd2VkIHZpYVxuICAgKiB7QGxpbmsgaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzfSkuIFJlcXVpcmVzIHRoZSBjYWNoZSB0byBiZSBhIHtAbGluayBDYWNoZWRNZXRhZGF0YUV4fS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZU11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIGludGVybmFsIGxpbmtzIHBhcnNlZCBmcm9tIG11bHRpLWxpbmsgKG11bHRpLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICogUmVxdWlyZXMgdGhlIGNhY2hlIHRvIGJlIGEge0BsaW5rIENhY2hlZE1ldGFkYXRhRXh9LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlTXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGluY2x1ZGUgdGhlIHJlZmVyZW5jZSBsaW5rcyAoYGNhY2hlLmxpbmtzYCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkSW5jbHVkZVJlZmVyZW5jZXM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBwYXJzaW5nIHBlcmZvcm1lZCBieSB7QGxpbmsgZ2V0Q2FjaGVTYWZlfSBhbmQge0BsaW5rIHBhcnNlTWV0YWRhdGF9IGJleW9uZCBPYnNpZGlhbidzXG4gKiBuYXRpdmUgbWV0YWRhdGEgcGFyc2luZy4gRWFjaCBvcHRpb24gaXMgb3B0LWluOyBlbmFibGluZyBpdCBhZGRzIHRoZSBjb3JyZXNwb25kaW5nXG4gKiB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmV9IGFuZCBwb3B1bGF0ZXMgdGhlIG1hdGNoaW5nIGxpbmtzIGFycmF5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlQ2FjaGVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcGFyc2UgdGhlIGV4dGVybmFsIGxpbmtzIGZyb20gdGhlIG5vdGUgY29udGVudCBib2R5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRQYXJzZUV4dGVybmFsTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHBhcnNlIHRoZSBleHRlcm5hbCBsaW5rcyBmcm9tIHNpbmdsZS1saW5rIChzaW5nbGUtdmFsdWUpIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRQYXJzZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcGFyc2UgdGhlIGV4dGVybmFsIGxpbmtzIGZyb20gbXVsdGktbGluayAobXVsdGktdmFsdWUpIG5vdGUgZnJvbnRtYXR0ZXIgdmFsdWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRQYXJzZU11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHBhcnNlIHRoZSBpbnRlcm5hbCBsaW5rcyBmcm9tIG11bHRpLWxpbmsgKG11bHRpLXZhbHVlKSBub3RlIGZyb250bWF0dGVyIHZhbHVlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUGFyc2VNdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5rcz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIHBhcnNlTWV0YWRhdGF9LlxuICovXG5leHBvcnQgdHlwZSBQYXJzZU1ldGFkYXRhT3B0aW9ucyA9IFBhcnNlQ2FjaGVPcHRpb25zO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayByZWdpc3RlckZpbGVDYWNoZUZvck5vbkV4aXN0aW5nRmlsZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGVQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgZmlsZSBjYWNoZSB0byByZWdpc3Rlci5cbiAgICovXG4gIHJlYWRvbmx5IGNhY2hlOiBDYWNoZWRNZXRhZGF0YTtcblxuICAvKipcbiAgICogVGhlIHBhdGggb3IgZmlsZSB0byByZWdpc3RlciB0aGUgZmlsZSBjYWNoZSBmb3IuXG4gICAqL1xuICByZWFkb25seSBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlO1xufVxuXG4vKipcbiAqIFRoZSBzbGljZSBvZiBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgJ3MgcHVibGlzaGVkIEFQSSB0aGlzIG1vZHVsZSBjYWxscywgZGVjbGFyZWQgaGVyZSByYXRoZXIgdGhhbiBpbXBvcnRlZCxcbiAqIGJlY2F1c2UgdGhhdCBwbHVnaW4gaXMgbm90IGEgZGVwZW5kZW5jeSAocnVsZSBMOSBpbiBgQUdFTlRTLm1kYCkuIEl0cyBgYXBpLmQudHNgIGRlY2xhcmVzIHRoZSB3aG9sZSBvZiBpdC5cbiAqL1xuaW50ZXJmYWNlIEFkdmFuY2VkTWV0YWRhdGFDYWNoZUJhY2tsaW5rc0FwaSB7XG4gIC8qKlxuICAgKiBBbnN3ZXJzIGZyb20gdGhlIHBsdWdpbidzIGJhY2tsaW5rIGNhY2hlLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2JqZWN0LlxuICAgKiBAcmV0dXJucyBUaGUgYmFja2xpbmtzLCBvciBgbnVsbGAgd2hpbGUgdGhlIHBsdWdpbidzIGBCYWNrbGlua3NgIG1vZHVsZSBpcyBvZmYuXG4gICAqL1xuICBnZXRCYWNrbGlua3NGb3JGaWxlOiAocGF0aE9yRmlsZTogUGF0aE9yRmlsZSkgPT4gQ3VzdG9tQXJyYXlEaWN0PFJlZmVyZW5jZT4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBbnN3ZXJzIGZyb20gdGhlIHBsdWdpbidzIGJhY2tsaW5rIGNhY2hlIG9uY2UgdGhlIHBlbmRpbmcgZmlsZSBjaGFuZ2VzIGhhdmUgYmVlbiBwcm9jZXNzZWQuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSBvYmplY3QuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGJhY2tsaW5rcywgb3IgdG8gYG51bGxgIHdoaWxlIHRoZSBwbHVnaW4ncyBgQmFja2xpbmtzYFxuICAgKiAgIG1vZHVsZSBpcyBvZmYuXG4gICAqL1xuICBnZXRCYWNrbGlua3NGb3JGaWxlU2FmZTogKHBhdGhPckZpbGU6IFBhdGhPckZpbGUpID0+IFByb21pc2U8Q3VzdG9tQXJyYXlEaWN0PFJlZmVyZW5jZT4gfCBudWxsPjtcbn1cblxuLyoqXG4gKiBBIHNlbGVjdG9yIGZvciBhIGZlYXR1cmUtZ2F0ZWQgbGluayBjYXRlZ29yeSBpbiB7QGxpbmsgZ2V0TGlua3N9LlxuICovXG5pbnRlcmZhY2UgRmVhdHVyZUxpbmtTZWxlY3RvciB7XG4gIC8qKlxuICAgKiBBIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBsaW5rIGNhdGVnb3J5LCB1c2VkIGluIGVycm9yIG1lc3NhZ2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZlYXR1cmUgdGhhdCBtdXN0IGJlIHByZXNlbnQgaW4gdGhlIGNhY2hlIGZvciB0aGlzIGNhdGVnb3J5IHRvIGJlIGF2YWlsYWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGZlYXR1cmU6IENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlO1xuXG4gIC8qKlxuICAgKiBTZWxlY3RzIHRoZSBsaW5rcyBmb3IgdGhpcyBjYXRlZ29yeSBmcm9tIHRoZSBjYWNoZS5cbiAgICovXG4gIHNlbGVjdDogKGNhY2hlOiBDYWNoZWRNZXRhZGF0YUV4KSA9PiBSZWZlcmVuY2VbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0byBpbmNsdWRlIHRoaXMgY2F0ZWdvcnkuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRJbmNsdWRlOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFBhcmFtcyBmb3Ige0BsaW5rIHRvUGFyc2VkQ2FjaGVkTWV0YWRhdGFFeH0uXG4gKi9cbmludGVyZmFjZSBUb1BhcnNlZENhY2hlZE1ldGFkYXRhRXhQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHBsYWluIGNhY2hlZCBtZXRhZGF0YSB0byB3cmFwLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGU6IENhY2hlZE1ldGFkYXRhO1xuXG4gIC8qKlxuICAgKiBUaGUgbm90ZSBjb250ZW50IHRoZSBvZmZzZXRzIGluZGV4IGludG8sIHVzZWQgZm9yIGJvZHkgZXh0ZXJuYWwtbGluayBwYXJzaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFyc2Ugb3B0aW9ucyBjb250cm9sbGluZyB3aGljaCBsaW5rcyB0byBwYXJzZS5cbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbnM6IFBhcnNlQ2FjaGVPcHRpb25zO1xufVxuXG4vKipcbiAqIFRoZSBwbHVnaW4gaWQgb2YgdGhlIGBBZHZhbmNlZCBNZXRhZGF0YSBDYWNoZWAgcGx1Z2luLCB0aGUgc3VjY2Vzc29yIHRvIGBCYWNrbGluayBDYWNoZWAuXG4gKlxuICogVXNlZCBieSB7QGxpbmsgaGFzQmFja2xpbmtDYWNoZVBsdWdpbn0sIGFuZCBhcyB0aGUgcHJvdmlkZXIgaWQgdW5kZXIgd2hpY2gge0BsaW5rIGdldEJhY2tsaW5rc0ZvckZpbGVPclBhdGh9IGFuZCB7QGxpbmsgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmV9IGxvb2sgdXAgdGhlIHBsdWdpbidzIHB1Ymxpc2hlZCBBUEkuXG4gKi9cbmV4cG9ydCBjb25zdCBBRFZBTkNFRF9NRVRBREFUQV9DQUNIRV9QTFVHSU5fSUQgPSAnYWR2YW5jZWQtbWV0YWRhdGEtY2FjaGUnO1xuXG4vKipcbiAqIFRoZSBjb250cmFjdCB2ZXJzaW9ucyBvZiBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgJ3MgQVBJIHRoaXMgbW9kdWxlIGNvbXBpbGVkIGFnYWluc3QuIGAxLjMuMGAgaXMgdGhlIGZpcnN0IHRvIGNhcnJ5IHRoZSB0d28gYmFja2xpbmsgbWV0aG9kcy5cbiAqL1xuY29uc3QgQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfQkFDS0xJTktTX0FQSV9WRVJTSU9OX1JBTkdFID0gJ14xLjMuMCc7XG5cbi8qKlxuICogVGhlIHNjaGVtYXMgb2YgYSBiYWNrbGluayBtZXRob2QncyBwYXlsb2FkczogdGhlIG9uZSBwYXRoLW9yLWZpbGUgYXJndW1lbnQsIGFuZCB0aGUgYmFja2xpbmtzIG9yIGBudWxsYC5cbiAqXG4gKiBBIGNvcHkgb2YgdGhlIGBnZXRCYWNrbGlua3NGb3JGaWxlYCBhbmQgYGdldEJhY2tsaW5rc0ZvckZpbGVTYWZlYCBlbnRyaWVzIG9mIGBBRFZBTkNFRF9NRVRBREFUQV9DQUNIRV9BUElfQ09OVFJBQ1RgLCB3aGljaCBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgIHNoaXBzIGFzXG4gKiBpdHMgcm9vdCBgYXBpLWNvbnRyYWN0LnRzYCBhbmQgcHVibGlzaGVzLiBLZWVwIHRoZSBndWFyZHMgaW4gYWdyZWVtZW50IHdpdGggdGhhdCBmaWxlLCBzbyB0aGUgcHJvdmlkZXIgYW5kIHRoaXMgY29uc3VtZXIgY2hlY2sgb25lIGRlZmluaXRpb24uXG4gKi9cbmNvbnN0IEFEVkFOQ0VEX01FVEFEQVRBX0NBQ0hFX0JBQ0tMSU5LU19NRVRIT0RfQ09OVFJBQ1QgPSB7XG4gIGlucHV0OiBjcmVhdGVBcmd1bWVudHNTY2hlbWE8W3BhdGhPckZpbGU6IFBhdGhPckZpbGVdPihbeyBleHBlY3RlZDogJ2EgcGF0aCBvciBhIGZpbGUnLCB0eXBlR3VhcmQ6IGlzUGF0aE9yRmlsZSB9XSksXG4gIG91dHB1dDogY3JlYXRlVHlwZUd1YXJkU2NoZW1hKHsgZXhwZWN0ZWQ6ICdhIGJhY2tsaW5rcyBkaWN0aW9uYXJ5IG9yIG51bGwnLCB0eXBlR3VhcmQ6IGlzTnVsbGFibGVCYWNrbGlua3NEaWN0IH0pXG59O1xuXG4vKipcbiAqIFRoZSBjb250cmFjdCBvZiB0aGUgbWVtYmVycyBvZiBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgJ3MgQVBJIHRoaXMgbW9kdWxlIGNhbGxzLCBzbyBhIHJlY29yZCB0aGF0IGxhY2tzIGVpdGhlciBpcyBwYXNzZWQgb3ZlciwgYW5kIGEgcGF5bG9hZCB0aGF0IGJyZWFrcyBpdHMgc2lnbmF0dXJlIGlzIHJlcG9ydGVkIHdoaWxlIHRoZSBgUGx1Z2luQXBpYCBkZWJ1Z2dlciBpcyBvbi5cbiAqL1xuY29uc3QgQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfQkFDS0xJTktTX0FQSV9DT05UUkFDVDogQXBpQ29udHJhY3Q8QWR2YW5jZWRNZXRhZGF0YUNhY2hlQmFja2xpbmtzQXBpPiA9IHtcbiAgZ2V0QmFja2xpbmtzRm9yRmlsZTogQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfQkFDS0xJTktTX01FVEhPRF9DT05UUkFDVCxcbiAgZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmU6IEFEVkFOQ0VEX01FVEFEQVRBX0NBQ0hFX0JBQ0tMSU5LU19NRVRIT0RfQ09OVFJBQ1Rcbn07XG5cbi8qKlxuICogVGhlIHBsdWdpbiBpZCBvZiB0aGUgcmV0aXJlZCBgQmFja2xpbmsgQ2FjaGVgIHBsdWdpbiwgc3VwZXJzZWRlZCBieSB7QGxpbmsgQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfUExVR0lOX0lEfS5cbiAqXG4gKiBTdGlsbCByZWNvZ25pemVkIGJ5IHtAbGluayBoYXNCYWNrbGlua0NhY2hlUGx1Z2lufSwgZGVsaWJlcmF0ZWx5LiBSZW1vdmluZyBhIHBsdWdpbiBmcm9tIHRoZSBjb21tdW5pdHkgcmVnaXN0cnkgYmxvY2tzIG5ldyBpbnN0YWxsczsgaXQgdW5pbnN0YWxscyBub3RoaW5nLCBzbyBldmVyeSBleGlzdGluZyB1c2VyIGtlZXBzIGl0IHVudGlsIHRoZXkgbWlncmF0ZSBieSBoYW5kLlxuICpcbiAqIEl0IG1heSBiZSBkcm9wcGVkIHdoZW4gYWxsIHRocmVlIG9mIHRoZSBmb2xsb3dpbmcgaG9sZCwgYW5kIG5vdCBiZWZvcmU6IGBBZHZhbmNlZCBNZXRhZGF0YSBDYWNoZWAgaXMgbGlzdGVkIGluIHRoZSBjb21tdW5pdHkgcmVnaXN0cnksIHNvIG1pZ3JhdGluZyBpcyBwb3NzaWJsZSBhdCBhbGw7IHRoZSBmaW5hbCBgQmFja2xpbmsgQ2FjaGVgIGhhbmRvdmVyIHJlbGVhc2UgaGFzIGJlZW4gb3V0IGZvciBhdCBsZWFzdCB0d2VsdmUgbW9udGhzOyBhbmQgdGhpcyBsaWJyYXJ5IGlzIGN1dHRpbmcgYSBtYWpvciByZWxlYXNlIGFueXdheSwgYmVjYXVzZSBkcm9wcGluZyB0aGUgaWQgc2lsZW50bHkgdW4tZ2F0ZXMgY2FudmFzIGxpbmsgaGFuZGxpbmcgZm9yIGFueW9uZSB3aG8gaGFzIG5vdCBtaWdyYXRlZC4gVGhlcmUgaXMgbm8gY29zdCBwcmVzc3VyZSB0byBkcm9wIGl0IGVhcmxpZXIgLSByZWNvZ25pemluZyBhIGRlYWQgaWQgaXMgb25lIHN0cmluZyBjb21wYXJpc29uIG9uIGEgcGF0aCB0aGF0IGFscmVhZHkgcmVhZHMgYSBwbHVnaW4gcmVnaXN0cnkuXG4gKi9cbmV4cG9ydCBjb25zdCBCQUNLTElOS19DQUNIRV9QTFVHSU5fSUQgPSAnYmFja2xpbmstY2FjaGUnO1xuXG4vKipcbiAqIEVuc3VyZXMgdGhhdCB0aGUgbWV0YWRhdGEgY2FjaGUgaXMgcmVhZHkgZm9yIGFsbCBmaWxlcy5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbWV0YWRhdGEgY2FjaGUgaXMgcmVhZHkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVNZXRhZGF0YUNhY2hlUmVhZHkoYXBwOiBBcHApOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBhcHAubWV0YWRhdGFDYWNoZS5vbkNsZWFuQ2FjaGUocmVzb2x2ZSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgYmFja2xpbmtzIGZvciBhIGZpbGUgb3IgcGF0aC5cbiAqIE5PVEU6IFRoZSBmaWxlIG1heSBiZSBub24tZXhpc3RlbnQuXG4gKlxuICogV2hlbiBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgIHB1Ymxpc2hlcyBpdHMgYmFja2xpbmtzIEFQSSBhbmQgaXRzIGBCYWNrbGlua3NgIG1vZHVsZSBpcyBvbiwgaXRzIGNhY2hlIGFuc3dlcnMuXG4gKiBPdGhlcndpc2UgdGhlIGFuc3dlciBjb21lcyBmcm9tIGEgYmFja2xpbmsgaW5kZXggd2hvc2UgY29zdCBpcyBwcm9wb3J0aW9uYWwgdG8gdGhlIGNhbmRpZGF0ZSBub3RlcyByYXRoZXIgdGhhblxuICogdG8gZXZlcnkgcmVmZXJlbmNlIGluIHRoZSB2YXVsdCwgYW5kIHdoaWNoIGdpdmVzIHRoZSBzYW1lIHJlZmVyZW5jZXMgT2JzaWRpYW4ncyBvd24gYGdldEJhY2tsaW5rc0ZvckZpbGVgIGdpdmVzLlxuICpcbiAqIEBwYXJhbSBhcHAgLSBUaGUgT2JzaWRpYW4gYXBwbGljYXRpb24gaW5zdGFuY2UuXG4gKiBAcGFyYW0gcGF0aE9yRmlsZSAtIFRoZSBwYXRoIG9yIGZpbGUgb2JqZWN0LlxuICogQHJldHVybnMgVGhlIGJhY2tsaW5rcyBmb3IgdGhlIGZpbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCYWNrbGlua3NGb3JGaWxlT3JQYXRoKGFwcDogQXBwLCBwYXRoT3JGaWxlOiBQYXRoT3JGaWxlKTogQ3VzdG9tQXJyYXlEaWN0PFJlZmVyZW5jZT4ge1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZSwgc2hvdWxkSW5jbHVkZU5vbkV4aXN0aW5nOiB0cnVlIH0pO1xuICB1c2luZyBfcmVnaXN0cmF0aW9uID0gcmVnaXN0ZXJGaWxlcyhhcHAsIFtmaWxlXSk7XG4gIHJldHVybiBmaW5kQWR2YW5jZWRNZXRhZGF0YUNhY2hlQmFja2xpbmtzQXBpKCk/LmdldEJhY2tsaW5rc0ZvckZpbGUoZmlsZSkgPz8gZ2V0SW5kZXhlZEJhY2tsaW5rc0ZvckZpbGUoYXBwLCBmaWxlKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIGJhY2tsaW5rcyBmb3IgYSBmaWxlIHNhZmVseS5cbiAqXG4gKiBXaGVuIGBBZHZhbmNlZCBNZXRhZGF0YSBDYWNoZWAgcHVibGlzaGVzIGl0cyBiYWNrbGlua3MgQVBJIGFuZCBpdHMgYEJhY2tsaW5rc2AgbW9kdWxlIGlzIG9uLCB0aGF0IEFQSSBhbnN3ZXJzLlxuICpcbiAqIE90aGVyd2lzZSB0aGlzIGlzIE5PVCBhIHB1cmUgcmVhZC4gSXQgdmVyaWZpZXNcbiAqIGVhY2ggYmFja2xpbmsgYWdhaW5zdCB0aGUgbm90ZSdzIGN1cnJlbnQgdGV4dCwgYW5kIHRvIGRvIHRoYXQgaXQgY2FsbHMge0BsaW5rIHNhdmVOb3RlfSBvbiBldmVyeVxuICogbm90ZSB0aGF0IGxpbmtzIHRvIHRoZSBmaWxlLCB3aGljaCBzYXZlcyBhbnkgb3BlbiBlZGl0b3IgdmlldyBvZiB0aG9zZSBub3RlcyB0aGF0IGhhcyB1bnNhdmVkXG4gKiBjaGFuZ2VzLiBDYWxsIGl0IGZyb20gYW4gZXhwbGljaXQgdXNlciBhY3Rpb24uIERvIG5vdCBjYWxsIGl0IGZyb20gYW4gYXV0b21hdGljIHRyaWdnZXIgKGEgdmF1bHQgb3JcbiAqIG1ldGFkYXRhIGV2ZW50LCBhIHNhdmUgb3IgcmVuZGVyIHBhdGNoKSB0aGF0IG9ubHkgZGVjaWRlcyB3aGV0aGVyIHRvIGFjdC4gVGhlcmUsIGEgZm9yY2VkIHNhdmUgY2FuXG4gKiByYWNlIGFub3RoZXIgcGx1Z2luJ3MgaW4tZmxpZ2h0IGVkaXRvciBjaGFuZ2UuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIGZvciByZXRyaWV2aW5nIHRoZSBiYWNrbGlua3MuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IGRpY3Rpb25hcnkgb2YgYmFja2xpbmtzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0QmFja2xpbmtzRm9yRmlsZVNhZmUocGFyYW1zOiBHZXRCYWNrbGlua3NGb3JGaWxlU2FmZVBhcmFtcyk6IFByb21pc2U8Q3VzdG9tQXJyYXlEaWN0PFJlZmVyZW5jZT4+IHtcbiAgY29uc3QgeyBhcHAsIHBhdGhPckZpbGUsIC4uLm9wdGlvbnMgfSA9IHBhcmFtcztcbiAgY29uc3QgY2FjaGVkQmFja2xpbmtzID0gYXdhaXQgZmluZEFkdmFuY2VkTWV0YWRhdGFDYWNoZUJhY2tsaW5rc0FwaSgpPy5nZXRCYWNrbGlua3NGb3JGaWxlU2FmZShwYXRoT3JGaWxlKTtcbiAgaWYgKGNhY2hlZEJhY2tsaW5rcykge1xuICAgIHJldHVybiBjYWNoZWRCYWNrbGlua3M7XG4gIH1cblxuICBsZXQgYmFja2xpbmtzOiBDdXN0b21BcnJheURpY3Q8UmVmZXJlbmNlPiA9IG5ldyBDdXN0b21BcnJheURpY3RJbXBsPFJlZmVyZW5jZT4oKTtcbiAgYXdhaXQgcmV0cnlXaXRoVGltZW91dE5vdGljZSh7XG4gICAgYXN5bmMgb3BlcmF0aW9uRnVuY3Rpb24oYWJvcnRTaWduYWwpIHtcbiAgICAgIGFib3J0U2lnbmFsLnRocm93SWZBYm9ydGVkKCk7XG4gICAgICBjb25zdCBmaWxlID0gZ2V0RmlsZSh7IGFwcCwgcGF0aE9yRmlsZSB9KTtcbiAgICAgIGF3YWl0IGVuc3VyZU1ldGFkYXRhQ2FjaGVSZWFkeShhcHApO1xuICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgIGJhY2tsaW5rcyA9IGdldEJhY2tsaW5rc0ZvckZpbGVPclBhdGgoYXBwLCBmaWxlKTtcbiAgICAgIGZvciAoY29uc3Qgbm90ZVBhdGggb2YgYmFja2xpbmtzLmtleXMoKSkge1xuICAgICAgICBhYm9ydFNpZ25hbC50aHJvd0lmQWJvcnRlZCgpO1xuICAgICAgICBjb25zdCBub3RlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogbm90ZVBhdGggfSk7XG4gICAgICAgIGlmICghbm90ZSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEEgY2FudmFzIGhvbGRlciBjYW5ub3QgYmUgY2hlY2tlZCBhZ2FpbnN0IGl0cyB0ZXh0LiBJdHMgZmlsZS1ub2RlIHJlZmVyZW5jZXMgY2Fycnkgbm8gcG9zaXRpb24sIGFuZFxuICAgICAgICAvLyBPYnNpZGlhbiByZXBvcnRzIGEgdGV4dC1ub2RlIGVtYmVkIHdpdGggYSBwb3NpdGlvbiBpbnRvIHRoYXQgbm9kZSdzIG93biB0ZXh0LCBub3QgaW50byB0aGUgY2FudmFzIEpTT04sXG4gICAgICAgIC8vIHNvIHNsaWNpbmcgdGhlIGZpbGUgYXQgaXQgbmV2ZXIgZ2l2ZXMgdGhlIGxpbmsgYmFjayBhbmQgdGhlIHJldHJ5IHdvdWxkIG5ldmVyIGVuZC5cbiAgICAgICAgaWYgKGlzQ2FudmFzRmlsZShub3RlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgc2F2ZU5vdGUoYXBwLCBub3RlKTtcbiAgICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcblxuICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZFNhZmUoYXBwLCBub3RlKTtcbiAgICAgICAgYWJvcnRTaWduYWwudGhyb3dJZkFib3J0ZWQoKTtcbiAgICAgICAgaWYgKCFjb250ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZyb250bWF0dGVyID0gcGFyc2VGcm9udG1hdHRlcihjb250ZW50KTtcbiAgICAgICAgY29uc3QgbGlua3MgPSBiYWNrbGlua3MuZ2V0KG5vdGVQYXRoKTtcbiAgICAgICAgaWYgKCFsaW5rcykge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgbGluayBvZiBsaW5rcykge1xuICAgICAgICAgIGxldCBhY3R1YWxMaW5rOiBzdHJpbmc7XG4gICAgICAgICAgaWYgKGlzUmVmZXJlbmNlQ2FjaGUobGluaykpIHtcbiAgICAgICAgICAgIGFjdHVhbExpbmsgPSBjb250ZW50LnNsaWNlKGxpbmsucG9zaXRpb24uc3RhcnQub2Zmc2V0LCBsaW5rLnBvc2l0aW9uLmVuZC5vZmZzZXQpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaXNGcm9udG1hdHRlckxpbmtDYWNoZShsaW5rKSkge1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlWYWx1ZSA9IGdldE5lc3RlZFByb3BlcnR5VmFsdWUoZnJvbnRtYXR0ZXIsIGxpbmsua2V5KTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcHJvcGVydHlWYWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBsaW5rV2l0aE9mZnNldHMgPSB0b0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMobGluayk7XG4gICAgICAgICAgICBhY3R1YWxMaW5rID0gcHJvcGVydHlWYWx1ZS5zbGljZShsaW5rV2l0aE9mZnNldHMuc3RhcnRPZmZzZXQsIGxpbmtXaXRoT2Zmc2V0cy5lbmRPZmZzZXQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGFjdHVhbExpbmsgIT09IGxpbmsub3JpZ2luYWwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSxcbiAgICBvcGVyYXRpb25OYW1lOiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMubWV0YWRhdGFDYWNoZS5nZXRCYWNrbGlua3NGb3JGaWxlUGF0aCwgeyBmaWxlUGF0aDogZ2V0UGF0aChhcHAsIHBhdGhPckZpbGUpIH0pLFxuICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudDogbnVsbCxcbiAgICByZXRyeU9wdGlvbnM6IG9wdGlvbnMsXG4gICAgc2hvdWxkU2hvd1RpbWVvdXROb3RpY2U6IG9wdGlvbnMuc2hvdWxkU2hvd1RpbWVvdXROb3RpY2UgPz8gdHJ1ZVxuICB9KTtcblxuICByZXR1cm4gYmFja2xpbmtzO1xufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgY2FjaGVkIG1ldGFkYXRhIGZvciBhIGdpdmVuIGZpbGUgb3IgcGF0aC5cbiAqXG4gKiBUaGlzIGlzIE5PVCBhIHB1cmUgcmVhZDogYmVmb3JlIGl0IHJlYWRzIHRoZSBjYWNoZSwgaXQgY2FsbHMge0BsaW5rIHNhdmVOb3RlfSwgd2hpY2ggc2F2ZXMgYW55XG4gKiBvcGVuIGVkaXRvciB2aWV3IG9mIHRoZSBub3RlIHRoYXQgaGFzIHVuc2F2ZWQgY2hhbmdlcy4gVGhhdCBzYXZlIGlzIHdoeSB0aGUgY2FjaGUgbWF0Y2hlcyB3aGF0IHRoZVxuICogdXNlciBzZWVzLCBhbmQgd2h5IGEgY29tbWFuZCB0aGF0IHJld3JpdGVzIHRoZSBub3RlIGNhbiB1c2UgdGhpcyBzYWZlbHkgd2l0aG91dCBpdHMgcmV3cml0ZSBiZWluZ1xuICogY2xvYmJlcmVkLiBJdCBpcyBhbHNvIGEgd3JpdGUgb24gdGhlIG5vdGUuIFNvIGRvIG5vdCBjYWxsIHRoaXMgZnJvbSBhbiBhdXRvbWF0aWMgdHJpZ2dlciAoYSB2YXVsdFxuICogb3IgbWV0YWRhdGEgZXZlbnQsIGEgc2F2ZSBvciByZW5kZXIgcGF0Y2gsIGEgbGF5b3V0IGhvb2spIHRoYXQgb25seSBkZWNpZGVzIHdoZXRoZXIgdG8gYWN0OiBhXG4gKiBmb3JjZWQgc2F2ZSBvbmUgdGljayBhZnRlciBhbm90aGVyIHBsdWdpbiBoYXMgZGlzcGF0Y2hlZCBhIGNoYW5nZSBpbnRvIHRoZSBlZGl0b3IgY2FuIGxlYXZlXG4gKiBPYnNpZGlhbidzIGVkaXRvciByZW5kZXJpbmcgc3RhbGUgc3RhdGUuIEEgcmVhZC1vbmx5IHByb2JlIG9uIHRoZSBub3RlJ3MgY3VycmVudCB0ZXh0IHNob3VsZCB1c2VcbiAqIHtAbGluayBwYXJzZU1ldGFkYXRhfSBvbiB0aGF0IHRleHQgaW5zdGVhZC4gSXQgbmVlZHMgbm8gdmlldywgbm8gY2FjaGUgYW5kIG5vIHNhdmUuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gZmlsZU9yUGF0aCAtIFRoZSBmaWxlIG9yIHBhdGggdG8gcmV0cmlldmUgdGhlIG1ldGFkYXRhIGZvci5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcnNlIG9wdGlvbnMgY29udHJvbGxpbmcgd2hpY2ggYWRkaXRpb25hbCBsaW5rcyB0byBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBjYWNoZWQgbWV0YWRhdGEgZm9yIHRoZSBmaWxlLCBvciBgbnVsbGAgaWYgaXQgZG9lc24ndCBleGlzdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldENhY2hlU2FmZShhcHA6IEFwcCwgZmlsZU9yUGF0aDogUGF0aE9yRmlsZSwgb3B0aW9uczogR2V0Q2FjaGVTYWZlT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxDYWNoZWRNZXRhZGF0YUV4IHwgbnVsbD4ge1xuICBjb25zdCBmaWxlID0gZ2V0RmlsZU9yTnVsbCh7IGFwcCwgcGF0aE9yRmlsZTogZmlsZU9yUGF0aCB9KTtcblxuICB0cnkge1xuICAgIGlmICghZmlsZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IGNhY2hlOiBDYWNoZWRNZXRhZGF0YSB8IG51bGw7XG4gICAgaWYgKGZpbGUuZGVsZXRlZCkge1xuICAgICAgY2FjaGUgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoZmlsZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHNhdmVOb3RlKGFwcCwgZmlsZSk7XG5cbiAgICAgIGNvbnN0IGZpbGVDYWNoZUVudHJ5ID0gYXBwLm1ldGFkYXRhQ2FjaGUuZmlsZUNhY2hlW2ZpbGUucGF0aF07XG4gICAgICBjb25zdCBpc1VwVG9EYXRlID0gZmlsZUNhY2hlRW50cnk/Lm10aW1lID09PSBmaWxlLnN0YXQubXRpbWVcbiAgICAgICAgJiYgZmlsZUNhY2hlRW50cnkuc2l6ZSA9PT0gZmlsZS5zdGF0LnNpemVcbiAgICAgICAgJiYgT2JqZWN0Lmhhc093bihhcHAubWV0YWRhdGFDYWNoZS5tZXRhZGF0YUNhY2hlLCBmaWxlQ2FjaGVFbnRyeS5oYXNoKTtcbiAgICAgIGlmICghaXNVcFRvRGF0ZSkge1xuICAgICAgICBhd2FpdCBhcHAubWV0YWRhdGFDYWNoZS5jb21wdXRlRmlsZU1ldGFkYXRhQXN5bmMoZmlsZSk7XG4gICAgICAgIGF3YWl0IGVuc3VyZU1ldGFkYXRhQ2FjaGVSZWFkeShhcHApO1xuICAgICAgfVxuICAgICAgY2FjaGUgPSBhcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoZmlsZSk7XG4gICAgfVxuXG4gICAgaWYgKGNhY2hlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBPbmx5IHRoZSBib2R5LWV4dGVybmFsIHBhcnNlIG5lZWRzIHRoZSBmaWxlIGNvbnRlbnQ7IGZyb250bWF0dGVyIHBhcnNpbmcgdXNlcyB0aGUgY2FjaGVkXG4gICAgLy8gZnJvbnRtYXR0ZXIsIHNvIGF2b2lkIHJlYWRpbmcgdGhlIGNvbnRlbnQgdW5sZXNzIGl0IGlzIGFjdHVhbGx5IG5lZWRlZC5cbiAgICBjb25zdCBjb250ZW50ID0gb3B0aW9ucy5zaG91bGRQYXJzZUV4dGVybmFsTGlua3MgPyBhd2FpdCBhcHAudmF1bHQuY2FjaGVkUmVhZChmaWxlKSA6ICcnO1xuICAgIHJldHVybiB0b1BhcnNlZENhY2hlZE1ldGFkYXRhRXgoeyBjYWNoZSwgY29udGVudCwgb3B0aW9ucyB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoIWZpbGUgfHwgZmlsZS5kZWxldGVkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIFJldHJpZXZlcyB0aGUgZnJvbnQgbWF0dGVyIGZyb20gdGhlIG1ldGFkYXRhIGNhY2hlIHNhZmVseS5cbiAqXG4gKiBJdCByZWFkcyB0aHJvdWdoIHtAbGluayBnZXRDYWNoZVNhZmV9LCBzbyBpdCBzYXZlcyBhbnkgb3BlbiBlZGl0b3IgdmlldyBvZiB0aGUgbm90ZSB0aGF0IGhhc1xuICogdW5zYXZlZCBjaGFuZ2VzLiBTZWUge0BsaW5rIGdldENhY2hlU2FmZX0gZm9yIHdoZW4gdGhhdCBzYXZlIG1hdHRlcnMgYW5kIHdoYXQgdG8gdXNlIGluc3RlYWQuXG4gKlxuICogQHR5cGVQYXJhbSBDdXN0b21Gcm9udG1hdHRlciAtIFRoZSB0eXBlIG9mIGN1c3RvbSBmcm9udCBtYXR0ZXIuXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byByZXRyaWV2ZSB0aGUgZnJvbnQgbWF0dGVyIGZyb20uXG4gKiBAcmV0dXJucyBUaGUgY29tYmluZWQgZnJvbnQgbWF0dGVyLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0RnJvbnRtYXR0ZXJTYWZlPEN1c3RvbUZyb250bWF0dGVyID0gdW5rbm93bj4oYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiBQcm9taXNlPENvbWJpbmVkRnJvbnRtYXR0ZXI8Q3VzdG9tRnJvbnRtYXR0ZXI+PiB7XG4gIGNvbnN0IGNhY2hlID0gYXdhaXQgZ2V0Q2FjaGVTYWZlKGFwcCwgcGF0aE9yRmlsZSk7XG4gIHJldHVybiAoY2FjaGU/LmZyb250bWF0dGVyID8/IHt9KSBhcyBDb21iaW5lZEZyb250bWF0dGVyPEN1c3RvbUZyb250bWF0dGVyPjtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgdGhlIHNlbGVjdGVkIGxpbmtzIGZyb20gdGhlIHByb3ZpZGVkIGNhY2hlLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyBmb3IgcmV0cmlldmluZyB0aGUgbGlua3MuXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiByZWZlcmVuY2VzIHJlcHJlc2VudGluZyB0aGUgc2VsZWN0ZWQgbGlua3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMaW5rcyhwYXJhbXM6IEdldExpbmtzUGFyYW1zKTogUmVmZXJlbmNlW10ge1xuICBjb25zdCB7XG4gICAgY2FjaGUsXG4gICAgc2hvdWxkSW5jbHVkZUVtYmVkcyA9IHRydWUsXG4gICAgc2hvdWxkSW5jbHVkZUV4dGVybmFsTGlua3MgPSBmYWxzZSxcbiAgICBzaG91bGRJbmNsdWRlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzID0gZmFsc2UsXG4gICAgc2hvdWxkSW5jbHVkZUZyb250bWF0dGVyTGlua3MgPSB0cnVlLFxuICAgIHNob3VsZEluY2x1ZGVNdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzID0gZmFsc2UsXG4gICAgc2hvdWxkSW5jbHVkZU11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzID0gZmFsc2UsXG4gICAgc2hvdWxkSW5jbHVkZVJlZmVyZW5jZXMgPSB0cnVlXG4gIH0gPSBwYXJhbXM7XG5cbiAgbGV0IGxpbmtzOiBSZWZlcmVuY2VbXSA9IFtcbiAgICAuLi4oc2hvdWxkSW5jbHVkZVJlZmVyZW5jZXMgPyBjYWNoZS5saW5rcyA/PyBbXSA6IFtdKSxcbiAgICAuLi4oc2hvdWxkSW5jbHVkZUVtYmVkcyA/IGNhY2hlLmVtYmVkcyA/PyBbXSA6IFtdKSxcbiAgICAuLi4oc2hvdWxkSW5jbHVkZUZyb250bWF0dGVyTGlua3MgPyBjYWNoZS5mcm9udG1hdHRlckxpbmtzID8/IFtdIDogW10pXG4gIF07XG5cbiAgY29uc3QgZmVhdHVyZUxpbmtTZWxlY3RvcnM6IEZlYXR1cmVMaW5rU2VsZWN0b3JbXSA9IFtcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogJ2JvZHkgZXh0ZXJuYWwgbGlua3MnLFxuICAgICAgZmVhdHVyZTogQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRXh0ZXJuYWxMaW5rcyxcbiAgICAgIHNlbGVjdDogKGNhY2hlRXgpID0+IGNhY2hlRXguZXh0ZXJuYWxMaW5rcyxcbiAgICAgIHNob3VsZEluY2x1ZGU6IHNob3VsZEluY2x1ZGVFeHRlcm5hbExpbmtzXG4gICAgfSxcbiAgICB7XG4gICAgICBkZXNjcmlwdGlvbjogJ2Zyb250bWF0dGVyIGV4dGVybmFsIGxpbmtzJyxcbiAgICAgIGZlYXR1cmU6IENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlLkZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcyxcbiAgICAgIHNlbGVjdDogKGNhY2hlRXgpID0+IGNhY2hlRXguZnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzLFxuICAgICAgc2hvdWxkSW5jbHVkZTogc2hvdWxkSW5jbHVkZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rc1xuICAgIH0sXG4gICAge1xuICAgICAgZGVzY3JpcHRpb246ICdtdWx0aS12YWx1ZSBmcm9udG1hdHRlciBleHRlcm5hbCBsaW5rcycsXG4gICAgICBmZWF0dXJlOiBDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5NdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzLFxuICAgICAgc2VsZWN0OiAoY2FjaGVFeCkgPT4gY2FjaGVFeC5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzLFxuICAgICAgc2hvdWxkSW5jbHVkZTogc2hvdWxkSW5jbHVkZU11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3NcbiAgICB9LFxuICAgIHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnbXVsdGktdmFsdWUgZnJvbnRtYXR0ZXIgbGlua3MnLFxuICAgICAgZmVhdHVyZTogQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuTXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3MsXG4gICAgICBzZWxlY3Q6IChjYWNoZUV4KSA9PiBjYWNoZUV4Lm11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzLFxuICAgICAgc2hvdWxkSW5jbHVkZTogc2hvdWxkSW5jbHVkZU11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzXG4gICAgfVxuICBdO1xuXG4gIGZvciAoY29uc3QgZmVhdHVyZUxpbmtTZWxlY3RvciBvZiBmZWF0dXJlTGlua1NlbGVjdG9ycykge1xuICAgIGlmICghZmVhdHVyZUxpbmtTZWxlY3Rvci5zaG91bGRJbmNsdWRlKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIWlzQ2FjaGVkTWV0YWRhdGFFeChjYWNoZSkgfHwgIWNhY2hlLmZlYXR1cmVzLmluY2x1ZGVzKGZlYXR1cmVMaW5rU2VsZWN0b3IuZmVhdHVyZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGluY2x1ZGUgJHtmZWF0dXJlTGlua1NlbGVjdG9yLmRlc2NyaXB0aW9ufTogdGhlIGNhY2hlIHdhcyBub3QgY29tcHV0ZWQgd2l0aCB0aGUgJHtmZWF0dXJlTGlua1NlbGVjdG9yLmZlYXR1cmV9IGZlYXR1cmUuYCk7XG4gICAgfVxuXG4gICAgbGlua3MucHVzaCguLi5lbnN1cmVOb25OdWxsYWJsZShmZWF0dXJlTGlua1NlbGVjdG9yLnNlbGVjdChjYWNoZSkpKTtcbiAgfVxuXG4gIHNvcnRSZWZlcmVuY2VzKGxpbmtzKTtcblxuICAvLyBCVUc6IGh0dHBzOi8vZm9ydW0ub2JzaWRpYW4ubWQvdC9idWctZHVwbGljYXRlZC1saW5rcy1pbi1tZXRhZGF0YWNhY2hlLWluc2lkZS1mb290bm90ZXMvODU1NTFcbiAgbGlua3MgPSBsaW5rcy5maWx0ZXIoKGxpbmssIGluZGV4KSA9PiB7XG4gICAgaWYgKGluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwcmV2aW91c0xpbmsgPSBlbnN1cmVOb25OdWxsYWJsZShsaW5rc1tpbmRleCAtIDFdKTtcblxuICAgIGlmIChpc1JlZmVyZW5jZUNhY2hlKGxpbmspICYmIGlzUmVmZXJlbmNlQ2FjaGUocHJldmlvdXNMaW5rKSkge1xuICAgICAgcmV0dXJuIGxpbmsucG9zaXRpb24uc3RhcnQub2Zmc2V0ICE9PSBwcmV2aW91c0xpbmsucG9zaXRpb24uc3RhcnQub2Zmc2V0O1xuICAgIH1cblxuICAgIGlmIChpc0Zyb250bWF0dGVyTGlua0NhY2hlKGxpbmspICYmIGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGUocHJldmlvdXNMaW5rKSkge1xuICAgICAgY29uc3QgbGlua1N0YXJ0T2Zmc2V0ID0gaXNGcm9udG1hdHRlckxpbmtDYWNoZVdpdGhPZmZzZXRzKGxpbmspID8gbGluay5zdGFydE9mZnNldCA6IDA7XG4gICAgICBjb25zdCBwcmV2aW91c0xpbmtTdGFydE9mZnNldCA9IGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyhwcmV2aW91c0xpbmspID8gcHJldmlvdXNMaW5rLnN0YXJ0T2Zmc2V0IDogMDtcbiAgICAgIHJldHVybiBsaW5rLmtleSAhPT0gcHJldmlvdXNMaW5rLmtleSB8fCBpc0Zyb250bWF0dGVyTGlua0NhY2hlV2l0aE9mZnNldHMobGluaykgIT09IGlzRnJvbnRtYXR0ZXJMaW5rQ2FjaGVXaXRoT2Zmc2V0cyhwcmV2aW91c0xpbmspXG4gICAgICAgIHx8IGxpbmtTdGFydE9mZnNldCAhPT0gcHJldmlvdXNMaW5rU3RhcnRPZmZzZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH0pO1xuXG4gIHJldHVybiBsaW5rcztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBiYWNrbGluayBjYWNoZSBwbHVnaW4gaXMgY3VycmVudGx5IGxvYWRlZCAtIGVpdGhlciBgQWR2YW5jZWQgTWV0YWRhdGEgQ2FjaGVgICh7QGxpbmsgQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfUExVR0lOX0lEfSkgb3IgaXRzIHJldGlyZWQgcHJlZGVjZXNzb3IgYEJhY2tsaW5rIENhY2hlYCAoe0BsaW5rIEJBQ0tMSU5LX0NBQ0hFX1BMVUdJTl9JRH0pLlxuICpcbiAqIFN1Y2ggYSBwbHVnaW4ga2VlcHMgYSBkcmFpbi1vbi1yZWFkIGJhY2tsaW5rIGluZGV4IGFuZCBpbmRleGVzIGNhbnZhcyBtZXRhZGF0YSwgc28gYSBjYWxsZXIgdGhhdCBjb21wZW5zYXRlcyBmb3IgT2JzaWRpYW4ncyBvd24gZ2FwcyBjYW4gc3RhbmQgZG93biB3aGlsZSBvbmUgaXMgcHJlc2VudC4gQm90aCBpZHMgYXJlIHJlY29nbml6ZWQ7IHtAbGluayBCQUNLTElOS19DQUNIRV9QTFVHSU5fSUR9IHJlY29yZHMgd2hlbiB0aGUgcmV0aXJlZCBvbmUgbWF5IGJlIGRyb3BwZWQuXG4gKlxuICogVGhpcyByZWFkcyB0aGUgTE9BREVEIHBsdWdpbiBpbnN0YW5jZSByYXRoZXIgdGhhbiBgYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnNgLCBkZWxpYmVyYXRlbHk6IHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoZSBwbHVnaW4ncyBwYXRjaGVzIGFyZSBpbiBwbGFjZSByaWdodCBub3csIGFuZCB0aGV5IGFyZSBub3QgdW50aWwgaXQgaGFzIGxvYWRlZC4gUGx1Z2lucyBsb2FkIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLCBzbyBjYWxsIHRoaXMgZnJvbSBhIHVzZXItZHJpdmVuIHBhdGggcmF0aGVyIHRoYW4gZnJvbSBwbHVnaW4gbG9hZCAtIHNlZSBydWxlIEwyNSBpbiBgQUdFTlRTLm1kYC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiBhIGJhY2tsaW5rIGNhY2hlIHBsdWdpbiBpcyBsb2FkZWQsIG90aGVyd2lzZSBgZmFsc2VgLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaGFzQmFja2xpbmtDYWNoZVBsdWdpbihhcHA6IEFwcCk6IGJvb2xlYW4ge1xuICByZXR1cm4gYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKEFEVkFOQ0VEX01FVEFEQVRBX0NBQ0hFX1BMVUdJTl9JRCkgIT09IG51bGwgfHwgYXBwLnBsdWdpbnMuZ2V0UGx1Z2luKEJBQ0tMSU5LX0NBQ0hFX1BMVUdJTl9JRCkgIT09IG51bGw7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgY2FjaGUgaXMgYSB7QGxpbmsgQ2FjaGVkTWV0YWRhdGFFeH0gKGkuZS4gaXQgd2FzIGNvbXB1dGVkIHdpdGggZXh0ZXJuYWwtbGlua1xuICogcGFyc2luZyBlbmFibGVkKS5cbiAqXG4gKiBAcGFyYW0gY2FjaGUgLSBUaGUgY2FjaGUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGNhY2hlIGlzIGEge0BsaW5rIENhY2hlZE1ldGFkYXRhRXh9LCBvdGhlcndpc2UgYGZhbHNlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FjaGVkTWV0YWRhdGFFeChjYWNoZTogQ2FjaGVkTWV0YWRhdGEpOiBjYWNoZSBpcyBDYWNoZWRNZXRhZGF0YUV4IHtcbiAgcmV0dXJuICdmZWF0dXJlcycgaW4gY2FjaGU7XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSBtZXRhZGF0YSBmb3IgYSBnaXZlbiBzdHJpbmcuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gJHN0cmluZyAtIFRoZSBzdHJpbmcgdG8gcGFyc2UgdGhlIG1ldGFkYXRhIGZvci5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcnNlIG9wdGlvbnMgY29udHJvbGxpbmcgd2hpY2ggYWRkaXRpb25hbCBsaW5rcyB0byBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgbWV0YWRhdGEuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYXJzZU1ldGFkYXRhKGFwcDogQXBwLCAkc3RyaW5nOiBzdHJpbmcsIG9wdGlvbnM6IFBhcnNlTWV0YWRhdGFPcHRpb25zID0ge30pOiBQcm9taXNlPENhY2hlZE1ldGFkYXRhRXg+IHtcbiAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICBjb25zdCBidWZmZXIgPSBlbmNvZGVyLmVuY29kZSgkc3RyaW5nKS5idWZmZXI7XG4gIGNvbnN0IGNhY2hlID0gYXdhaXQgYXBwLm1ldGFkYXRhQ2FjaGUuY29tcHV0ZU1ldGFkYXRhQXN5bmMoYnVmZmVyKSA/PyB7fTtcbiAgcmV0dXJuIHRvUGFyc2VkQ2FjaGVkTWV0YWRhdGFFeCh7IGNhY2hlLCBjb250ZW50OiAkc3RyaW5nLCBvcHRpb25zIH0pO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyB0aGUgZmlsZSBjYWNoZSBmb3IgYSBub24tZXhpc3RpbmcgZmlsZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMgZm9yIHJlZ2lzdGVyaW5nIHRoZSBmaWxlIGNhY2hlLlxuICogQHJldHVybnMgQSB7QGxpbmsgRGlzcG9zYWJsZX0gdGhhdCB1bnJlZ2lzdGVycyB0aGUgZmlsZSBjYWNoZSB3aGVuIGRpc3Bvc2VkLCBmb3IgdXNlIHdpdGggYHVzaW5nYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRmlsZUNhY2hlRm9yTm9uRXhpc3RpbmdGaWxlKHBhcmFtczogUmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGVQYXJhbXMpOiBEaXNwb3NhYmxlIHtcbiAgY29uc3QgeyBhcHAsIGNhY2hlLCBwYXRoT3JGaWxlIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGZpbGUgPSBnZXRGaWxlKHsgYXBwLCBwYXRoT3JGaWxlLCBzaG91bGRJbmNsdWRlTm9uRXhpc3Rpbmc6IHRydWUgfSk7XG4gIGlmICghZmlsZS5kZWxldGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdGaWxlIGlzIGV4aXN0aW5nJyk7XG4gIH1cblxuICBhcHAubWV0YWRhdGFDYWNoZS5maWxlQ2FjaGVbZmlsZS5wYXRoXSA9IHtcbiAgICBoYXNoOiBmaWxlLnBhdGgsXG4gICAgbXRpbWU6IDAsXG4gICAgc2l6ZTogMFxuICB9O1xuXG4gIGFwcC5tZXRhZGF0YUNhY2hlLm1ldGFkYXRhQ2FjaGVbZmlsZS5wYXRoXSA9IGNhY2hlO1xuXG4gIHJldHVybiBuZXcgQ2FsbGJhY2tEaXNwb3NhYmxlKHtcbiAgICBjYWxsYmFjazogKCk6IHZvaWQgPT4ge1xuICAgICAgdW5yZWdpc3RlckZpbGVDYWNoZUZvck5vbkV4aXN0aW5nRmlsZShhcHAsIGZpbGUpO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogUmVnaXN0ZXJzIGZpbGVzIGluIHRoZSBPYnNpZGlhbiBhcHAuXG4gKlxuICogQHBhcmFtIGFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gZmlsZXMgLSBUaGUgZmlsZXMgdG8gcmVnaXN0ZXIuXG4gKiBAcmV0dXJucyBBIHtAbGluayBEaXNwb3NhYmxlfSB0aGF0IHVucmVnaXN0ZXJzIHRoZSBmaWxlcyB3aGVuIGRpc3Bvc2VkLCBmb3IgdXNlIHdpdGggYHVzaW5nYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyRmlsZXMoYXBwOiBBcHAsIGZpbGVzOiBUQWJzdHJhY3RGaWxlW10pOiBEaXNwb3NhYmxlIHtcbiAgY29uc3QgcmVnaXN0ZXJlZEZpbGVzQ291bnRzID0gZ2V0UmVnaXN0ZXJlZEZpbGVzQ291bnRzKCk7XG5cbiAgZm9yIChsZXQgZmlsZSBvZiBmaWxlcykge1xuICAgIHdoaWxlIChmaWxlLmRlbGV0ZWQpIHtcbiAgICAgIGxldCBjb3VudCA9IHJlZ2lzdGVyZWRGaWxlc0NvdW50cy5nZXQoZmlsZS5wYXRoKSA/PyAwO1xuICAgICAgY291bnQrKztcbiAgICAgIHJlZ2lzdGVyZWRGaWxlc0NvdW50cy5zZXQoZmlsZS5wYXRoLCBjb3VudCk7XG5cbiAgICAgIGFwcC52YXVsdC5maWxlTWFwW2ZpbGUucGF0aF0gPSBmaWxlO1xuXG4gICAgICBpZiAoaXNGaWxlKGZpbGUpKSB7XG4gICAgICAgIGFwcC5tZXRhZGF0YUNhY2hlLnVuaXF1ZUZpbGVMb29rdXAuYWRkKGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLCBmaWxlKTtcbiAgICAgIH1cblxuICAgICAgZmlsZSA9IGdldEZvbGRlcih7XG4gICAgICAgIGFwcCxcbiAgICAgICAgcGF0aE9yRm9sZGVyOiBwYXJlbnRGb2xkZXJQYXRoKGZpbGUucGF0aCksXG4gICAgICAgIHNob3VsZEluY2x1ZGVOb25FeGlzdGluZzogdHJ1ZVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBDYWxsYmFja0Rpc3Bvc2FibGUoe1xuICAgIGNhbGxiYWNrOiAoKTogdm9pZCA9PiB7XG4gICAgICB1bnJlZ2lzdGVyRmlsZXMoYXBwLCBmaWxlcyk7XG4gICAgfVxuICB9KTtcbn1cblxuLyoqXG4gKiBVbnJlZ2lzdGVycyB0aGUgZmlsZSBjYWNoZSBmb3IgYSBub24tZXhpc3RpbmcgZmlsZS5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBwYXRoT3JGaWxlIC0gVGhlIHBhdGggb3IgZmlsZSB0byB1bnJlZ2lzdGVyIHRoZSBmaWxlIGNhY2hlIGZvci5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVucmVnaXN0ZXJGaWxlQ2FjaGVGb3JOb25FeGlzdGluZ0ZpbGUoYXBwOiBBcHAsIHBhdGhPckZpbGU6IFBhdGhPckZpbGUpOiB2b2lkIHtcbiAgY29uc3QgZmlsZSA9IGdldEZpbGUoeyBhcHAsIHBhdGhPckZpbGUsIHNob3VsZEluY2x1ZGVOb25FeGlzdGluZzogdHJ1ZSB9KTtcbiAgaWYgKCFmaWxlLmRlbGV0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZpbGUgaXMgZXhpc3RpbmcnKTtcbiAgfVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWR5bmFtaWMtZGVsZXRlIC0tIFdlIGhhdmUgbm8gb3RoZXIgd2F5IHRvIGRlbGV0ZSB0aGUgcHJvcGVydHkuXG4gIGRlbGV0ZSBhcHAubWV0YWRhdGFDYWNoZS5maWxlQ2FjaGVbZmlsZS5wYXRoXTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZSAtLSBXZSBoYXZlIG5vIG90aGVyIHdheSB0byBkZWxldGUgdGhlIHByb3BlcnR5LlxuICBkZWxldGUgYXBwLm1ldGFkYXRhQ2FjaGUubWV0YWRhdGFDYWNoZVtmaWxlLnBhdGhdO1xufVxuXG4vKipcbiAqIFVucmVnaXN0ZXJzIGZpbGVzIGZyb20gdGhlIE9ic2lkaWFuIGFwcC5cbiAqXG4gKiBAcGFyYW0gYXBwIC0gVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBmaWxlcyAtIFRoZSBmaWxlcyB0byB1bnJlZ2lzdGVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5yZWdpc3RlckZpbGVzKGFwcDogQXBwLCBmaWxlczogVEFic3RyYWN0RmlsZVtdKTogdm9pZCB7XG4gIGNvbnN0IHJlZ2lzdGVyZWRGaWxlc0NvdW50cyA9IGdldFJlZ2lzdGVyZWRGaWxlc0NvdW50cygpO1xuXG4gIGZvciAobGV0IGZpbGUgb2YgZmlsZXMpIHtcbiAgICB3aGlsZSAoZmlsZS5kZWxldGVkKSB7XG4gICAgICBsZXQgY291bnQgPSByZWdpc3RlcmVkRmlsZXNDb3VudHMuZ2V0KGZpbGUucGF0aCkgPz8gMTtcbiAgICAgIGNvdW50LS07XG4gICAgICByZWdpc3RlcmVkRmlsZXNDb3VudHMuc2V0KGZpbGUucGF0aCwgY291bnQpO1xuICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgIHJlZ2lzdGVyZWRGaWxlc0NvdW50cy5kZWxldGUoZmlsZS5wYXRoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZSAtLSBXZSBoYXZlIG5vIG90aGVyIHdheSB0byBkZWxldGUgdGhlIHByb3BlcnR5LlxuICAgICAgICBkZWxldGUgYXBwLnZhdWx0LmZpbGVNYXBbZmlsZS5wYXRoXTtcblxuICAgICAgICBpZiAoaXNGaWxlKGZpbGUpKSB7XG4gICAgICAgICAgYXBwLm1ldGFkYXRhQ2FjaGUudW5pcXVlRmlsZUxvb2t1cC5yZW1vdmUoZmlsZS5uYW1lLnRvTG93ZXJDYXNlKCksIGZpbGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZpbGUgPSBnZXRGb2xkZXIoe1xuICAgICAgICBhcHAsXG4gICAgICAgIHBhdGhPckZvbGRlcjogcGFyZW50Rm9sZGVyUGF0aChmaWxlLnBhdGgpLFxuICAgICAgICBzaG91bGRJbmNsdWRlTm9uRXhpc3Rpbmc6IHRydWVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kQWR2YW5jZWRNZXRhZGF0YUNhY2hlQmFja2xpbmtzQXBpKCk6IEFkdmFuY2VkTWV0YWRhdGFDYWNoZUJhY2tsaW5rc0FwaSB8IG51bGwge1xuICByZXR1cm4gZmluZFBsdWdpbkFwaTxBZHZhbmNlZE1ldGFkYXRhQ2FjaGVCYWNrbGlua3NBcGk+KHtcbiAgICBhcGlWZXJzaW9uUmFuZ2U6IEFEVkFOQ0VEX01FVEFEQVRBX0NBQ0hFX0JBQ0tMSU5LU19BUElfVkVSU0lPTl9SQU5HRSxcbiAgICBjb250cmFjdDogQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfQkFDS0xJTktTX0FQSV9DT05UUkFDVCxcbiAgICBwbHVnaW5JZDogQURWQU5DRURfTUVUQURBVEFfQ0FDSEVfUExVR0lOX0lEXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRSZWdpc3RlcmVkRmlsZXNDb3VudHMoKTogTWFwPHN0cmluZywgbnVtYmVyPiB7XG4gIHJldHVybiBnZXRPYnNpZGlhbkRldlV0aWxzU3RhdGUoJ3JlZ2lzdGVyZWRGaWxlc0NvdW50cycsIG5ldyBNYXA8c3RyaW5nLCBudW1iZXI+KCkpLnZhbHVlO1xufVxuXG4vKipcbiAqIFN0cnVjdHVyYWxseSByZWNvZ25pemVzIHRoZSBiYWNrbGlua3MgZGljdGlvbmFyeSBhbm90aGVyIHBsdWdpbidzIGNvcHkgYnVpbHQsIG9yIGBudWxsYC4gVGhlIGNsYXNzIGl0IHdhcyBidWlsdCBmcm9tIGxpdmVzIGluIHRoYXQgY29weSwgc28gYGluc3RhbmNlb2ZgIGNhbm5vdCBiZSB1c2VkIChydWxlIEw5IGluIGBBR0VOVFMubWRgKS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBXaGV0aGVyIHRoZSB2YWx1ZSBpcyBgbnVsbGAgb3IgcmVhZHMgYXMgYSBiYWNrbGlua3MgZGljdGlvbmFyeS5cbiAqL1xuZnVuY3Rpb24gaXNOdWxsYWJsZUJhY2tsaW5rc0RpY3QodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyBDdXN0b21BcnJheURpY3Q8UmVmZXJlbmNlPiB8IG51bGwge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGxcbiAgICB8fCAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0J1xuICAgICAgJiYgUmVmbGVjdC5nZXQodmFsdWUsICdkYXRhJykgaW5zdGFuY2VvZiBNYXBcbiAgICAgICYmIHR5cGVvZiBSZWZsZWN0LmdldCh2YWx1ZSwgJ2dldCcpID09PSAnZnVuY3Rpb24nXG4gICAgICAmJiB0eXBlb2YgUmVmbGVjdC5nZXQodmFsdWUsICdrZXlzJykgPT09ICdmdW5jdGlvbicpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUV4dGVybmFsQm9keUxpbmtzKGNvbnRlbnQ6IHN0cmluZywgY2FjaGU6IENhY2hlZE1ldGFkYXRhKTogUGFyc2VMaW5rUmVmZXJlbmNlW10ge1xuICBjb25zdCBmcm9udG1hdHRlckVuZE9mZnNldCA9IGNhY2hlLmZyb250bWF0dGVyUG9zaXRpb24/LmVuZC5vZmZzZXQgPz8gMDtcbiAgcmV0dXJuIHBhcnNlTGlua3MoY29udGVudClcbiAgICAuZmlsdGVyKChwYXJzZUxpbmtSZXN1bHQpID0+IHBhcnNlTGlua1Jlc3VsdC5pc0V4dGVybmFsICYmIHBhcnNlTGlua1Jlc3VsdC5zdGFydE9mZnNldCA+PSBmcm9udG1hdHRlckVuZE9mZnNldClcbiAgICAubWFwKChwYXJzZUxpbmtSZXN1bHQpID0+IHRvUGFyc2VMaW5rUmVmZXJlbmNlKHsgY29udGVudCwgcGFyc2VMaW5rUmVzdWx0IH0pKTtcbn1cblxuZnVuY3Rpb24gdG9QYXJzZWRDYWNoZWRNZXRhZGF0YUV4KHBhcmFtczogVG9QYXJzZWRDYWNoZWRNZXRhZGF0YUV4UGFyYW1zKTogQ2FjaGVkTWV0YWRhdGFFeCB7XG4gIGNvbnN0IHsgY2FjaGUsIGNvbnRlbnQsIG9wdGlvbnMgfSA9IHBhcmFtcztcbiAgY29uc3QgZmVhdHVyZXM6IENhY2hlZE1ldGFkYXRhRXhGZWF0dXJlW10gPSBbQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuTmF0aXZlXTtcbiAgY29uc3QgcmVzdWx0OiBDYWNoZWRNZXRhZGF0YUV4ID0geyAuLi5jYWNoZSwgZmVhdHVyZXMgfTtcblxuICBpZiAob3B0aW9ucy5zaG91bGRQYXJzZUV4dGVybmFsTGlua3MpIHtcbiAgICByZXN1bHQuZXh0ZXJuYWxMaW5rcyA9IHBhcnNlRXh0ZXJuYWxCb2R5TGlua3MoY29udGVudCwgY2FjaGUpO1xuICAgIGZlYXR1cmVzLnB1c2goQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRXh0ZXJuYWxMaW5rcyk7XG4gIH1cblxuICBpZiAoXG4gICAgb3B0aW9ucy5zaG91bGRQYXJzZUZyb250bWF0dGVyRXh0ZXJuYWxMaW5rc1xuICAgIHx8IG9wdGlvbnMuc2hvdWxkUGFyc2VNdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzXG4gICAgfHwgb3B0aW9ucy5zaG91bGRQYXJzZU11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzXG4gICkge1xuICAgIGNvbnN0IGZyb250bWF0dGVyTGlua3MgPSBwYXJzZUZyb250bWF0dGVyTGlua3MoY2FjaGUuZnJvbnRtYXR0ZXIpO1xuXG4gICAgaWYgKG9wdGlvbnMuc2hvdWxkUGFyc2VGcm9udG1hdHRlckV4dGVybmFsTGlua3MpIHtcbiAgICAgIHJlc3VsdC5mcm9udG1hdHRlckV4dGVybmFsTGlua3MgPSBmcm9udG1hdHRlckxpbmtzLmZyb250bWF0dGVyRXh0ZXJuYWxMaW5rcztcbiAgICAgIGZlYXR1cmVzLnB1c2goQ2FjaGVkTWV0YWRhdGFFeEZlYXR1cmUuRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zaG91bGRQYXJzZU11bHRpVmFsdWVGcm9udG1hdHRlckV4dGVybmFsTGlua3MpIHtcbiAgICAgIHJlc3VsdC5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzID0gZnJvbnRtYXR0ZXJMaW5rcy5tdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzO1xuICAgICAgZmVhdHVyZXMucHVzaChDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5NdWx0aVZhbHVlRnJvbnRtYXR0ZXJFeHRlcm5hbExpbmtzKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5zaG91bGRQYXJzZU11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzKSB7XG4gICAgICByZXN1bHQubXVsdGlWYWx1ZUZyb250bWF0dGVyTGlua3MgPSBmcm9udG1hdHRlckxpbmtzLm11bHRpVmFsdWVGcm9udG1hdHRlckxpbmtzO1xuICAgICAgZmVhdHVyZXMucHVzaChDYWNoZWRNZXRhZGF0YUV4RmVhdHVyZS5NdWx0aVZhbHVlRnJvbnRtYXR0ZXJMaW5r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
|
|
@@ -132,40 +132,14 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
132
132
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
133
133
|
var plugin_api_schema_exports = {};
|
|
134
134
|
__export(plugin_api_schema_exports, {
|
|
135
|
-
createArgumentsSchema: () => createArgumentsSchema,
|
|
136
|
-
createTypeGuardSchema: () => createTypeGuardSchema
|
|
135
|
+
createArgumentsSchema: () => import_api_contract.createArgumentsSchema,
|
|
136
|
+
createTypeGuardSchema: () => import_api_contract.createTypeGuardSchema
|
|
137
137
|
});
|
|
138
138
|
module.exports = __toCommonJS(plugin_api_schema_exports);
|
|
139
|
-
var
|
|
140
|
-
var import_library = require('../library.cjs');
|
|
141
|
-
function createArgumentsSchema(parameters) {
|
|
142
|
-
const parameterList = (0, import_object_utils.castTo)(parameters);
|
|
143
|
-
return createSchema((value) => {
|
|
144
|
-
if (!Array.isArray(value)) {
|
|
145
|
-
return { issues: [{ message: "Expected an argument list." }] };
|
|
146
|
-
}
|
|
147
|
-
if (value.length > parameterList.length) {
|
|
148
|
-
return { issues: [{ message: `Expected at most ${String(parameterList.length)} argument(s), got ${String(value.length)}.` }] };
|
|
149
|
-
}
|
|
150
|
-
const issues = parameterList.flatMap((parameter, index) => parameter.typeGuard(value[index]) ? [] : [{ message: `Expected ${parameter.expected}.`, path: [index] }]);
|
|
151
|
-
return issues.length === 0 ? { value: (0, import_object_utils.castTo)(value) } : { issues };
|
|
152
|
-
});
|
|
153
|
-
}
|
|
154
|
-
function createTypeGuardSchema(params) {
|
|
155
|
-
return createSchema((value) => params.typeGuard(value) ? { value } : { issues: [{ message: `Expected ${params.expected}.` }] });
|
|
156
|
-
}
|
|
157
|
-
function createSchema(validate) {
|
|
158
|
-
return {
|
|
159
|
-
"~standard": {
|
|
160
|
-
validate,
|
|
161
|
-
vendor: import_library.OBSIDIAN_LIBRARY_NAME,
|
|
162
|
-
version: 1
|
|
163
|
-
}
|
|
164
|
-
};
|
|
165
|
-
}
|
|
139
|
+
var import_api_contract = require('@mnaoumov/typescript-lib/api-contract');
|
|
166
140
|
// Annotate the CommonJS export names for ESM import in node:
|
|
167
141
|
0 && (module.exports = {
|
|
168
142
|
createArgumentsSchema,
|
|
169
143
|
createTypeGuardSchema
|
|
170
144
|
});
|
|
171
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
145
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL3BsdWdpbi9wbHVnaW4tYXBpLXNjaGVtYS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSB7QGxpbmsgaHR0cHM6Ly9zdGFuZGFyZHNjaGVtYS5kZXYgfCBTdGFuZGFyZCBTY2hlbWF9IGJ1aWxkZXJzIGZvciB0aGUgcGF5bG9hZCBoYWx2ZXMgb2YgYSBwbHVnaW4gQVBJXG4gKiBjb250cmFjdCwgcmUtZXhwb3J0ZWQgZnJvbSBgQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FwaS1jb250cmFjdGAsIHdoZXJlIHRoZXkgbm93IGxpdmUuXG4gKlxuICogTm90aGluZyBhYm91dCB0aGVtIGlzIE9ic2lkaWFuLXNwZWNpZmljOiBhIGNvbnRyYWN0J3Mgc2NoZW1hcyBhcmUgcGxhaW4gb2JqZWN0cyBvdmVyIHBsYWluIGZ1bmN0aW9ucywgd2hpY2ggYVxuICogdHlwZSBndWFyZCBhbHJlYWR5IGlzLiBJbXBvcnQgdGhlbSBmcm9tIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXBpLWNvbnRyYWN0YCBpbnN0ZWFkOyB0aGVzZSByZS1leHBvcnRzIHN0YXlcbiAqIG9ubHkgc28gdGhhdCBtb3ZlIGxhbmRzIGluIGEgbWlub3IsIGFuZCBnbyBpbiB0aGUgbmV4dCBtYWpvci5cbiAqL1xuXG5leHBvcnQge1xuICAvKipcbiAgICogT25lIHR5cGUgZ3VhcmQgcGVyIHBhcmFtZXRlciBvZiBhIG1ldGhvZCwgaW4gb3JkZXIuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIEltcG9ydCBgQXJndW1lbnRUeXBlR3VhcmRzYCBmcm9tIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXBpLWNvbnRyYWN0YC5cbiAgICovXG4gIHR5cGUgQXJndW1lbnRUeXBlR3VhcmRzLFxuICAvKipcbiAgICogQnVpbGRzIHRoZSBpbnB1dCBzY2hlbWEgb2YgYSBtZXRob2QgY29udHJhY3QuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIEltcG9ydCBgY3JlYXRlQXJndW1lbnRzU2NoZW1hYCBmcm9tIGBAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXBpLWNvbnRyYWN0YC5cbiAgICovXG4gIGNyZWF0ZUFyZ3VtZW50c1NjaGVtYSxcbiAgLyoqXG4gICAqIEJ1aWxkcyBhIHNjaGVtYSBvdmVyIG9uZSB2YWx1ZSBmcm9tIGEgdHlwZSBndWFyZC5cbiAgICpcbiAgICogQGRlcHJlY2F0ZWQgSW1wb3J0IGBjcmVhdGVUeXBlR3VhcmRTY2hlbWFgIGZyb20gYEBtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9hcGktY29udHJhY3RgLlxuICAgKi9cbiAgY3JlYXRlVHlwZUd1YXJkU2NoZW1hLFxuICAvKipcbiAgICogT25lIHZhbHVlIGEgc2NoZW1hIGFjY2VwdHMsIGRlc2NyaWJlZCBieSBhIHR5cGUgZ3VhcmQuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIEltcG9ydCBgQ3JlYXRlVHlwZUd1YXJkU2NoZW1hUGFyYW1zYCAob3IgYEV4cGVjdGVkVHlwZUd1YXJkYCkgZnJvbVxuICAgKiBgQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FwaS1jb250cmFjdGAuXG4gICAqL1xuICB0eXBlIENyZWF0ZVR5cGVHdWFyZFNjaGVtYVBhcmFtc1xufSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXBpLWNvbnRyYWN0JztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQVdBLDBCQTBCTzsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -2,58 +2,36 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* @file
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
5
|
+
* The {@link https://standardschema.dev | Standard Schema} builders for the payload halves of a plugin API
|
|
6
|
+
* contract, re-exported from `@mnaoumov/typescript-lib/api-contract`, where they now live.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* one argument list (an input). zod / valibot / arktype schemas plug into the same slots unchanged; this library
|
|
12
|
-
* just does not make every consumer bundle one to describe two arguments.
|
|
8
|
+
* Nothing about them is Obsidian-specific: a contract's schemas are plain objects over plain functions, which a
|
|
9
|
+
* type guard already is. Import them from `@mnaoumov/typescript-lib/api-contract` instead; these re-exports stay
|
|
10
|
+
* only so that move lands in a minor, and go in the next major.
|
|
13
11
|
*/
|
|
14
|
-
|
|
12
|
+
export {
|
|
15
13
|
/**
|
|
16
14
|
* One type guard per parameter of a method, in order.
|
|
17
15
|
*
|
|
18
|
-
* @
|
|
16
|
+
* @deprecated Import `ArgumentTypeGuards` from `@mnaoumov/typescript-lib/api-contract`.
|
|
19
17
|
*/
|
|
20
|
-
|
|
21
|
-
readonly [TIndex in keyof TParameters]: CreateTypeGuardSchemaParams<TParameters[TIndex]>;
|
|
22
|
-
};
|
|
18
|
+
type ArgumentTypeGuards,
|
|
23
19
|
/**
|
|
24
|
-
*
|
|
20
|
+
* Builds the input schema of a method contract.
|
|
25
21
|
*
|
|
26
|
-
* @
|
|
22
|
+
* @deprecated Import `createArgumentsSchema` from `@mnaoumov/typescript-lib/api-contract`.
|
|
27
23
|
*/
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* What the value should have been, phrased to follow "Expected", e.g. `'a string'`.
|
|
31
|
-
*/
|
|
32
|
-
readonly expected: string;
|
|
33
|
-
/**
|
|
34
|
-
* Decides whether the value is acceptable.
|
|
35
|
-
*
|
|
36
|
-
* @param value - The value to check.
|
|
37
|
-
* @returns Whether the value is a `T`.
|
|
38
|
-
*/
|
|
39
|
-
readonly typeGuard: (value: unknown) => value is T;
|
|
40
|
-
}
|
|
24
|
+
createArgumentsSchema,
|
|
41
25
|
/**
|
|
42
|
-
* Builds
|
|
43
|
-
* parameter. An argument that fails its guard is reported with its index as the issue path, and an argument
|
|
44
|
-
* list longer than the parameter list is refused. A missing argument reaches its guard as `undefined`, so an
|
|
45
|
-
* optional parameter's guard accepts `undefined`.
|
|
26
|
+
* Builds a schema over one value from a type guard.
|
|
46
27
|
*
|
|
47
|
-
* @
|
|
48
|
-
* @param parameters - One guard per parameter, in order.
|
|
49
|
-
* @returns The schema.
|
|
28
|
+
* @deprecated Import `createTypeGuardSchema` from `@mnaoumov/typescript-lib/api-contract`.
|
|
50
29
|
*/
|
|
51
|
-
|
|
30
|
+
createTypeGuardSchema,
|
|
52
31
|
/**
|
|
53
|
-
*
|
|
32
|
+
* One value a schema accepts, described by a type guard.
|
|
54
33
|
*
|
|
55
|
-
* @
|
|
56
|
-
*
|
|
57
|
-
* @returns The schema.
|
|
34
|
+
* @deprecated Import `CreateTypeGuardSchemaParams` (or `ExpectedTypeGuard`) from
|
|
35
|
+
* `@mnaoumov/typescript-lib/api-contract`.
|
|
58
36
|
*/
|
|
59
|
-
|
|
37
|
+
type CreateTypeGuardSchemaParams } from '@mnaoumov/typescript-lib/api-contract';
|