@mnaoumov/typescript-dev-toolkit 3.11.0 → 3.13.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/library-build.cjs +3 -3
- package/dist/lib/cjs/linters/markdownlint-content.cjs +27 -1
- package/dist/lib/cjs/linters/markdownlint-content.d.cts +30 -0
- package/dist/lib/cjs/linters/markdownlint-types/@types/markdownlint-cli2.d.cts +29 -2
- package/dist/lib/cjs/linters/markdownlint.cjs +4 -2
- package/dist/lib/cjs/version.cjs +56 -4
- package/dist/lib/esm/library-build.mjs +3 -3
- package/dist/lib/esm/linters/markdownlint-content.d.mts +30 -0
- package/dist/lib/esm/linters/markdownlint-content.mjs +26 -1
- package/dist/lib/esm/linters/markdownlint-types/@types/markdownlint-cli2.d.mts +29 -2
- package/dist/lib/esm/linters/markdownlint.mjs +4 -2
- package/dist/lib/esm/version.mjs +63 -5
- package/package.json +1 -1
|
@@ -125,7 +125,7 @@ const LIBRARY_REFERENCES_FILE_NAME = "library-references";
|
|
|
125
125
|
const REFERENCE_LIB_DIRECTIVE = ["<reference", "lib="].join(" ");
|
|
126
126
|
const REFERENCE_LIB_REG_EXP = /\/\/\/ <reference lib="(?<Lib>[^"]+)" \/>/gm;
|
|
127
127
|
const BARE_TYPE_IMPORT_REG_EXP = /^import type (?<Clause>.+?) from '(?<Specifier>[^.'][^']*)';$/gm;
|
|
128
|
-
const BARE_INLINE_IMPORT_TYPE_REG_EXP = /import\("(?<Specifier>[^."][^"]*)
|
|
128
|
+
const BARE_INLINE_IMPORT_TYPE_REG_EXP = /import\((?<Quote>["'])(?<Specifier>[^."'][^"']*)\k<Quote>\)/g;
|
|
129
129
|
const STATIC_IMPORT_REG_EXP = /from '(?<ImportPath>.+?)\.ts';/gm;
|
|
130
130
|
const DYNAMIC_IMPORT_REG_EXP = /import\((?<Quote>['"])(?<ImportPath>.+?)\.ts\k<Quote>\)/gm;
|
|
131
131
|
async function buildCleanLibrary() {
|
|
@@ -513,7 +513,7 @@ function toCtsContent(content) {
|
|
|
513
513
|
});
|
|
514
514
|
return (0, import_string.replaceAll)({
|
|
515
515
|
$string: ctsContent,
|
|
516
|
-
replacer:
|
|
516
|
+
replacer: "import($<Quote>$<Specifier>$<Quote>, { with: { 'resolution-mode': 'import' } })",
|
|
517
517
|
searchValue: BARE_INLINE_IMPORT_TYPE_REG_EXP
|
|
518
518
|
});
|
|
519
519
|
}
|
|
@@ -557,4 +557,4 @@ async function writeSubpathPackageJson(folder, packageJson) {
|
|
|
557
557
|
generateLibraryIndex,
|
|
558
558
|
runBuildSteps
|
|
559
559
|
});
|
|
560
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWJyYXJ5LWJ1aWxkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGUgYnVpbGQgcGlwZWxpbmUgb2YgYSBUeXBlU2NyaXB0IExJQlJBUlkgcGFja2FnZTogb25lIGBkaXN0L2xpYi97Y2pzLGVzbX1gIHRyZWUgb2YgdW5idW5kbGVkIG1vZHVsZXMgYmVzaWRlIGl0c1xuICogYC5kLmN0c2AgLyBgLmQubXRzYCBkZWNsYXJhdGlvbnMsIHRoZSBnZW5lcmF0ZWQgYGluZGV4LnRzYCBiYXJyZWxzLCBhbmQgdGhlIGdlbmVyYXRlZCBgcGFja2FnZS5qc29uYCBgZXhwb3J0c2AgbWFwLlxuICpcbiAqIEVhY2ggc3RlcCB3b3JrcyBvbiB0aGUgY3VycmVudCB3b3JraW5nIGZvbGRlciwgd2hpY2ggaXMgdGhlIHBhY2thZ2UgYmVpbmcgYnVpbHQuIEEgcmVwb3NpdG9yeSdzXG4gKiBgc2NyaXB0cy9idWlsZC0qLnRzYCBlbnRyeSBwb2ludHMgYXJlIHRoaW4gYHdyYXBDbGlUYXNrYCB3cmFwcGVycyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgaXRzIGBidWlsZGAgc2NyaXB0XG4gKiBydW5zIHRoZW0gaW4gb3JkZXIgdGhyb3VnaCB7QGxpbmsgcnVuQnVpbGRTdGVwc30uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBCdWlsZE9wdGlvbnMsXG4gIFBsdWdpblxufSBmcm9tICdlc2J1aWxkJztcbmltcG9ydCB0eXBlIHsgRGlyZW50IH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgdHlwZSB7XG4gIE5vZGUsXG4gIFByb2dyYW0sXG4gIFN5bWJvbCBhcyBUc1N5bWJvbCxcbiAgVHlwZUNoZWNrZXJcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7IGFzeW5jTWFwIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGlzRGVlcEVxdWFsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBiYXNlbmFtZSxcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSxcbiAgam9pbixcbiAgbm9ybWFsaXplSWZSZWxhdGl2ZSxcbiAgcmVsYXRpdmVcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgcmVwbGFjZUFsbCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9zdHJpbmcnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgY29udGV4dCB9IGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgbWtkaXIsXG4gIHJlYWRGaWxlLFxuICBybSxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtcbiAgcmVsYXRpdmUgYXMgcmVsYXRpdmVOYXRpdmUsXG4gIHJlc29sdmUgYXMgcmVzb2x2ZU5hdGl2ZVxufSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVByb2dyYW0sXG4gIGZvckVhY2hDaGlsZCxcbiAgaXNJZGVudGlmaWVyLFxuICBpc1N0cmluZ0xpdGVyYWwsXG4gIFN5bWJvbEZsYWdzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgdHlwZSB7IFBhY2thZ2VKc29uIH0gZnJvbSAnLi9ucG0udHMnO1xuXG5pbXBvcnQgeyBidWlsZENsZWFuIH0gZnJvbSAnLi9idWlsZC50cyc7XG5pbXBvcnQgeyBjaGFuZ2VFeHRlbnNpb25QbHVnaW4gfSBmcm9tICcuL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9jaGFuZ2UtZXh0ZW5zaW9uLXBsdWdpbi50cyc7XG5pbXBvcnQgeyBmaXhFc21QbHVnaW4gfSBmcm9tICcuL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9maXgtZXNtLXBsdWdpbi50cyc7XG5pbXBvcnQgeyBwcmVwcm9jZXNzUGx1Z2luIH0gZnJvbSAnLi9idW5kbGVycy9lc2J1aWxkLWltcGwvcHJlcHJvY2Vzcy1wbHVnaW4udHMnO1xuaW1wb3J0IHsgcGFyc2VUc0NvbmZpZyB9IGZyb20gJy4vY2hlY2stcHJvamVjdC10eXBlcy50cyc7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gJy4vY29kZS1nZW5lcmF0b3IudHMnO1xuaW1wb3J0IHsgcmVhZGRpclBvc2l4IH0gZnJvbSAnLi9mcy50cyc7XG5pbXBvcnQgeyB3cml0ZUpzb24gfSBmcm9tICcuL2pzb24udHMnO1xuaW1wb3J0IHsgbnBtUnVuT3B0aW9uYWwgfSBmcm9tICcuL25wbS1ydW4udHMnO1xuaW1wb3J0IHsgZWRpdFBhY2thZ2VKc29uIH0gZnJvbSAnLi9ucG0udHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi9wYWNrYWdlLW1hbmFnZXIudHMnO1xuaW1wb3J0IHsgUmVwb1BhdGhzIH0gZnJvbSAnLi9yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7IGV4ZWNGcm9tUm9vdCB9IGZyb20gJy4vcm9vdC50cyc7XG5cbi8qKlxuICogVGhlIGJhbm5lciBldmVyeSBlbWl0dGVkIGxpYnJhcnkgbW9kdWxlIG9wZW5zIHdpdGguXG4gKi9cbmV4cG9ydCBjb25zdCBMSUJSQVJZX0JBTk5FUiA9IGAvKlxuVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgRVNCVUlMRFxuaWYgeW91IHdhbnQgdG8gdmlldyB0aGUgc291cmNlLCBwbGVhc2UgdmlzaXQgdGhlIGdpdGh1YiByZXBvc2l0b3J5IG9mIHRoaXMgcGx1Z2luXG4qL1xuYDtcblxuLyoqXG4gKiBUaGUgc3RlcHMgb2YgYSBsaWJyYXJ5IGJ1aWxkLCBpbiB0aGUgb3JkZXIge0BsaW5rIHJ1bkJ1aWxkU3RlcHN9IHJ1bnMgdGhlbS5cbiAqL1xuZXhwb3J0IGNvbnN0IExJQlJBUllfQlVJTERfU1RFUFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAnYnVpbGQ6Y2xlYW4nLFxuICAnYnVpbGQ6Z2VuZXJhdGUtaW5kZXgnLFxuICAnYnVpbGQ6Y29tcGlsZScsXG4gICdidWlsZDp0eXBlcycsXG4gICdidWlsZDp2YWxpZGF0ZS1kZWNsYXJhdGlvbnMnLFxuICAnYnVpbGQ6bGliJyxcbiAgJ2J1aWxkOmdlbmVyYXRlLWV4cG9ydHMnLFxuICAnYnVpbGQ6dmFsaWRhdGUtZGVwZW5kZW5jaWVzJ1xuXTtcblxuLyoqXG4gKiBUaGUgZXhwb3J0IGNvbmRpdGlvbiBhIHJlcG9zaXRvcnkgaG9sZGluZyBzZXZlcmFsIHBhY2thZ2VzIG1hcHMgZXZlcnkgc3VicGF0aCBvbnRvIGl0cyBUeXBlU2NyaXB0IHNvdXJjZSB3aXRoLCBzb1xuICogYSBwYWNrYWdlIHRoZXJlIGNhbiBpbXBvcnQgYSBzaWJsaW5nIHBhY2thZ2UncyBzb3VyY2UgYmVmb3JlIGFueXRoaW5nIGlzIGJ1aWx0LiBQYXNzIGl0IHRvXG4gKiB7QGxpbmsgZ2VuZXJhdGVMaWJyYXJ5RXhwb3J0c30gdGhyb3VnaCB7QGxpbmsgR2VuZXJhdGVMaWJyYXJ5RXhwb3J0c09wdGlvbnMuc291cmNlQ29uZGl0aW9ufS5cbiAqL1xuZXhwb3J0IGNvbnN0IFNPVVJDRV9DT05ESVRJT04gPSAnQG1uYW91bW92L3NvdXJjZSc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGJ1aWxkTGlicmFyeX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRMaWJyYXJ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBwcmVwcm9jZXNzIHBsdWdpbiBmb3Igb25lIG91dHB1dCBmb3JtYXQuIERlZmF1bHRzIHRvIHRoZSBnZW5lcmljIG9uZSwgd2hpY2ggY2FycmllcyBub1xuICAgKiBlbnZpcm9ubWVudC1zcGVjaWZpYyBgcmVxdWlyZWAgcGF0Y2guXG4gICAqL1xuICByZWFkb25seSBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeT86IChpc0VzbTogYm9vbGVhbikgPT4gUGx1Z2luO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZW5lcmF0ZUxpYnJhcnlFeHBvcnRzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUxpYnJhcnlFeHBvcnRzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBFbnRyaWVzIGZvciBmaWxlcyB0aGF0IGFyZSBub3QgYnVpbHQgZnJvbSBhIHNvdXJjZSBmb2xkZXIgKGEgZm9sZGVyIG9mIHNoYXJlZCBgdHNjb25maWdgIHByZXNldHMsIGFtYmllbnQgYC5kLnRzYFxuICAgKiBmaWxlcyksIGtleWVkIGJ5IHN1YnBhdGguIFRoZXkgZ28gaW50byB0aGUgbWFwIGFmdGVyIHRoZSBnZW5lcmF0ZWQgZW50cmllcywgYXMgZ2l2ZW4sIGFuZCBjb3VudCB0b3dhcmQgaXRzIGNoYW5nZVxuICAgKiBjaGVjazsgbm8gc3VicGF0aCBzdHViIGlzIHdyaXR0ZW4gZm9yIHRoZW0uIEEga2V5IGEgc291cmNlIGZvbGRlciBhbHJlYWR5IGdlbmVyYXRlcyB0aHJvd3MuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsRXhwb3J0cz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFBhY2thZ2VKc29uLkV4cG9ydHM+PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQW4gZXhwb3J0IGNvbmRpdGlvbiB0byBwdXQgZmlyc3QgaW4gZXZlcnkgZW50cnksIG1hcHBpbmcgdGhlIHN1YnBhdGggb250byBpdHMgVHlwZVNjcmlwdCBzb3VyY2UuIE9ubHkgYVxuICAgKiByZXBvc2l0b3J5IGhvbGRpbmcgc2V2ZXJhbCBwYWNrYWdlcyB0aGF0IGltcG9ydCBlYWNoIG90aGVyIG5lZWRzIG9uZTsgbm90aGluZyBvdXRzaWRlIGl0IHNldHMgdGhlIGNvbmRpdGlvbiwgYW5kXG4gICAqIHRoZSBzb3VyY2VzIGl0IHBvaW50cyBhdCBkbyBub3Qgc2hpcCwgc28gdGhlIHB1Ymxpc2ggaGFzIHRvIHN0cmlwIGl0IGFnYWluLiBPbWl0dGVkLCB0aGUgbWFwIGhhcyBub25lLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlQ29uZGl0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZW5lcmF0ZUxpYnJhcnlJbmRleH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVMaWJyYXJ5SW5kZXhPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNvdXJjZSBtb2R1bGVzIG9yIGZvbGRlcnMgdG8gbGVhdmUgb2ZmIHRoZSBnZW5lcmF0ZWQgYmFycmVscywgYXMgcGF0aHMgZnJvbSB0aGUgcGFja2FnZSByb290XG4gICAqIChgc3JjL2RlbW8tdmF1bHQtYnV0dG9ucy50c2AsIGBzcmMvdGVzdC1ydW5uZXJzL2ludGVncmF0aW9uYCkuIEEgbW9kdWxlIHRoYXQgbmVlZHMgYW4gb3B0aW9uYWwgcGVlciwgb3Igb25lIHRoYXRcbiAgICogcnVucyBjb2RlIGF0IGxvYWQgdGltZSB3aGljaCBvbmx5IHdvcmtzIGluc2lkZSBhIHRlc3QgcnVubmVyLCBnb2VzIGhlcmUsIHNvIGltcG9ydGluZyBhIGJhcnJlbCBuZXZlciBsb2FkcyBpdC4gSXQgaXNcbiAgICogc3RpbGwgYnVpbHQgYW5kIHN0YXlzIHJlYWNoYWJsZSB0aHJvdWdoIGl0cyBvd24gc3VicGF0aCBleHBvcnQuIEEgcGF0aCB0aGF0IG5hbWVzIG5vdGhpbmcgdGhlIGJhcnJlbHMgd291bGQgZXhwb3J0XG4gICAqIHRocm93cywgc28gYSByZW5hbWUgY2Fubm90IHF1aWV0bHkgcHV0IHRoZSBtb2R1bGUgYmFjay5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVGcm9tSW5kZXg/OiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbn1cblxudHlwZSBNb2R1bGVGb3JtYXQgPSAnY2pzJyB8ICdlc20nO1xuXG5jb25zdCBERUNMQVJBVElPTl9SRUZFUkVOQ0VfVFlQRVMgPSBuZXcgU2V0KFsnbm9kZSddKTtcblxuLy8gVGhlIGxpYnMgdGhhdCBkZXNjcmliZSBhIGhvc3QncyBnbG9iYWxzIHJhdGhlciB0aGFuIHRoZSBsYW5ndWFnZSwgd2hpY2ggY29uc3VtZXJzIGNvbmZsaWN0IG92ZXIuIEVhY2ggZGVjbGFyYXRpb25cbi8vIGdldHMgdGhlIG9uZXMgaXQgdXNlczsgZXZlcnkgb3RoZXIgbGliIGlzIHNoYXJlZCB0aHJvdWdoIGBsaWJyYXJ5LXJlZmVyZW5jZXNgLlxuY29uc3QgRU5WSVJPTk1FTlRfTElCX1BSRUZJWEVTOiByZWFkb25seSBzdHJpbmdbXSA9IFsnZG9tJywgJ3NjcmlwdGhvc3QnLCAnd2Vid29ya2VyJ107XG5jb25zdCBOT0RFX1RZUEVTX1BBVEhfU0VHTUVOVCA9ICcvbm9kZV9tb2R1bGVzL0B0eXBlcy9ub2RlLyc7XG5jb25zdCBMSUJfUkVQTEFDRU1FTlRfUkVHX0VYUCA9IC9cXC9ub2RlX21vZHVsZXNcXC9AdHlwZXNjcmlwdFxcL2xpYi0oPzxMaWI+W14vXSspXFwvKD88U3ViTGliPi4rKVxcLmRcXC50cyQvO1xuXG4vLyBUaGUgZGVjbGFyYXRpb24gdGhhdCBjYXJyaWVzIG9ubHkgdGhlIGBsaWJgIGFuZCBgdHlwZXNgIHJlZmVyZW5jZXMuIEV2ZXJ5IGRlY2xhcmF0aW9uIGJ1dCB0aGUgcm9vdCBvbmUgcmVmZXJlbmNlc1xuLy8gaXQsIHJhdGhlciB0aGFuIHRoZSByb290IGJhcnJlbCwgd2hpY2ggd291bGQgbG9hZCBldmVyeSBtb2R1bGUgb2YgdGhlIHBhY2thZ2UsIG9wdGlvbmFsIHBlZXJzJyB0eXBlcyBpbmNsdWRlZC5cbmNvbnN0IExJQlJBUllfUkVGRVJFTkNFU19GSUxFX05BTUUgPSAnbGlicmFyeS1yZWZlcmVuY2VzJztcbi8vIFNwZWxsZWQgYXBhcnQgb24gcHVycG9zZToge0BsaW5rIGNvbGxlY3RBbGxMaWJzfSBzY2FucyBldmVyeSBzb3VyY2UgZmlsZSBvZiB0aGUgcGFja2FnZSBiZWluZyBidWlsdCBmb3IgdGhlXG4vLyBkaXJlY3RpdmUsIHRoaXMgb25lIGluY2x1ZGVkLCBzbyBhIGxpdGVyYWwgb25lIGhlcmUgd291bGQgYmUgcmVhZCBhcyBhIGxpYiB0aGlzIHBhY2thZ2UgbmVlZHMuXG5jb25zdCBSRUZFUkVOQ0VfTElCX0RJUkVDVElWRSA9IFsnPHJlZmVyZW5jZScsICdsaWI9J10uam9pbignICcpO1xuY29uc3QgUkVGRVJFTkNFX0xJQl9SRUdfRVhQID0gL1xcL1xcL1xcLyA8cmVmZXJlbmNlIGxpYj1cIig/PExpYj5bXlwiXSspXCIgXFwvPi9nbTtcblxuLy8gQSBiYXJlLXNwZWNpZmllciAobm9uLXJlbGF0aXZlKSB0eXBlLW9ubHkgaW1wb3J0LCBlLmcuIGBpbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO2AuXG5jb25zdCBCQVJFX1RZUEVfSU1QT1JUX1JFR19FWFAgPSAvXmltcG9ydCB0eXBlICg/PENsYXVzZT4uKz8pIGZyb20gJyg/PFNwZWNpZmllcj5bXi4nXVteJ10qKSc7JC9nbTtcblxuLy8gQSBiYXJlLXNwZWNpZmllciAobm9uLXJlbGF0aXZlKSBpbmxpbmUgaW1wb3J0IHR5cGUgbm9kZSwgZS5nLiBgaW1wb3J0KFwidHlwZS1mZXN0XCIpLlByb21pc2FibGVgLlxuY29uc3QgQkFSRV9JTkxJTkVfSU1QT1JUX1RZUEVfUkVHX0VYUCA9IC9pbXBvcnRcXChcIig/PFNwZWNpZmllcj5bXi5cIl1bXlwiXSopXCJcXCkvZztcblxuY29uc3QgU1RBVElDX0lNUE9SVF9SRUdfRVhQID0gL2Zyb20gJyg/PEltcG9ydFBhdGg+Lis/KVxcLnRzJzsvZ207XG5cbi8vIElubGluZSBpbXBvcnQtdHlwZSBub2RlcyAoYHR5cGVvZiBpbXBvcnQoJy4vZm9vLnRzJylgKSBwcmVzZXJ2ZSB0aGUgc291cmNlIHF1b3RlIHN0eWxlLlxuLy8gSGFuZC1hdXRob3JlZCBgLmQudHNgIGZpbGVzIGVtaXQgc2luZ2xlIHF1b3RlczsgdHNjLWdlbmVyYXRlZCBkZWNsYXJhdGlvbnMgZW1pdCBkb3VibGUgcXVvdGVzLlxuLy8gQ2FwdHVyZSB0aGUgcXVvdGUgYW5kIHJldXNlIGl0IGluIHRoZSByZXBsYWNlbWVudCBzbyBib3RoIHN0eWxlcyBhcmUgcmV3cml0dGVuLlxuY29uc3QgRFlOQU1JQ19JTVBPUlRfUkVHX0VYUCA9IC9pbXBvcnRcXCgoPzxRdW90ZT5bJ1wiXSkoPzxJbXBvcnRQYXRoPi4rPylcXC50c1xcazxRdW90ZT5cXCkvZ207XG5cbmVudW0gR2VuZXJhdGVJbmRleFJlc3VsdCB7XG4gIFNraXBwZWQgPSAnc2tpcHBlZCcsXG4gIFN1Y2Nlc3MgPSAnc3VjY2Vzcydcbn1cblxuaW50ZXJmYWNlIEFkZEVudmlyb25tZW50R2xvYmFsc1BhcmFtcyB7XG4gIHJlYWRvbmx5IGxpYnM6IFNldDxzdHJpbmc+O1xuICByZWFkb25seSBwcm9ncmFtOiBQcm9ncmFtO1xuICByZWFkb25seSBzeW1ib2w6IFRzU3ltYm9sO1xuICByZWFkb25seSB0eXBlczogU2V0PHN0cmluZz47XG59XG5cbmludGVyZmFjZSBCdWlsZExpYnJhcnlGb3JtYXRQYXJhbXMge1xuICByZWFkb25seSBmb3JtYXQ6IE1vZHVsZUZvcm1hdDtcbiAgcmVhZG9ubHkgbGliRmlsZXM6IHN0cmluZ1tdO1xuICByZWFkb25seSBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeTogKGlzRXNtOiBib29sZWFuKSA9PiBQbHVnaW47XG59XG5cbmludGVyZmFjZSBCdWlsZFJlZmVyZW5jZVBhdGhEaXJlY3RpdmVQYXJhbXMge1xuICByZWFkb25seSBkZWNsYXJhdGlvbkZpbGVQYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV4dGVuc2lvbjogc3RyaW5nO1xuICByZWFkb25seSBtb2R1bGVEaXJlY3Rvcnk6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIENvbGxlY3RFbnZpcm9ubWVudERpcmVjdGl2ZXNQYXJhbXMge1xuICByZWFkb25seSBhdmFpbGFibGVUeXBlczogcmVhZG9ubHkgc3RyaW5nW107XG4gIHJlYWRvbmx5IGRlY2xhcmF0aW9uRmlsZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG5pbnRlcmZhY2UgR2VuZXJhdGVJbmRleFBhcmFtcyB7XG4gIHJlYWRvbmx5IGV4Y2x1ZGVkUGF0aHM6IFJlYWRvbmx5U2V0PHN0cmluZz47XG4gIHJlYWRvbmx5IGZvbGRlcjogc3RyaW5nO1xuICByZWFkb25seSB1bm1hdGNoZWRQYXRoczogU2V0PHN0cmluZz47XG59XG5cbmludGVyZmFjZSBTZXRFeHBvcnRQYXJhbXMge1xuICByZWFkb25seSBleHBvcnRDb25kaXRpb25zOiBQYWNrYWdlSnNvbi5FeHBvcnRDb25kaXRpb25zO1xuICByZWFkb25seSBpc1dpbGRjYXJkOiBib29sZWFuO1xuICByZWFkb25seSBzb3VyY2VDb25kaXRpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgc3JjRm9sZGVyOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBUb0Rpc3RQYXRoUGFyYW1zIHtcbiAgcmVhZG9ubHkgZm9ybWF0OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGltcG9ydFBhdGg6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgZXZlcnl0aGluZyBhbiBlYXJsaWVyIGJ1aWxkIGxlZnQ6IGBkaXN0L2AsIHRoZSBnZW5lcmF0ZWQgYGluZGV4LnRzYCBiYXJyZWxzLCB0aGUgYC5kLnRzYCBmaWxlcyBgdHNjYCB3cm90ZVxuICogYmVzaWRlIHRoZSBzb3VyY2VzIChoYW5kLWF1dGhvcmVkIG9uZXMgdW5kZXIgYEB0eXBlc2Agc3RheSksIGFuZCB0aGUgcGVyLXN1YnBhdGggYHBhY2thZ2UuanNvbmAgc3R1YnMuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIGV2ZXJ5dGhpbmcgaGFzIGJlZW4gcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkQ2xlYW5MaWJyYXJ5KCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBidWlsZENsZWFuKCk7XG4gIGZvciAoY29uc3QgZmlsZSBvZiBhd2FpdCByZWFkZGlyUG9zaXgoUmVwb1BhdGhzLlNyYywgeyByZWN1cnNpdmU6IHRydWUgfSkpIHtcbiAgICBpZiAoYmFzZW5hbWUoZmlsZSkgPT09IFJlcG9QYXRocy5JbmRleFRzIGFzIHN0cmluZykge1xuICAgICAgYXdhaXQgcm0oam9pbihSZXBvUGF0aHMuU3JjLCBmaWxlKSk7XG4gICAgfVxuXG4gICAgaWYgKGZpbGUuZW5kc1dpdGgoUmVwb1BhdGhzLkR0c0V4dGVuc2lvbikgJiYgIWZpbGUuc3BsaXQoJy8nKS5pbmNsdWRlcyhSZXBvUGF0aHMuVHlwZXMpKSB7XG4gICAgICBhd2FpdCBybShqb2luKFJlcG9QYXRocy5TcmMsIGZpbGUpKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGNvbnN0IGZpbGUgb2YgYXdhaXQgcmVhZGRpclBvc2l4KFJlcG9QYXRocy5DdXJyZW50Rm9sZGVyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KSkge1xuICAgIGlmICgoYmFzZW5hbWUoZmlsZSkgIT09IFJlcG9QYXRocy5QYWNrYWdlSnNvbiBhcyBzdHJpbmcpIHx8IChmaWxlID09PSBSZXBvUGF0aHMuUGFja2FnZUpzb24gYXMgc3RyaW5nKSB8fCBmaWxlLnN0YXJ0c1dpdGgoUmVwb1BhdGhzLk5vZGVNb2R1bGVzKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgYXdhaXQgcm0oZmlsZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBCdWlsZHMgZXZlcnkgc291cmNlIG1vZHVsZSwgdW5idW5kbGVkLCBpbnRvIGBkaXN0L2xpYi9janNgIChgLmNqc2ApIGFuZCBgZGlzdC9saWIvZXNtYCAoYC5tanNgKS5cbiAqXG4gKiBUaGUgb3V0cHV0IGZvbGRlcnMgbXVzdCBhbHJlYWR5IGV4aXN0OyB7QGxpbmsgYnVpbGRMaWJyYXJ5VHlwZXN9IGNyZWF0ZXMgdGhlbS5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBidWlsZCBvcHRpb25zLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIGJvdGggZm9ybWF0cyBoYXZlIGJlZW4gYnVpbHQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZExpYnJhcnkob3B0aW9uczogQnVpbGRMaWJyYXJ5T3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgcHJlcHJvY2Vzc1BsdWdpbkZhY3RvcnkgPSAoaXNFc206IGJvb2xlYW4pOiBQbHVnaW4gPT4gcHJlcHJvY2Vzc1BsdWdpbih7IGlzRXNtIH0pIH0gPSBvcHRpb25zO1xuICBjb25zdCBsaWJGaWxlcyA9IGF3YWl0IGdldExpYkZpbGVzKCk7XG4gIGF3YWl0IGJ1aWxkTGlicmFyeUZvcm1hdCh7IGZvcm1hdDogJ2NqcycsIGxpYkZpbGVzLCBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeSB9KTtcbiAgYXdhaXQgYnVpbGRMaWJyYXJ5Rm9ybWF0KHsgZm9ybWF0OiAnZXNtJywgbGliRmlsZXMsIHByZXByb2Nlc3NQbHVnaW5GYWN0b3J5IH0pO1xufVxuXG4vKipcbiAqIEVtaXRzIHRoZSBkZWNsYXJhdGlvbnMgd2l0aCBgdHNjIC0tcHJvamVjdCAuL3RzY29uZmlnLnR5cGVzLmpzb25gLCB0aGVuIGNvcGllcyBlYWNoIG9uZSBpbnRvIGBkaXN0L2xpYmAgdHdpY2U6IGFzIGFcbiAqIGAuZC5jdHNgIHdob3NlIHJlbGF0aXZlIGltcG9ydHMgbmFtZSBgLmNqc2AgZmlsZXMgYW5kIHdob3NlIGJhcmUgdHlwZSBpbXBvcnRzIGNhcnJ5IGByZXNvbHV0aW9uLW1vZGU6IGltcG9ydGAsIGFuZFxuICogYXMgYSBgLmQubXRzYCB3aG9zZSByZWxhdGl2ZSBpbXBvcnRzIG5hbWUgYC5tanNgIGZpbGVzLlxuICpcbiAqIFRoZSBsaWJyYXJ5J3Mgcm9vdCBkZWNsYXJhdGlvbiAoYGxpYnJhcnkudHNgIHdoZXJlIHRoZSBwYWNrYWdlIGhhcyBvbmUsIG90aGVyd2lzZSB0aGUgZ2VuZXJhdGVkIGBpbmRleC50c2ApIGNhcnJpZXNcbiAqIGV2ZXJ5IGBsaWJgIGFuZCBgdHlwZXNgIHJlZmVyZW5jZSB0aGUgcGFja2FnZSBuZWVkcy4gRXZlcnkgb3RoZXIgZGVjbGFyYXRpb24gcmVmZXJlbmNlcyBhIGBsaWJyYXJ5LXJlZmVyZW5jZXNgXG4gKiBkZWNsYXJhdGlvbiBiZXNpZGUgaXQgYnkgcGF0aCwgbmV2ZXIgdGhlIHJvb3Q6IHRoZSByb290IGJhcnJlbCByZS1leHBvcnRzIGV2ZXJ5IG1vZHVsZSwgc28gcmVmZXJlbmNpbmcgaXQgbWFkZSBlYWNoXG4gKiBzdWJwYXRoIGxvYWQgdGhlIHdob2xlIHBhY2thZ2UsIGFuZCBhIGNvbnN1bWVyIHR5cGUtY2hlY2tpbmcgd2l0aCBgc2tpcExpYkNoZWNrOiBmYWxzZWAgdGhlbiBuZWVkZWQgZXZlcnkgb3B0aW9uYWxcbiAqIHBlZXIgaW5zdGFsbGVkLlxuICpcbiAqIGBsaWJyYXJ5LXJlZmVyZW5jZXNgIGNhcnJpZXMgb25seSB0aGUgbGlicyB0aGF0IGRlc2NyaWJlIHRoZSBsYW5ndWFnZSAoYGVzMjAyMmAsIGBlc25leHQuZGlzcG9zYWJsZWApLCB3aGljaCBub1xuICogY29uc3VtZXIgY29uZmxpY3RzIHdpdGguIFRoZSBvbmVzIHRoYXQgZGVzY3JpYmUgYSBob3N0IChgZG9tYCwgYGRvbS5pdGVyYWJsZWAsIGB3ZWJ3b3JrZXJgKSBhbmQgYHR5cGVzPVwibm9kZVwiYCBnb1xuICogb25seSBpbnRvIHRoZSBkZWNsYXJhdGlvbnMgdGhhdCBuYW1lIG9uZSBvZiB0aGVpciBnbG9iYWxzLCBmb3VuZCBieSByZXNvbHZpbmcgZXZlcnkgbmFtZSBpbiB0aGUgZW1pdHRlZFxuICogZGVjbGFyYXRpb25zIHdpdGggdGhlIHR5cGUgY2hlY2tlci4gT3RoZXJ3aXNlIGEgYnJvd3NlciBjb25zdW1lciBvZiBhIHB1cmUgc3VicGF0aCBnb3QgYWxsIG9mIGBAdHlwZXMvbm9kZWAsIGFuZCBpdHNcbiAqIGBzZXRUaW1lb3V0YCByZXR1cm5lZCBgTm9kZUpTLlRpbWVvdXRgLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgZGVjbGFyYXRpb25zIGhhdmUgYmVlbiB3cml0dGVuLlxuICogQHRocm93cyBJZiBhIHNvdXJjZSBtb2R1bGUgaXMgbmFtZWQgYGxpYnJhcnktcmVmZXJlbmNlc2AsIHdoaWNoIHdvdWxkIGNvbGxpZGUgd2l0aCB0aGUgZ2VuZXJhdGVkIGRlY2xhcmF0aW9uLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRMaWJyYXJ5VHlwZXMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmIChleGlzdHNTeW5jKGpvaW4oUmVwb1BhdGhzLlNyYywgYCR7TElCUkFSWV9SRUZFUkVOQ0VTX0ZJTEVfTkFNRX0ke1JlcG9QYXRocy5Uc0V4dGVuc2lvbn1gKSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHNyYy8ke0xJQlJBUllfUkVGRVJFTkNFU19GSUxFX05BTUV9JHtSZXBvUGF0aHMuVHNFeHRlbnNpb259IGNvbGxpZGVzIHdpdGggdGhlIGdlbmVyYXRlZCBkZWNsYXJhdGlvbiBvZiB0aGUgc2FtZSBuYW1lLmApO1xuICB9XG5cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFsuLi5yZXNvbHZlVG9vbENvbW1hbmQoeyB0b29sOiAndHNjJyB9KSwgJy0tcHJvamVjdCcsICcuL3RzY29uZmlnLnR5cGVzLmpzb24nXSk7XG5cbiAgY29uc3QgbGlicmFyeUZpbGVOYW1lID0gZXhpc3RzU3luYyhqb2luKFJlcG9QYXRocy5TcmMsICdsaWJyYXJ5LnRzJykpID8gJ2xpYnJhcnknIDogJ2luZGV4JztcbiAgY29uc3QgYWxsTGlicyA9IGF3YWl0IGNvbGxlY3RBbGxMaWJzKCk7XG4gIGNvbnN0IGFsbFR5cGVzID0gY29sbGVjdEFsbFR5cGVzKCk7XG4gIGNvbnN0IGRpcmVjdGl2ZXMgPSBidWlsZEFsbFJlZmVyZW5jZUxpYkRpcmVjdGl2ZXMoYWxsTGlicykgKyBidWlsZEFsbFJlZmVyZW5jZVR5cGVzRGlyZWN0aXZlcyhhbGxUeXBlcyk7XG4gIC8vIE9ubHkgdGhlIGxpYnMgbm8gY29uc3VtZXIgY29uZmxpY3RzIHdpdGguIFRoZSBlbnZpcm9ubWVudCBnbG9iYWxzIGdvIHRvIHRoZSBkZWNsYXJhdGlvbnMgdGhhdCB1c2UgdGhlbS5cbiAgY29uc3Qgc2hhcmVkRGlyZWN0aXZlcyA9IGJ1aWxkQWxsUmVmZXJlbmNlTGliRGlyZWN0aXZlcyhhbGxMaWJzLmZpbHRlcigobGliKSA9PiAhaXNFbnZpcm9ubWVudExpYihsaWIpKSk7XG5cbiAgYXdhaXQgbWtkaXIoam9pbihSZXBvUGF0aHMuRGlzdExpYiwgUmVwb1BhdGhzLkNqcyksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCBta2Rpcihqb2luKFJlcG9QYXRocy5EaXN0TGliLCBSZXBvUGF0aHMuRXNtKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IHdyaXRlRmlsZShqb2luKFJlcG9QYXRocy5EaXN0TGliLCBSZXBvUGF0aHMuQ2pzLCBMSUJSQVJZX1JFRkVSRU5DRVNfRklMRV9OQU1FICsgUmVwb1BhdGhzLkRjdHNFeHRlbnNpb24pLCBzaGFyZWREaXJlY3RpdmVzKTtcbiAgYXdhaXQgd3JpdGVGaWxlKGpvaW4oUmVwb1BhdGhzLkRpc3RMaWIsIFJlcG9QYXRocy5Fc20sIExJQlJBUllfUkVGRVJFTkNFU19GSUxFX05BTUUgKyBSZXBvUGF0aHMuRG10c0V4dGVuc2lvbiksIHNoYXJlZERpcmVjdGl2ZXMpO1xuXG4gIGNvbnN0IHNyY0ZpbGVzID0gYXdhaXQgcmVhZGRpclBvc2l4KFJlcG9QYXRocy5TcmMsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCBkZWNsYXJhdGlvbkZpbGVzID0gc3JjRmlsZXMuZmlsdGVyKChmaWxlKSA9PiBmaWxlLmVuZHNXaXRoKFJlcG9QYXRocy5EdHNFeHRlbnNpb24pICYmICFmaWxlLnN0YXJ0c1dpdGgoUmVwb1BhdGhzLlRlc3RIZWxwZXJzKSk7XG4gIGNvbnN0IGVudmlyb25tZW50RGlyZWN0aXZlcyA9IGNvbGxlY3RFbnZpcm9ubWVudERpcmVjdGl2ZXMoeyBhdmFpbGFibGVUeXBlczogYWxsVHlwZXMsIGRlY2xhcmF0aW9uRmlsZXMgfSk7XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGRlY2xhcmF0aW9uRmlsZXMpIHtcbiAgICBjb25zdCBmb2xkZXIgPSBkaXJuYW1lKGZpbGUpO1xuICAgIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShmaWxlLCBSZXBvUGF0aHMuRHRzRXh0ZW5zaW9uKTtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoam9pbihSZXBvUGF0aHMuU3JjLCBmaWxlKSwgJ3V0Zi04Jyk7XG5cbiAgICBjb25zdCBjdHNQYXRoID0gam9pbihSZXBvUGF0aHMuRGlzdExpYiwgUmVwb1BhdGhzLkNqcywgZm9sZGVyLCBuYW1lICsgUmVwb1BhdGhzLkRjdHNFeHRlbnNpb24pO1xuICAgIGNvbnN0IG10c1BhdGggPSBqb2luKFJlcG9QYXRocy5EaXN0TGliLCBSZXBvUGF0aHMuRXNtLCBmb2xkZXIsIG5hbWUgKyBSZXBvUGF0aHMuRG10c0V4dGVuc2lvbik7XG5cbiAgICBhd2FpdCBta2RpcihkaXJuYW1lKGN0c1BhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBhd2FpdCBta2RpcihkaXJuYW1lKG10c1BhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICAgIGxldCBjdHNDb250ZW50ID0gdG9DdHNDb250ZW50KGNvbnRlbnQpO1xuICAgIGxldCBtdHNDb250ZW50ID0gdG9NdHNDb250ZW50KGNvbnRlbnQpO1xuXG4gICAgaWYgKG5hbWUgPT09IGxpYnJhcnlGaWxlTmFtZSAmJiBmb2xkZXIgPT09ICcuJykge1xuICAgICAgY3RzQ29udGVudCA9IGRpcmVjdGl2ZXMgKyBjdHNDb250ZW50O1xuICAgICAgbXRzQ29udGVudCA9IGRpcmVjdGl2ZXMgKyBtdHNDb250ZW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBmaWxlRGlyZWN0aXZlcyA9IGVudmlyb25tZW50RGlyZWN0aXZlcy5nZXQoZmlsZSkgPz8gJyc7XG4gICAgICBjdHNDb250ZW50ID0gYnVpbGRSZWZlcmVuY2VQYXRoRGlyZWN0aXZlKHsgZGVjbGFyYXRpb25GaWxlUGF0aDogY3RzUGF0aCwgZXh0ZW5zaW9uOiBSZXBvUGF0aHMuRGN0c0V4dGVuc2lvbiwgbW9kdWxlRGlyZWN0b3J5OiBSZXBvUGF0aHMuQ2pzIH0pXG4gICAgICAgICsgZmlsZURpcmVjdGl2ZXMgKyBjdHNDb250ZW50O1xuICAgICAgbXRzQ29udGVudCA9IGJ1aWxkUmVmZXJlbmNlUGF0aERpcmVjdGl2ZSh7IGRlY2xhcmF0aW9uRmlsZVBhdGg6IG10c1BhdGgsIGV4dGVuc2lvbjogUmVwb1BhdGhzLkRtdHNFeHRlbnNpb24sIG1vZHVsZURpcmVjdG9yeTogUmVwb1BhdGhzLkVzbSB9KVxuICAgICAgICArIGZpbGVEaXJlY3RpdmVzICsgbXRzQ29udGVudDtcbiAgICB9XG5cbiAgICBhd2FpdCB3cml0ZUZpbGUoY3RzUGF0aCwgY3RzQ29udGVudCk7XG4gICAgYXdhaXQgd3JpdGVGaWxlKG10c1BhdGgsIG10c0NvbnRlbnQpO1xuICB9XG59XG5cbi8qKlxuICogUmVnZW5lcmF0ZXMgdGhlIGBleHBvcnRzYCBtYXAgb2YgdGhlIHBhY2thZ2UncyBgcGFja2FnZS5qc29uYCBmcm9tIGl0cyBzb3VyY2UgZm9sZGVycywgYW5kIHdyaXRlcyBhIGBwYWNrYWdlLmpzb25gXG4gKiBzdHViIHBlciBzdWJwYXRoIGZvciByZXNvbHZlcnMgdGhhdCBkbyBub3QgcmVhZCBgZXhwb3J0c2AuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIEdlbmVyYXRlTGlicmFyeUV4cG9ydHNPcHRpb25zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgbWFwIGlzIGN1cnJlbnQuXG4gKiBAdGhyb3dzIElmIHRoZSBtYXAgY2hhbmdlZCwgc28gdGhlIGNoYW5nZSBnZXRzIHJldmlld2VkIGFuZCBjb21taXR0ZWQgcmF0aGVyIHRoYW4gc2hpcHBlZCB1bnNlZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUxpYnJhcnlFeHBvcnRzKG9wdGlvbnM6IEdlbmVyYXRlTGlicmFyeUV4cG9ydHNPcHRpb25zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgeyBhZGRpdGlvbmFsRXhwb3J0cyA9IHt9LCBzb3VyY2VDb25kaXRpb24gfSA9IG9wdGlvbnM7XG4gIGNvbnN0IHNyY0ZvbGRlcnM6IHN0cmluZ1tdID0gW1JlcG9QYXRocy5TcmNdO1xuXG4gIGZvciAoY29uc3QgZGlyZW50IG9mIGF3YWl0IHJlYWRkaXJQb3NpeChSZXBvUGF0aHMuU3JjLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KSkge1xuICAgIGlmICghZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGggPSBqb2luKGRpcmVudC5wYXJlbnRQYXRoLCBkaXJlbnQubmFtZSk7XG5cbiAgICBpZiAocGF0aC5pbmNsdWRlcyhSZXBvUGF0aHMuU3R5bGVzKSB8fCBwYXRoLmluY2x1ZGVzKFJlcG9QYXRocy5UZXN0SGVscGVycykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIHNyY0ZvbGRlcnMucHVzaChwYXRoKTtcbiAgfVxuXG4gIHNyY0ZvbGRlcnMuc29ydCgpO1xuXG4gIGxldCBpc0NoYW5nZWQgPSBmYWxzZTtcblxuICBhd2FpdCBlZGl0UGFja2FnZUpzb24oYXN5bmMgKHBhY2thZ2VKc29uKSA9PiB7XG4gICAgY29uc3Qgb2xkRXhwb3J0cyA9IHBhY2thZ2VKc29uLmV4cG9ydHM7XG4gICAgY29uc3QgZXhwb3J0Q29uZGl0aW9uczogUGFja2FnZUpzb24uRXhwb3J0Q29uZGl0aW9ucyA9IHt9O1xuICAgIHBhY2thZ2VKc29uLmV4cG9ydHMgPSBleHBvcnRDb25kaXRpb25zO1xuICAgIGZvciAoY29uc3Qgc3JjRm9sZGVyIG9mIHNyY0ZvbGRlcnMpIHtcbiAgICAgIGF3YWl0IHNldEV4cG9ydCh7IGV4cG9ydENvbmRpdGlvbnMsIGlzV2lsZGNhcmQ6IGZhbHNlLCBzb3VyY2VDb25kaXRpb24sIHNyY0ZvbGRlciB9KTtcbiAgICAgIGF3YWl0IHNldEV4cG9ydCh7IGV4cG9ydENvbmRpdGlvbnMsIGlzV2lsZGNhcmQ6IHRydWUsIHNvdXJjZUNvbmRpdGlvbiwgc3JjRm9sZGVyIH0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW3N1YnBhdGgsIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhhZGRpdGlvbmFsRXhwb3J0cykpIHtcbiAgICAgIGlmIChleHBvcnRDb25kaXRpb25zW3N1YnBhdGhdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgYWRkaXRpb25hbCBleHBvcnQgJyR7c3VicGF0aH0nIGNvbGxpZGVzIHdpdGggYW4gZW50cnkgZ2VuZXJhdGVkIGZyb20gYSBzb3VyY2UgZm9sZGVyLmApO1xuICAgICAgfVxuXG4gICAgICBleHBvcnRDb25kaXRpb25zW3N1YnBhdGhdID0gZW50cnk7XG4gICAgfVxuXG4gICAgaXNDaGFuZ2VkID0gIWlzRGVlcEVxdWFsKG9sZEV4cG9ydHMsIHBhY2thZ2VKc29uLmV4cG9ydHMpO1xuICB9KTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvbiAtLSBJdCBjaGFuZ2VkIGluIHRoZSBgZWRpdFBhY2thZ2VKc29uYCwgRVNMaW50IG1pc3Rha2VubHkgZG9lcyBub3QgcmVjb2duaXplIGl0LlxuICBpZiAoaXNDaGFuZ2VkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQYWNrYWdlIGV4cG9ydHMgaGF2ZSBjaGFuZ2VkLiBQbGVhc2UgcmV2aWV3IHRoZSBjaGFuZ2VzIGFuZCBjb21taXQgdGhlbS4nKTtcbiAgfVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhbiBgaW5kZXgudHNgIGJhcnJlbCBpbiBldmVyeSBzb3VyY2UgZm9sZGVyIHRoYXQgaGFzIHNvbWV0aGluZyB0byBleHBvcnQsIHJlLWV4cG9ydGluZyBlYWNoIG1vZHVsZSBhbmRcbiAqIGVhY2ggc3ViLWJhcnJlbCB1bmRlciBpdHMgb3duIG5hbWUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiB0aGUgYmFycmVscyBoYXZlIGJlZW4gd3JpdHRlbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlTGlicmFyeUluZGV4KG9wdGlvbnM6IEdlbmVyYXRlTGlicmFyeUluZGV4T3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGV4Y2x1ZGVkUGF0aHMgPSBuZXcgU2V0KChvcHRpb25zLmV4Y2x1ZGVGcm9tSW5kZXggPz8gW10pLm1hcCgocGF0aCkgPT4gam9pbihwYXRoLnJlcGxhY2VBbGwoJ1xcXFwnLCAnLycpKS5yZXBsYWNlKC9cXC8kLywgJycpKSk7XG4gIGNvbnN0IHVubWF0Y2hlZFBhdGhzID0gbmV3IFNldChleGNsdWRlZFBhdGhzKTtcbiAgYXdhaXQgZ2VuZXJhdGVJbmRleCh7IGV4Y2x1ZGVkUGF0aHMsIGZvbGRlcjogUmVwb1BhdGhzLlNyYywgdW5tYXRjaGVkUGF0aHMgfSk7XG5cbiAgaWYgKHVubWF0Y2hlZFBhdGhzLnNpemUgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBleGNsdWRlRnJvbUluZGV4IG5hbWVzIG5vIG1vZHVsZSB0aGUgYmFycmVscyB3b3VsZCBleHBvcnQ6ICR7Wy4uLnVubWF0Y2hlZFBhdGhzXS5qb2luKCcsICcpfS5gKTtcbiAgfVxufVxuXG4vKipcbiAqIFJ1bnMgZWFjaCBuYW1lZCBucG0gc2NyaXB0IHRoZSBwYWNrYWdlIGRlZmluZXMsIGluIG9yZGVyLCBza2lwcGluZyB0aGUgb25lcyBpdCBkb2VzIG5vdCBkZWZpbmUuXG4gKlxuICogQHBhcmFtIHN0ZXBzIC0gVGhlIG5wbSBzY3JpcHQgbmFtZXMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gZXZlcnkgc3RlcCBoYXMgcnVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQnVpbGRTdGVwcyhzdGVwczogcmVhZG9ubHkgc3RyaW5nW10gPSBMSUJSQVJZX0JVSUxEX1NURVBTKTogUHJvbWlzZTx2b2lkPiB7XG4gIGZvciAoY29uc3Qgc3RlcCBvZiBzdGVwcykge1xuICAgIGF3YWl0IG5wbVJ1bk9wdGlvbmFsKHN0ZXApO1xuICB9XG59XG5cbi8qKlxuICogQWRkcyB3aGF0IGEgY29uc3VtZXIgbmVlZHMgbG9hZGVkIGZvciBvbmUgc3ltYm9sIGEgZGVjbGFyYXRpb24gbmFtZXMuIEEgc3ltYm9sIGFueSBFUyBsaWIgZGVjbGFyZXMgbmVlZHMgbm90aGluZyxcbiAqIGJlY2F1c2Ugbm8gY29uc3VtZXIgY29uZmxpY3RzIHdpdGggdGhvc2UgbGlicy4gT3RoZXJ3aXNlIGVhY2ggZW52aXJvbm1lbnQgbGliIHRoYXQgZGVjbGFyZXMgaXQgYWRkcyBpdHNlbGYsIGFuZFxuICogZmFpbGluZyB0aGF0IGBAdHlwZXMvbm9kZWAgYWRkcyBgbm9kZWAuIEEgc3ltYm9sIGRlY2xhcmVkIGluIHRoZSBwYWNrYWdlJ3Mgb3duIGZpbGVzIGFkZHMgbm90aGluZzogdGhlIGRlY2xhcmF0aW9uXG4gKiB0aGF0IGhvbGRzIGl0IGNhcnJpZXMgaXRzIG93biBkaXJlY3RpdmVzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgc3ltYm9sLCB0aGUgcHJvZ3JhbSBpdCB3YXMgcmVzb2x2ZWQgaW4sIGFuZCB0aGUgc2V0cyB0byBhZGQgdG8uXG4gKi9cbmZ1bmN0aW9uIGFkZEVudmlyb25tZW50R2xvYmFscyhwYXJhbXM6IEFkZEVudmlyb25tZW50R2xvYmFsc1BhcmFtcyk6IHZvaWQge1xuICBjb25zdCB7IGxpYnMsIHByb2dyYW0sIHN5bWJvbCwgdHlwZXMgfSA9IHBhcmFtcztcbiAgY29uc3QgZW52aXJvbm1lbnRMaWJzOiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgaXNOb2RlID0gZmFsc2U7XG5cbiAgZm9yIChjb25zdCBkZWNsYXJhdGlvbiBvZiBzeW1ib2wuZGVjbGFyYXRpb25zID8/IFtdKSB7XG4gICAgY29uc3Qgc291cmNlRmlsZSA9IGRlY2xhcmF0aW9uLmdldFNvdXJjZUZpbGUoKTtcbiAgICBpZiAocHJvZ3JhbS5pc1NvdXJjZUZpbGVEZWZhdWx0TGlicmFyeShzb3VyY2VGaWxlKSkge1xuICAgICAgY29uc3QgbGliID0gdG9MaWJOYW1lKHNvdXJjZUZpbGUuZmlsZU5hbWUpO1xuICAgICAgaWYgKCFpc0Vudmlyb25tZW50TGliKGxpYikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZW52aXJvbm1lbnRMaWJzLnB1c2gobGliKTtcbiAgICB9IGVsc2UgaWYgKHNvdXJjZUZpbGUuZmlsZU5hbWUuaW5jbHVkZXMoTk9ERV9UWVBFU19QQVRIX1NFR01FTlQpKSB7XG4gICAgICBpc05vZGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChlbnZpcm9ubWVudExpYnMubGVuZ3RoID4gMCkge1xuICAgIGZvciAoY29uc3QgbGliIG9mIGVudmlyb25tZW50TGlicykge1xuICAgICAgbGlicy5hZGQobGliKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoaXNOb2RlKSB7XG4gICAgdHlwZXMuYWRkKCdub2RlJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRBbGxSZWZlcmVuY2VMaWJEaXJlY3RpdmVzKGxpYnM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke1xuICAgIGxpYnNcbiAgICAgIC5tYXAoKGxpYikgPT4gYC8vLyAke1JFRkVSRU5DRV9MSUJfRElSRUNUSVZFfVwiJHtsaWJ9XCIgLz5gKVxuICAgICAgLmpvaW4oJ1xcbicpXG4gIH1cXG5gO1xufVxuXG5mdW5jdGlvbiBidWlsZEFsbFJlZmVyZW5jZVR5cGVzRGlyZWN0aXZlcyh0eXBlczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gdHlwZXMubGVuZ3RoID09PSAwXG4gICAgPyAnJ1xuICAgIDogYCR7XG4gICAgICB0eXBlc1xuICAgICAgICAubWFwKCh0eXBlKSA9PiBgLy8vIDxyZWZlcmVuY2UgdHlwZXM9XCIke3R5cGV9XCIgLz5gKVxuICAgICAgICAuam9pbignXFxuJylcbiAgICB9XFxuYDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRMaWJyYXJ5Rm9ybWF0KHBhcmFtczogQnVpbGRMaWJyYXJ5Rm9ybWF0UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgZm9ybWF0LCBsaWJGaWxlcywgcHJlcHJvY2Vzc1BsdWdpbkZhY3RvcnkgfSA9IHBhcmFtcztcbiAgY29uc3QgZXh0ZW5zaW9uID0gZm9ybWF0ID09PSAnY2pzJyA/IFJlcG9QYXRocy5DanNFeHRlbnNpb24gOiBSZXBvUGF0aHMuTWpzRXh0ZW5zaW9uO1xuICBjb25zdCBidWlsZE9wdGlvbnM6IEJ1aWxkT3B0aW9ucyA9IHtcbiAgICAvLyBFeHBsaWNpdCwgYmVjYXVzZSBlc2J1aWxkIG90aGVyd2lzZSB0YWtlcyB0aGUgZm9sZGVyIGl0cyBzZXJ2aWNlIHByb2Nlc3Mgc3RhcnRlZCBpbi5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBlc2J1aWxkJ3Mgb3duIG9wdGlvbiBuYW1lLlxuICAgIGFic1dvcmtpbmdEaXI6IHByb2Nlc3MuY3dkKCksXG4gICAgYmFubmVyOiB7XG4gICAgICBqczogTElCUkFSWV9CQU5ORVJcbiAgICB9LFxuICAgIGJ1bmRsZTogZmFsc2UsXG4gICAgZW50cnlQb2ludHM6IGxpYkZpbGVzLFxuICAgIGZvcm1hdCxcbiAgICBsb2dMZXZlbDogJ2luZm8nLFxuICAgIG91dGRpcjogam9pbihSZXBvUGF0aHMuRGlzdExpYiwgZm9ybWF0KSxcbiAgICBwbGF0Zm9ybTogJ25vZGUnLFxuICAgIHBsdWdpbnM6IFtcbiAgICAgIHByZXByb2Nlc3NQbHVnaW5GYWN0b3J5KGZvcm1hdCA9PT0gJ2VzbScpLFxuICAgICAgZml4RXNtUGx1Z2luKCksXG4gICAgICBjaGFuZ2VFeHRlbnNpb25QbHVnaW4oZXh0ZW5zaW9uKVxuICAgIF0sXG4gICAgc291cmNlbWFwOiAnaW5saW5lJyxcbiAgICB0YXJnZXQ6ICdFUzIwMjInLFxuICAgIHRyZWVTaGFraW5nOiB0cnVlLFxuICAgIHdyaXRlOiBmYWxzZVxuICB9O1xuXG4gIGNvbnN0IGJ1aWxkQ29udGV4dCA9IGF3YWl0IGNvbnRleHQoYnVpbGRPcHRpb25zKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBidWlsZENvbnRleHQucmVidWlsZCgpO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IGJ1aWxkQ29udGV4dC5kaXNwb3NlKCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRSZWZlcmVuY2VQYXRoRGlyZWN0aXZlKHBhcmFtczogQnVpbGRSZWZlcmVuY2VQYXRoRGlyZWN0aXZlUGFyYW1zKTogc3RyaW5nIHtcbiAgY29uc3QgeyBkZWNsYXJhdGlvbkZpbGVQYXRoLCBleHRlbnNpb24sIG1vZHVsZURpcmVjdG9yeSB9ID0gcGFyYW1zO1xuICBjb25zdCBsaWJyYXJ5RmlsZVBhdGggPSBqb2luKFJlcG9QYXRocy5EaXN0TGliLCBtb2R1bGVEaXJlY3RvcnksIExJQlJBUllfUkVGRVJFTkNFU19GSUxFX05BTUUgKyBleHRlbnNpb24pO1xuICBsZXQgcmVsYXRpdmVQYXRoID0gcmVsYXRpdmVOYXRpdmUoZGlybmFtZShkZWNsYXJhdGlvbkZpbGVQYXRoKSwgbGlicmFyeUZpbGVQYXRoKS5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKTtcbiAgaWYgKCFyZWxhdGl2ZVBhdGguc3RhcnRzV2l0aCgnLicpKSB7XG4gICAgcmVsYXRpdmVQYXRoID0gYC4vJHtyZWxhdGl2ZVBhdGh9YDtcbiAgfVxuICByZXR1cm4gYC8vLyA8cmVmZXJlbmNlIHBhdGg9XCIke3JlbGF0aXZlUGF0aH1cIiAvPlxcbmA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbGxlY3RBbGxMaWJzKCk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgLy8gVGhlIFJFU09MVkVEIG9wdGlvbnMsIGJlY2F1c2UgYSBwYWNrYWdlJ3MgYHRzY29uZmlnLmpzb25gIGluaGVyaXRzIGBsaWJgIGZyb20gdGhlIHNoYXJlZCBiYXNlLiBUaGUgcmVzb2x2ZWRcbiAgLy8gbmFtZXMgYXJlIGZpbGUgbmFtZXMgKGBsaWIuZG9tLml0ZXJhYmxlLmQudHNgKSwgc28gdGhleSBhcmUgbWFwcGVkIGJhY2sgb250byB0aGUgbmFtZXMgYSBkaXJlY3RpdmUgdGFrZXMuXG4gIGNvbnN0IHsgb3B0aW9ucyB9ID0gcGFyc2VUc0NvbmZpZyhSZXBvUGF0aHMuVHNDb25maWdKc29uKTtcbiAgY29uc3QgbGlicyA9IG5ldyBTZXQoKG9wdGlvbnMubGliID8/IFtdKS5tYXAoKGxpYikgPT4gdG9MaWJOYW1lKGxpYikpKTtcblxuICBmb3IgKGNvbnN0IGZpbGUgb2YgYXdhaXQgcmVhZGRpclBvc2l4KFJlcG9QYXRocy5TcmMsIHsgcmVjdXJzaXZlOiB0cnVlIH0pKSB7XG4gICAgaWYgKCFmaWxlLmVuZHNXaXRoKCcudHMnKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3Qgc291cmNlQ29udGVudCA9IHJlYWRGaWxlU3luYyhqb2luKFJlcG9QYXRocy5TcmMsIGZpbGUpLCAndXRmLTgnKTtcbiAgICAvLyBUaGUgcmVndWxhciBleHByZXNzaW9uIGFsd2F5cyBjYXB0dXJlcyBpdHMgb25lIGdyb3VwLCBzbyBubyBmYWxsYmFjayBmb3IgYSBtaXNzaW5nIG9uZSBpcyBuZWVkZWQuXG4gICAgZm9yIChjb25zdCBbLCBsaWJdIG9mIHNvdXJjZUNvbnRlbnQubWF0Y2hBbGwoUkVGRVJFTkNFX0xJQl9SRUdfRVhQKSkge1xuICAgICAgbGlicy5hZGQoU3RyaW5nKGxpYikudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFsuLi5saWJzXS5zb3J0KCk7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RBbGxUeXBlcygpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHsgb3B0aW9ucyB9ID0gcGFyc2VUc0NvbmZpZyhSZXBvUGF0aHMuVHNDb25maWdKc29uKTtcbiAgcmV0dXJuIChvcHRpb25zLnR5cGVzID8/IFtdKVxuICAgIC5maWx0ZXIoKHR5cGUpID0+IERFQ0xBUkFUSU9OX1JFRkVSRU5DRV9UWVBFUy5oYXModHlwZSkpXG4gICAgLnNvcnQoKTtcbn1cblxuZnVuY3Rpb24gY29sbGVjdEVudmlyb25tZW50RGlyZWN0aXZlcyhwYXJhbXM6IENvbGxlY3RFbnZpcm9ubWVudERpcmVjdGl2ZXNQYXJhbXMpOiBNYXA8c3RyaW5nLCBzdHJpbmc+IHtcbiAgY29uc3QgeyBhdmFpbGFibGVUeXBlcywgZGVjbGFyYXRpb25GaWxlcyB9ID0gcGFyYW1zO1xuICBjb25zdCB7IG9wdGlvbnMgfSA9IHBhcnNlVHNDb25maWcoUmVwb1BhdGhzLlRzQ29uZmlnSnNvbik7XG4gIGNvbnN0IHByb2dyYW0gPSBjcmVhdGVQcm9ncmFtKHtcbiAgICBvcHRpb25zOiB7IC4uLm9wdGlvbnMsIG5vRW1pdDogdHJ1ZSB9LFxuICAgIHJvb3ROYW1lczogZGVjbGFyYXRpb25GaWxlcy5tYXAoKGZpbGUpID0+IHJlc29sdmVOYXRpdmUoUmVwb1BhdGhzLlNyYywgZmlsZSkpXG4gIH0pO1xuICBjb25zdCBjaGVja2VyID0gcHJvZ3JhbS5nZXRUeXBlQ2hlY2tlcigpO1xuICBjb25zdCBkaXJlY3RpdmVzQnlGaWxlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IGZpbGUgb2YgZGVjbGFyYXRpb25GaWxlcykge1xuICAgIC8vIFRoZSBwcm9ncmFtIHdhcyBoYW5kZWQgZXZlcnkgb25lIG9mIHRoZXNlIGFzIGEgcm9vdCBuYW1lLCBzbyBlYWNoIG9uZSBpcyBpbiBpdC5cbiAgICBjb25zdCBzb3VyY2VGaWxlID0gZW5zdXJlTm9uTnVsbGFibGUocHJvZ3JhbS5nZXRTb3VyY2VGaWxlKHJlc29sdmVOYXRpdmUoUmVwb1BhdGhzLlNyYywgZmlsZSkpKTtcbiAgICBjb25zdCBsaWJzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3QgdHlwZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICAgIGZ1bmN0aW9uIHZpc2l0KG5vZGU6IE5vZGUpOiB2b2lkIHtcbiAgICAgIGlmIChpc0lkZW50aWZpZXIobm9kZSkgfHwgaXNTdHJpbmdMaXRlcmFsKG5vZGUpKSB7XG4gICAgICAgIGNvbnN0IHN5bWJvbCA9IGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihub2RlKTtcbiAgICAgICAgaWYgKHN5bWJvbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYWRkRW52aXJvbm1lbnRHbG9iYWxzKHsgbGlicywgcHJvZ3JhbSwgc3ltYm9sOiByZXNvbHZlQWxpYXMoY2hlY2tlciwgc3ltYm9sKSwgdHlwZXMgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvckVhY2hDaGlsZChub2RlLCB2aXNpdCk7XG4gICAgfVxuICAgIHZpc2l0KHNvdXJjZUZpbGUpO1xuXG4gICAgY29uc3QgbmVlZGVkVHlwZXMgPSBbLi4udHlwZXNdLmZpbHRlcigodHlwZSkgPT4gYXZhaWxhYmxlVHlwZXMuaW5jbHVkZXModHlwZSkpO1xuICAgIGlmIChsaWJzLnNpemUgPiAwIHx8IG5lZWRlZFR5cGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRpcmVjdGl2ZXNCeUZpbGUuc2V0KFxuICAgICAgICBmaWxlLFxuICAgICAgICAobGlicy5zaXplID4gMCA/IGJ1aWxkQWxsUmVmZXJlbmNlTGliRGlyZWN0aXZlcyhbLi4ubGlic10uc29ydCgpKSA6ICcnKSArIGJ1aWxkQWxsUmVmZXJlbmNlVHlwZXNEaXJlY3RpdmVzKG5lZWRlZFR5cGVzLnNvcnQoKSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRpcmVjdGl2ZXNCeUZpbGU7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlSW5kZXgocGFyYW1zOiBHZW5lcmF0ZUluZGV4UGFyYW1zKTogUHJvbWlzZTxHZW5lcmF0ZUluZGV4UmVzdWx0PiB7XG4gIGNvbnN0IHsgZm9sZGVyIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGRpcmVudHMgPSBhd2FpdCByZWFkZGlyUG9zaXgoZm9sZGVyLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gIGNvbnN0IG1heWJlTGluZXMgPSBhd2FpdCBhc3luY01hcChkaXJlbnRzLCAoZGlyZW50KSA9PiBoYW5kbGVJbmRleERpcmVudChwYXJhbXMsIGRpcmVudCkpO1xuICBjb25zdCBsaW5lcyA9IG1heWJlTGluZXMuZmlsdGVyKChsaW5lKSA9PiBsaW5lICE9PSB1bmRlZmluZWQpO1xuXG4gIGlmIChsaW5lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gR2VuZXJhdGVJbmRleFJlc3VsdC5Ta2lwcGVkO1xuICB9XG5cbiAgYXdhaXQgZ2VuZXJhdGUoam9pbihmb2xkZXIsIFJlcG9QYXRocy5JbmRleFRzKSwgbGluZXMpO1xuICByZXR1cm4gR2VuZXJhdGVJbmRleFJlc3VsdC5TdWNjZXNzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXRMaWJGaWxlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGxldCBmaWxlcyA9IGF3YWl0IHJlYWRkaXJQb3NpeChSZXBvUGF0aHMuU3JjLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgZmlsZXMgPSBmaWxlcy5tYXAoKGZpbGUpID0+IG5vcm1hbGl6ZUlmUmVsYXRpdmUoam9pbihSZXBvUGF0aHMuU3JjLCBmaWxlKSkpO1xuICByZXR1cm4gZmlsZXMuZmlsdGVyKChmaWxlKSA9PlxuICAgIGZpbGUuZW5kc1dpdGgoUmVwb1BhdGhzLlRzRXh0ZW5zaW9uKSAmJiAhZmlsZS5lbmRzV2l0aChSZXBvUGF0aHMuRHRzRXh0ZW5zaW9uKSAmJiAhZmlsZS5lbmRzV2l0aCgnLnRlc3QudHMnKVxuICAgICYmICFmaWxlLmluY2x1ZGVzKGAvJHtSZXBvUGF0aHMuVGVzdEhlbHBlcnN9L2ApXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZUluZGV4RGlyZW50KHBhcmFtczogR2VuZXJhdGVJbmRleFBhcmFtcywgZGlyZW50OiBEaXJlbnQpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCB7IGV4Y2x1ZGVkUGF0aHMsIGZvbGRlciwgdW5tYXRjaGVkUGF0aHMgfSA9IHBhcmFtcztcbiAgaWYgKGlzRXhjbHVkZWRGcm9tSW5kZXgoZm9sZGVyLCBkaXJlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcGF0aCA9IGpvaW4oZm9sZGVyLCBkaXJlbnQubmFtZSk7XG4gIGlmIChleGNsdWRlZFBhdGhzLmhhcyhwYXRoKSkge1xuICAgIHVubWF0Y2hlZFBhdGhzLmRlbGV0ZShwYXRoKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBsZXQgc291cmNlRmlsZTogc3RyaW5nO1xuICBsZXQgbmFtZTogc3RyaW5nO1xuICBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBnZW5lcmF0ZUluZGV4KHsgLi4ucGFyYW1zLCBmb2xkZXI6IHBhdGggfSk7XG4gICAgaWYgKHJlc3VsdCAhPT0gR2VuZXJhdGVJbmRleFJlc3VsdC5TdWNjZXNzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHNvdXJjZUZpbGUgPSBub3JtYWxpemVJZlJlbGF0aXZlKGpvaW4oZGlyZW50Lm5hbWUsIFJlcG9QYXRocy5JbmRleFRzKSk7XG4gICAgbmFtZSA9IGRpcmVudC5uYW1lO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGV4dGVuc2lvbiA9IGV4dG5hbWUoZGlyZW50Lm5hbWUpO1xuICAgIG5hbWUgPSBiYXNlbmFtZShkaXJlbnQubmFtZSwgZXh0ZW5zaW9uKTtcbiAgICBzb3VyY2VGaWxlID0gbm9ybWFsaXplSWZSZWxhdGl2ZShkaXJlbnQubmFtZSk7XG4gIH1cblxuICByZXR1cm4gYGV4cG9ydCAqIGFzICcke25hbWV9JyBmcm9tICcke3NvdXJjZUZpbGV9JztgO1xufVxuXG5mdW5jdGlvbiBpc0Vudmlyb25tZW50TGliKGxpYjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBFTlZJUk9OTUVOVF9MSUJfUFJFRklYRVMuc29tZSgocHJlZml4KSA9PiBsaWIuc3RhcnRzV2l0aChwcmVmaXgpKTtcbn1cblxuZnVuY3Rpb24gaXNFeGNsdWRlZEZpbGVOYW1lKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gIW5hbWUuZW5kc1dpdGgoUmVwb1BhdGhzLlRzRXh0ZW5zaW9uKSB8fCBuYW1lLmVuZHNXaXRoKCcudGVzdC50cycpIHx8IG5hbWUgPT09ICdzZXR1cC50cycgfHwgbmFtZS5lbmRzV2l0aCgnLXNldHVwLnRzJyk7XG59XG5cbmZ1bmN0aW9uIGlzRXhjbHVkZWRGcm9tSW5kZXgoZm9sZGVyOiBzdHJpbmcsIGRpcmVudDogRGlyZW50KTogYm9vbGVhbiB7XG4gIGNvbnN0IGV4Y2x1ZGVkTmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1JlcG9QYXRocy5JbmRleFRzLCBSZXBvUGF0aHMuVHlwZXMsIFJlcG9QYXRocy5TdHlsZXMsIFJlcG9QYXRocy5UZXN0SGVscGVyc107XG4gIGNvbnN0IGlzRXhjbHVkZWRFbnRyeSA9IGV4Y2x1ZGVkTmFtZXMuaW5jbHVkZXMoZGlyZW50Lm5hbWUpIHx8IGRpcmVudC5uYW1lLmVuZHNXaXRoKFJlcG9QYXRocy5EdHNFeHRlbnNpb24pIHx8IGZvbGRlci5zcGxpdCgnLycpLmluY2x1ZGVzKFJlcG9QYXRocy5UeXBlcyk7XG4gIHJldHVybiBpc0V4Y2x1ZGVkRW50cnkgfHwgKGRpcmVudC5pc0ZpbGUoKSAmJiBpc0V4Y2x1ZGVkRmlsZU5hbWUoZGlyZW50Lm5hbWUpKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUFsaWFzKGNoZWNrZXI6IFR5cGVDaGVja2VyLCBzeW1ib2w6IFRzU3ltYm9sKTogVHNTeW1ib2wge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZSAtLSBgU3ltYm9sRmxhZ3NgIGlzIGEgYml0IHNldC5cbiAgcmV0dXJuIChzeW1ib2wuZmxhZ3MgJiBTeW1ib2xGbGFncy5BbGlhcykgPT09IDAgPyBzeW1ib2wgOiBjaGVja2VyLmdldEFsaWFzZWRTeW1ib2woc3ltYm9sKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2V0RXhwb3J0KHBhcmFtczogU2V0RXhwb3J0UGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgZXhwb3J0Q29uZGl0aW9ucywgaXNXaWxkY2FyZCwgc291cmNlQ29uZGl0aW9uLCBzcmNGb2xkZXIgfSA9IHBhcmFtcztcbiAgY29uc3QgaW1wb3J0UGF0aCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IHNyY0ZvbGRlcixcbiAgICByZXBsYWNlcjogUmVwb1BhdGhzLkN1cnJlbnRGb2xkZXIsXG4gICAgc2VhcmNoVmFsdWU6IFJlcG9QYXRocy5TcmNcbiAgfSk7XG4gIGNvbnN0IGNvbmRpdGlvblBhdGggPSBpc1dpbGRjYXJkID8gYCR7aW1wb3J0UGF0aH0vJHtSZXBvUGF0aHMuQW55fWAgOiBpbXBvcnRQYXRoO1xuICBjb25zdCBkbXRzUGF0aCA9IHRvRGlzdFBhdGgoeyBmb3JtYXQ6IFJlcG9QYXRocy5Fc20sIGltcG9ydFBhdGgsIG5hbWU6IGlzV2lsZGNhcmQgPyBSZXBvUGF0aHMuQW55RG10cyA6IFJlcG9QYXRocy5JbmRleERtdHMgfSk7XG4gIGNvbnN0IGRjdHNQYXRoID0gdG9EaXN0UGF0aCh7IGZvcm1hdDogUmVwb1BhdGhzLkNqcywgaW1wb3J0UGF0aCwgbmFtZTogaXNXaWxkY2FyZCA/IFJlcG9QYXRocy5BbnlEY3RzIDogUmVwb1BhdGhzLkluZGV4RGN0cyB9KTtcbiAgY29uc3QgZG10c0ZvbGRlclBhdGggPSBkaXJuYW1lKGRtdHNQYXRoKTtcbiAgY29uc3QgZGN0c0ZvbGRlclBhdGggPSBkaXJuYW1lKGRjdHNQYXRoKTtcblxuICBpZiAoIWlzV2lsZGNhcmQgJiYgIWV4aXN0c1N5bmMoZGN0c1BhdGgpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaXNUeXBlc09ubHkgPSBpbXBvcnRQYXRoLmluY2x1ZGVzKFJlcG9QYXRocy5UeXBlcyk7XG4gIGNvbnN0IG1qc1BhdGggPSB0b0Rpc3RQYXRoKHsgZm9ybWF0OiBSZXBvUGF0aHMuRXNtLCBpbXBvcnRQYXRoLCBuYW1lOiBpc1dpbGRjYXJkID8gUmVwb1BhdGhzLkFueU1qcyA6IFJlcG9QYXRocy5JbmRleE1qcyB9KTtcbiAgY29uc3QgY2pzUGF0aCA9IHRvRGlzdFBhdGgoeyBmb3JtYXQ6IFJlcG9QYXRocy5DanMsIGltcG9ydFBhdGgsIG5hbWU6IGlzV2lsZGNhcmQgPyBSZXBvUGF0aHMuQW55Q2pzIDogUmVwb1BhdGhzLkluZGV4Q2pzIH0pO1xuXG4gIGlmIChpc1R5cGVzT25seSkge1xuICAgIGV4cG9ydENvbmRpdGlvbnNbY29uZGl0aW9uUGF0aF0gPSB7XG4gICAgICBpbXBvcnQ6IHtcbiAgICAgICAgdHlwZXM6IGRtdHNQYXRoXG4gICAgICB9LFxuICAgICAgcmVxdWlyZToge1xuICAgICAgICB0eXBlczogZGN0c1BhdGhcbiAgICAgIH1cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHNvdXJjZVBhdGggPSBub3JtYWxpemVJZlJlbGF0aXZlKGpvaW4oUmVwb1BhdGhzLlNyYywgaW1wb3J0UGF0aCwgaXNXaWxkY2FyZCA/IFJlcG9QYXRocy5BbnlUcyA6IFJlcG9QYXRocy5JbmRleFRzKSk7XG5cbiAgICBleHBvcnRDb25kaXRpb25zW2NvbmRpdGlvblBhdGhdID0ge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgcGVyZmVjdGlvbmlzdC9zb3J0LW9iamVjdHMgLS0gT3JkZXIgbWF0dGVycyBvbmNlIGl0IGlzIHdyaXR0ZW4gdG8gYHBhY2thZ2UuanNvbmAuICovXG4gICAgICAvLyBGaXJzdCwgc28gaXQgd2lucyB3aGVyZXZlciBpdCBpcyBzZXQ6IGluc2lkZSB0aGUgcmVwb3NpdG9yeSwgYmVmb3JlIGFueXRoaW5nIGlzIGJ1aWx0LlxuICAgICAgLi4uKHNvdXJjZUNvbmRpdGlvbiAhPT0gdW5kZWZpbmVkICYmIHsgW3NvdXJjZUNvbmRpdGlvbl06IHNvdXJjZVBhdGggfSksXG4gICAgICBpbXBvcnQ6IHtcbiAgICAgICAgdHlwZXM6IGRtdHNQYXRoLFxuICAgICAgICBkZWZhdWx0OiBtanNQYXRoXG4gICAgICB9LFxuICAgICAgcmVxdWlyZToge1xuICAgICAgICB0eXBlczogZGN0c1BhdGgsXG4gICAgICAgIGRlZmF1bHQ6IGNqc1BhdGhcbiAgICAgIH1cbiAgICAgIC8qIGVzbGludC1lbmFibGUgcGVyZmVjdGlvbmlzdC9zb3J0LW9iamVjdHMgLS0gT3JkZXIgbWF0dGVycyBvbmNlIGl0IGlzIHdyaXR0ZW4gdG8gYHBhY2thZ2UuanNvbmAuICovXG4gICAgfTtcbiAgfVxuXG4gIGlmIChpbXBvcnRQYXRoID09PSBSZXBvUGF0aHMuQ3VycmVudEZvbGRlciBhcyBzdHJpbmcpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIWlzV2lsZGNhcmQpIHtcbiAgICBhd2FpdCB3cml0ZVN1YnBhdGhQYWNrYWdlSnNvbihcbiAgICAgIGltcG9ydFBhdGgsXG4gICAgICBpc1R5cGVzT25seVxuICAgICAgICA/IHsgdHlwZTogJ21vZHVsZScsIHR5cGVzOiByZWxhdGl2ZShpbXBvcnRQYXRoLCBkY3RzUGF0aCkgfVxuICAgICAgICA6IHsgbWFpbjogcmVsYXRpdmUoaW1wb3J0UGF0aCwgY2pzUGF0aCksIG1vZHVsZTogcmVsYXRpdmUoaW1wb3J0UGF0aCwgbWpzUGF0aCksIHR5cGU6ICdtb2R1bGUnLCB0eXBlczogcmVsYXRpdmUoaW1wb3J0UGF0aCwgZGN0c1BhdGgpIH1cbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBhd2FpdCByZWFkZGlyUG9zaXgoZGN0c0ZvbGRlclBhdGgpKSB7XG4gICAgaWYgKCFmaWxlLmVuZHNXaXRoKFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShmaWxlLCBSZXBvUGF0aHMuRGN0c0V4dGVuc2lvbik7XG4gICAgY29uc3QgcGFja2FnZUpzb25Gb2xkZXJQYXRoID0gam9pbihpbXBvcnRQYXRoLCBuYW1lKTtcbiAgICBjb25zdCB0eXBlcyA9IHJlbGF0aXZlKHBhY2thZ2VKc29uRm9sZGVyUGF0aCwgam9pbihkY3RzRm9sZGVyUGF0aCwgbmFtZSArIFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKSk7XG4gICAgYXdhaXQgd3JpdGVTdWJwYXRoUGFja2FnZUpzb24oXG4gICAgICBwYWNrYWdlSnNvbkZvbGRlclBhdGgsXG4gICAgICBpc1R5cGVzT25seVxuICAgICAgICA/IHsgdHlwZTogJ21vZHVsZScsIHR5cGVzIH1cbiAgICAgICAgOiB7XG4gICAgICAgICAgbWFpbjogcmVsYXRpdmUocGFja2FnZUpzb25Gb2xkZXJQYXRoLCBqb2luKGRjdHNGb2xkZXJQYXRoLCBuYW1lICsgUmVwb1BhdGhzLkNqc0V4dGVuc2lvbikpLFxuICAgICAgICAgIG1vZHVsZTogcmVsYXRpdmUocGFja2FnZUpzb25Gb2xkZXJQYXRoLCBqb2luKGRtdHNGb2xkZXJQYXRoLCBuYW1lICsgUmVwb1BhdGhzLk1qc0V4dGVuc2lvbikpLFxuICAgICAgICAgIHR5cGU6ICdtb2R1bGUnLFxuICAgICAgICAgIHR5cGVzXG4gICAgICAgIH1cbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvQ3RzQ29udGVudChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBsZXQgY3RzQ29udGVudCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGNvbnRlbnQsXG4gICAgcmVwbGFjZXI6ICdmcm9tIFxcJyQ8SW1wb3J0UGF0aD4uY2pzXFwnOycsXG4gICAgc2VhcmNoVmFsdWU6IFNUQVRJQ19JTVBPUlRfUkVHX0VYUFxuICB9KTtcbiAgY3RzQ29udGVudCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGN0c0NvbnRlbnQsXG4gICAgcmVwbGFjZXI6ICdpbXBvcnQoJDxRdW90ZT4kPEltcG9ydFBhdGg+LmNqcyQ8UXVvdGU+KScsXG4gICAgc2VhcmNoVmFsdWU6IERZTkFNSUNfSU1QT1JUX1JFR19FWFBcbiAgfSk7XG5cbiAgLy8gQSBgLmQuY3RzYCBmaWxlIGlzIGEgQ29tbW9uSlMgbW9kdWxlLiBUeXBlLW9ubHkgaW1wb3J0cyBvZiBhIGJhcmUgc3BlY2lmaWVyIHJlc29sdmluZyB0byBhblxuICAvLyBFU00tb25seSBwYWNrYWdlIG5lZWQgYSBgcmVzb2x1dGlvbi1tb2RlYCBhdHRyaWJ1dGUsIGVsc2UgYHRzY2AgcmVwb3J0cyBUUzE1NDEgLyBUUzE1NDIuXG4gIC8vIFBhc3NpbmcgYCdpbXBvcnQnYCBpcyB2YWxpZCBmb3IgQ29tbW9uSlMgdGFyZ2V0cyB0b28sIHNvIGV2ZXJ5IGJhcmUgc3BlY2lmaWVyIHJlY2VpdmVzIGl0LlxuICAvLyBUaGUgRVNNIGAuZC5tdHNgIG5lZWRzIG5vIHN1Y2ggYXR0cmlidXRlLCBzbyB0aGlzIHRyYW5zZm9ybSBydW5zIG9uIENvbW1vbkpTIGNvbnRlbnQgb25seS5cbiAgY3RzQ29udGVudCA9IHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGN0c0NvbnRlbnQsXG4gICAgcmVwbGFjZXI6ICdpbXBvcnQgdHlwZSAkPENsYXVzZT4gZnJvbSBcXCckPFNwZWNpZmllcj5cXCcgd2l0aCB7IFxcJ3Jlc29sdXRpb24tbW9kZVxcJzogXFwnaW1wb3J0XFwnIH07JyxcbiAgICBzZWFyY2hWYWx1ZTogQkFSRV9UWVBFX0lNUE9SVF9SRUdfRVhQXG4gIH0pO1xuICByZXR1cm4gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogY3RzQ29udGVudCxcbiAgICByZXBsYWNlcjogJ2ltcG9ydChcIiQ8U3BlY2lmaWVyPlwiLCB7IHdpdGg6IHsgXFwncmVzb2x1dGlvbi1tb2RlXFwnOiBcXCdpbXBvcnRcXCcgfSB9KScsXG4gICAgc2VhcmNoVmFsdWU6IEJBUkVfSU5MSU5FX0lNUE9SVF9UWVBFX1JFR19FWFBcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRvRGlzdFBhdGgocGFyYW1zOiBUb0Rpc3RQYXRoUGFyYW1zKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZUlmUmVsYXRpdmUoam9pbihSZXBvUGF0aHMuRGlzdExpYiwgcGFyYW1zLmZvcm1hdCwgcGFyYW1zLmltcG9ydFBhdGgsIHBhcmFtcy5uYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHRvTGliTmFtZShsaWJGaWxlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gQSBsaWIgYSBwYWNrYWdlIHJlcGxhY2VkIChgQHR5cGVzY3JpcHQvbGliLWRvbWAsIGBAdHlwZXNjcmlwdC9saWItZG9tL2l0ZXJhYmxlLmQudHNgKSBpcyBuYW1lZCBieSBpdHMgcGF0aCwgbm90IGJ5XG4gIC8vIGl0cyBmaWxlIG5hbWUsIHdoaWNoIGlzIGBpbmRleC5kLnRzYCBmb3IgdGhlIGxpYidzIHJvb3QuXG4gIGNvbnN0IHJlcGxhY2VtZW50TWF0Y2ggPSBMSUJfUkVQTEFDRU1FTlRfUkVHX0VYUC5leGVjKGxpYkZpbGVQYXRoKTtcbiAgaWYgKHJlcGxhY2VtZW50TWF0Y2g/Lmdyb3VwcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbHdheXMgY2FwdHVyZXMgYm90aCBncm91cHMuXG4gICAgY29uc3QgbGliID0gU3RyaW5nKHJlcGxhY2VtZW50TWF0Y2guZ3JvdXBzWydMaWInXSk7XG4gICAgY29uc3Qgc3ViTGliID0gU3RyaW5nKHJlcGxhY2VtZW50TWF0Y2guZ3JvdXBzWydTdWJMaWInXSk7XG4gICAgcmV0dXJuIChzdWJMaWIgPT09ICdpbmRleCcgPyBsaWIgOiBgJHtsaWJ9LiR7c3ViTGliLnJlcGxhY2VBbGwoJy8nLCAnLicpfWApLnRvTG93ZXJDYXNlKCk7XG4gIH1cbiAgcmV0dXJuIGJhc2VuYW1lKGxpYkZpbGVQYXRoKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL15saWJcXC4vLCAnJykucmVwbGFjZSgvXFwuZFxcLnRzJC8sICcnKTtcbn1cblxuZnVuY3Rpb24gdG9NdHNDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG10c0NvbnRlbnQgPSByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiBjb250ZW50LFxuICAgIHJlcGxhY2VyOiAnZnJvbSBcXCckPEltcG9ydFBhdGg+Lm1qc1xcJzsnLFxuICAgIHNlYXJjaFZhbHVlOiBTVEFUSUNfSU1QT1JUX1JFR19FWFBcbiAgfSk7XG4gIHJldHVybiByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiBtdHNDb250ZW50LFxuICAgIHJlcGxhY2VyOiAnaW1wb3J0KCQ8UXVvdGU+JDxJbXBvcnRQYXRoPi5tanMkPFF1b3RlPiknLFxuICAgIHNlYXJjaFZhbHVlOiBEWU5BTUlDX0lNUE9SVF9SRUdfRVhQXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZVN1YnBhdGhQYWNrYWdlSnNvbihmb2xkZXI6IHN0cmluZywgcGFja2FnZUpzb246IFBhY2thZ2VKc29uKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG1rZGlyKGZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGF3YWl0IHdyaXRlSnNvbihqb2luKGZvbGRlciwgUmVwb1BhdGhzLlBhY2thZ2VKc29uKSwgcGFja2FnZUpzb24pO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFB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
|
|
560
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWJyYXJ5LWJ1aWxkLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBUaGUgYnVpbGQgcGlwZWxpbmUgb2YgYSBUeXBlU2NyaXB0IExJQlJBUlkgcGFja2FnZTogb25lIGBkaXN0L2xpYi97Y2pzLGVzbX1gIHRyZWUgb2YgdW5idW5kbGVkIG1vZHVsZXMgYmVzaWRlIGl0c1xuICogYC5kLmN0c2AgLyBgLmQubXRzYCBkZWNsYXJhdGlvbnMsIHRoZSBnZW5lcmF0ZWQgYGluZGV4LnRzYCBiYXJyZWxzLCBhbmQgdGhlIGdlbmVyYXRlZCBgcGFja2FnZS5qc29uYCBgZXhwb3J0c2AgbWFwLlxuICpcbiAqIEVhY2ggc3RlcCB3b3JrcyBvbiB0aGUgY3VycmVudCB3b3JraW5nIGZvbGRlciwgd2hpY2ggaXMgdGhlIHBhY2thZ2UgYmVpbmcgYnVpbHQuIEEgcmVwb3NpdG9yeSdzXG4gKiBgc2NyaXB0cy9idWlsZC0qLnRzYCBlbnRyeSBwb2ludHMgYXJlIHRoaW4gYHdyYXBDbGlUYXNrYCB3cmFwcGVycyBhcm91bmQgdGhlc2UgZnVuY3Rpb25zLCBhbmQgaXRzIGBidWlsZGAgc2NyaXB0XG4gKiBydW5zIHRoZW0gaW4gb3JkZXIgdGhyb3VnaCB7QGxpbmsgcnVuQnVpbGRTdGVwc30uXG4gKi9cblxuaW1wb3J0IHR5cGUge1xuICBCdWlsZE9wdGlvbnMsXG4gIFBsdWdpblxufSBmcm9tICdlc2J1aWxkJztcbmltcG9ydCB0eXBlIHsgRGlyZW50IH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgdHlwZSB7XG4gIE5vZGUsXG4gIFByb2dyYW0sXG4gIFN5bWJvbCBhcyBUc1N5bWJvbCxcbiAgVHlwZUNoZWNrZXJcbn0gZnJvbSAndHlwZXNjcmlwdCc7XG5cbmltcG9ydCB7IGFzeW5jTWFwIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGlzRGVlcEVxdWFsIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL29iamVjdC11dGlscyc7XG5pbXBvcnQge1xuICBiYXNlbmFtZSxcbiAgZGlybmFtZSxcbiAgZXh0bmFtZSxcbiAgam9pbixcbiAgbm9ybWFsaXplSWZSZWxhdGl2ZSxcbiAgcmVsYXRpdmVcbn0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgcmVwbGFjZUFsbCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9zdHJpbmcnO1xuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgY29udGV4dCB9IGZyb20gJ2VzYnVpbGQnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgcmVhZEZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgbWtkaXIsXG4gIHJlYWRGaWxlLFxuICBybSxcbiAgd3JpdGVGaWxlXG59IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHtcbiAgcmVsYXRpdmUgYXMgcmVsYXRpdmVOYXRpdmUsXG4gIHJlc29sdmUgYXMgcmVzb2x2ZU5hdGl2ZVxufSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7XG4gIGNyZWF0ZVByb2dyYW0sXG4gIGZvckVhY2hDaGlsZCxcbiAgaXNJZGVudGlmaWVyLFxuICBpc1N0cmluZ0xpdGVyYWwsXG4gIFN5bWJvbEZsYWdzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgdHlwZSB7IFBhY2thZ2VKc29uIH0gZnJvbSAnLi9ucG0udHMnO1xuXG5pbXBvcnQgeyBidWlsZENsZWFuIH0gZnJvbSAnLi9idWlsZC50cyc7XG5pbXBvcnQgeyBjaGFuZ2VFeHRlbnNpb25QbHVnaW4gfSBmcm9tICcuL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9jaGFuZ2UtZXh0ZW5zaW9uLXBsdWdpbi50cyc7XG5pbXBvcnQgeyBmaXhFc21QbHVnaW4gfSBmcm9tICcuL2J1bmRsZXJzL2VzYnVpbGQtaW1wbC9maXgtZXNtLXBsdWdpbi50cyc7XG5pbXBvcnQgeyBwcmVwcm9jZXNzUGx1Z2luIH0gZnJvbSAnLi9idW5kbGVycy9lc2J1aWxkLWltcGwvcHJlcHJvY2Vzcy1wbHVnaW4udHMnO1xuaW1wb3J0IHsgcGFyc2VUc0NvbmZpZyB9IGZyb20gJy4vY2hlY2stcHJvamVjdC10eXBlcy50cyc7XG5pbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gJy4vY29kZS1nZW5lcmF0b3IudHMnO1xuaW1wb3J0IHsgcmVhZGRpclBvc2l4IH0gZnJvbSAnLi9mcy50cyc7XG5pbXBvcnQgeyB3cml0ZUpzb24gfSBmcm9tICcuL2pzb24udHMnO1xuaW1wb3J0IHsgbnBtUnVuT3B0aW9uYWwgfSBmcm9tICcuL25wbS1ydW4udHMnO1xuaW1wb3J0IHsgZWRpdFBhY2thZ2VKc29uIH0gZnJvbSAnLi9ucG0udHMnO1xuaW1wb3J0IHsgcmVzb2x2ZVRvb2xDb21tYW5kIH0gZnJvbSAnLi9wYWNrYWdlLW1hbmFnZXIudHMnO1xuaW1wb3J0IHsgUmVwb1BhdGhzIH0gZnJvbSAnLi9yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7IGV4ZWNGcm9tUm9vdCB9IGZyb20gJy4vcm9vdC50cyc7XG5cbi8qKlxuICogVGhlIGJhbm5lciBldmVyeSBlbWl0dGVkIGxpYnJhcnkgbW9kdWxlIG9wZW5zIHdpdGguXG4gKi9cbmV4cG9ydCBjb25zdCBMSUJSQVJZX0JBTk5FUiA9IGAvKlxuVEhJUyBJUyBBIEdFTkVSQVRFRC9CVU5ETEVEIEZJTEUgQlkgRVNCVUlMRFxuaWYgeW91IHdhbnQgdG8gdmlldyB0aGUgc291cmNlLCBwbGVhc2UgdmlzaXQgdGhlIGdpdGh1YiByZXBvc2l0b3J5IG9mIHRoaXMgcGx1Z2luXG4qL1xuYDtcblxuLyoqXG4gKiBUaGUgc3RlcHMgb2YgYSBsaWJyYXJ5IGJ1aWxkLCBpbiB0aGUgb3JkZXIge0BsaW5rIHJ1bkJ1aWxkU3RlcHN9IHJ1bnMgdGhlbS5cbiAqL1xuZXhwb3J0IGNvbnN0IExJQlJBUllfQlVJTERfU1RFUFM6IHJlYWRvbmx5IHN0cmluZ1tdID0gW1xuICAnYnVpbGQ6Y2xlYW4nLFxuICAnYnVpbGQ6Z2VuZXJhdGUtaW5kZXgnLFxuICAnYnVpbGQ6Y29tcGlsZScsXG4gICdidWlsZDp0eXBlcycsXG4gICdidWlsZDp2YWxpZGF0ZS1kZWNsYXJhdGlvbnMnLFxuICAnYnVpbGQ6bGliJyxcbiAgJ2J1aWxkOmdlbmVyYXRlLWV4cG9ydHMnLFxuICAnYnVpbGQ6dmFsaWRhdGUtZGVwZW5kZW5jaWVzJ1xuXTtcblxuLyoqXG4gKiBUaGUgZXhwb3J0IGNvbmRpdGlvbiBhIHJlcG9zaXRvcnkgaG9sZGluZyBzZXZlcmFsIHBhY2thZ2VzIG1hcHMgZXZlcnkgc3VicGF0aCBvbnRvIGl0cyBUeXBlU2NyaXB0IHNvdXJjZSB3aXRoLCBzb1xuICogYSBwYWNrYWdlIHRoZXJlIGNhbiBpbXBvcnQgYSBzaWJsaW5nIHBhY2thZ2UncyBzb3VyY2UgYmVmb3JlIGFueXRoaW5nIGlzIGJ1aWx0LiBQYXNzIGl0IHRvXG4gKiB7QGxpbmsgZ2VuZXJhdGVMaWJyYXJ5RXhwb3J0c30gdGhyb3VnaCB7QGxpbmsgR2VuZXJhdGVMaWJyYXJ5RXhwb3J0c09wdGlvbnMuc291cmNlQ29uZGl0aW9ufS5cbiAqL1xuZXhwb3J0IGNvbnN0IFNPVVJDRV9DT05ESVRJT04gPSAnQG1uYW91bW92L3NvdXJjZSc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGJ1aWxkTGlicmFyeX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRMaWJyYXJ5T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBwcmVwcm9jZXNzIHBsdWdpbiBmb3Igb25lIG91dHB1dCBmb3JtYXQuIERlZmF1bHRzIHRvIHRoZSBnZW5lcmljIG9uZSwgd2hpY2ggY2FycmllcyBub1xuICAgKiBlbnZpcm9ubWVudC1zcGVjaWZpYyBgcmVxdWlyZWAgcGF0Y2guXG4gICAqL1xuICByZWFkb25seSBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeT86IChpc0VzbTogYm9vbGVhbikgPT4gUGx1Z2luO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZW5lcmF0ZUxpYnJhcnlFeHBvcnRzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZW5lcmF0ZUxpYnJhcnlFeHBvcnRzT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBFbnRyaWVzIGZvciBmaWxlcyB0aGF0IGFyZSBub3QgYnVpbHQgZnJvbSBhIHNvdXJjZSBmb2xkZXIgKGEgZm9sZGVyIG9mIHNoYXJlZCBgdHNjb25maWdgIHByZXNldHMsIGFtYmllbnQgYC5kLnRzYFxuICAgKiBmaWxlcyksIGtleWVkIGJ5IHN1YnBhdGguIFRoZXkgZ28gaW50byB0aGUgbWFwIGFmdGVyIHRoZSBnZW5lcmF0ZWQgZW50cmllcywgYXMgZ2l2ZW4sIGFuZCBjb3VudCB0b3dhcmQgaXRzIGNoYW5nZVxuICAgKiBjaGVjazsgbm8gc3VicGF0aCBzdHViIGlzIHdyaXR0ZW4gZm9yIHRoZW0uIEEga2V5IGEgc291cmNlIGZvbGRlciBhbHJlYWR5IGdlbmVyYXRlcyB0aHJvd3MuXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsRXhwb3J0cz86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIFBhY2thZ2VKc29uLkV4cG9ydHM+PiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQW4gZXhwb3J0IGNvbmRpdGlvbiB0byBwdXQgZmlyc3QgaW4gZXZlcnkgZW50cnksIG1hcHBpbmcgdGhlIHN1YnBhdGggb250byBpdHMgVHlwZVNjcmlwdCBzb3VyY2UuIE9ubHkgYVxuICAgKiByZXBvc2l0b3J5IGhvbGRpbmcgc2V2ZXJhbCBwYWNrYWdlcyB0aGF0IGltcG9ydCBlYWNoIG90aGVyIG5lZWRzIG9uZTsgbm90aGluZyBvdXRzaWRlIGl0IHNldHMgdGhlIGNvbmRpdGlvbiwgYW5kXG4gICAqIHRoZSBzb3VyY2VzIGl0IHBvaW50cyBhdCBkbyBub3Qgc2hpcCwgc28gdGhlIHB1Ymxpc2ggaGFzIHRvIHN0cmlwIGl0IGFnYWluLiBPbWl0dGVkLCB0aGUgbWFwIGhhcyBub25lLlxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlQ29uZGl0aW9uPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBnZW5lcmF0ZUxpYnJhcnlJbmRleH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2VuZXJhdGVMaWJyYXJ5SW5kZXhPcHRpb25zIHtcbiAgLyoqXG4gICAqIFNvdXJjZSBtb2R1bGVzIG9yIGZvbGRlcnMgdG8gbGVhdmUgb2ZmIHRoZSBnZW5lcmF0ZWQgYmFycmVscywgYXMgcGF0aHMgZnJvbSB0aGUgcGFja2FnZSByb290XG4gICAqIChgc3JjL2RlbW8tdmF1bHQtYnV0dG9ucy50c2AsIGBzcmMvdGVzdC1ydW5uZXJzL2ludGVncmF0aW9uYCkuIEEgbW9kdWxlIHRoYXQgbmVlZHMgYW4gb3B0aW9uYWwgcGVlciwgb3Igb25lIHRoYXRcbiAgICogcnVucyBjb2RlIGF0IGxvYWQgdGltZSB3aGljaCBvbmx5IHdvcmtzIGluc2lkZSBhIHRlc3QgcnVubmVyLCBnb2VzIGhlcmUsIHNvIGltcG9ydGluZyBhIGJhcnJlbCBuZXZlciBsb2FkcyBpdC4gSXQgaXNcbiAgICogc3RpbGwgYnVpbHQgYW5kIHN0YXlzIHJlYWNoYWJsZSB0aHJvdWdoIGl0cyBvd24gc3VicGF0aCBleHBvcnQuIEEgcGF0aCB0aGF0IG5hbWVzIG5vdGhpbmcgdGhlIGJhcnJlbHMgd291bGQgZXhwb3J0XG4gICAqIHRocm93cywgc28gYSByZW5hbWUgY2Fubm90IHF1aWV0bHkgcHV0IHRoZSBtb2R1bGUgYmFjay5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVGcm9tSW5kZXg/OiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcbn1cblxudHlwZSBNb2R1bGVGb3JtYXQgPSAnY2pzJyB8ICdlc20nO1xuXG5jb25zdCBERUNMQVJBVElPTl9SRUZFUkVOQ0VfVFlQRVMgPSBuZXcgU2V0KFsnbm9kZSddKTtcblxuLy8gVGhlIGxpYnMgdGhhdCBkZXNjcmliZSBhIGhvc3QncyBnbG9iYWxzIHJhdGhlciB0aGFuIHRoZSBsYW5ndWFnZSwgd2hpY2ggY29uc3VtZXJzIGNvbmZsaWN0IG92ZXIuIEVhY2ggZGVjbGFyYXRpb25cbi8vIGdldHMgdGhlIG9uZXMgaXQgdXNlczsgZXZlcnkgb3RoZXIgbGliIGlzIHNoYXJlZCB0aHJvdWdoIGBsaWJyYXJ5LXJlZmVyZW5jZXNgLlxuY29uc3QgRU5WSVJPTk1FTlRfTElCX1BSRUZJWEVTOiByZWFkb25seSBzdHJpbmdbXSA9IFsnZG9tJywgJ3NjcmlwdGhvc3QnLCAnd2Vid29ya2VyJ107XG5jb25zdCBOT0RFX1RZUEVTX1BBVEhfU0VHTUVOVCA9ICcvbm9kZV9tb2R1bGVzL0B0eXBlcy9ub2RlLyc7XG5jb25zdCBMSUJfUkVQTEFDRU1FTlRfUkVHX0VYUCA9IC9cXC9ub2RlX21vZHVsZXNcXC9AdHlwZXNjcmlwdFxcL2xpYi0oPzxMaWI+W14vXSspXFwvKD88U3ViTGliPi4rKVxcLmRcXC50cyQvO1xuXG4vLyBUaGUgZGVjbGFyYXRpb24gdGhhdCBjYXJyaWVzIG9ubHkgdGhlIGBsaWJgIGFuZCBgdHlwZXNgIHJlZmVyZW5jZXMuIEV2ZXJ5IGRlY2xhcmF0aW9uIGJ1dCB0aGUgcm9vdCBvbmUgcmVmZXJlbmNlc1xuLy8gaXQsIHJhdGhlciB0aGFuIHRoZSByb290IGJhcnJlbCwgd2hpY2ggd291bGQgbG9hZCBldmVyeSBtb2R1bGUgb2YgdGhlIHBhY2thZ2UsIG9wdGlvbmFsIHBlZXJzJyB0eXBlcyBpbmNsdWRlZC5cbmNvbnN0IExJQlJBUllfUkVGRVJFTkNFU19GSUxFX05BTUUgPSAnbGlicmFyeS1yZWZlcmVuY2VzJztcbi8vIFNwZWxsZWQgYXBhcnQgb24gcHVycG9zZToge0BsaW5rIGNvbGxlY3RBbGxMaWJzfSBzY2FucyBldmVyeSBzb3VyY2UgZmlsZSBvZiB0aGUgcGFja2FnZSBiZWluZyBidWlsdCBmb3IgdGhlXG4vLyBkaXJlY3RpdmUsIHRoaXMgb25lIGluY2x1ZGVkLCBzbyBhIGxpdGVyYWwgb25lIGhlcmUgd291bGQgYmUgcmVhZCBhcyBhIGxpYiB0aGlzIHBhY2thZ2UgbmVlZHMuXG5jb25zdCBSRUZFUkVOQ0VfTElCX0RJUkVDVElWRSA9IFsnPHJlZmVyZW5jZScsICdsaWI9J10uam9pbignICcpO1xuY29uc3QgUkVGRVJFTkNFX0xJQl9SRUdfRVhQID0gL1xcL1xcL1xcLyA8cmVmZXJlbmNlIGxpYj1cIig/PExpYj5bXlwiXSspXCIgXFwvPi9nbTtcblxuLy8gQSBiYXJlLXNwZWNpZmllciAobm9uLXJlbGF0aXZlKSB0eXBlLW9ubHkgaW1wb3J0LCBlLmcuIGBpbXBvcnQgdHlwZSB7IFByb21pc2FibGUgfSBmcm9tICd0eXBlLWZlc3QnO2AuXG5jb25zdCBCQVJFX1RZUEVfSU1QT1JUX1JFR19FWFAgPSAvXmltcG9ydCB0eXBlICg/PENsYXVzZT4uKz8pIGZyb20gJyg/PFNwZWNpZmllcj5bXi4nXVteJ10qKSc7JC9nbTtcblxuLy8gQSBiYXJlLXNwZWNpZmllciAobm9uLXJlbGF0aXZlKSBpbmxpbmUgaW1wb3J0IHR5cGUgbm9kZSwgZS5nLiBgaW1wb3J0KFwidHlwZS1mZXN0XCIpLlByb21pc2FibGVgLiBFaXRoZXIgcXVvdGU6IHRoZVxuLy8gZW1pdCB3cml0ZXMgZG91YmxlIHF1b3Rlcywgd2hpbGUgYSBoYW5kLXdyaXR0ZW4gZGVjbGFyYXRpb24gY29waWVkIGFzIGlzIGtlZXBzIHRoZSBzaW5nbGUgcXVvdGVzIGRwcmludCB3cml0ZXMuXG5jb25zdCBCQVJFX0lOTElORV9JTVBPUlRfVFlQRV9SRUdfRVhQID0gL2ltcG9ydFxcKCg/PFF1b3RlPltcIiddKSg/PFNwZWNpZmllcj5bXi5cIiddW15cIiddKilcXGs8UXVvdGU+XFwpL2c7XG5cbmNvbnN0IFNUQVRJQ19JTVBPUlRfUkVHX0VYUCA9IC9mcm9tICcoPzxJbXBvcnRQYXRoPi4rPylcXC50cyc7L2dtO1xuXG4vLyBJbmxpbmUgaW1wb3J0LXR5cGUgbm9kZXMgKGB0eXBlb2YgaW1wb3J0KCcuL2Zvby50cycpYCkgcHJlc2VydmUgdGhlIHNvdXJjZSBxdW90ZSBzdHlsZS5cbi8vIEhhbmQtYXV0aG9yZWQgYC5kLnRzYCBmaWxlcyBlbWl0IHNpbmdsZSBxdW90ZXM7IHRzYy1nZW5lcmF0ZWQgZGVjbGFyYXRpb25zIGVtaXQgZG91YmxlIHF1b3Rlcy5cbi8vIENhcHR1cmUgdGhlIHF1b3RlIGFuZCByZXVzZSBpdCBpbiB0aGUgcmVwbGFjZW1lbnQgc28gYm90aCBzdHlsZXMgYXJlIHJld3JpdHRlbi5cbmNvbnN0IERZTkFNSUNfSU1QT1JUX1JFR19FWFAgPSAvaW1wb3J0XFwoKD88UXVvdGU+WydcIl0pKD88SW1wb3J0UGF0aD4uKz8pXFwudHNcXGs8UXVvdGU+XFwpL2dtO1xuXG5lbnVtIEdlbmVyYXRlSW5kZXhSZXN1bHQge1xuICBTa2lwcGVkID0gJ3NraXBwZWQnLFxuICBTdWNjZXNzID0gJ3N1Y2Nlc3MnXG59XG5cbmludGVyZmFjZSBBZGRFbnZpcm9ubWVudEdsb2JhbHNQYXJhbXMge1xuICByZWFkb25seSBsaWJzOiBTZXQ8c3RyaW5nPjtcbiAgcmVhZG9ubHkgcHJvZ3JhbTogUHJvZ3JhbTtcbiAgcmVhZG9ubHkgc3ltYm9sOiBUc1N5bWJvbDtcbiAgcmVhZG9ubHkgdHlwZXM6IFNldDxzdHJpbmc+O1xufVxuXG5pbnRlcmZhY2UgQnVpbGRMaWJyYXJ5Rm9ybWF0UGFyYW1zIHtcbiAgcmVhZG9ubHkgZm9ybWF0OiBNb2R1bGVGb3JtYXQ7XG4gIHJlYWRvbmx5IGxpYkZpbGVzOiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcHJlcHJvY2Vzc1BsdWdpbkZhY3Rvcnk6IChpc0VzbTogYm9vbGVhbikgPT4gUGx1Z2luO1xufVxuXG5pbnRlcmZhY2UgQnVpbGRSZWZlcmVuY2VQYXRoRGlyZWN0aXZlUGFyYW1zIHtcbiAgcmVhZG9ubHkgZGVjbGFyYXRpb25GaWxlUGF0aDogc3RyaW5nO1xuICByZWFkb25seSBleHRlbnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkgbW9kdWxlRGlyZWN0b3J5OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBDb2xsZWN0RW52aXJvbm1lbnREaXJlY3RpdmVzUGFyYW1zIHtcbiAgcmVhZG9ubHkgYXZhaWxhYmxlVHlwZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICByZWFkb25seSBkZWNsYXJhdGlvbkZpbGVzOiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIEdlbmVyYXRlSW5kZXhQYXJhbXMge1xuICByZWFkb25seSBleGNsdWRlZFBhdGhzOiBSZWFkb25seVNldDxzdHJpbmc+O1xuICByZWFkb25seSBmb2xkZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgdW5tYXRjaGVkUGF0aHM6IFNldDxzdHJpbmc+O1xufVxuXG5pbnRlcmZhY2UgU2V0RXhwb3J0UGFyYW1zIHtcbiAgcmVhZG9ubHkgZXhwb3J0Q29uZGl0aW9uczogUGFja2FnZUpzb24uRXhwb3J0Q29uZGl0aW9ucztcbiAgcmVhZG9ubHkgaXNXaWxkY2FyZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgc291cmNlQ29uZGl0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IHNyY0ZvbGRlcjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgVG9EaXN0UGF0aFBhcmFtcyB7XG4gIHJlYWRvbmx5IGZvcm1hdDogc3RyaW5nO1xuICByZWFkb25seSBpbXBvcnRQYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGV2ZXJ5dGhpbmcgYW4gZWFybGllciBidWlsZCBsZWZ0OiBgZGlzdC9gLCB0aGUgZ2VuZXJhdGVkIGBpbmRleC50c2AgYmFycmVscywgdGhlIGAuZC50c2AgZmlsZXMgYHRzY2Agd3JvdGVcbiAqIGJlc2lkZSB0aGUgc291cmNlcyAoaGFuZC1hdXRob3JlZCBvbmVzIHVuZGVyIGBAdHlwZXNgIHN0YXkpLCBhbmQgdGhlIHBlci1zdWJwYXRoIGBwYWNrYWdlLmpzb25gIHN0dWJzLlxuICpcbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiBldmVyeXRoaW5nIGhhcyBiZWVuIHJlbW92ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZENsZWFuTGlicmFyeSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgYnVpbGRDbGVhbigpO1xuICBmb3IgKGNvbnN0IGZpbGUgb2YgYXdhaXQgcmVhZGRpclBvc2l4KFJlcG9QYXRocy5TcmMsIHsgcmVjdXJzaXZlOiB0cnVlIH0pKSB7XG4gICAgaWYgKGJhc2VuYW1lKGZpbGUpID09PSBSZXBvUGF0aHMuSW5kZXhUcyBhcyBzdHJpbmcpIHtcbiAgICAgIGF3YWl0IHJtKGpvaW4oUmVwb1BhdGhzLlNyYywgZmlsZSkpO1xuICAgIH1cblxuICAgIGlmIChmaWxlLmVuZHNXaXRoKFJlcG9QYXRocy5EdHNFeHRlbnNpb24pICYmICFmaWxlLnNwbGl0KCcvJykuaW5jbHVkZXMoUmVwb1BhdGhzLlR5cGVzKSkge1xuICAgICAgYXdhaXQgcm0oam9pbihSZXBvUGF0aHMuU3JjLCBmaWxlKSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGF3YWl0IHJlYWRkaXJQb3NpeChSZXBvUGF0aHMuQ3VycmVudEZvbGRlciwgeyByZWN1cnNpdmU6IHRydWUgfSkpIHtcbiAgICBpZiAoKGJhc2VuYW1lKGZpbGUpICE9PSBSZXBvUGF0aHMuUGFja2FnZUpzb24gYXMgc3RyaW5nKSB8fCAoZmlsZSA9PT0gUmVwb1BhdGhzLlBhY2thZ2VKc29uIGFzIHN0cmluZykgfHwgZmlsZS5zdGFydHNXaXRoKFJlcG9QYXRocy5Ob2RlTW9kdWxlcykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGF3YWl0IHJtKGZpbGUpO1xuICB9XG59XG5cbi8qKlxuICogQnVpbGRzIGV2ZXJ5IHNvdXJjZSBtb2R1bGUsIHVuYnVuZGxlZCwgaW50byBgZGlzdC9saWIvY2pzYCAoYC5janNgKSBhbmQgYGRpc3QvbGliL2VzbWAgKGAubWpzYCkuXG4gKlxuICogVGhlIG91dHB1dCBmb2xkZXJzIG11c3QgYWxyZWFkeSBleGlzdDsge0BsaW5rIGJ1aWxkTGlicmFyeVR5cGVzfSBjcmVhdGVzIHRoZW0uXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgYnVpbGQgb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgd2hlbiBib3RoIGZvcm1hdHMgaGF2ZSBiZWVuIGJ1aWx0LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRMaWJyYXJ5KG9wdGlvbnM6IEJ1aWxkTGlicmFyeU9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IHByZXByb2Nlc3NQbHVnaW5GYWN0b3J5ID0gKGlzRXNtOiBib29sZWFuKTogUGx1Z2luID0+IHByZXByb2Nlc3NQbHVnaW4oeyBpc0VzbSB9KSB9ID0gb3B0aW9ucztcbiAgY29uc3QgbGliRmlsZXMgPSBhd2FpdCBnZXRMaWJGaWxlcygpO1xuICBhd2FpdCBidWlsZExpYnJhcnlGb3JtYXQoeyBmb3JtYXQ6ICdjanMnLCBsaWJGaWxlcywgcHJlcHJvY2Vzc1BsdWdpbkZhY3RvcnkgfSk7XG4gIGF3YWl0IGJ1aWxkTGlicmFyeUZvcm1hdCh7IGZvcm1hdDogJ2VzbScsIGxpYkZpbGVzLCBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeSB9KTtcbn1cblxuLyoqXG4gKiBFbWl0cyB0aGUgZGVjbGFyYXRpb25zIHdpdGggYHRzYyAtLXByb2plY3QgLi90c2NvbmZpZy50eXBlcy5qc29uYCwgdGhlbiBjb3BpZXMgZWFjaCBvbmUgaW50byBgZGlzdC9saWJgIHR3aWNlOiBhcyBhXG4gKiBgLmQuY3RzYCB3aG9zZSByZWxhdGl2ZSBpbXBvcnRzIG5hbWUgYC5janNgIGZpbGVzIGFuZCB3aG9zZSBiYXJlIHR5cGUgaW1wb3J0cyBjYXJyeSBgcmVzb2x1dGlvbi1tb2RlOiBpbXBvcnRgLCBhbmRcbiAqIGFzIGEgYC5kLm10c2Agd2hvc2UgcmVsYXRpdmUgaW1wb3J0cyBuYW1lIGAubWpzYCBmaWxlcy5cbiAqXG4gKiBUaGUgbGlicmFyeSdzIHJvb3QgZGVjbGFyYXRpb24gKGBsaWJyYXJ5LnRzYCB3aGVyZSB0aGUgcGFja2FnZSBoYXMgb25lLCBvdGhlcndpc2UgdGhlIGdlbmVyYXRlZCBgaW5kZXgudHNgKSBjYXJyaWVzXG4gKiBldmVyeSBgbGliYCBhbmQgYHR5cGVzYCByZWZlcmVuY2UgdGhlIHBhY2thZ2UgbmVlZHMuIEV2ZXJ5IG90aGVyIGRlY2xhcmF0aW9uIHJlZmVyZW5jZXMgYSBgbGlicmFyeS1yZWZlcmVuY2VzYFxuICogZGVjbGFyYXRpb24gYmVzaWRlIGl0IGJ5IHBhdGgsIG5ldmVyIHRoZSByb290OiB0aGUgcm9vdCBiYXJyZWwgcmUtZXhwb3J0cyBldmVyeSBtb2R1bGUsIHNvIHJlZmVyZW5jaW5nIGl0IG1hZGUgZWFjaFxuICogc3VicGF0aCBsb2FkIHRoZSB3aG9sZSBwYWNrYWdlLCBhbmQgYSBjb25zdW1lciB0eXBlLWNoZWNraW5nIHdpdGggYHNraXBMaWJDaGVjazogZmFsc2VgIHRoZW4gbmVlZGVkIGV2ZXJ5IG9wdGlvbmFsXG4gKiBwZWVyIGluc3RhbGxlZC5cbiAqXG4gKiBgbGlicmFyeS1yZWZlcmVuY2VzYCBjYXJyaWVzIG9ubHkgdGhlIGxpYnMgdGhhdCBkZXNjcmliZSB0aGUgbGFuZ3VhZ2UgKGBlczIwMjJgLCBgZXNuZXh0LmRpc3Bvc2FibGVgKSwgd2hpY2ggbm9cbiAqIGNvbnN1bWVyIGNvbmZsaWN0cyB3aXRoLiBUaGUgb25lcyB0aGF0IGRlc2NyaWJlIGEgaG9zdCAoYGRvbWAsIGBkb20uaXRlcmFibGVgLCBgd2Vid29ya2VyYCkgYW5kIGB0eXBlcz1cIm5vZGVcImAgZ29cbiAqIG9ubHkgaW50byB0aGUgZGVjbGFyYXRpb25zIHRoYXQgbmFtZSBvbmUgb2YgdGhlaXIgZ2xvYmFscywgZm91bmQgYnkgcmVzb2x2aW5nIGV2ZXJ5IG5hbWUgaW4gdGhlIGVtaXR0ZWRcbiAqIGRlY2xhcmF0aW9ucyB3aXRoIHRoZSB0eXBlIGNoZWNrZXIuIE90aGVyd2lzZSBhIGJyb3dzZXIgY29uc3VtZXIgb2YgYSBwdXJlIHN1YnBhdGggZ290IGFsbCBvZiBgQHR5cGVzL25vZGVgLCBhbmQgaXRzXG4gKiBgc2V0VGltZW91dGAgcmV0dXJuZWQgYE5vZGVKUy5UaW1lb3V0YC5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGRlY2xhcmF0aW9ucyBoYXZlIGJlZW4gd3JpdHRlbi5cbiAqIEB0aHJvd3MgSWYgYSBzb3VyY2UgbW9kdWxlIGlzIG5hbWVkIGBsaWJyYXJ5LXJlZmVyZW5jZXNgLCB3aGljaCB3b3VsZCBjb2xsaWRlIHdpdGggdGhlIGdlbmVyYXRlZCBkZWNsYXJhdGlvbi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkTGlicmFyeVR5cGVzKCk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoZXhpc3RzU3luYyhqb2luKFJlcG9QYXRocy5TcmMsIGAke0xJQlJBUllfUkVGRVJFTkNFU19GSUxFX05BTUV9JHtSZXBvUGF0aHMuVHNFeHRlbnNpb259YCkpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzcmMvJHtMSUJSQVJZX1JFRkVSRU5DRVNfRklMRV9OQU1FfSR7UmVwb1BhdGhzLlRzRXh0ZW5zaW9ufSBjb2xsaWRlcyB3aXRoIHRoZSBnZW5lcmF0ZWQgZGVjbGFyYXRpb24gb2YgdGhlIHNhbWUgbmFtZS5gKTtcbiAgfVxuXG4gIGF3YWl0IGV4ZWNGcm9tUm9vdChbLi4ucmVzb2x2ZVRvb2xDb21tYW5kKHsgdG9vbDogJ3RzYycgfSksICctLXByb2plY3QnLCAnLi90c2NvbmZpZy50eXBlcy5qc29uJ10pO1xuXG4gIGNvbnN0IGxpYnJhcnlGaWxlTmFtZSA9IGV4aXN0c1N5bmMoam9pbihSZXBvUGF0aHMuU3JjLCAnbGlicmFyeS50cycpKSA/ICdsaWJyYXJ5JyA6ICdpbmRleCc7XG4gIGNvbnN0IGFsbExpYnMgPSBhd2FpdCBjb2xsZWN0QWxsTGlicygpO1xuICBjb25zdCBhbGxUeXBlcyA9IGNvbGxlY3RBbGxUeXBlcygpO1xuICBjb25zdCBkaXJlY3RpdmVzID0gYnVpbGRBbGxSZWZlcmVuY2VMaWJEaXJlY3RpdmVzKGFsbExpYnMpICsgYnVpbGRBbGxSZWZlcmVuY2VUeXBlc0RpcmVjdGl2ZXMoYWxsVHlwZXMpO1xuICAvLyBPbmx5IHRoZSBsaWJzIG5vIGNvbnN1bWVyIGNvbmZsaWN0cyB3aXRoLiBUaGUgZW52aXJvbm1lbnQgZ2xvYmFscyBnbyB0byB0aGUgZGVjbGFyYXRpb25zIHRoYXQgdXNlIHRoZW0uXG4gIGNvbnN0IHNoYXJlZERpcmVjdGl2ZXMgPSBidWlsZEFsbFJlZmVyZW5jZUxpYkRpcmVjdGl2ZXMoYWxsTGlicy5maWx0ZXIoKGxpYikgPT4gIWlzRW52aXJvbm1lbnRMaWIobGliKSkpO1xuXG4gIGF3YWl0IG1rZGlyKGpvaW4oUmVwb1BhdGhzLkRpc3RMaWIsIFJlcG9QYXRocy5DanMpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgYXdhaXQgbWtkaXIoam9pbihSZXBvUGF0aHMuRGlzdExpYiwgUmVwb1BhdGhzLkVzbSksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCB3cml0ZUZpbGUoam9pbihSZXBvUGF0aHMuRGlzdExpYiwgUmVwb1BhdGhzLkNqcywgTElCUkFSWV9SRUZFUkVOQ0VTX0ZJTEVfTkFNRSArIFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKSwgc2hhcmVkRGlyZWN0aXZlcyk7XG4gIGF3YWl0IHdyaXRlRmlsZShqb2luKFJlcG9QYXRocy5EaXN0TGliLCBSZXBvUGF0aHMuRXNtLCBMSUJSQVJZX1JFRkVSRU5DRVNfRklMRV9OQU1FICsgUmVwb1BhdGhzLkRtdHNFeHRlbnNpb24pLCBzaGFyZWREaXJlY3RpdmVzKTtcblxuICBjb25zdCBzcmNGaWxlcyA9IGF3YWl0IHJlYWRkaXJQb3NpeChSZXBvUGF0aHMuU3JjLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3QgZGVjbGFyYXRpb25GaWxlcyA9IHNyY0ZpbGVzLmZpbHRlcigoZmlsZSkgPT4gZmlsZS5lbmRzV2l0aChSZXBvUGF0aHMuRHRzRXh0ZW5zaW9uKSAmJiAhZmlsZS5zdGFydHNXaXRoKFJlcG9QYXRocy5UZXN0SGVscGVycykpO1xuICBjb25zdCBlbnZpcm9ubWVudERpcmVjdGl2ZXMgPSBjb2xsZWN0RW52aXJvbm1lbnREaXJlY3RpdmVzKHsgYXZhaWxhYmxlVHlwZXM6IGFsbFR5cGVzLCBkZWNsYXJhdGlvbkZpbGVzIH0pO1xuXG4gIGZvciAoY29uc3QgZmlsZSBvZiBkZWNsYXJhdGlvbkZpbGVzKSB7XG4gICAgY29uc3QgZm9sZGVyID0gZGlybmFtZShmaWxlKTtcbiAgICBjb25zdCBuYW1lID0gYmFzZW5hbWUoZmlsZSwgUmVwb1BhdGhzLkR0c0V4dGVuc2lvbik7XG4gICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGpvaW4oUmVwb1BhdGhzLlNyYywgZmlsZSksICd1dGYtOCcpO1xuXG4gICAgY29uc3QgY3RzUGF0aCA9IGpvaW4oUmVwb1BhdGhzLkRpc3RMaWIsIFJlcG9QYXRocy5DanMsIGZvbGRlciwgbmFtZSArIFJlcG9QYXRocy5EY3RzRXh0ZW5zaW9uKTtcbiAgICBjb25zdCBtdHNQYXRoID0gam9pbihSZXBvUGF0aHMuRGlzdExpYiwgUmVwb1BhdGhzLkVzbSwgZm9sZGVyLCBuYW1lICsgUmVwb1BhdGhzLkRtdHNFeHRlbnNpb24pO1xuXG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShjdHNQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShtdHNQYXRoKSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgICBsZXQgY3RzQ29udGVudCA9IHRvQ3RzQ29udGVudChjb250ZW50KTtcbiAgICBsZXQgbXRzQ29udGVudCA9IHRvTXRzQ29udGVudChjb250ZW50KTtcblxuICAgIGlmIChuYW1lID09PSBsaWJyYXJ5RmlsZU5hbWUgJiYgZm9sZGVyID09PSAnLicpIHtcbiAgICAgIGN0c0NvbnRlbnQgPSBkaXJlY3RpdmVzICsgY3RzQ29udGVudDtcbiAgICAgIG10c0NvbnRlbnQgPSBkaXJlY3RpdmVzICsgbXRzQ29udGVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlsZURpcmVjdGl2ZXMgPSBlbnZpcm9ubWVudERpcmVjdGl2ZXMuZ2V0KGZpbGUpID8/ICcnO1xuICAgICAgY3RzQ29udGVudCA9IGJ1aWxkUmVmZXJlbmNlUGF0aERpcmVjdGl2ZSh7IGRlY2xhcmF0aW9uRmlsZVBhdGg6IGN0c1BhdGgsIGV4dGVuc2lvbjogUmVwb1BhdGhzLkRjdHNFeHRlbnNpb24sIG1vZHVsZURpcmVjdG9yeTogUmVwb1BhdGhzLkNqcyB9KVxuICAgICAgICArIGZpbGVEaXJlY3RpdmVzICsgY3RzQ29udGVudDtcbiAgICAgIG10c0NvbnRlbnQgPSBidWlsZFJlZmVyZW5jZVBhdGhEaXJlY3RpdmUoeyBkZWNsYXJhdGlvbkZpbGVQYXRoOiBtdHNQYXRoLCBleHRlbnNpb246IFJlcG9QYXRocy5EbXRzRXh0ZW5zaW9uLCBtb2R1bGVEaXJlY3Rvcnk6IFJlcG9QYXRocy5Fc20gfSlcbiAgICAgICAgKyBmaWxlRGlyZWN0aXZlcyArIG10c0NvbnRlbnQ7XG4gICAgfVxuXG4gICAgYXdhaXQgd3JpdGVGaWxlKGN0c1BhdGgsIGN0c0NvbnRlbnQpO1xuICAgIGF3YWl0IHdyaXRlRmlsZShtdHNQYXRoLCBtdHNDb250ZW50KTtcbiAgfVxufVxuXG4vKipcbiAqIFJlZ2VuZXJhdGVzIHRoZSBgZXhwb3J0c2AgbWFwIG9mIHRoZSBwYWNrYWdlJ3MgYHBhY2thZ2UuanNvbmAgZnJvbSBpdHMgc291cmNlIGZvbGRlcnMsIGFuZCB3cml0ZXMgYSBgcGFja2FnZS5qc29uYFxuICogc3R1YiBwZXIgc3VicGF0aCBmb3IgcmVzb2x2ZXJzIHRoYXQgZG8gbm90IHJlYWQgYGV4cG9ydHNgLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHtAbGluayBHZW5lcmF0ZUxpYnJhcnlFeHBvcnRzT3B0aW9uc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIG1hcCBpcyBjdXJyZW50LlxuICogQHRocm93cyBJZiB0aGUgbWFwIGNoYW5nZWQsIHNvIHRoZSBjaGFuZ2UgZ2V0cyByZXZpZXdlZCBhbmQgY29tbWl0dGVkIHJhdGhlciB0aGFuIHNoaXBwZWQgdW5zZWVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVMaWJyYXJ5RXhwb3J0cyhvcHRpb25zOiBHZW5lcmF0ZUxpYnJhcnlFeHBvcnRzT3B0aW9ucyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgYWRkaXRpb25hbEV4cG9ydHMgPSB7fSwgc291cmNlQ29uZGl0aW9uIH0gPSBvcHRpb25zO1xuICBjb25zdCBzcmNGb2xkZXJzOiBzdHJpbmdbXSA9IFtSZXBvUGF0aHMuU3JjXTtcblxuICBmb3IgKGNvbnN0IGRpcmVudCBvZiBhd2FpdCByZWFkZGlyUG9zaXgoUmVwb1BhdGhzLlNyYywgeyByZWN1cnNpdmU6IHRydWUsIHdpdGhGaWxlVHlwZXM6IHRydWUgfSkpIHtcbiAgICBpZiAoIWRpcmVudC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXRoID0gam9pbihkaXJlbnQucGFyZW50UGF0aCwgZGlyZW50Lm5hbWUpO1xuXG4gICAgaWYgKHBhdGguaW5jbHVkZXMoUmVwb1BhdGhzLlN0eWxlcykgfHwgcGF0aC5pbmNsdWRlcyhSZXBvUGF0aHMuVGVzdEhlbHBlcnMpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBzcmNGb2xkZXJzLnB1c2gocGF0aCk7XG4gIH1cblxuICBzcmNGb2xkZXJzLnNvcnQoKTtcblxuICBsZXQgaXNDaGFuZ2VkID0gZmFsc2U7XG5cbiAgYXdhaXQgZWRpdFBhY2thZ2VKc29uKGFzeW5jIChwYWNrYWdlSnNvbikgPT4ge1xuICAgIGNvbnN0IG9sZEV4cG9ydHMgPSBwYWNrYWdlSnNvbi5leHBvcnRzO1xuICAgIGNvbnN0IGV4cG9ydENvbmRpdGlvbnM6IFBhY2thZ2VKc29uLkV4cG9ydENvbmRpdGlvbnMgPSB7fTtcbiAgICBwYWNrYWdlSnNvbi5leHBvcnRzID0gZXhwb3J0Q29uZGl0aW9ucztcbiAgICBmb3IgKGNvbnN0IHNyY0ZvbGRlciBvZiBzcmNGb2xkZXJzKSB7XG4gICAgICBhd2FpdCBzZXRFeHBvcnQoeyBleHBvcnRDb25kaXRpb25zLCBpc1dpbGRjYXJkOiBmYWxzZSwgc291cmNlQ29uZGl0aW9uLCBzcmNGb2xkZXIgfSk7XG4gICAgICBhd2FpdCBzZXRFeHBvcnQoeyBleHBvcnRDb25kaXRpb25zLCBpc1dpbGRjYXJkOiB0cnVlLCBzb3VyY2VDb25kaXRpb24sIHNyY0ZvbGRlciB9KTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtzdWJwYXRoLCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMoYWRkaXRpb25hbEV4cG9ydHMpKSB7XG4gICAgICBpZiAoZXhwb3J0Q29uZGl0aW9uc1tzdWJwYXRoXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGFkZGl0aW9uYWwgZXhwb3J0ICcke3N1YnBhdGh9JyBjb2xsaWRlcyB3aXRoIGFuIGVudHJ5IGdlbmVyYXRlZCBmcm9tIGEgc291cmNlIGZvbGRlci5gKTtcbiAgICAgIH1cblxuICAgICAgZXhwb3J0Q29uZGl0aW9uc1tzdWJwYXRoXSA9IGVudHJ5O1xuICAgIH1cblxuICAgIGlzQ2hhbmdlZCA9ICFpc0RlZXBFcXVhbChvbGRFeHBvcnRzLCBwYWNrYWdlSnNvbi5leHBvcnRzKTtcbiAgfSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb24gLS0gSXQgY2hhbmdlZCBpbiB0aGUgYGVkaXRQYWNrYWdlSnNvbmAsIEVTTGludCBtaXN0YWtlbmx5IGRvZXMgbm90IHJlY29nbml6ZSBpdC5cbiAgaWYgKGlzQ2hhbmdlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGFja2FnZSBleHBvcnRzIGhhdmUgY2hhbmdlZC4gUGxlYXNlIHJldmlldyB0aGUgY2hhbmdlcyBhbmQgY29tbWl0IHRoZW0uJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYW4gYGluZGV4LnRzYCBiYXJyZWwgaW4gZXZlcnkgc291cmNlIGZvbGRlciB0aGF0IGhhcyBzb21ldGhpbmcgdG8gZXhwb3J0LCByZS1leHBvcnRpbmcgZWFjaCBtb2R1bGUgYW5kXG4gKiBlYWNoIHN1Yi1iYXJyZWwgdW5kZXIgaXRzIG93biBuYW1lLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIGJhcnJlbHMgaGF2ZSBiZWVuIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUxpYnJhcnlJbmRleChvcHRpb25zOiBHZW5lcmF0ZUxpYnJhcnlJbmRleE9wdGlvbnMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBleGNsdWRlZFBhdGhzID0gbmV3IFNldCgob3B0aW9ucy5leGNsdWRlRnJvbUluZGV4ID8/IFtdKS5tYXAoKHBhdGgpID0+IGpvaW4ocGF0aC5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKSkucmVwbGFjZSgvXFwvJC8sICcnKSkpO1xuICBjb25zdCB1bm1hdGNoZWRQYXRocyA9IG5ldyBTZXQoZXhjbHVkZWRQYXRocyk7XG4gIGF3YWl0IGdlbmVyYXRlSW5kZXgoeyBleGNsdWRlZFBhdGhzLCBmb2xkZXI6IFJlcG9QYXRocy5TcmMsIHVubWF0Y2hlZFBhdGhzIH0pO1xuXG4gIGlmICh1bm1hdGNoZWRQYXRocy5zaXplID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgZXhjbHVkZUZyb21JbmRleCBuYW1lcyBubyBtb2R1bGUgdGhlIGJhcnJlbHMgd291bGQgZXhwb3J0OiAke1suLi51bm1hdGNoZWRQYXRoc10uam9pbignLCAnKX0uYCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSdW5zIGVhY2ggbmFtZWQgbnBtIHNjcmlwdCB0aGUgcGFja2FnZSBkZWZpbmVzLCBpbiBvcmRlciwgc2tpcHBpbmcgdGhlIG9uZXMgaXQgZG9lcyBub3QgZGVmaW5lLlxuICpcbiAqIEBwYXJhbSBzdGVwcyAtIFRoZSBucG0gc2NyaXB0IG5hbWVzLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aGVuIGV2ZXJ5IHN0ZXAgaGFzIHJ1bi5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkJ1aWxkU3RlcHMoc3RlcHM6IHJlYWRvbmx5IHN0cmluZ1tdID0gTElCUkFSWV9CVUlMRF9TVEVQUyk6IFByb21pc2U8dm9pZD4ge1xuICBmb3IgKGNvbnN0IHN0ZXAgb2Ygc3RlcHMpIHtcbiAgICBhd2FpdCBucG1SdW5PcHRpb25hbChzdGVwKTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZHMgd2hhdCBhIGNvbnN1bWVyIG5lZWRzIGxvYWRlZCBmb3Igb25lIHN5bWJvbCBhIGRlY2xhcmF0aW9uIG5hbWVzLiBBIHN5bWJvbCBhbnkgRVMgbGliIGRlY2xhcmVzIG5lZWRzIG5vdGhpbmcsXG4gKiBiZWNhdXNlIG5vIGNvbnN1bWVyIGNvbmZsaWN0cyB3aXRoIHRob3NlIGxpYnMuIE90aGVyd2lzZSBlYWNoIGVudmlyb25tZW50IGxpYiB0aGF0IGRlY2xhcmVzIGl0IGFkZHMgaXRzZWxmLCBhbmRcbiAqIGZhaWxpbmcgdGhhdCBgQHR5cGVzL25vZGVgIGFkZHMgYG5vZGVgLiBBIHN5bWJvbCBkZWNsYXJlZCBpbiB0aGUgcGFja2FnZSdzIG93biBmaWxlcyBhZGRzIG5vdGhpbmc6IHRoZSBkZWNsYXJhdGlvblxuICogdGhhdCBob2xkcyBpdCBjYXJyaWVzIGl0cyBvd24gZGlyZWN0aXZlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHN5bWJvbCwgdGhlIHByb2dyYW0gaXQgd2FzIHJlc29sdmVkIGluLCBhbmQgdGhlIHNldHMgdG8gYWRkIHRvLlxuICovXG5mdW5jdGlvbiBhZGRFbnZpcm9ubWVudEdsb2JhbHMocGFyYW1zOiBBZGRFbnZpcm9ubWVudEdsb2JhbHNQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBsaWJzLCBwcm9ncmFtLCBzeW1ib2wsIHR5cGVzIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGVudmlyb25tZW50TGliczogc3RyaW5nW10gPSBbXTtcbiAgbGV0IGlzTm9kZSA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgZGVjbGFyYXRpb24gb2Ygc3ltYm9sLmRlY2xhcmF0aW9ucyA/PyBbXSkge1xuICAgIGNvbnN0IHNvdXJjZUZpbGUgPSBkZWNsYXJhdGlvbi5nZXRTb3VyY2VGaWxlKCk7XG4gICAgaWYgKHByb2dyYW0uaXNTb3VyY2VGaWxlRGVmYXVsdExpYnJhcnkoc291cmNlRmlsZSkpIHtcbiAgICAgIGNvbnN0IGxpYiA9IHRvTGliTmFtZShzb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICAgIGlmICghaXNFbnZpcm9ubWVudExpYihsaWIpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVudmlyb25tZW50TGlicy5wdXNoKGxpYik7XG4gICAgfSBlbHNlIGlmIChzb3VyY2VGaWxlLmZpbGVOYW1lLmluY2x1ZGVzKE5PREVfVFlQRVNfUEFUSF9TRUdNRU5UKSkge1xuICAgICAgaXNOb2RlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAoZW52aXJvbm1lbnRMaWJzLmxlbmd0aCA+IDApIHtcbiAgICBmb3IgKGNvbnN0IGxpYiBvZiBlbnZpcm9ubWVudExpYnMpIHtcbiAgICAgIGxpYnMuYWRkKGxpYik7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTm9kZSkge1xuICAgIHR5cGVzLmFkZCgnbm9kZScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWxsUmVmZXJlbmNlTGliRGlyZWN0aXZlcyhsaWJzOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtcbiAgICBsaWJzXG4gICAgICAubWFwKChsaWIpID0+IGAvLy8gJHtSRUZFUkVOQ0VfTElCX0RJUkVDVElWRX1cIiR7bGlifVwiIC8+YClcbiAgICAgIC5qb2luKCdcXG4nKVxuICB9XFxuYDtcbn1cblxuZnVuY3Rpb24gYnVpbGRBbGxSZWZlcmVuY2VUeXBlc0RpcmVjdGl2ZXModHlwZXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVzLmxlbmd0aCA9PT0gMFxuICAgID8gJydcbiAgICA6IGAke1xuICAgICAgdHlwZXNcbiAgICAgICAgLm1hcCgodHlwZSkgPT4gYC8vLyA8cmVmZXJlbmNlIHR5cGVzPVwiJHt0eXBlfVwiIC8+YClcbiAgICAgICAgLmpvaW4oJ1xcbicpXG4gICAgfVxcbmA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGJ1aWxkTGlicmFyeUZvcm1hdChwYXJhbXM6IEJ1aWxkTGlicmFyeUZvcm1hdFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGZvcm1hdCwgbGliRmlsZXMsIHByZXByb2Nlc3NQbHVnaW5GYWN0b3J5IH0gPSBwYXJhbXM7XG4gIGNvbnN0IGV4dGVuc2lvbiA9IGZvcm1hdCA9PT0gJ2NqcycgPyBSZXBvUGF0aHMuQ2pzRXh0ZW5zaW9uIDogUmVwb1BhdGhzLk1qc0V4dGVuc2lvbjtcbiAgY29uc3QgYnVpbGRPcHRpb25zOiBCdWlsZE9wdGlvbnMgPSB7XG4gICAgLy8gRXhwbGljaXQsIGJlY2F1c2UgZXNidWlsZCBvdGhlcndpc2UgdGFrZXMgdGhlIGZvbGRlciBpdHMgc2VydmljZSBwcm9jZXNzIHN0YXJ0ZWQgaW4uXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gZXNidWlsZCdzIG93biBvcHRpb24gbmFtZS5cbiAgICBhYnNXb3JraW5nRGlyOiBwcm9jZXNzLmN3ZCgpLFxuICAgIGJhbm5lcjoge1xuICAgICAganM6IExJQlJBUllfQkFOTkVSXG4gICAgfSxcbiAgICBidW5kbGU6IGZhbHNlLFxuICAgIGVudHJ5UG9pbnRzOiBsaWJGaWxlcyxcbiAgICBmb3JtYXQsXG4gICAgbG9nTGV2ZWw6ICdpbmZvJyxcbiAgICBvdXRkaXI6IGpvaW4oUmVwb1BhdGhzLkRpc3RMaWIsIGZvcm1hdCksXG4gICAgcGxhdGZvcm06ICdub2RlJyxcbiAgICBwbHVnaW5zOiBbXG4gICAgICBwcmVwcm9jZXNzUGx1Z2luRmFjdG9yeShmb3JtYXQgPT09ICdlc20nKSxcbiAgICAgIGZpeEVzbVBsdWdpbigpLFxuICAgICAgY2hhbmdlRXh0ZW5zaW9uUGx1Z2luKGV4dGVuc2lvbilcbiAgICBdLFxuICAgIHNvdXJjZW1hcDogJ2lubGluZScsXG4gICAgdGFyZ2V0OiAnRVMyMDIyJyxcbiAgICB0cmVlU2hha2luZzogdHJ1ZSxcbiAgICB3cml0ZTogZmFsc2VcbiAgfTtcblxuICBjb25zdCBidWlsZENvbnRleHQgPSBhd2FpdCBjb250ZXh0KGJ1aWxkT3B0aW9ucyk7XG4gIHRyeSB7XG4gICAgYXdhaXQgYnVpbGRDb250ZXh0LnJlYnVpbGQoKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBidWlsZENvbnRleHQuZGlzcG9zZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUmVmZXJlbmNlUGF0aERpcmVjdGl2ZShwYXJhbXM6IEJ1aWxkUmVmZXJlbmNlUGF0aERpcmVjdGl2ZVBhcmFtcyk6IHN0cmluZyB7XG4gIGNvbnN0IHsgZGVjbGFyYXRpb25GaWxlUGF0aCwgZXh0ZW5zaW9uLCBtb2R1bGVEaXJlY3RvcnkgfSA9IHBhcmFtcztcbiAgY29uc3QgbGlicmFyeUZpbGVQYXRoID0gam9pbihSZXBvUGF0aHMuRGlzdExpYiwgbW9kdWxlRGlyZWN0b3J5LCBMSUJSQVJZX1JFRkVSRU5DRVNfRklMRV9OQU1FICsgZXh0ZW5zaW9uKTtcbiAgbGV0IHJlbGF0aXZlUGF0aCA9IHJlbGF0aXZlTmF0aXZlKGRpcm5hbWUoZGVjbGFyYXRpb25GaWxlUGF0aCksIGxpYnJhcnlGaWxlUGF0aCkucmVwbGFjZUFsbCgnXFxcXCcsICcvJyk7XG4gIGlmICghcmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgIHJlbGF0aXZlUGF0aCA9IGAuLyR7cmVsYXRpdmVQYXRofWA7XG4gIH1cbiAgcmV0dXJuIGAvLy8gPHJlZmVyZW5jZSBwYXRoPVwiJHtyZWxhdGl2ZVBhdGh9XCIgLz5cXG5gO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb2xsZWN0QWxsTGlicygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIC8vIFRoZSBSRVNPTFZFRCBvcHRpb25zLCBiZWNhdXNlIGEgcGFja2FnZSdzIGB0c2NvbmZpZy5qc29uYCBpbmhlcml0cyBgbGliYCBmcm9tIHRoZSBzaGFyZWQgYmFzZS4gVGhlIHJlc29sdmVkXG4gIC8vIG5hbWVzIGFyZSBmaWxlIG5hbWVzIChgbGliLmRvbS5pdGVyYWJsZS5kLnRzYCksIHNvIHRoZXkgYXJlIG1hcHBlZCBiYWNrIG9udG8gdGhlIG5hbWVzIGEgZGlyZWN0aXZlIHRha2VzLlxuICBjb25zdCB7IG9wdGlvbnMgfSA9IHBhcnNlVHNDb25maWcoUmVwb1BhdGhzLlRzQ29uZmlnSnNvbik7XG4gIGNvbnN0IGxpYnMgPSBuZXcgU2V0KChvcHRpb25zLmxpYiA/PyBbXSkubWFwKChsaWIpID0+IHRvTGliTmFtZShsaWIpKSk7XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGF3YWl0IHJlYWRkaXJQb3NpeChSZXBvUGF0aHMuU3JjLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KSkge1xuICAgIGlmICghZmlsZS5lbmRzV2l0aCgnLnRzJykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHNvdXJjZUNvbnRlbnQgPSByZWFkRmlsZVN5bmMoam9pbihSZXBvUGF0aHMuU3JjLCBmaWxlKSwgJ3V0Zi04Jyk7XG4gICAgLy8gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbHdheXMgY2FwdHVyZXMgaXRzIG9uZSBncm91cCwgc28gbm8gZmFsbGJhY2sgZm9yIGEgbWlzc2luZyBvbmUgaXMgbmVlZGVkLlxuICAgIGZvciAoY29uc3QgWywgbGliXSBvZiBzb3VyY2VDb250ZW50Lm1hdGNoQWxsKFJFRkVSRU5DRV9MSUJfUkVHX0VYUCkpIHtcbiAgICAgIGxpYnMuYWRkKFN0cmluZyhsaWIpLnRvTG93ZXJDYXNlKCkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbLi4ubGlic10uc29ydCgpO1xufVxuXG5mdW5jdGlvbiBjb2xsZWN0QWxsVHlwZXMoKTogc3RyaW5nW10ge1xuICBjb25zdCB7IG9wdGlvbnMgfSA9IHBhcnNlVHNDb25maWcoUmVwb1BhdGhzLlRzQ29uZmlnSnNvbik7XG4gIHJldHVybiAob3B0aW9ucy50eXBlcyA/PyBbXSlcbiAgICAuZmlsdGVyKCh0eXBlKSA9PiBERUNMQVJBVElPTl9SRUZFUkVOQ0VfVFlQRVMuaGFzKHR5cGUpKVxuICAgIC5zb3J0KCk7XG59XG5cbmZ1bmN0aW9uIGNvbGxlY3RFbnZpcm9ubWVudERpcmVjdGl2ZXMocGFyYW1zOiBDb2xsZWN0RW52aXJvbm1lbnREaXJlY3RpdmVzUGFyYW1zKTogTWFwPHN0cmluZywgc3RyaW5nPiB7XG4gIGNvbnN0IHsgYXZhaWxhYmxlVHlwZXMsIGRlY2xhcmF0aW9uRmlsZXMgfSA9IHBhcmFtcztcbiAgY29uc3QgeyBvcHRpb25zIH0gPSBwYXJzZVRzQ29uZmlnKFJlcG9QYXRocy5Uc0NvbmZpZ0pzb24pO1xuICBjb25zdCBwcm9ncmFtID0gY3JlYXRlUHJvZ3JhbSh7XG4gICAgb3B0aW9uczogeyAuLi5vcHRpb25zLCBub0VtaXQ6IHRydWUgfSxcbiAgICByb290TmFtZXM6IGRlY2xhcmF0aW9uRmlsZXMubWFwKChmaWxlKSA9PiByZXNvbHZlTmF0aXZlKFJlcG9QYXRocy5TcmMsIGZpbGUpKVxuICB9KTtcbiAgY29uc3QgY2hlY2tlciA9IHByb2dyYW0uZ2V0VHlwZUNoZWNrZXIoKTtcbiAgY29uc3QgZGlyZWN0aXZlc0J5RmlsZSA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGRlY2xhcmF0aW9uRmlsZXMpIHtcbiAgICAvLyBUaGUgcHJvZ3JhbSB3YXMgaGFuZGVkIGV2ZXJ5IG9uZSBvZiB0aGVzZSBhcyBhIHJvb3QgbmFtZSwgc28gZWFjaCBvbmUgaXMgaW4gaXQuXG4gICAgY29uc3Qgc291cmNlRmlsZSA9IGVuc3VyZU5vbk51bGxhYmxlKHByb2dyYW0uZ2V0U291cmNlRmlsZShyZXNvbHZlTmF0aXZlKFJlcG9QYXRocy5TcmMsIGZpbGUpKSk7XG4gICAgY29uc3QgbGlicyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIGNvbnN0IHR5cGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICBmdW5jdGlvbiB2aXNpdChub2RlOiBOb2RlKTogdm9pZCB7XG4gICAgICBpZiAoaXNJZGVudGlmaWVyKG5vZGUpIHx8IGlzU3RyaW5nTGl0ZXJhbChub2RlKSkge1xuICAgICAgICBjb25zdCBzeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obm9kZSk7XG4gICAgICAgIGlmIChzeW1ib2wgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFkZEVudmlyb25tZW50R2xvYmFscyh7IGxpYnMsIHByb2dyYW0sIHN5bWJvbDogcmVzb2x2ZUFsaWFzKGNoZWNrZXIsIHN5bWJvbCksIHR5cGVzIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBmb3JFYWNoQ2hpbGQobm9kZSwgdmlzaXQpO1xuICAgIH1cbiAgICB2aXNpdChzb3VyY2VGaWxlKTtcblxuICAgIGNvbnN0IG5lZWRlZFR5cGVzID0gWy4uLnR5cGVzXS5maWx0ZXIoKHR5cGUpID0+IGF2YWlsYWJsZVR5cGVzLmluY2x1ZGVzKHR5cGUpKTtcbiAgICBpZiAobGlicy5zaXplID4gMCB8fCBuZWVkZWRUeXBlcy5sZW5ndGggPiAwKSB7XG4gICAgICBkaXJlY3RpdmVzQnlGaWxlLnNldChcbiAgICAgICAgZmlsZSxcbiAgICAgICAgKGxpYnMuc2l6ZSA+IDAgPyBidWlsZEFsbFJlZmVyZW5jZUxpYkRpcmVjdGl2ZXMoWy4uLmxpYnNdLnNvcnQoKSkgOiAnJykgKyBidWlsZEFsbFJlZmVyZW5jZVR5cGVzRGlyZWN0aXZlcyhuZWVkZWRUeXBlcy5zb3J0KCkpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkaXJlY3RpdmVzQnlGaWxlO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUluZGV4KHBhcmFtczogR2VuZXJhdGVJbmRleFBhcmFtcyk6IFByb21pc2U8R2VuZXJhdGVJbmRleFJlc3VsdD4ge1xuICBjb25zdCB7IGZvbGRlciB9ID0gcGFyYW1zO1xuICBjb25zdCBkaXJlbnRzID0gYXdhaXQgcmVhZGRpclBvc2l4KGZvbGRlciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICBjb25zdCBtYXliZUxpbmVzID0gYXdhaXQgYXN5bmNNYXAoZGlyZW50cywgKGRpcmVudCkgPT4gaGFuZGxlSW5kZXhEaXJlbnQocGFyYW1zLCBkaXJlbnQpKTtcbiAgY29uc3QgbGluZXMgPSBtYXliZUxpbmVzLmZpbHRlcigobGluZSkgPT4gbGluZSAhPT0gdW5kZWZpbmVkKTtcblxuICBpZiAobGluZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEdlbmVyYXRlSW5kZXhSZXN1bHQuU2tpcHBlZDtcbiAgfVxuXG4gIGF3YWl0IGdlbmVyYXRlKGpvaW4oZm9sZGVyLCBSZXBvUGF0aHMuSW5kZXhUcyksIGxpbmVzKTtcbiAgcmV0dXJuIEdlbmVyYXRlSW5kZXhSZXN1bHQuU3VjY2Vzcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0TGliRmlsZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBsZXQgZmlsZXMgPSBhd2FpdCByZWFkZGlyUG9zaXgoUmVwb1BhdGhzLlNyYywgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGZpbGVzID0gZmlsZXMubWFwKChmaWxlKSA9PiBub3JtYWxpemVJZlJlbGF0aXZlKGpvaW4oUmVwb1BhdGhzLlNyYywgZmlsZSkpKTtcbiAgcmV0dXJuIGZpbGVzLmZpbHRlcigoZmlsZSkgPT5cbiAgICBmaWxlLmVuZHNXaXRoKFJlcG9QYXRocy5Uc0V4dGVuc2lvbikgJiYgIWZpbGUuZW5kc1dpdGgoUmVwb1BhdGhzLkR0c0V4dGVuc2lvbikgJiYgIWZpbGUuZW5kc1dpdGgoJy50ZXN0LnRzJylcbiAgICAmJiAhZmlsZS5pbmNsdWRlcyhgLyR7UmVwb1BhdGhzLlRlc3RIZWxwZXJzfS9gKVxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBoYW5kbGVJbmRleERpcmVudChwYXJhbXM6IEdlbmVyYXRlSW5kZXhQYXJhbXMsIGRpcmVudDogRGlyZW50KTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgeyBleGNsdWRlZFBhdGhzLCBmb2xkZXIsIHVubWF0Y2hlZFBhdGhzIH0gPSBwYXJhbXM7XG4gIGlmIChpc0V4Y2x1ZGVkRnJvbUluZGV4KGZvbGRlciwgZGlyZW50KSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHBhdGggPSBqb2luKGZvbGRlciwgZGlyZW50Lm5hbWUpO1xuICBpZiAoZXhjbHVkZWRQYXRocy5oYXMocGF0aCkpIHtcbiAgICB1bm1hdGNoZWRQYXRocy5kZWxldGUocGF0aCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHNvdXJjZUZpbGU6IHN0cmluZztcbiAgbGV0IG5hbWU6IHN0cmluZztcbiAgaWYgKGRpcmVudC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZ2VuZXJhdGVJbmRleCh7IC4uLnBhcmFtcywgZm9sZGVyOiBwYXRoIH0pO1xuICAgIGlmIChyZXN1bHQgIT09IEdlbmVyYXRlSW5kZXhSZXN1bHQuU3VjY2Vzcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzb3VyY2VGaWxlID0gbm9ybWFsaXplSWZSZWxhdGl2ZShqb2luKGRpcmVudC5uYW1lLCBSZXBvUGF0aHMuSW5kZXhUcykpO1xuICAgIG5hbWUgPSBkaXJlbnQubmFtZTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBleHRlbnNpb24gPSBleHRuYW1lKGRpcmVudC5uYW1lKTtcbiAgICBuYW1lID0gYmFzZW5hbWUoZGlyZW50Lm5hbWUsIGV4dGVuc2lvbik7XG4gICAgc291cmNlRmlsZSA9IG5vcm1hbGl6ZUlmUmVsYXRpdmUoZGlyZW50Lm5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIGBleHBvcnQgKiBhcyAnJHtuYW1lfScgZnJvbSAnJHtzb3VyY2VGaWxlfSc7YDtcbn1cblxuZnVuY3Rpb24gaXNFbnZpcm9ubWVudExpYihsaWI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gRU5WSVJPTk1FTlRfTElCX1BSRUZJWEVTLnNvbWUoKHByZWZpeCkgPT4gbGliLnN0YXJ0c1dpdGgocHJlZml4KSk7XG59XG5cbmZ1bmN0aW9uIGlzRXhjbHVkZWRGaWxlTmFtZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuICFuYW1lLmVuZHNXaXRoKFJlcG9QYXRocy5Uc0V4dGVuc2lvbikgfHwgbmFtZS5lbmRzV2l0aCgnLnRlc3QudHMnKSB8fCBuYW1lID09PSAnc2V0dXAudHMnIHx8IG5hbWUuZW5kc1dpdGgoJy1zZXR1cC50cycpO1xufVxuXG5mdW5jdGlvbiBpc0V4Y2x1ZGVkRnJvbUluZGV4KGZvbGRlcjogc3RyaW5nLCBkaXJlbnQ6IERpcmVudCk6IGJvb2xlYW4ge1xuICBjb25zdCBleGNsdWRlZE5hbWVzOiByZWFkb25seSBzdHJpbmdbXSA9IFtSZXBvUGF0aHMuSW5kZXhUcywgUmVwb1BhdGhzLlR5cGVzLCBSZXBvUGF0aHMuU3R5bGVzLCBSZXBvUGF0aHMuVGVzdEhlbHBlcnNdO1xuICBjb25zdCBpc0V4Y2x1ZGVkRW50cnkgPSBleGNsdWRlZE5hbWVzLmluY2x1ZGVzKGRpcmVudC5uYW1lKSB8fCBkaXJlbnQubmFtZS5lbmRzV2l0aChSZXBvUGF0aHMuRHRzRXh0ZW5zaW9uKSB8fCBmb2xkZXIuc3BsaXQoJy8nKS5pbmNsdWRlcyhSZXBvUGF0aHMuVHlwZXMpO1xuICByZXR1cm4gaXNFeGNsdWRlZEVudHJ5IHx8IChkaXJlbnQuaXNGaWxlKCkgJiYgaXNFeGNsdWRlZEZpbGVOYW1lKGRpcmVudC5uYW1lKSk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVBbGlhcyhjaGVja2VyOiBUeXBlQ2hlY2tlciwgc3ltYm9sOiBUc1N5bWJvbCk6IFRzU3ltYm9sIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2UgLS0gYFN5bWJvbEZsYWdzYCBpcyBhIGJpdCBzZXQuXG4gIHJldHVybiAoc3ltYm9sLmZsYWdzICYgU3ltYm9sRmxhZ3MuQWxpYXMpID09PSAwID8gc3ltYm9sIDogY2hlY2tlci5nZXRBbGlhc2VkU3ltYm9sKHN5bWJvbCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNldEV4cG9ydChwYXJhbXM6IFNldEV4cG9ydFBhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB7IGV4cG9ydENvbmRpdGlvbnMsIGlzV2lsZGNhcmQsIHNvdXJjZUNvbmRpdGlvbiwgc3JjRm9sZGVyIH0gPSBwYXJhbXM7XG4gIGNvbnN0IGltcG9ydFBhdGggPSByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiBzcmNGb2xkZXIsXG4gICAgcmVwbGFjZXI6IFJlcG9QYXRocy5DdXJyZW50Rm9sZGVyLFxuICAgIHNlYXJjaFZhbHVlOiBSZXBvUGF0aHMuU3JjXG4gIH0pO1xuICBjb25zdCBjb25kaXRpb25QYXRoID0gaXNXaWxkY2FyZCA/IGAke2ltcG9ydFBhdGh9LyR7UmVwb1BhdGhzLkFueX1gIDogaW1wb3J0UGF0aDtcbiAgY29uc3QgZG10c1BhdGggPSB0b0Rpc3RQYXRoKHsgZm9ybWF0OiBSZXBvUGF0aHMuRXNtLCBpbXBvcnRQYXRoLCBuYW1lOiBpc1dpbGRjYXJkID8gUmVwb1BhdGhzLkFueURtdHMgOiBSZXBvUGF0aHMuSW5kZXhEbXRzIH0pO1xuICBjb25zdCBkY3RzUGF0aCA9IHRvRGlzdFBhdGgoeyBmb3JtYXQ6IFJlcG9QYXRocy5DanMsIGltcG9ydFBhdGgsIG5hbWU6IGlzV2lsZGNhcmQgPyBSZXBvUGF0aHMuQW55RGN0cyA6IFJlcG9QYXRocy5JbmRleERjdHMgfSk7XG4gIGNvbnN0IGRtdHNGb2xkZXJQYXRoID0gZGlybmFtZShkbXRzUGF0aCk7XG4gIGNvbnN0IGRjdHNGb2xkZXJQYXRoID0gZGlybmFtZShkY3RzUGF0aCk7XG5cbiAgaWYgKCFpc1dpbGRjYXJkICYmICFleGlzdHNTeW5jKGRjdHNQYXRoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGlzVHlwZXNPbmx5ID0gaW1wb3J0UGF0aC5pbmNsdWRlcyhSZXBvUGF0aHMuVHlwZXMpO1xuICBjb25zdCBtanNQYXRoID0gdG9EaXN0UGF0aCh7IGZvcm1hdDogUmVwb1BhdGhzLkVzbSwgaW1wb3J0UGF0aCwgbmFtZTogaXNXaWxkY2FyZCA/IFJlcG9QYXRocy5BbnlNanMgOiBSZXBvUGF0aHMuSW5kZXhNanMgfSk7XG4gIGNvbnN0IGNqc1BhdGggPSB0b0Rpc3RQYXRoKHsgZm9ybWF0OiBSZXBvUGF0aHMuQ2pzLCBpbXBvcnRQYXRoLCBuYW1lOiBpc1dpbGRjYXJkID8gUmVwb1BhdGhzLkFueUNqcyA6IFJlcG9QYXRocy5JbmRleENqcyB9KTtcblxuICBpZiAoaXNUeXBlc09ubHkpIHtcbiAgICBleHBvcnRDb25kaXRpb25zW2NvbmRpdGlvblBhdGhdID0ge1xuICAgICAgaW1wb3J0OiB7XG4gICAgICAgIHR5cGVzOiBkbXRzUGF0aFxuICAgICAgfSxcbiAgICAgIHJlcXVpcmU6IHtcbiAgICAgICAgdHlwZXM6IGRjdHNQYXRoXG4gICAgICB9XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzb3VyY2VQYXRoID0gbm9ybWFsaXplSWZSZWxhdGl2ZShqb2luKFJlcG9QYXRocy5TcmMsIGltcG9ydFBhdGgsIGlzV2lsZGNhcmQgPyBSZXBvUGF0aHMuQW55VHMgOiBSZXBvUGF0aHMuSW5kZXhUcykpO1xuXG4gICAgZXhwb3J0Q29uZGl0aW9uc1tjb25kaXRpb25QYXRoXSA9IHtcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIHBlcmZlY3Rpb25pc3Qvc29ydC1vYmplY3RzIC0tIE9yZGVyIG1hdHRlcnMgb25jZSBpdCBpcyB3cml0dGVuIHRvIGBwYWNrYWdlLmpzb25gLiAqL1xuICAgICAgLy8gRmlyc3QsIHNvIGl0IHdpbnMgd2hlcmV2ZXIgaXQgaXMgc2V0OiBpbnNpZGUgdGhlIHJlcG9zaXRvcnksIGJlZm9yZSBhbnl0aGluZyBpcyBidWlsdC5cbiAgICAgIC4uLihzb3VyY2VDb25kaXRpb24gIT09IHVuZGVmaW5lZCAmJiB7IFtzb3VyY2VDb25kaXRpb25dOiBzb3VyY2VQYXRoIH0pLFxuICAgICAgaW1wb3J0OiB7XG4gICAgICAgIHR5cGVzOiBkbXRzUGF0aCxcbiAgICAgICAgZGVmYXVsdDogbWpzUGF0aFxuICAgICAgfSxcbiAgICAgIHJlcXVpcmU6IHtcbiAgICAgICAgdHlwZXM6IGRjdHNQYXRoLFxuICAgICAgICBkZWZhdWx0OiBjanNQYXRoXG4gICAgICB9XG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIHBlcmZlY3Rpb25pc3Qvc29ydC1vYmplY3RzIC0tIE9yZGVyIG1hdHRlcnMgb25jZSBpdCBpcyB3cml0dGVuIHRvIGBwYWNrYWdlLmpzb25gLiAqL1xuICAgIH07XG4gIH1cblxuICBpZiAoaW1wb3J0UGF0aCA9PT0gUmVwb1BhdGhzLkN1cnJlbnRGb2xkZXIgYXMgc3RyaW5nKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFpc1dpbGRjYXJkKSB7XG4gICAgYXdhaXQgd3JpdGVTdWJwYXRoUGFja2FnZUpzb24oXG4gICAgICBpbXBvcnRQYXRoLFxuICAgICAgaXNUeXBlc09ubHlcbiAgICAgICAgPyB7IHR5cGU6ICdtb2R1bGUnLCB0eXBlczogcmVsYXRpdmUoaW1wb3J0UGF0aCwgZGN0c1BhdGgpIH1cbiAgICAgICAgOiB7IG1haW46IHJlbGF0aXZlKGltcG9ydFBhdGgsIGNqc1BhdGgpLCBtb2R1bGU6IHJlbGF0aXZlKGltcG9ydFBhdGgsIG1qc1BhdGgpLCB0eXBlOiAnbW9kdWxlJywgdHlwZXM6IHJlbGF0aXZlKGltcG9ydFBhdGgsIGRjdHNQYXRoKSB9XG4gICAgKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGNvbnN0IGZpbGUgb2YgYXdhaXQgcmVhZGRpclBvc2l4KGRjdHNGb2xkZXJQYXRoKSkge1xuICAgIGlmICghZmlsZS5lbmRzV2l0aChSZXBvUGF0aHMuRGN0c0V4dGVuc2lvbikpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBuYW1lID0gYmFzZW5hbWUoZmlsZSwgUmVwb1BhdGhzLkRjdHNFeHRlbnNpb24pO1xuICAgIGNvbnN0IHBhY2thZ2VKc29uRm9sZGVyUGF0aCA9IGpvaW4oaW1wb3J0UGF0aCwgbmFtZSk7XG4gICAgY29uc3QgdHlwZXMgPSByZWxhdGl2ZShwYWNrYWdlSnNvbkZvbGRlclBhdGgsIGpvaW4oZGN0c0ZvbGRlclBhdGgsIG5hbWUgKyBSZXBvUGF0aHMuRGN0c0V4dGVuc2lvbikpO1xuICAgIGF3YWl0IHdyaXRlU3VicGF0aFBhY2thZ2VKc29uKFxuICAgICAgcGFja2FnZUpzb25Gb2xkZXJQYXRoLFxuICAgICAgaXNUeXBlc09ubHlcbiAgICAgICAgPyB7IHR5cGU6ICdtb2R1bGUnLCB0eXBlcyB9XG4gICAgICAgIDoge1xuICAgICAgICAgIG1haW46IHJlbGF0aXZlKHBhY2thZ2VKc29uRm9sZGVyUGF0aCwgam9pbihkY3RzRm9sZGVyUGF0aCwgbmFtZSArIFJlcG9QYXRocy5DanNFeHRlbnNpb24pKSxcbiAgICAgICAgICBtb2R1bGU6IHJlbGF0aXZlKHBhY2thZ2VKc29uRm9sZGVyUGF0aCwgam9pbihkbXRzRm9sZGVyUGF0aCwgbmFtZSArIFJlcG9QYXRocy5NanNFeHRlbnNpb24pKSxcbiAgICAgICAgICB0eXBlOiAnbW9kdWxlJyxcbiAgICAgICAgICB0eXBlc1xuICAgICAgICB9XG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b0N0c0NvbnRlbnQoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IGN0c0NvbnRlbnQgPSByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiBjb250ZW50LFxuICAgIHJlcGxhY2VyOiAnZnJvbSBcXCckPEltcG9ydFBhdGg+LmNqc1xcJzsnLFxuICAgIHNlYXJjaFZhbHVlOiBTVEFUSUNfSU1QT1JUX1JFR19FWFBcbiAgfSk7XG4gIGN0c0NvbnRlbnQgPSByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiBjdHNDb250ZW50LFxuICAgIHJlcGxhY2VyOiAnaW1wb3J0KCQ8UXVvdGU+JDxJbXBvcnRQYXRoPi5janMkPFF1b3RlPiknLFxuICAgIHNlYXJjaFZhbHVlOiBEWU5BTUlDX0lNUE9SVF9SRUdfRVhQXG4gIH0pO1xuXG4gIC8vIEEgYC5kLmN0c2AgZmlsZSBpcyBhIENvbW1vbkpTIG1vZHVsZS4gVHlwZS1vbmx5IGltcG9ydHMgb2YgYSBiYXJlIHNwZWNpZmllciByZXNvbHZpbmcgdG8gYW5cbiAgLy8gRVNNLW9ubHkgcGFja2FnZSBuZWVkIGEgYHJlc29sdXRpb24tbW9kZWAgYXR0cmlidXRlLCBlbHNlIGB0c2NgIHJlcG9ydHMgVFMxNTQxIC8gVFMxNTQyLlxuICAvLyBQYXNzaW5nIGAnaW1wb3J0J2AgaXMgdmFsaWQgZm9yIENvbW1vbkpTIHRhcmdldHMgdG9vLCBzbyBldmVyeSBiYXJlIHNwZWNpZmllciByZWNlaXZlcyBpdC5cbiAgLy8gVGhlIEVTTSBgLmQubXRzYCBuZWVkcyBubyBzdWNoIGF0dHJpYnV0ZSwgc28gdGhpcyB0cmFuc2Zvcm0gcnVucyBvbiBDb21tb25KUyBjb250ZW50IG9ubHkuXG4gIGN0c0NvbnRlbnQgPSByZXBsYWNlQWxsKHtcbiAgICAkc3RyaW5nOiBjdHNDb250ZW50LFxuICAgIHJlcGxhY2VyOiAnaW1wb3J0IHR5cGUgJDxDbGF1c2U+IGZyb20gXFwnJDxTcGVjaWZpZXI+XFwnIHdpdGggeyBcXCdyZXNvbHV0aW9uLW1vZGVcXCc6IFxcJ2ltcG9ydFxcJyB9OycsXG4gICAgc2VhcmNoVmFsdWU6IEJBUkVfVFlQRV9JTVBPUlRfUkVHX0VYUFxuICB9KTtcbiAgcmV0dXJuIHJlcGxhY2VBbGwoe1xuICAgICRzdHJpbmc6IGN0c0NvbnRlbnQsXG4gICAgcmVwbGFjZXI6ICdpbXBvcnQoJDxRdW90ZT4kPFNwZWNpZmllcj4kPFF1b3RlPiwgeyB3aXRoOiB7IFxcJ3Jlc29sdXRpb24tbW9kZVxcJzogXFwnaW1wb3J0XFwnIH0gfSknLFxuICAgIHNlYXJjaFZhbHVlOiBCQVJFX0lOTElORV9JTVBPUlRfVFlQRV9SRUdfRVhQXG4gIH0pO1xufVxuXG5mdW5jdGlvbiB0b0Rpc3RQYXRoKHBhcmFtczogVG9EaXN0UGF0aFBhcmFtcyk6IHN0cmluZyB7XG4gIHJldHVybiBub3JtYWxpemVJZlJlbGF0aXZlKGpvaW4oUmVwb1BhdGhzLkRpc3RMaWIsIHBhcmFtcy5mb3JtYXQsIHBhcmFtcy5pbXBvcnRQYXRoLCBwYXJhbXMubmFtZSkpO1xufVxuXG5mdW5jdGlvbiB0b0xpYk5hbWUobGliRmlsZVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIEEgbGliIGEgcGFja2FnZSByZXBsYWNlZCAoYEB0eXBlc2NyaXB0L2xpYi1kb21gLCBgQHR5cGVzY3JpcHQvbGliLWRvbS9pdGVyYWJsZS5kLnRzYCkgaXMgbmFtZWQgYnkgaXRzIHBhdGgsIG5vdCBieVxuICAvLyBpdHMgZmlsZSBuYW1lLCB3aGljaCBpcyBgaW5kZXguZC50c2AgZm9yIHRoZSBsaWIncyByb290LlxuICBjb25zdCByZXBsYWNlbWVudE1hdGNoID0gTElCX1JFUExBQ0VNRU5UX1JFR19FWFAuZXhlYyhsaWJGaWxlUGF0aCk7XG4gIGlmIChyZXBsYWNlbWVudE1hdGNoPy5ncm91cHMgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gYWx3YXlzIGNhcHR1cmVzIGJvdGggZ3JvdXBzLlxuICAgIGNvbnN0IGxpYiA9IFN0cmluZyhyZXBsYWNlbWVudE1hdGNoLmdyb3Vwc1snTGliJ10pO1xuICAgIGNvbnN0IHN1YkxpYiA9IFN0cmluZyhyZXBsYWNlbWVudE1hdGNoLmdyb3Vwc1snU3ViTGliJ10pO1xuICAgIHJldHVybiAoc3ViTGliID09PSAnaW5kZXgnID8gbGliIDogYCR7bGlifS4ke3N1YkxpYi5yZXBsYWNlQWxsKCcvJywgJy4nKX1gKS50b0xvd2VyQ2FzZSgpO1xuICB9XG4gIHJldHVybiBiYXNlbmFtZShsaWJGaWxlUGF0aCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9ebGliXFwuLywgJycpLnJlcGxhY2UoL1xcLmRcXC50cyQvLCAnJyk7XG59XG5cbmZ1bmN0aW9uIHRvTXRzQ29udGVudChjb250ZW50OiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtdHNDb250ZW50ID0gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogY29udGVudCxcbiAgICByZXBsYWNlcjogJ2Zyb20gXFwnJDxJbXBvcnRQYXRoPi5tanNcXCc7JyxcbiAgICBzZWFyY2hWYWx1ZTogU1RBVElDX0lNUE9SVF9SRUdfRVhQXG4gIH0pO1xuICByZXR1cm4gcmVwbGFjZUFsbCh7XG4gICAgJHN0cmluZzogbXRzQ29udGVudCxcbiAgICByZXBsYWNlcjogJ2ltcG9ydCgkPFF1b3RlPiQ8SW1wb3J0UGF0aD4ubWpzJDxRdW90ZT4pJyxcbiAgICBzZWFyY2hWYWx1ZTogRFlOQU1JQ19JTVBPUlRfUkVHX0VYUFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVTdWJwYXRoUGFja2FnZUpzb24oZm9sZGVyOiBzdHJpbmcsIHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBta2Rpcihmb2xkZXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBhd2FpdCB3cml0ZUpzb24oam9pbihmb2xkZXIsIFJlcG9QYXRocy5QYWNrYWdl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UUFDTjtBQUFBLE1BQ0Y7QUFBQSxJQUNKO0FBQUEsRUFDRjtBQUNGO0FBRUEsU0FBUyxhQUFhLFNBQXlCO0FBQzdDLE1BQUksaUJBQWEsMEJBQVc7QUFBQSxJQUMxQixTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsRUFDZixDQUFDO0FBQ0QsbUJBQWEsMEJBQVc7QUFBQSxJQUN0QixTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsRUFDZixDQUFDO0FBTUQsbUJBQWEsMEJBQVc7QUFBQSxJQUN0QixTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsRUFDZixDQUFDO0FBQ0QsYUFBTywwQkFBVztBQUFBLElBQ2hCLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLGFBQWE7QUFBQSxFQUNmLENBQUM7QUFDSDtBQUVBLFNBQVMsV0FBVyxRQUFrQztBQUNwRCxhQUFPLHFDQUFvQixrQkFBSyw0QkFBVSxTQUFTLE9BQU8sUUFBUSxPQUFPLFlBQVksT0FBTyxJQUFJLENBQUM7QUFDbkc7QUFFQSxTQUFTLFVBQVUsYUFBNkI7QUFHOUMsUUFBTSxtQkFBbUIsd0JBQXdCLEtBQUssV0FBVztBQUNqRSxNQUFJLGtCQUFrQixXQUFXLFFBQVc7QUFFMUMsVUFBTSxNQUFNLE9BQU8saUJBQWlCLE9BQU8sS0FBSyxDQUFDO0FBQ2pELFVBQU0sU0FBUyxPQUFPLGlCQUFpQixPQUFPLFFBQVEsQ0FBQztBQUN2RCxZQUFRLFdBQVcsVUFBVSxNQUFNLEdBQUcsR0FBRyxJQUFJLE9BQU8sV0FBVyxLQUFLLEdBQUcsQ0FBQyxJQUFJLFlBQVk7QUFBQSxFQUMxRjtBQUNBLGFBQU8sc0JBQVMsV0FBVyxFQUFFLFlBQVksRUFBRSxRQUFRLFVBQVUsRUFBRSxFQUFFLFFBQVEsWUFBWSxFQUFFO0FBQ3pGO0FBRUEsU0FBUyxhQUFhLFNBQXlCO0FBQzdDLFFBQU0saUJBQWEsMEJBQVc7QUFBQSxJQUM1QixTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixhQUFhO0FBQUEsRUFDZixDQUFDO0FBQ0QsYUFBTywwQkFBVztBQUFBLElBQ2hCLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLGFBQWE7QUFBQSxFQUNmLENBQUM7QUFDSDtBQUVBLGVBQWUsd0JBQXdCLFFBQWdCLGFBQXlDO0FBQzlGLFlBQU0sdUJBQU0sUUFBUSxFQUFFLFdBQVcsS0FBSyxDQUFDO0FBQ3ZDLFlBQU0sMkJBQVUsa0JBQUssUUFBUSw0QkFBVSxXQUFXLEdBQUcsV0FBVztBQUNsRTsiLCJuYW1lcyI6WyJwcm9jZXNzIiwicmVsYXRpdmVOYXRpdmUiLCJyZXNvbHZlTmF0aXZlIiwidmlzaXQiXX0=
|
|
@@ -56,15 +56,40 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
56
56
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
57
57
|
var markdownlint_content_exports = {};
|
|
58
58
|
__export(markdownlint_content_exports, {
|
|
59
|
+
fixMarkdownContent: () => fixMarkdownContent,
|
|
59
60
|
lintMarkdownContent: () => lintMarkdownContent
|
|
60
61
|
});
|
|
61
62
|
module.exports = __toCommonJS(markdownlint_content_exports);
|
|
62
63
|
var import_debug = require('@mnaoumov/typescript-lib/debug');
|
|
63
64
|
var import_path = require('@mnaoumov/typescript-lib/path');
|
|
65
|
+
var import_markdownlint = require('markdownlint');
|
|
64
66
|
var import_markdownlint_cli2 = require('markdownlint-cli2');
|
|
65
67
|
var import_root = require('../root.cjs');
|
|
66
68
|
var import_markdownlint_cli2_config = require('./markdownlint-cli2-config.cjs');
|
|
67
69
|
const SUCCESS_EXIT_CODE = 0;
|
|
70
|
+
async function fixMarkdownContent(params) {
|
|
71
|
+
const { content, cwd, filePath } = params;
|
|
72
|
+
const contentDebugger = (0, import_debug.getLibDebugger)("markdownlint:fixMarkdownContent");
|
|
73
|
+
const fixableErrors = [];
|
|
74
|
+
await (0, import_markdownlint_cli2.main)({
|
|
75
|
+
directory: (0, import_root.getRootFolder)(cwd) ?? cwd ?? process.cwd(),
|
|
76
|
+
logMessage: (message) => {
|
|
77
|
+
contentDebugger(message);
|
|
78
|
+
},
|
|
79
|
+
noGlobs: true,
|
|
80
|
+
nonFileContents: { [(0, import_path.toPosixPath)(filePath)]: content },
|
|
81
|
+
optionsDefault: import_markdownlint_cli2_config.obsidianDevUtilsConfig,
|
|
82
|
+
optionsOverride: {
|
|
83
|
+
outputFormatters: [[({ results }) => {
|
|
84
|
+
fixableErrors.push(...results.filter((result) => result.fixInfo !== null));
|
|
85
|
+
}]]
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
return {
|
|
89
|
+
content: fixableErrors.length === 0 ? content : (0, import_markdownlint.applyFixes)(content, fixableErrors),
|
|
90
|
+
fixCount: fixableErrors.length
|
|
91
|
+
};
|
|
92
|
+
}
|
|
68
93
|
async function lintMarkdownContent(params) {
|
|
69
94
|
const { content, cwd, filePath } = params;
|
|
70
95
|
const findings = [];
|
|
@@ -93,6 +118,7 @@ async function lintMarkdownContent(params) {
|
|
|
93
118
|
}
|
|
94
119
|
// Annotate the CommonJS export names for ESM import in node:
|
|
95
120
|
0 && (module.exports = {
|
|
121
|
+
fixMarkdownContent,
|
|
96
122
|
lintMarkdownContent
|
|
97
123
|
});
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL21hcmtkb3dubGludC1jb250ZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBMaW50cyBtYXJrZG93biB0aGF0IGlzIHN0aWxsIGluIG1lbW9yeSwgd2l0aCB0aGUgcmVwb3NpdG9yeSdzIG93biBgbGludDptZGAgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBgbGludDptZGAgY2FuIG9ubHkgYW5zd2VyIGZvciB3aGF0IGlzIGFscmVhZHkgb24gZGlzaywgd2hpY2ggbGVhdmVzIGV2ZXJ5IGRvY3VtZW50IGNvbXBvc2VkIGR1cmluZyBhIHJ1blxuICogdW5jaGVja2VkIHVudGlsIHRoZSBuZXh0IGdhdGUg4oCUIHRoZSByZWxlYXNlJ3MgY2hhbmdlbG9nIGJlaW5nIHRoZSBvbmUgdGhhdCBjb3N0cyBhIHJlZCBgbWFpbmAuIFRoaXMgbW9kdWxlXG4gKiBpcyB0aGUgc2FtZSBjaGVjayBvbmUgc3RlcCBlYXJsaWVyOiB0aGUgdGV4dCBpcyBsaW50ZWQgYXMgdGhlIHBhdGggaXQgaXMgZGVzdGluZWQgZm9yLCBhbmQgYSBjYWxsZXIgdGhhdFxuICogZG9lcyBub3QgbGlrZSB0aGUgYW5zd2VyIGNhbiBzdG9wIGJlZm9yZSB3cml0aW5nIGFueXRoaW5nLlxuICpcbiAqIEl0IGdvZXMgdGhyb3VnaCBgbWFya2Rvd25saW50LWNsaTJgIHJhdGhlciB0aGFuIGBtYXJrZG93bmxpbnRgJ3Mgb3duIHN0cmluZyBBUEksIGFuZCB0aGF0IGlzIHRoZSB3aG9sZVxuICogcG9pbnQgb2YgdGhlIG1vZHVsZS4gVGhlIHF1ZXN0aW9uIGEgY2FsbGVyIGlzIGFza2luZyBpcyAqXCJ3b3VsZCBgbGludDptZGAgaGF2ZSBmYWlsZWQgb24gdGhpcyB0ZXh0P1wiKiwgYW5kXG4gKiBvbmx5IHRoZSBgbWFya2Rvd25saW50LWNsaTJgIGxheWVyIGtub3dzOiBpdCBpcyB3aGF0IGZpbmRzIGAubWFya2Rvd25saW50LWNsaTIubWpzYCAodGhyb3VnaCBgaml0aWAsIGZvclxuICogdGhlIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbiB0aGlzIHdvcmtzcGFjZSB3cml0ZXMpLCBtZXJnZXMgdGhlIHJlcG9zaXRvcnkncyBvd24gb3ZlcnJpZGVzIG92ZXIgdGhlIHNoYXJlZFxuICogZGVmYXVsdHMsIGFuZCBsb2FkcyB0aGUgY3VzdG9tIHJ1bGVzLiBSZWFjaGluZyBmb3IgdGhlIHN0cmluZyBBUEkgbWVhbnMgaGFuZC1yb2xsaW5nIHRoYXQgcmVzb2x1dGlvbiBvdmVyXG4gKiBmaXZlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3JtYXRzLCB3aGljaCBpcyBhIGNvcHkgb2YgYG1hcmtkb3dubGludC1jbGkyYCB0aGF0IGNhbiBvbmx5IGV2ZXIgZHJpZnQgZnJvbSBpdC5cbiAqL1xuXG5pbXBvcnQgeyBnZXRMaWJEZWJ1Z2dlciB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9kZWJ1Zyc7XG5pbXBvcnQgeyB0b1Bvc2l4UGF0aCB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9wYXRoJztcbmltcG9ydCB7IG1haW4gYXMgbWFya2Rvd25saW50Q2xpMiB9IGZyb20gJ21hcmtkb3dubGludC1jbGkyJztcblxuaW1wb3J0IHsgZ2V0Um9vdEZvbGRlciB9IGZyb20gJy4uL3Jvb3QudHMnO1xuaW1wb3J0IHsgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZyB9IGZyb20gJy4vbWFya2Rvd25saW50LWNsaTItY29uZmlnLnRzJztcblxuLyoqXG4gKiBUaGUgZXhpdCBjb2RlIGBtYXJrZG93bmxpbnQtY2xpMmAgcmV0dXJucyB3aGVuIGl0IHJlcG9ydGVkIG5vdGhpbmcgdGhhdCBjb3VudHMgYXMgYSBmYWlsdXJlLlxuICovXG5jb25zdCBTVUNDRVNTX0VYSVRfQ09ERSA9IDA7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGxpbnRNYXJrZG93bkNvbnRlbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbnRNYXJrZG93bkNvbnRlbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG1hcmtkb3duIHRvIGxpbnQuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZm9sZGVyIGluc2lkZSB0aGUgcHJvamVjdCB3aG9zZSBtYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBhcHBsaWVzLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCB3b3JraW5nIGZvbGRlci5cbiAgICogSW4gYSB3b3Jrc3BhY2UsIGEgcGFja2FnZSdzIG93biBmb2xkZXIgaGFzIG5vIGNvbmZpZ3VyYXRpb24gb2YgaXRzIG93biwgc28gYSBjYWxsZXIgbGludGluZyBmb3IgdGhlXG4gICAqIHdvcmtzcGFjZSByb290IG5hbWVzIGl0IGhlcmUuXG4gICAqL1xuICByZWFkb25seSBjd2Q/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRoZSBjb250ZW50IGlzIGxpbnRlZCBBUyDigJQgbm9ybWFsbHkgdGhlIHBhdGggaXQgaXMgYWJvdXQgdG8gYmUgd3JpdHRlbiB0by4gSXQgZGVjaWRlcyBob3cgdGhlXG4gICAqIHBhdGgtcmVsYXRpdmUgcnVsZXMgcmVzb2x2ZSAoYHJlbGF0aXZlLWxpbmtzYCB3YWxrcyBmcm9tIHRoZSBmaWxlJ3Mgb3duIGZvbGRlciksIGFuZCBpdCBpcyB3aGF0IGV2ZXJ5XG4gICAqIHJlcG9ydGVkIGZpbmRpbmcgaXMgbmFtZWQgYWZ0ZXIuXG4gICAqL1xuICByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIExpbnRzIG1hcmtkb3duIGNvbnRlbnQgdGhhdCBpcyBub3Qgb24gZGlzaywgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBgbGludDptZGAgd291bGQgaGF2ZSB1c2VkIGZvciBpdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBMaW50TWFya2Rvd25Db250ZW50UGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGZpbmRpbmdzLCBlYWNoIG9uZSB0aGUgbGluZSB0aGUgYGxpbnQ6bWRgIG91dHB1dCB3b3VsZCBoYXZlXG4gKiBjYXJyaWVkIOKAlCBgPHBhdGg+OjxsaW5lPls6PGNvbHVtbj5dIGVycm9yIDxydWxlPiA8ZGVzY3JpcHRpb24+YCDigJQgb3IgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGVyZSBhcmUgbm9uZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpbnRNYXJrZG93bkNvbnRlbnQocGFyYW1zOiBMaW50TWFya2Rvd25Db250ZW50UGFyYW1zKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCB7IGNvbnRlbnQsIGN3ZCwgZmlsZVBhdGggfSA9IHBhcmFtcztcbiAgY29uc3QgZmluZGluZ3M6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGNvbnRlbnREZWJ1Z2dlciA9IGdldExpYkRlYnVnZ2VyKCdtYXJrZG93bmxpbnQ6bGludE1hcmtkb3duQ29udGVudCcpO1xuXG4gIGNvbnN0IGV4aXRDb2RlID0gYXdhaXQgbWFya2Rvd25saW50Q2xpMih7XG4gICAgZGlyZWN0b3J5OiBnZXRSb290Rm9sZGVyKGN3ZCkgPz8gY3dkID8/IHByb2Nlc3MuY3dkKCksXG4gICAgbG9nRXJyb3I6IChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgIGZpbmRpbmdzLnB1c2gobWVzc2FnZSk7XG4gICAgfSxcbiAgICBsb2dNZXNzYWdlOiAobWVzc2FnZTogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICBjb250ZW50RGVidWdnZXIobWVzc2FnZSk7XG4gICAgfSxcbiAgICAvLyBUaGUgY29udGVudCBpcyB0aGUgb25seSBpbnB1dC4gV2l0aG91dCB0aGlzIHRoZSBjb25maWd1cmF0aW9uJ3Mgb3duIGBnbG9ic2Agd291bGQgYmUgZXhwYW5kZWQgdG9vLCBhbmRcbiAgICAvLyBhIGNoZWNrIG9uIG9uZSBkb2N1bWVudCB3b3VsZCBsaW50IHRoZSB3aG9sZSByZXBvc2l0b3J5IOKAlCBzbG93bHksIGFuZCByZXBvcnRpbmcgZmluZGluZ3MgaXRzIGNhbGxlciBoYXNcbiAgICAvLyBubyBidXNpbmVzcyBmYWlsaW5nIG9uLlxuICAgIG5vR2xvYnM6IHRydWUsXG4gICAgbm9uRmlsZUNvbnRlbnRzOiB7IFt0b1Bvc2l4UGF0aChmaWxlUGF0aCldOiBjb250ZW50IH0sXG4gICAgLy8gVGhlIEJBU0UgdGhlIHJlcG9zaXRvcnkncyBvd24gY29uZmlndXJhdGlvbiBpcyBtZXJnZWQgb3Zlciwgd2hpY2ggbWF0dGVycyBmb3IgYSByZXBvc2l0b3J5IHRoYXQgaGFzIG5vbmVcbiAgICAvLyB5ZXQ6IGBsaW50KClgIGNvcGllcyB0aGUgdGVtcGxhdGUgY29uZmlndXJhdGlvbiBpbiDigJQgd2hpY2ggaXMgYnVpbHQgb24gdGhpcyBvbmUg4oCUIGJlZm9yZSBpdCBsaW50cywgc28gYVxuICAgIC8vIHJ1biB3aXRob3V0IGl0IHdvdWxkIGFwcGx5IG1hcmtkb3dubGludCdzIHN0b2NrIGRlZmF1bHRzIGluc3RlYWQsIGFuZCBgTUQwMTMvbGluZS1sZW5ndGhgIHdvdWxkIGZhaWwgYXRcbiAgICAvLyA4MCBjb2x1bW5zIG9uIGFuIG9yZGluYXJ5IHJlbGVhc2Ugbm90ZSB0aGF0IGBsaW50Om1kYCBpcyBwZXJmZWN0bHkgaGFwcHkgd2l0aC4gU2luY2UgYSByZXBvc2l0b3J5J3Mgb3duXG4gICAgLy8gY29uZmlndXJhdGlvbiBvdmVycmlkZXMgdGhpcyBrZXkgYnkga2V5LCB0aGUgd29yc3QgYSBtaXNtYXRjaCBjYW4gZG8gaXMgbWlzcyBhIGZpbmRpbmcsIG5ldmVyIGludmVudCBvbmUuXG4gICAgb3B0aW9uc0RlZmF1bHQ6IG9ic2lkaWFuRGV2VXRpbHNDb25maWdcbiAgfSk7XG5cbiAgLy8gV2hldGhlciB0aGlzIGlzIGEgRkFJTFVSRSBpcyB0aGUgdG9vbCdzIG93biBhbnN3ZXIsIG5vdCBhIGNvdW50IG9mIHRoZSBsaW5lcyBpdCBwcmludGVkOiBhIHJ1bGUgY29uZmlndXJlZFxuICAvLyB3aXRoIGBzZXZlcml0eTogd2FybmluZ2AgaXMgcHJpbnRlZCB0aHJvdWdoIGBsb2dFcnJvcmAgbGlrZSBhbnkgb3RoZXIgYW5kIHN0aWxsIGV4aXRzIGAwYCwgc28gcmV0dXJuaW5nIHRoZVxuICAvLyBsaW5lcyBhbG9uZSB3b3VsZCBmYWlsIGEgcmVsZWFzZSBvbiBzb21ldGhpbmcgYGxpbnQ6bWRgIGl0c2VsZiBwYXNzZXMuXG4gIHJldHVybiBleGl0Q29kZSA9PT0gU1VDQ0VTU19FWElUX0NPREUgPyBbXSA6IGZpbmRpbmdzO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFrQkEsbUJBQStCO0FBQy9CLGtCQUE0QjtBQUM1QiwrQkFBeUM7QUFFekMsa0JBQThCO0FBQzlCLHNDQUF1QztBQUt2QyxNQUFNLG9CQUFvQjtBQWlDMUIsZUFBc0Isb0JBQW9CLFFBQXNEO0FBQzlGLFFBQU0sRUFBRSxTQUFTLEtBQUssU0FBUyxJQUFJO0FBQ25DLFFBQU0sV0FBcUIsQ0FBQztBQUM1QixRQUFNLHNCQUFrQiw2QkFBZSxrQ0FBa0M7QUFFekUsUUFBTSxXQUFXLFVBQU0seUJBQUFBLE1BQWlCO0FBQUEsSUFDdEMsZUFBVywyQkFBYyxHQUFHLEtBQUssT0FBTyxRQUFRLElBQUk7QUFBQSxJQUNwRCxVQUFVLENBQUMsWUFBMEI7QUFDbkMsZUFBUyxLQUFLLE9BQU87QUFBQSxJQUN2QjtBQUFBLElBQ0EsWUFBWSxDQUFDLFlBQTBCO0FBQ3JDLHNCQUFnQixPQUFPO0FBQUEsSUFDekI7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUlBLFNBQVM7QUFBQSxJQUNULGlCQUFpQixFQUFFLEtBQUMseUJBQVksUUFBUSxDQUFDLEdBQUcsUUFBUTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQU1wRCxnQkFBZ0I7QUFBQSxFQUNsQixDQUFDO0FBS0QsU0FBTyxhQUFhLG9CQUFvQixDQUFDLElBQUk7QUFDL0M7IiwibmFtZXMiOlsibWFya2Rvd25saW50Q2xpMiJdfQ==
|
|
124
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL21hcmtkb3dubGludC1jb250ZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBMaW50cyBtYXJrZG93biB0aGF0IGlzIHN0aWxsIGluIG1lbW9yeSwgd2l0aCB0aGUgcmVwb3NpdG9yeSdzIG93biBgbGludDptZGAgY29uZmlndXJhdGlvbi5cbiAqXG4gKiBgbGludDptZGAgY2FuIG9ubHkgYW5zd2VyIGZvciB3aGF0IGlzIGFscmVhZHkgb24gZGlzaywgd2hpY2ggbGVhdmVzIGV2ZXJ5IGRvY3VtZW50IGNvbXBvc2VkIGR1cmluZyBhIHJ1blxuICogdW5jaGVja2VkIHVudGlsIHRoZSBuZXh0IGdhdGUg4oCUIHRoZSByZWxlYXNlJ3MgY2hhbmdlbG9nIGJlaW5nIHRoZSBvbmUgdGhhdCBjb3N0cyBhIHJlZCBgbWFpbmAuIFRoaXMgbW9kdWxlXG4gKiBpcyB0aGUgc2FtZSBjaGVjayBvbmUgc3RlcCBlYXJsaWVyOiB0aGUgdGV4dCBpcyBsaW50ZWQgYXMgdGhlIHBhdGggaXQgaXMgZGVzdGluZWQgZm9yLCBhbmQgYSBjYWxsZXIgdGhhdFxuICogZG9lcyBub3QgbGlrZSB0aGUgYW5zd2VyIGNhbiBzdG9wIGJlZm9yZSB3cml0aW5nIGFueXRoaW5nLlxuICpcbiAqIEl0IGdvZXMgdGhyb3VnaCBgbWFya2Rvd25saW50LWNsaTJgIHJhdGhlciB0aGFuIGBtYXJrZG93bmxpbnRgJ3Mgb3duIHN0cmluZyBBUEksIGFuZCB0aGF0IGlzIHRoZSB3aG9sZVxuICogcG9pbnQgb2YgdGhlIG1vZHVsZS4gVGhlIHF1ZXN0aW9uIGEgY2FsbGVyIGlzIGFza2luZyBpcyAqXCJ3b3VsZCBgbGludDptZGAgaGF2ZSBmYWlsZWQgb24gdGhpcyB0ZXh0P1wiKiwgYW5kXG4gKiBvbmx5IHRoZSBgbWFya2Rvd25saW50LWNsaTJgIGxheWVyIGtub3dzOiBpdCBpcyB3aGF0IGZpbmRzIGAubWFya2Rvd25saW50LWNsaTIubWpzYCAodGhyb3VnaCBgaml0aWAsIGZvclxuICogdGhlIFR5cGVTY3JpcHQgY29uZmlndXJhdGlvbiB0aGlzIHdvcmtzcGFjZSB3cml0ZXMpLCBtZXJnZXMgdGhlIHJlcG9zaXRvcnkncyBvd24gb3ZlcnJpZGVzIG92ZXIgdGhlIHNoYXJlZFxuICogZGVmYXVsdHMsIGFuZCBsb2FkcyB0aGUgY3VzdG9tIHJ1bGVzLiBSZWFjaGluZyBmb3IgdGhlIHN0cmluZyBBUEkgbWVhbnMgaGFuZC1yb2xsaW5nIHRoYXQgcmVzb2x1dGlvbiBvdmVyXG4gKiBmaXZlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3JtYXRzLCB3aGljaCBpcyBhIGNvcHkgb2YgYG1hcmtkb3dubGludC1jbGkyYCB0aGF0IGNhbiBvbmx5IGV2ZXIgZHJpZnQgZnJvbSBpdC5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IExpbnRFcnJvciB9IGZyb20gJ21hcmtkb3dubGludCc7XG5cbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnJztcbmltcG9ydCB7IHRvUG9zaXhQYXRoIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgYXBwbHlGaXhlcyB9IGZyb20gJ21hcmtkb3dubGludCc7XG5pbXBvcnQgeyBtYWluIGFzIG1hcmtkb3dubGludENsaTIgfSBmcm9tICdtYXJrZG93bmxpbnQtY2xpMic7XG5cbmltcG9ydCB7IGdldFJvb3RGb2xkZXIgfSBmcm9tICcuLi9yb290LnRzJztcbmltcG9ydCB7IG9ic2lkaWFuRGV2VXRpbHNDb25maWcgfSBmcm9tICcuL21hcmtkb3dubGludC1jbGkyLWNvbmZpZy50cyc7XG5cbi8qKlxuICogVGhlIGV4aXQgY29kZSBgbWFya2Rvd25saW50LWNsaTJgIHJldHVybnMgd2hlbiBpdCByZXBvcnRlZCBub3RoaW5nIHRoYXQgY291bnRzIGFzIGEgZmFpbHVyZS5cbiAqL1xuY29uc3QgU1VDQ0VTU19FWElUX0NPREUgPSAwO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBmaXhNYXJrZG93bkNvbnRlbnR9LCB0aGUgc2FtZSBhcyB7QGxpbmsgbGludE1hcmtkb3duQ29udGVudH0ncy5cbiAqL1xuZXhwb3J0IHR5cGUgRml4TWFya2Rvd25Db250ZW50UGFyYW1zID0gTGludE1hcmtkb3duQ29udGVudFBhcmFtcztcblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIHtAbGluayBmaXhNYXJrZG93bkNvbnRlbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZpeE1hcmtkb3duQ29udGVudFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCB3aXRoIGV2ZXJ5IGZpeGFibGUgZmluZGluZyBmaXhlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRlbnQ6IHN0cmluZztcblxuICAvKipcbiAgICogSG93IG1hbnkgZmluZGluZ3Mgd2VyZSBmaXhlZC5cbiAgICovXG4gIHJlYWRvbmx5IGZpeENvdW50OiBudW1iZXI7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGxpbnRNYXJrZG93bkNvbnRlbnR9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpbnRNYXJrZG93bkNvbnRlbnRQYXJhbXMge1xuICAvKipcbiAgICogVGhlIG1hcmtkb3duIHRvIGxpbnQuXG4gICAqL1xuICByZWFkb25seSBjb250ZW50OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgZm9sZGVyIGluc2lkZSB0aGUgcHJvamVjdCB3aG9zZSBtYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBhcHBsaWVzLiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCB3b3JraW5nIGZvbGRlci5cbiAgICogSW4gYSB3b3Jrc3BhY2UsIGEgcGFja2FnZSdzIG93biBmb2xkZXIgaGFzIG5vIGNvbmZpZ3VyYXRpb24gb2YgaXRzIG93biwgc28gYSBjYWxsZXIgbGludGluZyBmb3IgdGhlXG4gICAqIHdvcmtzcGFjZSByb290IG5hbWVzIGl0IGhlcmUuXG4gICAqL1xuICByZWFkb25seSBjd2Q/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXRoIHRoZSBjb250ZW50IGlzIGxpbnRlZCBBUyDigJQgbm9ybWFsbHkgdGhlIHBhdGggaXQgaXMgYWJvdXQgdG8gYmUgd3JpdHRlbiB0by4gSXQgZGVjaWRlcyBob3cgdGhlXG4gICAqIHBhdGgtcmVsYXRpdmUgcnVsZXMgcmVzb2x2ZSAoYHJlbGF0aXZlLWxpbmtzYCB3YWxrcyBmcm9tIHRoZSBmaWxlJ3Mgb3duIGZvbGRlciksIGFuZCBpdCBpcyB3aGF0IGV2ZXJ5XG4gICAqIHJlcG9ydGVkIGZpbmRpbmcgaXMgbmFtZWQgYWZ0ZXIuXG4gICAqL1xuICByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFwcGxpZXMgdGhlIGZpeGVzIGBsaW50Om1kOmZpeGAgd291bGQgYXBwbHkgdG8gbWFya2Rvd24gdGhhdCBpcyBub3Qgb24gZGlzaywgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBgbGludDptZGBcbiAqIHdvdWxkIGhhdmUgdXNlZCBmb3IgaXQuXG4gKlxuICogYG1hcmtkb3dubGludC1jbGkyYCdzIG93biBgZml4YCByZWFkcyBhbmQgd3JpdGVzIGZpbGVzIG9ubHksIGFuZCBza2lwcyBgbm9uRmlsZUNvbnRlbnRzYC4gU28gdGhlIGNvbnRlbnQgaXMgbGludGVkXG4gKiBhcyB7QGxpbmsgbGludE1hcmtkb3duQ29udGVudH0gbGludHMgaXQsIGFuIG91dHB1dCBmb3JtYXR0ZXIgY29sbGVjdHMgdGhlIGZpbmRpbmdzIHdpdGggdGhlaXIgYGZpeEluZm9gLCBhbmRcbiAqIG1hcmtkb3dubGludCdzIG93biBgYXBwbHlGaXhlc2AgYXBwbGllcyB0aGVtLiBUaGF0IGlzIG9uZSBwYXNzLCBhcyBgbGludDptZDpmaXhgIG1ha2VzIG9uZTogYSBmaW5kaW5nIGxlZnQgb3ZlciBpc1xuICogZm9yIHRoZSBjYWxsZXIncyBuZXh0IGxpbnQgdG8gcmVwb3J0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEZpeE1hcmtkb3duQ29udGVudFBhcmFtc30uXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSB7QGxpbmsgRml4TWFya2Rvd25Db250ZW50UmVzdWx0fS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpeE1hcmtkb3duQ29udGVudChwYXJhbXM6IEZpeE1hcmtkb3duQ29udGVudFBhcmFtcyk6IFByb21pc2U8Rml4TWFya2Rvd25Db250ZW50UmVzdWx0PiB7XG4gIGNvbnN0IHsgY29udGVudCwgY3dkLCBmaWxlUGF0aCB9ID0gcGFyYW1zO1xuICBjb25zdCBjb250ZW50RGVidWdnZXIgPSBnZXRMaWJEZWJ1Z2dlcignbWFya2Rvd25saW50OmZpeE1hcmtkb3duQ29udGVudCcpO1xuICBjb25zdCBmaXhhYmxlRXJyb3JzOiBMaW50RXJyb3JbXSA9IFtdO1xuXG4gIGF3YWl0IG1hcmtkb3dubGludENsaTIoe1xuICAgIGRpcmVjdG9yeTogZ2V0Um9vdEZvbGRlcihjd2QpID8/IGN3ZCA/PyBwcm9jZXNzLmN3ZCgpLFxuICAgIGxvZ01lc3NhZ2U6IChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgIGNvbnRlbnREZWJ1Z2dlcihtZXNzYWdlKTtcbiAgICB9LFxuICAgIG5vR2xvYnM6IHRydWUsXG4gICAgbm9uRmlsZUNvbnRlbnRzOiB7IFt0b1Bvc2l4UGF0aChmaWxlUGF0aCldOiBjb250ZW50IH0sXG4gICAgb3B0aW9uc0RlZmF1bHQ6IG9ic2lkaWFuRGV2VXRpbHNDb25maWcsXG4gICAgb3B0aW9uc092ZXJyaWRlOiB7XG4gICAgICBvdXRwdXRGb3JtYXR0ZXJzOiBbWyh7IHJlc3VsdHMgfSk6IHZvaWQgPT4ge1xuICAgICAgICBmaXhhYmxlRXJyb3JzLnB1c2goLi4ucmVzdWx0cy5maWx0ZXIoKHJlc3VsdCkgPT4gcmVzdWx0LmZpeEluZm8gIT09IG51bGwpKTtcbiAgICAgIH1dXVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBjb250ZW50OiBmaXhhYmxlRXJyb3JzLmxlbmd0aCA9PT0gMCA/IGNvbnRlbnQgOiBhcHBseUZpeGVzKGNvbnRlbnQsIGZpeGFibGVFcnJvcnMpLFxuICAgIGZpeENvdW50OiBmaXhhYmxlRXJyb3JzLmxlbmd0aFxuICB9O1xufVxuXG4vKipcbiAqIExpbnRzIG1hcmtkb3duIGNvbnRlbnQgdGhhdCBpcyBub3Qgb24gZGlzaywgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBgbGludDptZGAgd291bGQgaGF2ZSB1c2VkIGZvciBpdC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBMaW50TWFya2Rvd25Db250ZW50UGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGZpbmRpbmdzLCBlYWNoIG9uZSB0aGUgbGluZSB0aGUgYGxpbnQ6bWRgIG91dHB1dCB3b3VsZCBoYXZlXG4gKiBjYXJyaWVkIOKAlCBgPHBhdGg+OjxsaW5lPls6PGNvbHVtbj5dIGVycm9yIDxydWxlPiA8ZGVzY3JpcHRpb24+YCDigJQgb3IgYW4gZW1wdHkgYXJyYXkgd2hlbiB0aGVyZSBhcmUgbm9uZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpbnRNYXJrZG93bkNvbnRlbnQocGFyYW1zOiBMaW50TWFya2Rvd25Db250ZW50UGFyYW1zKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCB7IGNvbnRlbnQsIGN3ZCwgZmlsZVBhdGggfSA9IHBhcmFtcztcbiAgY29uc3QgZmluZGluZ3M6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGNvbnRlbnREZWJ1Z2dlciA9IGdldExpYkRlYnVnZ2VyKCdtYXJrZG93bmxpbnQ6bGludE1hcmtkb3duQ29udGVudCcpO1xuXG4gIGNvbnN0IGV4aXRDb2RlID0gYXdhaXQgbWFya2Rvd25saW50Q2xpMih7XG4gICAgZGlyZWN0b3J5OiBnZXRSb290Rm9sZGVyKGN3ZCkgPz8gY3dkID8/IHByb2Nlc3MuY3dkKCksXG4gICAgbG9nRXJyb3I6IChtZXNzYWdlOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgIGZpbmRpbmdzLnB1c2gobWVzc2FnZSk7XG4gICAgfSxcbiAgICBsb2dNZXNzYWdlOiAobWVzc2FnZTogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICBjb250ZW50RGVidWdnZXIobWVzc2FnZSk7XG4gICAgfSxcbiAgICAvLyBUaGUgY29udGVudCBpcyB0aGUgb25seSBpbnB1dC4gV2l0aG91dCB0aGlzIHRoZSBjb25maWd1cmF0aW9uJ3Mgb3duIGBnbG9ic2Agd291bGQgYmUgZXhwYW5kZWQgdG9vLCBhbmRcbiAgICAvLyBhIGNoZWNrIG9uIG9uZSBkb2N1bWVudCB3b3VsZCBsaW50IHRoZSB3aG9sZSByZXBvc2l0b3J5IOKAlCBzbG93bHksIGFuZCByZXBvcnRpbmcgZmluZGluZ3MgaXRzIGNhbGxlciBoYXNcbiAgICAvLyBubyBidXNpbmVzcyBmYWlsaW5nIG9uLlxuICAgIG5vR2xvYnM6IHRydWUsXG4gICAgbm9uRmlsZUNvbnRlbnRzOiB7IFt0b1Bvc2l4UGF0aChmaWxlUGF0aCldOiBjb250ZW50IH0sXG4gICAgLy8gVGhlIEJBU0UgdGhlIHJlcG9zaXRvcnkncyBvd24gY29uZmlndXJhdGlvbiBpcyBtZXJnZWQgb3Zlciwgd2hpY2ggbWF0dGVycyBmb3IgYSByZXBvc2l0b3J5IHRoYXQgaGFzIG5vbmVcbiAgICAvLyB5ZXQ6IGBsaW50KClgIGNvcGllcyB0aGUgdGVtcGxhdGUgY29uZmlndXJhdGlvbiBpbiDigJQgd2hpY2ggaXMgYnVpbHQgb24gdGhpcyBvbmUg4oCUIGJlZm9yZSBpdCBsaW50cywgc28gYVxuICAgIC8vIHJ1biB3aXRob3V0IGl0IHdvdWxkIGFwcGx5IG1hcmtkb3dubGludCdzIHN0b2NrIGRlZmF1bHRzIGluc3RlYWQsIGFuZCBgTUQwMTMvbGluZS1sZW5ndGhgIHdvdWxkIGZhaWwgYXRcbiAgICAvLyA4MCBjb2x1bW5zIG9uIGFuIG9yZGluYXJ5IHJlbGVhc2Ugbm90ZSB0aGF0IGBsaW50Om1kYCBpcyBwZXJmZWN0bHkgaGFwcHkgd2l0aC4gU2luY2UgYSByZXBvc2l0b3J5J3Mgb3duXG4gICAgLy8gY29uZmlndXJhdGlvbiBvdmVycmlkZXMgdGhpcyBrZXkgYnkga2V5LCB0aGUgd29yc3QgYSBtaXNtYXRjaCBjYW4gZG8gaXMgbWlzcyBhIGZpbmRpbmcsIG5ldmVyIGludmVudCBvbmUuXG4gICAgb3B0aW9uc0RlZmF1bHQ6IG9ic2lkaWFuRGV2VXRpbHNDb25maWdcbiAgfSk7XG5cbiAgLy8gV2hldGhlciB0aGlzIGlzIGEgRkFJTFVSRSBpcyB0aGUgdG9vbCdzIG93biBhbnN3ZXIsIG5vdCBhIGNvdW50IG9mIHRoZSBsaW5lcyBpdCBwcmludGVkOiBhIHJ1bGUgY29uZmlndXJlZFxuICAvLyB3aXRoIGBzZXZlcml0eTogd2FybmluZ2AgaXMgcHJpbnRlZCB0aHJvdWdoIGBsb2dFcnJvcmAgbGlrZSBhbnkgb3RoZXIgYW5kIHN0aWxsIGV4aXRzIGAwYCwgc28gcmV0dXJuaW5nIHRoZVxuICAvLyBsaW5lcyBhbG9uZSB3b3VsZCBmYWlsIGEgcmVsZWFzZSBvbiBzb21ldGhpbmcgYGxpbnQ6bWRgIGl0c2VsZiBwYXNzZXMuXG4gIHJldHVybiBleGl0Q29kZSA9PT0gU1VDQ0VTU19FWElUX0NPREUgPyBbXSA6IGZpbmRpbmdzO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9CQSxtQkFBK0I7QUFDL0Isa0JBQTRCO0FBQzVCLDBCQUEyQjtBQUMzQiwrQkFBeUM7QUFFekMsa0JBQThCO0FBQzlCLHNDQUF1QztBQUt2QyxNQUFNLG9CQUFvQjtBQTBEMUIsZUFBc0IsbUJBQW1CLFFBQXFFO0FBQzVHLFFBQU0sRUFBRSxTQUFTLEtBQUssU0FBUyxJQUFJO0FBQ25DLFFBQU0sc0JBQWtCLDZCQUFlLGlDQUFpQztBQUN4RSxRQUFNLGdCQUE2QixDQUFDO0FBRXBDLFlBQU0seUJBQUFBLE1BQWlCO0FBQUEsSUFDckIsZUFBVywyQkFBYyxHQUFHLEtBQUssT0FBTyxRQUFRLElBQUk7QUFBQSxJQUNwRCxZQUFZLENBQUMsWUFBMEI7QUFDckMsc0JBQWdCLE9BQU87QUFBQSxJQUN6QjtBQUFBLElBQ0EsU0FBUztBQUFBLElBQ1QsaUJBQWlCLEVBQUUsS0FBQyx5QkFBWSxRQUFRLENBQUMsR0FBRyxRQUFRO0FBQUEsSUFDcEQsZ0JBQWdCO0FBQUEsSUFDaEIsaUJBQWlCO0FBQUEsTUFDZixrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLE1BQVk7QUFDekMsc0JBQWMsS0FBSyxHQUFHLFFBQVEsT0FBTyxDQUFDLFdBQVcsT0FBTyxZQUFZLElBQUksQ0FBQztBQUFBLE1BQzNFLENBQUMsQ0FBQztBQUFBLElBQ0o7QUFBQSxFQUNGLENBQUM7QUFFRCxTQUFPO0FBQUEsSUFDTCxTQUFTLGNBQWMsV0FBVyxJQUFJLGNBQVUsZ0NBQVcsU0FBUyxhQUFhO0FBQUEsSUFDakYsVUFBVSxjQUFjO0FBQUEsRUFDMUI7QUFDRjtBQVNBLGVBQXNCLG9CQUFvQixRQUFzRDtBQUM5RixRQUFNLEVBQUUsU0FBUyxLQUFLLFNBQVMsSUFBSTtBQUNuQyxRQUFNLFdBQXFCLENBQUM7QUFDNUIsUUFBTSxzQkFBa0IsNkJBQWUsa0NBQWtDO0FBRXpFLFFBQU0sV0FBVyxVQUFNLHlCQUFBQSxNQUFpQjtBQUFBLElBQ3RDLGVBQVcsMkJBQWMsR0FBRyxLQUFLLE9BQU8sUUFBUSxJQUFJO0FBQUEsSUFDcEQsVUFBVSxDQUFDLFlBQTBCO0FBQ25DLGVBQVMsS0FBSyxPQUFPO0FBQUEsSUFDdkI7QUFBQSxJQUNBLFlBQVksQ0FBQyxZQUEwQjtBQUNyQyxzQkFBZ0IsT0FBTztBQUFBLElBQ3pCO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJQSxTQUFTO0FBQUEsSUFDVCxpQkFBaUIsRUFBRSxLQUFDLHlCQUFZLFFBQVEsQ0FBQyxHQUFHLFFBQVE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFNcEQsZ0JBQWdCO0FBQUEsRUFDbEIsQ0FBQztBQUtELFNBQU8sYUFBYSxvQkFBb0IsQ0FBQyxJQUFJO0FBQy9DOyIsIm5hbWVzIjpbIm1hcmtkb3dubGludENsaTIiXX0=
|
|
@@ -16,6 +16,23 @@
|
|
|
16
16
|
* defaults, and loads the custom rules. Reaching for the string API means hand-rolling that resolution over
|
|
17
17
|
* five configuration file formats, which is a copy of `markdownlint-cli2` that can only ever drift from it.
|
|
18
18
|
*/
|
|
19
|
+
/**
|
|
20
|
+
* Parameters for {@link fixMarkdownContent}, the same as {@link lintMarkdownContent}'s.
|
|
21
|
+
*/
|
|
22
|
+
export type FixMarkdownContentParams = LintMarkdownContentParams;
|
|
23
|
+
/**
|
|
24
|
+
* The result of {@link fixMarkdownContent}.
|
|
25
|
+
*/
|
|
26
|
+
export interface FixMarkdownContentResult {
|
|
27
|
+
/**
|
|
28
|
+
* The content with every fixable finding fixed.
|
|
29
|
+
*/
|
|
30
|
+
readonly content: string;
|
|
31
|
+
/**
|
|
32
|
+
* How many findings were fixed.
|
|
33
|
+
*/
|
|
34
|
+
readonly fixCount: number;
|
|
35
|
+
}
|
|
19
36
|
/**
|
|
20
37
|
* Parameters for {@link lintMarkdownContent}.
|
|
21
38
|
*/
|
|
@@ -37,6 +54,19 @@ export interface LintMarkdownContentParams {
|
|
|
37
54
|
*/
|
|
38
55
|
readonly filePath: string;
|
|
39
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Applies the fixes `lint:md:fix` would apply to markdown that is not on disk, with the configuration `lint:md`
|
|
59
|
+
* would have used for it.
|
|
60
|
+
*
|
|
61
|
+
* `markdownlint-cli2`'s own `fix` reads and writes files only, and skips `nonFileContents`. So the content is linted
|
|
62
|
+
* as {@link lintMarkdownContent} lints it, an output formatter collects the findings with their `fixInfo`, and
|
|
63
|
+
* markdownlint's own `applyFixes` applies them. That is one pass, as `lint:md:fix` makes one: a finding left over is
|
|
64
|
+
* for the caller's next lint to report.
|
|
65
|
+
*
|
|
66
|
+
* @param params - The {@link FixMarkdownContentParams}.
|
|
67
|
+
* @returns A {@link Promise} that resolves to the {@link FixMarkdownContentResult}.
|
|
68
|
+
*/
|
|
69
|
+
export declare function fixMarkdownContent(params: FixMarkdownContentParams): Promise<FixMarkdownContentResult>;
|
|
40
70
|
/**
|
|
41
71
|
* Lints markdown content that is not on disk, with the configuration `lint:md` would have used for it.
|
|
42
72
|
*
|
|
@@ -5,13 +5,35 @@
|
|
|
5
5
|
* The types for `markdownlint-cli2`'s programmatic entry point, which the package itself describes in JSDoc
|
|
6
6
|
* and ships no declaration for. Vendored here, beside the configuration-schema types, for the same reason.
|
|
7
7
|
*
|
|
8
|
-
* Only the parameters {@link lintMarkdownContent}
|
|
9
|
-
* `argv`, `allowStdin`, `fileContents`, `fs
|
|
8
|
+
* Only the parameters {@link lintMarkdownContent} and {@link fixMarkdownContent} pass are declared. The full parameter
|
|
9
|
+
* object also carries `argv`, `allowStdin`, `fileContents`, `fs` and `noImport`, none of which a caller linting
|
|
10
10
|
* one in-memory document has any use for — and declaring an option nobody passes is a claim about a shape
|
|
11
11
|
* nothing here ever checks.
|
|
12
12
|
*/
|
|
13
13
|
|
|
14
14
|
declare module 'markdownlint-cli2' {
|
|
15
|
+
/**
|
|
16
|
+
* What `markdownlint-cli2` hands an output formatter.
|
|
17
|
+
*/
|
|
18
|
+
interface MarkdownlintCli2FormatterOptions {
|
|
19
|
+
/**
|
|
20
|
+
* Every finding of the run, each one markdownlint's own `LintError` with the reported path added, so a fixable
|
|
21
|
+
* one still carries its `fixInfo`.
|
|
22
|
+
*/
|
|
23
|
+
readonly results: readonly (import('markdownlint', { with: { 'resolution-mode': 'import' } }).LintError & { readonly fileName: string })[];
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* The options that win over every configuration `markdownlint-cli2` discovers.
|
|
28
|
+
*/
|
|
29
|
+
interface MarkdownlintCli2OptionsOverride {
|
|
30
|
+
/**
|
|
31
|
+
* The output formatters, each a module id or the formatter function itself, followed by its parameters. Setting
|
|
32
|
+
* it replaces the default formatter, so nothing reaches `logError`.
|
|
33
|
+
*/
|
|
34
|
+
readonly outputFormatters?: readonly (readonly [(options: MarkdownlintCli2FormatterOptions) => Promise<void> | void])[] | undefined;
|
|
35
|
+
}
|
|
36
|
+
|
|
15
37
|
/**
|
|
16
38
|
* The parameters of {@link main}.
|
|
17
39
|
*/
|
|
@@ -54,6 +76,11 @@ declare module 'markdownlint-cli2' {
|
|
|
54
76
|
* key by key and every other option is replaced wholesale, so anything the repository states itself wins.
|
|
55
77
|
*/
|
|
56
78
|
readonly optionsDefault?: import('./markdownlint-cli2-config-schema.d.cjs').MarkdownlintCli2ConfigurationSchema | undefined;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The options merged over everything discovered, which win over the repository's own configuration.
|
|
82
|
+
*/
|
|
83
|
+
readonly optionsOverride?: MarkdownlintCli2OptionsOverride | undefined;
|
|
57
84
|
}
|
|
58
85
|
|
|
59
86
|
/**
|
|
@@ -107,7 +107,9 @@ async function lint(options) {
|
|
|
107
107
|
"--retry-errors-count",
|
|
108
108
|
"3",
|
|
109
109
|
"--retry-errors-jitter",
|
|
110
|
-
"
|
|
110
|
+
"5000",
|
|
111
|
+
"--status-code",
|
|
112
|
+
"429:warn",
|
|
111
113
|
"--url-rewrite-search",
|
|
112
114
|
String.raw`https://www\.npmjs\.com/package/`,
|
|
113
115
|
"--url-rewrite-replace",
|
|
@@ -130,4 +132,4 @@ async function getMarkdownFiles() {
|
|
|
130
132
|
0 && (module.exports = {
|
|
131
133
|
lint
|
|
132
134
|
});
|
|
133
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL21hcmtkb3dubGludC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqL1xuXG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnJztcbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgY3AsXG4gIGdsb2Jcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQge1xuICBtYXRjaGVzR2xvYixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgZ2V0Tm9uSWdub3JlZEZpbGVzIH0gZnJvbSAnLi4vZ2l0LnRzJztcbmltcG9ydCB7IHJlc29sdmVUb29sQ29tbWFuZCB9IGZyb20gJy4uL3BhY2thZ2UtbWFuYWdlci50cyc7XG5pbXBvcnQgeyBSZXBvUGF0aHMgfSBmcm9tICcuLi9yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGV4ZWNGcm9tUm9vdCxcbiAgZ2V0Um9vdEZvbGRlcixcbiAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmVcbn0gZnJvbSAnLi4vcm9vdC50cyc7XG5pbXBvcnQge1xuICBjaGVja0lzSW5Ob2RlTW9kdWxlcyxcbiAgTk9ERV9NT0RVTEVTX0lHTk9SRV9HTE9CXG59IGZyb20gJy4vbWFya2Rvd25saW50LWlnbm9yZXMudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgbGludH0gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGludE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBjb3BpZWQgdG8gdGhlIHByb2plY3Qgcm9vdCB3aGVuIHRoZSBwcm9qZWN0IGhhcyBub25lLiBXaXRob3V0IGl0LFxuICAgKiBgbWFya2Rvd25saW50LWNsaTJgIHJ1bnMgd2l0aCBpdHMgb3duIGRlZmF1bHRzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdENvbmZpZ0ZpbGVQYXRoPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBHbG9icywgcmVsYXRpdmUgdG8gdGhlIHJvb3QgZm9sZGVyLCBvZiBtYXJrZG93biBmaWxlcyB0byBsZWF2ZSBvdXQgb2YgdGhlIGBsaW5raW5hdG9yYCBwYXNzIG9ubHk7XG4gICAqIGBtYXJrZG93bmxpbnQtY2xpMmAgc3RpbGwgbGludHMgdGhlbS5cbiAgICpcbiAgICogRm9yIGEgZG9jdW1lbnRhdGlvbiBzaXRlIHdob3NlIHBhZ2VzIGxpbmsgdG8gZWFjaCBvdGhlciBiYXNlLWFic29sdXRlbHkgKGAvPHNpdGUtYmFzZT4vZ3VpZGVzLy4uLmApOiB0aG9zZVxuICAgKiBsaW5rcyByZXNvbHZlIG9ubHkgYWdhaW5zdCB0aGUgQlVJTFQgc2l0ZSwgc28gYGxpbmtpbmF0b3JgIHJlcG9ydHMgZWFjaCBvbmUgYXMgYSA0MDQsIGFuZCB0aGUgc2l0ZSdzIG93blxuICAgKiBidWlsZCBpcyB3aGF0IGNoZWNrcyB0aGVtLlxuICAgKlxuICAgKiBAZXhhbXBsZSBgWydkb2NzLyoqJ11gXG4gICAqL1xuICByZWFkb25seSBsaW5rQ2hlY2tFeGNsdWRlR2xvYnM/OiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogT3B0aW9uYWwgZmlsZSBwYXRocyB0byBsaW50LiBJZiBvbWl0dGVkLCBsaW50cyB0aGUgZW50aXJlIHByb2plY3QuXG4gICAqL1xuICByZWFkb25seSBwYXRocz86IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZpeCBsaW50aW5nIGlzc3VlcyBhdXRvbWF0aWNhbGx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGaXg/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIExpbnQgbWFya2Rvd24gZG9jdW1lbnRhdGlvbiB1c2luZyBgbWFya2Rvd25saW50LWNsaTJgIGFuZCBgbGlua2luYXRvcmAuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIExpbnRPcHRpb25zfS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpbnQob3B0aW9ucz86IExpbnRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgZGVmYXVsdENvbmZpZ0ZpbGVQYXRoLCBsaW5rQ2hlY2tFeGNsdWRlR2xvYnMgPSBbXSwgcGF0aHMsIHNob3VsZEZpeCA9IGZhbHNlIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCBjb25maWdGaWxlcyA9IFtcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ0pzb25jLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnWWFtbCxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ0NqcyxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ01qcyxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnSnNvbmMsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ0pzb24sXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ1lhbWwsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ1ltbCxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnQ2pzLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdNanNcbiAgXTtcblxuICBjb25zdCBkb2VzQ29uZmlnRmlsZUV4aXN0ID0gY29uZmlnRmlsZXMuc29tZSgoY29uZmlnRmlsZSkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZ0ZpbGVQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBjb25maWdGaWxlIH0pO1xuICAgIHJldHVybiBleGlzdHNTeW5jKGNvbmZpZ0ZpbGVQYXRoKTtcbiAgfSk7XG5cbiAgaWYgKCFkb2VzQ29uZmlnRmlsZUV4aXN0ICYmIGRlZmF1bHRDb25maWdGaWxlUGF0aCkge1xuICAgIGdldExpYkRlYnVnZ2VyKCdtYXJrZG93bmxpbnQ6bGludCcpKCdtYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlIG5vdCBmb3VuZC4gQ3JlYXRpbmcgZGVmYXVsdCBjb25maWcuLi4nKTtcbiAgICBhd2FpdCBjcChkZWZhdWx0Q29uZmlnRmlsZVBhdGgsIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogYmFzZW5hbWUoZGVmYXVsdENvbmZpZ0ZpbGVQYXRoKSB9KSk7XG4gIH1cblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaGVzIGFyZSBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHRhcmdldHMgPSBwYXRocz8ubGVuZ3RoID8gcGF0aHMgOiBbUmVwb1BhdGhzLkN1cnJlbnRGb2xkZXJdO1xuICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICBhd2FpdCBleGVjRnJvbVJvb3QoWy4uLnJlc29sdmVUb29sQ29tbWFuZCh7IHRvb2w6ICdtYXJrZG93bmxpbnQtY2xpMicgfSksIC4uLihzaG91bGRGaXggPyBbJy0tZml4J10gOiBbXSksIHsgYmF0Y2hlZEFyZ3VtZW50czogdGFyZ2V0cyB9XSk7XG5cbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFRoZSBwYXRocy1wcm92aWRlZCBicmFuY2ggaXMgb25seSBleGVyY2lzZWQgYnkgY29uc3VtZXIgcHJvamVjdHMgcGFzc2luZyBmaWxlIGxpc3RzLiAqL1xuICBjb25zdCByb290Rm9sZGVyID0gZ2V0Um9vdEZvbGRlcigpID8/IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IG1kRmlsZXMgPSBwYXRocz8ubGVuZ3RoXG4gICAgPyBwYXRocy5tYXAoKHApID0+IHJlbGF0aXZlKHJvb3RGb2xkZXIsIHApLnJlcGxhY2VBbGwoJ1xcXFwnLCAnLycpIHx8IHApXG4gICAgOiBhd2FpdCBnZXRNYXJrZG93bkZpbGVzKCk7XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGNvbnN0IGxpbmtDaGVja0ZpbGVzID0gbWRGaWxlcy5maWx0ZXIoKG1kRmlsZSkgPT4gbGlua0NoZWNrRXhjbHVkZUdsb2JzLmV2ZXJ5KChleGNsdWRlR2xvYikgPT4gIW1hdGNoZXNHbG9iKG1kRmlsZSwgZXhjbHVkZUdsb2IpKSk7XG4gIC8vIGBsaW5raW5hdG9yYCB3aXRoIG5vIExPQ0FUSU9OIHByaW50cyBpdHMgdXNhZ2UgYW5kIGV4aXRzIG5vbi16ZXJvLCBzbyBhIGxpc3QgZW1wdGllZCBieSB0aGUgZXhjbHVzaW9ucyBoYXMgbm90aGluZyB0byBjaGVjay5cbiAgaWYgKGxpbmtDaGVja0ZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICBhd2FpdCBleGVjRnJvbVJvb3QoW1xuICAgIC4uLnJlc29sdmVUb29sQ29tbWFuZCh7IHRvb2w6ICdsaW5raW5hdG9yJyB9KSxcbiAgICAnLS1yZXRyeScsXG4gICAgJy0tcmV0cnktZXJyb3JzJyxcbiAgICAnLS1yZXRyeS1lcnJvcnMtY291bnQnLFxuICAgICczJyxcbiAgICAnLS1yZXRyeS1lcnJvcnMtaml0dGVyJyxcbiAgICAnNScsXG4gICAgJy0tdXJsLXJld3JpdGUtc2VhcmNoJyxcbiAgICBTdHJpbmcucmF3YGh0dHBzOi8vd3d3XFwubnBtanNcXC5jb20vcGFja2FnZS9gLFxuICAgICctLXVybC1yZXdyaXRlLXJlcGxhY2UnLFxuICAgICdodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy8nLFxuICAgIHsgYmF0Y2hlZEFyZ3VtZW50czogbGlua0NoZWNrRmlsZXMgfVxuICBdKTtcbn1cblxuLyoqXG4gKiBUaGUgZ2l0IHBhdGhzcGVjIG1hdGNoaW5nIGV2ZXJ5IG1hcmtkb3duIGZpbGUgaW4gdGhlIHJlcG9zaXRvcnksIGF0IGFueSBkZXB0aC5cbiAqL1xuY29uc3QgTUFSS0RPV05fUEFUSFNQRUMgPSAnKi5tZCc7XG5cbi8qKlxuICogTGlzdHMgdGhlIG1hcmtkb3duIGZpbGVzIHRvIGhhbmQgdG8gYGxpbmtpbmF0b3JgLlxuICpcbiAqIGBsaW5raW5hdG9yYCB0YWtlcyBhIGZpbGUgbGlzdCByYXRoZXIgdGhhbiBhbiBpZ25vcmUgY29uZmlndXJhdGlvbiwgc28gdGhlIGdpdGlnbm9yZWQgZmlsZXMgaGF2ZSB0byBiZVxuICogZHJvcHBlZCBiZWZvcmUgaXQgaXMgaW52b2tlZC4gR2l0IGl0c2VsZiBhbnN3ZXJzIHRoYXQgKG5lc3RlZCBpZ25vcmUgZmlsZXMsIGAhYCBuZWdhdGlvbnMgYW5kIGFsbCk7IHRoZVxuICogaGFuZC1tYWludGFpbmVkIGdsb2IgZXhjbHVzaW9ucyBiZWxvdyBhcmUgb25seSB0aGUgZmFsbGJhY2sgZm9yIGEgY2hlY2tvdXQgd2l0aG91dCBnaXQsIGFuZCB0aGV5IGFyZSB0aGVcbiAqIHZlcnkgbGlzdHMgdGhpcyBpbmRpcmVjdGlvbiBleGlzdHMgdG8gc3RvcCBmcm9tIGRyaWZ0aW5nLlxuICpcbiAqIFRoZSBgbm9kZV9tb2R1bGVzYCBmaWx0ZXIgaXMgYXBwbGllZCB0byB0aGUgZ2l0LWRlcml2ZWQgbGlzdCB0b28sIGFuZCBkZWxpYmVyYXRlbHkgc286IGdpdCBvbmx5IHNraXBzXG4gKiB3aGF0IHRoZSByZXBvc2l0b3J5IGFza2VkIGl0IHRvIHNraXAsIGFuZCBhIHJlcG9zaXRvcnkgY2FuIGRlbGliZXJhdGVseSBUUkFDSyBhIHZlbmRvcmVkIGBub2RlX21vZHVsZXNgXG4gKiB0cmVlLiBUaGF0IGlzIHRoZSBvbmUgZXhjbHVzaW9uIGAuZ2l0aWdub3JlYCBjYW5ub3QgYW5zd2VyIOKAlCBzZWUgYG1hcmtkb3dubGludC1pZ25vcmVzLnRzYC4gQXBwbHlpbmcgaXRcbiAqIGhlcmUga2VlcHMgYGxpbmtpbmF0b3JgIGluIHN0ZXAgd2l0aCB0aGUgbWFya2Rvd25saW50IGhhbGYsIHdoaWNoIGlnbm9yZXMgdGhlIHNhbWUgcGF0aHMgYnkgZ2xvYi5cbiAqXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIG1hcmtkb3duIGZpbGUgcGF0aHMsIHJlbGF0aXZlIHRvIHRoZSByb290IGZvbGRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZ2V0TWFya2Rvd25GaWxlcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IG5vbklnbm9yZWRGaWxlcyA9IGF3YWl0IGdldE5vbklnbm9yZWRGaWxlcyh7IHBhdHRlcm5zOiBbTUFSS0RPV05fUEFUSFNQRUNdIH0pO1xuICByZXR1cm4gbm9uSWdub3JlZEZpbGVzXG4gICAgPyBub25JZ25vcmVkRmlsZXMuZmlsdGVyKChwYXRoKSA9PiAhY2hlY2tJc0luTm9kZU1vZHVsZXMocGF0aCkpXG4gICAgOiAoYXdhaXQgdG9BcnJheShnbG9iKFsnKiovKi5tZCddLCB7XG4gICAgICBleGNsdWRlOiBbXG4gICAgICAgICcuZ2l0LyoqJyxcbiAgICAgICAgJ2Rpc3QvKionLFxuICAgICAgICBOT0RFX01PRFVMRVNfSUdOT1JFX0dMT0JcbiAgICAgIF1cbiAgICB9KSkpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSxtQkFBd0I7QUFDeEIsbUJBQStCO0FBQy9CLGtCQUF5QjtBQUN6QixxQkFBMkI7QUFDM0Isc0JBR087QUFD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
|
|
135
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL21hcmtkb3dubGludC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGludCBtYXJrZG93biBkb2N1bWVudGF0aW9uIHVzaW5nIGBtYXJrZG93bmxpbnQtY2xpMmAgYW5kIGBsaW5raW5hdG9yYC5cbiAqL1xuXG5pbXBvcnQgeyB0b0FycmF5IH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2FzeW5jJztcbmltcG9ydCB7IGdldExpYkRlYnVnZ2VyIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2RlYnVnJztcbmltcG9ydCB7IGJhc2VuYW1lIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHtcbiAgY3AsXG4gIGdsb2Jcbn0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQge1xuICBtYXRjaGVzR2xvYixcbiAgcmVsYXRpdmVcbn0gZnJvbSAnbm9kZTpwYXRoJztcblxuaW1wb3J0IHsgZ2V0Tm9uSWdub3JlZEZpbGVzIH0gZnJvbSAnLi4vZ2l0LnRzJztcbmltcG9ydCB7IHJlc29sdmVUb29sQ29tbWFuZCB9IGZyb20gJy4uL3BhY2thZ2UtbWFuYWdlci50cyc7XG5pbXBvcnQgeyBSZXBvUGF0aHMgfSBmcm9tICcuLi9yZXBvLXBhdGhzLnRzJztcbmltcG9ydCB7XG4gIGV4ZWNGcm9tUm9vdCxcbiAgZ2V0Um9vdEZvbGRlcixcbiAgcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmVcbn0gZnJvbSAnLi4vcm9vdC50cyc7XG5pbXBvcnQge1xuICBjaGVja0lzSW5Ob2RlTW9kdWxlcyxcbiAgTk9ERV9NT0RVTEVTX0lHTk9SRV9HTE9CXG59IGZyb20gJy4vbWFya2Rvd25saW50LWlnbm9yZXMudHMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHRoZSB7QGxpbmsgbGludH0gZnVuY3Rpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGludE9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBjb3BpZWQgdG8gdGhlIHByb2plY3Qgcm9vdCB3aGVuIHRoZSBwcm9qZWN0IGhhcyBub25lLiBXaXRob3V0IGl0LFxuICAgKiBgbWFya2Rvd25saW50LWNsaTJgIHJ1bnMgd2l0aCBpdHMgb3duIGRlZmF1bHRzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdENvbmZpZ0ZpbGVQYXRoPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBHbG9icywgcmVsYXRpdmUgdG8gdGhlIHJvb3QgZm9sZGVyLCBvZiBtYXJrZG93biBmaWxlcyB0byBsZWF2ZSBvdXQgb2YgdGhlIGBsaW5raW5hdG9yYCBwYXNzIG9ubHk7XG4gICAqIGBtYXJrZG93bmxpbnQtY2xpMmAgc3RpbGwgbGludHMgdGhlbS5cbiAgICpcbiAgICogRm9yIGEgZG9jdW1lbnRhdGlvbiBzaXRlIHdob3NlIHBhZ2VzIGxpbmsgdG8gZWFjaCBvdGhlciBiYXNlLWFic29sdXRlbHkgKGAvPHNpdGUtYmFzZT4vZ3VpZGVzLy4uLmApOiB0aG9zZVxuICAgKiBsaW5rcyByZXNvbHZlIG9ubHkgYWdhaW5zdCB0aGUgQlVJTFQgc2l0ZSwgc28gYGxpbmtpbmF0b3JgIHJlcG9ydHMgZWFjaCBvbmUgYXMgYSA0MDQsIGFuZCB0aGUgc2l0ZSdzIG93blxuICAgKiBidWlsZCBpcyB3aGF0IGNoZWNrcyB0aGVtLlxuICAgKlxuICAgKiBAZXhhbXBsZSBgWydkb2NzLyoqJ11gXG4gICAqL1xuICByZWFkb25seSBsaW5rQ2hlY2tFeGNsdWRlR2xvYnM/OiByZWFkb25seSBzdHJpbmdbXSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogT3B0aW9uYWwgZmlsZSBwYXRocyB0byBsaW50LiBJZiBvbWl0dGVkLCBsaW50cyB0aGUgZW50aXJlIHByb2plY3QuXG4gICAqL1xuICByZWFkb25seSBwYXRocz86IHN0cmluZ1tdIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGZpeCBsaW50aW5nIGlzc3VlcyBhdXRvbWF0aWNhbGx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRGaXg/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIExpbnQgbWFya2Rvd24gZG9jdW1lbnRhdGlvbiB1c2luZyBgbWFya2Rvd25saW50LWNsaTJgIGFuZCBgbGlua2luYXRvcmAuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUge0BsaW5rIExpbnRPcHRpb25zfS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpbnQob3B0aW9ucz86IExpbnRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHsgZGVmYXVsdENvbmZpZ0ZpbGVQYXRoLCBsaW5rQ2hlY2tFeGNsdWRlR2xvYnMgPSBbXSwgcGF0aHMsIHNob3VsZEZpeCA9IGZhbHNlIH0gPSBvcHRpb25zID8/IHt9O1xuICBjb25zdCBjb25maWdGaWxlcyA9IFtcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ0pzb25jLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDbGkyQ29uZmlnWWFtbCxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ0NqcyxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q2xpMkNvbmZpZ01qcyxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnSnNvbmMsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ0pzb24sXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ1lhbWwsXG4gICAgUmVwb1BhdGhzLk1hcmtkb3dubGludENvbmZpZ1ltbCxcbiAgICBSZXBvUGF0aHMuTWFya2Rvd25saW50Q29uZmlnQ2pzLFxuICAgIFJlcG9QYXRocy5NYXJrZG93bmxpbnRDb25maWdNanNcbiAgXTtcblxuICBjb25zdCBkb2VzQ29uZmlnRmlsZUV4aXN0ID0gY29uZmlnRmlsZXMuc29tZSgoY29uZmlnRmlsZSkgPT4ge1xuICAgIGNvbnN0IGNvbmZpZ0ZpbGVQYXRoID0gcmVzb2x2ZVBhdGhGcm9tUm9vdFNhZmUoeyBwYXRoOiBjb25maWdGaWxlIH0pO1xuICAgIHJldHVybiBleGlzdHNTeW5jKGNvbmZpZ0ZpbGVQYXRoKTtcbiAgfSk7XG5cbiAgaWYgKCFkb2VzQ29uZmlnRmlsZUV4aXN0ICYmIGRlZmF1bHRDb25maWdGaWxlUGF0aCkge1xuICAgIGdldExpYkRlYnVnZ2VyKCdtYXJrZG93bmxpbnQ6bGludCcpKCdtYXJrZG93bmxpbnQgY29uZmlndXJhdGlvbiBmaWxlIG5vdCBmb3VuZC4gQ3JlYXRpbmcgZGVmYXVsdCBjb25maWcuLi4nKTtcbiAgICBhd2FpdCBjcChkZWZhdWx0Q29uZmlnRmlsZVBhdGgsIHJlc29sdmVQYXRoRnJvbVJvb3RTYWZlKHsgcGF0aDogYmFzZW5hbWUoZGVmYXVsdENvbmZpZ0ZpbGVQYXRoKSB9KSk7XG4gIH1cblxuICAvKiB2OCBpZ25vcmUgc3RhcnQgLS0gVGhlIHBhdGhzLXByb3ZpZGVkIGJyYW5jaGVzIGFyZSBvbmx5IGV4ZXJjaXNlZCBieSBjb25zdW1lciBwcm9qZWN0cyBwYXNzaW5nIGZpbGUgbGlzdHMuICovXG4gIGNvbnN0IHRhcmdldHMgPSBwYXRocz8ubGVuZ3RoID8gcGF0aHMgOiBbUmVwb1BhdGhzLkN1cnJlbnRGb2xkZXJdO1xuICAvKiB2OCBpZ25vcmUgc3RvcCAqL1xuICBhd2FpdCBleGVjRnJvbVJvb3QoWy4uLnJlc29sdmVUb29sQ29tbWFuZCh7IHRvb2w6ICdtYXJrZG93bmxpbnQtY2xpMicgfSksIC4uLihzaG91bGRGaXggPyBbJy0tZml4J10gOiBbXSksIHsgYmF0Y2hlZEFyZ3VtZW50czogdGFyZ2V0cyB9XSk7XG5cbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIFRoZSBwYXRocy1wcm92aWRlZCBicmFuY2ggaXMgb25seSBleGVyY2lzZWQgYnkgY29uc3VtZXIgcHJvamVjdHMgcGFzc2luZyBmaWxlIGxpc3RzLiAqL1xuICBjb25zdCByb290Rm9sZGVyID0gZ2V0Um9vdEZvbGRlcigpID8/IHByb2Nlc3MuY3dkKCk7XG4gIGNvbnN0IG1kRmlsZXMgPSBwYXRocz8ubGVuZ3RoXG4gICAgPyBwYXRocy5tYXAoKHApID0+IHJlbGF0aXZlKHJvb3RGb2xkZXIsIHApLnJlcGxhY2VBbGwoJ1xcXFwnLCAnLycpIHx8IHApXG4gICAgOiBhd2FpdCBnZXRNYXJrZG93bkZpbGVzKCk7XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG4gIGNvbnN0IGxpbmtDaGVja0ZpbGVzID0gbWRGaWxlcy5maWx0ZXIoKG1kRmlsZSkgPT4gbGlua0NoZWNrRXhjbHVkZUdsb2JzLmV2ZXJ5KChleGNsdWRlR2xvYikgPT4gIW1hdGNoZXNHbG9iKG1kRmlsZSwgZXhjbHVkZUdsb2IpKSk7XG4gIC8vIGBsaW5raW5hdG9yYCB3aXRoIG5vIExPQ0FUSU9OIHByaW50cyBpdHMgdXNhZ2UgYW5kIGV4aXRzIG5vbi16ZXJvLCBzbyBhIGxpc3QgZW1wdGllZCBieSB0aGUgZXhjbHVzaW9ucyBoYXMgbm90aGluZyB0byBjaGVjay5cbiAgaWYgKGxpbmtDaGVja0ZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuICAvLyBBIGhvc3QgdGhhdCByYXRlLWxpbWl0cyB0aGUgcnVubmVyIChmb3J1bS5vYnNpZGlhbi5tZCBhbnN3ZXJzIGEgQ0kgYnVyc3Qgd2l0aCA0MjkpIGlzIHJldHJpZWQgd2l0aCBhIGppdHRlciBvZiB1cCB0b1xuICAvLyA1IHMsIHdoaWNoIGBsaW5raW5hdG9yYCByZWFkcyBhcyBNSUxMSVNFQ09ORFMsIHNvIHRoZSByZXRyaWVzIGRvIG5vdCBhbGwgbGFuZCBpbiB0aGUgc2FtZSBpbnN0YW50LiBBIGxpbmsgc3RpbGxcbiAgLy8gYW5zd2VyaW5nIDQyOSBvbmNlIHRoZXkgYXJlIHNwZW50IGlzIGEgd2FybmluZywgbm90IGEgZmFpbHVyZTogYSByYXRlIGxpbWl0IHNheXMgbm90aGluZyBhYm91dCB3aGV0aGVyIHRoZSBsaW5rIGV4aXN0cy5cbiAgYXdhaXQgZXhlY0Zyb21Sb290KFtcbiAgICAuLi5yZXNvbHZlVG9vbENvbW1hbmQoeyB0b29sOiAnbGlua2luYXRvcicgfSksXG4gICAgJy0tcmV0cnknLFxuICAgICctLXJldHJ5LWVycm9ycycsXG4gICAgJy0tcmV0cnktZXJyb3JzLWNvdW50JyxcbiAgICAnMycsXG4gICAgJy0tcmV0cnktZXJyb3JzLWppdHRlcicsXG4gICAgJzUwMDAnLFxuICAgICctLXN0YXR1cy1jb2RlJyxcbiAgICAnNDI5Ondhcm4nLFxuICAgICctLXVybC1yZXdyaXRlLXNlYXJjaCcsXG4gICAgU3RyaW5nLnJhd2BodHRwczovL3d3d1xcLm5wbWpzXFwuY29tL3BhY2thZ2UvYCxcbiAgICAnLS11cmwtcmV3cml0ZS1yZXBsYWNlJyxcbiAgICAnaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvJyxcbiAgICB7IGJhdGNoZWRBcmd1bWVudHM6IGxpbmtDaGVja0ZpbGVzIH1cbiAgXSk7XG59XG5cbi8qKlxuICogVGhlIGdpdCBwYXRoc3BlYyBtYXRjaGluZyBldmVyeSBtYXJrZG93biBmaWxlIGluIHRoZSByZXBvc2l0b3J5LCBhdCBhbnkgZGVwdGguXG4gKi9cbmNvbnN0IE1BUktET1dOX1BBVEhTUEVDID0gJyoubWQnO1xuXG4vKipcbiAqIExpc3RzIHRoZSBtYXJrZG93biBmaWxlcyB0byBoYW5kIHRvIGBsaW5raW5hdG9yYC5cbiAqXG4gKiBgbGlua2luYXRvcmAgdGFrZXMgYSBmaWxlIGxpc3QgcmF0aGVyIHRoYW4gYW4gaWdub3JlIGNvbmZpZ3VyYXRpb24sIHNvIHRoZSBnaXRpZ25vcmVkIGZpbGVzIGhhdmUgdG8gYmVcbiAqIGRyb3BwZWQgYmVmb3JlIGl0IGlzIGludm9rZWQuIEdpdCBpdHNlbGYgYW5zd2VycyB0aGF0IChuZXN0ZWQgaWdub3JlIGZpbGVzLCBgIWAgbmVnYXRpb25zIGFuZCBhbGwpOyB0aGVcbiAqIGhhbmQtbWFpbnRhaW5lZCBnbG9iIGV4Y2x1c2lvbnMgYmVsb3cgYXJlIG9ubHkgdGhlIGZhbGxiYWNrIGZvciBhIGNoZWNrb3V0IHdpdGhvdXQgZ2l0LCBhbmQgdGhleSBhcmUgdGhlXG4gKiB2ZXJ5IGxpc3RzIHRoaXMgaW5kaXJlY3Rpb24gZXhpc3RzIHRvIHN0b3AgZnJvbSBkcmlmdGluZy5cbiAqXG4gKiBUaGUgYG5vZGVfbW9kdWxlc2AgZmlsdGVyIGlzIGFwcGxpZWQgdG8gdGhlIGdpdC1kZXJpdmVkIGxpc3QgdG9vLCBhbmQgZGVsaWJlcmF0ZWx5IHNvOiBnaXQgb25seSBza2lwc1xuICogd2hhdCB0aGUgcmVwb3NpdG9yeSBhc2tlZCBpdCB0byBza2lwLCBhbmQgYSByZXBvc2l0b3J5IGNhbiBkZWxpYmVyYXRlbHkgVFJBQ0sgYSB2ZW5kb3JlZCBgbm9kZV9tb2R1bGVzYFxuICogdHJlZS4gVGhhdCBpcyB0aGUgb25lIGV4Y2x1c2lvbiBgLmdpdGlnbm9yZWAgY2Fubm90IGFuc3dlciDigJQgc2VlIGBtYXJrZG93bmxpbnQtaWdub3Jlcy50c2AuIEFwcGx5aW5nIGl0XG4gKiBoZXJlIGtlZXBzIGBsaW5raW5hdG9yYCBpbiBzdGVwIHdpdGggdGhlIG1hcmtkb3dubGludCBoYWxmLCB3aGljaCBpZ25vcmVzIHRoZSBzYW1lIHBhdGhzIGJ5IGdsb2IuXG4gKlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBtYXJrZG93biBmaWxlIHBhdGhzLCByZWxhdGl2ZSB0byB0aGUgcm9vdCBmb2xkZXIuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldE1hcmtkb3duRmlsZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBub25JZ25vcmVkRmlsZXMgPSBhd2FpdCBnZXROb25JZ25vcmVkRmlsZXMoeyBwYXR0ZXJuczogW01BUktET1dOX1BBVEhTUEVDXSB9KTtcbiAgcmV0dXJuIG5vbklnbm9yZWRGaWxlc1xuICAgID8gbm9uSWdub3JlZEZpbGVzLmZpbHRlcigocGF0aCkgPT4gIWNoZWNrSXNJbk5vZGVNb2R1bGVzKHBhdGgpKVxuICAgIDogKGF3YWl0IHRvQXJyYXkoZ2xvYihbJyoqLyoubWQnXSwge1xuICAgICAgZXhjbHVkZTogW1xuICAgICAgICAnLmdpdC8qKicsXG4gICAgICAgICdkaXN0LyoqJyxcbiAgICAgICAgTk9ERV9NT0RVTEVTX0lHTk9SRV9HTE9CXG4gICAgICBdXG4gICAgfSkpKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsbUJBQXdCO0FBQ3hCLG1CQUErQjtBQUMvQixrQkFBeUI7QUFDekIscUJBQTJCO0FBQzNCLHNCQUdPO0FBQ1AsdUJBR087QUFFUCxpQkFBbUM7QUFDbkMsNkJBQW1DO0FBQ25DLHdCQUEwQjtBQUMxQixrQkFJTztBQUNQLGtDQUdPO0FBMENQLGVBQXNCLEtBQUssU0FBc0M7QUFDL0QsUUFBTSxFQUFFLHVCQUF1Qix3QkFBd0IsQ0FBQyxHQUFHLE9BQU8sWUFBWSxNQUFNLElBQUksV0FBVyxDQUFDO0FBQ3BHLFFBQU0sY0FBYztBQUFBLElBQ2xCLDRCQUFVO0FBQUEsSUFDViw0QkFBVTtBQUFBLElBQ1YsNEJBQVU7QUFBQSxJQUNWLDRCQUFVO0FBQUEsSUFDViw0QkFBVTtBQUFBLElBQ1YsNEJBQVU7QUFBQSxJQUNWLDRCQUFVO0FBQUEsSUFDViw0QkFBVTtBQUFBLElBQ1YsNEJBQVU7QUFBQSxJQUNWLDRCQUFVO0FBQUEsRUFDWjtBQUVBLFFBQU0sc0JBQXNCLFlBQVksS0FBSyxDQUFDLGVBQWU7QUFDM0QsVUFBTSxxQkFBaUIscUNBQXdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkUsZUFBTywyQkFBVyxjQUFjO0FBQUEsRUFDbEMsQ0FBQztBQUVELE1BQUksQ0FBQyx1QkFBdUIsdUJBQXVCO0FBQ2pELHFDQUFlLG1CQUFtQixFQUFFLHVFQUF1RTtBQUMzRyxjQUFNLG9CQUFHLDJCQUF1QixxQ0FBd0IsRUFBRSxVQUFNLHNCQUFTLHFCQUFxQixFQUFFLENBQUMsQ0FBQztBQUFBLEVBQ3BHO0FBR0EsUUFBTSxVQUFVLE9BQU8sU0FBUyxRQUFRLENBQUMsNEJBQVUsYUFBYTtBQUVoRSxZQUFNLDBCQUFhLENBQUMsT0FBRywyQ0FBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDLEdBQUcsR0FBSSxZQUFZLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBSSxFQUFFLGtCQUFrQixRQUFRLENBQUMsQ0FBQztBQUd6SSxRQUFNLGlCQUFhLDJCQUFjLEtBQUssUUFBUSxJQUFJO0FBQ2xELFFBQU0sVUFBVSxPQUFPLFNBQ25CLE1BQU0sSUFBSSxDQUFDLFVBQU0sMkJBQVMsWUFBWSxDQUFDLEVBQUUsV0FBVyxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQ25FLE1BQU0saUJBQWlCO0FBRTNCLFFBQU0saUJBQWlCLFFBQVEsT0FBTyxDQUFDLFdBQVcsc0JBQXNCLE1BQU0sQ0FBQyxnQkFBZ0IsS0FBQyw4QkFBWSxRQUFRLFdBQVcsQ0FBQyxDQUFDO0FBRWpJLE1BQUksZUFBZSxXQUFXLEdBQUc7QUFDL0I7QUFBQSxFQUNGO0FBSUEsWUFBTSwwQkFBYTtBQUFBLElBQ2pCLE9BQUcsMkNBQW1CLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFBQSxJQUM1QztBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQSxPQUFPO0FBQUEsSUFDUDtBQUFBLElBQ0E7QUFBQSxJQUNBLEVBQUUsa0JBQWtCLGVBQWU7QUFBQSxFQUNyQyxDQUFDO0FBQ0g7QUFLQSxNQUFNLG9CQUFvQjtBQWlCMUIsZUFBZSxtQkFBc0M7QUFDbkQsUUFBTSxrQkFBa0IsVUFBTSwrQkFBbUIsRUFBRSxVQUFVLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQUNsRixTQUFPLGtCQUNILGdCQUFnQixPQUFPLENBQUMsU0FBUyxLQUFDLGtEQUFxQixJQUFJLENBQUMsSUFDM0QsVUFBTSwwQkFBUSxzQkFBSyxDQUFDLFNBQVMsR0FBRztBQUFBLElBQ2pDLFNBQVM7QUFBQSxNQUNQO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDLENBQUM7QUFDTjsiLCJuYW1lcyI6W119
|