@mnaoumov/obsidian-lib 4.3.0 → 5.1.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 +11 -1
- package/dist/lib/cjs/__merged.d.cts +3 -3
- package/dist/lib/cjs/components/case-insensitive-file-index-component.cjs +1 -1
- package/dist/lib/cjs/components/case-insensitive-file-index-component.d.cts +1 -1
- package/dist/lib/cjs/components/plugin-context-component.cjs +3 -1
- package/dist/lib/cjs/components/plugin-context-component.d.cts +2 -1
- package/dist/lib/cjs/components/plugin-gate-component.cjs +3 -3
- package/dist/lib/cjs/components/plugin-suggestion-component.cjs +2 -2
- package/dist/lib/cjs/components/plugin-suggestion-component.d.cts +1 -1
- package/dist/lib/cjs/components/settings-migration-component.cjs +1 -1
- package/dist/lib/cjs/components/settings-migration-component.d.cts +1 -1
- package/dist/lib/cjs/css-class.cjs +3 -2
- package/dist/lib/cjs/css-class.d.cts +12 -4
- package/dist/lib/cjs/debug.cjs +22 -2
- package/dist/lib/cjs/debug.d.cts +10 -3
- package/dist/lib/cjs/demo-vault-helper-settings.cjs +1 -1
- package/dist/lib/cjs/demo-vault-helper-settings.d.cts +1 -1
- package/dist/lib/cjs/frontmatter.cjs +1 -1
- package/dist/lib/cjs/frontmatter.d.cts +1 -1
- package/dist/lib/cjs/generated-during-build.cjs +2 -2
- package/dist/lib/cjs/generated-during-build.d.cts +2 -2
- package/dist/lib/cjs/i18n/i18n.cjs +2 -2
- package/dist/lib/cjs/i18n/i18n.d.cts +1 -1
- package/dist/lib/cjs/i18n/locales/en.cjs +5 -2
- package/dist/lib/cjs/i18n/locales/en.d.cts +4 -1
- package/dist/lib/cjs/i18n/locales/translations-map.d.cts +4 -1
- package/dist/lib/cjs/library-styles.cjs +2 -2
- package/dist/lib/cjs/library.cjs +5 -2
- package/dist/lib/cjs/library.d.cts +12 -5
- package/dist/lib/cjs/modals/minimizable-modal.cjs +1 -1
- package/dist/lib/cjs/modals/minimizable-modal.d.cts +1 -1
- package/dist/lib/cjs/modals/suggest-modal-command-builder.cjs +1 -1
- package/dist/lib/cjs/modals/suggest-modal-command-builder.d.cts +3 -3
- package/dist/lib/cjs/obsidian-dev-utils-state.cjs +21 -1
- package/dist/lib/cjs/obsidian-dev-utils-state.d.cts +10 -2
- package/dist/lib/cjs/path-settings.cjs +214 -35
- package/dist/lib/cjs/path-settings.d.cts +21 -5
- package/dist/lib/cjs/plugin/plugin-api.cjs +1 -1
- package/dist/lib/cjs/plugin/plugin-api.d.cts +1 -1
- package/dist/lib/cjs/plugin/plugin-context.cjs +5 -2
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.cjs +44 -4
- package/dist/lib/cjs/plugin/plugin-lifecycle-events.d.cts +66 -15
- package/dist/lib/cjs/plugin/plugin.cjs +2 -2
- package/dist/lib/cjs/plugin/plugin.d.cts +1 -1
- package/dist/lib/cjs/resource-lock.cjs +1 -1
- package/dist/lib/cjs/setting-components/checkbox-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/checkbox-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/code-highlighter-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/code-highlighter-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/date-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/date-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/date-time-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/date-time-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/email-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/email-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/file-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/file-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/month-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/month-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/multiple-dropdown-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/multiple-dropdown-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/multiple-email-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/multiple-email-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/multiple-file-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/multiple-file-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/multiple-text-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/multiple-text-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/number-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/number-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/password-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/password-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/telephone-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/telephone-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/time-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/time-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/tri-state-checkbox-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/tri-state-checkbox-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/typed-dropdown-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/typed-dropdown-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/typed-multiple-dropdown-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/url-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/url-component.d.cts +1 -1
- package/dist/lib/cjs/setting-components/week-component.cjs +1 -1
- package/dist/lib/cjs/setting-components/week-component.d.cts +1 -1
- package/dist/lib/cjs/vault.cjs +1 -1
- package/dist/lib/cjs/vault.d.cts +2 -2
- package/dist/lib/esm/__merged.d.mts +3 -3
- package/dist/lib/esm/__merged.mjs +11 -1
- package/dist/lib/esm/components/case-insensitive-file-index-component.d.mts +1 -1
- package/dist/lib/esm/components/case-insensitive-file-index-component.mjs +1 -1
- package/dist/lib/esm/components/plugin-context-component.d.mts +2 -1
- package/dist/lib/esm/components/plugin-context-component.mjs +3 -1
- package/dist/lib/esm/components/plugin-gate-component.mjs +3 -3
- package/dist/lib/esm/components/plugin-suggestion-component.d.mts +1 -1
- package/dist/lib/esm/components/plugin-suggestion-component.mjs +2 -2
- package/dist/lib/esm/components/settings-migration-component.d.mts +1 -1
- package/dist/lib/esm/components/settings-migration-component.mjs +1 -1
- package/dist/lib/esm/css-class.d.mts +12 -4
- package/dist/lib/esm/css-class.mjs +3 -2
- package/dist/lib/esm/debug.d.mts +10 -3
- package/dist/lib/esm/debug.mjs +26 -3
- package/dist/lib/esm/demo-vault-helper-settings.d.mts +1 -1
- package/dist/lib/esm/frontmatter.d.mts +1 -1
- package/dist/lib/esm/frontmatter.mjs +1 -1
- package/dist/lib/esm/generated-during-build.d.mts +2 -2
- package/dist/lib/esm/generated-during-build.mjs +2 -2
- package/dist/lib/esm/i18n/i18n.d.mts +1 -1
- package/dist/lib/esm/i18n/i18n.mjs +2 -2
- package/dist/lib/esm/i18n/locales/en.d.mts +4 -1
- package/dist/lib/esm/i18n/locales/en.mjs +5 -2
- package/dist/lib/esm/i18n/locales/translations-map.d.mts +4 -1
- package/dist/lib/esm/library-styles.mjs +3 -3
- package/dist/lib/esm/library.d.mts +12 -5
- package/dist/lib/esm/library.mjs +4 -2
- package/dist/lib/esm/modals/minimizable-modal.d.mts +1 -1
- package/dist/lib/esm/modals/minimizable-modal.mjs +1 -1
- package/dist/lib/esm/modals/suggest-modal-command-builder.d.mts +3 -3
- package/dist/lib/esm/modals/suggest-modal-command-builder.mjs +1 -1
- package/dist/lib/esm/obsidian-dev-utils-state.d.mts +10 -2
- package/dist/lib/esm/obsidian-dev-utils-state.mjs +20 -1
- package/dist/lib/esm/path-settings.d.mts +21 -5
- package/dist/lib/esm/path-settings.mjs +215 -41
- package/dist/lib/esm/plugin/plugin-api.d.mts +1 -1
- package/dist/lib/esm/plugin/plugin-api.mjs +1 -1
- package/dist/lib/esm/plugin/plugin-context.mjs +6 -3
- package/dist/lib/esm/plugin/plugin-lifecycle-events.d.mts +66 -15
- package/dist/lib/esm/plugin/plugin-lifecycle-events.mjs +41 -4
- package/dist/lib/esm/plugin/plugin.d.mts +1 -1
- package/dist/lib/esm/plugin/plugin.mjs +2 -2
- package/dist/lib/esm/resource-lock.mjs +1 -1
- package/dist/lib/esm/setting-components/checkbox-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/checkbox-component.mjs +1 -1
- package/dist/lib/esm/setting-components/code-highlighter-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/code-highlighter-component.mjs +1 -1
- package/dist/lib/esm/setting-components/date-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/date-component.mjs +1 -1
- package/dist/lib/esm/setting-components/date-time-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/date-time-component.mjs +1 -1
- package/dist/lib/esm/setting-components/email-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/email-component.mjs +1 -1
- package/dist/lib/esm/setting-components/file-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/file-component.mjs +1 -1
- package/dist/lib/esm/setting-components/month-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/month-component.mjs +1 -1
- package/dist/lib/esm/setting-components/multiple-dropdown-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/multiple-dropdown-component.mjs +1 -1
- package/dist/lib/esm/setting-components/multiple-email-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/multiple-email-component.mjs +1 -1
- package/dist/lib/esm/setting-components/multiple-file-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/multiple-file-component.mjs +1 -1
- package/dist/lib/esm/setting-components/multiple-text-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/multiple-text-component.mjs +1 -1
- package/dist/lib/esm/setting-components/number-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/number-component.mjs +1 -1
- package/dist/lib/esm/setting-components/password-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/password-component.mjs +1 -1
- package/dist/lib/esm/setting-components/telephone-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/telephone-component.mjs +1 -1
- package/dist/lib/esm/setting-components/time-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/time-component.mjs +1 -1
- package/dist/lib/esm/setting-components/tri-state-checkbox-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/tri-state-checkbox-component.mjs +1 -1
- package/dist/lib/esm/setting-components/typed-dropdown-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/typed-dropdown-component.mjs +1 -1
- package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/typed-multiple-dropdown-component.mjs +1 -1
- package/dist/lib/esm/setting-components/url-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/url-component.mjs +1 -1
- package/dist/lib/esm/setting-components/week-component.d.mts +1 -1
- package/dist/lib/esm/setting-components/week-component.mjs +1 -1
- package/dist/lib/esm/vault.d.mts +2 -2
- package/dist/lib/esm/vault.mjs +1 -1
- package/package.json +3 -3
|
@@ -428,7 +428,7 @@ class PluginGateComponent extends ComponentEx {
|
|
|
428
428
|
}
|
|
429
429
|
for (const dependency of unsatisfiedDependencies) {
|
|
430
430
|
const bannerEl = containerEl.createDiv({
|
|
431
|
-
cls: [CssClass.LibraryName, CssClass.PluginDependencyBanner]
|
|
431
|
+
cls: [CssClass.LibraryName, CssClass.LegacyLibraryName, CssClass.PluginDependencyBanner]
|
|
432
432
|
});
|
|
433
433
|
bannerEl.append(this.createBlockedMessage(dependency));
|
|
434
434
|
appendTextOrFragmentClone(bannerEl.createDiv(), dependency.reason);
|
|
@@ -481,7 +481,7 @@ class PluginGateComponent extends ComponentEx {
|
|
|
481
481
|
*/
|
|
482
482
|
renderConflictEntry(containerEl, conflict, messageFragment) {
|
|
483
483
|
const bannerEl = containerEl.createDiv({
|
|
484
|
-
cls: [CssClass.LibraryName, CssClass.PluginConflictBanner]
|
|
484
|
+
cls: [CssClass.LibraryName, CssClass.LegacyLibraryName, CssClass.PluginConflictBanner]
|
|
485
485
|
});
|
|
486
486
|
bannerEl.append(messageFragment);
|
|
487
487
|
appendTextOrFragmentClone(bannerEl.createDiv(), conflict.reason);
|
|
@@ -520,4 +520,4 @@ export {
|
|
|
520
520
|
PluginConflictSeverity,
|
|
521
521
|
PluginGateComponent
|
|
522
522
|
};
|
|
523
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BsdWdpbi1nYXRlLWNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGdhdGUgb24gYSBwbHVnaW4ncyBmZWF0dXJlIHN1cmZhY2U6IHdoYXQgbXVzdCBiZSBQUkVTRU5UIGZvciBpdCB0byBydW4sIGFuZCB3aGF0IG11c3QgTk9UIGJlLlxuICpcbiAqIEJvdGggaGFsdmVzIGFuc3dlciB0aGUgc2FtZSBxdWVzdGlvbiDigJQgbWF5IHRoaXMgcGx1Z2luJ3MgYG9ubG9hZEltcGxgIHJ1biByaWdodCBub3c/IOKAlCBzbyB0aGV5IGFyZSBvbmVcbiAqIGNvbXBvbmVudCByYXRoZXIgdGhhbiB0d28uIEEgc2Vjb25kLCBpbmRlcGVuZGVudCBnYXRlIHdvdWxkIGRvdWJsZS1sb2FkIHRoZSBzdXJmYWNlIGFuZCBzdGFjayBhIHNlY29uZFxuICogXCJibG9ja2VkXCIgc2V0dGluZ3MgdGFiIG9udG8gdGhlIHNhbWUgcGx1Z2luLCBhbmQgbmVpdGhlciBjb3VsZCBzZWUgdGhlIG90aGVyJ3MgcmVhc29uIGZvciByZWZ1c2luZy5cbiAqXG4gKiAjIyBEZXBlbmRlbmNpZXM6IGEgcGx1Z2luIGRlY2xhcmluZyB3aGF0IGl0IGNhbm5vdCB3b3JrIHdpdGhvdXRcbiAqXG4gKiBUaGlzIGlzIHRoZSBzdHJpY3Qgc2libGluZyBvZiBgUGx1Z2luU3VnZ2VzdGlvbkNvbXBvbmVudGAsIGFuZCB0aGUgZGlmZmVyZW5jZSBpcyB0aGUgd2hvbGUgcG9pbnQuIEFcbiAqIFNVR0dFU1RJT04gaXMgYW4gb2ZmZXIg4oCUIHRoZSBob3N0IGtlZXBzIHdvcmtpbmcgd2l0aG91dCBpdCBhbmQgc2ltcGx5IGNhbm5vdCBkbyBvbmUgdGhpbmcuIEEgREVQRU5ERU5DWVxuICogaXMgYSByZXF1aXJlbWVudDogYG9ubG9hZEltcGxgIG5ldmVyIHJ1bnMsIG5vIGNvbW1hbmQgaXMgcmVnaXN0ZXJlZCwgbm8gaGFuZGxlciBpcyBpbnN0YWxsZWQsIG5vdGhpbmcgaXNcbiAqIHBhdGNoZWQuIFJlYWNoIGZvciBhIHN1Z2dlc3Rpb24gd2hlbiB0aGUgb3RoZXIgcGx1Z2luIGFkZHMgc29tZXRoaW5nOyByZWFjaCBmb3IgYSBkZXBlbmRlbmN5IHdoZW4gdGhlXG4gKiBob3N0J3MgYWR2ZXJ0aXNlZCBiZWhhdmlvciBpcyBub3QgdGhlcmUgd2l0aG91dCBpdC5cbiAqXG4gKiBPYnNpZGlhbiBoYXMgbm8gZGVwZW5kZW5jeSBmaWVsZCBpbiBhIG1hbmlmZXN0LCB3aGljaCBpcyBleGFjdGx5IHRoZSBwcm9ibGVtIHRoaXMgY2xvc2VzLiBXaXRob3V0IG9uZSxcbiAqIGEgdXNlciBtZWV0aW5nIGFuIHVuZmFtaWxpYXIgcGx1Z2luIGluIHRoZWlyIGxpc3QgbW9udGhzIGxhdGVyIGhhcyBub3RoaW5nIHRlbGxpbmcgdGhlbSBpdCBpc1xuICogbG9hZC1iZWFyaW5nIOKAlCB0aGV5IHJlbW92ZSBpdCwgYW5kIHRoZSBicmVha2FnZSBzdXJmYWNlcyB3ZWVrcyBhZnRlciB0aGF0IGFzIGRhbWFnZSB0aGV5IGNhbm5vdCBjb25uZWN0XG4gKiB0byBhbnl0aGluZyB0aGV5IGRpZC4gU28gdGhlIHJlbGF0aW9uc2hpcCBpcyBtYWRlIHZpc2libGUgZnJvbSBib3RoIGVuZHMgYW5kIGVuZm9yY2VkIHdoaWxlIGl0IGhvbGRzOlxuICogdGhlIGRlcGVuZGVudCBleHBsYWlucyBpdHNlbGYgd2hlcmUgdGhlIHVzZXIgaXMgbG9va2luZywgcmVwYWlycyBpdHNlbGYgaW4gb25lIGNsaWNrLCBhbmQgcmVhY3RzIHRoZVxuICogSU5TVEFOVCB0aGUgZGVwZW5kZW5jeSBnb2VzIGF3YXkgcmF0aGVyIHRoYW4gZGVncmFkaW5nIHF1aWV0bHkuXG4gKlxuICogVGhyZWUgY2hvaWNlcyBhcmUgZGVsaWJlcmF0ZSBhbmQgd29ydGggc3RhdGluZywgYmVjYXVzZSBlYWNoIGhhcyBhbiBvYnZpb3VzLWxvb2tpbmcgYWx0ZXJuYXRpdmU6XG4gKlxuICogLSAqKkJsb2NrZWQgbWVhbnMgZW5hYmxlZC1idXQtaW5lcnQsIG5ldmVyIHNlbGYtZGlzYWJsZWQuKiogQ2FsbGluZyBgZGlzYWJsZVBsdWdpbkFuZFNhdmVgIG9uIGl0c2VsZlxuICogICB3b3VsZCBiZSB0aGUgbGl0ZXJhbCByZWFkaW5nIG9mIFwicmVmdXNlcyB0byBsb2FkXCIsIGFuZCBpdCByZXdyaXRlcyBhIGNvbmZpZyB0aGF0IGJlbG9uZ3MgdG8gdGhlIHVzZXIg4oCUXG4gKiAgIHdobyB3b3VsZCB0aGVuIGhhdmUgdG8gcmVtZW1iZXIgdG8gcmUtZW5hYmxlIGl0IGFmdGVyIGZpeGluZyB0aGUgZGVwZW5kZW5jeS4gU3RheWluZyBlbmFibGVkIGFuZCBpbmVydFxuICogICBzYXlzIHRoZSBzYW1lIHRoaW5nIHRvIHRoZSB1c2VyLCBjaGFuZ2VzIG5vdGhpbmcgdGhleSBvd24sIGFuZCBjYW4gdW5kbyBpdHNlbGYuXG4gKiAtICoqQmxvY2tlZCBpcyBub3QgYW4gZXJyb3IuKiogVGhyb3dpbmcgZnJvbSBgb25sb2FkYCBtYXJrcyB0aGUgcGx1Z2luIGZhaWxlZCBpbiBPYnNpZGlhbiBhbmQgaGFuZHMgdGhlXG4gKiAgIHVzZXIgYSBzdGFjayB0cmFjZSBpbnN0ZWFkIG9mIGEgc2VudGVuY2UgYW5kIGEgYnV0dG9uLlxuICogLSAqKkEgZGVwZW5kZW5jeSBtdXN0IHB1Ymxpc2ggYW4gQVBJLioqIFRoYXQgaXMgd2hhdCBtYWtlcyBwcmVzZW5jZSwgYWJzZW5jZSwgdmVyc2lvbiBhbmQgZGVwYXJ0dXJlIGFsbFxuICogICBvYnNlcnZhYmxlIHRocm91Z2ggb25lIG1lY2hhbmlzbSDigJQgYHdhdGNoUGx1Z2luQXBpYCdzIHJlZmVyZW5jZSBpcyBsaXZlLCBpcyByZXZva2VkIHdoZW4gdGhlIHByb3ZpZGVyXG4gKiAgIHVubG9hZHMsIGFuZCBhbHJlYWR5IGNsYXNzaWZpZXMgbm90LWluc3RhbGxlZCBhZ2FpbnN0IG5vdC1lbmFibGVkIGFnYWluc3QgdG9vLW9sZC4gQSBwcm92aWRlciB3aXRoXG4gKiAgIG5vdGhpbmcgdG8gZXhwb3NlIGNhbiBwdWJsaXNoIGFuIGVtcHR5IEFQSSBwdXJlbHkgc28gaXQgY2FuIGJlIGRlcGVuZGVkIHVwb247IHRoZSBhbHRlcm5hdGl2ZSB3b3VsZCBiZVxuICogICBhIHNlY29uZCwgd2Vha2VyIGRldGVjdGlvbiBwYXRoIHRvIG1haW50YWluIGJlc2lkZSBpdC5cbiAqXG4gKiAjIyBDb25mbGljdHM6IGEgcGx1Z2luIGRlY2xhcmluZyB3aGF0IGl0IHJlZnVzZXMgdG8gcnVuIGJlc2lkZVxuICpcbiAqIFRoZSBpbnZlcnNlIHJlbGF0aW9uc2hpcCwgYW5kIGl0IG5lZWRzIGl0cyBvd24gZGV0ZWN0aW9uIHBhdGggYmVjYXVzZSB0aGUgZGVwZW5kZW5jeSBvbmUgZG9lcyBub3QgZml0LlxuICogQSBjb25mbGljdGluZyBwbHVnaW4gaXMgdHlwaWNhbGx5IGFuIE9MRCB2ZXJzaW9uIG9mIHNvbWUgb3RoZXIgcGx1Z2luIHRoYXQgc3RpbGwgb3ducyBiZWhhdmlvciB0aGlzIG9uZVxuICogaGFzIHRha2VuIG92ZXIg4oCUIGl0IHB1Ymxpc2hlcyBubyBBUEkgYXQgYWxsLCBzbyB0aGVyZSBpcyBubyBgYXBpVmVyc2lvblJhbmdlYCB0byBjb21wYXJlIGFnYWluc3QuXG4gKlxuICogVGhlIGFyZ3VtZW50IGZvciByZWZ1c2luZyByYXRoZXIgdGhhbiBjb21wZXRpbmcgY29tZXMgZnJvbSB0aGUgY2FzZSB0aGlzIGdlbmVyYWxpemVzOiB0d28gcmVuYW1lL2RlbGV0ZVxuICogaGFuZGxlcnMgYWN0aW5nIG9uIG9uZSByZW5hbWUgY29ycnVwdCBsaW5rcyBhbmQgbW92ZSBhdHRhY2htZW50cyB0d2ljZSwgYW5kIHRoZXJlIGlzIG5vIHJlbGlhYmxlIHdheSB0b1xuICogd2luIHRoYXQgcmFjZSDigJQgYSBoYW5kbGVyIGlzIGVsZWN0ZWQgYnkgcmVnaXN0cnkgb3JkZXIsIGJ1dCB0aGUgcGF0Y2hlcyB0aGF0IGRvIHRoZSB3b3JrIHNpdCBvdXRzaWRlXG4gKiB0aGF0IGVsZWN0aW9uLCBzbyB3aGljaGV2ZXIgcGx1Z2luIGxvYWRlZCBmaXJzdCBrZWVwcyBhIGhhbmQgb24gdGhlIHdoZWVsLiBFdmVyeSBzY2hlbWUgZm9yIHNlaXppbmdcbiAqIGNvbnRyb2wgZnJvbSBpbnNpZGUgaXMgbG9hZC1vcmRlciBkZXBlbmRlbnQuIFJlZnVzaW5nIGlzIGRldGVybWluaXN0aWMgd2hlcmUgY29tcGV0aW5nIGlzIG5vdCwgYW5kIGFcbiAqIHZhdWx0IHRoYXQgYnJpZWZseSBoYXMgbm8gaGFuZGxlciBpcyBhIGZhciBiZXR0ZXIgb3V0Y29tZSB0aGFuIG9uZSB3aXRoIHR3by5cbiAqXG4gKiBUd28gZGV0YWlscyBvZiB0aGF0IGRldGVjdGlvbiBjYXJyeSBvdmVyIHZlcmJhdGltLCBiZWNhdXNlIGJvdGggYXJlIGxvYWQtYmVhcmluZzpcbiAqXG4gKiAtICoqVmVyc2lvbnMgYXJlIHJlYWQsIG5ldmVyIHRoZSByZWdpc3RyeS4qKiBBIHBsdWdpbiB0aGF0IGhhcyBub3QgbG9hZGVkIHlldCBoYXMgcmVnaXN0ZXJlZCBub3RoaW5nLCBzb1xuICogICBhc2tpbmcgdGhlIHJlZ2lzdHJ5IGdpdmVzIGEgZGlmZmVyZW50IGFuc3dlciBkZXBlbmRpbmcgb24gd2hlbiBpdCBpcyBhc2tlZC4gYGFwcC5wbHVnaW5zLm1hbmlmZXN0c2AgaXNcbiAqICAgcG9wdWxhdGVkIGZvciBldmVyeSBpbnN0YWxsZWQgcGx1Z2luIGF0IHN0YXJ0dXAsIHdoYXRldmVyIHRoZSBsb2FkIG9yZGVyIHR1cm5zIG91dCB0byBiZS5cbiAqIC0gKipBbiB1bnBhcnNlYWJsZSB2ZXJzaW9uIGNvdW50cyBhcyBjb25mbGljdGluZy4qKiBGYWlsaW5nIGNsb3NlZCBpcyB0aGUgc2FmZSBkaXJlY3Rpb246IGEgZmFsc2UgYWxhcm1cbiAqICAgY29zdHMgYSBub3RpY2UsIGEgZmFsc2UgYWxsLWNsZWFyIGNvc3RzIGEgdmF1bHQuXG4gKlxuICogTm90IGV2ZXJ5IG92ZXJsYXAgaXMgdGhhdCBzZXZlcmUsIHdoaWNoIGlzIHdoeSBhIGNvbmZsaWN0IGRlY2xhcmVzIGEge0BsaW5rIFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHl9LlxuICogVHdvIHBsdWdpbnMgc2hpcHBpbmcgdGhlIHNhbWUgY29tbWFuZCBkdXBsaWNhdGUgYSBwYWxldHRlIGVudHJ5IGFuZCBkbyB0aGUgd29yayB0d2ljZSDigJQgYW5ub3lpbmcsIG5vdFxuICogY29ycnVwdGluZyDigJQgYW5kIHJlZnVzaW5nIHRvIGxvYWQgb3ZlciB0aGF0IHdvdWxkIGJlIGEgd29yc2Ugb3V0Y29tZSB0aGFuIHRoZSBvdmVybGFwLiBUaG9zZSBkZWNsYXJlXG4gKiB7QGxpbmsgUGx1Z2luQ29uZmxpY3RTZXZlcml0eS5XYXJufSBhbmQgYm90aCBrZWVwIHJ1bm5pbmcuXG4gKlxuICogIyMgV2hhdCB0aGlzIGNhbiBhbmQgY2Fubm90IHNlZVxuICpcbiAqIE9ic2lkaWFuIHJhaXNlcyBubyBldmVudCB3aGVuIEFOT1RIRVIgcGx1Z2luIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgKHNlZSBgcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHNgKSxcbiAqIHNvIGxpdmUgY29uZmxpY3QgZGV0ZWN0aW9uIGhhcyBhIHJlYWwgY2VpbGluZyBhbmQgaXQgaXMgc3RhdGVkIGhlcmUgcmF0aGVyIHRoYW4gaW1wbGllZCBhd2F5LiBBXG4gKiBjb25mbGljdGluZyBwbHVnaW4gYnVpbHQgb24gdGhpcyBsaWJyYXJ5IGFubm91bmNlcyBpdHNlbGYgdGhyb3VnaCB0aGUgbGlmZWN5Y2xlIGJyb2FkY2FzdCwgYW5kIGlzXG4gKiB0aGVyZWZvcmUgY2F1Z2h0IHRoZSBtb21lbnQgaXQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gT25lIHRoYXQgaXMgbm90IOKAlCBhbiBvbGQgcmVsZWFzZSBwcmVkYXRpbmcgdGhlXG4gKiBicm9hZGNhc3QsIG9yIGEgcGx1Z2luIGJ5IGFub3RoZXIgYXV0aG9yIGVudGlyZWx5IOKAlCBpcyBjYXVnaHQgYXQgdGhlIG5leHQgbG9hZCwgd2hpY2ggaXMgd2hlbiBpdHNcbiAqIG1hbmlmZXN0IGlzIHJlYWQuXG4gKlxuICogIyMgV2h5IGEgbG9zcyBpcyBhbm5vdW5jZWQgbGF0ZVxuICpcbiAqIE9ic2lkaWFuIHVwZGF0ZXMgYW4gZW5hYmxlZCBwbHVnaW4gYnkgcmVsb2FkaW5nIGl0OiB0aGUgb2xkIGNvcHkgdW5sb2FkcywgdGhlIG5ldyBvbmUgbG9hZHMuIEZvciB0aGVcbiAqIG1vbWVudCBpbiBiZXR3ZWVuIHRoZSBwcm92aWRlcidzIEFQSSBpcyByZXZva2VkLCBzbyBldmVyeSBkZXBlbmRlbnQgc2VlcyBpdHMgZGVwZW5kZW5jeSBnbyBhd2F5IGFuZFxuICogY29tZSBiYWNrLiBUaGUgZmVhdHVyZSBzdXJmYWNlIHN0aWxsIGNvbWVzIGRvd24gYXQgb25jZSDigJQgdGhlIGRlcGVuZGVuY3kgcmVhbGx5IGlzIGdvbmUgZm9yIHRoYXRcbiAqIG1vbWVudCDigJQgYnV0IHRoZSBub3RpY2Ugd2FpdHMge0BsaW5rIExPU1NfQU5OT1VOQ0VNRU5UX0dSQUNFX1BFUklPRF9JTl9NSUxMSVNFQ09ORFN9LCBhbmQgYSBsb3NzIHRoYXRcbiAqIGhlYWxlZCBpbiB0aGUgbWVhbnRpbWUgaXMgbmV2ZXIgYW5ub3VuY2VkLiBXaXRob3V0IHRoYXQsIHVwZGF0aW5nIG9uZSBwbHVnaW4gcHV0IGEgXCJubyBsb25nZXJcbiAqIGF2YWlsYWJsZVwiIG5vdGljZSBvbiBzY3JlZW4gaW4gZXZlcnkgcGx1Z2luIGRlcGVuZGluZyBvbiBpdCwgZGVzY3JpYmluZyBhIHN0YXRlIHRoYXQgbm8gbG9uZ2VyIGhlbGQgYnlcbiAqIHRoZSB0aW1lIHRoZSB1c2VyIHJlYWQgaXQuIEEgbG9zcyB0aGUgdXNlciBjYXVzZWQgb24gcHVycG9zZSDigJQgZGlzYWJsaW5nIG9yIHVuaW5zdGFsbGluZyB0aGVcbiAqIGRlcGVuZGVuY3kg4oCUIG91dGxhc3RzIHRoZSB3aW5kb3cgYW5kIGlzIGFubm91bmNlZCBhcyBiZWZvcmUsIG9ubHkgYSBmZXcgc2Vjb25kcyBsYXRlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgUGx1Z2luXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgY29udmVydEFzeW5jVG9TeW5jIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7XG4gIGNvbXBhcmUgYXMgY29tcGFyZVZlcnNpb25zLFxuICBzYXRpc2ZpZXMgYXMgc2F0aXNmaWVzVmVyc2lvblxufSBmcm9tICdjb21wYXJlLXZlcnNpb25zJztcbmltcG9ydCB7XG4gIEJ1dHRvbkNvbXBvbmVudCxcbiAgUGx1Z2luU2V0dGluZ1RhYlxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luQXBpUmVmIH0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1hcGkudHMnO1xuaW1wb3J0IHR5cGUge1xuICBQbHVnaW5MaWZlY3ljbGVFdmVudE5hbWUsXG4gIFBsdWdpbkxpZmVjeWNsZUV2ZW50UGF5bG9hZFxufSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzJztcblxuaW1wb3J0IHsgZGlzYWJsZUNvbW11bml0eVBsdWdpbiB9IGZyb20gJy4uL2NvbW11bml0eS1wbHVnaW5zLnRzJztcbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7XG4gIGFwcGVuZFRleHRPckZyYWdtZW50Q2xvbmUsXG4gIGFzQ29kZUJsb2NrLFxuICBjcmVhdGVGcmFnbWVudFdpdGhDb2RlQmxvY2tzXG59IGZyb20gJy4uL2h0bWwtZWxlbWVudC50cyc7XG5pbXBvcnQgeyB0IH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7XG4gIFBsdWdpbkFwaVVuYXZhaWxhYmlsaXR5UmVhc29uLFxuICB3YXRjaFBsdWdpbkFwaVxufSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWFwaS50cyc7XG5pbXBvcnQge1xuICBnZXRJbnN0YWxsZWRQbHVnaW5TdGF0ZSxcbiAgZ2V0SW5zdGFsbGVkUGx1Z2luVmVyc2lvbixcbiAgaW5zdGFsbEFuZEVuYWJsZVBsdWdpbixcbiAgSW5zdGFsbGVkUGx1Z2luU3RhdGUsXG4gIHVwZGF0ZVBsdWdpblxufSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWluc3RhbGwtc3RhdGUudHMnO1xuaW1wb3J0IHtcbiAgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FLFxuICBQTFVHSU5fVU5MT0FERURfRVZFTlRfTkFNRVxufSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJBc3luY0V2ZW50IH0gZnJvbSAnLi9hc3luYy1ldmVudHMtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuaW1wb3J0IHsgQ2FsbGJhY2tMYXlvdXRSZWFkeUNvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0LXJlYWR5LWNvbXBvbmVudC50cyc7XG5cbi8qKlxuICogSG93IGxvbmcgYSBnYXRlIHRoYXQgY2xvc2VkIHdoaWxlIHRoZSBwbHVnaW4gd2FzIHJ1bm5pbmcgd2FpdHMgYmVmb3JlIHNheWluZyBzby5cbiAqXG4gKiBMb25nIGVub3VnaCB0byBjb3ZlciBPYnNpZGlhbiByZWxvYWRpbmcgYSBwbHVnaW4gdG8gYXBwbHkgaXRzIHVwZGF0ZSwgc2hvcnQgZW5vdWdoIHRoYXQgYSB1c2VyIHdob1xuICogZGlzYWJsZWQgdGhlIGRlcGVuZGVuY3kgYnkgaGFuZCBzdGlsbCBjb25uZWN0cyB0aGUgbm90aWNlIHRvIHdoYXQgdGhleSBqdXN0IGRpZC5cbiAqL1xuY29uc3QgTE9TU19BTk5PVU5DRU1FTlRfR1JBQ0VfUEVSSU9EX0lOX01JTExJU0VDT05EUyA9IDUwMDA7XG5cbi8qKlxuICogSG93IGJhZGx5IHR3byBwbHVnaW5zIHJ1bm5pbmcgc2lkZSBieSBzaWRlIGdvZXMgd3JvbmcsIGFuZCB0aGVyZWZvcmUgd2hhdCB0aGlzIG9uZSBkb2VzIGFib3V0IGl0LlxuICovXG5leHBvcnQgZW51bSBQbHVnaW5Db25mbGljdFNldmVyaXR5IHtcbiAgLyoqXG4gICAqIFRoZSBob3N0IHJlZnVzZXMgdG8gcnVuIGF0IGFsbCB3aGlsZSB0aGUgY29uZmxpY3QgaG9sZHM6IGBvbmxvYWRJbXBsYCBuZXZlciBydW5zLCBub3RoaW5nIGlzXG4gICAqIHJlZ2lzdGVyZWQsIGFuZCB0aGUgcGx1Z2luIGV4cGxhaW5zIGl0c2VsZiB0aGUgd2F5IGEgbWlzc2luZyBkZXBlbmRlbmN5IGRvZXMuXG4gICAqXG4gICAqIEZvciBhbiBvdmVybGFwIHdoZXJlIGJvdGggcGx1Z2lucyBhY3Rpbmcgb24gdGhlIHNhbWUgb3BlcmF0aW9uIGRhbWFnZXMgdGhlIHZhdWx0LlxuICAgKi9cbiAgQmxvY2sgPSAnYmxvY2snLFxuXG4gIC8qKlxuICAgKiBUaGUgaG9zdCBydW5zIGFueXdheSBhbmQgc2F5cyB0aGUgb3ZlcmxhcCBpcyB0aGVyZS5cbiAgICpcbiAgICogRm9yIGFuIG92ZXJsYXAgdGhhdCBpcyBhbm5veWluZyByYXRoZXIgdGhhbiBkZXN0cnVjdGl2ZSDigJQgZHVwbGljYXRlIGNvbW1hbmRzLCB3b3JrIGRvbmUgdHdpY2Ug4oCUIHdoZXJlXG4gICAqIHJlZnVzaW5nIHRvIGxvYWQgd291bGQgY29zdCB0aGUgdXNlciBtb3JlIHRoYW4gdGhlIG92ZXJsYXAgZG9lcy5cbiAgICovXG4gIFdhcm4gPSAnd2Fybidcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiBhbm90aGVyIHBsdWdpbiByZWZ1c2VzIHRvIHJ1biBiZXNpZGUsIG9yIHdhcm5zIGFib3V0IHJ1bm5pbmcgYmVzaWRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkNvbmZsaWN0IHtcbiAgLyoqXG4gICAqIFRoZSBzZW12ZXIgcmFuZ2Ugb2YgdGhlIE9USEVSIHBsdWdpbidzIHZlcnNpb25zIHRoYXQgY29uZmxpY3QsIGUuZy4gYCc8MTIuMC4wJ2AgZm9yIFwiZXZlcnkgdmVyc2lvblxuICAgKiBiZWZvcmUgdGhlIG9uZSB0aGF0IGdhdmUgdGhpcyBiZWhhdmlvciB1cFwiLlxuICAgKlxuICAgKiBBIHJhbmdlIHJhdGhlciB0aGFuIGEgbWluaW11bSwgc28gYW4gb3ZlcmxhcCBjb25maW5lZCB0byBvbmUgbWFqb3IgKGAnPj0zIDw0J2ApIGlzIGV4cHJlc3NpYmxlLCBhbmQgc29cbiAgICogaXMgYSBwbHVnaW4gdGhhdCBjb25mbGljdHMgYXQgZXZlcnkgdmVyc2lvbiDigJQgc3BlbGwgdGhhdCBgJz49MC4wLjAnYCwgc2luY2UgYGNvbXBhcmUtdmVyc2lvbnNgIHJlamVjdHNcbiAgICogYSBiYXJlIGAqYC4gRXZhbHVhdGVkIGFnYWluc3QgYG1hbmlmZXN0LnZlcnNpb25gOyBhIHZlcnNpb24gdGhhdCBjYW5ub3QgYmUgcGFyc2VkIGNvdW50cyBhc1xuICAgKiBjb25mbGljdGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbmZsaWN0aW5nVmVyc2lvblJhbmdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSBjb25mbGljdGluZyBwbHVnaW4sIGFzIGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb25mbGljdGluZyBwbHVnaW4sIHNob3duIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGxvY2FsaXplZCBzZW50ZW5jZSBzYXlpbmcgd2hhdCBnb2VzIHdyb25nIHdoZW4gYm90aCBydW4sIHNob3duIGluIHRoZSBiYW5uZXIuXG4gICAqXG4gICAqIFRoZSBkZWNsYXJpbmcgcGx1Z2luIG93bnMgdGhpcyBzdHJpbmcgYmVjYXVzZSBvbmx5IGl0IGtub3dzIHdoYXQgdGhlIHR3byBvZiB0aGVtIGNvbGxpZGUgb3ZlciwgYW5kIGFcbiAgICogdXNlciBiZWluZyBhc2tlZCB0byBkaXNhYmxlIHNvbWV0aGluZyBkZXNlcnZlcyB0byBiZSB0b2xkIHdoeS5cbiAgICpcbiAgICogUGFzcyBhIHtAbGluayBEb2N1bWVudEZyYWdtZW50fSB0byBtYXJrIHVwIHBhcnQgb2YgdGhlIHNlbnRlbmNlLCBzdWNoIGFzIGEgcGx1Z2luIG5hbWUgcmVuZGVyZWQgYXNcbiAgICogY29kZS4gRWFjaCByZW5kZXIgYXBwZW5kcyBhIGZyZXNoIGNsb25lIG9mIGl0LCBzaW5jZSB0aGUgYmFubmVyIGlzIHJlbmRlcmVkIGFnYWluIG9uIGV2ZXJ5IHJlZnJlc2guXG4gICAqL1xuICByZWFkb25seSByZWFzb246IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQgdGhpcyBwbHVnaW4gZG9lcyBhYm91dCB0aGUgY29uZmxpY3QuXG4gICAqL1xuICByZWFkb25seSBzZXZlcml0eTogUGx1Z2luQ29uZmxpY3RTZXZlcml0eTtcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiBhbm90aGVyIHBsdWdpbiBjYW5ub3Qgd29yayB3aXRob3V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkRlcGVuZGVuY3kge1xuICAvKipcbiAgICogVGhlIHNlbXZlciByYW5nZSBvZiBBUEkgY29udHJhY3QgdmVyc2lvbnMgdGhlIGRlcGVuZGVudCBjb21waWxlZCBhZ2FpbnN0LCBlLmcuIGAnXjInYC5cbiAgICpcbiAgICogQSBkZXBlbmRlbmN5IHdob3NlIHB1Ymxpc2hlZCBBUEkgZmFsbHMgb3V0c2lkZSB0aGUgcmFuZ2UgY291bnRzIGFzIFVOU0FUSVNGSUVELCB3aGljaCBpcyB3aGF0IHR1cm5zIGFcbiAgICogc2lsZW50IGJlaGF2aW9yYWwgbWlzbWF0Y2ggYmV0d2VlbiB0d28gaW5kZXBlbmRlbnRseSByZWxlYXNlZCBwbHVnaW5zIGludG8gYSB2aXNpYmxlIFwidXBkYXRlIHRoaXNcbiAgICogb25lXCIgbWVzc2FnZS4gU3BlbGwgXCJhbnkgdmVyc2lvblwiIGFzIGAnPj0wLjAuMCdgIOKAlCBgY29tcGFyZS12ZXJzaW9uc2AgcmVqZWN0cyBhIGJhcmUgYCpgLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBpVmVyc2lvblJhbmdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGRlc3QgcmVsZWFzZSBvZiB0aGUgcmVxdWlyZWQgcGx1Z2luIHRoZSBkZXBlbmRlbnQgd29ya3Mgd2l0aCwgZS5nLiBgJzIuMi4wJ2AuXG4gICAqXG4gICAqIEZvciBhIHByb3ZpZGVyIHdob3NlIEJFSEFWSU9SIGNoYW5nZWQgd2hpbGUgaXRzIEFQSSBjb250cmFjdCBzdGF5ZWQgdGhlIHNhbWUsIHdoaWNoXG4gICAqIHtAbGluayBhcGlWZXJzaW9uUmFuZ2V9IGNhbm5vdCBzZWUuIEEgZGVwZW5kZW5jeSBlbmFibGVkIGJlbG93IGl0IGNvdW50cyBhcyBVTlNBVElTRklFRCBhbmQgYXNrcyB0aGVcbiAgICogdXNlciB0byB1cGRhdGUgaXQuIEV2YWx1YXRlZCBhZ2FpbnN0IGBtYW5pZmVzdC52ZXJzaW9uYDsgYSB2ZXJzaW9uIHRoYXQgY2Fubm90IGJlIHBhcnNlZCBjb3VudHMgYXMgdG9vXG4gICAqIG9sZC4gQSBtaW5pbXVtIHJhdGhlciB0aGFuIGEgcmFuZ2UsIGJlY2F1c2UgdGhlIG9ubHkgYWR2aWNlIHRoZSBnYXRlIGNhbiBnaXZlIGlzIFwidXBkYXRlIGl0XCIsIGFuZCBhblxuICAgKiB1cHBlciBib3VuZCBpcyBhIHZlcnNpb24gbm8gdXBkYXRlIHJlYWNoZXMuXG4gICAqL1xuICByZWFkb25seSBtaW5QbHVnaW5WZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYG1hbmlmZXN0LmlkYCBvZiB0aGUgcmVxdWlyZWQgcGx1Z2luLCBhcyBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2luIHJlZ2lzdHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgcmVxdWlyZWQgcGx1Z2luLCBzaG93biB0byB0aGUgdXNlci5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQSBsb2NhbGl6ZWQgc2VudGVuY2Ugc2F5aW5nIHdoYXQgdGhlIGRlcGVuZGVudCBkb2VzIHdpdGggdGhpcyBwbHVnaW4sIHNob3duIGluIHRoZSBzZXR0aW5ncyBiYW5uZXIuXG4gICAqXG4gICAqIFRoZSBkZXBlbmRlbnQgb3ducyB0aGlzIHN0cmluZyBiZWNhdXNlIG9ubHkgaXQga25vd3Mgd2hhdCBpdCB1c2VzIHRoZSBvdGhlciBwbHVnaW4gZm9yLCBhbmQgYSB1c2VyXG4gICAqIGJlaW5nIGFza2VkIHRvIGluc3RhbGwgc29tZXRoaW5nIGRlc2VydmVzIHRvIGJlIHRvbGQgd2h5LlxuICAgKlxuICAgKiBQYXNzIGEge0BsaW5rIERvY3VtZW50RnJhZ21lbnR9IHRvIG1hcmsgdXAgcGFydCBvZiB0aGUgc2VudGVuY2UsIHN1Y2ggYXMgYSBwbHVnaW4gbmFtZSByZW5kZXJlZCBhc1xuICAgKiBjb2RlLiBFYWNoIHJlbmRlciBhcHBlbmRzIGEgZnJlc2ggY2xvbmUgb2YgaXQsIHNpbmNlIHRoZSBiYW5uZXIgaXMgcmVuZGVyZWQgYWdhaW4gb24gZXZlcnkgcmVmcmVzaC5cbiAgICovXG4gIHJlYWRvbmx5IHJlYXNvbjogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIFBsdWdpbkdhdGVDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkdhdGVDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY29uZmxpY3RzIHRvIGVuZm9yY2UuIEFuIGVtcHR5IGxpc3QgbWVhbnMgdGhlIHBsdWdpbiByZWZ1c2VzIHRvIHJ1biBiZXNpZGUgbm90aGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbmZsaWN0czogcmVhZG9ubHkgUGx1Z2luQ29uZmxpY3RbXTtcblxuICAvKipcbiAgICogVGhlIGRlcGVuZGVuY2llcyB0byBlbmZvcmNlLiBBbiBlbXB0eSBsaXN0IG1lYW5zIHRoZSBwbHVnaW4gZGVwZW5kcyBvbiBub3RoaW5nLCBhbmQgaXRzIGZlYXR1cmVcbiAgICogc3VyZmFjZSBsb2FkcyBpbW1lZGlhdGVseS5cbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY2llczogcmVhZG9ubHkgUGx1Z2luRGVwZW5kZW5jeVtdO1xuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgaG9zdCBwbHVnaW4ncyBmZWF0dXJlIHN1cmZhY2UuIENhbGxlZCBvbmNlIGV2ZXJ5IGRlcGVuZGVuY3kgaXMgc2F0aXNmaWVkIGFuZCBubyBibG9ja2luZ1xuICAgKiBjb25mbGljdCBob2xkcywgYW5kIGFnYWluIGFmdGVyIGEgZ2F0ZSB0aGF0IGhhZCBjbG9zZWQgb3BlbnMgYmFjayB1cC5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBzdXJmYWNlIGlzIGxvYWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGxvYWRGZWF0dXJlU3VyZmFjZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVGhlIGhvc3QgcGx1Z2luIOKAlCB0aGUgb25lIGRlY2xhcmluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25mbGljdHMuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW46IFBsdWdpbjtcblxuICAvKipcbiAgICogVGhlIGhvc3QgcGx1Z2luJ3Mgbm90aWNlIGNvbXBvbmVudCwgdXNlZCB0byBzYXkgd2hhdCBpcyBtaXNzaW5nLCB3aGF0IGlzIGluIHRoZSB3YXksIGFuZCB3aGF0IGNoYW5nZWQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IFBsdWdpbk5vdGljZUNvbXBvbmVudDtcblxuICAvKipcbiAgICogVW5sb2FkcyB0aGUgaG9zdCBwbHVnaW4ncyBmZWF0dXJlIHN1cmZhY2UuIENhbGxlZCB3aGVuIGEgZ2F0ZSB0aGF0IGhhZCBiZWVuIG9wZW4gY2xvc2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgdW5sb2FkRmVhdHVyZVN1cmZhY2U6ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBCbG9ja2VkUGx1Z2luU2V0dGluZ1RhYn0gY29uc3RydWN0b3IuXG4gKi9cbmludGVyZmFjZSBCbG9ja2VkUGx1Z2luU2V0dGluZ1RhYkNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBibG9ja2VkIHBsdWdpbi5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luO1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBibG9ja2VkIGV4cGxhbmF0aW9uIGludG8gdGhlIHRhYidzIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lckVsIC0gVGhlIHRhYidzIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVuZGVyQmFubmVyOiAoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBzZXR0aW5ncyB0YWIgYSBibG9ja2VkIHBsdWdpbiBzaG93cyBpbiBwbGFjZSBvZiB0aGUgb25lIGl0IG5ldmVyIGdvdCB0byByZWdpc3Rlci5cbiAqXG4gKiBBIGJsb2NrZWQgcGx1Z2luJ3MgYG9ubG9hZEltcGxgIG5ldmVyIHJhbiwgc28gaXRzIHJlYWwgc2V0dGluZ3MgdGFiIGRvZXMgbm90IGV4aXN0IOKAlCBhbmQgYSB1c2VyIHdobyBnb2VzXG4gKiBsb29raW5nIGZvciB0aGUgcGx1Z2luJ3Mgc2V0dGluZ3MgaXMgcHJlY2lzZWx5IHRoZSB1c2VyIGFza2luZyBcIndoeSBpc24ndCB0aGlzIGRvaW5nIGFueXRoaW5nP1wiLiBBblxuICogZW1wdHkgc3BhY2UgaXMgdGhlIHdvcnN0IHBvc3NpYmxlIGFuc3dlciB0byB0aGF0IHF1ZXN0aW9uLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC9zZXR0aW5ncy10YWIvcHJlZmVyLXNldHRpbmctZGVmaW5pdGlvbnMgLS0gVGhpcyB0YWIgaGFzIG5vIHNldHRpbmdzIHRvIGRlY2xhcmUuIEl0IHN0YW5kcyBpbiBmb3IgYSBzZXR0aW5ncyB0YWIgdGhhdCBkb2VzIG5vdCBleGlzdCB5ZXQsIGNhcnJ5aW5nIGFuIGV4cGxhbmF0aW9uIGFuZCBhIHJlcGFpciBidXR0b24sIGFuZCB0aGUgcGx1Z2luJ3MgcmVhbCBzZXR0aW5ncyBhcHBlYXIgdGhlIG1vbWVudCB0aGUgZ2F0ZSBvcGVucy5cbmNsYXNzIEJsb2NrZWRQbHVnaW5TZXR0aW5nVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyQmFubmVyOiAoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHtAbGluayBCbG9ja2VkUGx1Z2luU2V0dGluZ1RhYn0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgY29uc3RydWN0b3IgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IEJsb2NrZWRQbHVnaW5TZXR0aW5nVGFiQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMucGx1Z2luLmFwcCwgcGFyYW1zLnBsdWdpbik7XG4gICAgdGhpcy5yZW5kZXJCYW5uZXIgPSBwYXJhbXMucmVuZGVyQmFubmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIHRhYi5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNwbGF5KCk6IHZvaWQge1xuICAgIHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcbiAgICB0aGlzLnJlbmRlckJhbm5lcih0aGlzLmNvbnRhaW5lckVsKTtcbiAgfVxufVxuXG4vKipcbiAqIEVuZm9yY2VzIGEgcGx1Z2luJ3MgbWFuZGF0b3J5IGRlcGVuZGVuY2llcyBhbmQgZGVjbGFyZWQgY29uZmxpY3RzLCBnYXRpbmcgaXRzIGZlYXR1cmUgc3VyZmFjZSBvbiBib3RoLlxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luR2F0ZUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhbm5vdW5jZWRXYXJuaW5nUGx1Z2luSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpUmVmcyA9IG5ldyBNYXA8c3RyaW5nLCBQbHVnaW5BcGlSZWY8b2JqZWN0Pj4oKTtcbiAgcHJpdmF0ZSBibG9ja2VkU2V0dGluZ1RhYjogbnVsbCB8IFBsdWdpblNldHRpbmdUYWIgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZsaWN0czogcmVhZG9ubHkgUGx1Z2luQ29uZmxpY3RbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXBlbmRlbmNpZXM6IHJlYWRvbmx5IFBsdWdpbkRlcGVuZGVuY3lbXTtcbiAgcHJpdmF0ZSBoYXNBbm5vdW5jZWRCbG9ja2VkID0gZmFsc2U7XG4gIHByaXZhdGUgaXNGZWF0dXJlU3VyZmFjZUxvYWRlZCA9IGZhbHNlO1xuICBwcml2YXRlIGlzTGF5b3V0UmVhZHkgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2FkRmVhdHVyZVN1cmZhY2U6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgbG9zc0Fubm91bmNlbWVudFRpbWVySWQ6IG51bGwgfCBudW1iZXIgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbk5vdGljZUNvbXBvbmVudDogUGx1Z2luTm90aWNlQ29tcG9uZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IHVubG9hZEZlYXR1cmVTdXJmYWNlOiAoKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgZ2V0IGFwcCgpOiBBcHAge1xuICAgIHJldHVybiB0aGlzLnBsdWdpbi5hcHA7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgUGx1Z2luR2F0ZUNvbXBvbmVudH0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgY29uc3RydWN0b3IgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFBsdWdpbkdhdGVDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb25mbGljdHMgPSBwYXJhbXMuY29uZmxpY3RzO1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gcGFyYW1zLmRlcGVuZGVuY2llcztcbiAgICB0aGlzLmxvYWRGZWF0dXJlU3VyZmFjZSA9IHBhcmFtcy5sb2FkRmVhdHVyZVN1cmZhY2U7XG4gICAgdGhpcy5wbHVnaW4gPSBwYXJhbXMucGx1Z2luO1xuICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50ID0gcGFyYW1zLnBsdWdpbk5vdGljZUNvbXBvbmVudDtcbiAgICB0aGlzLnVubG9hZEZlYXR1cmVTdXJmYWNlID0gcGFyYW1zLnVubG9hZEZlYXR1cmVTdXJmYWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNheXMgd2hldGhlciBhbnkgd2FybmluZyBjb25mbGljdCBpcyBpbiBmb3JjZSByaWdodCBub3cuXG4gICAqXG4gICAqIFRoZSBwcmVkaWNhdGUgYSBkZWNsYXJhdGl2ZSBzZXR0aW5ncyB0YWIgbmVlZHMsIGFuZCB0aGUgY291bnRlcnBhcnQgdG9cbiAgICogYFBsdWdpblN1Z2dlc3Rpb25Db21wb25lbnQuZ2V0U3VnZ2VzdGVkUGx1Z2luU3RhdGVgLiBTdWNoIGEgdGFiIGRlY2lkZXMgd2hldGhlciBhIHJvdyBleGlzdHNcbiAgICogQkVGT1JFIGl0IHJlbmRlcnMgYW55dGhpbmcgaW50byBpdCwgc28ge0BsaW5rIHJlbmRlckNvbmZsaWN0V2FybmluZ0Jhbm5lcn0gd3JpdGluZyBub3RoaW5nIGNhbm5vdFxuICAgKiBhbnN3ZXIgdGhlIHF1ZXN0aW9uIGZvciBpdCDigJQgYSByb3cgdGhhdCByZW5kZXJzIGVtcHR5IGlzIHN0aWxsIGEgcm93LCB3aXRoIHRoZSBkaXZpZGVyIGFuZCBwYWRkaW5nXG4gICAqIGV2ZXJ5IG90aGVyIHNldHRpbmcgaGFzLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIGF0IGxlYXN0IG9uZSBkZWNsYXJlZCB3YXJuaW5nIGNvbmZsaWN0IGhvbGRzLlxuICAgKi9cbiAgcHVibGljIGhhc0FjdGl2ZVdhcm5pbmdDb25mbGljdHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWN0aXZlQ29uZmxpY3RzKFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHkuV2FybikubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgd2F0Y2hpbmcgZXZlcnkgZGVjbGFyZWQgZGVwZW5kZW5jeSBhbmQgY29uZmxpY3QuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiB0aGlzLmRlcGVuZGVuY2llcykge1xuICAgICAgY29uc3QgYXBpUmVmID0gd2F0Y2hQbHVnaW5BcGk8b2JqZWN0Pih7XG4gICAgICAgIGFwaVZlcnNpb25SYW5nZTogZGVwZW5kZW5jeS5hcGlWZXJzaW9uUmFuZ2UsXG4gICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgcGx1Z2luSWQ6IGRlcGVuZGVuY3kucGx1Z2luSWRcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJBc3luY0V2ZW50KFxuICAgICAgICB0aGlzLFxuICAgICAgICBhcGlSZWYub24oJ2NoYW5nZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLmFwaVJlZnMuc2V0KGRlcGVuZGVuY3kucGx1Z2luSWQsIGFwaVJlZik7XG4gICAgfVxuXG4gICAgLy8gQSBjb25mbGljdCBoYXMgbm8gQVBJIHRvIHdhdGNoIOKAlCBpdCBpcyByZWFkIG91dCBvZiB0aGUgbWFuaWZlc3RzIOKAlCBzbyB0aGUgdHJpZ2dlciB0byByZS1yZWFkIGlzIHRoZVxuICAgIC8vIGxpYnJhcnkncyBvd24gbGlmZWN5Y2xlIGJyb2FkY2FzdC4gSXQgY292ZXJzIGV2ZXJ5IGNvbmZsaWN0aW5nIHBsdWdpbiBidWlsdCBvbiB0aGlzIGxpYnJhcnk7IG9uZVxuICAgIC8vIHRoYXQgaXMgbm90IGlzIGNhdWdodCBhdCB0aGUgbmV4dCBsb2FkLCBhcyB0aGUgZmlsZSBoZWFkZXIgc2F5cy5cbiAgICBjb25zdCBsaWZlY3ljbGVFdmVudE5hbWVzOiBQbHVnaW5MaWZlY3ljbGVFdmVudE5hbWVbXSA9IFtQTFVHSU5fTE9BREVEX0VWRU5UX05BTUUsIFBMVUdJTl9VTkxPQURFRF9FVkVOVF9OQU1FXTtcbiAgICBmb3IgKGNvbnN0IGV2ZW50TmFtZSBvZiBsaWZlY3ljbGVFdmVudE5hbWVzKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyRXZlbnQodGhpcy5hcHAud29ya3NwYWNlLm9uKFxuICAgICAgICBldmVudE5hbWUsXG4gICAgICAgIGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAocGF5bG9hZDogUGx1Z2luTGlmZWN5Y2xlRXZlbnRQYXlsb2FkKSA9PiB7XG4gICAgICAgICAgaWYgKHBheWxvYWQucGx1Z2luSWQgPT09IHRoaXMucGx1Z2luLm1hbmlmZXN0LmlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH0pXG4gICAgICApKTtcbiAgICB9XG5cbiAgICAvLyBOb3RoaW5nIGlzIFNBSUQgYWJvdXQgYSBtaXNzaW5nIGRlcGVuZGVuY3kgdW50aWwgdGhlIGxheW91dCBpcyByZWFkeS4gUGx1Z2lucyBsb2FkIGluIGFuIHVuc3BlY2lmaWVkXG4gICAgLy8gb3JkZXIsIHNvIGEgZGVwZW5kZW5jeSB0aGF0IHNpbXBseSBoYXMgbm90IGxvYWRlZCB5ZXQgaXMgaW5kaXN0aW5ndWlzaGFibGUgYXQgdGhpcyBwb2ludCBmcm9tIG9uZVxuICAgIC8vIHRoYXQgaXMgbm90IGluc3RhbGxlZCDigJQgYW5ub3VuY2luZyBoZXJlIHdvdWxkIHB1dCBhIFwibWlzc2luZyBwbHVnaW5cIiBub3RpY2Ugb24gc2NyZWVuIGF0IGV2ZXJ5XG4gICAgLy8gc3RhcnR1cCBhbmQgdGFrZSBpdCBhd2F5IGEgbW9tZW50IGxhdGVyLiBUaGUgZ2F0ZSBpdHNlbGYgZG9lcyBub3Qgd2FpdDogdGhlIHN1cmZhY2UgbG9hZHMgdGhlXG4gICAgLy8gaW5zdGFudCB0aGUgZGVwZW5kZW5jeSBpcyB0aGVyZSwgd2hlbmV2ZXIgdGhhdCBpcy5cbiAgICB0aGlzLmFkZENoaWxkKFxuICAgICAgbmV3IENhbGxiYWNrTGF5b3V0UmVhZHlDb21wb25lbnQodGhpcy5hcHAsICgpID0+IHtcbiAgICAgICAgdGhpcy5pc0xheW91dFJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wcmVzZW50VW5zYXRpc2ZpZWQodGhpcy5nZXRVbnNhdGlzZmllZERlcGVuZGVuY2llcygpLCB0aGlzLmdldEFjdGl2ZUNvbmZsaWN0cyhQbHVnaW5Db25mbGljdFNldmVyaXR5LkJsb2NrKSk7XG4gICAgICAgIHRoaXMuYW5ub3VuY2VXYXJuaW5ncygpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5yZWdpc3RlcigoKSA9PiB7XG4gICAgICB0aGlzLmNhbmNlbExvc3NBbm5vdW5jZW1lbnQoKTtcbiAgICAgIHRoaXMuaGlkZUJsb2NrZWRTZXR0aW5nVGFiKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGVzIHRoZSBnYXRlIG9uY2UgdGhlIHdhdGNoZXMgYXJlIGluIHBsYWNlLCBsb2FkaW5nIHRoZSBmZWF0dXJlIHN1cmZhY2UgaWYgaXQgaXMgYWxyZWFkeSBvcGVuLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGZpcnN0IGV2YWx1YXRpb24gaXMgY29tcGxldGUuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25sb2FkQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIGJhbm5lciBmb3IgZXZlcnkgY29uZmxpY3QgdGhlIGhvc3QgaXMgcnVubmluZyBhbG9uZ3NpZGUsIHNvIGEgcGx1Z2luIGNhbiBwdXQgdGhlIG92ZXJsYXAgaW5cbiAgICogaXRzIG93biBzZXR0aW5ncyB0YWIuXG4gICAqXG4gICAqIENvbnN1bWVyLWludm9rZWQsIGV4YWN0bHkgbGlrZSBgUGx1Z2luU3VnZ2VzdGlvbkNvbXBvbmVudC5yZW5kZXJCYW5uZXJgOiB0aGUgbGlicmFyeSByZWdpc3RlcnMgdGhlXG4gICAqIHNldHRpbmdzIHRhYiBhIEJMT0NLRUQgcGx1Z2luIG5lZWRzLCBiZWNhdXNlIHRoYXQgcGx1Z2luIG5ldmVyIGdvdCB0byByZWdpc3RlciBvbmUgb2YgaXRzIG93biwgYnV0IGl0XG4gICAqIGhhcyBubyBob29rIGludG8gdGhlIHRhYiBhIHJ1bm5pbmcgcGx1Z2luIGJ1aWxkcy4gUmVuZGVycyBub3RoaW5nIHdoZW4gbm8gd2FybmluZyBjb25mbGljdCBob2xkcy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lckVsIC0gVGhlIGVsZW1lbnQgdG8gcmVuZGVyIGludG8uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyQ29uZmxpY3RXYXJuaW5nQmFubmVyKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgY29uZmxpY3Qgb2YgdGhpcy5nZXRBY3RpdmVDb25mbGljdHMoUGx1Z2luQ29uZmxpY3RTZXZlcml0eS5XYXJuKSkge1xuICAgICAgdGhpcy5yZW5kZXJDb25mbGljdEVudHJ5KGNvbnRhaW5lckVsLCBjb25mbGljdCwgdGhpcy5jcmVhdGVDb25mbGljdFdhcm5pbmdNZXNzYWdlKGNvbmZsaWN0KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNheXMgd2hhdCB3ZW50IGF3YXkgd2hpbGUgdGhlIHBsdWdpbiB3YXMgcnVubmluZywgbm93IHRoYXQgdGhlIGdyYWNlIHBlcmlvZCBpcyBvdmVyLlxuICAgKlxuICAgKiBSZS1yZWFkcyB0aGUgZ2F0ZSByYXRoZXIgdGhhbiB0cnVzdGluZyB3aGF0IGNsb3NlZCBpdCwgc28gYSBkZXBlbmRlbmN5IHRoYXQgd2VudCBhd2F5IGR1cmluZyB0aGVcbiAgICogd2luZG93IGlzIGFubm91bmNlZCB3aXRoIHRoZSByZXN0LiBPbmUgdGhhdCBjYW1lIGJhY2sgaW4gdGltZSBuZXZlciBnZXRzIGhlcmU6IHRoZSBnYXRlIHJlb3BlbmluZ1xuICAgKiBjYW5jZWxzIHRoZSB0aW1lci5cbiAgICovXG4gIHByaXZhdGUgYW5ub3VuY2VMb3NzKCk6IHZvaWQge1xuICAgIHRoaXMubG9zc0Fubm91bmNlbWVudFRpbWVySWQgPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIHRoaXMuZ2V0VW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMoKSkge1xuICAgICAgdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZSh0aGlzLmNyZWF0ZURlcGVuZGVuY3lMb3N0TWVzc2FnZShkZXBlbmRlbmN5KSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjb25mbGljdCBvZiB0aGlzLmdldEFjdGl2ZUNvbmZsaWN0cyhQbHVnaW5Db25mbGljdFNldmVyaXR5LkJsb2NrKSkge1xuICAgICAgdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZSh0aGlzLmNyZWF0ZUNvbmZsaWN0QXBwZWFyZWRNZXNzYWdlKGNvbmZsaWN0KSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhbm5vdW5jZVdhcm5pbmdzKCk6IHZvaWQge1xuICAgIC8vIEEgd2FybmluZyBkZXNjcmliZXMgdHdvIHBsdWdpbnMgdGhhdCBhcmUgYm90aCBSVU5OSU5HLCBzbyBpdCBpcyBwb2ludGxlc3Mgd2hpbGUgdGhpcyBvbmUgaXMgYmxvY2tlZFxuICAgIC8vIOKAlCBhbmQgaXQgd2FpdHMgZm9yIGxheW91dC1yZWFkeSBmb3IgdGhlIHNhbWUgcmVhc29uIHRoZSBibG9ja2VkIG5vdGljZSBkb2VzLlxuICAgIGlmICghdGhpcy5pc0xheW91dFJlYWR5IHx8ICF0aGlzLmlzRmVhdHVyZVN1cmZhY2VMb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvbmZsaWN0IG9mIHRoaXMuZ2V0QWN0aXZlQ29uZmxpY3RzKFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHkuV2FybikpIHtcbiAgICAgIGlmICh0aGlzLmFubm91bmNlZFdhcm5pbmdQbHVnaW5JZHMuaGFzKGNvbmZsaWN0LnBsdWdpbklkKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hbm5vdW5jZWRXYXJuaW5nUGx1Z2luSWRzLmFkZChjb25mbGljdC5wbHVnaW5JZCk7XG4gICAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKHRoaXMuY3JlYXRlQ29uZmxpY3RXYXJuaW5nTWVzc2FnZShjb25mbGljdCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsTG9zc0Fubm91bmNlbWVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sb3NzQW5ub3VuY2VtZW50VGltZXJJZCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5sb3NzQW5ub3VuY2VtZW50VGltZXJJZCk7XG4gICAgdGhpcy5sb3NzQW5ub3VuY2VtZW50VGltZXJJZCA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUJsb2NrZWRNZXNzYWdlKGRlcGVuZGVuY3k6IFBsdWdpbkRlcGVuZGVuY3kpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICBpZiAodGhpcy5pc1Rvb09sZChkZXBlbmRlbmN5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVmVyc2lvbk1pc21hdGNoTWVzc2FnZShkZXBlbmRlbmN5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrcyh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luRGVwZW5kZW5jeS5ibG9ja2VkTm90aWNlLCB7XG4gICAgICBkZXBlbmRlbmN5UGx1Z2luTmFtZTogYXNDb2RlQmxvY2soZGVwZW5kZW5jeS5wbHVnaW5OYW1lKSxcbiAgICAgIHBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKHRoaXMucGx1Z2luLm1hbmlmZXN0Lm5hbWUpXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb25mbGljdEFwcGVhcmVkTWVzc2FnZShjb25mbGljdDogUGx1Z2luQ29uZmxpY3QpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrcyh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luQ29uZmxpY3QuY29uZmxpY3RBcHBlYXJlZE5vdGljZSwge1xuICAgICAgY29uZmxpY3RpbmdQbHVnaW5OYW1lOiBhc0NvZGVCbG9jayhjb25mbGljdC5wbHVnaW5OYW1lKSxcbiAgICAgIHBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKHRoaXMucGx1Z2luLm1hbmlmZXN0Lm5hbWUpXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb25mbGljdEJsb2NrZWRNZXNzYWdlKGNvbmZsaWN0OiBQbHVnaW5Db25mbGljdCk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIHJldHVybiBjcmVhdGVGcmFnbWVudFdpdGhDb2RlQmxvY2tzKHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5Db25mbGljdC5ibG9ja2VkTm90aWNlLCB7XG4gICAgICBjb25mbGljdGluZ1BsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKGNvbmZsaWN0LnBsdWdpbk5hbWUpLFxuICAgICAgcGx1Z2luTmFtZTogYXNDb2RlQmxvY2sodGhpcy5wbHVnaW4ubWFuaWZlc3QubmFtZSlcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbmZsaWN0V2FybmluZ01lc3NhZ2UoY29uZmxpY3Q6IFBsdWdpbkNvbmZsaWN0KTogRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50V2l0aENvZGVCbG9ja3ModCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBsdWdpbkNvbmZsaWN0Lndhcm5pbmdOb3RpY2UsIHtcbiAgICAgIGNvbmZsaWN0aW5nUGx1Z2luTmFtZTogYXNDb2RlQmxvY2soY29uZmxpY3QucGx1Z2luTmFtZSksXG4gICAgICBwbHVnaW5OYW1lOiBhc0NvZGVCbG9jayh0aGlzLnBsdWdpbi5tYW5pZmVzdC5uYW1lKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGVwZW5kZW5jeUxvc3RNZXNzYWdlKGRlcGVuZGVuY3k6IFBsdWdpbkRlcGVuZGVuY3kpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICBpZiAodGhpcy5pc1Rvb09sZChkZXBlbmRlbmN5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVmVyc2lvbk1pc21hdGNoTWVzc2FnZShkZXBlbmRlbmN5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrcyh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luRGVwZW5kZW5jeS5kZXBlbmRlbmN5TG9zdE5vdGljZSwge1xuICAgICAgZGVwZW5kZW5jeVBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKGRlcGVuZGVuY3kucGx1Z2luTmFtZSksXG4gICAgICBwbHVnaW5OYW1lOiBhc0NvZGVCbG9jayh0aGlzLnBsdWdpbi5tYW5pZmVzdC5uYW1lKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVmVyc2lvbk1pc21hdGNoTWVzc2FnZShkZXBlbmRlbmN5OiBQbHVnaW5EZXBlbmRlbmN5KTogRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50V2l0aENvZGVCbG9ja3ModCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBsdWdpbkRlcGVuZGVuY3kudmVyc2lvbk1pc21hdGNoTm90aWNlLCB7XG4gICAgICBkZXBlbmRlbmN5UGx1Z2luTmFtZTogYXNDb2RlQmxvY2soZGVwZW5kZW5jeS5wbHVnaW5OYW1lKSxcbiAgICAgIHBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKHRoaXMucGx1Z2luLm1hbmlmZXN0Lm5hbWUpXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBkZWNsYXJlZCBjb25mbGljdHMgb2Ygb25lIHNldmVyaXR5IHRoYXQgYXJlIGN1cnJlbnRseSBpbiBmb3JjZS5cbiAgICpcbiAgICogQHBhcmFtIHNldmVyaXR5IC0gVGhlIHNldmVyaXR5IHRvIHNlbGVjdC5cbiAgICogQHJldHVybnMgVGhlIGNvbmZsaWN0cyBob2xkaW5nIHJpZ2h0IG5vdywgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBkZWNsYXJlZC5cbiAgICovXG4gIHByaXZhdGUgZ2V0QWN0aXZlQ29uZmxpY3RzKHNldmVyaXR5OiBQbHVnaW5Db25mbGljdFNldmVyaXR5KTogUGx1Z2luQ29uZmxpY3RbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmxpY3RzLmZpbHRlcigoY29uZmxpY3QpID0+IGNvbmZsaWN0LnNldmVyaXR5ID09PSBzZXZlcml0eSAmJiB0aGlzLmlzQ29uZmxpY3RBY3RpdmUoY29uZmxpY3QpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMoKTogUGx1Z2luRGVwZW5kZW5jeVtdIHtcbiAgICByZXR1cm4gdGhpcy5kZXBlbmRlbmNpZXMuZmlsdGVyKChkZXBlbmRlbmN5KSA9PiAhdGhpcy5hcGlSZWZzLmdldChkZXBlbmRlbmN5LnBsdWdpbklkKT8udmFsdWUgfHwgdGhpcy5pc0JlbG93TWluUGx1Z2luVmVyc2lvbihkZXBlbmRlbmN5KSk7XG4gIH1cblxuICBwcml2YXRlIGhpZGVCbG9ja2VkU2V0dGluZ1RhYigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYmxvY2tlZFNldHRpbmdUYWIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmFwcC5zZXR0aW5nLnJlbW92ZVNldHRpbmdUYWIodGhpcy5ibG9ja2VkU2V0dGluZ1RhYik7XG4gICAgdGhpcy5ibG9ja2VkU2V0dGluZ1RhYiA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRGVjaWRlcyB3aGV0aGVyIGEgZGVwZW5kZW5jeSBpcyBydW5uaW5nIGF0IGEgcmVsZWFzZSBvbGRlciB0aGFuIGl0IGRlY2xhcmVkIGl0IG5lZWRzLlxuICAgKlxuICAgKiBSZWFkIGZyb20gdGhlIG1hbmlmZXN0LCBsaWtlIGEgY29uZmxpY3QsIGFuZCByZS1yZWFkIG9uIGV2ZXJ5IGV2YWx1YXRpb246IE9ic2lkaWFuIGFwcGxpZXMgYW4gdXBkYXRlIGJ5XG4gICAqIHJlbG9hZGluZyB0aGUgcHJvdmlkZXIsIHdoaWNoIGZpcmVzIHRoZSBBUEkgd2F0Y2gncyBgY2hhbmdlYCwgc28gdGhlIGdhdGUgb3BlbnMgd2l0aG91dCBhIHJlc3RhcnQuXG4gICAqXG4gICAqIEBwYXJhbSBkZXBlbmRlbmN5IC0gVGhlIGRlY2xhcmVkIGRlcGVuZGVuY3kuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGRlcGVuZGVuY3kgaXMgZW5hYmxlZCBiZWxvdyBpdHMge0BsaW5rIFBsdWdpbkRlcGVuZGVuY3kubWluUGx1Z2luVmVyc2lvbn07IGBmYWxzZWBcbiAgICogd2hlbiBpdCBkZWNsYXJlcyBub25lIG9yIGlzIG5vdCBlbmFibGVkLCBzaW5jZSBpdHMgQVBJIGlzIHRoZW4gYWJzZW50IGFueXdheS5cbiAgICovXG4gIHByaXZhdGUgaXNCZWxvd01pblBsdWdpblZlcnNpb24oZGVwZW5kZW5jeTogUGx1Z2luRGVwZW5kZW5jeSk6IGJvb2xlYW4ge1xuICAgIGlmIChkZXBlbmRlbmN5Lm1pblBsdWdpblZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbGxlZFZlcnNpb24gPSBnZXRJbnN0YWxsZWRQbHVnaW5WZXJzaW9uKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBwbHVnaW5JZDogZGVwZW5kZW5jeS5wbHVnaW5JZFxuICAgIH0pO1xuXG4gICAgaWYgKGluc3RhbGxlZFZlcnNpb24gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuICFjb21wYXJlVmVyc2lvbnMoaW5zdGFsbGVkVmVyc2lvbiwgZGVwZW5kZW5jeS5taW5QbHVnaW5WZXJzaW9uLCAnPj0nKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNpZGVzIHdoZXRoZXIgb25lIGRlY2xhcmVkIGNvbmZsaWN0IGlzIGluIGZvcmNlIHJpZ2h0IG5vdy5cbiAgICpcbiAgICogT25seSBhbiBFTkFCTEVEIHBsdWdpbiBjb3VudHMuIE9uZSB0aGF0IGlzIGluc3RhbGxlZCBidXQgc3dpdGNoZWQgb2ZmIHJlZ2lzdGVycyBub3RoaW5nLCBzbyBpdCBjYW5ub3RcbiAgICogY29sbGlkZSwgYW5kIGFjdGluZyBvbiBpdCB3b3VsZCBiZSBhbiBhbGFybSB0aGUgdXNlciBjYW4gb25seSBhbnN3ZXIgYnkgdW5pbnN0YWxsaW5nIHNvbWV0aGluZyB0aGV5XG4gICAqIGhhdmUgYWxyZWFkeSB0dXJuZWQgb2ZmLlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmxpY3QgLSBUaGUgZGVjbGFyZWQgY29uZmxpY3QuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbmZsaWN0aW5nIHBsdWdpbiBpcyBlbmFibGVkIGF0IGEgY29uZmxpY3RpbmcgdmVyc2lvbi5cbiAgICovXG4gIHByaXZhdGUgaXNDb25mbGljdEFjdGl2ZShjb25mbGljdDogUGx1Z2luQ29uZmxpY3QpOiBib29sZWFuIHtcbiAgICBjb25zdCBpbnN0YWxsZWRWZXJzaW9uID0gZ2V0SW5zdGFsbGVkUGx1Z2luVmVyc2lvbih7XG4gICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgcGx1Z2luSWQ6IGNvbmZsaWN0LnBsdWdpbklkXG4gICAgfSk7XG5cbiAgICBpZiAoaW5zdGFsbGVkVmVyc2lvbiA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gc2F0aXNmaWVzVmVyc2lvbihpbnN0YWxsZWRWZXJzaW9uLCBjb25mbGljdC5jb25mbGljdGluZ1ZlcnNpb25SYW5nZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVjaWRlcyB3aGV0aGVyIGEgZGVwZW5kZW5jeSBpcyBydW5uaW5nIGJ1dCB0b28gb2xkIGZvciB0aGlzIHBsdWdpbiwgc28gdGhlIGFkdmljZSBpcyBcInVwZGF0ZSBpdFwiLlxuICAgKlxuICAgKiBUd28gaW5kZXBlbmRlbnQgc2lnbmFscyBzYXkgc286IGEgcmVsZWFzZSBiZWxvdyB7QGxpbmsgUGx1Z2luRGVwZW5kZW5jeS5taW5QbHVnaW5WZXJzaW9ufSwgYW5kIGEgcHVibGlzaGVkXG4gICAqIEFQSSB3aG9zZSBjb250cmFjdCB2ZXJzaW9uIGlzIG91dHNpZGUge0BsaW5rIFBsdWdpbkRlcGVuZGVuY3kuYXBpVmVyc2lvblJhbmdlfS5cbiAgICpcbiAgICogQHBhcmFtIGRlcGVuZGVuY3kgLSBUaGUgZGVjbGFyZWQgZGVwZW5kZW5jeS5cbiAgICogQHJldHVybnMgV2hldGhlciB1cGRhdGluZyB0aGUgZGVwZW5kZW5jeSBpcyB3aGF0IGl0IG5lZWRzLlxuICAgKi9cbiAgcHJpdmF0ZSBpc1Rvb09sZChkZXBlbmRlbmN5OiBQbHVnaW5EZXBlbmRlbmN5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNCZWxvd01pblBsdWdpblZlcnNpb24oZGVwZW5kZW5jeSlcbiAgICAgIHx8IHRoaXMuYXBpUmVmcy5nZXQoZGVwZW5kZW5jeS5wbHVnaW5JZCk/LnVuYXZhaWxhYmlsaXR5UmVhc29uID09PSBQbHVnaW5BcGlVbmF2YWlsYWJpbGl0eVJlYXNvbi5WZXJzaW9uTWlzbWF0Y2g7XG4gIH1cblxuICAvKipcbiAgICogU2F5cyB3aGF0IGlzIGluIHRoZSB3YXksIGFuZCBwdXRzIHRoZSBzYW1lIGV4cGxhbmF0aW9uIHdoZXJlIHRoZSB1c2VyIHdpbGwgbG9vayBmb3IgdGhlIHBsdWdpbidzXG4gICAqIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0gdW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMgLSBUaGUgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIG5vdCBjdXJyZW50bHkgc2F0aXNmaWVkLlxuICAgKiBAcGFyYW0gYmxvY2tpbmdDb25mbGljdHMgLSBUaGUgY29uZmxpY3RzIGN1cnJlbnRseSByZWZ1c2luZyB0aGUgcGx1Z2luIHRoZSByaWdodCB0byBydW4uXG4gICAqL1xuICBwcml2YXRlIHByZXNlbnRVbnNhdGlzZmllZChcbiAgICB1bnNhdGlzZmllZERlcGVuZGVuY2llczogcmVhZG9ubHkgUGx1Z2luRGVwZW5kZW5jeVtdLFxuICAgIGJsb2NraW5nQ29uZmxpY3RzOiByZWFkb25seSBQbHVnaW5Db25mbGljdFtdXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0xheW91dFJlYWR5IHx8ICh1bnNhdGlzZmllZERlcGVuZGVuY2llcy5sZW5ndGggPT09IDAgJiYgYmxvY2tpbmdDb25mbGljdHMubGVuZ3RoID09PSAwKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd0Jsb2NrZWRTZXR0aW5nVGFiKHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLCBibG9ja2luZ0NvbmZsaWN0cyk7XG5cbiAgICBpZiAodGhpcy5oYXNBbm5vdW5jZWRCbG9ja2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5oYXNBbm5vdW5jZWRCbG9ja2VkID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2YgdW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMpIHtcbiAgICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UodGhpcy5jcmVhdGVCbG9ja2VkTWVzc2FnZShkZXBlbmRlbmN5KSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjb25mbGljdCBvZiBibG9ja2luZ0NvbmZsaWN0cykge1xuICAgICAgdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZSh0aGlzLmNyZWF0ZUNvbmZsaWN0QmxvY2tlZE1lc3NhZ2UoY29uZmxpY3QpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmUtZXZhbHVhdGVzIHRoZSBnYXRlIGFuZCBtb3ZlcyB0aGUgZmVhdHVyZSBzdXJmYWNlIHRvIG1hdGNoLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHN1cmZhY2UgbWF0Y2hlcyB0aGUgZ2F0ZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1bnNhdGlzZmllZERlcGVuZGVuY2llcyA9IHRoaXMuZ2V0VW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMoKTtcbiAgICBjb25zdCBibG9ja2luZ0NvbmZsaWN0cyA9IHRoaXMuZ2V0QWN0aXZlQ29uZmxpY3RzKFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHkuQmxvY2spO1xuXG4gICAgaWYgKHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLmxlbmd0aCA9PT0gMCAmJiBibG9ja2luZ0NvbmZsaWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY2FuY2VsTG9zc0Fubm91bmNlbWVudCgpO1xuICAgICAgdGhpcy5oaWRlQmxvY2tlZFNldHRpbmdUYWIoKTtcbiAgICAgIHRoaXMuaGFzQW5ub3VuY2VkQmxvY2tlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoIXRoaXMuaXNGZWF0dXJlU3VyZmFjZUxvYWRlZCkge1xuICAgICAgICB0aGlzLmlzRmVhdHVyZVN1cmZhY2VMb2FkZWQgPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRGZWF0dXJlU3VyZmFjZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFubm91bmNlV2FybmluZ3MoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0ZlYXR1cmVTdXJmYWNlTG9hZGVkKSB7XG4gICAgICB0aGlzLmlzRmVhdHVyZVN1cmZhY2VMb2FkZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMudW5sb2FkRmVhdHVyZVN1cmZhY2UoKTtcblxuICAgICAgLy8gQSBnYXRlIHRoYXQgY2xvc2VzIHdoaWxlIHRoZSBwbHVnaW4gaXMgUlVOTklORyBpcyB0aGUgY2FzZSB3b3J0aCBiZWluZyBsb3VkIGFib3V0OiB0aGUgdXNlciBqdXN0XG4gICAgICAvLyBkaWQgc29tZXRoaW5nLCBhbmQgdGhlIGNvbnNlcXVlbmNlIGlzIGltbWVkaWF0ZSBhbmQgaW52aXNpYmxlIHdpdGhvdXQgdGhpcy4gQW5ub3VuY2VkIHJlZ2FyZGxlc3NcbiAgICAgIC8vIG9mIGxheW91dCByZWFkaW5lc3MsIGJlY2F1c2UgYSBydW5uaW5nIHBsdWdpbiBtZWFucyB0aGUgbGF5b3V0IGlzIGxvbmcgc2luY2UgcmVhZHkg4oCUIGJ1dCBvbmx5XG4gICAgICAvLyBvbmNlIHRoZSBncmFjZSBwZXJpb2QgaGFzIHNob3duIHRoZSBsb3NzIGlzIG5vdCBhbiB1cGRhdGUgcmVsb2FkaW5nIHRoZSBwcm92aWRlciAoc2VlIHRoZSBmaWxlXG4gICAgICAvLyBoZWFkZXIpLlxuICAgICAgdGhpcy5sb3NzQW5ub3VuY2VtZW50VGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5hbm5vdW5jZUxvc3MoKTtcbiAgICAgIH0sIExPU1NfQU5OT1VOQ0VNRU5UX0dSQUNFX1BFUklPRF9JTl9NSUxMSVNFQ09ORFMpO1xuXG4gICAgICB0aGlzLmhhc0Fubm91bmNlZEJsb2NrZWQgPSB0cnVlO1xuICAgICAgdGhpcy5zaG93QmxvY2tlZFNldHRpbmdUYWIodW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMsIGJsb2NraW5nQ29uZmxpY3RzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByZXNlbnRVbnNhdGlzZmllZCh1bnNhdGlzZmllZERlcGVuZGVuY2llcywgYmxvY2tpbmdDb25mbGljdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGJsb2NrZWQgZXhwbGFuYXRpb24gaW50byBhIHNldHRpbmdzLXRhYiBjb250YWluZXI6IHdoYXQgaXMgbWlzc2luZyBvciBpbiB0aGUgd2F5LCB3aHkgaXRcbiAgICogbWF0dGVycywgYW5kIHRoZSBidXR0b24gdGhhdCBmaXhlcyBpdC5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lckVsIC0gVGhlIGVsZW1lbnQgdG8gcmVuZGVyIGludG8uXG4gICAqIEBwYXJhbSB1bnNhdGlzZmllZERlcGVuZGVuY2llcyAtIFRoZSBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgbm90IGN1cnJlbnRseSBzYXRpc2ZpZWQuXG4gICAqIEBwYXJhbSBibG9ja2luZ0NvbmZsaWN0cyAtIFRoZSBjb25mbGljdHMgY3VycmVudGx5IHJlZnVzaW5nIHRoZSBwbHVnaW4gdGhlIHJpZ2h0IHRvIHJ1bi5cbiAgICovXG4gIHByaXZhdGUgcmVuZGVyQmxvY2tlZEJhbm5lcihcbiAgICBjb250YWluZXJFbDogSFRNTEVsZW1lbnQsXG4gICAgdW5zYXRpc2ZpZWREZXBlbmRlbmNpZXM6IHJlYWRvbmx5IFBsdWdpbkRlcGVuZGVuY3lbXSxcbiAgICBibG9ja2luZ0NvbmZsaWN0czogcmVhZG9ubHkgUGx1Z2luQ29uZmxpY3RbXVxuICApOiB2b2lkIHtcbiAgICBpZiAodW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luRGVwZW5kZW5jeS5zZXR0aW5nc0hlYWRpbmcpIH0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiB1bnNhdGlzZmllZERlcGVuZGVuY2llcykge1xuICAgICAgY29uc3QgYmFubmVyRWwgPSBjb250YWluZXJFbC5jcmVhdGVEaXYoe1xuICAgICAgICBjbHM6IFtDc3NDbGFzcy5MaWJyYXJ5TmFtZSwgQ3NzQ2xhc3MuUGx1Z2luRGVwZW5kZW5jeUJhbm5lcl1cbiAgICAgIH0pO1xuICAgICAgYmFubmVyRWwuYXBwZW5kKHRoaXMuY3JlYXRlQmxvY2tlZE1lc3NhZ2UoZGVwZW5kZW5jeSkpO1xuICAgICAgYXBwZW5kVGV4dE9yRnJhZ21lbnRDbG9uZShiYW5uZXJFbC5jcmVhdGVEaXYoKSwgZGVwZW5kZW5jeS5yZWFzb24pO1xuXG4gICAgICBjb25zdCBzdGF0ZSA9IGdldEluc3RhbGxlZFBsdWdpblN0YXRlKHtcbiAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgcGx1Z2luSWQ6IGRlcGVuZGVuY3kucGx1Z2luSWRcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBbiBlbmFibGVkIGRlcGVuZGVuY3kgdGhhdCBpcyBzdGlsbCB1bnNhdGlzZmllZCBpcyB0b28gb2xkLCBhbmQgaW5zdGFsbGluZyBvciBlbmFibGluZyBpdCBhZ2FpbiBkb2VzXG4gICAgICAvLyBub3RoaW5nLCBzbyBpdCBpcyBvZmZlcmVkIGFuIHVwZGF0ZSBpbnN0ZWFkLlxuICAgICAgaWYgKHN0YXRlICE9PSBJbnN0YWxsZWRQbHVnaW5TdGF0ZS5FbmFibGVkKSB7XG4gICAgICAgIG5ldyBCdXR0b25Db21wb25lbnQoYmFubmVyRWwpXG4gICAgICAgICAgLnNldEJ1dHRvblRleHQodCgoJCkgPT5cbiAgICAgICAgICAgIHN0YXRlID09PSBJbnN0YWxsZWRQbHVnaW5TdGF0ZS5JbnN0YWxsZWRCdXREaXNhYmxlZFxuICAgICAgICAgICAgICA/ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5TdWdnZXN0aW9uLmVuYWJsZVxuICAgICAgICAgICAgICA6ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5TdWdnZXN0aW9uLmluc3RhbGxcbiAgICAgICAgICApKVxuICAgICAgICAgIC5zZXRDdGEoKVxuICAgICAgICAgIC5vbkNsaWNrKGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBhd2FpdCBpbnN0YWxsQW5kRW5hYmxlUGx1Z2luKHtcbiAgICAgICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICAgICAgcGx1Z2luSWQ6IGRlcGVuZGVuY3kucGx1Z2luSWQsXG4gICAgICAgICAgICAgIHBsdWdpbk5hbWU6IGRlcGVuZGVuY3kucGx1Z2luTmFtZSxcbiAgICAgICAgICAgICAgcGx1Z2luTm90aWNlQ29tcG9uZW50OiB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gT2JzaWRpYW4gYXBwbGllcyB0aGUgdXBkYXRlIGJ5IHJlbG9hZGluZyB0aGUgZGVwZW5kZW5jeSwgd2hpY2ggcmVwdWJsaXNoZXMgaXRzIEFQSSwgc28gdGhlIHdhdGNoJ3NcbiAgICAgIC8vIGBjaGFuZ2VgIHJlb3BlbnMgdGhlIGdhdGUgd2l0aCBubyBmdXJ0aGVyIHN0ZXAgaGVyZS5cbiAgICAgIG5ldyBCdXR0b25Db21wb25lbnQoYmFubmVyRWwpXG4gICAgICAgIC5zZXRCdXR0b25UZXh0KHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5EZXBlbmRlbmN5LnVwZGF0ZSwgeyBkZXBlbmRlbmN5UGx1Z2luTmFtZTogZGVwZW5kZW5jeS5wbHVnaW5OYW1lIH0pKVxuICAgICAgICAuc2V0Q3RhKClcbiAgICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCB1cGRhdGVQbHVnaW4oe1xuICAgICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICAgIHBsdWdpbklkOiBkZXBlbmRlbmN5LnBsdWdpbklkLFxuICAgICAgICAgICAgcGx1Z2luTmFtZTogZGVwZW5kZW5jeS5wbHVnaW5OYW1lLFxuICAgICAgICAgICAgcGx1Z2luTm90aWNlQ29tcG9uZW50OiB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudCxcbiAgICAgICAgICAgIHJlcXVlc3RpbmdQbHVnaW5OYW1lOiB0aGlzLnBsdWdpbi5tYW5pZmVzdC5uYW1lXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pKTtcblxuICAgICAgLy8gVGhlIGxpbmsgT1VUIHRvIHRoZSBkZXBlbmRlbmN5J3Mgb3duIHNldHRpbmdzLCBzaG93biBvbmx5IG9uY2UgaXQgaXMgaW5zdGFsbGVkIGFuZCBlbmFibGVkIOKAlCB0aGVcbiAgICAgIC8vIG90aGVyIGhhbGYgb2YgdGhlIHJlbGF0aW9uc2hpcCBiZWluZyB2aXNpYmxlIGZyb20gYm90aCBlbmRzLiBJdCBpcyB3aGF0IHN0b3BzIFwiY29uZmlndXJlIG9uZVxuICAgICAgLy8gb3BlcmF0aW9uIGFjcm9zcyB0d28gcGx1Z2luc1wiIGZyb20gbWVhbmluZyBcImdvIGFuZCBmaW5kIHRoZSBvdGhlciBwbHVnaW4geW91cnNlbGZcIi5cbiAgICAgIHRoaXMucmVuZGVyT3BlblNldHRpbmdzQnV0dG9uKGJhbm5lckVsLCBkZXBlbmRlbmN5LnBsdWdpbklkLCBkZXBlbmRlbmN5LnBsdWdpbk5hbWUpO1xuICAgIH1cblxuICAgIGlmIChibG9ja2luZ0NvbmZsaWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDInLCB7IHRleHQ6IHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5Db25mbGljdC5zZXR0aW5nc0hlYWRpbmcpIH0pO1xuXG4gICAgZm9yIChjb25zdCBjb25mbGljdCBvZiBibG9ja2luZ0NvbmZsaWN0cykge1xuICAgICAgdGhpcy5yZW5kZXJDb25mbGljdEVudHJ5KGNvbnRhaW5lckVsLCBjb25mbGljdCwgdGhpcy5jcmVhdGVDb25mbGljdEJsb2NrZWRNZXNzYWdlKGNvbmZsaWN0KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgb25lIGNvbmZsaWN0OiB3aGF0IGl0IGlzLCB3aHkgaXQgbWF0dGVycywgYW5kIHRoZSB0d28gd2F5cyBvdXQgb2YgaXQuXG4gICAqXG4gICAqIFRoZSByZXBhaXIgaXMgb2ZmZXJlZCBvbiB0aGUgT1RIRVIgcGx1Z2luIOKAlCBkaXNhYmxpbmcgaXQgaXMgdGhlIG9uZSB0aGluZyB0aGlzIHBsdWdpbiBjYW4gZG8gaW4gYVxuICAgKiBjbGljaywgc2luY2UgaXQgY2Fubm90IHVwZGF0ZSBzb21lb25lIGVsc2UncyBwbHVnaW4g4oCUIGFuZCBpdCBpcyB0aGUgcGVyc2lzdGVkIGBkaXNhYmxlUGx1Z2luQW5kU2F2ZWBcbiAgICogcmF0aGVyIHRoYW4gdGhlIHRyYW5zaWVudCBkaXNhYmxlLCBiZWNhdXNlIHRoZSB1c2VyIGFza2VkIGZvciBpdCBieSBjbGlja2luZy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lckVsIC0gVGhlIGVsZW1lbnQgdG8gcmVuZGVyIGludG8uXG4gICAqIEBwYXJhbSBjb25mbGljdCAtIFRoZSBjb25mbGljdCB0byByZW5kZXIuXG4gICAqIEBwYXJhbSBtZXNzYWdlRnJhZ21lbnQgLSBUaGUgc2VudGVuY2UgZXhwbGFpbmluZyB0aGUgY29uZmxpY3QuXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckNvbmZsaWN0RW50cnkoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50LCBjb25mbGljdDogUGx1Z2luQ29uZmxpY3QsIG1lc3NhZ2VGcmFnbWVudDogRG9jdW1lbnRGcmFnbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IGJhbm5lckVsID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KHtcbiAgICAgIGNsczogW0Nzc0NsYXNzLkxpYnJhcnlOYW1lLCBDc3NDbGFzcy5QbHVnaW5Db25mbGljdEJhbm5lcl1cbiAgICB9KTtcbiAgICBiYW5uZXJFbC5hcHBlbmQobWVzc2FnZUZyYWdtZW50KTtcbiAgICBhcHBlbmRUZXh0T3JGcmFnbWVudENsb25lKGJhbm5lckVsLmNyZWF0ZURpdigpLCBjb25mbGljdC5yZWFzb24pO1xuXG4gICAgbmV3IEJ1dHRvbkNvbXBvbmVudChiYW5uZXJFbClcbiAgICAgIC5zZXRCdXR0b25UZXh0KHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5Db25mbGljdC5kaXNhYmxlLCB7IGNvbmZsaWN0aW5nUGx1Z2luTmFtZTogY29uZmxpY3QucGx1Z2luTmFtZSB9KSlcbiAgICAgIC5zZXRDdGEoKVxuICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgZGlzYWJsZUNvbW11bml0eVBsdWdpbih7XG4gICAgICAgICAgYXBwOiB0aGlzLmFwcCxcbiAgICAgICAgICBwbHVnaW5JZDogY29uZmxpY3QucGx1Z2luSWRcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpO1xuICAgICAgfSkpO1xuXG4gICAgdGhpcy5yZW5kZXJPcGVuU2V0dGluZ3NCdXR0b24oYmFubmVyRWwsIGNvbmZsaWN0LnBsdWdpbklkLCBjb25mbGljdC5wbHVnaW5OYW1lKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyT3BlblNldHRpbmdzQnV0dG9uKGJhbm5lckVsOiBIVE1MRWxlbWVudCwgcGx1Z2luSWQ6IHN0cmluZywgcGx1Z2luTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgbmV3IEJ1dHRvbkNvbXBvbmVudChiYW5uZXJFbClcbiAgICAgIC5zZXRCdXR0b25UZXh0KHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5EZXBlbmRlbmN5Lm9wZW5EZXBlbmRlbmN5U2V0dGluZ3MsIHtcbiAgICAgICAgZGVwZW5kZW5jeVBsdWdpbk5hbWU6IHBsdWdpbk5hbWVcbiAgICAgIH0pKVxuICAgICAgLm9uQ2xpY2soKCkgPT4ge1xuICAgICAgICB0aGlzLmFwcC5zZXR0aW5nLm9wZW4oKTtcbiAgICAgICAgdGhpcy5hcHAuc2V0dGluZy5vcGVuVGFiQnlJZChwbHVnaW5JZCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvd0Jsb2NrZWRTZXR0aW5nVGFiKFxuICAgIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzOiByZWFkb25seSBQbHVnaW5EZXBlbmRlbmN5W10sXG4gICAgYmxvY2tpbmdDb25mbGljdHM6IHJlYWRvbmx5IFBsdWdpbkNvbmZsaWN0W11cbiAgKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuYmxvY2tlZFNldHRpbmdUYWIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBBZGRlZCB0aHJvdWdoIGBhcHAuc2V0dGluZ2AgcmF0aGVyIHRoYW4gYHBsdWdpbi5hZGRTZXR0aW5nVGFiYCwgYmVjYXVzZSB0aGlzIHRhYiBoYXMgdG8gY29tZSBiYWNrXG4gICAgLy8gT0ZGIGFnYWluIHRoZSBtb21lbnQgdGhlIGdhdGUgb3BlbnMg4oCUIG90aGVyd2lzZSB0aGUgcGx1Z2luJ3Mgb3duIHNldHRpbmdzIHRhYiwgcmVnaXN0ZXJlZCBieVxuICAgIC8vIGBvbmxvYWRJbXBsYCwgd291bGQgYXBwZWFyIGJlc2lkZSBhIHN0YWxlIFwicmVxdWlyZWQgcGx1Z2luIG1pc3NpbmdcIiBvbmUuIGBwbHVnaW4uYWRkU2V0dGluZ1RhYmBcbiAgICAvLyBvbmx5IGV2ZXIgcmVtb3ZlcyBhdCBwbHVnaW4gdW5sb2FkLlxuICAgIGNvbnN0IGJsb2NrZWRTZXR0aW5nVGFiID0gbmV3IEJsb2NrZWRQbHVnaW5TZXR0aW5nVGFiKHtcbiAgICAgIHBsdWdpbjogdGhpcy5wbHVnaW4sXG4gICAgICByZW5kZXJCYW5uZXI6IChjb250YWluZXJFbCk6IHZvaWQgPT4ge1xuICAgICAgICB0aGlzLnJlbmRlckJsb2NrZWRCYW5uZXIoY29udGFpbmVyRWwsIHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLCBibG9ja2luZ0NvbmZsaWN0cyk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5hcHAuc2V0dGluZy5hZGRTZXR0aW5nVGFiKGJsb2NrZWRTZXR0aW5nVGFiKTtcbiAgICB0aGlzLmJsb2NrZWRTZXR0aW5nVGFiID0gYmxvY2tlZFNldHRpbmdUYWI7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUEwRkEsU0FBUywwQkFBMEI7QUFDbkM7QUFBQSxFQUNFLFdBQVc7QUFBQSxFQUNYLGFBQWE7QUFBQSxPQUNSO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFTUCxTQUFTLDhCQUE4QjtBQUN2QyxTQUFTLGdCQUFnQjtBQUN6QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFNBQVM7QUFDbEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxP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
|
|
523
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BsdWdpbi1nYXRlLWNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogVGhlIGdhdGUgb24gYSBwbHVnaW4ncyBmZWF0dXJlIHN1cmZhY2U6IHdoYXQgbXVzdCBiZSBQUkVTRU5UIGZvciBpdCB0byBydW4sIGFuZCB3aGF0IG11c3QgTk9UIGJlLlxuICpcbiAqIEJvdGggaGFsdmVzIGFuc3dlciB0aGUgc2FtZSBxdWVzdGlvbiDigJQgbWF5IHRoaXMgcGx1Z2luJ3MgYG9ubG9hZEltcGxgIHJ1biByaWdodCBub3c/IOKAlCBzbyB0aGV5IGFyZSBvbmVcbiAqIGNvbXBvbmVudCByYXRoZXIgdGhhbiB0d28uIEEgc2Vjb25kLCBpbmRlcGVuZGVudCBnYXRlIHdvdWxkIGRvdWJsZS1sb2FkIHRoZSBzdXJmYWNlIGFuZCBzdGFjayBhIHNlY29uZFxuICogXCJibG9ja2VkXCIgc2V0dGluZ3MgdGFiIG9udG8gdGhlIHNhbWUgcGx1Z2luLCBhbmQgbmVpdGhlciBjb3VsZCBzZWUgdGhlIG90aGVyJ3MgcmVhc29uIGZvciByZWZ1c2luZy5cbiAqXG4gKiAjIyBEZXBlbmRlbmNpZXM6IGEgcGx1Z2luIGRlY2xhcmluZyB3aGF0IGl0IGNhbm5vdCB3b3JrIHdpdGhvdXRcbiAqXG4gKiBUaGlzIGlzIHRoZSBzdHJpY3Qgc2libGluZyBvZiBgUGx1Z2luU3VnZ2VzdGlvbkNvbXBvbmVudGAsIGFuZCB0aGUgZGlmZmVyZW5jZSBpcyB0aGUgd2hvbGUgcG9pbnQuIEFcbiAqIFNVR0dFU1RJT04gaXMgYW4gb2ZmZXIg4oCUIHRoZSBob3N0IGtlZXBzIHdvcmtpbmcgd2l0aG91dCBpdCBhbmQgc2ltcGx5IGNhbm5vdCBkbyBvbmUgdGhpbmcuIEEgREVQRU5ERU5DWVxuICogaXMgYSByZXF1aXJlbWVudDogYG9ubG9hZEltcGxgIG5ldmVyIHJ1bnMsIG5vIGNvbW1hbmQgaXMgcmVnaXN0ZXJlZCwgbm8gaGFuZGxlciBpcyBpbnN0YWxsZWQsIG5vdGhpbmcgaXNcbiAqIHBhdGNoZWQuIFJlYWNoIGZvciBhIHN1Z2dlc3Rpb24gd2hlbiB0aGUgb3RoZXIgcGx1Z2luIGFkZHMgc29tZXRoaW5nOyByZWFjaCBmb3IgYSBkZXBlbmRlbmN5IHdoZW4gdGhlXG4gKiBob3N0J3MgYWR2ZXJ0aXNlZCBiZWhhdmlvciBpcyBub3QgdGhlcmUgd2l0aG91dCBpdC5cbiAqXG4gKiBPYnNpZGlhbiBoYXMgbm8gZGVwZW5kZW5jeSBmaWVsZCBpbiBhIG1hbmlmZXN0LCB3aGljaCBpcyBleGFjdGx5IHRoZSBwcm9ibGVtIHRoaXMgY2xvc2VzLiBXaXRob3V0IG9uZSxcbiAqIGEgdXNlciBtZWV0aW5nIGFuIHVuZmFtaWxpYXIgcGx1Z2luIGluIHRoZWlyIGxpc3QgbW9udGhzIGxhdGVyIGhhcyBub3RoaW5nIHRlbGxpbmcgdGhlbSBpdCBpc1xuICogbG9hZC1iZWFyaW5nIOKAlCB0aGV5IHJlbW92ZSBpdCwgYW5kIHRoZSBicmVha2FnZSBzdXJmYWNlcyB3ZWVrcyBhZnRlciB0aGF0IGFzIGRhbWFnZSB0aGV5IGNhbm5vdCBjb25uZWN0XG4gKiB0byBhbnl0aGluZyB0aGV5IGRpZC4gU28gdGhlIHJlbGF0aW9uc2hpcCBpcyBtYWRlIHZpc2libGUgZnJvbSBib3RoIGVuZHMgYW5kIGVuZm9yY2VkIHdoaWxlIGl0IGhvbGRzOlxuICogdGhlIGRlcGVuZGVudCBleHBsYWlucyBpdHNlbGYgd2hlcmUgdGhlIHVzZXIgaXMgbG9va2luZywgcmVwYWlycyBpdHNlbGYgaW4gb25lIGNsaWNrLCBhbmQgcmVhY3RzIHRoZVxuICogSU5TVEFOVCB0aGUgZGVwZW5kZW5jeSBnb2VzIGF3YXkgcmF0aGVyIHRoYW4gZGVncmFkaW5nIHF1aWV0bHkuXG4gKlxuICogVGhyZWUgY2hvaWNlcyBhcmUgZGVsaWJlcmF0ZSBhbmQgd29ydGggc3RhdGluZywgYmVjYXVzZSBlYWNoIGhhcyBhbiBvYnZpb3VzLWxvb2tpbmcgYWx0ZXJuYXRpdmU6XG4gKlxuICogLSAqKkJsb2NrZWQgbWVhbnMgZW5hYmxlZC1idXQtaW5lcnQsIG5ldmVyIHNlbGYtZGlzYWJsZWQuKiogQ2FsbGluZyBgZGlzYWJsZVBsdWdpbkFuZFNhdmVgIG9uIGl0c2VsZlxuICogICB3b3VsZCBiZSB0aGUgbGl0ZXJhbCByZWFkaW5nIG9mIFwicmVmdXNlcyB0byBsb2FkXCIsIGFuZCBpdCByZXdyaXRlcyBhIGNvbmZpZyB0aGF0IGJlbG9uZ3MgdG8gdGhlIHVzZXIg4oCUXG4gKiAgIHdobyB3b3VsZCB0aGVuIGhhdmUgdG8gcmVtZW1iZXIgdG8gcmUtZW5hYmxlIGl0IGFmdGVyIGZpeGluZyB0aGUgZGVwZW5kZW5jeS4gU3RheWluZyBlbmFibGVkIGFuZCBpbmVydFxuICogICBzYXlzIHRoZSBzYW1lIHRoaW5nIHRvIHRoZSB1c2VyLCBjaGFuZ2VzIG5vdGhpbmcgdGhleSBvd24sIGFuZCBjYW4gdW5kbyBpdHNlbGYuXG4gKiAtICoqQmxvY2tlZCBpcyBub3QgYW4gZXJyb3IuKiogVGhyb3dpbmcgZnJvbSBgb25sb2FkYCBtYXJrcyB0aGUgcGx1Z2luIGZhaWxlZCBpbiBPYnNpZGlhbiBhbmQgaGFuZHMgdGhlXG4gKiAgIHVzZXIgYSBzdGFjayB0cmFjZSBpbnN0ZWFkIG9mIGEgc2VudGVuY2UgYW5kIGEgYnV0dG9uLlxuICogLSAqKkEgZGVwZW5kZW5jeSBtdXN0IHB1Ymxpc2ggYW4gQVBJLioqIFRoYXQgaXMgd2hhdCBtYWtlcyBwcmVzZW5jZSwgYWJzZW5jZSwgdmVyc2lvbiBhbmQgZGVwYXJ0dXJlIGFsbFxuICogICBvYnNlcnZhYmxlIHRocm91Z2ggb25lIG1lY2hhbmlzbSDigJQgYHdhdGNoUGx1Z2luQXBpYCdzIHJlZmVyZW5jZSBpcyBsaXZlLCBpcyByZXZva2VkIHdoZW4gdGhlIHByb3ZpZGVyXG4gKiAgIHVubG9hZHMsIGFuZCBhbHJlYWR5IGNsYXNzaWZpZXMgbm90LWluc3RhbGxlZCBhZ2FpbnN0IG5vdC1lbmFibGVkIGFnYWluc3QgdG9vLW9sZC4gQSBwcm92aWRlciB3aXRoXG4gKiAgIG5vdGhpbmcgdG8gZXhwb3NlIGNhbiBwdWJsaXNoIGFuIGVtcHR5IEFQSSBwdXJlbHkgc28gaXQgY2FuIGJlIGRlcGVuZGVkIHVwb247IHRoZSBhbHRlcm5hdGl2ZSB3b3VsZCBiZVxuICogICBhIHNlY29uZCwgd2Vha2VyIGRldGVjdGlvbiBwYXRoIHRvIG1haW50YWluIGJlc2lkZSBpdC5cbiAqXG4gKiAjIyBDb25mbGljdHM6IGEgcGx1Z2luIGRlY2xhcmluZyB3aGF0IGl0IHJlZnVzZXMgdG8gcnVuIGJlc2lkZVxuICpcbiAqIFRoZSBpbnZlcnNlIHJlbGF0aW9uc2hpcCwgYW5kIGl0IG5lZWRzIGl0cyBvd24gZGV0ZWN0aW9uIHBhdGggYmVjYXVzZSB0aGUgZGVwZW5kZW5jeSBvbmUgZG9lcyBub3QgZml0LlxuICogQSBjb25mbGljdGluZyBwbHVnaW4gaXMgdHlwaWNhbGx5IGFuIE9MRCB2ZXJzaW9uIG9mIHNvbWUgb3RoZXIgcGx1Z2luIHRoYXQgc3RpbGwgb3ducyBiZWhhdmlvciB0aGlzIG9uZVxuICogaGFzIHRha2VuIG92ZXIg4oCUIGl0IHB1Ymxpc2hlcyBubyBBUEkgYXQgYWxsLCBzbyB0aGVyZSBpcyBubyBgYXBpVmVyc2lvblJhbmdlYCB0byBjb21wYXJlIGFnYWluc3QuXG4gKlxuICogVGhlIGFyZ3VtZW50IGZvciByZWZ1c2luZyByYXRoZXIgdGhhbiBjb21wZXRpbmcgY29tZXMgZnJvbSB0aGUgY2FzZSB0aGlzIGdlbmVyYWxpemVzOiB0d28gcmVuYW1lL2RlbGV0ZVxuICogaGFuZGxlcnMgYWN0aW5nIG9uIG9uZSByZW5hbWUgY29ycnVwdCBsaW5rcyBhbmQgbW92ZSBhdHRhY2htZW50cyB0d2ljZSwgYW5kIHRoZXJlIGlzIG5vIHJlbGlhYmxlIHdheSB0b1xuICogd2luIHRoYXQgcmFjZSDigJQgYSBoYW5kbGVyIGlzIGVsZWN0ZWQgYnkgcmVnaXN0cnkgb3JkZXIsIGJ1dCB0aGUgcGF0Y2hlcyB0aGF0IGRvIHRoZSB3b3JrIHNpdCBvdXRzaWRlXG4gKiB0aGF0IGVsZWN0aW9uLCBzbyB3aGljaGV2ZXIgcGx1Z2luIGxvYWRlZCBmaXJzdCBrZWVwcyBhIGhhbmQgb24gdGhlIHdoZWVsLiBFdmVyeSBzY2hlbWUgZm9yIHNlaXppbmdcbiAqIGNvbnRyb2wgZnJvbSBpbnNpZGUgaXMgbG9hZC1vcmRlciBkZXBlbmRlbnQuIFJlZnVzaW5nIGlzIGRldGVybWluaXN0aWMgd2hlcmUgY29tcGV0aW5nIGlzIG5vdCwgYW5kIGFcbiAqIHZhdWx0IHRoYXQgYnJpZWZseSBoYXMgbm8gaGFuZGxlciBpcyBhIGZhciBiZXR0ZXIgb3V0Y29tZSB0aGFuIG9uZSB3aXRoIHR3by5cbiAqXG4gKiBUd28gZGV0YWlscyBvZiB0aGF0IGRldGVjdGlvbiBjYXJyeSBvdmVyIHZlcmJhdGltLCBiZWNhdXNlIGJvdGggYXJlIGxvYWQtYmVhcmluZzpcbiAqXG4gKiAtICoqVmVyc2lvbnMgYXJlIHJlYWQsIG5ldmVyIHRoZSByZWdpc3RyeS4qKiBBIHBsdWdpbiB0aGF0IGhhcyBub3QgbG9hZGVkIHlldCBoYXMgcmVnaXN0ZXJlZCBub3RoaW5nLCBzb1xuICogICBhc2tpbmcgdGhlIHJlZ2lzdHJ5IGdpdmVzIGEgZGlmZmVyZW50IGFuc3dlciBkZXBlbmRpbmcgb24gd2hlbiBpdCBpcyBhc2tlZC4gYGFwcC5wbHVnaW5zLm1hbmlmZXN0c2AgaXNcbiAqICAgcG9wdWxhdGVkIGZvciBldmVyeSBpbnN0YWxsZWQgcGx1Z2luIGF0IHN0YXJ0dXAsIHdoYXRldmVyIHRoZSBsb2FkIG9yZGVyIHR1cm5zIG91dCB0byBiZS5cbiAqIC0gKipBbiB1bnBhcnNlYWJsZSB2ZXJzaW9uIGNvdW50cyBhcyBjb25mbGljdGluZy4qKiBGYWlsaW5nIGNsb3NlZCBpcyB0aGUgc2FmZSBkaXJlY3Rpb246IGEgZmFsc2UgYWxhcm1cbiAqICAgY29zdHMgYSBub3RpY2UsIGEgZmFsc2UgYWxsLWNsZWFyIGNvc3RzIGEgdmF1bHQuXG4gKlxuICogTm90IGV2ZXJ5IG92ZXJsYXAgaXMgdGhhdCBzZXZlcmUsIHdoaWNoIGlzIHdoeSBhIGNvbmZsaWN0IGRlY2xhcmVzIGEge0BsaW5rIFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHl9LlxuICogVHdvIHBsdWdpbnMgc2hpcHBpbmcgdGhlIHNhbWUgY29tbWFuZCBkdXBsaWNhdGUgYSBwYWxldHRlIGVudHJ5IGFuZCBkbyB0aGUgd29yayB0d2ljZSDigJQgYW5ub3lpbmcsIG5vdFxuICogY29ycnVwdGluZyDigJQgYW5kIHJlZnVzaW5nIHRvIGxvYWQgb3ZlciB0aGF0IHdvdWxkIGJlIGEgd29yc2Ugb3V0Y29tZSB0aGFuIHRoZSBvdmVybGFwLiBUaG9zZSBkZWNsYXJlXG4gKiB7QGxpbmsgUGx1Z2luQ29uZmxpY3RTZXZlcml0eS5XYXJufSBhbmQgYm90aCBrZWVwIHJ1bm5pbmcuXG4gKlxuICogIyMgV2hhdCB0aGlzIGNhbiBhbmQgY2Fubm90IHNlZVxuICpcbiAqIE9ic2lkaWFuIHJhaXNlcyBubyBldmVudCB3aGVuIEFOT1RIRVIgcGx1Z2luIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQgKHNlZSBgcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHNgKSxcbiAqIHNvIGxpdmUgY29uZmxpY3QgZGV0ZWN0aW9uIGhhcyBhIHJlYWwgY2VpbGluZyBhbmQgaXQgaXMgc3RhdGVkIGhlcmUgcmF0aGVyIHRoYW4gaW1wbGllZCBhd2F5LiBBXG4gKiBjb25mbGljdGluZyBwbHVnaW4gYnVpbHQgb24gdGhpcyBsaWJyYXJ5IGFubm91bmNlcyBpdHNlbGYgdGhyb3VnaCB0aGUgbGlmZWN5Y2xlIGJyb2FkY2FzdCwgYW5kIGlzXG4gKiB0aGVyZWZvcmUgY2F1Z2h0IHRoZSBtb21lbnQgaXQgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gT25lIHRoYXQgaXMgbm90IOKAlCBhbiBvbGQgcmVsZWFzZSBwcmVkYXRpbmcgdGhlXG4gKiBicm9hZGNhc3QsIG9yIGEgcGx1Z2luIGJ5IGFub3RoZXIgYXV0aG9yIGVudGlyZWx5IOKAlCBpcyBjYXVnaHQgYXQgdGhlIG5leHQgbG9hZCwgd2hpY2ggaXMgd2hlbiBpdHNcbiAqIG1hbmlmZXN0IGlzIHJlYWQuXG4gKlxuICogIyMgV2h5IGEgbG9zcyBpcyBhbm5vdW5jZWQgbGF0ZVxuICpcbiAqIE9ic2lkaWFuIHVwZGF0ZXMgYW4gZW5hYmxlZCBwbHVnaW4gYnkgcmVsb2FkaW5nIGl0OiB0aGUgb2xkIGNvcHkgdW5sb2FkcywgdGhlIG5ldyBvbmUgbG9hZHMuIEZvciB0aGVcbiAqIG1vbWVudCBpbiBiZXR3ZWVuIHRoZSBwcm92aWRlcidzIEFQSSBpcyByZXZva2VkLCBzbyBldmVyeSBkZXBlbmRlbnQgc2VlcyBpdHMgZGVwZW5kZW5jeSBnbyBhd2F5IGFuZFxuICogY29tZSBiYWNrLiBUaGUgZmVhdHVyZSBzdXJmYWNlIHN0aWxsIGNvbWVzIGRvd24gYXQgb25jZSDigJQgdGhlIGRlcGVuZGVuY3kgcmVhbGx5IGlzIGdvbmUgZm9yIHRoYXRcbiAqIG1vbWVudCDigJQgYnV0IHRoZSBub3RpY2Ugd2FpdHMge0BsaW5rIExPU1NfQU5OT1VOQ0VNRU5UX0dSQUNFX1BFUklPRF9JTl9NSUxMSVNFQ09ORFN9LCBhbmQgYSBsb3NzIHRoYXRcbiAqIGhlYWxlZCBpbiB0aGUgbWVhbnRpbWUgaXMgbmV2ZXIgYW5ub3VuY2VkLiBXaXRob3V0IHRoYXQsIHVwZGF0aW5nIG9uZSBwbHVnaW4gcHV0IGEgXCJubyBsb25nZXJcbiAqIGF2YWlsYWJsZVwiIG5vdGljZSBvbiBzY3JlZW4gaW4gZXZlcnkgcGx1Z2luIGRlcGVuZGluZyBvbiBpdCwgZGVzY3JpYmluZyBhIHN0YXRlIHRoYXQgbm8gbG9uZ2VyIGhlbGQgYnlcbiAqIHRoZSB0aW1lIHRoZSB1c2VyIHJlYWQgaXQuIEEgbG9zcyB0aGUgdXNlciBjYXVzZWQgb24gcHVycG9zZSDigJQgZGlzYWJsaW5nIG9yIHVuaW5zdGFsbGluZyB0aGVcbiAqIGRlcGVuZGVuY3kg4oCUIG91dGxhc3RzIHRoZSB3aW5kb3cgYW5kIGlzIGFubm91bmNlZCBhcyBiZWZvcmUsIG9ubHkgYSBmZXcgc2Vjb25kcyBsYXRlci5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7XG4gIEFwcCxcbiAgUGx1Z2luXG59IGZyb20gJ29ic2lkaWFuJztcblxuaW1wb3J0IHsgY29udmVydEFzeW5jVG9TeW5jIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7XG4gIGNvbXBhcmUgYXMgY29tcGFyZVZlcnNpb25zLFxuICBzYXRpc2ZpZXMgYXMgc2F0aXNmaWVzVmVyc2lvblxufSBmcm9tICdjb21wYXJlLXZlcnNpb25zJztcbmltcG9ydCB7XG4gIEJ1dHRvbkNvbXBvbmVudCxcbiAgUGx1Z2luU2V0dGluZ1RhYlxufSBmcm9tICdvYnNpZGlhbic7XG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luQXBpUmVmIH0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1hcGkudHMnO1xuaW1wb3J0IHR5cGUge1xuICBQbHVnaW5MaWZlY3ljbGVFdmVudE5hbWUsXG4gIFBsdWdpbkxpZmVjeWNsZUV2ZW50UGF5bG9hZFxufSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5Ob3RpY2VDb21wb25lbnQgfSBmcm9tICcuL3BsdWdpbi1ub3RpY2UtY29tcG9uZW50LnRzJztcblxuaW1wb3J0IHsgZGlzYWJsZUNvbW11bml0eVBsdWdpbiB9IGZyb20gJy4uL2NvbW11bml0eS1wbHVnaW5zLnRzJztcbmltcG9ydCB7IENzc0NsYXNzIH0gZnJvbSAnLi4vY3NzLWNsYXNzLnRzJztcbmltcG9ydCB7XG4gIGFwcGVuZFRleHRPckZyYWdtZW50Q2xvbmUsXG4gIGFzQ29kZUJsb2NrLFxuICBjcmVhdGVGcmFnbWVudFdpdGhDb2RlQmxvY2tzXG59IGZyb20gJy4uL2h0bWwtZWxlbWVudC50cyc7XG5pbXBvcnQgeyB0IH0gZnJvbSAnLi4vaTE4bi9pMThuLnRzJztcbmltcG9ydCB7XG4gIFBsdWdpbkFwaVVuYXZhaWxhYmlsaXR5UmVhc29uLFxuICB3YXRjaFBsdWdpbkFwaVxufSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWFwaS50cyc7XG5pbXBvcnQge1xuICBnZXRJbnN0YWxsZWRQbHVnaW5TdGF0ZSxcbiAgZ2V0SW5zdGFsbGVkUGx1Z2luVmVyc2lvbixcbiAgaW5zdGFsbEFuZEVuYWJsZVBsdWdpbixcbiAgSW5zdGFsbGVkUGx1Z2luU3RhdGUsXG4gIHVwZGF0ZVBsdWdpblxufSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWluc3RhbGwtc3RhdGUudHMnO1xuaW1wb3J0IHtcbiAgUExVR0lOX0xPQURFRF9FVkVOVF9OQU1FLFxuICBQTFVHSU5fVU5MT0FERURfRVZFTlRfTkFNRVxufSBmcm9tICcuLi9wbHVnaW4vcGx1Z2luLWxpZmVjeWNsZS1ldmVudHMudHMnO1xuaW1wb3J0IHsgcmVnaXN0ZXJBc3luY0V2ZW50IH0gZnJvbSAnLi9hc3luYy1ldmVudHMtY29tcG9uZW50LnRzJztcbmltcG9ydCB7IENvbXBvbmVudEV4IH0gZnJvbSAnLi9jb21wb25lbnQtZXgudHMnO1xuaW1wb3J0IHsgQ2FsbGJhY2tMYXlvdXRSZWFkeUNvbXBvbmVudCB9IGZyb20gJy4vbGF5b3V0LXJlYWR5LWNvbXBvbmVudC50cyc7XG5cbi8qKlxuICogSG93IGxvbmcgYSBnYXRlIHRoYXQgY2xvc2VkIHdoaWxlIHRoZSBwbHVnaW4gd2FzIHJ1bm5pbmcgd2FpdHMgYmVmb3JlIHNheWluZyBzby5cbiAqXG4gKiBMb25nIGVub3VnaCB0byBjb3ZlciBPYnNpZGlhbiByZWxvYWRpbmcgYSBwbHVnaW4gdG8gYXBwbHkgaXRzIHVwZGF0ZSwgc2hvcnQgZW5vdWdoIHRoYXQgYSB1c2VyIHdob1xuICogZGlzYWJsZWQgdGhlIGRlcGVuZGVuY3kgYnkgaGFuZCBzdGlsbCBjb25uZWN0cyB0aGUgbm90aWNlIHRvIHdoYXQgdGhleSBqdXN0IGRpZC5cbiAqL1xuY29uc3QgTE9TU19BTk5PVU5DRU1FTlRfR1JBQ0VfUEVSSU9EX0lOX01JTExJU0VDT05EUyA9IDUwMDA7XG5cbi8qKlxuICogSG93IGJhZGx5IHR3byBwbHVnaW5zIHJ1bm5pbmcgc2lkZSBieSBzaWRlIGdvZXMgd3JvbmcsIGFuZCB0aGVyZWZvcmUgd2hhdCB0aGlzIG9uZSBkb2VzIGFib3V0IGl0LlxuICovXG5leHBvcnQgZW51bSBQbHVnaW5Db25mbGljdFNldmVyaXR5IHtcbiAgLyoqXG4gICAqIFRoZSBob3N0IHJlZnVzZXMgdG8gcnVuIGF0IGFsbCB3aGlsZSB0aGUgY29uZmxpY3QgaG9sZHM6IGBvbmxvYWRJbXBsYCBuZXZlciBydW5zLCBub3RoaW5nIGlzXG4gICAqIHJlZ2lzdGVyZWQsIGFuZCB0aGUgcGx1Z2luIGV4cGxhaW5zIGl0c2VsZiB0aGUgd2F5IGEgbWlzc2luZyBkZXBlbmRlbmN5IGRvZXMuXG4gICAqXG4gICAqIEZvciBhbiBvdmVybGFwIHdoZXJlIGJvdGggcGx1Z2lucyBhY3Rpbmcgb24gdGhlIHNhbWUgb3BlcmF0aW9uIGRhbWFnZXMgdGhlIHZhdWx0LlxuICAgKi9cbiAgQmxvY2sgPSAnYmxvY2snLFxuXG4gIC8qKlxuICAgKiBUaGUgaG9zdCBydW5zIGFueXdheSBhbmQgc2F5cyB0aGUgb3ZlcmxhcCBpcyB0aGVyZS5cbiAgICpcbiAgICogRm9yIGFuIG92ZXJsYXAgdGhhdCBpcyBhbm5veWluZyByYXRoZXIgdGhhbiBkZXN0cnVjdGl2ZSDigJQgZHVwbGljYXRlIGNvbW1hbmRzLCB3b3JrIGRvbmUgdHdpY2Ug4oCUIHdoZXJlXG4gICAqIHJlZnVzaW5nIHRvIGxvYWQgd291bGQgY29zdCB0aGUgdXNlciBtb3JlIHRoYW4gdGhlIG92ZXJsYXAgZG9lcy5cbiAgICovXG4gIFdhcm4gPSAnd2Fybidcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiBhbm90aGVyIHBsdWdpbiByZWZ1c2VzIHRvIHJ1biBiZXNpZGUsIG9yIHdhcm5zIGFib3V0IHJ1bm5pbmcgYmVzaWRlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkNvbmZsaWN0IHtcbiAgLyoqXG4gICAqIFRoZSBzZW12ZXIgcmFuZ2Ugb2YgdGhlIE9USEVSIHBsdWdpbidzIHZlcnNpb25zIHRoYXQgY29uZmxpY3QsIGUuZy4gYCc8MTIuMC4wJ2AgZm9yIFwiZXZlcnkgdmVyc2lvblxuICAgKiBiZWZvcmUgdGhlIG9uZSB0aGF0IGdhdmUgdGhpcyBiZWhhdmlvciB1cFwiLlxuICAgKlxuICAgKiBBIHJhbmdlIHJhdGhlciB0aGFuIGEgbWluaW11bSwgc28gYW4gb3ZlcmxhcCBjb25maW5lZCB0byBvbmUgbWFqb3IgKGAnPj0zIDw0J2ApIGlzIGV4cHJlc3NpYmxlLCBhbmQgc29cbiAgICogaXMgYSBwbHVnaW4gdGhhdCBjb25mbGljdHMgYXQgZXZlcnkgdmVyc2lvbiDigJQgc3BlbGwgdGhhdCBgJz49MC4wLjAnYCwgc2luY2UgYGNvbXBhcmUtdmVyc2lvbnNgIHJlamVjdHNcbiAgICogYSBiYXJlIGAqYC4gRXZhbHVhdGVkIGFnYWluc3QgYG1hbmlmZXN0LnZlcnNpb25gOyBhIHZlcnNpb24gdGhhdCBjYW5ub3QgYmUgcGFyc2VkIGNvdW50cyBhc1xuICAgKiBjb25mbGljdGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbmZsaWN0aW5nVmVyc2lvblJhbmdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSBjb25mbGljdGluZyBwbHVnaW4sIGFzIGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBjb25mbGljdGluZyBwbHVnaW4sIHNob3duIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGxvY2FsaXplZCBzZW50ZW5jZSBzYXlpbmcgd2hhdCBnb2VzIHdyb25nIHdoZW4gYm90aCBydW4sIHNob3duIGluIHRoZSBiYW5uZXIuXG4gICAqXG4gICAqIFRoZSBkZWNsYXJpbmcgcGx1Z2luIG93bnMgdGhpcyBzdHJpbmcgYmVjYXVzZSBvbmx5IGl0IGtub3dzIHdoYXQgdGhlIHR3byBvZiB0aGVtIGNvbGxpZGUgb3ZlciwgYW5kIGFcbiAgICogdXNlciBiZWluZyBhc2tlZCB0byBkaXNhYmxlIHNvbWV0aGluZyBkZXNlcnZlcyB0byBiZSB0b2xkIHdoeS5cbiAgICpcbiAgICogUGFzcyBhIHtAbGluayBEb2N1bWVudEZyYWdtZW50fSB0byBtYXJrIHVwIHBhcnQgb2YgdGhlIHNlbnRlbmNlLCBzdWNoIGFzIGEgcGx1Z2luIG5hbWUgcmVuZGVyZWQgYXNcbiAgICogY29kZS4gRWFjaCByZW5kZXIgYXBwZW5kcyBhIGZyZXNoIGNsb25lIG9mIGl0LCBzaW5jZSB0aGUgYmFubmVyIGlzIHJlbmRlcmVkIGFnYWluIG9uIGV2ZXJ5IHJlZnJlc2guXG4gICAqL1xuICByZWFkb25seSByZWFzb246IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoYXQgdGhpcyBwbHVnaW4gZG9lcyBhYm91dCB0aGUgY29uZmxpY3QuXG4gICAqL1xuICByZWFkb25seSBzZXZlcml0eTogUGx1Z2luQ29uZmxpY3RTZXZlcml0eTtcbn1cblxuLyoqXG4gKiBBIHBsdWdpbiBhbm90aGVyIHBsdWdpbiBjYW5ub3Qgd29yayB3aXRob3V0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkRlcGVuZGVuY3kge1xuICAvKipcbiAgICogVGhlIHNlbXZlciByYW5nZSBvZiBBUEkgY29udHJhY3QgdmVyc2lvbnMgdGhlIGRlcGVuZGVudCBjb21waWxlZCBhZ2FpbnN0LCBlLmcuIGAnXjInYC5cbiAgICpcbiAgICogQSBkZXBlbmRlbmN5IHdob3NlIHB1Ymxpc2hlZCBBUEkgZmFsbHMgb3V0c2lkZSB0aGUgcmFuZ2UgY291bnRzIGFzIFVOU0FUSVNGSUVELCB3aGljaCBpcyB3aGF0IHR1cm5zIGFcbiAgICogc2lsZW50IGJlaGF2aW9yYWwgbWlzbWF0Y2ggYmV0d2VlbiB0d28gaW5kZXBlbmRlbnRseSByZWxlYXNlZCBwbHVnaW5zIGludG8gYSB2aXNpYmxlIFwidXBkYXRlIHRoaXNcbiAgICogb25lXCIgbWVzc2FnZS4gU3BlbGwgXCJhbnkgdmVyc2lvblwiIGFzIGAnPj0wLjAuMCdgIOKAlCBgY29tcGFyZS12ZXJzaW9uc2AgcmVqZWN0cyBhIGJhcmUgYCpgLlxuICAgKi9cbiAgcmVhZG9ubHkgYXBpVmVyc2lvblJhbmdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGRlc3QgcmVsZWFzZSBvZiB0aGUgcmVxdWlyZWQgcGx1Z2luIHRoZSBkZXBlbmRlbnQgd29ya3Mgd2l0aCwgZS5nLiBgJzIuMi4wJ2AuXG4gICAqXG4gICAqIEZvciBhIHByb3ZpZGVyIHdob3NlIEJFSEFWSU9SIGNoYW5nZWQgd2hpbGUgaXRzIEFQSSBjb250cmFjdCBzdGF5ZWQgdGhlIHNhbWUsIHdoaWNoXG4gICAqIHtAbGluayBhcGlWZXJzaW9uUmFuZ2V9IGNhbm5vdCBzZWUuIEEgZGVwZW5kZW5jeSBlbmFibGVkIGJlbG93IGl0IGNvdW50cyBhcyBVTlNBVElTRklFRCBhbmQgYXNrcyB0aGVcbiAgICogdXNlciB0byB1cGRhdGUgaXQuIEV2YWx1YXRlZCBhZ2FpbnN0IGBtYW5pZmVzdC52ZXJzaW9uYDsgYSB2ZXJzaW9uIHRoYXQgY2Fubm90IGJlIHBhcnNlZCBjb3VudHMgYXMgdG9vXG4gICAqIG9sZC4gQSBtaW5pbXVtIHJhdGhlciB0aGFuIGEgcmFuZ2UsIGJlY2F1c2UgdGhlIG9ubHkgYWR2aWNlIHRoZSBnYXRlIGNhbiBnaXZlIGlzIFwidXBkYXRlIGl0XCIsIGFuZCBhblxuICAgKiB1cHBlciBib3VuZCBpcyBhIHZlcnNpb24gbm8gdXBkYXRlIHJlYWNoZXMuXG4gICAqL1xuICByZWFkb25seSBtaW5QbHVnaW5WZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYG1hbmlmZXN0LmlkYCBvZiB0aGUgcmVxdWlyZWQgcGx1Z2luLCBhcyBsaXN0ZWQgaW4gT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2luIHJlZ2lzdHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRpc3BsYXkgbmFtZSBvZiB0aGUgcmVxdWlyZWQgcGx1Z2luLCBzaG93biB0byB0aGUgdXNlci5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQSBsb2NhbGl6ZWQgc2VudGVuY2Ugc2F5aW5nIHdoYXQgdGhlIGRlcGVuZGVudCBkb2VzIHdpdGggdGhpcyBwbHVnaW4sIHNob3duIGluIHRoZSBzZXR0aW5ncyBiYW5uZXIuXG4gICAqXG4gICAqIFRoZSBkZXBlbmRlbnQgb3ducyB0aGlzIHN0cmluZyBiZWNhdXNlIG9ubHkgaXQga25vd3Mgd2hhdCBpdCB1c2VzIHRoZSBvdGhlciBwbHVnaW4gZm9yLCBhbmQgYSB1c2VyXG4gICAqIGJlaW5nIGFza2VkIHRvIGluc3RhbGwgc29tZXRoaW5nIGRlc2VydmVzIHRvIGJlIHRvbGQgd2h5LlxuICAgKlxuICAgKiBQYXNzIGEge0BsaW5rIERvY3VtZW50RnJhZ21lbnR9IHRvIG1hcmsgdXAgcGFydCBvZiB0aGUgc2VudGVuY2UsIHN1Y2ggYXMgYSBwbHVnaW4gbmFtZSByZW5kZXJlZCBhc1xuICAgKiBjb2RlLiBFYWNoIHJlbmRlciBhcHBlbmRzIGEgZnJlc2ggY2xvbmUgb2YgaXQsIHNpbmNlIHRoZSBiYW5uZXIgaXMgcmVuZGVyZWQgYWdhaW4gb24gZXZlcnkgcmVmcmVzaC5cbiAgICovXG4gIHJlYWRvbmx5IHJlYXNvbjogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIFBsdWdpbkdhdGVDb21wb25lbnR9IGNvbnN0cnVjdG9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkdhdGVDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgY29uZmxpY3RzIHRvIGVuZm9yY2UuIEFuIGVtcHR5IGxpc3QgbWVhbnMgdGhlIHBsdWdpbiByZWZ1c2VzIHRvIHJ1biBiZXNpZGUgbm90aGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGNvbmZsaWN0czogcmVhZG9ubHkgUGx1Z2luQ29uZmxpY3RbXTtcblxuICAvKipcbiAgICogVGhlIGRlcGVuZGVuY2llcyB0byBlbmZvcmNlLiBBbiBlbXB0eSBsaXN0IG1lYW5zIHRoZSBwbHVnaW4gZGVwZW5kcyBvbiBub3RoaW5nLCBhbmQgaXRzIGZlYXR1cmVcbiAgICogc3VyZmFjZSBsb2FkcyBpbW1lZGlhdGVseS5cbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY2llczogcmVhZG9ubHkgUGx1Z2luRGVwZW5kZW5jeVtdO1xuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgaG9zdCBwbHVnaW4ncyBmZWF0dXJlIHN1cmZhY2UuIENhbGxlZCBvbmNlIGV2ZXJ5IGRlcGVuZGVuY3kgaXMgc2F0aXNmaWVkIGFuZCBubyBibG9ja2luZ1xuICAgKiBjb25mbGljdCBob2xkcywgYW5kIGFnYWluIGFmdGVyIGEgZ2F0ZSB0aGF0IGhhZCBjbG9zZWQgb3BlbnMgYmFjayB1cC5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBzdXJmYWNlIGlzIGxvYWRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGxvYWRGZWF0dXJlU3VyZmFjZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVGhlIGhvc3QgcGx1Z2luIOKAlCB0aGUgb25lIGRlY2xhcmluZyB0aGUgZGVwZW5kZW5jaWVzIGFuZCBjb25mbGljdHMuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW46IFBsdWdpbjtcblxuICAvKipcbiAgICogVGhlIGhvc3QgcGx1Z2luJ3Mgbm90aWNlIGNvbXBvbmVudCwgdXNlZCB0byBzYXkgd2hhdCBpcyBtaXNzaW5nLCB3aGF0IGlzIGluIHRoZSB3YXksIGFuZCB3aGF0IGNoYW5nZWQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IFBsdWdpbk5vdGljZUNvbXBvbmVudDtcblxuICAvKipcbiAgICogVW5sb2FkcyB0aGUgaG9zdCBwbHVnaW4ncyBmZWF0dXJlIHN1cmZhY2UuIENhbGxlZCB3aGVuIGEgZ2F0ZSB0aGF0IGhhZCBiZWVuIG9wZW4gY2xvc2VzLlxuICAgKi9cbiAgcmVhZG9ubHkgdW5sb2FkRmVhdHVyZVN1cmZhY2U6ICgpID0+IHZvaWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBCbG9ja2VkUGx1Z2luU2V0dGluZ1RhYn0gY29uc3RydWN0b3IuXG4gKi9cbmludGVyZmFjZSBCbG9ja2VkUGx1Z2luU2V0dGluZ1RhYkNvbnN0cnVjdG9yUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSBibG9ja2VkIHBsdWdpbi5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luO1xuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBibG9ja2VkIGV4cGxhbmF0aW9uIGludG8gdGhlIHRhYidzIGNvbnRhaW5lci5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lckVsIC0gVGhlIHRhYidzIGNvbnRhaW5lciBlbGVtZW50LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVuZGVyQmFubmVyOiAoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIFRoZSBzZXR0aW5ncyB0YWIgYSBibG9ja2VkIHBsdWdpbiBzaG93cyBpbiBwbGFjZSBvZiB0aGUgb25lIGl0IG5ldmVyIGdvdCB0byByZWdpc3Rlci5cbiAqXG4gKiBBIGJsb2NrZWQgcGx1Z2luJ3MgYG9ubG9hZEltcGxgIG5ldmVyIHJhbiwgc28gaXRzIHJlYWwgc2V0dGluZ3MgdGFiIGRvZXMgbm90IGV4aXN0IOKAlCBhbmQgYSB1c2VyIHdobyBnb2VzXG4gKiBsb29raW5nIGZvciB0aGUgcGx1Z2luJ3Mgc2V0dGluZ3MgaXMgcHJlY2lzZWx5IHRoZSB1c2VyIGFza2luZyBcIndoeSBpc24ndCB0aGlzIGRvaW5nIGFueXRoaW5nP1wiLiBBblxuICogZW1wdHkgc3BhY2UgaXMgdGhlIHdvcnN0IHBvc3NpYmxlIGFuc3dlciB0byB0aGF0IHF1ZXN0aW9uLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW5tZC9zZXR0aW5ncy10YWIvcHJlZmVyLXNldHRpbmctZGVmaW5pdGlvbnMgLS0gVGhpcyB0YWIgaGFzIG5vIHNldHRpbmdzIHRvIGRlY2xhcmUuIEl0IHN0YW5kcyBpbiBmb3IgYSBzZXR0aW5ncyB0YWIgdGhhdCBkb2VzIG5vdCBleGlzdCB5ZXQsIGNhcnJ5aW5nIGFuIGV4cGxhbmF0aW9uIGFuZCBhIHJlcGFpciBidXR0b24sIGFuZCB0aGUgcGx1Z2luJ3MgcmVhbCBzZXR0aW5ncyBhcHBlYXIgdGhlIG1vbWVudCB0aGUgZ2F0ZSBvcGVucy5cbmNsYXNzIEJsb2NrZWRQbHVnaW5TZXR0aW5nVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyQmFubmVyOiAoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHtAbGluayBCbG9ja2VkUGx1Z2luU2V0dGluZ1RhYn0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgY29uc3RydWN0b3IgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IEJsb2NrZWRQbHVnaW5TZXR0aW5nVGFiQ29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcihwYXJhbXMucGx1Z2luLmFwcCwgcGFyYW1zLnBsdWdpbik7XG4gICAgdGhpcy5yZW5kZXJCYW5uZXIgPSBwYXJhbXMucmVuZGVyQmFubmVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIHRhYi5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNwbGF5KCk6IHZvaWQge1xuICAgIHRoaXMuY29udGFpbmVyRWwuZW1wdHkoKTtcbiAgICB0aGlzLnJlbmRlckJhbm5lcih0aGlzLmNvbnRhaW5lckVsKTtcbiAgfVxufVxuXG4vKipcbiAqIEVuZm9yY2VzIGEgcGx1Z2luJ3MgbWFuZGF0b3J5IGRlcGVuZGVuY2llcyBhbmQgZGVjbGFyZWQgY29uZmxpY3RzLCBnYXRpbmcgaXRzIGZlYXR1cmUgc3VyZmFjZSBvbiBib3RoLlxuICovXG5leHBvcnQgY2xhc3MgUGx1Z2luR2F0ZUNvbXBvbmVudCBleHRlbmRzIENvbXBvbmVudEV4IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhbm5vdW5jZWRXYXJuaW5nUGx1Z2luSWRzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpUmVmcyA9IG5ldyBNYXA8c3RyaW5nLCBQbHVnaW5BcGlSZWY8b2JqZWN0Pj4oKTtcbiAgcHJpdmF0ZSBibG9ja2VkU2V0dGluZ1RhYjogbnVsbCB8IFBsdWdpblNldHRpbmdUYWIgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvbmZsaWN0czogcmVhZG9ubHkgUGx1Z2luQ29uZmxpY3RbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXBlbmRlbmNpZXM6IHJlYWRvbmx5IFBsdWdpbkRlcGVuZGVuY3lbXTtcbiAgcHJpdmF0ZSBoYXNBbm5vdW5jZWRCbG9ja2VkID0gZmFsc2U7XG4gIHByaXZhdGUgaXNGZWF0dXJlU3VyZmFjZUxvYWRlZCA9IGZhbHNlO1xuICBwcml2YXRlIGlzTGF5b3V0UmVhZHkgPSBmYWxzZTtcbiAgcHJpdmF0ZSByZWFkb25seSBsb2FkRmVhdHVyZVN1cmZhY2U6ICgpID0+IFByb21pc2U8dm9pZD47XG4gIHByaXZhdGUgbG9zc0Fubm91bmNlbWVudFRpbWVySWQ6IG51bGwgfCBudW1iZXIgPSBudWxsO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbjogUGx1Z2luO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbk5vdGljZUNvbXBvbmVudDogUGx1Z2luTm90aWNlQ29tcG9uZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IHVubG9hZEZlYXR1cmVTdXJmYWNlOiAoKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgZ2V0IGFwcCgpOiBBcHAge1xuICAgIHJldHVybiB0aGlzLnBsdWdpbi5hcHA7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiB7QGxpbmsgUGx1Z2luR2F0ZUNvbXBvbmVudH0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgY29uc3RydWN0b3IgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFBsdWdpbkdhdGVDb21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5jb25mbGljdHMgPSBwYXJhbXMuY29uZmxpY3RzO1xuICAgIHRoaXMuZGVwZW5kZW5jaWVzID0gcGFyYW1zLmRlcGVuZGVuY2llcztcbiAgICB0aGlzLmxvYWRGZWF0dXJlU3VyZmFjZSA9IHBhcmFtcy5sb2FkRmVhdHVyZVN1cmZhY2U7XG4gICAgdGhpcy5wbHVnaW4gPSBwYXJhbXMucGx1Z2luO1xuICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50ID0gcGFyYW1zLnBsdWdpbk5vdGljZUNvbXBvbmVudDtcbiAgICB0aGlzLnVubG9hZEZlYXR1cmVTdXJmYWNlID0gcGFyYW1zLnVubG9hZEZlYXR1cmVTdXJmYWNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNheXMgd2hldGhlciBhbnkgd2FybmluZyBjb25mbGljdCBpcyBpbiBmb3JjZSByaWdodCBub3cuXG4gICAqXG4gICAqIFRoZSBwcmVkaWNhdGUgYSBkZWNsYXJhdGl2ZSBzZXR0aW5ncyB0YWIgbmVlZHMsIGFuZCB0aGUgY291bnRlcnBhcnQgdG9cbiAgICogYFBsdWdpblN1Z2dlc3Rpb25Db21wb25lbnQuZ2V0U3VnZ2VzdGVkUGx1Z2luU3RhdGVgLiBTdWNoIGEgdGFiIGRlY2lkZXMgd2hldGhlciBhIHJvdyBleGlzdHNcbiAgICogQkVGT1JFIGl0IHJlbmRlcnMgYW55dGhpbmcgaW50byBpdCwgc28ge0BsaW5rIHJlbmRlckNvbmZsaWN0V2FybmluZ0Jhbm5lcn0gd3JpdGluZyBub3RoaW5nIGNhbm5vdFxuICAgKiBhbnN3ZXIgdGhlIHF1ZXN0aW9uIGZvciBpdCDigJQgYSByb3cgdGhhdCByZW5kZXJzIGVtcHR5IGlzIHN0aWxsIGEgcm93LCB3aXRoIHRoZSBkaXZpZGVyIGFuZCBwYWRkaW5nXG4gICAqIGV2ZXJ5IG90aGVyIHNldHRpbmcgaGFzLlxuICAgKlxuICAgKiBAcmV0dXJucyBXaGV0aGVyIGF0IGxlYXN0IG9uZSBkZWNsYXJlZCB3YXJuaW5nIGNvbmZsaWN0IGhvbGRzLlxuICAgKi9cbiAgcHVibGljIGhhc0FjdGl2ZVdhcm5pbmdDb25mbGljdHMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QWN0aXZlQ29uZmxpY3RzKFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHkuV2FybikubGVuZ3RoID4gMDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydHMgd2F0Y2hpbmcgZXZlcnkgZGVjbGFyZWQgZGVwZW5kZW5jeSBhbmQgY29uZmxpY3QuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiB0aGlzLmRlcGVuZGVuY2llcykge1xuICAgICAgY29uc3QgYXBpUmVmID0gd2F0Y2hQbHVnaW5BcGk8b2JqZWN0Pih7XG4gICAgICAgIGFwaVZlcnNpb25SYW5nZTogZGVwZW5kZW5jeS5hcGlWZXJzaW9uUmFuZ2UsXG4gICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgIGNvbXBvbmVudDogdGhpcyxcbiAgICAgICAgcGx1Z2luSWQ6IGRlcGVuZGVuY3kucGx1Z2luSWRcbiAgICAgIH0pO1xuICAgICAgcmVnaXN0ZXJBc3luY0V2ZW50KFxuICAgICAgICB0aGlzLFxuICAgICAgICBhcGlSZWYub24oJ2NoYW5nZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLmFwaVJlZnMuc2V0KGRlcGVuZGVuY3kucGx1Z2luSWQsIGFwaVJlZik7XG4gICAgfVxuXG4gICAgLy8gQSBjb25mbGljdCBoYXMgbm8gQVBJIHRvIHdhdGNoIOKAlCBpdCBpcyByZWFkIG91dCBvZiB0aGUgbWFuaWZlc3RzIOKAlCBzbyB0aGUgdHJpZ2dlciB0byByZS1yZWFkIGlzIHRoZVxuICAgIC8vIGxpYnJhcnkncyBvd24gbGlmZWN5Y2xlIGJyb2FkY2FzdC4gSXQgY292ZXJzIGV2ZXJ5IGNvbmZsaWN0aW5nIHBsdWdpbiBidWlsdCBvbiB0aGlzIGxpYnJhcnk7IG9uZVxuICAgIC8vIHRoYXQgaXMgbm90IGlzIGNhdWdodCBhdCB0aGUgbmV4dCBsb2FkLCBhcyB0aGUgZmlsZSBoZWFkZXIgc2F5cy5cbiAgICBjb25zdCBsaWZlY3ljbGVFdmVudE5hbWVzOiBQbHVnaW5MaWZlY3ljbGVFdmVudE5hbWVbXSA9IFtQTFVHSU5fTE9BREVEX0VWRU5UX05BTUUsIFBMVUdJTl9VTkxPQURFRF9FVkVOVF9OQU1FXTtcbiAgICBmb3IgKGNvbnN0IGV2ZW50TmFtZSBvZiBsaWZlY3ljbGVFdmVudE5hbWVzKSB7XG4gICAgICB0aGlzLnJlZ2lzdGVyRXZlbnQodGhpcy5hcHAud29ya3NwYWNlLm9uKFxuICAgICAgICBldmVudE5hbWUsXG4gICAgICAgIGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAocGF5bG9hZDogUGx1Z2luTGlmZWN5Y2xlRXZlbnRQYXlsb2FkKSA9PiB7XG4gICAgICAgICAgaWYgKHBheWxvYWQucGx1Z2luSWQgPT09IHRoaXMucGx1Z2luLm1hbmlmZXN0LmlkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH0pXG4gICAgICApKTtcbiAgICB9XG5cbiAgICAvLyBOb3RoaW5nIGlzIFNBSUQgYWJvdXQgYSBtaXNzaW5nIGRlcGVuZGVuY3kgdW50aWwgdGhlIGxheW91dCBpcyByZWFkeS4gUGx1Z2lucyBsb2FkIGluIGFuIHVuc3BlY2lmaWVkXG4gICAgLy8gb3JkZXIsIHNvIGEgZGVwZW5kZW5jeSB0aGF0IHNpbXBseSBoYXMgbm90IGxvYWRlZCB5ZXQgaXMgaW5kaXN0aW5ndWlzaGFibGUgYXQgdGhpcyBwb2ludCBmcm9tIG9uZVxuICAgIC8vIHRoYXQgaXMgbm90IGluc3RhbGxlZCDigJQgYW5ub3VuY2luZyBoZXJlIHdvdWxkIHB1dCBhIFwibWlzc2luZyBwbHVnaW5cIiBub3RpY2Ugb24gc2NyZWVuIGF0IGV2ZXJ5XG4gICAgLy8gc3RhcnR1cCBhbmQgdGFrZSBpdCBhd2F5IGEgbW9tZW50IGxhdGVyLiBUaGUgZ2F0ZSBpdHNlbGYgZG9lcyBub3Qgd2FpdDogdGhlIHN1cmZhY2UgbG9hZHMgdGhlXG4gICAgLy8gaW5zdGFudCB0aGUgZGVwZW5kZW5jeSBpcyB0aGVyZSwgd2hlbmV2ZXIgdGhhdCBpcy5cbiAgICB0aGlzLmFkZENoaWxkKFxuICAgICAgbmV3IENhbGxiYWNrTGF5b3V0UmVhZHlDb21wb25lbnQodGhpcy5hcHAsICgpID0+IHtcbiAgICAgICAgdGhpcy5pc0xheW91dFJlYWR5ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wcmVzZW50VW5zYXRpc2ZpZWQodGhpcy5nZXRVbnNhdGlzZmllZERlcGVuZGVuY2llcygpLCB0aGlzLmdldEFjdGl2ZUNvbmZsaWN0cyhQbHVnaW5Db25mbGljdFNldmVyaXR5LkJsb2NrKSk7XG4gICAgICAgIHRoaXMuYW5ub3VuY2VXYXJuaW5ncygpO1xuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5yZWdpc3RlcigoKSA9PiB7XG4gICAgICB0aGlzLmNhbmNlbExvc3NBbm5vdW5jZW1lbnQoKTtcbiAgICAgIHRoaXMuaGlkZUJsb2NrZWRTZXR0aW5nVGFiKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGVzIHRoZSBnYXRlIG9uY2UgdGhlIHdhdGNoZXMgYXJlIGluIHBsYWNlLCBsb2FkaW5nIHRoZSBmZWF0dXJlIHN1cmZhY2UgaWYgaXQgaXMgYWxyZWFkeSBvcGVuLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGZpcnN0IGV2YWx1YXRpb24gaXMgY29tcGxldGUuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYXN5bmMgb25sb2FkQXN5bmMoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyBhIGJhbm5lciBmb3IgZXZlcnkgY29uZmxpY3QgdGhlIGhvc3QgaXMgcnVubmluZyBhbG9uZ3NpZGUsIHNvIGEgcGx1Z2luIGNhbiBwdXQgdGhlIG92ZXJsYXAgaW5cbiAgICogaXRzIG93biBzZXR0aW5ncyB0YWIuXG4gICAqXG4gICAqIENvbnN1bWVyLWludm9rZWQsIGV4YWN0bHkgbGlrZSBgUGx1Z2luU3VnZ2VzdGlvbkNvbXBvbmVudC5yZW5kZXJCYW5uZXJgOiB0aGUgbGlicmFyeSByZWdpc3RlcnMgdGhlXG4gICAqIHNldHRpbmdzIHRhYiBhIEJMT0NLRUQgcGx1Z2luIG5lZWRzLCBiZWNhdXNlIHRoYXQgcGx1Z2luIG5ldmVyIGdvdCB0byByZWdpc3RlciBvbmUgb2YgaXRzIG93biwgYnV0IGl0XG4gICAqIGhhcyBubyBob29rIGludG8gdGhlIHRhYiBhIHJ1bm5pbmcgcGx1Z2luIGJ1aWxkcy4gUmVuZGVycyBub3RoaW5nIHdoZW4gbm8gd2FybmluZyBjb25mbGljdCBob2xkcy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lckVsIC0gVGhlIGVsZW1lbnQgdG8gcmVuZGVyIGludG8uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyQ29uZmxpY3RXYXJuaW5nQmFubmVyKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgY29uZmxpY3Qgb2YgdGhpcy5nZXRBY3RpdmVDb25mbGljdHMoUGx1Z2luQ29uZmxpY3RTZXZlcml0eS5XYXJuKSkge1xuICAgICAgdGhpcy5yZW5kZXJDb25mbGljdEVudHJ5KGNvbnRhaW5lckVsLCBjb25mbGljdCwgdGhpcy5jcmVhdGVDb25mbGljdFdhcm5pbmdNZXNzYWdlKGNvbmZsaWN0KSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNheXMgd2hhdCB3ZW50IGF3YXkgd2hpbGUgdGhlIHBsdWdpbiB3YXMgcnVubmluZywgbm93IHRoYXQgdGhlIGdyYWNlIHBlcmlvZCBpcyBvdmVyLlxuICAgKlxuICAgKiBSZS1yZWFkcyB0aGUgZ2F0ZSByYXRoZXIgdGhhbiB0cnVzdGluZyB3aGF0IGNsb3NlZCBpdCwgc28gYSBkZXBlbmRlbmN5IHRoYXQgd2VudCBhd2F5IGR1cmluZyB0aGVcbiAgICogd2luZG93IGlzIGFubm91bmNlZCB3aXRoIHRoZSByZXN0LiBPbmUgdGhhdCBjYW1lIGJhY2sgaW4gdGltZSBuZXZlciBnZXRzIGhlcmU6IHRoZSBnYXRlIHJlb3BlbmluZ1xuICAgKiBjYW5jZWxzIHRoZSB0aW1lci5cbiAgICovXG4gIHByaXZhdGUgYW5ub3VuY2VMb3NzKCk6IHZvaWQge1xuICAgIHRoaXMubG9zc0Fubm91bmNlbWVudFRpbWVySWQgPSBudWxsO1xuXG4gICAgZm9yIChjb25zdCBkZXBlbmRlbmN5IG9mIHRoaXMuZ2V0VW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMoKSkge1xuICAgICAgdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZSh0aGlzLmNyZWF0ZURlcGVuZGVuY3lMb3N0TWVzc2FnZShkZXBlbmRlbmN5KSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjb25mbGljdCBvZiB0aGlzLmdldEFjdGl2ZUNvbmZsaWN0cyhQbHVnaW5Db25mbGljdFNldmVyaXR5LkJsb2NrKSkge1xuICAgICAgdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZSh0aGlzLmNyZWF0ZUNvbmZsaWN0QXBwZWFyZWRNZXNzYWdlKGNvbmZsaWN0KSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhbm5vdW5jZVdhcm5pbmdzKCk6IHZvaWQge1xuICAgIC8vIEEgd2FybmluZyBkZXNjcmliZXMgdHdvIHBsdWdpbnMgdGhhdCBhcmUgYm90aCBSVU5OSU5HLCBzbyBpdCBpcyBwb2ludGxlc3Mgd2hpbGUgdGhpcyBvbmUgaXMgYmxvY2tlZFxuICAgIC8vIOKAlCBhbmQgaXQgd2FpdHMgZm9yIGxheW91dC1yZWFkeSBmb3IgdGhlIHNhbWUgcmVhc29uIHRoZSBibG9ja2VkIG5vdGljZSBkb2VzLlxuICAgIGlmICghdGhpcy5pc0xheW91dFJlYWR5IHx8ICF0aGlzLmlzRmVhdHVyZVN1cmZhY2VMb2FkZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGNvbmZsaWN0IG9mIHRoaXMuZ2V0QWN0aXZlQ29uZmxpY3RzKFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHkuV2FybikpIHtcbiAgICAgIGlmICh0aGlzLmFubm91bmNlZFdhcm5pbmdQbHVnaW5JZHMuaGFzKGNvbmZsaWN0LnBsdWdpbklkKSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hbm5vdW5jZWRXYXJuaW5nUGx1Z2luSWRzLmFkZChjb25mbGljdC5wbHVnaW5JZCk7XG4gICAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudC5zaG93Tm90aWNlKHRoaXMuY3JlYXRlQ29uZmxpY3RXYXJuaW5nTWVzc2FnZShjb25mbGljdCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2FuY2VsTG9zc0Fubm91bmNlbWVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5sb3NzQW5ub3VuY2VtZW50VGltZXJJZCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGhpcy5sb3NzQW5ub3VuY2VtZW50VGltZXJJZCk7XG4gICAgdGhpcy5sb3NzQW5ub3VuY2VtZW50VGltZXJJZCA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUJsb2NrZWRNZXNzYWdlKGRlcGVuZGVuY3k6IFBsdWdpbkRlcGVuZGVuY3kpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICBpZiAodGhpcy5pc1Rvb09sZChkZXBlbmRlbmN5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVmVyc2lvbk1pc21hdGNoTWVzc2FnZShkZXBlbmRlbmN5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrcyh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luRGVwZW5kZW5jeS5ibG9ja2VkTm90aWNlLCB7XG4gICAgICBkZXBlbmRlbmN5UGx1Z2luTmFtZTogYXNDb2RlQmxvY2soZGVwZW5kZW5jeS5wbHVnaW5OYW1lKSxcbiAgICAgIHBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKHRoaXMucGx1Z2luLm1hbmlmZXN0Lm5hbWUpXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb25mbGljdEFwcGVhcmVkTWVzc2FnZShjb25mbGljdDogUGx1Z2luQ29uZmxpY3QpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrcyh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luQ29uZmxpY3QuY29uZmxpY3RBcHBlYXJlZE5vdGljZSwge1xuICAgICAgY29uZmxpY3RpbmdQbHVnaW5OYW1lOiBhc0NvZGVCbG9jayhjb25mbGljdC5wbHVnaW5OYW1lKSxcbiAgICAgIHBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKHRoaXMucGx1Z2luLm1hbmlmZXN0Lm5hbWUpXG4gICAgfSkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVDb25mbGljdEJsb2NrZWRNZXNzYWdlKGNvbmZsaWN0OiBQbHVnaW5Db25mbGljdCk6IERvY3VtZW50RnJhZ21lbnQge1xuICAgIHJldHVybiBjcmVhdGVGcmFnbWVudFdpdGhDb2RlQmxvY2tzKHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5Db25mbGljdC5ibG9ja2VkTm90aWNlLCB7XG4gICAgICBjb25mbGljdGluZ1BsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKGNvbmZsaWN0LnBsdWdpbk5hbWUpLFxuICAgICAgcGx1Z2luTmFtZTogYXNDb2RlQmxvY2sodGhpcy5wbHVnaW4ubWFuaWZlc3QubmFtZSlcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUNvbmZsaWN0V2FybmluZ01lc3NhZ2UoY29uZmxpY3Q6IFBsdWdpbkNvbmZsaWN0KTogRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50V2l0aENvZGVCbG9ja3ModCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBsdWdpbkNvbmZsaWN0Lndhcm5pbmdOb3RpY2UsIHtcbiAgICAgIGNvbmZsaWN0aW5nUGx1Z2luTmFtZTogYXNDb2RlQmxvY2soY29uZmxpY3QucGx1Z2luTmFtZSksXG4gICAgICBwbHVnaW5OYW1lOiBhc0NvZGVCbG9jayh0aGlzLnBsdWdpbi5tYW5pZmVzdC5uYW1lKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGVwZW5kZW5jeUxvc3RNZXNzYWdlKGRlcGVuZGVuY3k6IFBsdWdpbkRlcGVuZGVuY3kpOiBEb2N1bWVudEZyYWdtZW50IHtcbiAgICBpZiAodGhpcy5pc1Rvb09sZChkZXBlbmRlbmN5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlVmVyc2lvbk1pc21hdGNoTWVzc2FnZShkZXBlbmRlbmN5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRXaXRoQ29kZUJsb2Nrcyh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luRGVwZW5kZW5jeS5kZXBlbmRlbmN5TG9zdE5vdGljZSwge1xuICAgICAgZGVwZW5kZW5jeVBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKGRlcGVuZGVuY3kucGx1Z2luTmFtZSksXG4gICAgICBwbHVnaW5OYW1lOiBhc0NvZGVCbG9jayh0aGlzLnBsdWdpbi5tYW5pZmVzdC5uYW1lKVxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlVmVyc2lvbk1pc21hdGNoTWVzc2FnZShkZXBlbmRlbmN5OiBQbHVnaW5EZXBlbmRlbmN5KTogRG9jdW1lbnRGcmFnbWVudCB7XG4gICAgcmV0dXJuIGNyZWF0ZUZyYWdtZW50V2l0aENvZGVCbG9ja3ModCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBsdWdpbkRlcGVuZGVuY3kudmVyc2lvbk1pc21hdGNoTm90aWNlLCB7XG4gICAgICBkZXBlbmRlbmN5UGx1Z2luTmFtZTogYXNDb2RlQmxvY2soZGVwZW5kZW5jeS5wbHVnaW5OYW1lKSxcbiAgICAgIHBsdWdpbk5hbWU6IGFzQ29kZUJsb2NrKHRoaXMucGx1Z2luLm1hbmlmZXN0Lm5hbWUpXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHRoZSBkZWNsYXJlZCBjb25mbGljdHMgb2Ygb25lIHNldmVyaXR5IHRoYXQgYXJlIGN1cnJlbnRseSBpbiBmb3JjZS5cbiAgICpcbiAgICogQHBhcmFtIHNldmVyaXR5IC0gVGhlIHNldmVyaXR5IHRvIHNlbGVjdC5cbiAgICogQHJldHVybnMgVGhlIGNvbmZsaWN0cyBob2xkaW5nIHJpZ2h0IG5vdywgaW4gdGhlIG9yZGVyIHRoZXkgd2VyZSBkZWNsYXJlZC5cbiAgICovXG4gIHByaXZhdGUgZ2V0QWN0aXZlQ29uZmxpY3RzKHNldmVyaXR5OiBQbHVnaW5Db25mbGljdFNldmVyaXR5KTogUGx1Z2luQ29uZmxpY3RbXSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmxpY3RzLmZpbHRlcigoY29uZmxpY3QpID0+IGNvbmZsaWN0LnNldmVyaXR5ID09PSBzZXZlcml0eSAmJiB0aGlzLmlzQ29uZmxpY3RBY3RpdmUoY29uZmxpY3QpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0VW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMoKTogUGx1Z2luRGVwZW5kZW5jeVtdIHtcbiAgICByZXR1cm4gdGhpcy5kZXBlbmRlbmNpZXMuZmlsdGVyKChkZXBlbmRlbmN5KSA9PiAhdGhpcy5hcGlSZWZzLmdldChkZXBlbmRlbmN5LnBsdWdpbklkKT8udmFsdWUgfHwgdGhpcy5pc0JlbG93TWluUGx1Z2luVmVyc2lvbihkZXBlbmRlbmN5KSk7XG4gIH1cblxuICBwcml2YXRlIGhpZGVCbG9ja2VkU2V0dGluZ1RhYigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuYmxvY2tlZFNldHRpbmdUYWIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmFwcC5zZXR0aW5nLnJlbW92ZVNldHRpbmdUYWIodGhpcy5ibG9ja2VkU2V0dGluZ1RhYik7XG4gICAgdGhpcy5ibG9ja2VkU2V0dGluZ1RhYiA9IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogRGVjaWRlcyB3aGV0aGVyIGEgZGVwZW5kZW5jeSBpcyBydW5uaW5nIGF0IGEgcmVsZWFzZSBvbGRlciB0aGFuIGl0IGRlY2xhcmVkIGl0IG5lZWRzLlxuICAgKlxuICAgKiBSZWFkIGZyb20gdGhlIG1hbmlmZXN0LCBsaWtlIGEgY29uZmxpY3QsIGFuZCByZS1yZWFkIG9uIGV2ZXJ5IGV2YWx1YXRpb246IE9ic2lkaWFuIGFwcGxpZXMgYW4gdXBkYXRlIGJ5XG4gICAqIHJlbG9hZGluZyB0aGUgcHJvdmlkZXIsIHdoaWNoIGZpcmVzIHRoZSBBUEkgd2F0Y2gncyBgY2hhbmdlYCwgc28gdGhlIGdhdGUgb3BlbnMgd2l0aG91dCBhIHJlc3RhcnQuXG4gICAqXG4gICAqIEBwYXJhbSBkZXBlbmRlbmN5IC0gVGhlIGRlY2xhcmVkIGRlcGVuZGVuY3kuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGRlcGVuZGVuY3kgaXMgZW5hYmxlZCBiZWxvdyBpdHMge0BsaW5rIFBsdWdpbkRlcGVuZGVuY3kubWluUGx1Z2luVmVyc2lvbn07IGBmYWxzZWBcbiAgICogd2hlbiBpdCBkZWNsYXJlcyBub25lIG9yIGlzIG5vdCBlbmFibGVkLCBzaW5jZSBpdHMgQVBJIGlzIHRoZW4gYWJzZW50IGFueXdheS5cbiAgICovXG4gIHByaXZhdGUgaXNCZWxvd01pblBsdWdpblZlcnNpb24oZGVwZW5kZW5jeTogUGx1Z2luRGVwZW5kZW5jeSk6IGJvb2xlYW4ge1xuICAgIGlmIChkZXBlbmRlbmN5Lm1pblBsdWdpblZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbGxlZFZlcnNpb24gPSBnZXRJbnN0YWxsZWRQbHVnaW5WZXJzaW9uKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBwbHVnaW5JZDogZGVwZW5kZW5jeS5wbHVnaW5JZFxuICAgIH0pO1xuXG4gICAgaWYgKGluc3RhbGxlZFZlcnNpb24gPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuICFjb21wYXJlVmVyc2lvbnMoaW5zdGFsbGVkVmVyc2lvbiwgZGVwZW5kZW5jeS5taW5QbHVnaW5WZXJzaW9uLCAnPj0nKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZWNpZGVzIHdoZXRoZXIgb25lIGRlY2xhcmVkIGNvbmZsaWN0IGlzIGluIGZvcmNlIHJpZ2h0IG5vdy5cbiAgICpcbiAgICogT25seSBhbiBFTkFCTEVEIHBsdWdpbiBjb3VudHMuIE9uZSB0aGF0IGlzIGluc3RhbGxlZCBidXQgc3dpdGNoZWQgb2ZmIHJlZ2lzdGVycyBub3RoaW5nLCBzbyBpdCBjYW5ub3RcbiAgICogY29sbGlkZSwgYW5kIGFjdGluZyBvbiBpdCB3b3VsZCBiZSBhbiBhbGFybSB0aGUgdXNlciBjYW4gb25seSBhbnN3ZXIgYnkgdW5pbnN0YWxsaW5nIHNvbWV0aGluZyB0aGV5XG4gICAqIGhhdmUgYWxyZWFkeSB0dXJuZWQgb2ZmLlxuICAgKlxuICAgKiBAcGFyYW0gY29uZmxpY3QgLSBUaGUgZGVjbGFyZWQgY29uZmxpY3QuXG4gICAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbmZsaWN0aW5nIHBsdWdpbiBpcyBlbmFibGVkIGF0IGEgY29uZmxpY3RpbmcgdmVyc2lvbi5cbiAgICovXG4gIHByaXZhdGUgaXNDb25mbGljdEFjdGl2ZShjb25mbGljdDogUGx1Z2luQ29uZmxpY3QpOiBib29sZWFuIHtcbiAgICBjb25zdCBpbnN0YWxsZWRWZXJzaW9uID0gZ2V0SW5zdGFsbGVkUGx1Z2luVmVyc2lvbih7XG4gICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgcGx1Z2luSWQ6IGNvbmZsaWN0LnBsdWdpbklkXG4gICAgfSk7XG5cbiAgICBpZiAoaW5zdGFsbGVkVmVyc2lvbiA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gc2F0aXNmaWVzVmVyc2lvbihpbnN0YWxsZWRWZXJzaW9uLCBjb25mbGljdC5jb25mbGljdGluZ1ZlcnNpb25SYW5nZSk7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGVjaWRlcyB3aGV0aGVyIGEgZGVwZW5kZW5jeSBpcyBydW5uaW5nIGJ1dCB0b28gb2xkIGZvciB0aGlzIHBsdWdpbiwgc28gdGhlIGFkdmljZSBpcyBcInVwZGF0ZSBpdFwiLlxuICAgKlxuICAgKiBUd28gaW5kZXBlbmRlbnQgc2lnbmFscyBzYXkgc286IGEgcmVsZWFzZSBiZWxvdyB7QGxpbmsgUGx1Z2luRGVwZW5kZW5jeS5taW5QbHVnaW5WZXJzaW9ufSwgYW5kIGEgcHVibGlzaGVkXG4gICAqIEFQSSB3aG9zZSBjb250cmFjdCB2ZXJzaW9uIGlzIG91dHNpZGUge0BsaW5rIFBsdWdpbkRlcGVuZGVuY3kuYXBpVmVyc2lvblJhbmdlfS5cbiAgICpcbiAgICogQHBhcmFtIGRlcGVuZGVuY3kgLSBUaGUgZGVjbGFyZWQgZGVwZW5kZW5jeS5cbiAgICogQHJldHVybnMgV2hldGhlciB1cGRhdGluZyB0aGUgZGVwZW5kZW5jeSBpcyB3aGF0IGl0IG5lZWRzLlxuICAgKi9cbiAgcHJpdmF0ZSBpc1Rvb09sZChkZXBlbmRlbmN5OiBQbHVnaW5EZXBlbmRlbmN5KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNCZWxvd01pblBsdWdpblZlcnNpb24oZGVwZW5kZW5jeSlcbiAgICAgIHx8IHRoaXMuYXBpUmVmcy5nZXQoZGVwZW5kZW5jeS5wbHVnaW5JZCk/LnVuYXZhaWxhYmlsaXR5UmVhc29uID09PSBQbHVnaW5BcGlVbmF2YWlsYWJpbGl0eVJlYXNvbi5WZXJzaW9uTWlzbWF0Y2g7XG4gIH1cblxuICAvKipcbiAgICogU2F5cyB3aGF0IGlzIGluIHRoZSB3YXksIGFuZCBwdXRzIHRoZSBzYW1lIGV4cGxhbmF0aW9uIHdoZXJlIHRoZSB1c2VyIHdpbGwgbG9vayBmb3IgdGhlIHBsdWdpbidzXG4gICAqIHNldHRpbmdzLlxuICAgKlxuICAgKiBAcGFyYW0gdW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMgLSBUaGUgZGVwZW5kZW5jaWVzIHRoYXQgYXJlIG5vdCBjdXJyZW50bHkgc2F0aXNmaWVkLlxuICAgKiBAcGFyYW0gYmxvY2tpbmdDb25mbGljdHMgLSBUaGUgY29uZmxpY3RzIGN1cnJlbnRseSByZWZ1c2luZyB0aGUgcGx1Z2luIHRoZSByaWdodCB0byBydW4uXG4gICAqL1xuICBwcml2YXRlIHByZXNlbnRVbnNhdGlzZmllZChcbiAgICB1bnNhdGlzZmllZERlcGVuZGVuY2llczogcmVhZG9ubHkgUGx1Z2luRGVwZW5kZW5jeVtdLFxuICAgIGJsb2NraW5nQ29uZmxpY3RzOiByZWFkb25seSBQbHVnaW5Db25mbGljdFtdXG4gICk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc0xheW91dFJlYWR5IHx8ICh1bnNhdGlzZmllZERlcGVuZGVuY2llcy5sZW5ndGggPT09IDAgJiYgYmxvY2tpbmdDb25mbGljdHMubGVuZ3RoID09PSAwKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2hvd0Jsb2NrZWRTZXR0aW5nVGFiKHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLCBibG9ja2luZ0NvbmZsaWN0cyk7XG5cbiAgICBpZiAodGhpcy5oYXNBbm5vdW5jZWRCbG9ja2VkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5oYXNBbm5vdW5jZWRCbG9ja2VkID0gdHJ1ZTtcbiAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2YgdW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMpIHtcbiAgICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UodGhpcy5jcmVhdGVCbG9ja2VkTWVzc2FnZShkZXBlbmRlbmN5KSk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBjb25mbGljdCBvZiBibG9ja2luZ0NvbmZsaWN0cykge1xuICAgICAgdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQuc2hvd05vdGljZSh0aGlzLmNyZWF0ZUNvbmZsaWN0QmxvY2tlZE1lc3NhZ2UoY29uZmxpY3QpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmUtZXZhbHVhdGVzIHRoZSBnYXRlIGFuZCBtb3ZlcyB0aGUgZmVhdHVyZSBzdXJmYWNlIHRvIG1hdGNoLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHN1cmZhY2UgbWF0Y2hlcyB0aGUgZ2F0ZS5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB1bnNhdGlzZmllZERlcGVuZGVuY2llcyA9IHRoaXMuZ2V0VW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMoKTtcbiAgICBjb25zdCBibG9ja2luZ0NvbmZsaWN0cyA9IHRoaXMuZ2V0QWN0aXZlQ29uZmxpY3RzKFBsdWdpbkNvbmZsaWN0U2V2ZXJpdHkuQmxvY2spO1xuXG4gICAgaWYgKHVuc2F0aXNmaWVkRGVwZW5kZW5jaWVzLmxlbmd0aCA9PT0gMCAmJiBibG9ja2luZ0NvbmZsaWN0cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuY2FuY2VsTG9zc0Fubm91bmNlbWVudCgpO1xuICAgICAgdGhpcy5oaWRlQmxvY2tlZFNldHRpbmdUYWIoKTtcbiAgICAgIHRoaXMuaGFzQW5ub3VuY2VkQmxvY2tlZCA9IGZhbHNlO1xuXG4gICAgICBpZiAoIXRoaXMuaXNGZWF0dXJlU3VyZmFjZUxvYWRlZCkge1xuICAgICAgICB0aGlzLmlzRmVhdHVyZVN1cmZhY2VMb2FkZWQgPSB0cnVlO1xuICAgICAgICBhd2FpdCB0aGlzLmxvYWRGZWF0dXJlU3VyZmFjZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFubm91bmNlV2FybmluZ3MoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0ZlYXR1cmVTdXJmYWNlTG9hZGVkKSB7XG4gICAgICB0aGlzLmlzRmVhdHVyZVN1cmZhY2VMb2FkZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMudW5sb2FkRmVhdHVyZVN1cmZhY2UoKTtcblxuICAgICAgLy8gQSBnYXRlIHRoYXQgY2xvc2VzIHdoaWxlIHRoZSBwbHVnaW4gaXMgUlVOTklORyBpcyB0aGUgY2FzZSB3b3J0aCBiZWluZyBsb3VkIGFib3V0OiB0aGUgdXNlciBqdXN0XG4gICAgICAvLyBkaWQgc29tZXRoaW5nLCBhbmQgdGhlIGNvbnNlcXVlbmNlIGlzIGltbWVkaWF0ZSBhbmQgaW52aXNpYmxlIHdpdGhvdXQgdGhpcy4gQW5ub3VuY2VkIHJlZ2FyZGxlc3NcbiAgICAgIC8vIG9mIGxheW91dCByZWFkaW5lc3MsIGJlY2F1c2UgYSBydW5uaW5nIHBsdWdpbiBtZWFucyB0aGUgbGF5b3V0IGlzIGxvbmcgc2luY2UgcmVhZHkg4oCUIGJ1dCBvbmx5XG4gICAgICAvLyBvbmNlIHRoZSBncmFjZSBwZXJpb2QgaGFzIHNob3duIHRoZSBsb3NzIGlzIG5vdCBhbiB1cGRhdGUgcmVsb2FkaW5nIHRoZSBwcm92aWRlciAoc2VlIHRoZSBmaWxlXG4gICAgICAvLyBoZWFkZXIpLlxuICAgICAgdGhpcy5sb3NzQW5ub3VuY2VtZW50VGltZXJJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy5hbm5vdW5jZUxvc3MoKTtcbiAgICAgIH0sIExPU1NfQU5OT1VOQ0VNRU5UX0dSQUNFX1BFUklPRF9JTl9NSUxMSVNFQ09ORFMpO1xuXG4gICAgICB0aGlzLmhhc0Fubm91bmNlZEJsb2NrZWQgPSB0cnVlO1xuICAgICAgdGhpcy5zaG93QmxvY2tlZFNldHRpbmdUYWIodW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMsIGJsb2NraW5nQ29uZmxpY3RzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByZXNlbnRVbnNhdGlzZmllZCh1bnNhdGlzZmllZERlcGVuZGVuY2llcywgYmxvY2tpbmdDb25mbGljdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIGJsb2NrZWQgZXhwbGFuYXRpb24gaW50byBhIHNldHRpbmdzLXRhYiBjb250YWluZXI6IHdoYXQgaXMgbWlzc2luZyBvciBpbiB0aGUgd2F5LCB3aHkgaXRcbiAgICogbWF0dGVycywgYW5kIHRoZSBidXR0b24gdGhhdCBmaXhlcyBpdC5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lckVsIC0gVGhlIGVsZW1lbnQgdG8gcmVuZGVyIGludG8uXG4gICAqIEBwYXJhbSB1bnNhdGlzZmllZERlcGVuZGVuY2llcyAtIFRoZSBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgbm90IGN1cnJlbnRseSBzYXRpc2ZpZWQuXG4gICAqIEBwYXJhbSBibG9ja2luZ0NvbmZsaWN0cyAtIFRoZSBjb25mbGljdHMgY3VycmVudGx5IHJlZnVzaW5nIHRoZSBwbHVnaW4gdGhlIHJpZ2h0IHRvIHJ1bi5cbiAgICovXG4gIHByaXZhdGUgcmVuZGVyQmxvY2tlZEJhbm5lcihcbiAgICBjb250YWluZXJFbDogSFRNTEVsZW1lbnQsXG4gICAgdW5zYXRpc2ZpZWREZXBlbmRlbmNpZXM6IHJlYWRvbmx5IFBsdWdpbkRlcGVuZGVuY3lbXSxcbiAgICBibG9ja2luZ0NvbmZsaWN0czogcmVhZG9ubHkgUGx1Z2luQ29uZmxpY3RbXVxuICApOiB2b2lkIHtcbiAgICBpZiAodW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMubGVuZ3RoID4gMCkge1xuICAgICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luRGVwZW5kZW5jeS5zZXR0aW5nc0hlYWRpbmcpIH0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiB1bnNhdGlzZmllZERlcGVuZGVuY2llcykge1xuICAgICAgY29uc3QgYmFubmVyRWwgPSBjb250YWluZXJFbC5jcmVhdGVEaXYoe1xuICAgICAgICBjbHM6IFtDc3NDbGFzcy5MaWJyYXJ5TmFtZSwgQ3NzQ2xhc3MuTGVnYWN5TGlicmFyeU5hbWUsIENzc0NsYXNzLlBsdWdpbkRlcGVuZGVuY3lCYW5uZXJdXG4gICAgICB9KTtcbiAgICAgIGJhbm5lckVsLmFwcGVuZCh0aGlzLmNyZWF0ZUJsb2NrZWRNZXNzYWdlKGRlcGVuZGVuY3kpKTtcbiAgICAgIGFwcGVuZFRleHRPckZyYWdtZW50Q2xvbmUoYmFubmVyRWwuY3JlYXRlRGl2KCksIGRlcGVuZGVuY3kucmVhc29uKTtcblxuICAgICAgY29uc3Qgc3RhdGUgPSBnZXRJbnN0YWxsZWRQbHVnaW5TdGF0ZSh7XG4gICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgIHBsdWdpbklkOiBkZXBlbmRlbmN5LnBsdWdpbklkXG4gICAgICB9KTtcblxuICAgICAgLy8gQW4gZW5hYmxlZCBkZXBlbmRlbmN5IHRoYXQgaXMgc3RpbGwgdW5zYXRpc2ZpZWQgaXMgdG9vIG9sZCwgYW5kIGluc3RhbGxpbmcgb3IgZW5hYmxpbmcgaXQgYWdhaW4gZG9lc1xuICAgICAgLy8gbm90aGluZywgc28gaXQgaXMgb2ZmZXJlZCBhbiB1cGRhdGUgaW5zdGVhZC5cbiAgICAgIGlmIChzdGF0ZSAhPT0gSW5zdGFsbGVkUGx1Z2luU3RhdGUuRW5hYmxlZCkge1xuICAgICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGJhbm5lckVsKVxuICAgICAgICAgIC5zZXRCdXR0b25UZXh0KHQoKCQpID0+XG4gICAgICAgICAgICBzdGF0ZSA9PT0gSW5zdGFsbGVkUGx1Z2luU3RhdGUuSW5zdGFsbGVkQnV0RGlzYWJsZWRcbiAgICAgICAgICAgICAgPyAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luU3VnZ2VzdGlvbi5lbmFibGVcbiAgICAgICAgICAgICAgOiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luU3VnZ2VzdGlvbi5pbnN0YWxsXG4gICAgICAgICAgKSlcbiAgICAgICAgICAuc2V0Q3RhKClcbiAgICAgICAgICAub25DbGljayhjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgYXdhaXQgaW5zdGFsbEFuZEVuYWJsZVBsdWdpbih7XG4gICAgICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgICAgIHBsdWdpbklkOiBkZXBlbmRlbmN5LnBsdWdpbklkLFxuICAgICAgICAgICAgICBwbHVnaW5OYW1lOiBkZXBlbmRlbmN5LnBsdWdpbk5hbWUsXG4gICAgICAgICAgICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudDogdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIE9ic2lkaWFuIGFwcGxpZXMgdGhlIHVwZGF0ZSBieSByZWxvYWRpbmcgdGhlIGRlcGVuZGVuY3ksIHdoaWNoIHJlcHVibGlzaGVzIGl0cyBBUEksIHNvIHRoZSB3YXRjaCdzXG4gICAgICAvLyBgY2hhbmdlYCByZW9wZW5zIHRoZSBnYXRlIHdpdGggbm8gZnVydGhlciBzdGVwIGhlcmUuXG4gICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGJhbm5lckVsKVxuICAgICAgICAuc2V0QnV0dG9uVGV4dCh0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luRGVwZW5kZW5jeS51cGRhdGUsIHsgZGVwZW5kZW5jeVBsdWdpbk5hbWU6IGRlcGVuZGVuY3kucGx1Z2luTmFtZSB9KSlcbiAgICAgICAgLnNldEN0YSgpXG4gICAgICAgIC5vbkNsaWNrKGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgdXBkYXRlUGx1Z2luKHtcbiAgICAgICAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICAgICAgICBwbHVnaW5JZDogZGVwZW5kZW5jeS5wbHVnaW5JZCxcbiAgICAgICAgICAgIHBsdWdpbk5hbWU6IGRlcGVuZGVuY3kucGx1Z2luTmFtZSxcbiAgICAgICAgICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudDogdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQsXG4gICAgICAgICAgICByZXF1ZXN0aW5nUGx1Z2luTmFtZTogdGhpcy5wbHVnaW4ubWFuaWZlc3QubmFtZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9KSk7XG5cbiAgICAgIC8vIFRoZSBsaW5rIE9VVCB0byB0aGUgZGVwZW5kZW5jeSdzIG93biBzZXR0aW5ncywgc2hvd24gb25seSBvbmNlIGl0IGlzIGluc3RhbGxlZCBhbmQgZW5hYmxlZCDigJQgdGhlXG4gICAgICAvLyBvdGhlciBoYWxmIG9mIHRoZSByZWxhdGlvbnNoaXAgYmVpbmcgdmlzaWJsZSBmcm9tIGJvdGggZW5kcy4gSXQgaXMgd2hhdCBzdG9wcyBcImNvbmZpZ3VyZSBvbmVcbiAgICAgIC8vIG9wZXJhdGlvbiBhY3Jvc3MgdHdvIHBsdWdpbnNcIiBmcm9tIG1lYW5pbmcgXCJnbyBhbmQgZmluZCB0aGUgb3RoZXIgcGx1Z2luIHlvdXJzZWxmXCIuXG4gICAgICB0aGlzLnJlbmRlck9wZW5TZXR0aW5nc0J1dHRvbihiYW5uZXJFbCwgZGVwZW5kZW5jeS5wbHVnaW5JZCwgZGVwZW5kZW5jeS5wbHVnaW5OYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoYmxvY2tpbmdDb25mbGljdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywgeyB0ZXh0OiB0KCgkKSA9PiAkLm9ic2lkaWFuRGV2VXRpbHMucGx1Z2luQ29uZmxpY3Quc2V0dGluZ3NIZWFkaW5nKSB9KTtcblxuICAgIGZvciAoY29uc3QgY29uZmxpY3Qgb2YgYmxvY2tpbmdDb25mbGljdHMpIHtcbiAgICAgIHRoaXMucmVuZGVyQ29uZmxpY3RFbnRyeShjb250YWluZXJFbCwgY29uZmxpY3QsIHRoaXMuY3JlYXRlQ29uZmxpY3RCbG9ja2VkTWVzc2FnZShjb25mbGljdCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIG9uZSBjb25mbGljdDogd2hhdCBpdCBpcywgd2h5IGl0IG1hdHRlcnMsIGFuZCB0aGUgdHdvIHdheXMgb3V0IG9mIGl0LlxuICAgKlxuICAgKiBUaGUgcmVwYWlyIGlzIG9mZmVyZWQgb24gdGhlIE9USEVSIHBsdWdpbiDigJQgZGlzYWJsaW5nIGl0IGlzIHRoZSBvbmUgdGhpbmcgdGhpcyBwbHVnaW4gY2FuIGRvIGluIGFcbiAgICogY2xpY2ssIHNpbmNlIGl0IGNhbm5vdCB1cGRhdGUgc29tZW9uZSBlbHNlJ3MgcGx1Z2luIOKAlCBhbmQgaXQgaXMgdGhlIHBlcnNpc3RlZCBgZGlzYWJsZVBsdWdpbkFuZFNhdmVgXG4gICAqIHJhdGhlciB0aGFuIHRoZSB0cmFuc2llbnQgZGlzYWJsZSwgYmVjYXVzZSB0aGUgdXNlciBhc2tlZCBmb3IgaXQgYnkgY2xpY2tpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbCAtIFRoZSBlbGVtZW50IHRvIHJlbmRlciBpbnRvLlxuICAgKiBAcGFyYW0gY29uZmxpY3QgLSBUaGUgY29uZmxpY3QgdG8gcmVuZGVyLlxuICAgKiBAcGFyYW0gbWVzc2FnZUZyYWdtZW50IC0gVGhlIHNlbnRlbmNlIGV4cGxhaW5pbmcgdGhlIGNvbmZsaWN0LlxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJDb25mbGljdEVudHJ5KGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgY29uZmxpY3Q6IFBsdWdpbkNvbmZsaWN0LCBtZXNzYWdlRnJhZ21lbnQ6IERvY3VtZW50RnJhZ21lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBiYW5uZXJFbCA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdih7XG4gICAgICBjbHM6IFtDc3NDbGFzcy5MaWJyYXJ5TmFtZSwgQ3NzQ2xhc3MuTGVnYWN5TGlicmFyeU5hbWUsIENzc0NsYXNzLlBsdWdpbkNvbmZsaWN0QmFubmVyXVxuICAgIH0pO1xuICAgIGJhbm5lckVsLmFwcGVuZChtZXNzYWdlRnJhZ21lbnQpO1xuICAgIGFwcGVuZFRleHRPckZyYWdtZW50Q2xvbmUoYmFubmVyRWwuY3JlYXRlRGl2KCksIGNvbmZsaWN0LnJlYXNvbik7XG5cbiAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGJhbm5lckVsKVxuICAgICAgLnNldEJ1dHRvblRleHQodCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBsdWdpbkNvbmZsaWN0LmRpc2FibGUsIHsgY29uZmxpY3RpbmdQbHVnaW5OYW1lOiBjb25mbGljdC5wbHVnaW5OYW1lIH0pKVxuICAgICAgLnNldEN0YSgpXG4gICAgICAub25DbGljayhjb252ZXJ0QXN5bmNUb1N5bmMoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBkaXNhYmxlQ29tbXVuaXR5UGx1Z2luKHtcbiAgICAgICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgICAgIHBsdWdpbklkOiBjb25mbGljdC5wbHVnaW5JZFxuICAgICAgICB9KTtcbiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7XG4gICAgICB9KSk7XG5cbiAgICB0aGlzLnJlbmRlck9wZW5TZXR0aW5nc0J1dHRvbihiYW5uZXJFbCwgY29uZmxpY3QucGx1Z2luSWQsIGNvbmZsaWN0LnBsdWdpbk5hbWUpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJPcGVuU2V0dGluZ3NCdXR0b24oYmFubmVyRWw6IEhUTUxFbGVtZW50LCBwbHVnaW5JZDogc3RyaW5nLCBwbHVnaW5OYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGJhbm5lckVsKVxuICAgICAgLnNldEJ1dHRvblRleHQodCgoJCkgPT4gJC5vYnNpZGlhbkRldlV0aWxzLnBsdWdpbkRlcGVuZGVuY3kub3BlbkRlcGVuZGVuY3lTZXR0aW5ncywge1xuICAgICAgICBkZXBlbmRlbmN5UGx1Z2luTmFtZTogcGx1Z2luTmFtZVxuICAgICAgfSkpXG4gICAgICAub25DbGljaygoKSA9PiB7XG4gICAgICAgIHRoaXMuYXBwLnNldHRpbmcub3BlbigpO1xuICAgICAgICB0aGlzLmFwcC5zZXR0aW5nLm9wZW5UYWJCeUlkKHBsdWdpbklkKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93QmxvY2tlZFNldHRpbmdUYWIoXG4gICAgdW5zYXRpc2ZpZWREZXBlbmRlbmNpZXM6IHJlYWRvbmx5IFBsdWdpbkRlcGVuZGVuY3lbXSxcbiAgICBibG9ja2luZ0NvbmZsaWN0czogcmVhZG9ubHkgUGx1Z2luQ29uZmxpY3RbXVxuICApOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ibG9ja2VkU2V0dGluZ1RhYikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIEFkZGVkIHRocm91Z2ggYGFwcC5zZXR0aW5nYCByYXRoZXIgdGhhbiBgcGx1Z2luLmFkZFNldHRpbmdUYWJgLCBiZWNhdXNlIHRoaXMgdGFiIGhhcyB0byBjb21lIGJhY2tcbiAgICAvLyBPRkYgYWdhaW4gdGhlIG1vbWVudCB0aGUgZ2F0ZSBvcGVucyDigJQgb3RoZXJ3aXNlIHRoZSBwbHVnaW4ncyBvd24gc2V0dGluZ3MgdGFiLCByZWdpc3RlcmVkIGJ5XG4gICAgLy8gYG9ubG9hZEltcGxgLCB3b3VsZCBhcHBlYXIgYmVzaWRlIGEgc3RhbGUgXCJyZXF1aXJlZCBwbHVnaW4gbWlzc2luZ1wiIG9uZS4gYHBsdWdpbi5hZGRTZXR0aW5nVGFiYFxuICAgIC8vIG9ubHkgZXZlciByZW1vdmVzIGF0IHBsdWdpbiB1bmxvYWQuXG4gICAgY29uc3QgYmxvY2tlZFNldHRpbmdUYWIgPSBuZXcgQmxvY2tlZFBsdWdpblNldHRpbmdUYWIoe1xuICAgICAgcGx1Z2luOiB0aGlzLnBsdWdpbixcbiAgICAgIHJlbmRlckJhbm5lcjogKGNvbnRhaW5lckVsKTogdm9pZCA9PiB7XG4gICAgICAgIHRoaXMucmVuZGVyQmxvY2tlZEJhbm5lcihjb250YWluZXJFbCwgdW5zYXRpc2ZpZWREZXBlbmRlbmNpZXMsIGJsb2NraW5nQ29uZmxpY3RzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLmFwcC5zZXR0aW5nLmFkZFNldHRpbmdUYWIoYmxvY2tlZFNldHRpbmdUYWIpO1xuICAgIHRoaXMuYmxvY2tlZFNldHRpbmdUYWIgPSBibG9ja2VkU2V0dGluZ1RhYjtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTBGQSxTQUFTLDBCQUEwQjtBQUNuQztBQUFBLEVBQ0UsV0FBVztBQUFBLEVBQ1gsYUFBYTtBQUFBLE9BQ1I7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQVNQLFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsZ0JBQWdCO0FBQ3pCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsU0FBUztBQUNsQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEs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
|
|
@@ -74,7 +74,7 @@ export interface PluginSuggestionComponentConstructorParams {
|
|
|
74
74
|
* {@link PluginSettingsComponentBase.whenLoadedFromFile} for why the read cannot simply happen at
|
|
75
75
|
* layout-ready.
|
|
76
76
|
*/
|
|
77
|
-
readonly pluginSettingsComponent: PluginSettingsComponentBase<object>;
|
|
77
|
+
readonly pluginSettingsComponent: Pick<PluginSettingsComponentBase<object>, 'whenLoadedFromFile'>;
|
|
78
78
|
/**
|
|
79
79
|
* The localized sentence explaining what the host plugin cannot do without the suggested plugin. The
|
|
80
80
|
* host plugin owns this string: only it knows which of its features are affected.
|
|
@@ -139,7 +139,7 @@ class PluginSuggestionComponent extends ComponentEx {
|
|
|
139
139
|
return;
|
|
140
140
|
}
|
|
141
141
|
const bannerEl = containerEl.createDiv({
|
|
142
|
-
cls: [CssClass.LibraryName, CssClass.PluginSuggestionBanner]
|
|
142
|
+
cls: [CssClass.LibraryName, CssClass.LegacyLibraryName, CssClass.PluginSuggestionBanner]
|
|
143
143
|
});
|
|
144
144
|
appendTextOrFragmentClone(bannerEl.createDiv(), this.reason);
|
|
145
145
|
new ButtonComponent(bannerEl).setButtonText(this.getActionButtonText(state)).setCta().onClick(convertAsyncToSync(async () => {
|
|
@@ -173,4 +173,4 @@ export {
|
|
|
173
173
|
PluginSuggestionComponent,
|
|
174
174
|
SuggestedPluginState
|
|
175
175
|
};
|
|
176
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BsdWdpbi1zdWdnZXN0aW9uLWNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29tcG9uZW50IHRoYXQgc3VnZ2VzdHMgaW5zdGFsbGluZyBhbm90aGVyIGNvbW11bml0eSBwbHVnaW4gdGhlIGhvc3QgcGx1Z2luIG5lZWRzIGluIG9yZGVyIHRvIG9mZmVyXG4gKiBzb21lIG9mIGl0cyBiZWhhdmlvci5cbiAqXG4gKiBBIHN1Z2dlc3Rpb24gaXMgbm90IGEgZGVwZW5kZW5jeSDigJQgYnV0IGEgZGVwZW5kZW5jeSBpcyBub3cgYSB0aGluZyB0aGlzIGxpYnJhcnkgSEFTLCBzbyB0aGUgY2hvaWNlXG4gKiBiZXR3ZWVuIHRoZW0gaXMgYSByZWFsIG9uZS4gVXNlIGEgc3VnZ2VzdGlvbiB3aGVuIHRoZSBvdGhlciBwbHVnaW4gQUREUyBzb21ldGhpbmc6IHRoZSBob3N0IGtlZXBzXG4gKiB3b3JraW5nIHdpdGhvdXQgaXQsIHNpbXBseSB1bmFibGUgdG8gb2ZmZXIgd2hhdGV2ZXIgdGhhdCBwbHVnaW4gb3ducywgYW5kIHRoaXMgY29tcG9uZW50IGFza3Mgb25jZVxuICogd2hldGhlciB0aGUgdXNlciB3b3VsZCBsaWtlIGl0IGluc3RhbGxlZC4gVXNlIGBQbHVnaW5HYXRlQ29tcG9uZW50YCB3aGVuIHRoZSBob3N0J3MgYWR2ZXJ0aXNlZFxuICogYmVoYXZpb3IgaXMgbm90IHRoZXJlIGF0IGFsbCB3aXRob3V0IHRoZSBvdGhlciBwbHVnaW4uXG4gKlxuICogVGhpcyBmaWxlIHVzZWQgdG8gYXJndWUgdGhlIHN0cm9uZ2VyIHBvc2l0aW9uIOKAlCB0aGF0IHJlcXVpcmluZyBhbm90aGVyIHBsdWdpbiBzaG91bGQgbm90IGV4aXN0LCBiZWNhdXNlXG4gKiBcImludmVudGluZyBvbmUgYnkgcmVmdXNpbmcgdG8gbG9hZCB3b3VsZCBwdW5pc2ggdGhlIHVzZXIgZm9yIHNvbWV0aGluZyB0aGV5IG5ldmVyIGFncmVlZCB0b1wiLiBUaGF0IHdhc1xuICogd3JvbmcgYWJvdXQgd2hpY2ggb3B0aW9uIHB1bmlzaGVzIHRoZSB1c2VyLCBhbmQgdGhlIGNvdW50ZXItY2FzZSBpcyB3b3J0aCBrZWVwaW5nIHJhdGhlciB0aGFuIHF1aWV0bHlcbiAqIGRlbGV0aW5nLiBBIGxvYWQtYmVhcmluZyBwbHVnaW4gdGhlIHVzZXIgY2Fubm90IGlkZW50aWZ5IGlzIG5vdCBhIG5ldXRyYWwgb3V0Y29tZTogbW9udGhzIGxhdGVyIHRoZXlcbiAqIG1lZXQgaXQgaW4gdGhlaXIgcGx1Z2luIGxpc3QsIG5vdGhpbmcgaW4gT2JzaWRpYW4ncyBtYW5pZmVzdCBmb3JtYXQgc2F5cyBhbnl0aGluZyBkZXBlbmRzIG9uIGl0LCB0aGV5XG4gKiByZW1vdmUgaXQsIGFuZCB0aGUgZGFtYWdlIHN1cmZhY2VzIHdlZWtzIGFmdGVyIHRoYXQgd2l0aCBubyB3YXkgdG8gY29ubmVjdCB0aGUgdHdvLiBCZXNpZGUgdGhhdCwgYVxuICogbWFuZGF0b3J5IGRlcGVuZGVuY3kgdGhhdCBzdGF5cyBlbmFibGVkLWJ1dC1pbmVydCwgbmFtZXMgd2hhdCBpdCBpcyB3YWl0aW5nIGZvciwgaW5zdGFsbHMgaXQgaW4gb25lXG4gKiBjbGljayBhbmQgcmVzdW1lcyB3aXRob3V0IGEgcmVzdGFydCBpcyBub3QgYSBwdW5pc2htZW50IOKAlCBpdCBpcyB0aGUgc2FtZSBpbmZvcm1hdGlvbiwgZGVsaXZlcmVkIHdoaWxlXG4gKiB0aGUgdXNlciBjYW4gc3RpbGwgYWN0IG9uIGl0LlxuICpcbiAqIFRoZSBhc2sgaXMgc3VyZmFjZWQgdHdpY2UsIGRlbGliZXJhdGVseSwgYmVjYXVzZSB0aGUgdHdvIHBsYWNlbWVudHMgYW5zd2VyIGRpZmZlcmVudCBxdWVzdGlvbnM6XG4gKiBhIG5vdGljZSBvbiBsb2FkIChcInlvdSBhcmUgbWlzc2luZyBzb21ldGhpbmcgeW91IHByb2JhYmx5IHdhbnRcIikgYW5kIGEgc2V0dGluZ3MtdGFiIGJhbm5lciAoXCJ0aGVcbiAqIHNldHRpbmdzIHlvdSBjYW1lIGxvb2tpbmcgZm9yIGxpdmUgaW4gYW5vdGhlciBwbHVnaW5cIikuIERlY2xpbmluZyBzaWxlbmNlcyBvbmx5IHRoZSBub3RpY2Ug4oCUIGEgdXNlclxuICogd2hvIG9wZW5zIHRoZSBzZXR0aW5ncyB0YWIgaXMgYXNraW5nIGFib3V0IHRoZSBmZWF0dXJlIHJpZ2h0IHRoZW4sIHNvIHRoZSBiYW5uZXIgc3RheXMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBjb252ZXJ0QXN5bmNUb1N5bmMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk5vdGljZUNvbXBvbmVudCB9IGZyb20gJy4vcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMnO1xuXG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyBhcHBlbmRUZXh0T3JGcmFnbWVudENsb25lIH0gZnJvbSAnLi4vaHRtbC1lbGVtZW50LnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHtcbiAgZ2V0SW5zdGFsbGVkUGx1Z2luU3RhdGUsXG4gIGluc3RhbGxBbmRFbmFibGVQbHVnaW4sXG4gIEluc3RhbGxlZFBsdWdpblN0YXRlXG59IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4taW5zdGFsbC1zdGF0ZS50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IENhbGxiYWNrTGF5b3V0UmVhZHlDb21wb25lbnQgfSBmcm9tICcuL2xheW91dC1yZWFkeS1jb21wb25lbnQudHMnO1xuXG4vKipcbiAqIEhvdyB0aGUgc3VnZ2VzdGVkIHBsdWdpbiBpcyBjdXJyZW50bHkgcHJlc2VudCBpbiB0aGUgdmF1bHQuXG4gKlxuICogVGhlIHNhbWUgdGhyZWUgc3RhdGVzIGEgbWFuZGF0b3J5IGRlcGVuZGVuY3kgaXMgaW4sIHNvIHRoaXMgaXMge0BsaW5rIEluc3RhbGxlZFBsdWdpblN0YXRlfSB1bmRlciB0aGVcbiAqIG5hbWUgdGhpcyBjb21wb25lbnQgaGFzIGFsd2F5cyB1c2VkIOKAlCBvbmUgZW51bSwgc28gYSBjYWxsZXIgaG9sZGluZyBhIHN0YXRlIGZyb20gZWl0aGVyIGNvbXBvbmVudCBjYW5cbiAqIGNvbXBhcmUgaXQgYWdhaW5zdCBlaXRoZXIgbmFtZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFN1Z2dlc3RlZFBsdWdpblN0YXRlID0gSW5zdGFsbGVkUGx1Z2luU3RhdGU7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGRlY2xpbmVkIHRoaXMgc3VnZ2VzdGlvbi5cbiAgICpcbiAgICogU3RvcmFnZSBiZWxvbmdzIHRvIHRoZSBob3N0IHBsdWdpbiAodHlwaWNhbGx5IG9uZSBvZiBpdHMgc2V0dGluZ3MpLCBiZWNhdXNlIHRoaXMgY29tcG9uZW50IGhhcyBub1xuICAgKiBgZGF0YS5qc29uYCBvZiBpdHMgb3duIGFuZCBhIGRlY2xpbmUgaGFzIHRvIG91dGxpdmUgYSByZWxvYWQuXG4gICAqXG4gICAqIE9ubHkgZXZlciBjYWxsZWQgb25jZSB7QGxpbmsgcGx1Z2luU2V0dGluZ3NDb21wb25lbnR9IHJlcG9ydHMgaXRzIHNldHRpbmdzIGxvYWRlZCwgc28gYW4gaW1wbGVtZW50YXRpb25cbiAgICogcmVhZGluZyBhIHNldHRpbmcgaXMgZ3VhcmFudGVlZCB0byByZWFkIHRoZSBzdG9yZWQgdmFsdWUgcmF0aGVyIHRoYW4gaXRzIGRlZmF1bHQuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBzdWdnZXN0aW9uIGhhcyBiZWVuIGRlY2xpbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNTdWdnZXN0aW9uRGVjbGluZWQ6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBub3RpY2UgY29tcG9uZW50IG9mIHRoZSBwbHVnaW4gbWFraW5nIHRoZSBzdWdnZXN0aW9uLCB1c2VkIHRvIHNob3cgdGhlIHN1Z2dlc3Rpb24gYW5kIGl0c1xuICAgKiBvdXRjb21lLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBjb21wb25lbnQgaG9sZGluZyB3aGF0ZXZlciB7QGxpbmsgaXNTdWdnZXN0aW9uRGVjbGluZWR9IHJlYWRzLlxuICAgKlxuICAgKiBUYWtlbiBhcyBhIHdob2xlIGNvbXBvbmVudCByYXRoZXIgdGhhbiBhcyBhIGJhcmUgXCJyZWFkeVwiIGZsYWcgc28gdGhlIGhvc3QgY2Fubm90IGZvcmdldCB0byB3aXJlIHRoZVxuICAgKiB3YWl0OiB0aGUgbm90aWNlIGlzIGRlY2lkZWQgb25seSBhZnRlciB0aGlzIGNvbXBvbmVudCBoYXMgcmVhZCBgZGF0YS5qc29uYC4gU2VlXG4gICAqIHtAbGluayBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2Uud2hlbkxvYWRlZEZyb21GaWxlfSBmb3Igd2h5IHRoZSByZWFkIGNhbm5vdCBzaW1wbHkgaGFwcGVuIGF0XG4gICAqIGxheW91dC1yZWFkeS5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8b2JqZWN0PjtcblxuICAvKipcbiAgICogVGhlIGxvY2FsaXplZCBzZW50ZW5jZSBleHBsYWluaW5nIHdoYXQgdGhlIGhvc3QgcGx1Z2luIGNhbm5vdCBkbyB3aXRob3V0IHRoZSBzdWdnZXN0ZWQgcGx1Z2luLiBUaGVcbiAgICogaG9zdCBwbHVnaW4gb3ducyB0aGlzIHN0cmluZzogb25seSBpdCBrbm93cyB3aGljaCBvZiBpdHMgZmVhdHVyZXMgYXJlIGFmZmVjdGVkLlxuICAgKlxuICAgKiBQYXNzIGEge0BsaW5rIERvY3VtZW50RnJhZ21lbnR9IHRvIG1hcmsgdXAgcGFydCBvZiB0aGUgc2VudGVuY2UsIHN1Y2ggYXMgYSBwbHVnaW4gbmFtZSByZW5kZXJlZCBhc1xuICAgKiBjb2RlLiBFYWNoIHJlbmRlciBhcHBlbmRzIGEgZnJlc2ggY2xvbmUgb2YgaXQsIGJlY2F1c2UgdGhlIG5vdGljZSBhbmQgdGhlIGJhbm5lciBlYWNoIG5lZWQgdGhlaXIgb3duXG4gICAqIGNvcHkgYW5kIGFwcGVuZGluZyBhIGZyYWdtZW50IGVtcHRpZXMgaXQuXG4gICAqL1xuICByZWFkb25seSByZWFzb246IERvY3VtZW50RnJhZ21lbnQgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlY29yZHMgdGhlIHVzZXIncyBhbnN3ZXIgdG8gdGhlIHN1Z2dlc3Rpb24uXG4gICAqXG4gICAqIEBwYXJhbSBpc0RlY2xpbmVkIC0gYHRydWVgIHdoZW4gdGhlIHVzZXIgZGVjbGluZWQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgYW5zd2VyIGlzIHBlcnNpc3RlZC5cbiAgICovXG4gIHJlYWRvbmx5IHNldFN1Z2dlc3Rpb25EZWNsaW5lZDogKGlzRGVjbGluZWQ6IGJvb2xlYW4pID0+IFByb21pc2FibGU8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgc3VnZ2VzdGVkIHBsdWdpbiwgYXMgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeS5cbiAgICovXG4gIHJlYWRvbmx5IHN1Z2dlc3RlZFBsdWdpbklkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkaXNwbGF5IG5hbWUgb2YgdGhlIHN1Z2dlc3RlZCBwbHVnaW4sIHNob3duIHRvIHRoZSB1c2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgc3VnZ2VzdGVkUGx1Z2luTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhvdyB0aGUgc3VnZ2VzdGVkIHBsdWdpbiBpcyBjdXJyZW50bHkgcHJlc2VudCBpbiB0aGUgdmF1bHQuXG4gKi9cbmV4cG9ydCB0eXBlIFN1Z2dlc3RlZFBsdWdpblN0YXRlID0gSW5zdGFsbGVkUGx1Z2luU3RhdGU7XG5cbi8qKlxuICogU3VnZ2VzdHMgaW5zdGFsbGluZyBhbm90aGVyIGNvbW11bml0eSBwbHVnaW4sIHZpYSBhIGxvYWQtdGltZSBub3RpY2UgYW5kIGEgc2V0dGluZ3MtdGFiIGJhbm5lci5cbiAqL1xuZXhwb3J0IGNsYXNzIFBsdWdpblN1Z2dlc3Rpb25Db21wb25lbnQgZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNTdWdnZXN0aW9uRGVjbGluZWQ6ICgpID0+IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luU2V0dGluZ3NDb21wb25lbnQ6IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlYXNvbjogRG9jdW1lbnRGcmFnbWVudCB8IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBzZXRTdWdnZXN0aW9uRGVjbGluZWQ6IChpc0RlY2xpbmVkOiBib29sZWFuKSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IHN1Z2dlc3RlZFBsdWdpbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3VnZ2VzdGVkUGx1Z2luTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHtAbGluayBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50fS5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBjb25zdHJ1Y3RvciBwYXJhbWV0ZXJzLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHBhcmFtczogUGx1Z2luU3VnZ2VzdGlvbkNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmFwcCA9IHBhcmFtcy5hcHA7XG4gICAgdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQgPSBwYXJhbXMucGx1Z2luTm90aWNlQ29tcG9uZW50O1xuICAgIHRoaXMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQgPSBwYXJhbXMucGx1Z2luU2V0dGluZ3NDb21wb25lbnQ7XG4gICAgdGhpcy5yZWFzb24gPSBwYXJhbXMucmVhc29uO1xuICAgIHRoaXMuc3VnZ2VzdGVkUGx1Z2luSWQgPSBwYXJhbXMuc3VnZ2VzdGVkUGx1Z2luSWQ7XG4gICAgdGhpcy5zdWdnZXN0ZWRQbHVnaW5OYW1lID0gcGFyYW1zLnN1Z2dlc3RlZFBsdWdpbk5hbWU7XG4gICAgdGhpcy5pc1N1Z2dlc3Rpb25EZWNsaW5lZCA9IHBhcmFtcy5pc1N1Z2dlc3Rpb25EZWNsaW5lZDtcbiAgICB0aGlzLnNldFN1Z2dlc3Rpb25EZWNsaW5lZCA9IHBhcmFtcy5zZXRTdWdnZXN0aW9uRGVjbGluZWQ7XG4gIH1cblxuICAvKipcbiAgICogUmVzb2x2ZXMgaG93IHRoZSBzdWdnZXN0ZWQgcGx1Z2luIGlzIGN1cnJlbnRseSBwcmVzZW50IGluIHRoZSB2YXVsdC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHtAbGluayBTdWdnZXN0ZWRQbHVnaW5TdGF0ZX0uXG4gICAqL1xuICBwdWJsaWMgZ2V0U3VnZ2VzdGVkUGx1Z2luU3RhdGUoKTogU3VnZ2VzdGVkUGx1Z2luU3RhdGUge1xuICAgIHJldHVybiBnZXRJbnN0YWxsZWRQbHVnaW5TdGF0ZSh7XG4gICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgcGx1Z2luSWQ6IHRoaXMuc3VnZ2VzdGVkUGx1Z2luSWRcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnN0YWxscyAod2hlbiBuZWVkZWQpIGFuZCBlbmFibGVzIHRoZSBzdWdnZXN0ZWQgcGx1Z2luLCByZXBvcnRpbmcgdGhlIG91dGNvbWUgYXMgYSBub3RpY2UuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcGx1Z2luIGlzIGVuYWJsZWQsIG9yIG9uY2UgdGhlIGZhaWx1cmUgaGFzIGJlZW5cbiAgICogcmVwb3J0ZWQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgaW5zdGFsbEFuZEVuYWJsZVN1Z2dlc3RlZFBsdWdpbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5nZXRTdWdnZXN0ZWRQbHVnaW5TdGF0ZSgpID09PSBTdWdnZXN0ZWRQbHVnaW5TdGF0ZS5FbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgaW5zdGFsbEFuZEVuYWJsZVBsdWdpbih7XG4gICAgICBhcHA6IHRoaXMuYXBwLFxuICAgICAgcGx1Z2luSWQ6IHRoaXMuc3VnZ2VzdGVkUGx1Z2luSWQsXG4gICAgICBwbHVnaW5OYW1lOiB0aGlzLnN1Z2dlc3RlZFBsdWdpbk5hbWUsXG4gICAgICBwbHVnaW5Ob3RpY2VDb21wb25lbnQ6IHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50XG4gICAgfSk7XG5cbiAgICAvLyBPbmx5IGFmdGVyIHRoZSBpbnN0YWxsIGFjdHVhbGx5IHN1Y2NlZWRlZCDigJQgYGluc3RhbGxBbmRFbmFibGVQbHVnaW5gIHJldGhyb3dzIG9uIGZhaWx1cmUsIHNvIGFcbiAgICAvLyBmYWlsZWQgYXR0ZW1wdCBsZWF2ZXMgYSBwcmV2aW91cyBkZWNsaW5lIHN0YW5kaW5nIHJhdGhlciB0aGFuIHNpbGVudGx5IGNsZWFyaW5nIGl0LlxuICAgIGF3YWl0IHRoaXMuc2V0U3VnZ2VzdGlvbkRlY2xpbmVkKGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2FkcyB0aGUgY29tcG9uZW50LCBzaG93aW5nIHRoZSBzdWdnZXN0aW9uIG5vdGljZSBvbmNlIHRoZSBsYXlvdXQgaXMgcmVhZHkgQU5EIHRoZSBob3N0J3Mgc2V0dGluZ3NcbiAgICogaGF2ZSBiZWVuIHJlYWQgZnJvbSBkaXNrLlxuICAgKlxuICAgKiBCb3RoIHdhaXRzIG1hdHRlciwgYW5kIG5laXRoZXIgaW1wbGllcyB0aGUgb3RoZXI6XG4gICAqXG4gICAqIC0gTGF5b3V0LXJlYWR5LCBiZWNhdXNlIHBsdWdpbnMgbG9hZCBpbiBhbiB1bnNwZWNpZmllZCBvcmRlciwgc28gdGhlIHN1Z2dlc3RlZCBwbHVnaW4gbWF5IHdlbGwgYmVcbiAgICogICBlbmFibGVkIGEgbW9tZW50IGFmdGVyIHRoaXMgb25lLiBDaGVja2luZyBlYXJsaWVyIHdvdWxkIHN1Z2dlc3QgaW5zdGFsbGluZyBzb21ldGhpbmcgdGhlIHVzZXJcbiAgICogICBhbHJlYWR5IGhhcy5cbiAgICogLSBTZXR0aW5ncy1sb2FkZWQsIGJlY2F1c2Uge0BsaW5rIFBsdWdpblN1Z2dlc3Rpb25Db21wb25lbnRDb25zdHJ1Y3RvclBhcmFtcy5pc1N1Z2dlc3Rpb25EZWNsaW5lZH1cbiAgICogICByZWFkcyBhIHNldHRpbmcgb2YgdGhlIGhvc3QsIGFuZCB0aGUgaG9zdCdzIHNldHRpbmdzIGNvbXBvbmVudCBpcyBhIFNJQkxJTkcgd2hvc2Ugb3duIGFzeW5jIGxvYWQgaXNcbiAgICogICBzdGlsbCBpbiBmbGlnaHQgaGVyZS4gT24gYSBsYXlvdXQgdGhhdCBpcyBhbHJlYWR5IHJlYWR5IOKAlCBhIHJ1bnRpbWUgZW5hYmxlIGZyb20gdGhlIENvbW11bml0eVxuICAgKiAgIFBsdWdpbnMgdGFiLCBvciBhIHJlLWVuYWJsZSBhZnRlciBhbiB1cGRhdGUg4oCUIHRoZSBsYXlvdXQtcmVhZHkgY2FsbGJhY2sgZmlyZXMgaW1tZWRpYXRlbHksIHNvIHRoZVxuICAgKiAgIHJlYWQgd291bGQgc2VlIHRoZSBkZWZhdWx0IGBmYWxzZWAgYW5kIGFzayBhZ2FpbiBhIHVzZXIgd2hvIGhhcyBhbHJlYWR5IGRlY2xpbmVkLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIG9ubG9hZCgpOiB2b2lkIHtcbiAgICB0aGlzLmFkZENoaWxkKFxuICAgICAgbmV3IENhbGxiYWNrTGF5b3V0UmVhZHlDb21wb25lbnQodGhpcy5hcHAsIGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudC53aGVuTG9hZGVkRnJvbUZpbGUoKTtcbiAgICAgICAgaWYgKHRoaXMuaXNVbmxvYWRlZCgpKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbk5vdGljZSgpO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIHN1Z2dlc3Rpb24gYmFubmVyIGludG8gYSBzZXR0aW5ncy10YWIgY29udGFpbmVyLCB3aXRoIGEgYnV0dG9uIHRoYXQgaW5zdGFsbHMgYW5kIGVuYWJsZXNcbiAgICogdGhlIHN1Z2dlc3RlZCBwbHVnaW4uXG4gICAqXG4gICAqIFJlbmRlcnMgbm90aGluZyB3aGVuIHRoZSBzdWdnZXN0ZWQgcGx1Z2luIGlzIGFscmVhZHkgZW5hYmxlZC4gVW5saWtlIHRoZSBub3RpY2UsIHRoZSBiYW5uZXIgaWdub3JlcyBhXG4gICAqIHByZXZpb3VzIGRlY2xpbmUg4oCUIHRoZSB1c2VyIGlzIGxvb2tpbmcgYXQgdGhlc2Ugc2V0dGluZ3MgcmlnaHQgbm93LCB3aGljaCBpcyBhIGZyZXNoZXIgc2lnbmFsIHRoYW4gYW5cbiAgICogYW5zd2VyIHRoZXkgZ2F2ZSBlYXJsaWVyLlxuICAgKlxuICAgKiBAcGFyYW0gY29udGFpbmVyRWwgLSBUaGUgZWxlbWVudCB0byByZW5kZXIgdGhlIGJhbm5lciBpbnRvLlxuICAgKi9cbiAgcHVibGljIHJlbmRlckJhbm5lcihjb250YWluZXJFbDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3VnZ2VzdGVkUGx1Z2luU3RhdGUoKTtcbiAgICBpZiAoc3RhdGUgPT09IFN1Z2dlc3RlZFBsdWdpblN0YXRlLkVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBiYW5uZXJFbCA9IGNvbnRhaW5lckVsLmNyZWF0ZURpdih7XG4gICAgICBjbHM6IFtDc3NDbGFzcy5MaWJyYXJ5TmFtZSwgQ3NzQ2xhc3MuUGx1Z2luU3VnZ2VzdGlvbkJhbm5lcl1cbiAgICB9KTtcbiAgICBhcHBlbmRUZXh0T3JGcmFnbWVudENsb25lKGJhbm5lckVsLmNyZWF0ZURpdigpLCB0aGlzLnJlYXNvbik7XG5cbiAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGJhbm5lckVsKVxuICAgICAgLnNldEJ1dHRvblRleHQodGhpcy5nZXRBY3Rpb25CdXR0b25UZXh0KHN0YXRlKSlcbiAgICAgIC5zZXRDdGEoKVxuICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbnN0YWxsQW5kRW5hYmxlU3VnZ2VzdGVkUGx1Z2luKCk7XG4gICAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGlvbkJ1dHRvblRleHQoc3RhdGU6IFN1Z2dlc3RlZFBsdWdpblN0YXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdCgoJCkgPT5cbiAgICAgIHN0YXRlID09PSBTdWdnZXN0ZWRQbHVnaW5TdGF0ZS5JbnN0YWxsZWRCdXREaXNhYmxlZFxuICAgICAgICA/ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5TdWdnZXN0aW9uLmVuYWJsZVxuICAgICAgICA6ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5TdWdnZXN0aW9uLmluc3RhbGxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93U3VnZ2VzdGlvbk5vdGljZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3VnZ2VzdGVkUGx1Z2luU3RhdGUoKTtcbiAgICBpZiAoc3RhdGUgPT09IFN1Z2dlc3RlZFBsdWdpblN0YXRlLkVuYWJsZWQgfHwgdGhpcy5pc1N1Z2dlc3Rpb25EZWNsaW5lZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudCgoZnJhZ21lbnRFbCkgPT4ge1xuICAgICAgYXBwZW5kVGV4dE9yRnJhZ21lbnRDbG9uZShmcmFnbWVudEVsLmNyZWF0ZURpdigpLCB0aGlzLnJlYXNvbik7XG4gICAgICBjb25zdCBidXR0b25zRWwgPSBmcmFnbWVudEVsLmNyZWF0ZURpdigpO1xuXG4gICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGJ1dHRvbnNFbClcbiAgICAgICAgLnNldEJ1dHRvblRleHQodGhpcy5nZXRBY3Rpb25CdXR0b25UZXh0KHN0YXRlKSlcbiAgICAgICAgLnNldEN0YSgpXG4gICAgICAgIC5vbkNsaWNrKGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5pbnN0YWxsQW5kRW5hYmxlU3VnZ2VzdGVkUGx1Z2luKCk7XG4gICAgICAgIH0pKTtcblxuICAgICAgbmV3IEJ1dHRvbkNvbXBvbmVudChidXR0b25zRWwpXG4gICAgICAgIC5zZXRCdXR0b25UZXh0KHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5TdWdnZXN0aW9uLm5vdE5vdykpXG4gICAgICAgIC5vbkNsaWNrKGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zZXRTdWdnZXN0aW9uRGVjbGluZWQodHJ1ZSk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcblxuICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UoZnJhZ21lbnQsIHsgc2hvdWxkSGlkZU9uQ2xpY2s6IGZhbHNlIH0pO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0JBLFNBQVMsMEJBQTBCO0FBQ25DLFNBQVMsdUJBQXVCO0FBS2hDLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsaUNBQWlDO0FBQzFDLFNBQVMsU0FBUztBQUNsQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLG9DQUFvQztBQVN0QyxNQUFNLHVCQUF1QjtBQTZFN0IsTUFBTSxrQ0FBa0MsWUFBWTtBQUFBLEVBQ3hDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9WLFlBQVksUUFBb0Q7QUFDckUsVUFBTTtBQUNOLFNBQUssTUFBTSxPQUFPO0FBQ2xCLFNBQUssd0JBQXdCLE9BQU87QUFDcEMsU0FBSywwQkFBMEIsT0FBTztBQUN0QyxTQUFLLFNBQVMsT0FBTztBQUNyQixTQUFLLG9CQUFvQixPQUFPO0FBQ2hDLFNBQUssc0JBQXNCLE9BQU87QUFDbEMsU0FBSyx1QkFBdUIsT0FBTztBQUNuQyxTQUFLLHdCQUF3QixPQUFPO0FBQUEsRUFDdEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPTywwQkFBZ0Q7QUFDckQsV0FBTyx3QkFB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
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3BsdWdpbi1zdWdnZXN0aW9uLWNvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogQ29tcG9uZW50IHRoYXQgc3VnZ2VzdHMgaW5zdGFsbGluZyBhbm90aGVyIGNvbW11bml0eSBwbHVnaW4gdGhlIGhvc3QgcGx1Z2luIG5lZWRzIGluIG9yZGVyIHRvIG9mZmVyXG4gKiBzb21lIG9mIGl0cyBiZWhhdmlvci5cbiAqXG4gKiBBIHN1Z2dlc3Rpb24gaXMgbm90IGEgZGVwZW5kZW5jeSDigJQgYnV0IGEgZGVwZW5kZW5jeSBpcyBub3cgYSB0aGluZyB0aGlzIGxpYnJhcnkgSEFTLCBzbyB0aGUgY2hvaWNlXG4gKiBiZXR3ZWVuIHRoZW0gaXMgYSByZWFsIG9uZS4gVXNlIGEgc3VnZ2VzdGlvbiB3aGVuIHRoZSBvdGhlciBwbHVnaW4gQUREUyBzb21ldGhpbmc6IHRoZSBob3N0IGtlZXBzXG4gKiB3b3JraW5nIHdpdGhvdXQgaXQsIHNpbXBseSB1bmFibGUgdG8gb2ZmZXIgd2hhdGV2ZXIgdGhhdCBwbHVnaW4gb3ducywgYW5kIHRoaXMgY29tcG9uZW50IGFza3Mgb25jZVxuICogd2hldGhlciB0aGUgdXNlciB3b3VsZCBsaWtlIGl0IGluc3RhbGxlZC4gVXNlIGBQbHVnaW5HYXRlQ29tcG9uZW50YCB3aGVuIHRoZSBob3N0J3MgYWR2ZXJ0aXNlZFxuICogYmVoYXZpb3IgaXMgbm90IHRoZXJlIGF0IGFsbCB3aXRob3V0IHRoZSBvdGhlciBwbHVnaW4uXG4gKlxuICogVGhpcyBmaWxlIHVzZWQgdG8gYXJndWUgdGhlIHN0cm9uZ2VyIHBvc2l0aW9uIOKAlCB0aGF0IHJlcXVpcmluZyBhbm90aGVyIHBsdWdpbiBzaG91bGQgbm90IGV4aXN0LCBiZWNhdXNlXG4gKiBcImludmVudGluZyBvbmUgYnkgcmVmdXNpbmcgdG8gbG9hZCB3b3VsZCBwdW5pc2ggdGhlIHVzZXIgZm9yIHNvbWV0aGluZyB0aGV5IG5ldmVyIGFncmVlZCB0b1wiLiBUaGF0IHdhc1xuICogd3JvbmcgYWJvdXQgd2hpY2ggb3B0aW9uIHB1bmlzaGVzIHRoZSB1c2VyLCBhbmQgdGhlIGNvdW50ZXItY2FzZSBpcyB3b3J0aCBrZWVwaW5nIHJhdGhlciB0aGFuIHF1aWV0bHlcbiAqIGRlbGV0aW5nLiBBIGxvYWQtYmVhcmluZyBwbHVnaW4gdGhlIHVzZXIgY2Fubm90IGlkZW50aWZ5IGlzIG5vdCBhIG5ldXRyYWwgb3V0Y29tZTogbW9udGhzIGxhdGVyIHRoZXlcbiAqIG1lZXQgaXQgaW4gdGhlaXIgcGx1Z2luIGxpc3QsIG5vdGhpbmcgaW4gT2JzaWRpYW4ncyBtYW5pZmVzdCBmb3JtYXQgc2F5cyBhbnl0aGluZyBkZXBlbmRzIG9uIGl0LCB0aGV5XG4gKiByZW1vdmUgaXQsIGFuZCB0aGUgZGFtYWdlIHN1cmZhY2VzIHdlZWtzIGFmdGVyIHRoYXQgd2l0aCBubyB3YXkgdG8gY29ubmVjdCB0aGUgdHdvLiBCZXNpZGUgdGhhdCwgYVxuICogbWFuZGF0b3J5IGRlcGVuZGVuY3kgdGhhdCBzdGF5cyBlbmFibGVkLWJ1dC1pbmVydCwgbmFtZXMgd2hhdCBpdCBpcyB3YWl0aW5nIGZvciwgaW5zdGFsbHMgaXQgaW4gb25lXG4gKiBjbGljayBhbmQgcmVzdW1lcyB3aXRob3V0IGEgcmVzdGFydCBpcyBub3QgYSBwdW5pc2htZW50IOKAlCBpdCBpcyB0aGUgc2FtZSBpbmZvcm1hdGlvbiwgZGVsaXZlcmVkIHdoaWxlXG4gKiB0aGUgdXNlciBjYW4gc3RpbGwgYWN0IG9uIGl0LlxuICpcbiAqIFRoZSBhc2sgaXMgc3VyZmFjZWQgdHdpY2UsIGRlbGliZXJhdGVseSwgYmVjYXVzZSB0aGUgdHdvIHBsYWNlbWVudHMgYW5zd2VyIGRpZmZlcmVudCBxdWVzdGlvbnM6XG4gKiBhIG5vdGljZSBvbiBsb2FkIChcInlvdSBhcmUgbWlzc2luZyBzb21ldGhpbmcgeW91IHByb2JhYmx5IHdhbnRcIikgYW5kIGEgc2V0dGluZ3MtdGFiIGJhbm5lciAoXCJ0aGVcbiAqIHNldHRpbmdzIHlvdSBjYW1lIGxvb2tpbmcgZm9yIGxpdmUgaW4gYW5vdGhlciBwbHVnaW5cIikuIERlY2xpbmluZyBzaWxlbmNlcyBvbmx5IHRoZSBub3RpY2Ug4oCUIGEgdXNlclxuICogd2hvIG9wZW5zIHRoZSBzZXR0aW5ncyB0YWIgaXMgYXNraW5nIGFib3V0IHRoZSBmZWF0dXJlIHJpZ2h0IHRoZW4sIHNvIHRoZSBiYW5uZXIgc3RheXMuXG4gKi9cblxuaW1wb3J0IHR5cGUgeyBBcHAgfSBmcm9tICdvYnNpZGlhbic7XG5pbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO1xuXG5pbXBvcnQgeyBjb252ZXJ0QXN5bmNUb1N5bmMgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuaW1wb3J0IHsgQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbk5vdGljZUNvbXBvbmVudCB9IGZyb20gJy4vcGx1Z2luLW5vdGljZS1jb21wb25lbnQudHMnO1xuaW1wb3J0IHR5cGUgeyBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2UgfSBmcm9tICcuL3BsdWdpbi1zZXR0aW5ncy1jb21wb25lbnQudHMnO1xuXG5pbXBvcnQgeyBDc3NDbGFzcyB9IGZyb20gJy4uL2Nzcy1jbGFzcy50cyc7XG5pbXBvcnQgeyBhcHBlbmRUZXh0T3JGcmFnbWVudENsb25lIH0gZnJvbSAnLi4vaHRtbC1lbGVtZW50LnRzJztcbmltcG9ydCB7IHQgfSBmcm9tICcuLi9pMThuL2kxOG4udHMnO1xuaW1wb3J0IHtcbiAgZ2V0SW5zdGFsbGVkUGx1Z2luU3RhdGUsXG4gIGluc3RhbGxBbmRFbmFibGVQbHVnaW4sXG4gIEluc3RhbGxlZFBsdWdpblN0YXRlXG59IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4taW5zdGFsbC1zdGF0ZS50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcbmltcG9ydCB7IENhbGxiYWNrTGF5b3V0UmVhZHlDb21wb25lbnQgfSBmcm9tICcuL2xheW91dC1yZWFkeS1jb21wb25lbnQudHMnO1xuXG4vKipcbiAqIEhvdyB0aGUgc3VnZ2VzdGVkIHBsdWdpbiBpcyBjdXJyZW50bHkgcHJlc2VudCBpbiB0aGUgdmF1bHQuXG4gKlxuICogVGhlIHNhbWUgdGhyZWUgc3RhdGVzIGEgbWFuZGF0b3J5IGRlcGVuZGVuY3kgaXMgaW4sIHNvIHRoaXMgaXMge0BsaW5rIEluc3RhbGxlZFBsdWdpblN0YXRlfSB1bmRlciB0aGVcbiAqIG5hbWUgdGhpcyBjb21wb25lbnQgaGFzIGFsd2F5cyB1c2VkIOKAlCBvbmUgZW51bSwgc28gYSBjYWxsZXIgaG9sZGluZyBhIHN0YXRlIGZyb20gZWl0aGVyIGNvbXBvbmVudCBjYW5cbiAqIGNvbXBhcmUgaXQgYWdhaW5zdCBlaXRoZXIgbmFtZS5cbiAqL1xuZXhwb3J0IGNvbnN0IFN1Z2dlc3RlZFBsdWdpblN0YXRlID0gSW5zdGFsbGVkUGx1Z2luU3RhdGU7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3IgdGhlIHtAbGluayBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMge1xuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB1c2VyIGhhcyBhbHJlYWR5IGRlY2xpbmVkIHRoaXMgc3VnZ2VzdGlvbi5cbiAgICpcbiAgICogU3RvcmFnZSBiZWxvbmdzIHRvIHRoZSBob3N0IHBsdWdpbiAodHlwaWNhbGx5IG9uZSBvZiBpdHMgc2V0dGluZ3MpLCBiZWNhdXNlIHRoaXMgY29tcG9uZW50IGhhcyBub1xuICAgKiBgZGF0YS5qc29uYCBvZiBpdHMgb3duIGFuZCBhIGRlY2xpbmUgaGFzIHRvIG91dGxpdmUgYSByZWxvYWQuXG4gICAqXG4gICAqIE9ubHkgZXZlciBjYWxsZWQgb25jZSB7QGxpbmsgcGx1Z2luU2V0dGluZ3NDb21wb25lbnR9IHJlcG9ydHMgaXRzIHNldHRpbmdzIGxvYWRlZCwgc28gYW4gaW1wbGVtZW50YXRpb25cbiAgICogcmVhZGluZyBhIHNldHRpbmcgaXMgZ3VhcmFudGVlZCB0byByZWFkIHRoZSBzdG9yZWQgdmFsdWUgcmF0aGVyIHRoYW4gaXRzIGRlZmF1bHQuXG4gICAqXG4gICAqIEByZXR1cm5zIGB0cnVlYCB3aGVuIHRoZSBzdWdnZXN0aW9uIGhhcyBiZWVuIGRlY2xpbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgaXNTdWdnZXN0aW9uRGVjbGluZWQ6ICgpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBub3RpY2UgY29tcG9uZW50IG9mIHRoZSBwbHVnaW4gbWFraW5nIHRoZSBzdWdnZXN0aW9uLCB1c2VkIHRvIHNob3cgdGhlIHN1Z2dlc3Rpb24gYW5kIGl0c1xuICAgKiBvdXRjb21lLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luTm90aWNlQ29tcG9uZW50OiBQbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBjb21wb25lbnQgaG9sZGluZyB3aGF0ZXZlciB7QGxpbmsgaXNTdWdnZXN0aW9uRGVjbGluZWR9IHJlYWRzLlxuICAgKlxuICAgKiBUYWtlbiBhcyBhIHdob2xlIGNvbXBvbmVudCByYXRoZXIgdGhhbiBhcyBhIGJhcmUgXCJyZWFkeVwiIGZsYWcgc28gdGhlIGhvc3QgY2Fubm90IGZvcmdldCB0byB3aXJlIHRoZVxuICAgKiB3YWl0OiB0aGUgbm90aWNlIGlzIGRlY2lkZWQgb25seSBhZnRlciB0aGlzIGNvbXBvbmVudCBoYXMgcmVhZCBgZGF0YS5qc29uYC4gU2VlXG4gICAqIHtAbGluayBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2Uud2hlbkxvYWRlZEZyb21GaWxlfSBmb3Igd2h5IHRoZSByZWFkIGNhbm5vdCBzaW1wbHkgaGFwcGVuIGF0XG4gICAqIGxheW91dC1yZWFkeS5cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQaWNrPFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+LCAnd2hlbkxvYWRlZEZyb21GaWxlJz47XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhbGl6ZWQgc2VudGVuY2UgZXhwbGFpbmluZyB3aGF0IHRoZSBob3N0IHBsdWdpbiBjYW5ub3QgZG8gd2l0aG91dCB0aGUgc3VnZ2VzdGVkIHBsdWdpbi4gVGhlXG4gICAqIGhvc3QgcGx1Z2luIG93bnMgdGhpcyBzdHJpbmc6IG9ubHkgaXQga25vd3Mgd2hpY2ggb2YgaXRzIGZlYXR1cmVzIGFyZSBhZmZlY3RlZC5cbiAgICpcbiAgICogUGFzcyBhIHtAbGluayBEb2N1bWVudEZyYWdtZW50fSB0byBtYXJrIHVwIHBhcnQgb2YgdGhlIHNlbnRlbmNlLCBzdWNoIGFzIGEgcGx1Z2luIG5hbWUgcmVuZGVyZWQgYXNcbiAgICogY29kZS4gRWFjaCByZW5kZXIgYXBwZW5kcyBhIGZyZXNoIGNsb25lIG9mIGl0LCBiZWNhdXNlIHRoZSBub3RpY2UgYW5kIHRoZSBiYW5uZXIgZWFjaCBuZWVkIHRoZWlyIG93blxuICAgKiBjb3B5IGFuZCBhcHBlbmRpbmcgYSBmcmFnbWVudCBlbXB0aWVzIGl0LlxuICAgKi9cbiAgcmVhZG9ubHkgcmVhc29uOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZWNvcmRzIHRoZSB1c2VyJ3MgYW5zd2VyIHRvIHRoZSBzdWdnZXN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gaXNEZWNsaW5lZCAtIGB0cnVlYCB3aGVuIHRoZSB1c2VyIGRlY2xpbmVkLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIGFuc3dlciBpcyBwZXJzaXN0ZWQuXG4gICAqL1xuICByZWFkb25seSBzZXRTdWdnZXN0aW9uRGVjbGluZWQ6IChpc0RlY2xpbmVkOiBib29sZWFuKSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIHN1Z2dlc3RlZCBwbHVnaW4sIGFzIGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkuXG4gICAqL1xuICByZWFkb25seSBzdWdnZXN0ZWRQbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBzdWdnZXN0ZWQgcGx1Z2luLCBzaG93biB0byB0aGUgdXNlci5cbiAgICovXG4gIHJlYWRvbmx5IHN1Z2dlc3RlZFBsdWdpbk5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBIb3cgdGhlIHN1Z2dlc3RlZCBwbHVnaW4gaXMgY3VycmVudGx5IHByZXNlbnQgaW4gdGhlIHZhdWx0LlxuICovXG5leHBvcnQgdHlwZSBTdWdnZXN0ZWRQbHVnaW5TdGF0ZSA9IEluc3RhbGxlZFBsdWdpblN0YXRlO1xuXG4vKipcbiAqIFN1Z2dlc3RzIGluc3RhbGxpbmcgYW5vdGhlciBjb21tdW5pdHkgcGx1Z2luLCB2aWEgYSBsb2FkLXRpbWUgbm90aWNlIGFuZCBhIHNldHRpbmdzLXRhYiBiYW5uZXIuXG4gKi9cbmV4cG9ydCBjbGFzcyBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50IGV4dGVuZHMgQ29tcG9uZW50RXgge1xuICBwcml2YXRlIHJlYWRvbmx5IGFwcDogQXBwO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzU3VnZ2VzdGlvbkRlY2xpbmVkOiAoKSA9PiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpbk5vdGljZUNvbXBvbmVudDogUGx1Z2luTm90aWNlQ29tcG9uZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQaWNrPFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+LCAnd2hlbkxvYWRlZEZyb21GaWxlJz47XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVhc29uOiBEb2N1bWVudEZyYWdtZW50IHwgc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IHNldFN1Z2dlc3Rpb25EZWNsaW5lZDogKGlzRGVjbGluZWQ6IGJvb2xlYW4pID0+IFByb21pc2FibGU8dm9pZD47XG4gIHByaXZhdGUgcmVhZG9ubHkgc3VnZ2VzdGVkUGx1Z2luSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBzdWdnZXN0ZWRQbHVnaW5OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFBsdWdpblN1Z2dlc3Rpb25Db21wb25lbnR9LlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGNvbnN0cnVjdG9yIHBhcmFtZXRlcnMuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IocGFyYW1zOiBQbHVnaW5TdWdnZXN0aW9uQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXMpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXBwID0gcGFyYW1zLmFwcDtcbiAgICB0aGlzLnBsdWdpbk5vdGljZUNvbXBvbmVudCA9IHBhcmFtcy5wbHVnaW5Ob3RpY2VDb21wb25lbnQ7XG4gICAgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudCA9IHBhcmFtcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudDtcbiAgICB0aGlzLnJlYXNvbiA9IHBhcmFtcy5yZWFzb247XG4gICAgdGhpcy5zdWdnZXN0ZWRQbHVnaW5JZCA9IHBhcmFtcy5zdWdnZXN0ZWRQbHVnaW5JZDtcbiAgICB0aGlzLnN1Z2dlc3RlZFBsdWdpbk5hbWUgPSBwYXJhbXMuc3VnZ2VzdGVkUGx1Z2luTmFtZTtcbiAgICB0aGlzLmlzU3VnZ2VzdGlvbkRlY2xpbmVkID0gcGFyYW1zLmlzU3VnZ2VzdGlvbkRlY2xpbmVkO1xuICAgIHRoaXMuc2V0U3VnZ2VzdGlvbkRlY2xpbmVkID0gcGFyYW1zLnNldFN1Z2dlc3Rpb25EZWNsaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNvbHZlcyBob3cgdGhlIHN1Z2dlc3RlZCBwbHVnaW4gaXMgY3VycmVudGx5IHByZXNlbnQgaW4gdGhlIHZhdWx0LlxuICAgKlxuICAgKiBAcmV0dXJucyBUaGUge0BsaW5rIFN1Z2dlc3RlZFBsdWdpblN0YXRlfS5cbiAgICovXG4gIHB1YmxpYyBnZXRTdWdnZXN0ZWRQbHVnaW5TdGF0ZSgpOiBTdWdnZXN0ZWRQbHVnaW5TdGF0ZSB7XG4gICAgcmV0dXJuIGdldEluc3RhbGxlZFBsdWdpblN0YXRlKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBwbHVnaW5JZDogdGhpcy5zdWdnZXN0ZWRQbHVnaW5JZFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEluc3RhbGxzICh3aGVuIG5lZWRlZCkgYW5kIGVuYWJsZXMgdGhlIHN1Z2dlc3RlZCBwbHVnaW4sIHJlcG9ydGluZyB0aGUgb3V0Y29tZSBhcyBhIG5vdGljZS5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBwbHVnaW4gaXMgZW5hYmxlZCwgb3Igb25jZSB0aGUgZmFpbHVyZSBoYXMgYmVlblxuICAgKiByZXBvcnRlZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBpbnN0YWxsQW5kRW5hYmxlU3VnZ2VzdGVkUGx1Z2luKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLmdldFN1Z2dlc3RlZFBsdWdpblN0YXRlKCkgPT09IFN1Z2dlc3RlZFBsdWdpblN0YXRlLkVuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBhd2FpdCBpbnN0YWxsQW5kRW5hYmxlUGx1Z2luKHtcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBwbHVnaW5JZDogdGhpcy5zdWdnZXN0ZWRQbHVnaW5JZCxcbiAgICAgIHBsdWdpbk5hbWU6IHRoaXMuc3VnZ2VzdGVkUGx1Z2luTmFtZSxcbiAgICAgIHBsdWdpbk5vdGljZUNvbXBvbmVudDogdGhpcy5wbHVnaW5Ob3RpY2VDb21wb25lbnRcbiAgICB9KTtcblxuICAgIC8vIE9ubHkgYWZ0ZXIgdGhlIGluc3RhbGwgYWN0dWFsbHkgc3VjY2VlZGVkIOKAlCBgaW5zdGFsbEFuZEVuYWJsZVBsdWdpbmAgcmV0aHJvd3Mgb24gZmFpbHVyZSwgc28gYVxuICAgIC8vIGZhaWxlZCBhdHRlbXB0IGxlYXZlcyBhIHByZXZpb3VzIGRlY2xpbmUgc3RhbmRpbmcgcmF0aGVyIHRoYW4gc2lsZW50bHkgY2xlYXJpbmcgaXQuXG4gICAgYXdhaXQgdGhpcy5zZXRTdWdnZXN0aW9uRGVjbGluZWQoZmFsc2UpO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb21wb25lbnQsIHNob3dpbmcgdGhlIHN1Z2dlc3Rpb24gbm90aWNlIG9uY2UgdGhlIGxheW91dCBpcyByZWFkeSBBTkQgdGhlIGhvc3QncyBzZXR0aW5nc1xuICAgKiBoYXZlIGJlZW4gcmVhZCBmcm9tIGRpc2suXG4gICAqXG4gICAqIEJvdGggd2FpdHMgbWF0dGVyLCBhbmQgbmVpdGhlciBpbXBsaWVzIHRoZSBvdGhlcjpcbiAgICpcbiAgICogLSBMYXlvdXQtcmVhZHksIGJlY2F1c2UgcGx1Z2lucyBsb2FkIGluIGFuIHVuc3BlY2lmaWVkIG9yZGVyLCBzbyB0aGUgc3VnZ2VzdGVkIHBsdWdpbiBtYXkgd2VsbCBiZVxuICAgKiAgIGVuYWJsZWQgYSBtb21lbnQgYWZ0ZXIgdGhpcyBvbmUuIENoZWNraW5nIGVhcmxpZXIgd291bGQgc3VnZ2VzdCBpbnN0YWxsaW5nIHNvbWV0aGluZyB0aGUgdXNlclxuICAgKiAgIGFscmVhZHkgaGFzLlxuICAgKiAtIFNldHRpbmdzLWxvYWRlZCwgYmVjYXVzZSB7QGxpbmsgUGx1Z2luU3VnZ2VzdGlvbkNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zLmlzU3VnZ2VzdGlvbkRlY2xpbmVkfVxuICAgKiAgIHJlYWRzIGEgc2V0dGluZyBvZiB0aGUgaG9zdCwgYW5kIHRoZSBob3N0J3Mgc2V0dGluZ3MgY29tcG9uZW50IGlzIGEgU0lCTElORyB3aG9zZSBvd24gYXN5bmMgbG9hZCBpc1xuICAgKiAgIHN0aWxsIGluIGZsaWdodCBoZXJlLiBPbiBhIGxheW91dCB0aGF0IGlzIGFscmVhZHkgcmVhZHkg4oCUIGEgcnVudGltZSBlbmFibGUgZnJvbSB0aGUgQ29tbXVuaXR5XG4gICAqICAgUGx1Z2lucyB0YWIsIG9yIGEgcmUtZW5hYmxlIGFmdGVyIGFuIHVwZGF0ZSDigJQgdGhlIGxheW91dC1yZWFkeSBjYWxsYmFjayBmaXJlcyBpbW1lZGlhdGVseSwgc28gdGhlXG4gICAqICAgcmVhZCB3b3VsZCBzZWUgdGhlIGRlZmF1bHQgYGZhbHNlYCBhbmQgYXNrIGFnYWluIGEgdXNlciB3aG8gaGFzIGFscmVhZHkgZGVjbGluZWQuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuYWRkQ2hpbGQoXG4gICAgICBuZXcgQ2FsbGJhY2tMYXlvdXRSZWFkeUNvbXBvbmVudCh0aGlzLmFwcCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50LndoZW5Mb2FkZWRGcm9tRmlsZSgpO1xuICAgICAgICBpZiAodGhpcy5pc1VubG9hZGVkKCkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNob3dTdWdnZXN0aW9uTm90aWNlKCk7XG4gICAgICB9KVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgc3VnZ2VzdGlvbiBiYW5uZXIgaW50byBhIHNldHRpbmdzLXRhYiBjb250YWluZXIsIHdpdGggYSBidXR0b24gdGhhdCBpbnN0YWxscyBhbmQgZW5hYmxlc1xuICAgKiB0aGUgc3VnZ2VzdGVkIHBsdWdpbi5cbiAgICpcbiAgICogUmVuZGVycyBub3RoaW5nIHdoZW4gdGhlIHN1Z2dlc3RlZCBwbHVnaW4gaXMgYWxyZWFkeSBlbmFibGVkLiBVbmxpa2UgdGhlIG5vdGljZSwgdGhlIGJhbm5lciBpZ25vcmVzIGFcbiAgICogcHJldmlvdXMgZGVjbGluZSDigJQgdGhlIHVzZXIgaXMgbG9va2luZyBhdCB0aGVzZSBzZXR0aW5ncyByaWdodCBub3csIHdoaWNoIGlzIGEgZnJlc2hlciBzaWduYWwgdGhhbiBhblxuICAgKiBhbnN3ZXIgdGhleSBnYXZlIGVhcmxpZXIuXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJFbCAtIFRoZSBlbGVtZW50IHRvIHJlbmRlciB0aGUgYmFubmVyIGludG8uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyQmFubmVyKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpcy5nZXRTdWdnZXN0ZWRQbHVnaW5TdGF0ZSgpO1xuICAgIGlmIChzdGF0ZSA9PT0gU3VnZ2VzdGVkUGx1Z2luU3RhdGUuRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGJhbm5lckVsID0gY29udGFpbmVyRWwuY3JlYXRlRGl2KHtcbiAgICAgIGNsczogW0Nzc0NsYXNzLkxpYnJhcnlOYW1lLCBDc3NDbGFzcy5MZWdhY3lMaWJyYXJ5TmFtZSwgQ3NzQ2xhc3MuUGx1Z2luU3VnZ2VzdGlvbkJhbm5lcl1cbiAgICB9KTtcbiAgICBhcHBlbmRUZXh0T3JGcmFnbWVudENsb25lKGJhbm5lckVsLmNyZWF0ZURpdigpLCB0aGlzLnJlYXNvbik7XG5cbiAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGJhbm5lckVsKVxuICAgICAgLnNldEJ1dHRvblRleHQodGhpcy5nZXRBY3Rpb25CdXR0b25UZXh0KHN0YXRlKSlcbiAgICAgIC5zZXRDdGEoKVxuICAgICAgLm9uQ2xpY2soY29udmVydEFzeW5jVG9TeW5jKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgdGhpcy5pbnN0YWxsQW5kRW5hYmxlU3VnZ2VzdGVkUGx1Z2luKCk7XG4gICAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGlvbkJ1dHRvblRleHQoc3RhdGU6IFN1Z2dlc3RlZFBsdWdpblN0YXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdCgoJCkgPT5cbiAgICAgIHN0YXRlID09PSBTdWdnZXN0ZWRQbHVnaW5TdGF0ZS5JbnN0YWxsZWRCdXREaXNhYmxlZFxuICAgICAgICA/ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5TdWdnZXN0aW9uLmVuYWJsZVxuICAgICAgICA6ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5TdWdnZXN0aW9uLmluc3RhbGxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzaG93U3VnZ2VzdGlvbk5vdGljZSgpOiB2b2lkIHtcbiAgICBjb25zdCBzdGF0ZSA9IHRoaXMuZ2V0U3VnZ2VzdGVkUGx1Z2luU3RhdGUoKTtcbiAgICBpZiAoc3RhdGUgPT09IFN1Z2dlc3RlZFBsdWdpblN0YXRlLkVuYWJsZWQgfHwgdGhpcy5pc1N1Z2dlc3Rpb25EZWNsaW5lZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudCgoZnJhZ21lbnRFbCkgPT4ge1xuICAgICAgYXBwZW5kVGV4dE9yRnJhZ21lbnRDbG9uZShmcmFnbWVudEVsLmNyZWF0ZURpdigpLCB0aGlzLnJlYXNvbik7XG4gICAgICBjb25zdCBidXR0b25zRWwgPSBmcmFnbWVudEVsLmNyZWF0ZURpdigpO1xuXG4gICAgICBuZXcgQnV0dG9uQ29tcG9uZW50KGJ1dHRvbnNFbClcbiAgICAgICAgLnNldEJ1dHRvblRleHQodGhpcy5nZXRBY3Rpb25CdXR0b25UZXh0KHN0YXRlKSlcbiAgICAgICAgLnNldEN0YSgpXG4gICAgICAgIC5vbkNsaWNrKGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5pbnN0YWxsQW5kRW5hYmxlU3VnZ2VzdGVkUGx1Z2luKCk7XG4gICAgICAgIH0pKTtcblxuICAgICAgbmV3IEJ1dHRvbkNvbXBvbmVudChidXR0b25zRWwpXG4gICAgICAgIC5zZXRCdXR0b25UZXh0KHQoKCQpID0+ICQub2JzaWRpYW5EZXZVdGlscy5wbHVnaW5TdWdnZXN0aW9uLm5vdE5vdykpXG4gICAgICAgIC5vbkNsaWNrKGNvbnZlcnRBc3luY1RvU3luYyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgYXdhaXQgdGhpcy5zZXRTdWdnZXN0aW9uRGVjbGluZWQodHJ1ZSk7XG4gICAgICAgIH0pKTtcbiAgICB9KTtcblxuICAgIHRoaXMucGx1Z2luTm90aWNlQ29tcG9uZW50LnNob3dOb3RpY2UoZnJhZ21lbnQsIHsgc2hvdWxkSGlkZU9uQ2xpY2s6IGZhbHNlIH0pO1xuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0JBLFNBQVMsMEJBQTBCO0FBQ25DLFNBQVMsdUJBQXVCO0FBS2hDLFNBQVMsZ0JBQWdCO0FBQ3pCLFNBQVMsaUNBQWlDO0FBQzFDLFNBQVMsU0FBUztBQUNsQjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG1CQUFtQjtBQUM1QixTQUFTLG9DQUFvQztBQVN0QyxNQUFNLHVCQUF1QjtBQTZFN0IsTUFBTSxrQ0FBa0MsWUFBWTtBQUFBLEVBQ3hDO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9WLFlBQVksUUFBb0Q7QUFDckUsVUFBTTtBQUNOLFNBQUssTUFBTSxPQUFPO0FBQ2xCLFNBQUssd0JBQXdCLE9BQU87QUFDcEMsU0FBSywwQkFBMEIsT0FBTztBQUN0QyxTQUFLLFNBQVMsT0FBTztBQUNyQixTQUFLLG9CQUFvQixPQUFPO0FBQ2hDLFNBQUssc0JBQXNCLE9BQU87QUFDbEMsU0FBSyx1QkFBdUIsT0FBTztBQUNuQyxT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
|
|
@@ -67,7 +67,7 @@ export interface SettingsMigrationComponentConstructorParams<TMigratableSettings
|
|
|
67
67
|
* Taken as a whole component rather than as a bare "ready" flag so the host cannot forget to wire the wait:
|
|
68
68
|
* whatever {@link getProposedSettings} reads is meaningless until this component has read `data.json`.
|
|
69
69
|
*/
|
|
70
|
-
readonly pluginSettingsComponent: PluginSettingsComponentBase<object>;
|
|
70
|
+
readonly pluginSettingsComponent: Pick<PluginSettingsComponentBase<object>, 'on'>;
|
|
71
71
|
/**
|
|
72
72
|
* The `manifest.id` of the plugin that owns these settings now, as listed in Obsidian's community plugin
|
|
73
73
|
* registry.
|
|
@@ -113,4 +113,4 @@ class SettingsMigrationComponent extends ComponentEx {
|
|
|
113
113
|
export {
|
|
114
114
|
SettingsMigrationComponent
|
|
115
115
|
};
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NldHRpbmdzLW1pZ3JhdGlvbi1jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbXBvbmVudCB0aGF0IG9mZmVycyBzZXR0aW5ncyB0aGlzIHBsdWdpbiB1c2VkIHRvIG93biB0byB0aGUgcGx1Z2luIHRoYXQgb3ducyB0aGVtIG5vdywgb25jZSwgdGhyb3VnaFxuICogdGhhdCBwbHVnaW4ncyBwdWJsaWMgQVBJLlxuICpcbiAqIFRoaXMgaXMgdGhlIG90aGVyIGhhbGYgb2Yge0BsaW5rIGNvbXBvbmVudHMvcGx1Z2luLXN1Z2dlc3Rpb24tY29tcG9uZW50IVBsdWdpblN1Z2dlc3Rpb25Db21wb25lbnR9LlxuICogVGhlIHN1Z2dlc3Rpb24gYXNrcyB0aGUgdXNlciB0byBpbnN0YWxsIHRoZSBwbHVnaW4gdGhhdCB0b29rIGEgZmVhdHVyZSBvdmVyOyB0aGlzIGNhcnJpZXMgdGhlIHNldHRpbmdzIHRoZXlcbiAqIGhhZCBjb25maWd1cmVkIGZvciBpdCBhY3Jvc3MsIHNvIHRha2luZyB0aGUgc3VnZ2VzdGlvbiBkb2VzIG5vdCBtZWFuIHJlLWVudGVyaW5nIGV2ZXJ5dGhpbmcgYnkgaGFuZC5cbiAqXG4gKiBBIHByb3Bvc2luZyBwbHVnaW4gbmV2ZXIgd3JpdGVzIGludG8gYW5vdGhlciBwbHVnaW4ncyBgZGF0YS5qc29uYC4gSXQgUFJPUE9TRVM6IHRoZSBvdGhlciBwbHVnaW4gb3ducyB0aGVcbiAqIHNldHRpbmdzLCBzbyBpdCBvd25zIHRoZSBkaWFsb2csIGFuZCB0aGUgdXNlciBhcHByb3ZlcywgZWRpdHMgb3IgZGVjbGluZXMuIE9ubHkgYW4gYXBwbGllZCBtaWdyYXRpb24gcmV0aXJlc1xuICogdGhlIHBlbmRpbmcgdmFsdWVzLlxuICpcbiAqIFRoZSBvZmZlciBpcyBtYWRlIHdoZW5ldmVyIGl0IENBTiBzdWNjZWVkLCB3aGljaCBuZWVkcyB0d28gaW5kZXBlbmRlbnQgdGhpbmdzIHRvIGhhdmUgaGFwcGVuZWQg4oCUIHRoZVxuICogcHJvdmlkZXIncyBBUEkgYmVpbmcgYXZhaWxhYmxlLCBhbmQgdGhpcyBwbHVnaW4ncyBvd24gc2V0dGluZ3MgaGF2aW5nIGFycml2ZWQgZnJvbSBkaXNrLiBFaXRoZXIgY2FuIGxhbmRcbiAqIGZpcnN0LCBzbyBib3RoIGVkZ2VzIGFyZSB3aXJlZCBhbmQgZWFjaCByZS1yZWFkcyB0aGUgY3VycmVudCBzdGF0ZSByYXRoZXIgdGhhbiBhc3N1bWluZyB0aGUgb3RoZXIgaGFzXG4gKiBhbHJlYWR5IGhhcHBlbmVkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBpQ29udHJhY3QgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXBpLWNvbnRyYWN0JztcbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgaW52b2tlQXN5bmNTYWZlbHkgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbkFwaVJlZiB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tYXBpLnRzJztcbmltcG9ydCB0eXBlIHsgU2V0dGluZ3NNaWdyYXRpb25BcGkgfSBmcm9tICcuLi9wbHVnaW4vc2V0dGluZ3MtbWlncmF0aW9uLWFwaS50cyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZSB9IGZyb20gJy4vcGx1Z2luLXNldHRpbmdzLWNvbXBvbmVudC50cyc7XG5cbmltcG9ydCB7IHdhdGNoUGx1Z2luQXBpIH0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1hcGkudHMnO1xuaW1wb3J0IHsgZ2V0U2V0dGluZ3NNaWdyYXRpb25BcGlDb250cmFjdCB9IGZyb20gJy4uL3BsdWdpbi9zZXR0aW5ncy1taWdyYXRpb24tYXBpLnRzJztcbmltcG9ydCB7IHJlZ2lzdGVyQXN5bmNFdmVudCB9IGZyb20gJy4vYXN5bmMtZXZlbnRzLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIFNldHRpbmdzTWlncmF0aW9uQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAdHlwZVBhcmFtIFRNaWdyYXRhYmxlU2V0dGluZ3MgLSBUaGUgc2V0dGluZ3MgdGhpcyBwbHVnaW4gbWF5IGhhbmQgb3Zlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXR0aW5nc01pZ3JhdGlvbkNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFRNaWdyYXRhYmxlU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+IHtcbiAgLyoqXG4gICAqIFRoZSBzZW12ZXIgcmFuZ2Ugb2YgY29udHJhY3QgdmVyc2lvbnMgdGhpcyBwbHVnaW4gY29tcGlsZWQgYWdhaW5zdCwgZS5nLiBgJ14xJ2AuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEV2YWx1YXRlZCBieSBgY29tcGFyZS12ZXJzaW9uc2AsIHdoaWNoIGRvZXMgTk9UIGFjY2VwdCBhIGJhcmUgYCpgLiBTcGVsbCBcImFueSB2ZXJzaW9uXCIgYXMgYCc+PTAuMC4wJ2AuXG4gICAqL1xuICByZWFkb25seSBhcGlWZXJzaW9uUmFuZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udHJhY3QgdGhpcyBwbHVnaW4gZXhwZWN0cyBvZiB0aGUgcHJvdmlkZXIsIHdoaWNoIHdpbnMgb3ZlciB0aGUgcHJvdmlkZXIncyBvd24uIERlZmF1bHRzIHRvXG4gICAqIHtAbGluayBnZXRTZXR0aW5nc01pZ3JhdGlvbkFwaUNvbnRyYWN0fSwgd2hpY2ggY2hlY2tzIHRoZSBvbmUgbWV0aG9kIGEgbWlncmF0aW9uIGNhbGxzLlxuICAgKlxuICAgKiBLZXB0IHRvIHtAbGluayBTZXR0aW5nc01pZ3JhdGlvbkFwaX0gZGVsaWJlcmF0ZWx5IE5BUlJPVy4gQSBtaWdyYXRpb24gbmVlZHMgb25lIG1ldGhvZCB0aGF0IGhhcyBleGlzdGVkIHNpbmNlXG4gICAqIHRoZSBwcm92aWRlcidzIGZpcnN0IGNvbnRyYWN0IHZlcnNpb24sIHdoaWxlIHRoZSBzYW1lIHBsdWdpbiBtYXkgcmVhZCBvdGhlciBwYXJ0cyBvZiB0aGF0IEFQSSB0aHJvdWdoIGEgbXVjaFxuICAgKiBuZXdlciBvbmUuIERlY2xhcmluZyB0aGUgd2lkZXIgZXhwZWN0YXRpb24gaGVyZSB3b3VsZCByZWZ1c2UgdG8gb2ZmZXIgdGhlIG1pZ3JhdGlvbiB0byBhIHVzZXIgb24gYW4gb2xkZXJcbiAgICogcHJvdmlkZXIg4oCUIHdoaWNoIGlzIHByZWNpc2VseSB0aGUgdXNlciB3aG8gc3RpbGwgaGFzIHNldHRpbmdzIHRvIG1pZ3JhdGUuXG4gICAqL1xuICByZWFkb25seSBjb250cmFjdD86IEFwaUNvbnRyYWN0PFNldHRpbmdzTWlncmF0aW9uQXBpPFRNaWdyYXRhYmxlU2V0dGluZ3M+PjtcblxuICAvKipcbiAgICogUmVhZHMgdGhlIHZhbHVlcyBjdXJyZW50bHkgd2FpdGluZyB0byBiZSBoYW5kZWQgb3Zlci5cbiAgICpcbiAgICogQ2FsbGVkIGFmcmVzaCBvbiBldmVyeSBlZGdlIHJhdGhlciB0aGFuIG9uY2UsIHNvIGFuIGltcGxlbWVudGF0aW9uIHNpbXBseSByZWFkcyBpdHMgcGx1Z2luJ3Mgc2V0dGluZ3MuXG4gICAqIFJldHVybiBgbnVsbGAgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHBlbmRpbmcg4oCUIGFmdGVyIGEgbWlncmF0aW9uIGhhcyBiZWVuIGFwcGxpZWQsIG9yIG9uIGEgdmF1bHQgdGhhdCBuZXZlclxuICAgKiBoYWQgdGhlc2Ugc2V0dGluZ3MgY29uZmlndXJlZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHZhbHVlcyB0byBwcm9wb3NlLCBvciBgbnVsbGAgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIG9mZmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2V0UHJvcG9zZWRTZXR0aW5nczogKCkgPT4gbnVsbCB8IFRNaWdyYXRhYmxlU2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBjb21wb25lbnQgb2YgdGhlIHBsdWdpbiBtYWtpbmcgdGhlIHByb3Bvc2FsLlxuICAgKlxuICAgKiBUYWtlbiBhcyBhIHdob2xlIGNvbXBvbmVudCByYXRoZXIgdGhhbiBhcyBhIGJhcmUgXCJyZWFkeVwiIGZsYWcgc28gdGhlIGhvc3QgY2Fubm90IGZvcmdldCB0byB3aXJlIHRoZSB3YWl0OlxuICAgKiB3aGF0ZXZlciB7QGxpbmsgZ2V0UHJvcG9zZWRTZXR0aW5nc30gcmVhZHMgaXMgbWVhbmluZ2xlc3MgdW50aWwgdGhpcyBjb21wb25lbnQgaGFzIHJlYWQgYGRhdGEuanNvbmAuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudDogUGx1Z2luU2V0dGluZ3NDb21wb25lbnRCYXNlPG9iamVjdD47XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSBwbHVnaW4gdGhhdCBvd25zIHRoZXNlIHNldHRpbmdzIG5vdywgYXMgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpblxuICAgKiByZWdpc3RyeS5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyUGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogUmVjb3JkcyB0aGF0IHRoZSBwZW5kaW5nIHZhbHVlcyBoYXZlIGJlZW4gaGFuZGVkIG92ZXIsIHNvIHRoZSBvZmZlciBpcyBub3QgbWFkZSBhZ2Fpbi5cbiAgICpcbiAgICogQ2FsbGVkIE9OTFkgd2hlbiB0aGUgdXNlciBhY3R1YWxseSBhcHBsaWVkIHRoZSBtaWdyYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcmV0aXJlbWVudCBpcyBwZXJzaXN0ZWQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEFuIGltcGxlbWVudGF0aW9uIG11c3QgUEVSU0lTVCB0aGUgcmV0aXJlbWVudCDigJQgYHBsdWdpblNldHRpbmdzQ29tcG9uZW50LmVkaXRBbmRTYXZlKOKApilgLCBub3RcbiAgICogYHNldFByb3BlcnR5KOKApilgLiBUaGUgbGF0dGVyIG9ubHkgZWRpdHMgdGhlIGluLW1lbW9yeSBzdGF0ZSwgc28gdGhlIHJldGlyZW1lbnQgaXMgZm9yZ290dGVuIG9uIHRoZSBuZXh0XG4gICAqIHJlbG9hZCBhbmQgdGhlIG1pZ3JhdGlvbiBpcyBvZmZlcmVkIGFnYWluIGZvcmV2ZXIuXG4gICAqL1xuICByZWFkb25seSByZXRpcmVQcm9wb3NlZFNldHRpbmdzOiAoKSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgYG1hbmlmZXN0LmlkYCBvZiB0aGUgcGx1Z2luIG1ha2luZyB0aGUgcHJvcG9zYWwsIHNvIHRoZSBwcm92aWRlcidzIGRpYWxvZyBjYW4gc2F5IHdob3NlIHNldHRpbmdzIHRoZXNlXG4gICAqIGFyZS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT2ZmZXJzIHNldHRpbmdzIHRoaXMgcGx1Z2luIHVzZWQgdG8gb3duIHRvIHRoZSBwbHVnaW4gdGhhdCBvd25zIHRoZW0gbm93LlxuICpcbiAqIEB0eXBlUGFyYW0gVE1pZ3JhdGFibGVTZXR0aW5ncyAtIFRoZSBzZXR0aW5ncyB0aGlzIHBsdWdpbiBtYXkgaGFuZCBvdmVyLlxuICovXG5leHBvcnQgY2xhc3MgU2V0dGluZ3NNaWdyYXRpb25Db21wb25lbnQ8VE1pZ3JhdGFibGVTZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpVmVyc2lvblJhbmdlOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29udHJhY3Q6IEFwaUNvbnRyYWN0PFNldHRpbmdzTWlncmF0aW9uQXBpPFRNaWdyYXRhYmxlU2V0dGluZ3M+PjtcbiAgcHJpdmF0ZSByZWFkb25seSBnZXRQcm9wb3NlZFNldHRpbmdzOiAoKSA9PiBudWxsIHwgVE1pZ3JhdGFibGVTZXR0aW5ncztcbiAgcHJpdmF0ZSBpc1Byb3Bvc2luZyA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8b2JqZWN0PjtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm92aWRlclBsdWdpbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmV0aXJlUHJvcG9zZWRTZXR0aW5nczogKCkgPT4gUHJvbWlzYWJsZTx2b2lkPjtcbiAgcHJpdmF0ZSByZWFkb25seSBzb3VyY2VQbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHtAbGluayBTZXR0aW5nc01pZ3JhdGlvbkNvbXBvbmVudH0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgY29uc3RydWN0b3IgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFNldHRpbmdzTWlncmF0aW9uQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXM8VE1pZ3JhdGFibGVTZXR0aW5ncz4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXBpVmVyc2lvblJhbmdlID0gcGFyYW1zLmFwaVZlcnNpb25SYW5nZTtcbiAgICB0aGlzLmFwcCA9IHBhcmFtcy5hcHA7XG4gICAgdGhpcy5jb250cmFjdCA9IHBhcmFtcy5jb250cmFjdCA/PyBnZXRTZXR0aW5nc01pZ3JhdGlvbkFwaUNvbnRyYWN0PFRNaWdyYXRhYmxlU2V0dGluZ3M+KCk7XG4gICAgdGhpcy5nZXRQcm9wb3NlZFNldHRpbmdzID0gcGFyYW1zLmdldFByb3Bvc2VkU2V0dGluZ3M7XG4gICAgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudCA9IHBhcmFtcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudDtcbiAgICB0aGlzLnByb3ZpZGVyUGx1Z2luSWQgPSBwYXJhbXMucHJvdmlkZXJQbHVnaW5JZDtcbiAgICB0aGlzLnJldGlyZVByb3Bvc2VkU2V0dGluZ3MgPSBwYXJhbXMucmV0aXJlUHJvcG9zZWRTZXR0aW5ncztcbiAgICB0aGlzLnNvdXJjZVBsdWdpbklkID0gcGFyYW1zLnNvdXJjZVBsdWdpbklkO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb21wb25lbnQsIHdpcmluZyBib3RoIGVkZ2VzIHRoYXQgY2FuIG1ha2UgYW4gb2ZmZXIgcG9zc2libGUuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIC8vIE5vdGhpbmcgaXMgZ2F0ZWQgb24gdGhlIHBlbmRpbmcgdmFsdWVzIEhFUkUuIFRoZSBzZXR0aW5ncyBjb21wb25lbnQgaXMgYSBzaWJsaW5nIHdob3NlIG93biBsb2FkIGlzIHN0aWxsXG4gICAgLy8gaW4gZmxpZ2h0IGF0IHRoaXMgcG9pbnQsIHNvIGl0IHN0aWxsIGhvbGRzIHRoZSBERUZBVUxUUyDigJQgcmVhZGluZyB0aGUgcGVuZGluZyB2YWx1ZXMgbm93IHdvdWxkIHNlZVxuICAgIC8vIG5vdGhpbmcgb24gZXhhY3RseSB0aGUgdmF1bHRzIHRoYXQgaGF2ZSBzb21ldGhpbmcsIHJlZ2lzdGVyIG5vIHdhdGNoLCBhbmQgbG9zZSB0aGUgbWlncmF0aW9uIGZvciBnb29kLlxuICAgIC8vIEJvdGggZWRnZXMgYXJlIHdpcmVkIGluc3RlYWQsIGFuZCBgcHJvcG9zZWAgcmUtcmVhZHMgdGhlIHZhbHVlcyBlYWNoIHRpbWUgaXQgcnVucy5cbiAgICBjb25zdCByZWYgPSB3YXRjaFBsdWdpbkFwaTxTZXR0aW5nc01pZ3JhdGlvbkFwaTxUTWlncmF0YWJsZVNldHRpbmdzPj4oe1xuICAgICAgYXBpVmVyc2lvblJhbmdlOiB0aGlzLmFwaVZlcnNpb25SYW5nZSxcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBjb250cmFjdDogdGhpcy5jb250cmFjdCxcbiAgICAgIHBsdWdpbklkOiB0aGlzLnByb3ZpZGVyUGx1Z2luSWRcbiAgICB9KTtcblxuICAgIC8vIERyaXZlbiBieSB0aGUgcmVmJ3Mgb3duIGV2ZW50IHJhdGhlciB0aGFuIGJ5IGB3aGVuQXZhaWxhYmxlKClgLCBkZWxpYmVyYXRlbHkuIFRoYXQgd2FpdCBibG9ja3MgZm9yIHRlblxuICAgIC8vIHNlY29uZHMgYW5kIHRoZW4gdGhyb3dzIHdoZW4gdGhlIHByb3ZpZGVyIGlzIHNpbXBseSBub3QgaW5zdGFsbGVkLCB3aGljaCB3b3VsZCBzdGFsbCB0aGlzIHBsdWdpbidzIGxvYWRcbiAgICAvLyBmb3IgZXZlcnkgdXNlciB3aG8gZGVjbGluZXMgdGhlIHN1Z2dlc3Rpb24uIFdhdGNoaW5nIGNvc3RzIG5vdGhpbmcgd2hpbGUgdGhlIHByb3ZpZGVyIGlzIGFic2VudCBhbmRcbiAgICAvLyBvZmZlcnMgdGhlIG1pZ3JhdGlvbiB0aGUgbW9tZW50IGl0IGFwcGVhcnMg4oCUIGluY2x1ZGluZyByaWdodCBhZnRlciB0aGUgdXNlciBpbnN0YWxscyBpdCBmcm9tIHRoZVxuICAgIC8vIHN1Z2dlc3Rpb24gYmFubmVyLlxuICAgIHJlZ2lzdGVyQXN5bmNFdmVudChcbiAgICAgIHRoaXMsXG4gICAgICByZWYub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UocmVmKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIFRoZSBzZWNvbmQgZWRnZTogdGhpcyBwbHVnaW4ncyBvd24gc2V0dGluZ3MgYXJyaXZpbmcgZnJvbSBkaXNrLiBJdCBtYXkgZmlyZSBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGZpcnN0LlxuICAgIHJlZ2lzdGVyQXN5bmNFdmVudChcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50Lm9uKCdsb2FkU2V0dGluZ3MnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHJlZik7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmhhbmRsZUNoYW5nZShyZWYpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDaGFuZ2UocmVmOiBQbHVnaW5BcGlSZWY8U2V0dGluZ3NNaWdyYXRpb25BcGk8VE1pZ3JhdGFibGVTZXR0aW5ncz4+KTogdm9pZCB7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5wcm9wb3NlKHJlZi52YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb3Bvc2UoYXBpOiBudWxsIHwgU2V0dGluZ3NNaWdyYXRpb25BcGk8VE1pZ3JhdGFibGVTZXR0aW5ncz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcm9wb3NlZFNldHRpbmdzID0gdGhpcy5nZXRQcm9wb3NlZFNldHRpbmdzKCk7XG4gICAgaWYgKCFhcGkgfHwgdGhpcy5pc1Byb3Bvc2luZyB8fCBwcm9wb3NlZFNldHRpbmdzID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQm90aCBlZGdlcyBjYW4gZmlyZSB3aGlsZSB0aGUgcHJvdmlkZXIncyBkaWFsb2cgaXMgb3BlbiwgYW5kIGVhY2ggd291bGQgcmFpc2UgYSBzZWNvbmQgb25lLlxuICAgIHRoaXMuaXNQcm9wb3NpbmcgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcGkubWlncmF0ZVNldHRpbmdzKHtcbiAgICAgICAgcHJvcG9zZWRTZXR0aW5ncyxcbiAgICAgICAgc291cmNlUGx1Z2luSWQ6IHRoaXMuc291cmNlUGx1Z2luSWRcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBIGNhbmNlbCBpcyBub3QgYW4gYW5zd2VyLCBzbyB0aGUgdmFsdWVzIHN0YXkgcGVuZGluZyBhbmQgdGhlIG9mZmVyIGNvbWVzIGJhY2sg4oCUIG9uIHRoZSBuZXh0IGxvYWQsIG9yXG4gICAgICAvLyBhcyBzb29uIGFzIHRoZSBwcm92aWRlciByZWxvYWRzLiBPbmx5IGFuIGFwcGxpZWQgbWlncmF0aW9uIHJldGlyZXMgdGhlbS5cbiAgICAgIGlmIChyZXN1bHQuaXNBcHBsaWVkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmV0aXJlUHJvcG9zZWRTZXR0aW5ncygpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzUHJvcG9zaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0JBLFNBQVMseUJBQXlCO0FBTWxDLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsdUNBQXVDO0FBQ2hELFNBQVMsMEJBQTBCO0FBQ25DLFNBQVMsbUJBQW1CO0FBbUZyQixNQUFNLG1DQUF1RSxZQUFZO0FBQUEsRUFDN0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNULGNBQWM7QUFBQSxFQUNMO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1YsWUFBWSxRQUEwRTtBQUMzRixVQUFNO0FBQ04sU0FBSyxrQkFBa0IsT0FBTztBQUM5QixTQUFLLE1BQU0sT0FBTztBQUNsQixTQUFLLFdBQVcsT0FBTyxZQUFZLGdDQUFxRDtBQUN4RixTQUFLLHNCQUFzQixPQUFPO0FBQ2xDLFNBQUssMEJBQTBCLE9BQU87QUFDdEMsU0FBSyxtQkFBbUIsT0FBTztBQUMvQixTQUFLLHlCQUF5QixPQUFPO0FBQ3JDLFNBQUssaUJBQWlCLE9BQU87QUFBQSxFQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS2dCLFNBQWU7QUFLN0IsVUFBTSxNQUFNLGVBQTBEO0FBQUEsTUFDcEUsaUJBQWlCLEtBQUs7QUFBQSxNQUN0QixLQUFLLEtBQUs7QUFBQSxNQUNWLFdBQVc7QUFBQSxNQUNYLFVBQVUsS0FBSztBQUFBLE1BQ2YsVUFBVSxLQUFLO0FBQUEsSUFDakIsQ0FBQztBQU9EO0FBQUEsTUFDRTtBQUFBLE1BQ0EsSUFBSSxHQUFHLFVBQVUsTUFBTTtBQUNyQixhQUFLLGFBQWEsR0FBRztBQUFBLE1BQ3ZCLENBQUM7QUFBQSxJQUNIO0FBR0E7QUFBQSxNQUNFO0FBQUEsTUFDQSxLQUFLLHdCQUF3QixHQUFHLGdCQUFnQixNQUFNO0FBQ3BELGFBQUssYUFBYSxHQUFHO0FBQUEsTUFDdkIsQ0FBQztBQUFBLElBQ0g7QUFFQSxTQUFLLGFBQWEsR0FBRztBQUFBLEVBQ3ZCO0FBQUEsRUFFUSxhQUFhLEtBQW9FO0FBQ3ZGLHNCQUFrQixZQUFZO0FBQzVCLFlBQU0sS0FBSyxRQUFRLElBQUksS0FBSztBQUFBLElBQzlCLENBQUM7QUFBQSxFQUNIO0FBQUEsRUFFQSxNQUFjLFFBQVEsS0FBc0U7QUFDMUYsVUFBTSxtQkFBbUIsS0FBSyxvQkFBb0I7QUFDbEQsUUFBSSxDQUFDLE9BQU8sS0FBSyxlQUFlLHFCQUFxQixNQUFNO0FBQ3pEO0FBQUEsSUFDRjtBQUdBLFNBQUssY0FBYztBQUNuQixRQUFJO0FBQ0YsWUFBTSxTQUFTLE1BQU0sSUFBSSxnQkFBZ0I7QUFBQSxRQUN2QztBQUFBLFFBQ0EsZ0JBQWdCLEtBQUs7QUFBQSxNQUN2QixDQUFDO0FBSUQsVUFBSSxPQUFPLFdBQVc7QUFDcEIsY0FBTSxLQUFLLHVCQUF1QjtBQUFBLE1BQ3BDO0FBQUEsSUFDRixVQUFFO0FBQ0EsV0FBSyxjQUFjO0FBQUEsSUFDckI7QUFBQSxFQUNGO0FBQ0Y7IiwibmFtZXMiOltdfQ==
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3NldHRpbmdzLW1pZ3JhdGlvbi1jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENvbXBvbmVudCB0aGF0IG9mZmVycyBzZXR0aW5ncyB0aGlzIHBsdWdpbiB1c2VkIHRvIG93biB0byB0aGUgcGx1Z2luIHRoYXQgb3ducyB0aGVtIG5vdywgb25jZSwgdGhyb3VnaFxuICogdGhhdCBwbHVnaW4ncyBwdWJsaWMgQVBJLlxuICpcbiAqIFRoaXMgaXMgdGhlIG90aGVyIGhhbGYgb2Yge0BsaW5rIGNvbXBvbmVudHMvcGx1Z2luLXN1Z2dlc3Rpb24tY29tcG9uZW50IVBsdWdpblN1Z2dlc3Rpb25Db21wb25lbnR9LlxuICogVGhlIHN1Z2dlc3Rpb24gYXNrcyB0aGUgdXNlciB0byBpbnN0YWxsIHRoZSBwbHVnaW4gdGhhdCB0b29rIGEgZmVhdHVyZSBvdmVyOyB0aGlzIGNhcnJpZXMgdGhlIHNldHRpbmdzIHRoZXlcbiAqIGhhZCBjb25maWd1cmVkIGZvciBpdCBhY3Jvc3MsIHNvIHRha2luZyB0aGUgc3VnZ2VzdGlvbiBkb2VzIG5vdCBtZWFuIHJlLWVudGVyaW5nIGV2ZXJ5dGhpbmcgYnkgaGFuZC5cbiAqXG4gKiBBIHByb3Bvc2luZyBwbHVnaW4gbmV2ZXIgd3JpdGVzIGludG8gYW5vdGhlciBwbHVnaW4ncyBgZGF0YS5qc29uYC4gSXQgUFJPUE9TRVM6IHRoZSBvdGhlciBwbHVnaW4gb3ducyB0aGVcbiAqIHNldHRpbmdzLCBzbyBpdCBvd25zIHRoZSBkaWFsb2csIGFuZCB0aGUgdXNlciBhcHByb3ZlcywgZWRpdHMgb3IgZGVjbGluZXMuIE9ubHkgYW4gYXBwbGllZCBtaWdyYXRpb24gcmV0aXJlc1xuICogdGhlIHBlbmRpbmcgdmFsdWVzLlxuICpcbiAqIFRoZSBvZmZlciBpcyBtYWRlIHdoZW5ldmVyIGl0IENBTiBzdWNjZWVkLCB3aGljaCBuZWVkcyB0d28gaW5kZXBlbmRlbnQgdGhpbmdzIHRvIGhhdmUgaGFwcGVuZWQg4oCUIHRoZVxuICogcHJvdmlkZXIncyBBUEkgYmVpbmcgYXZhaWxhYmxlLCBhbmQgdGhpcyBwbHVnaW4ncyBvd24gc2V0dGluZ3MgaGF2aW5nIGFycml2ZWQgZnJvbSBkaXNrLiBFaXRoZXIgY2FuIGxhbmRcbiAqIGZpcnN0LCBzbyBib3RoIGVkZ2VzIGFyZSB3aXJlZCBhbmQgZWFjaCByZS1yZWFkcyB0aGUgY3VycmVudCBzdGF0ZSByYXRoZXIgdGhhbiBhc3N1bWluZyB0aGUgb3RoZXIgaGFzXG4gKiBhbHJlYWR5IGhhcHBlbmVkLlxuICovXG5cbmltcG9ydCB0eXBlIHsgQXBpQ29udHJhY3QgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXBpLWNvbnRyYWN0JztcbmltcG9ydCB0eXBlIHsgQXBwIH0gZnJvbSAnb2JzaWRpYW4nO1xuaW1wb3J0IHR5cGUgeyBQcm9taXNhYmxlIH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHsgaW52b2tlQXN5bmNTYWZlbHkgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvYXN5bmMnO1xuXG5pbXBvcnQgdHlwZSB7IFBsdWdpbkFwaVJlZiB9IGZyb20gJy4uL3BsdWdpbi9wbHVnaW4tYXBpLnRzJztcbmltcG9ydCB0eXBlIHsgU2V0dGluZ3NNaWdyYXRpb25BcGkgfSBmcm9tICcuLi9wbHVnaW4vc2V0dGluZ3MtbWlncmF0aW9uLWFwaS50cyc7XG5pbXBvcnQgdHlwZSB7IFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZSB9IGZyb20gJy4vcGx1Z2luLXNldHRpbmdzLWNvbXBvbmVudC50cyc7XG5cbmltcG9ydCB7IHdhdGNoUGx1Z2luQXBpIH0gZnJvbSAnLi4vcGx1Z2luL3BsdWdpbi1hcGkudHMnO1xuaW1wb3J0IHsgZ2V0U2V0dGluZ3NNaWdyYXRpb25BcGlDb250cmFjdCB9IGZyb20gJy4uL3BsdWdpbi9zZXR0aW5ncy1taWdyYXRpb24tYXBpLnRzJztcbmltcG9ydCB7IHJlZ2lzdGVyQXN5bmNFdmVudCB9IGZyb20gJy4vYXN5bmMtZXZlbnRzLWNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBDb21wb25lbnRFeCB9IGZyb20gJy4vY29tcG9uZW50LWV4LnRzJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB0aGUge0BsaW5rIFNldHRpbmdzTWlncmF0aW9uQ29tcG9uZW50fSBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAdHlwZVBhcmFtIFRNaWdyYXRhYmxlU2V0dGluZ3MgLSBUaGUgc2V0dGluZ3MgdGhpcyBwbHVnaW4gbWF5IGhhbmQgb3Zlci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXR0aW5nc01pZ3JhdGlvbkNvbXBvbmVudENvbnN0cnVjdG9yUGFyYW1zPFRNaWdyYXRhYmxlU2V0dGluZ3MgZXh0ZW5kcyBvYmplY3Q+IHtcbiAgLyoqXG4gICAqIFRoZSBzZW12ZXIgcmFuZ2Ugb2YgY29udHJhY3QgdmVyc2lvbnMgdGhpcyBwbHVnaW4gY29tcGlsZWQgYWdhaW5zdCwgZS5nLiBgJ14xJ2AuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEV2YWx1YXRlZCBieSBgY29tcGFyZS12ZXJzaW9uc2AsIHdoaWNoIGRvZXMgTk9UIGFjY2VwdCBhIGJhcmUgYCpgLiBTcGVsbCBcImFueSB2ZXJzaW9uXCIgYXMgYCc+PTAuMC4wJ2AuXG4gICAqL1xuICByZWFkb25seSBhcGlWZXJzaW9uUmFuZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE9ic2lkaWFuIGFwcCBpbnN0YW5jZS5cbiAgICovXG4gIHJlYWRvbmx5IGFwcDogQXBwO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udHJhY3QgdGhpcyBwbHVnaW4gZXhwZWN0cyBvZiB0aGUgcHJvdmlkZXIsIHdoaWNoIHdpbnMgb3ZlciB0aGUgcHJvdmlkZXIncyBvd24uIERlZmF1bHRzIHRvXG4gICAqIHtAbGluayBnZXRTZXR0aW5nc01pZ3JhdGlvbkFwaUNvbnRyYWN0fSwgd2hpY2ggY2hlY2tzIHRoZSBvbmUgbWV0aG9kIGEgbWlncmF0aW9uIGNhbGxzLlxuICAgKlxuICAgKiBLZXB0IHRvIHtAbGluayBTZXR0aW5nc01pZ3JhdGlvbkFwaX0gZGVsaWJlcmF0ZWx5IE5BUlJPVy4gQSBtaWdyYXRpb24gbmVlZHMgb25lIG1ldGhvZCB0aGF0IGhhcyBleGlzdGVkIHNpbmNlXG4gICAqIHRoZSBwcm92aWRlcidzIGZpcnN0IGNvbnRyYWN0IHZlcnNpb24sIHdoaWxlIHRoZSBzYW1lIHBsdWdpbiBtYXkgcmVhZCBvdGhlciBwYXJ0cyBvZiB0aGF0IEFQSSB0aHJvdWdoIGEgbXVjaFxuICAgKiBuZXdlciBvbmUuIERlY2xhcmluZyB0aGUgd2lkZXIgZXhwZWN0YXRpb24gaGVyZSB3b3VsZCByZWZ1c2UgdG8gb2ZmZXIgdGhlIG1pZ3JhdGlvbiB0byBhIHVzZXIgb24gYW4gb2xkZXJcbiAgICogcHJvdmlkZXIg4oCUIHdoaWNoIGlzIHByZWNpc2VseSB0aGUgdXNlciB3aG8gc3RpbGwgaGFzIHNldHRpbmdzIHRvIG1pZ3JhdGUuXG4gICAqL1xuICByZWFkb25seSBjb250cmFjdD86IEFwaUNvbnRyYWN0PFNldHRpbmdzTWlncmF0aW9uQXBpPFRNaWdyYXRhYmxlU2V0dGluZ3M+PjtcblxuICAvKipcbiAgICogUmVhZHMgdGhlIHZhbHVlcyBjdXJyZW50bHkgd2FpdGluZyB0byBiZSBoYW5kZWQgb3Zlci5cbiAgICpcbiAgICogQ2FsbGVkIGFmcmVzaCBvbiBldmVyeSBlZGdlIHJhdGhlciB0aGFuIG9uY2UsIHNvIGFuIGltcGxlbWVudGF0aW9uIHNpbXBseSByZWFkcyBpdHMgcGx1Z2luJ3Mgc2V0dGluZ3MuXG4gICAqIFJldHVybiBgbnVsbGAgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHBlbmRpbmcg4oCUIGFmdGVyIGEgbWlncmF0aW9uIGhhcyBiZWVuIGFwcGxpZWQsIG9yIG9uIGEgdmF1bHQgdGhhdCBuZXZlclxuICAgKiBoYWQgdGhlc2Ugc2V0dGluZ3MgY29uZmlndXJlZC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHZhbHVlcyB0byBwcm9wb3NlLCBvciBgbnVsbGAgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIG9mZmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgZ2V0UHJvcG9zZWRTZXR0aW5nczogKCkgPT4gbnVsbCB8IFRNaWdyYXRhYmxlU2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXR0aW5ncyBjb21wb25lbnQgb2YgdGhlIHBsdWdpbiBtYWtpbmcgdGhlIHByb3Bvc2FsLlxuICAgKlxuICAgKiBUYWtlbiBhcyBhIHdob2xlIGNvbXBvbmVudCByYXRoZXIgdGhhbiBhcyBhIGJhcmUgXCJyZWFkeVwiIGZsYWcgc28gdGhlIGhvc3QgY2Fubm90IGZvcmdldCB0byB3aXJlIHRoZSB3YWl0OlxuICAgKiB3aGF0ZXZlciB7QGxpbmsgZ2V0UHJvcG9zZWRTZXR0aW5nc30gcmVhZHMgaXMgbWVhbmluZ2xlc3MgdW50aWwgdGhpcyBjb21wb25lbnQgaGFzIHJlYWQgYGRhdGEuanNvbmAuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5TZXR0aW5nc0NvbXBvbmVudDogUGljazxQbHVnaW5TZXR0aW5nc0NvbXBvbmVudEJhc2U8b2JqZWN0PiwgJ29uJz47XG5cbiAgLyoqXG4gICAqIFRoZSBgbWFuaWZlc3QuaWRgIG9mIHRoZSBwbHVnaW4gdGhhdCBvd25zIHRoZXNlIHNldHRpbmdzIG5vdywgYXMgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpblxuICAgKiByZWdpc3RyeS5cbiAgICovXG4gIHJlYWRvbmx5IHByb3ZpZGVyUGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogUmVjb3JkcyB0aGF0IHRoZSBwZW5kaW5nIHZhbHVlcyBoYXZlIGJlZW4gaGFuZGVkIG92ZXIsIHNvIHRoZSBvZmZlciBpcyBub3QgbWFkZSBhZ2Fpbi5cbiAgICpcbiAgICogQ2FsbGVkIE9OTFkgd2hlbiB0aGUgdXNlciBhY3R1YWxseSBhcHBsaWVkIHRoZSBtaWdyYXRpb24uXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgcmV0aXJlbWVudCBpcyBwZXJzaXN0ZWQuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIEFuIGltcGxlbWVudGF0aW9uIG11c3QgUEVSU0lTVCB0aGUgcmV0aXJlbWVudCDigJQgYHBsdWdpblNldHRpbmdzQ29tcG9uZW50LmVkaXRBbmRTYXZlKOKApilgLCBub3RcbiAgICogYHNldFByb3BlcnR5KOKApilgLiBUaGUgbGF0dGVyIG9ubHkgZWRpdHMgdGhlIGluLW1lbW9yeSBzdGF0ZSwgc28gdGhlIHJldGlyZW1lbnQgaXMgZm9yZ290dGVuIG9uIHRoZSBuZXh0XG4gICAqIHJlbG9hZCBhbmQgdGhlIG1pZ3JhdGlvbiBpcyBvZmZlcmVkIGFnYWluIGZvcmV2ZXIuXG4gICAqL1xuICByZWFkb25seSByZXRpcmVQcm9wb3NlZFNldHRpbmdzOiAoKSA9PiBQcm9taXNhYmxlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgYG1hbmlmZXN0LmlkYCBvZiB0aGUgcGx1Z2luIG1ha2luZyB0aGUgcHJvcG9zYWwsIHNvIHRoZSBwcm92aWRlcidzIGRpYWxvZyBjYW4gc2F5IHdob3NlIHNldHRpbmdzIHRoZXNlXG4gICAqIGFyZS5cbiAgICovXG4gIHJlYWRvbmx5IHNvdXJjZVBsdWdpbklkOiBzdHJpbmc7XG59XG5cbi8qKlxuICogT2ZmZXJzIHNldHRpbmdzIHRoaXMgcGx1Z2luIHVzZWQgdG8gb3duIHRvIHRoZSBwbHVnaW4gdGhhdCBvd25zIHRoZW0gbm93LlxuICpcbiAqIEB0eXBlUGFyYW0gVE1pZ3JhdGFibGVTZXR0aW5ncyAtIFRoZSBzZXR0aW5ncyB0aGlzIHBsdWdpbiBtYXkgaGFuZCBvdmVyLlxuICovXG5leHBvcnQgY2xhc3MgU2V0dGluZ3NNaWdyYXRpb25Db21wb25lbnQ8VE1pZ3JhdGFibGVTZXR0aW5ncyBleHRlbmRzIG9iamVjdD4gZXh0ZW5kcyBDb21wb25lbnRFeCB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBpVmVyc2lvblJhbmdlOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXBwOiBBcHA7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29udHJhY3Q6IEFwaUNvbnRyYWN0PFNldHRpbmdzTWlncmF0aW9uQXBpPFRNaWdyYXRhYmxlU2V0dGluZ3M+PjtcbiAgcHJpdmF0ZSByZWFkb25seSBnZXRQcm9wb3NlZFNldHRpbmdzOiAoKSA9PiBudWxsIHwgVE1pZ3JhdGFibGVTZXR0aW5ncztcbiAgcHJpdmF0ZSBpc1Byb3Bvc2luZyA9IGZhbHNlO1xuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpblNldHRpbmdzQ29tcG9uZW50OiBQaWNrPFBsdWdpblNldHRpbmdzQ29tcG9uZW50QmFzZTxvYmplY3Q+LCAnb24nPjtcbiAgcHJpdmF0ZSByZWFkb25seSBwcm92aWRlclBsdWdpbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmV0aXJlUHJvcG9zZWRTZXR0aW5nczogKCkgPT4gUHJvbWlzYWJsZTx2b2lkPjtcbiAgcHJpdmF0ZSByZWFkb25seSBzb3VyY2VQbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIHtAbGluayBTZXR0aW5nc01pZ3JhdGlvbkNvbXBvbmVudH0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgY29uc3RydWN0b3IgcGFyYW1ldGVycy5cbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwYXJhbXM6IFNldHRpbmdzTWlncmF0aW9uQ29tcG9uZW50Q29uc3RydWN0b3JQYXJhbXM8VE1pZ3JhdGFibGVTZXR0aW5ncz4pIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXBpVmVyc2lvblJhbmdlID0gcGFyYW1zLmFwaVZlcnNpb25SYW5nZTtcbiAgICB0aGlzLmFwcCA9IHBhcmFtcy5hcHA7XG4gICAgdGhpcy5jb250cmFjdCA9IHBhcmFtcy5jb250cmFjdCA/PyBnZXRTZXR0aW5nc01pZ3JhdGlvbkFwaUNvbnRyYWN0PFRNaWdyYXRhYmxlU2V0dGluZ3M+KCk7XG4gICAgdGhpcy5nZXRQcm9wb3NlZFNldHRpbmdzID0gcGFyYW1zLmdldFByb3Bvc2VkU2V0dGluZ3M7XG4gICAgdGhpcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudCA9IHBhcmFtcy5wbHVnaW5TZXR0aW5nc0NvbXBvbmVudDtcbiAgICB0aGlzLnByb3ZpZGVyUGx1Z2luSWQgPSBwYXJhbXMucHJvdmlkZXJQbHVnaW5JZDtcbiAgICB0aGlzLnJldGlyZVByb3Bvc2VkU2V0dGluZ3MgPSBwYXJhbXMucmV0aXJlUHJvcG9zZWRTZXR0aW5ncztcbiAgICB0aGlzLnNvdXJjZVBsdWdpbklkID0gcGFyYW1zLnNvdXJjZVBsdWdpbklkO1xuICB9XG5cbiAgLyoqXG4gICAqIExvYWRzIHRoZSBjb21wb25lbnQsIHdpcmluZyBib3RoIGVkZ2VzIHRoYXQgY2FuIG1ha2UgYW4gb2ZmZXIgcG9zc2libGUuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgb25sb2FkKCk6IHZvaWQge1xuICAgIC8vIE5vdGhpbmcgaXMgZ2F0ZWQgb24gdGhlIHBlbmRpbmcgdmFsdWVzIEhFUkUuIFRoZSBzZXR0aW5ncyBjb21wb25lbnQgaXMgYSBzaWJsaW5nIHdob3NlIG93biBsb2FkIGlzIHN0aWxsXG4gICAgLy8gaW4gZmxpZ2h0IGF0IHRoaXMgcG9pbnQsIHNvIGl0IHN0aWxsIGhvbGRzIHRoZSBERUZBVUxUUyDigJQgcmVhZGluZyB0aGUgcGVuZGluZyB2YWx1ZXMgbm93IHdvdWxkIHNlZVxuICAgIC8vIG5vdGhpbmcgb24gZXhhY3RseSB0aGUgdmF1bHRzIHRoYXQgaGF2ZSBzb21ldGhpbmcsIHJlZ2lzdGVyIG5vIHdhdGNoLCBhbmQgbG9zZSB0aGUgbWlncmF0aW9uIGZvciBnb29kLlxuICAgIC8vIEJvdGggZWRnZXMgYXJlIHdpcmVkIGluc3RlYWQsIGFuZCBgcHJvcG9zZWAgcmUtcmVhZHMgdGhlIHZhbHVlcyBlYWNoIHRpbWUgaXQgcnVucy5cbiAgICBjb25zdCByZWYgPSB3YXRjaFBsdWdpbkFwaTxTZXR0aW5nc01pZ3JhdGlvbkFwaTxUTWlncmF0YWJsZVNldHRpbmdzPj4oe1xuICAgICAgYXBpVmVyc2lvblJhbmdlOiB0aGlzLmFwaVZlcnNpb25SYW5nZSxcbiAgICAgIGFwcDogdGhpcy5hcHAsXG4gICAgICBjb21wb25lbnQ6IHRoaXMsXG4gICAgICBjb250cmFjdDogdGhpcy5jb250cmFjdCxcbiAgICAgIHBsdWdpbklkOiB0aGlzLnByb3ZpZGVyUGx1Z2luSWRcbiAgICB9KTtcblxuICAgIC8vIERyaXZlbiBieSB0aGUgcmVmJ3Mgb3duIGV2ZW50IHJhdGhlciB0aGFuIGJ5IGB3aGVuQXZhaWxhYmxlKClgLCBkZWxpYmVyYXRlbHkuIFRoYXQgd2FpdCBibG9ja3MgZm9yIHRlblxuICAgIC8vIHNlY29uZHMgYW5kIHRoZW4gdGhyb3dzIHdoZW4gdGhlIHByb3ZpZGVyIGlzIHNpbXBseSBub3QgaW5zdGFsbGVkLCB3aGljaCB3b3VsZCBzdGFsbCB0aGlzIHBsdWdpbidzIGxvYWRcbiAgICAvLyBmb3IgZXZlcnkgdXNlciB3aG8gZGVjbGluZXMgdGhlIHN1Z2dlc3Rpb24uIFdhdGNoaW5nIGNvc3RzIG5vdGhpbmcgd2hpbGUgdGhlIHByb3ZpZGVyIGlzIGFic2VudCBhbmRcbiAgICAvLyBvZmZlcnMgdGhlIG1pZ3JhdGlvbiB0aGUgbW9tZW50IGl0IGFwcGVhcnMg4oCUIGluY2x1ZGluZyByaWdodCBhZnRlciB0aGUgdXNlciBpbnN0YWxscyBpdCBmcm9tIHRoZVxuICAgIC8vIHN1Z2dlc3Rpb24gYmFubmVyLlxuICAgIHJlZ2lzdGVyQXN5bmNFdmVudChcbiAgICAgIHRoaXMsXG4gICAgICByZWYub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UocmVmKTtcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIC8vIFRoZSBzZWNvbmQgZWRnZTogdGhpcyBwbHVnaW4ncyBvd24gc2V0dGluZ3MgYXJyaXZpbmcgZnJvbSBkaXNrLiBJdCBtYXkgZmlyZSBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGZpcnN0LlxuICAgIHJlZ2lzdGVyQXN5bmNFdmVudChcbiAgICAgIHRoaXMsXG4gICAgICB0aGlzLnBsdWdpblNldHRpbmdzQ29tcG9uZW50Lm9uKCdsb2FkU2V0dGluZ3MnLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHJlZik7XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLmhhbmRsZUNoYW5nZShyZWYpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVDaGFuZ2UocmVmOiBQbHVnaW5BcGlSZWY8U2V0dGluZ3NNaWdyYXRpb25BcGk8VE1pZ3JhdGFibGVTZXR0aW5ncz4+KTogdm9pZCB7XG4gICAgaW52b2tlQXN5bmNTYWZlbHkoYXN5bmMgKCkgPT4ge1xuICAgICAgYXdhaXQgdGhpcy5wcm9wb3NlKHJlZi52YWx1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb3Bvc2UoYXBpOiBudWxsIHwgU2V0dGluZ3NNaWdyYXRpb25BcGk8VE1pZ3JhdGFibGVTZXR0aW5ncz4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcm9wb3NlZFNldHRpbmdzID0gdGhpcy5nZXRQcm9wb3NlZFNldHRpbmdzKCk7XG4gICAgaWYgKCFhcGkgfHwgdGhpcy5pc1Byb3Bvc2luZyB8fCBwcm9wb3NlZFNldHRpbmdzID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQm90aCBlZGdlcyBjYW4gZmlyZSB3aGlsZSB0aGUgcHJvdmlkZXIncyBkaWFsb2cgaXMgb3BlbiwgYW5kIGVhY2ggd291bGQgcmFpc2UgYSBzZWNvbmQgb25lLlxuICAgIHRoaXMuaXNQcm9wb3NpbmcgPSB0cnVlO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcGkubWlncmF0ZVNldHRpbmdzKHtcbiAgICAgICAgcHJvcG9zZWRTZXR0aW5ncyxcbiAgICAgICAgc291cmNlUGx1Z2luSWQ6IHRoaXMuc291cmNlUGx1Z2luSWRcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBIGNhbmNlbCBpcyBub3QgYW4gYW5zd2VyLCBzbyB0aGUgdmFsdWVzIHN0YXkgcGVuZGluZyBhbmQgdGhlIG9mZmVyIGNvbWVzIGJhY2sg4oCUIG9uIHRoZSBuZXh0IGxvYWQsIG9yXG4gICAgICAvLyBhcyBzb29uIGFzIHRoZSBwcm92aWRlciByZWxvYWRzLiBPbmx5IGFuIGFwcGxpZWQgbWlncmF0aW9uIHJldGlyZXMgdGhlbS5cbiAgICAgIGlmIChyZXN1bHQuaXNBcHBsaWVkKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmV0aXJlUHJvcG9zZWRTZXR0aW5ncygpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLmlzUHJvcG9zaW5nID0gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0JBLFNBQVMseUJBQXlCO0FBTWxDLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsdUNBQXVDO0FBQ2hELFNBQVMsMEJBQTBCO0FBQ25DLFNBQVMsbUJBQW1CO0FBbUZyQixNQUFNLG1DQUF1RSxZQUFZO0FBQUEsRUFDN0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNULGNBQWM7QUFBQSxFQUNMO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT1YsWUFBWSxRQUEwRTtBQUMzRixVQUFNO0FBQ04sU0FBSyxrQkFBa0IsT0FBTztBQUM5QixTQUFLLE1BQU0sT0FBTztBQUNsQixTQUFLLFdBQVcsT0FBTyxZQUFZLGdDQUFxRDtBQUN4RixTQUFLLHNCQUFzQixPQUFPO0FBQ2xDLFNBQUssMEJBQTBCLE9BQU87QUFDdEMsU0FBSyxtQkFBbUIsT0FBTztBQUMvQixTQUFLLHlCQUF5QixPQUFPO0FBQ3JDLFNBQUssaUJBQWlCLE9BQU87QUFBQSxFQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS2dCLFNBQWU7QUFLN0IsVUFBTSxNQUFNLGVBQTBEO0FBQUEsTUFDcEUsaUJBQWlCLEtBQUs7QUFBQSxNQUN0QixLQUFLLEtBQUs7QUFBQSxNQUNWLFdBQVc7QUFBQSxNQUNYLFVBQVUsS0FBSztBQUFBLE1BQ2YsVUFBVSxLQUFLO0FBQUEsSUFDakIsQ0FBQztBQU9EO0FBQUEsTUFDRTtBQUFBLE1BQ0EsSUFBSSxHQUFHLFVBQVUsTUFBTTtBQUNyQixhQUFLLGFBQWEsR0FBRztBQUFBLE1BQ3ZCLENBQUM7QUFBQSxJQUNIO0FBR0E7QUFBQSxNQUNFO0FBQUEsTUFDQSxLQUFLLHdCQUF3QixHQUFHLGdCQUFnQixNQUFNO0FBQ3BELGFBQUssYUFBYSxHQUFHO0FBQUEsTUFDdkIsQ0FBQztBQUFBLElBQ0g7QUFFQSxTQUFLLGFBQWEsR0FBRztBQUFBLEVBQ3ZCO0FBQUEsRUFFUSxhQUFhLEtBQW9FO0FBQ3ZGLHNCQUFrQixZQUFZO0FBQzVCLFlBQU0sS0FBSyxRQUFRLElBQUksS0FBSztBQUFBLElBQzlCLENBQUM7QUFBQSxFQUNIO0FBQUEsRUFFQSxNQUFjLFFBQVEsS0FBc0U7QUFDMUYsVUFBTSxtQkFBbUIsS0FBSyxvQkFBb0I7QUFDbEQsUUFBSSxDQUFDLE9BQU8sS0FBSyxlQUFlLHFCQUFxQixNQUFNO0FBQ3pEO0FBQUEsSUFDRjtBQUdBLFNBQUssY0FBYztBQUNuQixRQUFJO0FBQ0YsWUFBTSxTQUFTLE1BQU0sSUFBSSxnQkFBZ0I7QUFBQSxRQUN2QztBQUFBLFFBQ0EsZ0JBQWdCLEtBQUs7QUFBQSxNQUN2QixDQUFDO0FBSUQsVUFBSSxPQUFPLFdBQVc7QUFDcEIsY0FBTSxLQUFLLHVCQUF1QjtBQUFBLE1BQ3BDO0FBQUEsSUFDRixVQUFFO0FBQ0EsV0FBSyxjQUFjO0FBQUEsSUFDckI7QUFBQSxFQUNGO0FBQ0Y7IiwibmFtZXMiOltdfQ==
|
|
@@ -2,10 +2,12 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* @file
|
|
4
4
|
*
|
|
5
|
-
* CSS classes used by the
|
|
5
|
+
* CSS classes used by the `@mnaoumov/obsidian-lib` library. {@link CssClass.LegacyLibraryName} keeps the legacy
|
|
6
|
+
* `obsidian-dev-utils` name beside {@link CssClass.LibraryName}, so stylesheets written for older copies still match.
|
|
6
7
|
*/
|
|
7
8
|
/**
|
|
8
|
-
* CSS classes used by the
|
|
9
|
+
* CSS classes used by the `@mnaoumov/obsidian-lib` library. {@link CssClass.LegacyLibraryName} keeps the legacy
|
|
10
|
+
* `obsidian-dev-utils` name beside {@link CssClass.LibraryName}, so stylesheets written for older copies still match.
|
|
9
11
|
*/
|
|
10
12
|
export declare enum CssClass {
|
|
11
13
|
/**
|
|
@@ -62,9 +64,15 @@ export declare enum CssClass {
|
|
|
62
64
|
*/
|
|
63
65
|
IsPlaceholder = "is-placeholder",
|
|
64
66
|
/**
|
|
65
|
-
*
|
|
67
|
+
* The legacy CSS class for the library name. Set beside {@link CssClass.LibraryName} on every element, for good,
|
|
68
|
+
* because stylesheets written for older copies select it, and so do this library's own styles, which also style
|
|
69
|
+
* the elements an older copy built.
|
|
66
70
|
*/
|
|
67
|
-
|
|
71
|
+
LegacyLibraryName = "obsidian-dev-utils",
|
|
72
|
+
/**
|
|
73
|
+
* A CSS class for the library name. Always set together with {@link CssClass.LegacyLibraryName}.
|
|
74
|
+
*/
|
|
75
|
+
LibraryName = "obsidian-lib",
|
|
68
76
|
/**
|
|
69
77
|
* Obsidian's class marking rendered-markdown content (used by `appendCodeBlock`).
|
|
70
78
|
*/
|