@mnaoumov/typescript-dev-toolkit 2.0.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +4 -0
  2. package/dist/lib/cjs/commitlint-config.cjs +18 -3
  3. package/dist/lib/cjs/commitlint-config.d.cts +6 -0
  4. package/dist/lib/cjs/docs-site/api-doc-documented-files.cjs +51 -0
  5. package/dist/lib/cjs/docs-site/api-doc-documented-files.d.cts +31 -0
  6. package/dist/lib/cjs/docs-site/api-doc-package-sites.cjs +3 -2
  7. package/dist/lib/cjs/docs-site/api-doc-package-sites.d.cts +2 -1
  8. package/dist/lib/cjs/docs-site/api-doc-source-processing.cjs +4 -7
  9. package/dist/lib/cjs/docs-site/index.cjs +4 -1
  10. package/dist/lib/cjs/docs-site/index.d.cts +1 -0
  11. package/dist/lib/cjs/exec.cjs +18 -14
  12. package/dist/lib/cjs/exec.d.cts +31 -0
  13. package/dist/lib/cjs/linters/eslint-config.cjs +8 -1
  14. package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +3 -1
  15. package/dist/lib/cjs/linters/eslint-rules/index.cjs +4 -1
  16. package/dist/lib/cjs/linters/eslint-rules/index.d.cts +1 -0
  17. package/dist/lib/cjs/linters/eslint-rules/prefer-logical-operator-over-ternary.cjs +170 -0
  18. package/dist/lib/cjs/linters/eslint-rules/prefer-logical-operator-over-ternary.d.cts +30 -0
  19. package/dist/lib/cjs/nano-staged-config.cjs +42 -3
  20. package/dist/lib/cjs/nano-staged-config.d.cts +24 -4
  21. package/dist/lib/esm/commitlint-config.d.mts +6 -0
  22. package/dist/lib/esm/commitlint-config.mjs +7 -3
  23. package/dist/lib/esm/docs-site/api-doc-documented-files.d.mts +31 -0
  24. package/dist/lib/esm/docs-site/api-doc-documented-files.mjs +25 -0
  25. package/dist/lib/esm/docs-site/api-doc-package-sites.d.mts +2 -1
  26. package/dist/lib/esm/docs-site/api-doc-package-sites.mjs +3 -2
  27. package/dist/lib/esm/docs-site/api-doc-source-processing.mjs +7 -7
  28. package/dist/lib/esm/docs-site/index.d.mts +1 -0
  29. package/dist/lib/esm/docs-site/index.mjs +3 -1
  30. package/dist/lib/esm/exec.d.mts +31 -0
  31. package/dist/lib/esm/exec.mjs +15 -13
  32. package/dist/lib/esm/linters/eslint-config.mjs +8 -1
  33. package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +3 -1
  34. package/dist/lib/esm/linters/eslint-rules/index.d.mts +1 -0
  35. package/dist/lib/esm/linters/eslint-rules/index.mjs +3 -1
  36. package/dist/lib/esm/linters/eslint-rules/prefer-logical-operator-over-ternary.d.mts +30 -0
  37. package/dist/lib/esm/linters/eslint-rules/prefer-logical-operator-over-ternary.mjs +134 -0
  38. package/dist/lib/esm/nano-staged-config.d.mts +24 -4
  39. package/dist/lib/esm/nano-staged-config.mjs +48 -3
  40. package/docs-site/api-doc-documented-files/package.json +6 -0
  41. package/linters/eslint-rules/prefer-logical-operator-over-ternary/package.json +6 -0
  42. package/package.json +2 -2
@@ -450,6 +450,7 @@ function getInHousePluginConfigs(context) {
450
450
  "typescript-dev-toolkit/no-unused-params-members": "error",
451
451
  "typescript-dev-toolkit/no-used-underscore-variables": "error",
452
452
  "typescript-dev-toolkit/params-options-name-match": "error",
453
+ "typescript-dev-toolkit/prefer-logical-operator-over-ternary": "error",
453
454
  "typescript-dev-toolkit/prefer-noop-async": "error",
454
455
  "typescript-dev-toolkit/readonly-params-options-result-members": "error",
455
456
  "typescript-dev-toolkit/require-method-template": "error",
@@ -917,6 +918,12 @@ function getUnicornConfigs(context) {
917
918
  "unicorn/prefer-iterator-helpers": "off",
918
919
  // `Iterator#toArray` is ES2025. See the ES2022 floor note above.
919
920
  "unicorn/prefer-iterator-to-array": "off",
921
+ /*
922
+ * Replaced by `typescript-dev-toolkit/prefer-logical-operator-over-ternary`, which reports the same and
923
+ * also fixes a boolean literal branch in TypeScript. Unicorn withholds that fix there, while
924
+ * `unicorn/prefer-ternary` keeps producing the shape, so `lint:fix` left an error it had just created.
925
+ */
926
+ "unicorn/prefer-logical-operator-over-ternary": "off",
920
927
  /*
921
928
  * The suggested replacement is `Math.trunc(Number(x))`, which is longer than `parseInt(x, 10)` and no
922
929
  * clearer, and it is not the same function: `parseInt` stops at the first character that cannot be part
@@ -1010,4 +1017,4 @@ export {
1010
1017
  getGlobalIgnoreConfigs,
1011
1018
  getTypeScriptEslintConfigs
1012
1019
  };
1013
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1jb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBnZW5lcmljIGhhbGYgb2YgdGhlIHNoYXJlZCBFU0xpbnQgY29uZmlndXJhdGlvbiwgZm9yIGFueSBUeXBlU2NyaXB0IHByb2plY3QuXG4gKlxuICogSXQgaW50ZWdyYXRlcyBFU0xpbnQncyBvd24gcmVjb21tZW5kZWQgcnVsZXMsIGB0eXBlc2NyaXB0LWVzbGludGAsIGBAc3R5bGlzdGljL2VzbGludC1wbHVnaW5gLFxuICogYGVzbGludC1wbHVnaW4taW1wb3J0LXhgIHdpdGggaXRzIFR5cGVTY3JpcHQgcmVzb2x2ZXIsIGBlc2xpbnQtcGx1Z2luLXBlcmZlY3Rpb25pc3RgLCBgZXNsaW50LXBsdWdpbi11bmljb3JuYCxcbiAqIGBlc2xpbnQtcGx1Z2luLW5gIGFuZCB0aGUgZ2VuZXJpYyBpbi1ob3VzZSBydWxlcy4gQSBwcm9qZWN0LXR5cGUgbGF5ZXIgKHRoZSBPYnNpZGlhbiBwbHVnaW4gb25lIGxpdmVzIGluXG4gKiBgQG1uYW91bW92L29ic2lkaWFuLWRldi10b29sa2l0YCkgYnVpbGRzIG9uIHtAbGluayBnZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlnc30gYW5kIGFkZHMgb25seSB3aGF0IGlzIHNwZWNpZmljIHRvIGl0LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBEZWNsYXJhdGl2ZSBFU0xpbnQgcnVsZS9wbHVnaW4gY29uZmlndXJhdGlvbjsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyBFU0xpbnQsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IExpbnRlciB9IGZyb20gJ2VzbGludCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLW1hZ2ljLW51bWJlcnMgLS0gV2UgZGlzYWJsZWQgbWFnaWMgbnVtYmVycyBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgYWxsIG92ZXIgdGhlIGNvbmZpZ3MuICovXG5pbXBvcnQgY29tbWVudHNDb25maWdzIGZyb20gJ0Blc2xpbnQtY29tbXVuaXR5L2VzbGludC1wbHVnaW4tZXNsaW50LWNvbW1lbnRzL2NvbmZpZ3MnO1xuaW1wb3J0IHsgaW5jbHVkZUlnbm9yZUZpbGUgfSBmcm9tICdAZXNsaW50L2NvbmZpZy1oZWxwZXJzJztcbmltcG9ydCBlc2xpbnQgZnJvbSAnQGVzbGludC9qcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBwbHVnaW5gIGlzIHRvbyBjb25mdXNpbmcuXG5pbXBvcnQgc3R5bGlzdGljIGZyb20gJ0BzdHlsaXN0aWMvZXNsaW50LXBsdWdpbic7XG5pbXBvcnQgeyBjcmVhdGVUeXBlU2NyaXB0SW1wb3J0UmVzb2x2ZXIgfSBmcm9tICdlc2xpbnQtaW1wb3J0LXJlc29sdmVyLXR5cGVzY3JpcHQnO1xuaW1wb3J0IHsgZmxhdENvbmZpZ3MgYXMgZXNsaW50UGx1Z2luSW1wb3J0WEZsYXRDb25maWdzIH0gZnJvbSAnZXNsaW50LXBsdWdpbi1pbXBvcnQteCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHQgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYF9kZWZhdWx0YCBpcyB0b28gY29uZnVzaW5nLlxuaW1wb3J0IG5vZGVQbHVnaW4gZnJvbSAnZXNsaW50LXBsdWdpbi1uJztcbmltcG9ydCB7IGNvbmZpZ3MgYXMgcGVyZmVjdGlvbmlzdENvbmZpZ3MgfSBmcm9tICdlc2xpbnQtcGx1Z2luLXBlcmZlY3Rpb25pc3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBpbmRleGAgaXMgdG9vIGNvbmZ1c2luZy5cbmltcG9ydCB1bmljb3JuIGZyb20gJ2VzbGludC1wbHVnaW4tdW5pY29ybic7XG5pbXBvcnQge1xuICBkZWZpbmVDb25maWcsXG4gIGdsb2JhbElnbm9yZXNcbn0gZnJvbSAnZXNsaW50L2NvbmZpZyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHQgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYF9kZWZhdWx0YCBpcyB0b28gY29uZnVzaW5nLlxuaW1wb3J0IHRzZXNsaW50IGZyb20gJ3R5cGVzY3JpcHQtZXNsaW50JztcblxuaW1wb3J0IHsgUmVwb1BhdGhzIH0gZnJvbSAnLi4vcmVwby1wYXRocy50cyc7XG5pbXBvcnQgeyBnZXRSb290Rm9sZGVyIH0gZnJvbSAnLi4vcm9vdC50cyc7XG5pbXBvcnQgeyBub1Jlc3RyaWN0ZWRTeW50YXhSdWxlRW50cmllcyB9IGZyb20gJy4vZXNsaW50LW5vLXJlc3RyaWN0ZWQtc3ludGF4LnRzJztcbmltcG9ydCB7XG4gIElOX0hPVVNFX0VTTElOVF9QTFVHSU5fTkFNRSxcbiAgaW5Ib3VzZUVzbGludFBsdWdpblxufSBmcm9tICcuL2VzbGludC1ydWxlcy9pbi1ob3VzZS1wbHVnaW4udHMnO1xuaW1wb3J0IHsgQ0xBVURFX1dPUktUUkVFU19JR05PUkVfR0xPQiB9IGZyb20gJy4vbGludC1pZ25vcmVzLnRzJztcblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgZGVmaW5pbmcgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmluZUVzbGludENvbmZpZ3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBidWlsZHMgY3VzdG9tIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb24gY29udGV4dC5cbiAgICogQHJldHVybnMgVGhlIGN1c3RvbSBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21Db25maWdzPzogKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpID0+IExpbnRlci5Db25maWdbXTtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IGVkaXRzIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBjb250ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdENvbnRleHQ/OiAoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogVGhlIG9sZGVzdCBOb2RlIHZlcnNpb24gc2hpcHBlZCBzb3VyY2UgaGFzIHRvIHJ1biBvbiwgYXMgYSBzZW12ZXIgcmFuZ2U6IGEgbGlicmFyeSB0aGF0IGFsc28gcnVucyBpbnNpZGUgYW5cbiAgICogb2xkZXIgcnVudGltZSB0aGFuIGl0cyBvd24gdG9vbGluZyAoYW4gT2JzaWRpYW4gcmVuZGVyZXIsIHNheSkgbmFtZXMgdGhhdCBydW50aW1lJ3MgTm9kZSBoZXJlLiBXaGVuIG9taXR0ZWQsXG4gICAqIGBlc2xpbnQtcGx1Z2luLW5gIHJlYWRzIHRoZSBgZW5naW5lc2AgZmllbGQgb2YgdGhlIHByb2plY3QncyBgcGFja2FnZS5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1Ob2RlVmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlnc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb24gY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQ7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGRlc3QgTm9kZSB2ZXJzaW9uIHNoaXBwZWQgc291cmNlIGhhcyB0byBydW4gb24sIGFzIGEgc2VtdmVyIHJhbmdlLiBXaGVuIG9taXR0ZWQsIGBlc2xpbnQtcGx1Z2luLW5gIHJlYWRzXG4gICAqIHRoZSBgZW5naW5lc2AgZmllbGQgb2YgdGhlIHByb2plY3QncyBgcGFja2FnZS5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1Ob2RlVmVyc2lvbj86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEdldE5vZGVDb21wYXRDb25maWdzUGFyYW1zIHtcbiAgcmVhZG9ubHkgY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dDtcbiAgcmVhZG9ubHkgbWluaW11bU5vZGVWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhlIGNvbnRleHQgZm9yIGRlZmluaW5nIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEVzbGludENvbmZpZ0NvbnRleHQge1xuICAvKipcbiAgICogVGhlIHJvb3QgY29uZmlndXJhdGlvbiBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb290Q29uZmlnRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JpcHQgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NyaXB0RmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc291cmNlRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXJzIGhvbGRpbmcgdGhlIHByb2plY3QncyBzb3VyY2VzLCBieSBkZWZhdWx0IGBzcmNgIGFsb25lLiBBIHdvcmtzcGFjZSB3aG9zZSBwYWNrYWdlcyBlYWNoIGhhdmUgdGhlaXIgb3duXG4gICAqIGBzcmNgIGFkZHMgdGhlbSBoZXJlLCBzbyB0aGUgcnVsZXMga2V5ZWQgb24gYSBmaWxlJ3MgbmFtZSBpbnNpZGUgYSBzb3VyY2UgZm9sZGVyIHJlYWNoIHRob3NlIHBhY2thZ2VzIHRvby5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzb3VyY2VGb2xkZXJzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgdGVzdCBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0ZXN0RmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBhbGwgZmlsZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBhbGwgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgYWxsRmlsZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy50ZXN0RmlsZXMsIC4uLnRoaXMuc2NyaXB0RmlsZXMsIC4uLnRoaXMucm9vdENvbmZpZ0ZpbGVzLCAuLi50aGlzLnNvdXJjZUZpbGVzXTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGNvbnRleHQgb2YgYSBwcm9qZWN0IGxhaWQgb3V0IHRoZSBjb252ZW50aW9uYWwgd2F5OiBzb3VyY2VzIHVuZGVyIGBzcmNgLCBzY3JpcHRzIHVuZGVyIGBzY3JpcHRzYCwgdGVzdHNcbiAqIGJlc2lkZSB0aGUgc291cmNlcyBvciB1bmRlciBgX190ZXN0c19fYCwgYW5kIHRoZSBjb21taXRsaW50LCBFU0xpbnQgYW5kIFZpdGVzdCBjb25maWd1cmF0aW9ucyBhdCB0aGUgcm9vdC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgY29udGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRFc2xpbnRDb25maWdDb250ZXh0KCk6IEVzbGludENvbmZpZ0NvbnRleHQge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEVzbGludENvbmZpZ0NvbnRleHQoKTtcbiAgY29udGV4dC5zb3VyY2VGb2xkZXJzLnB1c2goUmVwb1BhdGhzLlNyYyk7XG4gIGNvbnRleHQucm9vdENvbmZpZ0ZpbGVzLnB1c2goXG4gICAgUmVwb1BhdGhzLkNvbW1pdGxpbnRDb25maWdUcyxcbiAgICBSZXBvUGF0aHMuRXNsaW50Q29uZmlnTXRzLFxuICAgIFJlcG9QYXRocy5WaXRlc3RDb25maWdUc1xuICApO1xuICBjb250ZXh0LnNjcmlwdEZpbGVzLnB1c2goXG4gICAgam9pbihSZXBvUGF0aHMuU2NyaXB0cywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUcylcbiAgKTtcbiAgY29udGV4dC5zb3VyY2VGaWxlcy5wdXNoKFxuICAgIGpvaW4oUmVwb1BhdGhzLlNyYywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUcyksXG4gICAgam9pbihSZXBvUGF0aHMuU3JjLCBSZXBvUGF0aHMuQW55UGF0aCwgUmVwb1BhdGhzLkFueVRzeClcbiAgKTtcbiAgY29udGV4dC50ZXN0RmlsZXMucHVzaChcbiAgICBqb2luKFJlcG9QYXRocy5UZXN0cywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUcyksXG4gICAgam9pbihSZXBvUGF0aHMuTW9ja3MsIFJlcG9QYXRocy5BbnlQYXRoLCBSZXBvUGF0aHMuQW55VHMpLFxuICAgIGpvaW4oUmVwb1BhdGhzLlNyYywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUZXN0VHMpLFxuICAgIC8qXG4gICAgICogQSBidWlsZC1zY3JpcHQgdGVzdCBpcyBhIFRFU1QsIGFuZCB0aGlzIGNvbnZlbnRpb24gcHV0cyBpdCBpbiBhIGAqLnRlc3QudHNgIHVuZGVyIGBzY3JpcHRzL2AgLS0gYmVzaWRlIHRoZVxuICAgICAqIHNjcmlwdCBpdCBjb3ZlcnMgcmF0aGVyIHRoYW4gdW5kZXIgYHNyYy9gLiBXaXRob3V0IHRoaXMgZ2xvYiBpdCBtYXRjaGVkIGBzY3JpcHRGaWxlc2AgYWxvbmUsIHNvIGV2ZXJ5IHJlbGF4YXRpb25cbiAgICAgKiB0aGF0IGtleXMgb24gYGNvbnRleHQudGVzdEZpbGVzYCBtaXNzZWQgaXQ6IGBuby1tYWdpYy1udW1iZXJzYCBmaXJlZCBvbiBhIHN1aXRlIHdob3NlIHdob2xlIHN1YmplY3QgaXMgcmVjb3JkZWRcbiAgICAgKiBudW1iZXJzLCBhbmQgYHVuaWNvcm4vY29uc2lzdGVudC1mdW5jdGlvbi1zY29waW5nYCBvbiB0aGUgcGVyLXN1aXRlIGZpeHR1cmUgZmFjdG9yaWVzIHRoZSBibG9jayBhdCB0aGUgYm90dG9tXG4gICAgICogb2YgYGdldFVuaWNvcm5Db25maWdzYCBzYXlzIHRlc3RzIGV4aXN0IHRvIGFsbG93LlxuICAgICAqXG4gICAgICogVGhlIGZpbGUgbm93IG1hdGNoZXMgQk9USCBsaXN0cywgYW5kIHRoYXQgaXMgZGVsaWJlcmF0ZSByYXRoZXIgdGhhbiBhbiBvdmVybGFwIHRvIHJlc29sdmU6IGV2ZXJ5dGhpbmcgc2NvcGVkIHRvXG4gICAgICogYGNvbnRleHQuc2NyaXB0RmlsZXNgIG9ubHkgdHVybnMgcnVsZXMgT0ZGIChgaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXNgLCBgdW5pY29ybi9uby1wcm9jZXNzLWV4aXRgKSwgYm90aCBvZlxuICAgICAqIHdoaWNoIGEgc2NyaXB0IHRlc3Qgd2FudHMgYXMgbXVjaCBhcyB0aGUgc2NyaXB0IGRvZXMsIHNvIHRoZSB0d28gc2V0cyBjb21wb3NlIGluc3RlYWQgb2YgY29tcGV0aW5nLiBLZWVwIGl0IHRoYXRcbiAgICAgKiB3YXkgLS0gYSBydWxlIHR1cm5lZCBPTiBmb3IgYHNjcmlwdEZpbGVzYCB3b3VsZCBsYW5kIG9uIHRoZXNlIGZpbGVzIHRvbywgYW5kIGZsYXQtY29uZmlnIG9yZGVyLCBub3QgaW50ZW50LFxuICAgICAqIHdvdWxkIGRlY2lkZSB3aGljaCBzaWRlIHdvbi5cbiAgICAgKi9cbiAgICBqb2luKFJlcG9QYXRocy5TY3JpcHRzLCBSZXBvUGF0aHMuQW55UGF0aCwgUmVwb1BhdGhzLkFueVRlc3RUcylcbiAgKTtcbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbnMgb2YgYSBnZW5lcmljIFR5cGVTY3JpcHQgcHJvamVjdC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBkZWZpbmluZyBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lRXNsaW50Q29uZmlncyhvcHRpb25zOiBEZWZpbmVFc2xpbnRDb25maWdzT3B0aW9ucyA9IHt9KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3QgY29udGV4dCA9IGNyZWF0ZURlZmF1bHRFc2xpbnRDb25maWdDb250ZXh0KCk7XG4gIG9wdGlvbnMuZWRpdENvbnRleHQ/Lihjb250ZXh0KTtcbiAgY29uc3QgY3VzdG9tQ29uZmlncyA9IG9wdGlvbnMuY3VzdG9tQ29uZmlncz8uKGNvbnRleHQpID8/IFtdO1xuXG4gIHJldHVybiBkZWZpbmVDb25maWcoXG4gICAgLi4uZ2V0R2xvYmFsSWdub3JlQ29uZmlncygpLFxuICAgIC4uLmdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzKHtcbiAgICAgIGNvbnRleHQsXG4gICAgICAuLi4ob3B0aW9ucy5taW5pbXVtTm9kZVZlcnNpb24gIT09IHVuZGVmaW5lZCAmJiB7IG1pbmltdW1Ob2RlVmVyc2lvbjogb3B0aW9ucy5taW5pbXVtTm9kZVZlcnNpb24gfSlcbiAgICB9KSxcbiAgICAuLi5jdXN0b21Db25maWdzXG4gICk7XG59XG5cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb25zIG9mIEVTTGludCdzIG93biBydWxlcy4gQSBwcm9qZWN0LXR5cGUgbGF5ZXIgcmVhZHMgaXQgdG8gbGVhcm4gd2hpY2ggY29yZSBydWxlcyB0aGlzXG4gKiBjb25maWd1cmF0aW9uIHNldHMgaXRzZWxmLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIEVTTGludCBjb25maWd1cmF0aW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFc2xpbnRDb3JlQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW2VzbGludC5jb25maWdzLnJlY29tbWVuZGVkXSxcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBydWxlczoge1xuICAgICAgICAnYWNjZXNzb3ItcGFpcnMnOiAnZXJyb3InLFxuICAgICAgICAnYXJyYXktY2FsbGJhY2stcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ2NhbWVsY2FzZSc6ICdlcnJvcicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBydWxlIHJlcG9ydHMgcGVyIGNvbW1lbnQgVE9LRU4sIHNvIGV2ZXJ5IGNvbnRpbnVhdGlvbiBsaW5lIG9mIGEgd3JhcHBlZCBgLy9gIGNvbW1lbnQgaXMgaXRzIG93biB0b2tlblxuICAgICAgICAgKiB0aGF0IHdvdWxkIGhhdmUgdG8gc3RhcnQgd2l0aCBhIGNhcGl0YWwg4oCUIHdoaWNoIGlzIGhvdyBwcm9zZSBlbmRzIHVwIHdpdGggY2FwaXRhbHMgbWlkLXNlbnRlbmNlLlxuICAgICAgICAgKiBgaWdub3JlQ29uc2VjdXRpdmVDb21tZW50c2AgZXhlbXB0cyBhIGxpbmUgY29tbWVudCB0aGF0IGRpcmVjdGx5IGZvbGxvd3MgYW5vdGhlciBvbmUsIHdoaWNoIGlzIGV4YWN0bHkgdGhlXG4gICAgICAgICAqIHNoYXBlIG9mIGEgd3JhcHBlZCBibG9jaywgd2hpbGUgc3RpbGwgaG9sZGluZyBpdHMgRklSU1QgbGluZSB0byBhIGNhcGl0YWwuIEJsb2NrIGNvbW1lbnRzIG5lZWQgbm8gc3VjaFxuICAgICAgICAgKiBvcHRpb246IGEgYmxvY2sgY29tbWVudCBpcyBhIHNpbmdsZSB0b2tlbiBob3dldmVyIG1hbnkgbGluZXMgaXQgc3BhbnMuXG4gICAgICAgICAqIGBpZ25vcmVQYXR0ZXJuYCBjb3ZlcnMgdGhlIGhhbGYgdGhhdCBsZWF2ZXMgYmVoaW5kOiBhIGNvbW1lbnQgd2hvc2UgRklSU1Qgd29yZCBpcyBhIGNhbWVsQ2FzZSBpZGVudGlmaWVyIGlzXG4gICAgICAgICAqIGV4ZW1wdCwgc28gYSBjb21tZW50IHRoYXQgb3BlbnMgYnkgbmFtaW5nIGEgc3ltYm9sIGtlZXBzIHRoZSBuYW1lIGEgcmVhZGVyIGNhbiBncmVwIGluc3RlYWQgb2YgYSBQYXNjYWxDYXNlXG4gICAgICAgICAqIG9uZSB0aGF0IGV4aXN0cyBub3doZXJlLiBUaGUgcnVsZSBhbmNob3JzIHRoZSBwYXR0ZXJuIGF0IHRoZSBzdGFydCBvZiB0aGUgY29tbWVudCBhbmQgYFthLXpBLVowLTldYCBtYXRjaGVzXG4gICAgICAgICAqIG5vIHdoaXRlc3BhY2UsIHNvIGl0IGNhbiBvbmx5IGV2ZXIgbWF0Y2ggdGhhdCBmaXJzdCB3b3JkIOKAlCBvcmRpbmFyeSBsb3dlcmNhc2UgcHJvc2Ugc3RheXMgcmVwb3J0ZWQuIEJvdGhcbiAgICAgICAgICogb3B0aW9uIGJhZ3MgbmVlZCBpdCwgYW5kIGBibG9ja2Aga2VlcHMgaXRzIGB2OGAgZXhlbXB0aW9uIGJ5IGFsdGVybmF0aW9uIHJhdGhlciB0aGFuIGxvc2luZyBpdC5cbiAgICAgICAgICovXG4gICAgICAgICdjYXBpdGFsaXplZC1jb21tZW50cyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdhbHdheXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJsb2NrOiB7IGlnbm9yZVBhdHRlcm46ICd2OHxbYS16XVthLXpBLVowLTldKltBLVpdJyB9LFxuICAgICAgICAgICAgbGluZTogeyBpZ25vcmVDb25zZWN1dGl2ZUNvbW1lbnRzOiB0cnVlLCBpZ25vcmVQYXR0ZXJuOiAnW2Etel1bYS16QS1aMC05XSpbQS1aXScgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ2NvbXBsZXhpdHknOiAnZXJyb3InLFxuICAgICAgICAnY29uc2lzdGVudC10aGlzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2N1cmx5JzogJ2Vycm9yJyxcbiAgICAgICAgJ2RlZmF1bHQtY2FzZSc6ICdlcnJvcicsXG4gICAgICAgICdkZWZhdWx0LWNhc2UtbGFzdCc6ICdlcnJvcicsXG4gICAgICAgICdkZWZhdWx0LXBhcmFtLWxhc3QnOiAnZXJyb3InLFxuICAgICAgICAnZXFlcWVxJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtbmFtZS1tYXRjaGluZyc6ICdlcnJvcicsXG4gICAgICAgICdmdW5jLW5hbWVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtc3R5bGUnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAnZGVjbGFyYXRpb24nLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93QXJyb3dGdW5jdGlvbnM6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnZ3JvdXBlZC1hY2Nlc3Nvci1wYWlycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdnZXRCZWZvcmVTZXQnXG4gICAgICAgIF0sXG4gICAgICAgICdndWFyZC1mb3ItaW4nOiAnZXJyb3InLFxuICAgICAgICAnbm8tYWxlcnQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tYXJyYXktY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tYml0d2lzZSc6ICdlcnJvcicsXG4gICAgICAgICduby1jYWxsZXInOiAnZXJyb3InLFxuICAgICAgICAnbm8tY29uc29sZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICd3YXJuJyxcbiAgICAgICAgICAgICAgJ2Vycm9yJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ25vLWNvbnN0cnVjdG9yLXJldHVybic6ICdlcnJvcicsXG4gICAgICAgICduby1kaXYtcmVnZXgnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZWxzZS1yZXR1cm4nOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvd0Vsc2VJZjogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1lbXB0eS1mdW5jdGlvbic6ICdlcnJvcicsXG4gICAgICAgICduby1leHRlbmQtbmF0aXZlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWV4dHJhLWJpbmQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZXh0cmEtbGFiZWwnOiAnZXJyb3InLFxuICAgICAgICAnbm8taW1wbGljaXQtY29lcmNpb24nOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvdzogW1xuICAgICAgICAgICAgICAnISEnXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnbm8taW1wbGllZC1ldmFsJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWlubmVyLWRlY2xhcmF0aW9ucyc6ICdlcnJvcicsXG4gICAgICAgICduby1pdGVyYXRvcic6ICdlcnJvcicsXG4gICAgICAgICduby1sYWJlbC12YXInOiAnZXJyb3InLFxuICAgICAgICAnbm8tbGFiZWxzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvbmUtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvbmVseS1pZic6ICdlcnJvcicsXG4gICAgICAgICduby1sb29wLWZ1bmMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tbWFnaWMtbnVtYmVycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRldGVjdE9iamVjdHM6IHRydWUsXG4gICAgICAgICAgICBlbmZvcmNlQ29uc3Q6IHRydWUsXG4gICAgICAgICAgICBpZ25vcmU6IFtcbiAgICAgICAgICAgICAgLTEsXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1tdWx0aS1hc3NpZ24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tbXVsdGktc3RyJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5lZ2F0ZWQtY29uZGl0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5lc3RlZC10ZXJuYXJ5JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5ldy1mdW5jJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5ldy13cmFwcGVycyc6ICdlcnJvcicsXG4gICAgICAgICduby1vYmplY3QtY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tb2N0YWwtZXNjYXBlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXByb21pc2UtZXhlY3V0b3ItcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXByb3RvJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXJlc3RyaWN0ZWQtc3ludGF4JzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgLi4ubm9SZXN0cmljdGVkU3ludGF4UnVsZUVudHJpZXNcbiAgICAgICAgXSxcbiAgICAgICAgJ25vLXJldHVybi1hc3NpZ24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2NyaXB0LXVybCc6ICdlcnJvcicsXG4gICAgICAgICduby1zZWxmLWNvbXBhcmUnOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2VxdWVuY2VzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXNoYWRvdyc6ICdlcnJvcicsXG4gICAgICAgICduby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdGhyb3ctbGl0ZXJhbCc6ICdlcnJvcicsXG4gICAgICAgICduby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVubmVlZGVkLXRlcm5hcnknOiAnZXJyb3InLFxuICAgICAgICAnbm8tdW5yZWFjaGFibGUtbG9vcCc6ICdlcnJvcicsXG4gICAgICAgICduby11bnVzZWQtZXhwcmVzc2lvbnMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdXNlbGVzcy1hc3NpZ25tZW50JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtY2FsbCc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbXB1dGVkLWtleSc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbmNhdCc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbnN0cnVjdG9yJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtcmVuYW1lJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXZhcic6ICdlcnJvcicsXG4gICAgICAgICduby12b2lkJzogJ2Vycm9yJyxcbiAgICAgICAgJ29iamVjdC1zaG9ydGhhbmQnOiAnZXJyb3InLFxuICAgICAgICAnb3BlcmF0b3ItYXNzaWdubWVudCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItYXJyb3ctY2FsbGJhY2snOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLWNvbnN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1leHBvbmVudGlhdGlvbi1vcGVyYXRvcic6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItbmFtZWQtY2FwdHVyZS1ncm91cCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItbnVtZXJpYy1saXRlcmFscyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItb2JqZWN0LWhhcy1vd24nOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLW9iamVjdC1zcHJlYWQnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9ycyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItcmVnZXgtbGl0ZXJhbHMnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXJlc3QtcGFyYW1zJzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1zcHJlYWQnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXRlbXBsYXRlJzogJ2Vycm9yJyxcbiAgICAgICAgJ3JhZGl4JzogJ2Vycm9yJyxcbiAgICAgICAgJ3JlcXVpcmUtYXRvbWljLXVwZGF0ZXMnOiAnZXJyb3InLFxuICAgICAgICAncmVxdWlyZS1hd2FpdCc6ICdlcnJvcicsXG4gICAgICAgICdzeW1ib2wtZGVzY3JpcHRpb24nOiAnZXJyb3InLFxuICAgICAgICAndW5pY29kZS1ib20nOiAnZXJyb3InLFxuICAgICAgICAndmFycy1vbi10b3AnOiAnZXJyb3InLFxuICAgICAgICAneW9kYSc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICduby1tYWdpYy1udW1iZXJzJzogJ29mZidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG4vKipcbiAqIFRoZSBnbG9iYWwgaWdub3JlczogZXZlcnl0aGluZyBgLmdpdGlnbm9yZWAgbmFtZXMsIHBsdXMgQ2xhdWRlIENvZGUncyB3b3JrdHJlZSBmb2xkZXIuXG4gKlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsSWdub3JlQ29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFxuICAgIC4uLmdldEdpdElnbm9yZUNvbmZpZ3MoKSxcbiAgICAvKlxuICAgICAqIE9uIHRvcCBvZiBgLmdpdGlnbm9yZWAsIG5vdCBpbnN0ZWFkIG9mIGl0OiBnaXQgZXhjbHVkZXMgQ2xhdWRlIENvZGUncyB3b3JrdHJlZSBmb2xkZXIgdGhyb3VnaFxuICAgICAqIGAuZ2l0L2luZm8vZXhjbHVkZWAsIHdoaWNoIGBpbmNsdWRlSWdub3JlRmlsZWAgYWJvdmUgZG9lcyBub3QgcmVhZC4gU2VlIGBsaW50LWlnbm9yZXMudHNgLlxuICAgICAqL1xuICAgIGdsb2JhbElnbm9yZXMoW0NMQVVERV9XT1JLVFJFRVNfSUdOT1JFX0dMT0JdLCAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9jbGF1ZGUtd29ya3RyZWVzJylcbiAgKTtcbn1cblxuLyoqXG4gKiBUaGUgZ2VuZXJpYyBsYXllcnMgb2YgdGhlIHNoYXJlZCBjb25maWd1cmF0aW9uLCB3aXRob3V0IHRoZSBnbG9iYWwgaWdub3Jlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlncyhwYXJhbXM6IEdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzUGFyYW1zKTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3QgeyBjb250ZXh0IH0gPSBwYXJhbXM7XG4gIHJldHVybiBkZWZpbmVDb25maWcoXG4gICAgLi4uZ2V0RXNsaW50Q29yZUNvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0VHNlc2xpbnRDb25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldFN0eWxpc3RpY0NvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0SW1wb3J0WENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0UGVyZmVjdGlvbmlzdENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0VW5pY29ybkNvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0RXNsaW50SW1wb3J0UmVzb2x2ZXJUeXBlc2NyaXB0Q29uZmlncygpLFxuICAgIC4uLmdldEVzbGludENvbW1lbnRzQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXRJbkhvdXNlUGx1Z2luQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXROb2RlQ29tcGF0Q29uZmlncyh7IGNvbnRleHQsIG1pbmltdW1Ob2RlVmVyc2lvbjogcGFyYW1zLm1pbmltdW1Ob2RlVmVyc2lvbiB9KVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRFc2xpbnRDb21tZW50c0NvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgcmVjb21tZW5kZWRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICBleHRlbmRzOiBbY29tbWVudHNDb25maWdzLnJlY29tbWVuZGVkXSxcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBydWxlczoge1xuICAgICAgICAnQGVzbGludC1jb21tdW5pdHkvZXNsaW50LWNvbW1lbnRzL3JlcXVpcmUtZGVzY3JpcHRpb24nOiAnZXJyb3InXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0RXNsaW50SW1wb3J0UmVzb2x2ZXJUeXBlc2NyaXB0Q29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICAnaW1wb3J0LXgvcmVzb2x2ZXItbmV4dCc6IFtcbiAgICAgICAgICBjcmVhdGVUeXBlU2NyaXB0SW1wb3J0UmVzb2x2ZXIoe1xuICAgICAgICAgICAgYWx3YXlzVHJ5VHlwZXM6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0R2l0SWdub3JlQ29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICBjb25zdCBnaXRpZ25vcmVQYXRoID0gam9pbihnZXRSb290Rm9sZGVyKCkgPz8gJycsICcuZ2l0aWdub3JlJyk7XG4gIHJldHVybiBleGlzdHNTeW5jKGdpdGlnbm9yZVBhdGgpID8gW2luY2x1ZGVJZ25vcmVGaWxlKGdpdGlnbm9yZVBhdGgpXSA6IFtdO1xufVxuXG5mdW5jdGlvbiBnZXRJbXBvcnRYQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW1xuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MucmVjb21tZW5kZWQsXG4gICAgICAgIGVzbGludFBsdWdpbkltcG9ydFhGbGF0Q29uZmlncy50eXBlc2NyaXB0LFxuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MuZXJyb3JzLFxuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3Mud2FybmluZ3NcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvZXh0ZW5zaW9ucyc6IFsnZXJyb3InLCAnaWdub3JlUGFja2FnZXMnXSxcbiAgICAgICAgJ2ltcG9ydC14L2ZpcnN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L2ltcG9ydHMtZmlyc3QnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbmV3bGluZS1hZnRlci1pbXBvcnQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tYWJzb2x1dGUtcGF0aCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1hbWQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tYW5vbnltb3VzLWRlZmF1bHQtZXhwb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWNvbW1vbmpzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWN5Y2xlJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlZmF1bHQtZXhwb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlcHJlY2F0ZWQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZHVwbGljYXRlcyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1keW5hbWljLXJlcXVpcmUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZW1wdHktbmFtZWQtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWltcG9ydC1tb2R1bGUtZXhwb3J0cyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1tdXRhYmxlLWV4cG9ydHMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tbmFtZWQtZGVmYXVsdCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1uYW1lc3BhY2UnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tcmVsYXRpdmUtcGFja2FnZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tcmVzdHJpY3RlZC1wYXRocyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1zZWxmLWltcG9ydCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby11bmFzc2lnbmVkLWltcG9ydCc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICcqKi8qLmNzcycsXG4gICAgICAgICAgICAgICcqKi8qLnNhc3MnLFxuICAgICAgICAgICAgICAnKiovKi5zY3NzJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ2ltcG9ydC14L25vLXVudXNlZC1tb2R1bGVzJzogJ29mZicsXG4gICAgICAgICdpbXBvcnQteC9uby11c2VsZXNzLXBhdGgtc2VnbWVudHMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8td2VicGFjay1sb2FkZXItc3ludGF4JzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuc2NyaXB0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQSB0ZXN0IHJ1bnMgdW5kZXIgdGhlIHRlc3QgcnVubmVyIGluIE5vZGUgYW5kIGlzIG5ldmVyIGJ1bmRsZWQgaW50byBhbnl0aGluZyB0aGF0IHNoaXBzLlxuICAgICAgZmlsZXM6IGNvbnRleHQudGVzdEZpbGVzLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzJzogJ29mZidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnJvb3RDb25maWdGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdpbXBvcnQteC9uby1kZWZhdWx0LWV4cG9ydCc6ICdvZmYnXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5Ib3VzZVBsdWdpbkNvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIFtJTl9IT1VTRV9FU0xJTlRfUExVR0lOX05BTUVdOiBpbkhvdXNlRXNsaW50UGx1Z2luXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8tYXN5bmMtY2FsbGJhY2stdG8tdW5zYWZlLXJldHVybic6ICdlcnJvcicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIE1lYXN1cmVkIG92ZXIgMzIgcGx1Z2lucyBidWlsdCBvbiB0aGlzIGNvbmZpZyBiZWZvcmUgaXQgd2FzIHR1cm5lZCBvbiAoMjAyNi0wOS0yNCk6IDI5IGhhZCBubyBmaW5kaW5nLFxuICAgICAgICAgKiB0aGUgb3RoZXIgdGhyZWUgaGFkIDggYmV0d2VlbiB0aGVtLCBldmVyeSBvbmUgYSBnZW51aW5lbHkgZGVhZCBsaW5rLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8tdW5yZXNvbHZlZC1qc2RvYy1saW5rJzogJ2Vycm9yJyxcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8tdW51c2VkLXBhcmFtcy1tZW1iZXJzJzogJ2Vycm9yJyxcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcyc6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2gnOiAnZXJyb3InLFxuICAgICAgICAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9wcmVmZXItbm9vcC1hc3luYyc6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlYWRvbmx5LXBhcmFtcy1vcHRpb25zLXJlc3VsdC1tZW1iZXJzJzogJ2Vycm9yJyxcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvcmVxdWlyZS1tZXRob2QtdGVtcGxhdGUnOiAnZXJyb3InLFxuICAgICAgICAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZXF1aXJlLXN1cGVyLWNhbGwnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldE5vZGVDb21wYXRDb25maWdzKHBhcmFtczogR2V0Tm9kZUNvbXBhdENvbmZpZ3NQYXJhbXMpOiBMaW50ZXIuQ29uZmlnW10ge1xuICBjb25zdCB7IGNvbnRleHQsIG1pbmltdW1Ob2RlVmVyc2lvbiB9ID0gcGFyYW1zO1xuICBjb25zdCB2ZXJzaW9uT3B0aW9ucyA9IG1pbmltdW1Ob2RlVmVyc2lvbiA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHZlcnNpb246IG1pbmltdW1Ob2RlVmVyc2lvbiB9O1xuXG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnNvdXJjZUZpbGVzLFxuICAgICAgaWdub3JlczogW1xuICAgICAgICAuLi5jb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgICAgLy8gRGV2LW9ubHkgdG9vbGluZyAoYnVpbGQsIGxpbnQsIHZlcnNpb24pIHJ1bnMgdmlhIGBqaXRpYCBpbiB0aGUgZGV2ZWxvcGVyJ3MgTm9kZSBlbnZpcm9ubWVudCBhbmQgbmV2ZXIgc2hpcHMsIHNvIHRoZSBzaGlwcGVkIHNvdXJjZSdzIE5vZGUgZmxvb3IgZG9lcyBub3QgYXBwbHkgdG8gaXQuXG4gICAgICAgIC4uLmNvbnRleHQuc2NyaXB0RmlsZXNcbiAgICAgIF0sXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIG46IG5vZGVQbHVnaW5cbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9lcy1idWlsdGlucyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHZlcnNpb25PcHRpb25zXG4gICAgICAgIF0sXG4gICAgICAgICduL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBgQmxvYmAgYW5kIGBGaWxlYCBhcmUgRE9NIHdlYiBnbG9iYWxzIHByZXNlbnQgaW4gZXZlcnkgc3VwcG9ydGVkIGJyb3dzZXIgZW5naW5lLCBidXQgdGhlIHJ1bGUgYWxzbyBrbm93cyB0aGVtIGFzIE5vZGUncyBleHBlcmltZW50YWwgYnVpbHRpbnMgYW5kIGNhbm5vdCB0ZWxsIHdoaWNoIGlzIG1lYW50LiBJZ25vcmUgdGhlbSBnbG9iYWxseTsgZ2VudWluZWx5IG5ld2VyIEFQSXMgKGUuZy4gYEFib3J0U2lnbmFsLmFueWApIHN0YXkgZmxhZ2dlZC5cbiAgICAgICAgICAgIGlnbm9yZXM6IFtcbiAgICAgICAgICAgICAgJ0Jsb2InLFxuICAgICAgICAgICAgICAnRmlsZSdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAuLi52ZXJzaW9uT3B0aW9uc1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldFBlcmZlY3Rpb25pc3RDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFt7XG4gICAgZXh0ZW5kczogW3BlcmZlY3Rpb25pc3RDb25maWdzWydyZWNvbW1lbmRlZC1hbHBoYWJldGljYWwnXV0sXG4gICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKVxuICB9XSk7XG59XG5cbmZ1bmN0aW9uIGdldFN0eWxpc3RpY0NvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGV4dGVuZHM6IFtcbiAgICAgICAgc3R5bGlzdGljLmNvbmZpZ3MucmVjb21tZW5kZWQsXG4gICAgICAgIHN0eWxpc3RpYy5jb25maWdzLmN1c3RvbWl6ZSh7XG4gICAgICAgICAgYXJyb3dQYXJlbnM6IHRydWUsXG4gICAgICAgICAgYnJhY2VTdHlsZTogJzF0YnMnLFxuICAgICAgICAgIGNvbW1hRGFuZ2xlOiAnbmV2ZXInLFxuICAgICAgICAgIHNlbWk6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ0BzdHlsaXN0aWMvZ2VuZXJhdG9yLXN0YXItc3BhY2luZyc6ICdvZmYnLFxuICAgICAgICAnQHN0eWxpc3RpYy9pbmRlbnQnOiAnb2ZmJyxcbiAgICAgICAgJ0BzdHlsaXN0aWMvaW5kZW50LWJpbmFyeS1vcHMnOiAnb2ZmJyxcbiAgICAgICAgJ0BzdHlsaXN0aWMvanN4LW9uZS1leHByZXNzaW9uLXBlci1saW5lJzogJ29mZicsXG4gICAgICAgICdAc3R5bGlzdGljL25vLWV4dHJhLXNlbWknOiAnZXJyb3InLFxuICAgICAgICAnQHN0eWxpc3RpYy9vYmplY3QtY3VybHktbmV3bGluZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEV4cG9ydERlY2xhcmF0aW9uOiB7XG4gICAgICAgICAgICAgIG1pblByb3BlcnRpZXM6IDIsXG4gICAgICAgICAgICAgIG11bHRpbGluZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEltcG9ydERlY2xhcmF0aW9uOiB7XG4gICAgICAgICAgICAgIG1pblByb3BlcnRpZXM6IDIsXG4gICAgICAgICAgICAgIG11bHRpbGluZTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ0BzdHlsaXN0aWMvb3BlcmF0b3ItbGluZWJyZWFrJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgJ2JlZm9yZScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgICAgICAgICc9JzogJ2FmdGVyJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ0BzdHlsaXN0aWMvcXVvdGVzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgJ3NpbmdsZScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWxsb3dUZW1wbGF0ZUxpdGVyYWxzOiAnbmV2ZXInXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHNlc2xpbnRDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBleHRlbmRzOiBbXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgX2RlZmF1bHRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICAgIC4uLnRzZXNsaW50LmNvbmZpZ3Muc3RyaWN0VHlwZUNoZWNrZWQsXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgX2RlZmF1bHRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICAgIC4uLnRzZXNsaW50LmNvbmZpZ3Muc3R5bGlzdGljVHlwZUNoZWNrZWRcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgbGFuZ3VhZ2VPcHRpb25zOiB7XG4gICAgICAgIHBhcnNlck9wdGlvbnM6IHtcbiAgICAgICAgICBlY21hRmVhdHVyZXM6IHtcbiAgICAgICAgICAgIGpzeDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvamVjdFNlcnZpY2U6IHRydWUsXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHRzY29uZmlnUm9vdERpcmAgaXMgYSBgdHlwZXNjcmlwdC1lc2xpbnRgIHBhcnNlciBvcHRpb24uXG4gICAgICAgICAgdHNjb25maWdSb290RGlyOiBnZXRSb290Rm9sZGVyKCkgPz8gJydcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUnOiAnZXJyb3InLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1lbWJlci1hY2Nlc3NpYmlsaXR5JzogJ2Vycm9yJyxcbiAgICAgICAgLy8gVGhlIHJ1bGUncyBvd24gYHByb3BlcnR5YCBkZWZhdWx0LCBzcGVsbGVkIGFzIGEgYmFyZSBzZXZlcml0eSBzbyBpdCBzdGF5cyB0aGUgcnVsZSdzIGRlZmF1bHQgcmF0aGVyIHRoYW4gYSBjb3B5IG9mIGl0LlxuICAgICAgICAvLyBEbyBOT1QgcGFzcyBgJ21ldGhvZCdgIGZvciB0aWRpbmVzczogdGhlIG1ldGhvZCBmb3JtIGtlZXBzIHBhcmFtZXRlcnMgYml2YXJpYW50LCBkcm9wcyBgcmVhZG9ubHlgICh0aGUgcnVsZSdzIG93biBmaXhlclxuICAgICAgICAvLyBtZXNzYWdlIHNheXMgc28pLCBhbmQgbWFrZXMgYEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZGAgZmlyZSBvbiBldmVyeSBmb3J3YXJkZWQgYmFnIG1lbWJlciwgd2hpY2ggaXMgd2hhdCB0aGVcbiAgICAgICAgLy8gYHRoaXM6IHZvaWRgIGJvaWxlcnBsYXRlIHVzZWQgdG8gcGF5IGZvci4gRG8gTk9UIGRlbGV0ZSB0aGUgbGluZSBlaXRoZXIgLSB0aGUgcnVsZSBpcyBpbiBubyBwcmVzZXQsIHNvIHRoYXQgdHVybnMgaXQgb2ZmLlxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L21ldGhvZC1zaWduYXR1cmUtc3R5bGUnOiAnZXJyb3InLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzJzogWydlcnJvcicsIHtcbiAgICAgICAgICBjaGVja1RoZW5hYmxlczogdHJ1ZVxuICAgICAgICB9XSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9uby1pbnZhbGlkLXZvaWQtdHlwZSc6IFsnZXJyb3InLCB7XG4gICAgICAgICAgYWxsb3dBc1RoaXNQYXJhbWV0ZXI6IHRydWVcbiAgICAgICAgfV0sXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcyc6IFsnZXJyb3InLCB7XG4gICAgICAgICAgYWxsb3dlZE5hbWVzOiBbXG4gICAgICAgICAgICAndGhhdCdcbiAgICAgICAgICBdXG4gICAgICAgIH1dLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYGFyZ3NgIGlzIGFuIEVTTGludCBydWxlIG9wdGlvbiBuYW1lLlxuICAgICAgICAgICAgYXJnczogJ2FsbCcsXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBgYXJnc0lnbm9yZVBhdHRlcm5gIGlzIGEgYHR5cGVzY3JpcHQtZXNsaW50YCBydWxlIG9wdGlvbiBuYW1lLlxuICAgICAgICAgICAgYXJnc0lnbm9yZVBhdHRlcm46ICdeXycsXG4gICAgICAgICAgICBjYXVnaHRFcnJvcnM6ICdhbGwnLFxuICAgICAgICAgICAgY2F1Z2h0RXJyb3JzSWdub3JlUGF0dGVybjogJ15fJyxcbiAgICAgICAgICAgIGRlc3RydWN0dXJlZEFycmF5SWdub3JlUGF0dGVybjogJ15fJyxcbiAgICAgICAgICAgIGlnbm9yZVJlc3RTaWJsaW5nczogdHJ1ZSxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIGB2YXJzSWdub3JlUGF0dGVybmAgaXMgYSBgdHlwZXNjcmlwdC1lc2xpbnRgIHJ1bGUgb3B0aW9uIG5hbWUuXG4gICAgICAgICAgICB2YXJzSWdub3JlUGF0dGVybjogJ15fJ1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItcmVhZG9ubHknOiAnZXJyb3InXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBmaWxlczogY29udGV4dC50ZXN0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L2RvdC1ub3RhdGlvbic6IFsnZXJyb3InLCB7XG4gICAgICAgICAgYWxsb3dQcml2YXRlQ2xhc3NQcm9wZXJ0eUFjY2VzczogdHJ1ZSxcbiAgICAgICAgICBhbGxvd1Byb3RlY3RlZENsYXNzUHJvcGVydHlBY2Nlc3M6IHRydWVcbiAgICAgICAgfV0sXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgcmVhY3Q6IHtcbiAgICAgICAgICB2ZXJzaW9uOiAnZGV0ZWN0J1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0VW5pY29ybkNvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGV4dGVuZHM6IFt1bmljb3JuLmNvbmZpZ3MucmVjb21tZW5kZWRdLFxuICAgICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZXNlIGVudHJpZXMgYXJlIG5vdCBhYmJyZXZpYXRpb25zIHRvIGJlIGV4cGFuZGVkIOKAlCB0aGV5IGFyZSBlc3RhYmxpc2hlZCB2b2NhYnVsYXJ5IGhlcmUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEJyYW5kOiBgZGV2YCwgYGxpYmAsIGB1dGlsYC9gdXRpbHNgIHNwZWxsIHRoZSBwcm9kdWN0J3Mgb3duIG5hbWUuIExlZnQgb24sIHRoZSBydWxlIHJld3JpdGVzXG4gICAgICAgICAqIGBSZXBvUGF0aHNgIHRvIGBPYnNpZGlhbkRldmVsb3BtZW50VXRpbGl0aWVzUmVwb1BhdGhzYCBhbmQgYGdldExpYkRlYnVnZ2VyYCB0b1xuICAgICAgICAgKiBgZ2V0TGlicmFyeURlYnVnZ2VyYCwgcmVuYW1pbmcgZXhwb3J0ZWQgQVBJIGFmdGVyIHRoZSBwYWNrYWdlIGl0IGJlbG9uZ3MgdG8uXG4gICAgICAgICAqXG4gICAgICAgICAqIENvbnZlbnRpb246IGBwYXJhbXNgIGlzIHRoZSBwYXJhbWV0ZXItYmFnIGNvbnZlbnRpb24sIGVuZm9yY2VkIGJ5XG4gICAgICAgICAqIGB0eXBlc2NyaXB0LWRldi10b29sa2l0L3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2hgLCB3aGljaCByZXF1aXJlcyBiYWcgdHlwZXMgdG8gYmUgbmFtZWRcbiAgICAgICAgICogYDxPd25lcj5QYXJhbXNgIC8gYDxPd25lcj5PcHRpb25zYC4gRXhwYW5kaW5nIGl0IHRvIGBQYXJhbWV0ZXJzYCB3b3VsZCBwdXQgdGhlIHR3byBydWxlcyBpbiBkaXJlY3RcbiAgICAgICAgICogY29udHJhZGljdGlvbiBhbmQgYnJlYWsgMzAwKyBleHBvcnRlZCB0eXBlIG5hbWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBSZXNlcnZlZCB3b3JkczogYSBiYXJlIGBhcmdzYCwgYGZuYCwgYHN0cmAsIGBtb2RgIG9yIGBldnRgIGV4cGFuZHMgdG8gYW4gaWRlbnRpZmllciB0aGF0IGlzIGFscmVhZHlcbiAgICAgICAgICogdGFrZW4sIHNvIHRoZSBydWxlIHN1Z2dlc3RzIGAkYXJndW1lbnRzYCwgYCRmdW5jdGlvbmAsIGFuZCBzbyBvbi4gU3BlbGwgdGhvc2UgYCRhcmd1bWVudHNgIC9cbiAgICAgICAgICogYCRmdW5jdGlvbmAgaW5zdGVhZCDigJQgYSBgJGAgcHJlZml4IHJlYWRzIGJldHRlciB0aGFuIGEgdHJhaWxpbmcgdW5kZXJzY29yZS4gVGhpcyBpcyBkZWxpYmVyYXRlbHkgTk9UXG4gICAgICAgICAqIGNvbmZpZ3VyZWQgYXMgYSBjdXN0b20gcmVwbGFjZW1lbnQ6IHVuaWNvcm4gc3Vic3RpdHV0ZXMgYXQgdGhlIHdvcmQgbGV2ZWwgaW5zaWRlIGNvbXBvdW5kIG5hbWVzLCBzb1xuICAgICAgICAgKiByZWRpcmVjdGluZyB0aGUgd2hvbGUgZW50cnkgdHVybnMgYGFzeW5jRm5gIGludG8gYGFzeW5jJGZ1bmN0aW9uYC4gQ29tcG91bmRzIHdhbnQgdGhlIHBsYWluIGV4cGFuc2lvblxuICAgICAgICAgKiAoYGFzeW5jRnVuY3Rpb25gKTsgb25seSB0aGUgYmFyZSwgZ2VudWluZWx5LWNvbGxpZGluZyBpZGVudGlmaWVycyB0YWtlIHRoZSBgJGAgZm9ybS5cbiAgICAgICAgICpcbiAgICAgICAgICogRG9tYWluIHdvcmRzOiBgZG9jYC9gZG9jc2AsIGBlbnZgLCBgZGlzdGAgYW5kIGBzcmNgIGFyZSB0aGUgY2xlYXJlciBzcGVsbGluZyBpbiB0aGlzIGNvZGViYXNlLlxuICAgICAgICAgKiBFeHBhbmRpbmcgYGRvY2AgYWxzbyBwaWNrcyB0aGUgd3Jvbmcgd29yZCDigJQgdGhlIGBhcGktZG9jLSpgIG1vZHVsZXMgZ2VuZXJhdGUgQVBJICpkb2N1bWVudGF0aW9uKiwgbm90XG4gICAgICAgICAqIGRvY3VtZW50cy4gYHNyY2AgYWRkaXRpb25hbGx5IGNvcnJ1cHRzIGNvZGU6IHRoZSBmaXhlciByZW5hbWVzIHRoZSBgU3JjYCBtZW1iZXIgb2YgdGhlIGV4cG9ydGVkXG4gICAgICAgICAqIGBPYnNpZGlhblBsdWdpblJlcG9QYXRoc2AgLyBgUmVwb1BhdGhzYCBlbnVtcyB3aGlsZSBsZWF2aW5nIGV2ZXJ5IGAuU3JjYCByZWZlcmVuY2VcbiAgICAgICAgICogZGFuZ2xpbmcsIGJlY2F1c2UgYGNoZWNrUHJvcGVydGllc2AgZXhlbXB0cyBwcm9wZXJ0eSBhY2Nlc3NlcyBidXQgbm90IHRoZSBkZWNsYXJhdGlvbnMgdGhleSBwb2ludCBhdC5cbiAgICAgICAgICpcbiAgICAgICAgICogRGlzYWJsaW5nIHRoZSByZXBsYWNlbWVudCBlbnRyaWVzIHByb3RlY3RzIHRoZXNlIHBlcm1hbmVudGx5OyBhbiBgYWxsb3dMaXN0YCB3b3VsZCBpbnN0ZWFkIG5lZWQgZXZlcnlcbiAgICAgICAgICogYWZmZWN0ZWQgaWRlbnRpZmllciBlbnVtZXJhdGVkIGJ5IGhhbmQgYW5kIHJlLWVudW1lcmF0ZWQgZm9yIGV2ZXJ5IG5ldyBvbmUuXG4gICAgICAgICAqXG4gICAgICAgICAqIE5PVEU6IHRoaXMgcnVsZSdzIGF1dG9maXggaXMgTk9UIHJlZmVyZW5jZS1hd2FyZSBmb3IgZGVjbGFyYXRpb25zIHRoYXQgcGFydGljaXBhdGUgaW4gYSBjb250cmFjdCDigJRcbiAgICAgICAgICogZW51bSBtZW1iZXJzLCBpbnRlcmZhY2UgbWVtYmVycywgYW5kIFR5cGVTY3JpcHQgcGFyYW1ldGVyIHByb3BlcnRpZXMgKGBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5XG4gICAgICAgICAqIGVsOiBIVE1MRWxlbWVudClgKSBhcmUgcmVuYW1lZCB3aGlsZSBgdGhpcy5lbGAgYW5kIGBFbnVtLk1lbWJlcmAgcmVmZXJlbmNlcyBhcmUgbGVmdCBkYW5nbGluZy4gQXBwbHlcbiAgICAgICAgICogaXRzIHJlcG9ydHMgYnkgaGFuZDsgbmV2ZXIgcnVuIGAtLWZpeGAgb3ZlciBpdC5cbiAgICAgICAgICovXG4gICAgICAgIC8qXG4gICAgICAgICAqIEEgZ29vZCBydWxlLCBidXQgaXRzIGRlZmF1bHQgcHJlZml4ZXMgZm9yY2UgdW5ncmFtbWF0aWNhbCBuYW1lczogYG1lbWJlclBhZ2VFeGlzdHNgIHdvdWxkIGJlY29tZVxuICAgICAgICAgKiBgaXNNZW1iZXJQYWdlRXhpc3RzYCByYXRoZXIgdGhhbiBgZG9lc01lbWJlclBhZ2VFeGlzdGAuIFRoZXNlIGVudHJpZXMgRVhURU5EIHRoZSBkZWZhdWx0cyAoYGlzYCxcbiAgICAgICAgICogYGhhc2AsIGBjYW5gLCBgc2hvdWxkYCwgLi4uKSByYXRoZXIgdGhhbiByZXBsYWNpbmcgdGhlbSwgc28gYSBib29sZWFuIHdpdGggbm8gYm9vbGVhbi1yZWFkaW5nIHByZWZpeFxuICAgICAgICAgKiBhdCBhbGwgaXMgc3RpbGwgcmVqZWN0ZWQgLS0gdGhlIHJ1bGUganVzdCBzdG9wcyBpbnNpc3RpbmcgdGhlIHByZWZpeCBjb21lIGZyb20gYSBzaG9ydGVyIGxpc3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBsaXN0IGlzIGJpZGlyZWN0aW9uYWw6IGFkZGluZyBhIHByZWZpeCBhbHNvIGFzc2VydHMgdGhhdCBldmVyeXRoaW5nIG5hbWVkIHdpdGggaXQgSVMgYSBib29sZWFuLlxuICAgICAgICAgKiBgY2hlY2tgIGVhcm5zIGl0cyBwbGFjZSBvbiBib3RoIGNvdW50cywgc2luY2UgdGhlIGhhbmRmdWwgb2Ygbm9uLWJvb2xlYW4gYGNoZWNrKmAgbmFtZXMgaXQgc3VyZmFjZWRcbiAgICAgICAgICogd2VyZSBnZW51aW5lbHkgbWlzLW5hbWVkICh2b2lkIGZ1bmN0aW9ucyB0aGF0IHRocm93LCBhIHByb2JlIHJldHVybmluZyBhbiBIVFRQIHN0YXR1cykuIGB0ZXN0YCB3YXNcbiAgICAgICAgICogbWVhc3VyZWQgYW5kIHJlamVjdGVkOiBpdCB3b3VsZCB2YWxpZGF0ZSBmaXZlIGB0ZXN0KmAgbGluayBwcmVkaWNhdGVzIHRoYXQgcmVhZCBiZXR0ZXIgYXMgYGlzKmBcbiAgICAgICAgICogYW55d2F5LCBhdCB0aGUgY29zdCBvZiByZW5hbWluZyBTQ1JFQU1JTkdfQ0FTRSB0ZXN0IGZpeHR1cmVzIGFuZCB0aGUgYHRlc3RDb3ZlcmFnZWAvYHRlc3RXYXRjaGBcbiAgICAgICAgICogcnVubmVycyB0aGF0IGRlbGliZXJhdGVseSBtaXJyb3IgdGhlIGB0ZXN0OmNvdmVyYWdlYC9gdGVzdDp3YXRjaGAgbnBtIHNjcmlwdHMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9jb25zaXN0ZW50LWJvb2xlYW4tbmFtZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByZWZpeGVzOiB7XG4gICAgICAgICAgICAgIGFsbG93czogdHJ1ZSxcbiAgICAgICAgICAgICAgY2hlY2s6IHRydWUsXG4gICAgICAgICAgICAgIGNvbnRhaW5zOiB0cnVlLFxuICAgICAgICAgICAgICBkb2VzOiB0cnVlLFxuICAgICAgICAgICAgICBpbmNsdWRlczogdHJ1ZSxcbiAgICAgICAgICAgICAgbXVzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgbmVlZHM6IHRydWUsXG4gICAgICAgICAgICAgIHN1cHBvcnRzOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvKlxuICAgICAgICAgKiBVbnNhdGlzZmlhYmxlIGFsb25nc2lkZSBgcGVyZmVjdGlvbmlzdC9zb3J0LWNsYXNzZXNgLCB3aGljaCBpcyBjb25maWd1cmVkIGhlcmUgYXMgYSBwbGFpblxuICAgICAgICAgKiBhbHBoYWJldGljYWwgc29ydC4gVGhpcyBydWxlIHdhbnRzIGEgY2F0ZWdvcnkgb3JkZXIgKGFsbCBmaWVsZHMsIHRoZW4gdGhlIGNvbnN0cnVjdG9yLCB0aGVuIGFsbFxuICAgICAgICAgKiBtZXRob2RzKSwgc28gdGhlIGV4dHJlbWVseSBjb21tb24gYHByaXZhdGUgX3hgIGZpZWxkIHBhaXJlZCB3aXRoIGEgYHB1YmxpYyBnZXQgeCgpYCBhY2Nlc3NvciBpc1xuICAgICAgICAgKiByZWplY3RlZCBieSB3aGljaGV2ZXIgcnVsZSBsb3NlczogYWxwaGFiZXRpY2FsbHkgdGhlIGFjY2Vzc29yIHByZWNlZGVzIHRoZSBmaWVsZCwgYnkgY2F0ZWdvcnkgdGhlXG4gICAgICAgICAqIGZpZWxkIHByZWNlZGVzIHRoZSBhY2Nlc3Nvci4gVW5saWtlIGBwcmVmZXItZ2xvYmFsLXRoaXNgIHRoZSBjbGFzaCBwcm9kdWNlcyBub1xuICAgICAgICAgKiBgRVNMaW50Q2lyY3VsYXJGaXhlc1dhcm5pbmdgLCBvbmx5IGJlY2F1c2UgdGhpcyBydWxlIHNoaXBzIG5vIGZpeGVyIC0tIGJvdGggcnVsZXMgYXJlIGBlcnJvcmAsIHNvIG5vXG4gICAgICAgICAqIGFycmFuZ2VtZW50IG9mIG1lbWJlcnMgc2F0aXNmaWVzIHRoZW0gYm90aC4gVGhlIGFscGhhYmV0aWNhbCBzb3J0IGlzIHRoZSBvbmUgYWxyZWFkeSByb2xsZWQgb3V0XG4gICAgICAgICAqIGFjcm9zcyB0aGUgcGx1Z2lucyBjb25zdW1pbmcgdGhpcyBjb25maWcsIHNvIGl0IGtlZXBzIHByZWNlZGVuY2UuIFJlLWVuYWJsaW5nIHRoaXMgcnVsZSB3b3VsZCBtZWFuXG4gICAgICAgICAqIGdpdmluZyBgcGVyZmVjdGlvbmlzdC9zb3J0LWNsYXNzZXNgIGEgbWF0Y2hpbmcgYGdyb3Vwc2Agb3B0aW9uIGFuZCByZW9yZGVyaW5nIGV2ZXJ5IGNsYXNzLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vY29uc2lzdGVudC1jbGFzcy1tZW1iZXItb3JkZXInOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogRXZlcnkgcmVwb3J0IGlzIGBuZXcgRXJyb3IoKS5zdGFja2AsIHdoaWNoIGNhcHR1cmVzIGEgc3RhY2sgdHJhY2UgYW5kIG5ldmVyIHN1cmZhY2VzIGl0cyBtZXNzYWdlLlxuICAgICAgICAgKiBUaGUgcnVsZSBjYW5ub3QgdGVsbCB0aGF0IGZyb20gYW4gZXJyb3IgdGhhdCBpcyBhY3R1YWxseSB0aHJvd24gYXQgYSB1c2VyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBObyBiYXJlIGBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzKWAgaXMgbGVmdCBmb3IgaXQgdG8gY2F0Y2g6IGV2ZXJ5IHNpdGUgbm93IGJ1aWxkcyBpdHMgYWdncmVnYXRlXG4gICAgICAgICAqIHRocm91Z2ggYGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yYCwgd2hpY2ggZ2l2ZXMgaXQgYSBtZXNzYWdlIHRoYXQgbmFtZXMgdGhlIGZhaWx1cmUuIEFuIGVtcHR5IG9uZSBpc1xuICAgICAgICAgKiBsb3NzeSBpbiBhIHdheSB0aGF0IG9ubHkgc2hvd3MgdXAgb3V0c2lkZSB0aGlzIGxpYnJhcnkg4oCUIGBlcnJvclRvU3RyaW5nYCB3YWxrcyBgZXJyb3JzYCBhbmQgcHJpbnRzXG4gICAgICAgICAqIHRoZSB3aG9sZSB0cmVlLCB3aGlsZSBldmVyeXRoaW5nIHJlYWRpbmcgYG1lc3NhZ2VgIHNlZXMgYW4gZW1wdHkgc2VudGVuY2UuIFRoZSBoZWxwZXIgbGl2ZXMgaW4gaXRzXG4gICAgICAgICAqIG93biBsZWFmIGBhZ2dyZWdhdGUtZXJyb3IudHNgIHJhdGhlciB0aGFuIGluIGBlcnJvci50c2AgcHJlY2lzZWx5IHNvIHRoYXQgYGRpc3Bvc2FibGUudHNgIGNhbiByZWFjaFxuICAgICAgICAgKiBpdCwgd2hpY2ggaXQgY291bGQgbm90IHdoaWxlIHRoZSBvbmx5IGNvcHkgc2F0IGluIGEgbW9kdWxlIGltcG9ydGluZyBpdCBiYWNrLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vZXJyb3ItbWVzc2FnZSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgZGVmYXVsdCBzdHlsZSBmb3IgYG5vZGU6cGF0aGAgaXMgYSBkZWZhdWx0IGltcG9ydCwgYnV0IHRoaXMgY29kZWJhc2UgaW1wb3J0cyBpdHMgbWVtYmVycyBieSBuYW1lXG4gICAgICAgICAqIHRocm91Z2hvdXQsIGNvbnNpc3RlbnRseSB3aXRoIGV2ZXJ5IG90aGVyIGBub2RlOmAgbW9kdWxlIGl0IHVzZXMuIENvbmZpZ3VyZSB0aGUgcnVsZSB0byBlbmZvcmNlIHRoZVxuICAgICAgICAgKiBzdHlsZSBhY3R1YWxseSBpbiB1c2UgcmF0aGVyIHRoYW4gYW5ub3RhdGUgMTcgc2l0ZXMgdGhhdCBhcmUgbm90IGdvaW5nIHRvIGNoYW5nZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL2ltcG9ydC1zdHlsZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgICAvLyBLZXllZCBieSB0aGUgVU5QUkVGSVhFRCBtb2R1bGUgbmFtZTogdGhlIHJ1bGUncyBvd24gdGFibGUgdXNlcyBgcGF0aGAsIHNvIGEgYG5vZGU6cGF0aGAga2V5IG5ldmVyIG1hdGNoZXMuXG4gICAgICAgICAgICAgIHBhdGg6IHtcbiAgICAgICAgICAgICAgICBuYW1lZDogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcnVsZSBjb3VudHMgY29uc3RydWN0b3IgY2FsbHMgYW5kIGNvdW50cyB0aHJvdWdoIGFycmF5IGFuZCBvYmplY3QgbGl0ZXJhbHMsIHNvIGl0cyBkZWZhdWx0IG9mIDNcbiAgICAgICAgICogcmVwb3J0cyBvcmRpbmFyeSBjb21wb3NpdGlvbjogYFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignYm9vbScpKWAgaW5zaWRlIGFuIGFzc2VydGlvbiwgYSB0ZXN0IGZpeHR1cmVcbiAgICAgICAgICogYnVpbHQgYXMgYGNyZWF0ZVR5cGVJbmZvKHsgbWV0aG9kczogW2NyZWF0ZU1lbWJlckluZm8oeyAuLi4gfSldIH0pYCwgYHRoaXMuYWRkQ2hpbGQobmV3IEModGhpcy5hcHApKWBcbiAgICAgICAgICogaW5zaWRlIGEgcGFyYW1zIGJhZy4gUmFpc2luZyB0aGUgbGltaXQgYnkgb25lIGNsZWFycyBldmVyeSByZXBvcnQgaGVyZSB3aGlsZSBzdGlsbCBjYXRjaGluZyB0aGVcbiAgICAgICAgICogZ2VudWluZWx5IHVucmVhZGFibGUgbmVzdGluZyB0aGUgcnVsZSBpcyBmb3IuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9tYXgtbmVzdGVkLWNhbGxzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWF4OiA0XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAndW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgKiBQcm9wZXJ0eSBhbmQgbWVtYmVyIG5hbWVzIGFyZSBjaGVja2VkIHRvbywgc28gYW4gYWJicmV2aWF0aW9uIGNhbm5vdCBzdXJ2aXZlIGJ5IGxpdmluZyBvbiBhblxuICAgICAgICAgICAgICogb2JqZWN0IHJhdGhlciB0aGFuIGluIGEgdmFyaWFibGUuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogVGhlIHJ1bGUgaXMgcHVyZWx5IHN5bnRhY3RpYzogaXQgY2Fubm90IHRlbGwgYSBtZW1iZXIgd2UgZGVjbGFyZSBmcm9tIG9uZSBiZWxvbmdpbmcgdG8gYVxuICAgICAgICAgICAgICogZGVwZW5kZW5jeSwgYW5kIGl0IG9mZmVycyBubyBhdXRvZml4IGZvciBwcm9wZXJ0aWVzIChtZWFzdXJlZDogNjgxIGhpdHMsIDAgd2l0aCBhIGZpeGVyKS4gU2l0ZXNcbiAgICAgICAgICAgICAqIG5hbWluZyBhIGZvcmVpZ24gbWVtYmVyIC0tIGBEb21FbGVtZW50SW5mby5hdHRyYCwgYEV2YWxJbk9ic2lkaWFuUGFyYW1zLmZuYCwgYW5kIHRoZSBsaWtlIC0tIGFyZVxuICAgICAgICAgICAgICogdGhlcmVmb3JlIGltcG9zc2libGUgdG8gc2F0aXNmeSBhbmQgY2FycnkgYW4gaW5saW5lIGRpc2FibGUsIHNvIGV2ZXJ5dGhpbmcgc3RpbGwgcmVwb3J0ZWQgaXMgb3Vyc1xuICAgICAgICAgICAgICogdG8gcmVuYW1lLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFdoZW4gcmVuYW1pbmcgdGhlIHJlc3QsIG5vdGUgdGhhdCBgdHNjYCBhbG9uZSBpcyBOT1QgYSBzdWZmaWNpZW50IGdhdGU6IG9iamVjdC1saXRlcmFsIGtleXMgaW5cbiAgICAgICAgICAgICAqIGxvb3NlbHkgdHlwZWQgcG9zaXRpb25zIChgZXhwZWN0LmFycmF5Q29udGFpbmluZyhbeyBiYXRjaGVkQXJndW1lbnRzOiAuLi4gfV0pYCkgYXJlIG5vdCBjb250ZXh0dWFsbHlcbiAgICAgICAgICAgICAqIHR5cGVkLCBzbyBhIHJlbmFtZSBsZWF2ZXMgdGhlbSBiZWhpbmQgYW5kIGJyZWFrcyB0aGUgc3VpdGUgd2hlcmUgdGhlIHR5cGUgY2hlY2tlciBzZWVzIG5vdGhpbmcuXG4gICAgICAgICAgICAgKiBSZW5hbWUgaW4gc21hbGwgYmF0Y2hlcyB3aXRoIHRoZSBmdWxsIHRlc3QgcnVuIGluIHRoZSBsb29wLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFRoZSBkaXNhYmxlZCByZXBsYWNlbWVudHMgYmVsb3cgYXJlIGVzdGFibGlzaGVkIHZvY2FidWxhcnkgcmF0aGVyIHRoYW4gYWJicmV2aWF0aW9ucyB0byBiZVxuICAgICAgICAgICAgICogZXhwYW5kZWQuIGBlbGAgaXMgZXhlbXB0IGJlY2F1c2UgT2JzaWRpYW4gbmFtZXMgZXZlcnkgZWxlbWVudCBtZW1iZXIgdGhhdCB3YXkgLS0gYGNvbnRhaW5lckVsYCxcbiAgICAgICAgICAgICAqIGBjb250ZW50RWxgLCBgaW5wdXRFbGAsIGBzZWxlY3RFbGAgLS0gc28gZXhwYW5kaW5nIG91cnMgdG8gYCpFbGVtZW50YCB3b3VsZCBsZWF2ZSBvdXIgY29tcG9uZW50c1xuICAgICAgICAgICAgICogcmVhZGluZyBpbmNvbnNpc3RlbnRseSBiZXNpZGUgdGhlIE9ic2lkaWFuIG9uZXMgdGhleSBzaXQgbmV4dCB0by4gRGlzYWJsaW5nIHRoZSByZXBsYWNlbWVudCBhbHNvXG4gICAgICAgICAgICAgKiBjb3ZlcnMgY29tcG91bmQgbmFtZXMsIHdoaWNoIGlzIDcyIHNpdGVzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGVhY2ggbmVlZCBhbiBpbmxpbmUgZGlzYWJsZS5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBgcmVmYCBpcyBleGVtcHQgZm9yIHRoZSBzYW1lIHJlYXNvbjogYEFzeW5jRXZlbnRSZWZgIGlzIHRoZSBhc3luYyBjb3VudGVycGFydCBvZiBPYnNpZGlhbidzXG4gICAgICAgICAgICAgKiBgRXZlbnRSZWZgLCBoYW5kZWQgdG8gdGhlIHNhbWUgYG9mZnJlZmAgLyBgcmVnaXN0ZXJFdmVudGAgc2hhcGVzLCBzbyB0aGUgdHdvIG5hbWVzIGhhdmUgdG8gbWF0Y2hcbiAgICAgICAgICAgICAqIHRvIHJlYWQgYXMgYSBwYWlyLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjaGVja1Byb3BlcnRpZXM6IHRydWUsXG4gICAgICAgICAgICByZXBsYWNlbWVudHM6IHtcbiAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICogYGF0dHJgIC8gYGF0dHJzYCBhcmUgT2JzaWRpYW4ncyBvd246IGBjcmVhdGVFbCgnYScsIHsgYXR0cjogeyAuLi4gfSB9KWAgdGFrZXMgdGhlbSBieSB0aG9zZVxuICAgICAgICAgICAgICAgKiBuYW1lcyBvbiBgRG9tRWxlbWVudEluZm9gLCBzbyBvdXJzIGhhdmUgdG8gbWF0Y2ggdG8gYmUgcGFzc2VkIHRocm91Z2guIGBwcm9wc2AgaXMgdGhlXG4gICAgICAgICAgICAgICAqIHVuaXZlcnNhbCBjb21wb25lbnQgdm9jYWJ1bGFyeSwgZXhlbXB0IGZvciB0aGUgc2FtZSByZWFzb24gYHBhcmFtc2AgaXMuXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBhdHRyOiBmYWxzZSxcbiAgICAgICAgICAgICAgYXR0cnM6IGZhbHNlLFxuICAgICAgICAgICAgICBkZXY6IGZhbHNlLFxuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgKiBFdmVyeSBgZGlyYCBoZXJlIGlzIGEgZmlsZXN5c3RlbSBkaXJlY3RvcnksIG5ldmVyIGEgZGlyZWN0aW9uLCBzbyB0aGUgcnVsZSBpcyBuYXJyb3dlZCB0byB0aGVcbiAgICAgICAgICAgICAgICogb25lIGV4cGFuc2lvbiByYXRoZXIgdGhhbiBsZWZ0IG9mZmVyaW5nIGEgY2hvaWNlIGl0IGNhbm5vdCBtYWtlLlxuICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gVGhpcyBpcyB0aGUgcnVsZSdzIG93biByZXBsYWNlbWVudCBrZXksIHdoaWNoIGhhcyB0byBiZSBzcGVsbGVkIHRoZSB3YXkgdGhlIHJ1bGUgcmVhZHMgaXQuXG4gICAgICAgICAgICAgIGRpcjoge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGRpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICBkb2M6IGZhbHNlLFxuICAgICAgICAgICAgICBkb2NzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZWw6IGZhbHNlLFxuICAgICAgICAgICAgICBlbnY6IGZhbHNlLFxuICAgICAgICAgICAgICBsaWI6IGZhbHNlLFxuICAgICAgICAgICAgICBwYXJhbXM6IGZhbHNlLFxuICAgICAgICAgICAgICBwcm9wczogZmFsc2UsXG4gICAgICAgICAgICAgIHJlZjogZmFsc2UsXG4gICAgICAgICAgICAgIHJlZnM6IGZhbHNlLFxuICAgICAgICAgICAgICBzcmM6IGZhbHNlLFxuICAgICAgICAgICAgICB1dGlsOiBmYWxzZSxcbiAgICAgICAgICAgICAgdXRpbHM6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgbmV4dCBzaXggcnVsZXMgYWxsIHN1Z2dlc3QgYW4gQVBJIG5ld2VyIHRoYW4gdGhpcyBwcm9qZWN0J3MgYGxpYmAgKGBFUzIwMjJgKSwgc28gZm9sbG93aW5nIGFueSBvZlxuICAgICAgICAgKiB0aGVtIGZhaWxzIHRvIGNvbXBpbGUuIFRoZSBPYnNpZGlhbiBwbHVnaW4gbGF5ZXIgdGFrZXMgdGhlIGZsb29yIGZyb20gdGhlIG9sZGVzdCBPYnNpZGlhbiBpbnN0YWxsZXIgdGhhdFxuICAgICAgICAgKiBjYW4gc3RpbGwgcnVuIGN1cnJlbnQgT2JzaWRpYW4sIHdoaWNoIHJlY29yZHMgYGVjbWFTY3JpcHRWZXJzaW9uOiBcIkVTMjAyMlwiYC4gRWFjaCBpcyBvZmYgYXQgdGhlIGNvbmZpZ1xuICAgICAgICAgKiBsZXZlbCByYXRoZXIgdGhhbiBhbm5vdGF0ZWQgcGVyIHNpdGUsIGJlY2F1c2Ugbm9uZSBjYW4gZXZlciBiZSBzYXRpc2ZpZWQgd2hpbGUgdGhhdCBmbG9vciBob2xkcy4gUmV2aXNpdFxuICAgICAgICAgKiB0aGVtIHRvZ2V0aGVyIGlmIHRoZSBmbG9vciBtb3Zlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogYEFycmF5I3RvUmV2ZXJzZWRgIGFuZCBgQXJyYXkjdG9Tb3J0ZWRgIGFyZSBFUzIwMjMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1hcnJheS1yZXZlcnNlJzogJ29mZicsXG4gICAgICAgICd1bmljb3JuL25vLWFycmF5LXNvcnQnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogYGNvbnRpbnVlYCBpbnNpZGUgYSBuZXN0ZWQgbG9vcCBpcyBvcmRpbmFyeSwgcmVhZGFibGUgY29udHJvbCBmbG93IGhlcmUuIFRoZSBydWxlJ3MgcmVtZWR5IGlzIHRvXG4gICAgICAgICAqIGV4dHJhY3QgZXZlcnkgc3VjaCBsb29wIGludG8gaXRzIG93biBmdW5jdGlvbiwgd2hpY2ggc3ByZWFkcyBvbmUgY29oZXJlbnQgdHJhdmVyc2FsIGFjcm9zcyB0d29cbiAgICAgICAgICogZGVjbGFyYXRpb25zIHdpdGhvdXQgbWFraW5nIGFueXRoaW5nIGNsZWFyZXIuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1icmVhay1pbi1uZXN0ZWQtbG9vcCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcnVsZSBjYW5ub3Qgc2VlIHRocm91Z2ggYSBob2lzdGVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLCBzbyBpdCB0cmVhdHMgYSBiaW5kaW5nIHRoYXQgYSBuZXN0ZWRcbiAgICAgICAgICogZnVuY3Rpb24gYWxyZWFkeSByZWFkIGFzIHVudXNlZCBiZWZvcmUgdGhlIGV4aXQuIEluIGBydW5XaXRoVGltZW91dGAgdGhhdCBpcyBgbGV0IGlzQ29tcGxldGVkYCwgd2hpY2hcbiAgICAgICAgICogYHJ1bigpYCBhbmQgYGlubmVyVGltZW91dCgpYCBib3RoIHRvdWNoIHdoaWxlIHRoZSBgUHJvbWlzZS5yYWNlYCBhYm92ZSB0aGUgZXhpdCBpcyBzdGlsbCBydW5uaW5nIC0tXG4gICAgICAgICAqIG1vdmluZyB0aGUgZGVjbGFyYXRpb24gcGFzdCB0aGUgZXhpdCwgYXMgdGhlIHJ1bGUgYXNrcywgd291bGQgbGVhdmUgdGhvc2UgcmVhZHMgaW4gdGhlIHRlbXBvcmFsIGRlYWRcbiAgICAgICAgICogem9uZS4gSXRzIG93biBmaXhlciBkZWNsaW5lcyBhbGwgMTUgc2l0ZXMgZm9yIHRoZSBzYW1lIHJlYXNvbiBpdCBjYW5ub3QgcHJvdmUgdGhlbSBzYWZlLCBzbyBmb2xsb3dpbmdcbiAgICAgICAgICogdGhlIHJ1bGUgaXMgZW50aXJlbHkgbWFudWFsLiBXaGF0IGlzIGxlZnQgYWZ0ZXIgdGhhdCBpcyBwbGFjZW1lbnQgc3R5bGU6IHRoZSByZW1haW5pbmcgcmVwb3J0cyBhcmVcbiAgICAgICAgICogbmFtZWQgY29uc3RhbnRzIGFuZCBkZXJpdmVkIHBhdGhzIGRlbGliZXJhdGVseSBncm91cGVkIGF0IHRoZSB0b3Agb2YgYSBmdW5jdGlvbiwgYW5kIHB1c2hpbmcgZWFjaCBvbmVcbiAgICAgICAgICogYmVsb3cgdGhlIGZpcnN0IGd1YXJkIHNwbGl0cyBhIGNvaGVzaXZlIGJsb2NrIHRvIG5vIGJlbmVmaXQuIFRoZSB0aHJlZSBzaXRlcyB3aGVyZSBkZWZlcnJpbmcgc2tpcHBlZFxuICAgICAgICAgKiByZWFsIHdvcmsgKGEgc2Vjb25kIGBjb21wdXRlTmVlZGVkRXhwb3N1cmVgIHdhbGssIGEgYHRvSnNvbmAgc2VyaWFsaXphdGlvbiwgYW4gYGVuc3VyZUxmRW5kaW5nc2AgcGFzcylcbiAgICAgICAgICogd2VyZSBhcHBsaWVkIGJ5IGhhbmQgaW5zdGVhZC5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLWRlY2xhcmF0aW9ucy1iZWZvcmUtZWFybHktZXhpdCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBBc3NpZ25pbmcgb250byB0aGUgZ2xvYmFsIG9iamVjdCBpcyBob3cgdGhpcyBsaWJyYXJ5IGluc3RhbGxzIGFuZCByZXN0b3JlcyB0ZXN0IGRvdWJsZXMsIGFuZCBob3cgYVxuICAgICAgICAgKiBmZXcgT2JzaWRpYW4tcnVudGltZSBnbG9iYWxzIGFyZSByZWFjaGVkIGF0IGFsbC4gVGhlIHJ1bGUgY2Fubm90IHNlcGFyYXRlIHRoYXQgZnJvbSBhbiBhY2NpZGVudGFsXG4gICAgICAgICAqIGdsb2JhbCB3cml0ZSwgYW5kIGl0IGhhcyBubyBmaXhlci5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLWdsb2JhbC1vYmplY3QtcHJvcGVydHktYXNzaWdubWVudCc6ICdvZmYnLFxuICAgICAgICAvLyBgbnVsbGAgaXMgbG9hZC1iZWFyaW5nIGhlcmU6IGFuIG9wdGlvbmFsIGNvbGxhYm9yYXRvciBpcyBtb2RlbGxlZCBhcyBhIHJlcXVpcmVkIGBudWxsIHwgWGAgZmllbGQgcmF0aGVyIHRoYW4gYW4gb3B0aW9uYWwgYFhgLCBzbyBgbnVsbGAgYW5kIGB1bmRlZmluZWRgIGFyZSBub3QgaW50ZXJjaGFuZ2VhYmxlLlxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcnVsZSdzIGxpc3Qgb2Ygc3RhbmRhcmQgYFN5bWJvbGAgcHJvcGVydGllcyBwcmVkYXRlcyBleHBsaWNpdCByZXNvdXJjZSBtYW5hZ2VtZW50LCBzbyBpdCByZXBvcnRzXG4gICAgICAgICAqIGBTeW1ib2wuZGlzcG9zZWAgYW5kIGBTeW1ib2wuYXN5bmNEaXNwb3NlYCBhcyBub24tc3RhbmRhcmQuIEJvdGggYXJlIHBhcnQgb2YgdGhlIGxhbmd1YWdlIHRoYXQgdGhpc1xuICAgICAgICAgKiBsaWJyYXJ5IGlzIGJ1aWx0IG9uIC0tIDExNCBmaWxlcyBoZXJlIHVzZSBgdXNpbmdgIGRlY2xhcmF0aW9ucywgYW5kIHRoZSBkaXNwb3NhYmxlIHR5cGVzIGFyZSBhXG4gICAgICAgICAqIHB1YmxpYyBwYXJ0IG9mIGl0cyBzdXJmYWNlIC0tIHNvIGFsbCA1OSByZXBvcnRzIGFyZSB0aGUgcnVsZSBiZWluZyBvdXQgb2YgZGF0ZSByYXRoZXIgdGhhbiBhIGZpbmRpbmcuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1ub25zdGFuZGFyZC1idWlsdGluLXByb3BlcnRpZXMnOiAnb2ZmJyxcbiAgICAgICAgJ3VuaWNvcm4vbm8tbnVsbCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUeXBlU2NyaXB0J3MgZXhwbGljaXQgYHRoaXNgIHBhcmFtZXRlciAoYGZ1bmN0aW9uIGdldCh0aGlzOiBIb2xkZXIpIHsgcmV0dXJuIHRoaXMudmFsdWU7IH1gKSBtYWtlc1xuICAgICAgICAgKiBgdGhpc2Agb3V0c2lkZSBhIGNsYXNzIGJvdGggbGVnYWwgYW5kIHR5cGUtY2hlY2tlZCwgYnV0IHRoZSBydWxlIGlzIHN5bnRhY3RpYyBhbmQgZmxhZ3MgaXQgaWRlbnRpY2FsbHlcbiAgICAgICAgICogdG8gYSBnZW51aW5lbHkgdW5ib3VuZCBgdGhpc2AuIEl0IGhhcyBubyBvcHRpb25zIChgc2NoZW1hOiBbXWApIGFuZCBubyBmaXhlciwgc28gdGhlcmUgaXMgbm8gd2F5IHRvXG4gICAgICAgICAqIHNlcGFyYXRlIHRoZSBpZGlvbSBmcm9tIHRoZSBidWcgaXQgdGFyZ2V0cy4gTW9zdCBoaXRzIGhlcmUgd2VyZSB0eXBlZCBgdGhpc2AgcGFyYW1ldGVycyBhbmQgdGVzdHMgdGhhdFxuICAgICAgICAgKiBkZWxpYmVyYXRlbHkgYXNzZXJ0IGB0aGlzYCBiaW5kaW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tdGhpcy1vdXRzaWRlLW9mLWNsYXNzJzogJ29mZicsXG4gICAgICAgIC8vIFNhbWUgY2FsbCBhcyBpdHMgb2JqZWN0IGNvdW50ZXJwYXJ0IGFib3ZlOiB0aGUgZGVzdHJ1Y3R1cmluZyBkZXB0aCBmbGFnZ2VkIGhlcmUgaXMgZGVsaWJlcmF0ZSBhbmQgcmVhZHMgd2VsbC5cbiAgICAgICAgJ3VuaWNvcm4vbm8tdW5yZWFkYWJsZS1hcnJheS1kZXN0cnVjdHVyaW5nJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSByZXBvcnRzIGFyZSBhbGwgYGZvciAoY29uc3QgZmlsZSBvZiBhd2FpdCByZWFkZGlyUG9zaXgoLi4uKSlgLCB3aGljaCByZWFkcyBleGFjdGx5IGFzIGludGVuZGVkLlxuICAgICAgICAgKiBIb2lzdGluZyB0aGUgYXdhaXRlZCBjYWxsIGludG8gYSB2YXJpYWJsZSBuYW1lZCBhZnRlciB0aGUgbG9vcCdzIG93biBpdGVyYWJsZSBhZGRzIGEgbGluZSBhbmQgYSBuYW1lXG4gICAgICAgICAqIHdpdGhvdXQgYWRkaW5nIGluZm9ybWF0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tdW5yZWFkYWJsZS1mb3Itb2YtZXhwcmVzc2lvbic6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgbmVzdGVkIGRlc3RydWN0dXJpbmcgdGhpcyBmbGFncyBpcyBkZWxpYmVyYXRlIGhlcmUgYW5kIHJlYWRzIHdlbGw6IHB1bGxpbmcgYSBtZW1iZXIgb3V0IG9mIGFcbiAgICAgICAgICogcGFyYW1zIGJhZyBpbiBvbmUgc3RlcCBzdGF0ZXMgd2hlcmUgdGhlIHZhbHVlIGNvbWVzIGZyb20sIHdoaWNoIGEgc2Vjb25kIGludGVybWVkaWF0ZSBiaW5kaW5nIG9ubHlcbiAgICAgICAgICogb2JzY3VyZXMuIFRoZSBydWxlIHRha2VzIG5vIG9wdGlvbnMsIHNvIHRoZXJlIGlzIG5vIHdheSB0byBrZWVwIHRoZSBkZXB0aCBsaW1pdCBpdCBpcyByZWFsbHkgYWZ0ZXJcbiAgICAgICAgICogd2hpbGUgYWxsb3dpbmcgdGhlIHNoYXBlIGluIHVzZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLXVucmVhZGFibGUtb2JqZWN0LWRlc3RydWN0dXJpbmcnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogYGNoZWNrQXJndW1lbnRzYCBzdHJpcHMgYHVuZGVmaW5lZGAgYXJndW1lbnRzLCB3aGljaCBzaGlmdHMgdGhlIHJlbWFpbmluZyBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpbnRvXG4gICAgICAgICAqIHRoZSB3cm9uZyBzbG90czsgYGNoZWNrQXJyb3dGdW5jdGlvbkJvZHlgIHJlbW92ZXMgYHJldHVybiB1bmRlZmluZWQ7YCBmcm9tIGFycm93IGJvZGllcyB3aG9zZSBvdGhlclxuICAgICAgICAgKiBicmFuY2hlcyBkbyByZXR1cm4gYSB2YWx1ZSwgd2hpY2ggdmlvbGF0ZXMgdGhlIGBub0ltcGxpY2l0UmV0dXJuc2Agc2V0dGluZyB0aGlzIHByb2plY3QgY29tcGlsZXMgd2l0aC5cbiAgICAgICAgICogVGhlIHJ1bGUncyByZW1haW5pbmcgY2FzZXMgKGEgYmFyZSBgdW5kZWZpbmVkYCBpbml0aWFsaXplciwgYHJldHVybiB1bmRlZmluZWQ7YCBpbiBhIHZvaWQgZnVuY3Rpb24pXG4gICAgICAgICAqIGFyZSBzdGlsbCB3b3J0aCBoYXZpbmcuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby11c2VsZXNzLXVuZGVmaW5lZCc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNoZWNrQXJndW1lbnRzOiBmYWxzZSxcbiAgICAgICAgICAgIGNoZWNrQXJyb3dGdW5jdGlvbkJvZHk6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvLyBgQXJyYXkuZnJvbUFzeW5jYCBpcyBFUzIwMjQuIFNlZSB0aGUgRVMyMDIyIGZsb29yIG5vdGUgYWJvdmUuXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1hcnJheS1mcm9tLWFzeW5jJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEV2ZXJ5IGhpdCBoZXJlIGlzIGEgcHJvbWlzZSBkZWxpYmVyYXRlbHkgTk9UIGF3YWl0ZWQsIGFuZCBgYXdhaXRgIHdvdWxkIGNoYW5nZSB3aGF0IHRoZSBjb2RlIGRvZXMuXG4gICAgICAgICAqIGByZXN1bHQuY2F0Y2godGhyb3dEZWxheWVkKWAgaW4gYGFzeW5jLWV2ZW50cy50c2AgaXMgdGhlIGZpcmUtYW5kLWZvcmdldCBlcnJvciBwYXRoIHRoZSBtb2R1bGUgaXNcbiAgICAgICAgICogYnVpbHQgb247IHRoZSByZXN0IGhvbGQgYW4gdW5yZXNvbHZlZCBwcm9taXNlIGFuZCBhc3NlcnQgdGhlIGNhbGxiYWNrIGhhcyBub3QgZmlyZWQgeWV0LCBzbyBhd2FpdGluZ1xuICAgICAgICAgKiB3b3VsZCBoYW5nIHRoZSB0ZXN0IG9yIGludmVydCB3aGF0IGl0IHByb3Zlcy4gVGhlIHJ1bGUgY2Fubm90IHRlbGwgYSBmb3Jnb3R0ZW4gYGF3YWl0YCBmcm9tIGFuXG4gICAgICAgICAqIGludGVudGlvbmFsIG9uZSwgYW5kIHRoaXMgY29kZWJhc2Ugc2NoZWR1bGVzIGZpcmUtYW5kLWZvcmdldCB3b3JrIGFzIGEgY29yZSBwYXR0ZXJuLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLWF3YWl0JzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEFsbCB0aHJlZSByZXBvcnRzIHJlYWQgSFRNTCBvdXQgKGBjb25zdCBodG1sID0gZWwuaW5uZXJIVE1MYCksIG5ldmVyIHdyaXRlIGl0LCBhbmQgZm9yIGEgcmVhZFxuICAgICAgICAgKiBgZ2V0SFRNTCgpYCByZXR1cm5zIHRoZSBzYW1lIHN0cmluZy4gV2hhdCBpdCBhZGRzIGlzIHNoYWRvdy1yb290IHNlcmlhbGl6YXRpb24gb3B0aW9ucyB0aGF0IG5vdGhpbmdcbiAgICAgICAgICogaGVyZSBhc2tzIGZvciwgaW4gZXhjaGFuZ2UgZm9yIGEgbXVjaCBuZXdlciBwbGF0Zm9ybSBmbG9vciB0aGFuIGBpbm5lckhUTUxgIC0tIGEgYmFkIHRyYWRlIGZvciBhXG4gICAgICAgICAqIGxpYnJhcnkgdGhhdCBoYXMgdG8gcnVuIG9uIHdoYXRldmVyIENocm9taXVtIHRoZSBpbnN0YWxsZWQgT2JzaWRpYW4gc2hpcHMuIFRoZSBydWxlJ3Mgb3RoZXIgaGFsZixcbiAgICAgICAgICogcmV3cml0aW5nIHdyaXRlcyB0byB0aGUgc2FuaXRpemluZyBgc2V0SFRNTCgpYCwgd291bGQgYmUgd29ydGggaGF2aW5nOyBpdCBqdXN0IG5ldmVyIGZpcmVzIGhlcmUuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItZG9tLW5vZGUtaHRtbC1tZXRob2RzJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEl0ZXJhdG9yIGhlbHBlcnMgKGBJdGVyYXRvciNzb21lYCBhbmQgZnJpZW5kcykgYXJlIEVTMjAyNSwgc28gdGhpcyBiZWxvbmdzIHdpdGggYG5vLWFycmF5LXJldmVyc2VgIGFuZFxuICAgICAgICAgKiBgbm8tYXJyYXktc29ydGAgYWJvdmU6IHRoZSBzYW1lIEVTMjAyMiBmbG9vciBydWxlcyBpdCBvdXQsIGFuZCB0aGUgc2FtZSBub3RlIGFwcGxpZXMgLS0gcmV2aXNpdCB0aGVtXG4gICAgICAgICAqIHRvZ2V0aGVyIGlmIHRoYXQgZmxvb3IgbW92ZXMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItaXRlcmF0b3ItaGVscGVycyc6ICdvZmYnLFxuICAgICAgICAvLyBgSXRlcmF0b3IjdG9BcnJheWAgaXMgRVMyMDI1LiBTZWUgdGhlIEVTMjAyMiBmbG9vciBub3RlIGFib3ZlLlxuICAgICAgICAndW5pY29ybi9wcmVmZXItaXRlcmF0b3ItdG8tYXJyYXknOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHN1Z2dlc3RlZCByZXBsYWNlbWVudCBpcyBgTWF0aC50cnVuYyhOdW1iZXIoeCkpYCwgd2hpY2ggaXMgbG9uZ2VyIHRoYW4gYHBhcnNlSW50KHgsIDEwKWAgYW5kIG5vXG4gICAgICAgICAqIGNsZWFyZXIsIGFuZCBpdCBpcyBub3QgdGhlIHNhbWUgZnVuY3Rpb246IGBwYXJzZUludGAgc3RvcHMgYXQgdGhlIGZpcnN0IGNoYXJhY3RlciB0aGF0IGNhbm5vdCBiZSBwYXJ0XG4gICAgICAgICAqIG9mIHRoZSBudW1iZXIsIHNvIGAnMTJhYmMnYCBwYXJzZXMgdG8gMTIgd2hlcmUgYE51bWJlcmAgeWllbGRzIGBOYU5gLiBUd28gb2YgdGhlIHJlcG9ydHMgcmVhZCB1c2VyXG4gICAgICAgICAqIGlucHV0IHRocm91Z2ggdGhhdCBkaWZmZXJlbmNlIC0tIHRoZSBwYWdlLWp1bXAgYm94IGluIHRoZSBgRGF0YXZpZXdgIGhlbHBlciwgYW5kXG4gICAgICAgICAqIGBOdW1iZXJDb21wb25lbnQudmFsdWVGcm9tU3RyaW5nYCwgd2hvc2UgbGVuaWVudCBwYXJzZSBpcyBwYXJ0IG9mIGEgcHVibGlzaGVkIGNvbXBvbmVudCdzIGJlaGF2aW9yLlxuICAgICAgICAgKiBUaGUgcmVzdCBwYXJzZSBtYWNoaW5lLWdlbmVyYXRlZCBzdHJpbmdzLCB3aGVyZSB0aGUgdHdvIGFncmVlIGJ1dCB0aGUgc2hvcnRlciBzcGVsbGluZyBzdGlsbCB3aW5zLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLW51bWJlci1jb2VyY2lvbic6ICdvZmYnLFxuICAgICAgICAvLyBgUHJvbWlzZS53aXRoUmVzb2x2ZXJzYCBpcyBFUzIwMjQuIFNlZSB0aGUgRVMyMDIyIGZsb29yIG5vdGUgYWJvdmUuXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1wcm9taXNlLXdpdGgtcmVzb2x2ZXJzJzogJ29mZicsXG4gICAgICAgIC8vIGBTZXQjdW5pb25gIGFuZCBmcmllbmRzIGFyZSBFUzIwMjUuIFNlZSB0aGUgRVMyMDIyIGZsb29yIG5vdGUgYWJvdmUuXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1zZXQtbWV0aG9kcyc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcnVsZSByYW5rcyBvcGVyYW5kcyBieSBzeW50YWN0aWMgc2hhcGUsIG5vdCBjb3N0LCBzbyBldmVyeSByZXBvcnQgaGVyZSBzd2FwcyBvbmUgcHJvcGVydHkgcmVhZFxuICAgICAgICAgKiBhaGVhZCBvZiBhbm90aGVyIGFuZCBidXlzIG5vdGhpbmcuIEl0cyBvd24gbWVzc2FnZSBjb25jZWRlcyBpdCBjYW5ub3QgY2hlY2sgdGhlIHBhcnQgdGhhdCBtYXR0ZXJzIC0tXG4gICAgICAgICAqIFwiYWZ0ZXIgdmVyaWZ5aW5nIHNob3J0LWNpcmN1aXQgYmVoYXZpb3JcIiAtLSBhbmQgb25lIHJlcG9ydCBzaXRzIGRpcmVjdGx5IHVuZGVyIGEgY29tbWVudCByZWNvcmRpbmdcbiAgICAgICAgICogdGhhdCB0aGUgb3BlcmFuZHMgY2hhbmdlIGluc2lkZSBhIGByZW5hbWVgIGV2ZW50IGhhbmRsZXIsIHdoaWNoIGlzIHdoZXJlIG9yZGVyIHN0b3BzIGJlaW5nIGZyZWUuXG4gICAgICAgICAqIFRoZSBjdXJyZW50IG9yZGVycyBhbHNvIGNhcnJ5IGludGVudDogYSBudWxsIGd1YXJkIGJlZm9yZSB0aGUgdXNlIGl0IGd1YXJkcywgYW5kIHRoZSBjb25kaXRpb24gYmVpbmdcbiAgICAgICAgICogcmVwb3J0ZWQgYmVmb3JlIHRoZSBzdGF0ZSBpdCBjb250cmFkaWN0cy5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1zaW1wbGUtY29uZGl0aW9uLWZpcnN0JzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIGBVUkwuY2FuUGFyc2VgIHJlcXVpcmVzIE5vZGUgMTguMTcsIHdlbGwgYWJvdmUgdGhlIE5vZGUgMTYuMTYuMCBmbG9vciB0aGF0IHNoaXBwZWQgc291cmNlIHRhcmdldHNcbiAgICAgICAgICogKHNlZSB0aGUgT2JzaWRpYW4gcGx1Z2luIGxheWVyJ3MgYG1pbmltdW1Ob2RlVmVyc2lvbmApLiBUaGUgcnVsZSBjYW4gdGhlcmVmb3JlIG5ldmVyIGJlIHNhdGlzZmllZCB0aGVyZSwgc28gaXQgaXMgb2ZmIGF0IHRoZVxuICAgICAgICAgKiBjb25maWcgbGV2ZWwgcmF0aGVyIHRoYW4gYW5ub3RhdGVkIGF0IGVhY2ggY2FsbCBzaXRlLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLXVybC1jYW4tcGFyc2UnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogRXZlcnkgYXJyYXkgcmVwb3J0ZWQgaGVyZSBob2xkcyBzdHJpbmdzLCB3aGVyZSB0aGUgZGVmYXVsdCBzb3J0IGlzIGFscmVhZHkgd2VsbCBkZWZpbmVkIGFuZCBjb3JyZWN0LlxuICAgICAgICAgKiBBZGRpbmcgdGhlIGNvbXBhcmF0b3IgdGhlIHJ1bGUgYXNrcyBmb3Igd291bGQgbWVhbiBjaG9vc2luZyBiZXR3ZWVuIGNvZGUtdW5pdCBhbmQgbG9jYWxlIG9yZGVyaW5nLFxuICAgICAgICAgKiBzbyBmb2xsb3dpbmcgaXQgd291bGQgQ0hBTkdFIHRoZSBzb3J0IHJhdGhlciB0aGFuIGRvY3VtZW50IGl0LiBUaGUgcnVsZSBlYXJucyBpdHMgcGxhY2Ugb24gbnVtZXJpY1xuICAgICAgICAgKiBhcnJheXM7IGl0IGRvZXMgbm90IGhhdmUgYW55IGhlcmUuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9yZXF1aXJlLWFycmF5LXNvcnQtY29tcGFyZSc6ICdvZmYnLFxuICAgICAgICAvLyBUaGUgY29kZWJhc2UgYWxyZWFkeSBzcGVsbHMgZW5jb2RpbmdzIHRoZSB3YXkgdGhlIEVuY29kaW5nIFN0YW5kYXJkIGRvZXMgKGB1dGYtOGApLCB3aGljaCBpcyBhbHNvIHdoYXQgYFRleHREZWNvZGVyYCByZXBvcnRzLiBLZWVwIHRoZSBydWxlIGVuZm9yY2luZyBjb25zaXN0ZW5jeSwganVzdCBpbiB0aGUgZGlyZWN0aW9uIGFscmVhZHkgaW4gdXNlLlxuICAgICAgICAndW5pY29ybi90ZXh0LWVuY29kaW5nLWlkZW50aWZpZXItY2FzZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHdpdGhEYXNoOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICAvLyBCdWlsZC9saW50L3ZlcnNpb24gc2NyaXB0cyBhcmUgQ0xJIGVudHJ5IHBvaW50cywgd2hlcmUgZXhpdGluZyB3aXRoIGEgc3RhdHVzIGNvZGUgaXMgdGhlIGludGVyZmFjZS5cbiAgICAgIGZpbGVzOiBjb250ZXh0LnNjcmlwdEZpbGVzLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ3VuaWNvcm4vbm8tcHJvY2Vzcy1leGl0JzogJ29mZidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIC8qXG4gICAgICAgKiBBIG1vZHVsZS1sZXZlbCBmaXh0dXJlIGFzc2lnbmVkIGZyb20gYGJlZm9yZUVhY2hgIGlzIHRoZSBzdGFuZGFyZCB0ZXN0IHNoYXBlOlxuICAgICAgICpcbiAgICAgICAqICAgbGV0IGFwcDogQXBwO1xuICAgICAgICogICBiZWZvcmVFYWNoKCgpID0+IHsgYXBwID0gQXBwLmNyZWF0ZUNvbmZpZ3VyZWRfXygpOyB9KTtcbiAgICAgICAqXG4gICAgICAgKiBUaGUgcnVsZSBpcyByaWdodCBhYm91dCBwcm9kdWN0aW9uIGNvZGUgLS0gbW9kdWxlIHN0YXRlIHJlYXNzaWduZWQgZnJvbSBpbnNpZGUgYSBmdW5jdGlvbiBpcyB3b3J0aFxuICAgICAgICogZmxhZ2dpbmcsIGFuZCB0aGUgZml4IGlzIHRvIGhvbGQgaXQgaW4gYSBgY29uc3RgIG9iamVjdCBpbnN0ZWFkLiBJbiB0ZXN0cyB0aGF0IHdvdWxkIHJlcGxhY2UgZXZlcnlcbiAgICAgICAqIGBhcHBgIHdpdGggYFNUQVRFLmFwcGAgYW5kIG1ha2UgZWFjaCBmaWxlIHJlYWQgd29yc2UgZm9yIG5vIGdhaW4sIHNpbmNlIHRoZSBmaXh0dXJlIGlzIHJlc2V0IHBlciB0ZXN0XG4gICAgICAgKiBieSBkZXNpZ24uIFNjb3BlZCBvZmYgaGVyZSByYXRoZXIgdGhhbiBkaXNhYmxlZCBvdXRyaWdodCwgc28gcHJvZHVjdGlvbiBjb2RlIGtlZXBzIHRoZSBjaGVjay5cbiAgICAgICAqL1xuICAgICAgZmlsZXM6IGNvbnRleHQudGVzdEZpbGVzLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgLypcbiAgICAgICAgICogVHdvIHNoYXBlcyBoZXJlIGNhbm5vdCBmb2xsb3cgdGhlIGFkdmljZS4gQSBoZWxwZXIgZGVmaW5lZCBpbnNpZGUgYW4gYGV2YWxJbk9ic2lkaWFuYCBjYWxsYmFja1xuICAgICAgICAgKiBjYW5ub3QgYmUgaG9pc3RlZCBhdCBhbGw6IHRoZSBjYWxsYmFjayBpcyBzZXJpYWxpemVkIHdpdGggYHRvU3RyaW5nKClgIGFuZCBydW5zIGluc2lkZSBPYnNpZGlhbiwgc29cbiAgICAgICAgICogYW55dGhpbmcgbGVmdCBiZWhpbmQgaW4gdGhlIG1vZHVsZSBzY29wZSBpcyBzaW1wbHkgbm90IHRoZXJlLiBBbmQgYSBwZXItc3VpdGUgZmFjdG9yeVxuICAgICAgICAgKiAoYGNyZWF0ZUNvbXBvbmVudGAsIGBjcmVhdGVNb2NrUGx1Z2luYCkgaXMgZGVsaWJlcmF0ZWx5IGxvY2FsLCBrZWVwaW5nIGVhY2ggc3VpdGUncyBmaXh0dXJlIG5leHQgdG9cbiAgICAgICAgICogdGhlIGFzc2VydGlvbnMgdGhhdCByZWFkIGl0LiBQcm9kdWN0aW9uIGNvZGUga2VlcHMgdGhlIGNoZWNrLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vY29uc2lzdGVudC1mdW5jdGlvbi1zY29waW5nJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEEgdGVzdCBiaW5kaW5nIGlzIG5hbWVkIGFmdGVyIHRoZSB0aGluZyBpdCBjYXB0dXJlcywgbm90IGFmdGVyIHdoYXQgaXQgZG9lczogYGNyZWF0ZUVsZW1lbnRTcHlgXG4gICAgICAgICAqIGhvbGRzIHRoZSBzcHkgb24gYGNyZWF0ZUVsZW1lbnRgLCBhbmQgYGNyZWF0ZVByb2dyYW1PcHRpb25zYCBob2xkcyB0aGUgb3B0aW9ucyBgY3JlYXRlUHJvZ3JhbWAgd2FzXG4gICAgICAgICAqIGNhbGxlZCB3aXRoLiBUaGUgdmVyYiBiZWxvbmdzIHRvIHRoZSBuYW1lIGJlaW5nIHJlZmVyZW5jZWQsIHNvIHRoZSBydWxlIHJlYWRzIGl0IGFzIGEgZnVuY3Rpb24gbmFtZVxuICAgICAgICAgKiB0aGF0IGlzIG5vdCBhIGZ1bmN0aW9uLiBMZWZ0IG9uIGZvciBwcm9kdWN0aW9uIGNvZGUsIHdoZXJlIHRoZSBjb21wbGFpbnQgaXMgdGhlIHJpZ2h0IG9uZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLW5vbi1mdW5jdGlvbi12ZXJiLXByZWZpeCc6ICdvZmYnLFxuICAgICAgICAndW5pY29ybi9uby10b3AtbGV2ZWwtYXNzaWdubWVudC1pbi1mdW5jdGlvbic6ICdvZmYnXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuLyogZXNsaW50LWVuYWJsZSBuby1tYWdpYy1udW1iZXJzIC0tIFdlIGRpc2FibGVkIG1hZ2ljIG51bWJlcnMgYmVjYXVzZSB0aGV5IGFyZSB1c2VkIGFsbCBvdmVyIHRoZSBjb25maWdzLiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWdCQSxPQUFPLHFCQUFxQjtBQUM1QixTQUFTLHlCQUF5QjtBQUNsQyxPQUFPLFlBQVk7QUFDbkIsU0FBUyxZQUFZO0FBRXJCLE9BQU8sZUFBZTtBQUN0QixTQUFTLHNDQUFzQztBQUMvQyxTQUFTLGVBQWUsc0NBQXNDO0FBRTlELE9BQU8sZ0JBQWdCO0FBQ3ZCLFNBQVMsV0FBVyw0QkFBNEI7QUFFaEQsT0FBTyxhQUFhO0FBQ3BCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxrQkFBa0I7QUFFM0IsT0FBTyxjQUFjO0FBRXJCLFNBQVMsaUJBQWlCO0FBQzFCLFNBQVMscUJBQXFCO0FBQzlCLFNBQVMscUNBQXFDO0FBQzlDO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxvQ0FBb0M7QUFxRHRDLE1BQU0sb0JBQW9CO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJZixrQkFBNEIsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSzdCLGNBQXdCLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUt6QixjQUF3QixDQUFDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU16QixnQkFBMEIsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBSzNCLFlBQXNCLENBQUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFPaEMsV0FBcUI7QUFDMUIsV0FBTyxDQUFDLEdBQUcsS0FBSyxXQUFXLEdBQUcsS0FBSyxhQUFhLEdBQUcsS0FBSyxpQkFBaUIsR0FBRyxLQUFLLFdBQVc7QUFBQSxFQUM5RjtBQUNGO0FBUU8sU0FBUyxtQ0FBd0Q7QUFDdEUsUUFBTSxVQUFVLElBQUksb0JBQW9CO0FBQ3hDLFVBQVEsY0FBYyxLQUFLLFVBQVUsR0FBRztBQUN4QyxVQUFRLGdCQUFnQjtBQUFBLElBQ3RCLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxJQUNWLFVBQVU7QUFBQSxFQUNaO0FBQ0EsVUFBUSxZQUFZO0FBQUEsSUFDbEIsS0FBSyxVQUFVLFNBQVMsVUFBVSxTQUFTLFVBQVUsS0FBSztBQUFBLEVBQzVEO0FBQ0EsVUFBUSxZQUFZO0FBQUEsSUFDbEIsS0FBSyxVQUFVLEtBQUssVUFBVSxTQUFTLFVBQVUsS0FBSztBQUFBLElBQ3RELEtBQUssVUFBVSxLQUFLLFVBQVUsU0FBUyxVQUFVLE1BQU07QUFBQSxFQUN6RDtBQUNBLFVBQVEsVUFBVTtBQUFBLElBQ2hCLEtBQUssVUFBVSxPQUFPLFVBQVUsU0FBUyxVQUFVLEtBQUs7QUFBQSxJQUN4RCxLQUFLLFVBQVUsT0FBTyxVQUFVLFNBQVMsVUFBVSxLQUFLO0FBQUEsSUFDeEQsS0FBSyxVQUFVLEtBQUssVUFBVSxTQUFTLFVBQVUsU0FBUztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFjMUQsS0FBSyxVQUFVLFNBQVMsVUFBVSxTQUFTLFVBQVUsU0FBUztBQUFBLEVBQ2hFO0FBQ0EsU0FBTztBQUNUO0FBUU8sU0FBUyxvQkFBb0IsVUFBc0MsQ0FBQyxHQUFvQjtBQUM3RixRQUFNLFVBQVUsaUNBQWlDO0FBQ2pELFVBQVEsY0FBYyxPQUFPO0FBQzdCLFFBQU0sZ0JBQWdCLFFBQVEsZ0JBQWdCLE9BQU8sS0FBSyxDQUFDO0FBRTNELFNBQU87QUFBQSxJQUNMLEdBQUcsdUJBQXVCO0FBQUEsSUFDMUIsR0FBRywyQkFBMkI7QUFBQSxNQUM1QjtBQUFBLE1BQ0EsR0FBSSxRQUFRLHVCQUF1QixVQUFhLEVBQUUsb0JBQW9CLFFBQVEsbUJBQW1CO0FBQUEsSUFDbkcsQ0FBQztBQUFBLElBQ0QsR0FBRztBQUFBLEVBQ0w7QUFDRjtBQVNPLFNBQVMscUJBQXFCLFNBQStDO0FBQ2xGLFNBQU8sYUFBYTtBQUFBLElBQ2xCO0FBQUEsTUFDRSxTQUFTLENBQUMsT0FBTyxRQUFRLFdBQVc7QUFBQSxNQUNwQyxPQUFPLFFBQVEsU0FBUztBQUFBLE1BQ3hCLE9BQU87QUFBQSxRQUNMLGtCQUFrQjtBQUFBLFFBQ2xCLHlCQUF5QjtBQUFBLFFBQ3pCLGFBQWE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQWFiLHdCQUF3QjtBQUFBLFVBQ3RCO0FBQUEsVUFDQTtBQUFBLFVBQ0E7QUFBQSxZQUNFLE9BQU8sRUFBRSxlQUFlLDRCQUE0QjtBQUFBLFlBQ3BELE1BQU0sRUFBRSwyQkFBMkIsTUFBTSxlQUFlLHlCQUF5QjtBQUFBLFVBQ25GO0FBQUEsUUFDRjtBQUFBLFFBQ0EsY0FBYztBQUFBLFFBQ2QsbUJBQW1CO0FBQUEsUUFDbkIsU0FBUztBQUFBLFFBQ1QsZ0JBQWdCO0FBQUEsUUFDaEIscUJBQXFCO0FBQUEsUUFDckIsc0JBQXNCO0FBQUEsUUFDdEIsVUFBVTtBQUFBLFFBQ1Ysc0JBQXNCO0FBQUEsUUFDdEIsY0FBYztBQUFBLFFBQ2QsY0FBYztBQUFBLFVBQ1o7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFlBQ0UscUJBQXFCO0FBQUEsVUFDdkI7QUFBQSxRQUNGO0FBQUEsUUFDQSwwQkFBMEI7QUFBQSxVQUN4QjtBQUFBLFVBQ0E7QUFBQSxRQUNGO0FBQUEsUUFDQSxnQkFBZ0I7QUFBQSxRQUNoQixZQUFZO0FBQUEsUUFDWix3QkFBd0I7QUFBQSxRQUN4QixjQUFjO0FBQUEsUUFDZCxhQUFhO0FBQUEsUUFDYixjQUFjO0FBQUEsVUFDWjtBQUFBLFVBQ0E7QUFBQSxZQUNFLE9BQU87QUFBQSxjQUNMO0FBQUEsY0FDQTtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLFFBQ0EseUJBQXlCO0FBQUEsUUFDekIsZ0JBQWdCO0FBQUEsUUFDaEIsa0JBQWtCO0FBQUEsVUFDaEI7QUFBQSxVQUNBO0FBQUEsWUFDRSxhQUFhO0FBQUEsVUFDZjtBQUFBLFFBQ0Y7QUFBQSxRQUNBLHFCQUFxQjtBQUFBLFFBQ3JCLG9CQUFvQjtBQUFBLFFBQ3BCLGlCQUFpQjtBQUFBLFFBQ2pCLGtCQUFrQjtBQUFBLFFBQ2xCLHdCQUF3QjtBQUFBLFVBQ3RCO0FBQUEsVUFDQTtBQUFBLFlBQ0UsT0FBTztBQUFBLGNBQ0w7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQSxRQUNBLG1CQUFtQjtBQUFBLFFBQ25CLHlCQUF5QjtBQUFBLFFBQ3pCLGVBQWU7QUFBQSxRQUNmLGdCQUFnQjtBQUFBLFFBQ2hCLGFBQWE7QUFBQSxRQUNiLGtCQUFrQjtBQUFBLFFBQ2xCLGdCQUFnQjtBQUFBLFFBQ2hCLGdCQUFnQjtBQUFBLFFBQ2hCLG9CQUFvQjtBQUFBLFVBQ2xCO0FBQUEsVUFDQTtBQUFBLFlBQ0UsZUFBZTtBQUFBLFlBQ2YsY0FBYztBQUFBLFlBQ2QsUUFBUTtBQUFBLGNBQ047QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLFFBQ0EsbUJBQW1CO0FBQUEsUUFDbkIsZ0JBQWdCO0FBQUEsUUFDaEIsd0JBQXdCO0FBQUEsUUFDeEIscUJBQXFCO0FBQUEsUUFDckIsZUFBZTtBQUFBLFFBQ2YsbUJBQW1CO0FBQUEsUUFDbkIseUJBQXlCO0FBQUEsUUFDekIsbUJBQW1CO0FBQUEsUUFDbkIsOEJBQThCO0FBQUEsUUFDOUIsWUFBWTtBQUFBLFFBQ1osd0JBQXdCO0FBQUEsVUFDdEI7QUFBQSxVQUNBLEdBQUc7QUFBQSxRQUNMO0FBQUEsUUFDQSxvQkFBb0I7QUFBQSxRQUNwQixpQkFBaUI7QUFBQSxRQUNqQixtQkFBbUI7QUFBQSxRQUNuQixnQkFBZ0I7QUFBQSxRQUNoQixhQUFhO0FBQUEsUUFDYiwrQkFBK0I7QUFBQSxRQUMvQixvQkFBb0I7QUFBQSxRQUNwQixnQ0FBZ0M7QUFBQSxRQUNoQyx1QkFBdUI7QUFBQSxRQUN2Qix1QkFBdUI7QUFBQSxRQUN2Qix5QkFBeUI7QUFBQSxRQUN6Qix5QkFBeUI7QUFBQSxRQUN6QixtQkFBbUI7QUFBQSxRQUNuQiwyQkFBMkI7QUFBQSxRQUMzQixxQkFBcUI7QUFBQSxRQUNyQiwwQkFBMEI7QUFBQSxRQUMxQixxQkFBcUI7QUFBQSxRQUNyQixxQkFBcUI7QUFBQSxRQUNyQixVQUFVO0FBQUEsUUFDVixXQUFXO0FBQUEsUUFDWCxvQkFBb0I7QUFBQSxRQUNwQix1QkFBdUI7QUFBQSxRQUN2Qix5QkFBeUI7QUFBQSxRQUN6QixnQkFBZ0I7QUFBQSxRQUNoQixrQ0FBa0M7QUFBQSxRQUNsQyw4QkFBOEI7QUFBQSxRQUM5QiwyQkFBMkI7QUFBQSxRQUMzQix5QkFBeUI7QUFBQSxRQUN6Qix3QkFBd0I7QUFBQSxRQUN4QixnQ0FBZ0M7QUFBQSxRQUNoQyx5QkFBeUI7QUFBQSxRQUN6QixzQkFBc0I7QUFBQSxRQUN0QixpQkFBaUI7QUFBQSxRQUNqQixtQkFBbUI7QUFBQSxRQUNuQixTQUFTO0FBQUEsUUFDVCwwQkFBMEI7QUFBQSxRQUMxQixpQkFBaUI7QUFBQSxRQUNqQixzQkFBc0I7QUFBQSxRQUN0QixlQUFlO0FBQUEsUUFDZixlQUFlO0FBQUEsUUFDZixRQUFRO0FBQUEsTUFDVjtBQUFBLElBQ0Y7QUFBQSxJQUNBO0FBQUEsTUFDRSxPQUFPLFFBQVE7QUFBQSxNQUNmLE9BQU87QUFBQSxRQUNMLG9CQUFvQjtBQUFBLE1BQ3RCO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBT08sU0FBUyx5QkFBMEM7QUFDeEQsU0FBTztBQUFBLElBQ0wsR0FBRyxvQkFBb0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBS3ZCLGNBQWMsQ0FBQyw0QkFBNEIsR0FBRyx5Q0FBeUM7QUFBQSxFQUN6RjtBQUNGO0FBUU8sU0FBUywyQkFBMkIsUUFBMkQ7QUFDcEcsUUFBTSxFQUFFLFFBQVEsSUFBSTtBQUNwQixTQUFPO0FBQUEsSUFDTCxHQUFHLHFCQUFxQixPQUFPO0FBQUEsSUFDL0IsR0FBRyxtQkFBbUIsT0FBTztBQUFBLElBQzdCLEdBQUcsb0JBQW9CLE9BQU87QUFBQSxJQUM5QixHQUFHLGtCQUFrQixPQUFPO0FBQUEsSUFDNUIsR0FBRyx3QkFBd0IsT0FBTztBQUFBLElBQ2xDLEdBQUcsa0JBQWtCLE9BQU87QUFBQSxJQUM1QixHQUFHLHlDQUF5QztBQUFBLElBQzVDLEdBQUcseUJBQXlCLE9BQU87QUFBQSxJQUNuQyxHQUFHLHdCQUF3QixPQUFPO0FBQUEsSUFDbEMsR0FBRyxxQkFBcUIsRUFBRSxTQUFTLG9CQUFvQixPQUFPLG1CQUFtQixDQUFDO0FBQUEsRUFDcEY7QUFDRjtBQUVBLFNBQVMseUJBQXlCLFNBQStDO0FBQy9FLFNBQU8sYUFBYTtBQUFBLElBQ2xCO0FBQUE7QUFBQSxNQUVFLFNBQVMsQ0FBQyxnQkFBZ0IsV0FBVztBQUFBLE1BQ3JDLE9BQU8sUUFBUSxTQUFTO0FBQUEsTUFDeEIsT0FBTztBQUFBLFFBQ0wseURBQXlEO0FBQUEsTUFDM0Q7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFFQSxTQUFTLDJDQUE0RDtBQUNuRSxTQUFPLGFBQWE7QUFBQSxJQUNsQjtBQUFBLE1BQ0UsVUFBVTtBQUFBLFFBQ1IsMEJBQTBCO0FBQUEsVUFDeEIsK0JBQStCO0FBQUEsWUFDN0IsZ0JBQWdCO0FBQUEsVUFDbEIsQ0FBQztBQUFBLFFBQ0g7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQztBQUNIO0FBRUEsU0FBUyxzQkFBdUM7QUFDOUMsUUFBTSxnQkFBZ0IsS0FBSyxjQUFjLEtBQUssSUFBSSxZQUFZO0FBQzlELFNBQU8sV0FBVyxhQUFhLElBQUksQ0FBQyxrQkFBa0IsYUFBYSxDQUFDLElBQUksQ0FBQztBQUMzRTtBQUVBLFNBQVMsa0JBQWtCLFNBQStDO0FBQ3hFLFNBQU8sYUFBYTtBQUFBLElBQ2xCO0FBQUEsTUFDRSxTQUFTO0FBQUEsUUFDUCwrQkFBK0I7QUFBQSxRQUMvQiwrQkFBK0I7QUFBQSxRQUMvQiwrQkFBK0I7QUFBQSxRQUMvQiwrQkFBK0I7QUFBQSxNQUNqQztBQUFBLE1BQ0EsT0FBTyxRQUFRLFNBQVM7QUFBQSxNQUN4QixPQUFPO0FBQUEsUUFDTCw0Q0FBNEM7QUFBQSxRQUM1Qyx1QkFBdUIsQ0FBQyxTQUFTLGdCQUFnQjtBQUFBLFFBQ2pELGtCQUFrQjtBQUFBLFFBQ2xCLDBCQUEwQjtBQUFBLFFBQzFCLGlDQUFpQztBQUFBLFFBQ2pDLDZCQUE2QjtBQUFBLFFBQzdCLG1CQUFtQjtBQUFBLFFBQ25CLHdDQUF3QztBQUFBLFFBQ3hDLHdCQUF3QjtBQUFBLFFBQ3hCLHFCQUFxQjtBQUFBLFFBQ3JCLDhCQUE4QjtBQUFBLFFBQzlCLDBCQUEwQjtBQUFBLFFBQzFCLDBCQUEwQjtBQUFBLFFBQzFCLCtCQUErQjtBQUFBLFFBQy9CLGtDQUFrQztBQUFBLFFBQ2xDLHVDQUF1QztBQUFBLFFBQ3ZDLHFDQUFxQztBQUFBLFFBQ3JDLCtCQUErQjtBQUFBLFFBQy9CLDZCQUE2QjtBQUFBLFFBQzdCLHlCQUF5QjtBQUFBLFFBQ3pCLDhCQUE4QjtBQUFBLFFBQzlCLGlDQUFpQztBQUFBLFFBQ2pDLGdDQUFnQztBQUFBLFFBQ2hDLDJCQUEyQjtBQUFBLFFBQzNCLGlDQUFpQztBQUFBLFVBQy9CO0FBQUEsVUFDQTtBQUFBLFlBQ0UsT0FBTztBQUFBLGNBQ0w7QUFBQSxjQUNBO0FBQUEsY0FDQTtBQUFBLFlBQ0Y7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLFFBQ0EsOEJBQThCO0FBQUEsUUFDOUIscUNBQXFDO0FBQUEsUUFDckMscUNBQXFDO0FBQUEsTUFDdkM7QUFBQSxJQUNGO0FBQUEsSUFDQTtBQUFBLE1BQ0UsT0FBTyxRQUFRO0FBQUEsTUFDZixPQUFPO0FBQUEsUUFDTCw4QkFBOEI7QUFBQSxNQUNoQztBQUFBLElBQ0Y7QUFBQSxJQUNBO0FBQUE7QUFBQSxNQUVFLE9BQU8sUUFBUTtBQUFBLE1BQ2YsT0FBTztBQUFBLFFBQ0wsOEJBQThCO0FBQUEsTUFDaEM7QUFBQSxJQUNGO0FBQUEsSUFDQTtBQUFBLE1BQ0UsT0FBTyxRQUFRO0FBQUEsTUFDZixPQUFPO0FBQUEsUUFDTCw4QkFBOEI7QUFBQSxNQUNoQztBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDSDtBQUVBLFNBQVMsd0JBQXdCLFNBQStDO0FBQzlFLFNBQU8sYUFBYTtBQUFBLElBQ2xCO0FBQUEsTUFDRSxPQUFPLFFBQVEsU0FBUztBQUFBLE1BQ3hCLFNBQVM7QUFBQSxRQUNQLENBQUMsMkJBQTJCLEdBQUc7QUFBQSxNQUNqQztBQUFBLE1BQ0EsT0FBTztBQUFBLFFBQ0wsNkRBQTZEO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUs3RCxtREFBbUQ7QUFBQSxRQUNuRCxtREFBbUQ7QUFBQSxRQUNuRCx1REFBdUQ7QUFBQSxRQUN2RCxvREFBb0Q7QUFBQSxRQUNwRCw0Q0FBNEM7QUFBQSxRQUM1QyxpRUFBaUU7QUFBQSxRQUNqRSxrREFBa0Q7QUFBQSxRQUNsRCw2Q0FBNkM7QUFBQSxNQUMvQztBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDSDtBQUVBLFNBQVMscUJBQXFCLFFBQXFEO0FBQ2pGLFFBQU0sRUFBRSxTQUFTLG1CQUFtQixJQUFJO0FBQ3hDLFFBQU0saUJBQWlCLHVCQUF1QixTQUFZLENBQUMsSUFBSSxFQUFFLFNBQVMsbUJBQW1CO0FBRTdGLFNBQU8sYUFBYTtBQUFBLElBQ2xCO0FBQUEsTUFDRSxPQUFPLFFBQVE7QUFBQSxNQUNmLFNBQVM7QUFBQSxRQUNQLEdBQUcsUUFBUTtBQUFBO0FBQUEsUUFFWCxHQUFHLFFBQVE7QUFBQSxNQUNiO0FBQUEsTUFDQSxTQUFTO0FBQUEsUUFDUCxHQUFHO0FBQUEsTUFDTDtBQUFBLE1BQ0EsT0FBTztBQUFBLFFBQ0wseUNBQXlDO0FBQUEsVUFDdkM7QUFBQSxVQUNBO0FBQUEsUUFDRjtBQUFBLFFBQ0EsMkNBQTJDO0FBQUEsVUFDekM7QUFBQSxVQUNBO0FBQUE7QUFBQSxZQUVFLFNBQVM7QUFBQSxjQUNQO0FBQUEsY0FDQTtBQUFBLFlBQ0Y7QUFBQSxZQUNBLEdBQUc7QUFBQSxVQUNMO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFFQSxTQUFTLHdCQUF3QixTQUErQztBQUM5RSxTQUFPLGFBQWEsQ0FBQztBQUFBLElBQ25CLFNBQVMsQ0FBQyxxQkFBcUIsMEJBQTBCLENBQUM7QUFBQSxJQUMxRCxPQUFPLFFBQVEsU0FBUztBQUFBLEVBQzFCLENBQUMsQ0FBQztBQUNKO0FBRUEsU0FBUyxvQkFBb0IsU0FBK0M7QUFDMUUsU0FBTyxhQUFhO0FBQUEsSUFDbEI7QUFBQSxNQUNFLFNBQVM7QUFBQSxRQUNQLFVBQVUsUUFBUTtBQUFBLFFBQ2xCLFVBQVUsUUFBUSxVQUFVO0FBQUEsVUFDMUIsYUFBYTtBQUFBLFVBQ2IsWUFBWTtBQUFBLFVBQ1osYUFBYTtBQUFBLFVBQ2IsTUFBTTtBQUFBLFFBQ1IsQ0FBQztBQUFBLE1BQ0g7QUFBQSxNQUNBLE9BQU8sUUFBUSxTQUFTO0FBQUEsTUFDeEIsT0FBTztBQUFBLFFBQ0wscUNBQXFDO0FBQUEsUUFDckMscUJBQXFCO0FBQUEsUUFDckIsZ0NBQWdDO0FBQUEsUUFDaEMsMENBQTBDO0FBQUEsUUFDMUMsNEJBQTRCO0FBQUEsUUFDNUIsbUNBQW1DO0FBQUEsVUFDakM7QUFBQSxVQUNBO0FBQUEsWUFDRSxtQkFBbUI7QUFBQSxjQUNqQixlQUFlO0FBQUEsY0FDZixXQUFXO0FBQUEsWUFDYjtBQUFBLFlBQ0EsbUJBQW1CO0FBQUEsY0FDakIsZUFBZTtBQUFBLGNBQ2YsV0FBVztBQUFBLFlBQ2I7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLFFBQ0EsaUNBQWlDO0FBQUEsVUFDL0I7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFlBQ0UsV0FBVztBQUFBLGNBQ1QsS0FBSztBQUFBLFlBQ1A7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLFFBQ0EscUJBQXFCO0FBQUEsVUFDbkI7QUFBQSxVQUNBO0FBQUEsVUFDQTtBQUFBLFlBQ0UsdUJBQXVCO0FBQUEsVUFDekI7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUM7QUFDSDtBQUVBLFNBQVMsbUJBQW1CLFNBQStDO0FBQ3pFLFNBQU8sYUFBYTtBQUFBLElBQ2xCO0FBQUEsTUFDRSxTQUFTO0FBQUE7QUFBQSxRQUVQLEdBQUcsU0FBUyxRQUFRO0FBQUE7QUFBQSxRQUVwQixHQUFHLFNBQVMsUUFBUTtBQUFBLE1BQ3RCO0FBQUEsTUFDQSxPQUFPLFFBQVEsU0FBUztBQUFBLE1BQ3hCLGlCQUFpQjtBQUFBLFFBQ2YsZUFBZTtBQUFBLFVBQ2IsY0FBYztBQUFBLFlBQ1osS0FBSztBQUFBLFVBQ1A7QUFBQSxVQUNBLGdCQUFnQjtBQUFBO0FBQUEsVUFFaEIsaUJBQWlCLGNBQWMsS0FBSztBQUFBLFFBQ3RDO0FBQUEsTUFDRjtBQUFBLE1BQ0EsT0FBTztBQUFBLFFBQ0wsb0RBQW9EO0FBQUEsUUFDcEQsb0RBQW9EO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQUtwRCw2Q0FBNkM7QUFBQSxRQUM3QywyQ0FBMkMsQ0FBQyxTQUFTO0FBQUEsVUFDbkQsZ0JBQWdCO0FBQUEsUUFDbEIsQ0FBQztBQUFBLFFBQ0QsMkNBQTJDLENBQUMsU0FBUztBQUFBLFVBQ25ELHNCQUFzQjtBQUFBLFFBQ3hCLENBQUM7QUFBQSxRQUNELG9DQUFvQyxDQUFDLFNBQVM7QUFBQSxVQUM1QyxjQUFjO0FBQUEsWUFDWjtBQUFBLFVBQ0Y7QUFBQSxRQUNGLENBQUM7QUFBQSxRQUNELHFDQUFxQztBQUFBLFVBQ25DO0FBQUEsVUFDQTtBQUFBO0FBQUEsWUFFRSxNQUFNO0FBQUE7QUFBQSxZQUVOLG1CQUFtQjtBQUFBLFlBQ25CLGNBQWM7QUFBQSxZQUNkLDJCQUEyQjtBQUFBLFlBQzNCLGdDQUFnQztBQUFBLFlBQ2hDLG9CQUFvQjtBQUFBO0FBQUEsWUFFcEIsbUJBQW1CO0FBQUEsVUFDckI7QUFBQSxRQUNGO0FBQUEsUUFDQSxzQ0FBc0M7QUFBQSxNQUN4QztBQUFBLElBQ0Y7QUFBQSxJQUNBO0FBQUEsTUFDRSxPQUFPLFFBQVE7QUFBQSxNQUNmLE9BQU87QUFBQSxRQUNMLG1DQUFtQyxDQUFDLFNBQVM7QUFBQSxVQUMzQyxpQ0FBaUM7QUFBQSxVQUNqQyxtQ0FBbUM7QUFBQSxRQUNyQyxDQUFDO0FBQUEsUUFDRCxxQ0FBcUM7QUFBQSxNQUN2QztBQUFBLElBQ0Y7QUFBQSxJQUNBO0FBQUEsTUFDRSxVQUFVO0FBQUEsUUFDUixPQUFPO0FBQUEsVUFDTCxTQUFTO0FBQUEsUUFDWDtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBQ0g7QUFFQSxTQUFTLGtCQUFrQixTQUErQztBQUN4RSxTQUFPLGFBQWE7QUFBQSxJQUNsQjtBQUFBLE1BQ0UsU0FBUyxDQUFDLFFBQVEsUUFBUSxXQUFXO0FBQUEsTUFDckMsT0FBTyxRQUFRLFNBQVM7QUFBQSxNQUN4QixPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQStDTCxtQ0FBbUM7QUFBQSxVQUNqQztBQUFBLFVBQ0E7QUFBQSxZQUNFLFVBQVU7QUFBQSxjQUNSLFFBQVE7QUFBQSxjQUNSLE9BQU87QUFBQSxjQUNQLFVBQVU7QUFBQSxjQUNWLE1BQU07QUFBQSxjQUNOLFVBQVU7QUFBQSxjQUNWLE1BQU07QUFBQSxjQUNOLE9BQU87QUFBQSxjQUNQLFVBQVU7QUFBQSxZQUNaO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFZQSx5Q0FBeUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFZekMseUJBQXlCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTXpCLHdCQUF3QjtBQUFBLFVBQ3RCO0FBQUEsVUFDQTtBQUFBLFlBQ0UsUUFBUTtBQUFBO0FBQUEsY0FFTixNQUFNO0FBQUEsZ0JBQ0osT0FBTztBQUFBLGNBQ1Q7QUFBQSxZQUNGO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUEsNEJBQTRCO0FBQUEsVUFDMUI7QUFBQSxVQUNBO0FBQUEsWUFDRSxLQUFLO0FBQUEsVUFDUDtBQUFBLFFBQ0Y7QUFBQSxRQUNBLDZCQUE2QjtBQUFBLFVBQzNCO0FBQUEsVUFDQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsWUEwQkUsaUJBQWlCO0FBQUEsWUFDakIsY0FBYztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxjQU1aLE1BQU07QUFBQSxjQUNOLE9BQU87QUFBQSxjQUNQLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsY0FNTCxLQUFLO0FBQUEsZ0JBQ0gsV0FBVztBQUFBLGdCQUNYLFdBQVc7QUFBQSxjQUNiO0FBQUEsY0FDQSxNQUFNO0FBQUEsY0FDTixLQUFLO0FBQUEsY0FDTCxNQUFNO0FBQUEsY0FDTixJQUFJO0FBQUEsY0FDSixLQUFLO0FBQUEsY0FDTCxLQUFLO0FBQUEsY0FDTCxRQUFRO0FBQUEsY0FDUixPQUFPO0FBQUEsY0FDUCxLQUFLO0FBQUEsY0FDTCxNQUFNO0FBQUEsY0FDTixLQUFLO0FBQUEsY0FDTCxNQUFNO0FBQUEsY0FDTixPQUFPO0FBQUEsWUFDVDtBQUFBLFVBQ0Y7QUFBQSxRQUNGO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFVQSw0QkFBNEI7QUFBQSxRQUM1Qix5QkFBeUI7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNekIsbUNBQW1DO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFhbkMsNkNBQTZDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBTTdDLGdEQUFnRDtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRaEQsNkNBQTZDO0FBQUEsUUFDN0MsbUJBQW1CO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVFuQixvQ0FBb0M7QUFBQTtBQUFBLFFBRXBDLDZDQUE2QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU03QywyQ0FBMkM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQU8zQyw4Q0FBOEM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUTlDLGdDQUFnQztBQUFBLFVBQzlCO0FBQUEsVUFDQTtBQUFBLFlBQ0UsZ0JBQWdCO0FBQUEsWUFDaEIsd0JBQXdCO0FBQUEsVUFDMUI7QUFBQSxRQUNGO0FBQUE7QUFBQSxRQUVBLG1DQUFtQztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFRbkMsd0JBQXdCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVF4Qix3Q0FBd0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNeEMsbUNBQW1DO0FBQUE7QUFBQSxRQUVuQyxvQ0FBb0M7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFTcEMsa0NBQWtDO0FBQUE7QUFBQSxRQUVsQyx5Q0FBeUM7QUFBQTtBQUFBLFFBRXpDLDhCQUE4QjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxRQVM5Qix5Q0FBeUM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFNekMsZ0NBQWdDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPaEMsc0NBQXNDO0FBQUE7QUFBQSxRQUV0Qyx5Q0FBeUM7QUFBQSxVQUN2QztBQUFBLFVBQ0E7QUFBQSxZQUNFLFVBQVU7QUFBQSxVQUNaO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsSUFDQTtBQUFBO0FBQUEsTUFFRSxPQUFPLFFBQVE7QUFBQSxNQUNmLE9BQU87QUFBQSxRQUNMLDJCQUEyQjtBQUFBLE1BQzdCO0FBQUEsSUFDRjtBQUFBLElBQ0E7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFZRSxPQUFPLFFBQVE7QUFBQSxNQUNmLE9BQU87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLFFBUUwsdUNBQXVDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsUUFPdkMsdUNBQXVDO0FBQUEsUUFDdkMsK0NBQStDO0FBQUEsTUFDakQ7QUFBQSxJQUNGO0FBQUEsRUFDRixDQUFDO0FBQ0g7IiwibmFtZXMiOltdfQ==
1020
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1jb25maWcudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBnZW5lcmljIGhhbGYgb2YgdGhlIHNoYXJlZCBFU0xpbnQgY29uZmlndXJhdGlvbiwgZm9yIGFueSBUeXBlU2NyaXB0IHByb2plY3QuXG4gKlxuICogSXQgaW50ZWdyYXRlcyBFU0xpbnQncyBvd24gcmVjb21tZW5kZWQgcnVsZXMsIGB0eXBlc2NyaXB0LWVzbGludGAsIGBAc3R5bGlzdGljL2VzbGludC1wbHVnaW5gLFxuICogYGVzbGludC1wbHVnaW4taW1wb3J0LXhgIHdpdGggaXRzIFR5cGVTY3JpcHQgcmVzb2x2ZXIsIGBlc2xpbnQtcGx1Z2luLXBlcmZlY3Rpb25pc3RgLCBgZXNsaW50LXBsdWdpbi11bmljb3JuYCxcbiAqIGBlc2xpbnQtcGx1Z2luLW5gIGFuZCB0aGUgZ2VuZXJpYyBpbi1ob3VzZSBydWxlcy4gQSBwcm9qZWN0LXR5cGUgbGF5ZXIgKHRoZSBPYnNpZGlhbiBwbHVnaW4gb25lIGxpdmVzIGluXG4gKiBgQG1uYW91bW92L29ic2lkaWFuLWRldi10b29sa2l0YCkgYnVpbGRzIG9uIHtAbGluayBnZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlnc30gYW5kIGFkZHMgb25seSB3aGF0IGlzIHNwZWNpZmljIHRvIGl0LlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBEZWNsYXJhdGl2ZSBFU0xpbnQgcnVsZS9wbHVnaW4gY29uZmlndXJhdGlvbjsgY29ycmVjdG5lc3MgaXMgdmVyaWZpZWQgYnkgcnVubmluZyBFU0xpbnQsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgdHlwZSB7IExpbnRlciB9IGZyb20gJ2VzbGludCc7XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLW1hZ2ljLW51bWJlcnMgLS0gV2UgZGlzYWJsZWQgbWFnaWMgbnVtYmVycyBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgYWxsIG92ZXIgdGhlIGNvbmZpZ3MuICovXG5pbXBvcnQgY29tbWVudHNDb25maWdzIGZyb20gJ0Blc2xpbnQtY29tbXVuaXR5L2VzbGludC1wbHVnaW4tZXNsaW50LWNvbW1lbnRzL2NvbmZpZ3MnO1xuaW1wb3J0IHsgaW5jbHVkZUlnbm9yZUZpbGUgfSBmcm9tICdAZXNsaW50L2NvbmZpZy1oZWxwZXJzJztcbmltcG9ydCBlc2xpbnQgZnJvbSAnQGVzbGludC9qcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3BhdGgnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBwbHVnaW5gIGlzIHRvbyBjb25mdXNpbmcuXG5pbXBvcnQgc3R5bGlzdGljIGZyb20gJ0BzdHlsaXN0aWMvZXNsaW50LXBsdWdpbic7XG5pbXBvcnQgeyBjcmVhdGVUeXBlU2NyaXB0SW1wb3J0UmVzb2x2ZXIgfSBmcm9tICdlc2xpbnQtaW1wb3J0LXJlc29sdmVyLXR5cGVzY3JpcHQnO1xuaW1wb3J0IHsgZmxhdENvbmZpZ3MgYXMgZXNsaW50UGx1Z2luSW1wb3J0WEZsYXRDb25maWdzIH0gZnJvbSAnZXNsaW50LXBsdWdpbi1pbXBvcnQteCc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHQgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYF9kZWZhdWx0YCBpcyB0b28gY29uZnVzaW5nLlxuaW1wb3J0IG5vZGVQbHVnaW4gZnJvbSAnZXNsaW50LXBsdWdpbi1uJztcbmltcG9ydCB7IGNvbmZpZ3MgYXMgcGVyZmVjdGlvbmlzdENvbmZpZ3MgfSBmcm9tICdlc2xpbnQtcGx1Z2luLXBlcmZlY3Rpb25pc3QnO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC14L25vLXJlbmFtZS1kZWZhdWx0IC0tIFRoZSBkZWZhdWx0IGV4cG9ydCBuYW1lIGBpbmRleGAgaXMgdG9vIGNvbmZ1c2luZy5cbmltcG9ydCB1bmljb3JuIGZyb20gJ2VzbGludC1wbHVnaW4tdW5pY29ybic7XG5pbXBvcnQge1xuICBkZWZpbmVDb25maWcsXG4gIGdsb2JhbElnbm9yZXNcbn0gZnJvbSAnZXNsaW50L2NvbmZpZyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0LXgvbm8tcmVuYW1lLWRlZmF1bHQgLS0gVGhlIGRlZmF1bHQgZXhwb3J0IG5hbWUgYF9kZWZhdWx0YCBpcyB0b28gY29uZnVzaW5nLlxuaW1wb3J0IHRzZXNsaW50IGZyb20gJ3R5cGVzY3JpcHQtZXNsaW50JztcblxuaW1wb3J0IHsgUmVwb1BhdGhzIH0gZnJvbSAnLi4vcmVwby1wYXRocy50cyc7XG5pbXBvcnQgeyBnZXRSb290Rm9sZGVyIH0gZnJvbSAnLi4vcm9vdC50cyc7XG5pbXBvcnQgeyBub1Jlc3RyaWN0ZWRTeW50YXhSdWxlRW50cmllcyB9IGZyb20gJy4vZXNsaW50LW5vLXJlc3RyaWN0ZWQtc3ludGF4LnRzJztcbmltcG9ydCB7XG4gIElOX0hPVVNFX0VTTElOVF9QTFVHSU5fTkFNRSxcbiAgaW5Ib3VzZUVzbGludFBsdWdpblxufSBmcm9tICcuL2VzbGludC1ydWxlcy9pbi1ob3VzZS1wbHVnaW4udHMnO1xuaW1wb3J0IHsgQ0xBVURFX1dPUktUUkVFU19JR05PUkVfR0xPQiB9IGZyb20gJy4vbGludC1pZ25vcmVzLnRzJztcblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3IgZGVmaW5pbmcgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERlZmluZUVzbGludENvbmZpZ3NPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgZnVuY3Rpb24gdGhhdCBidWlsZHMgY3VzdG9tIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb24gY29udGV4dC5cbiAgICogQHJldHVybnMgVGhlIGN1c3RvbSBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBjdXN0b21Db25maWdzPzogKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpID0+IExpbnRlci5Db25maWdbXTtcblxuICAvKipcbiAgICogQSBmdW5jdGlvbiB0aGF0IGVkaXRzIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBjb250ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSBFU0xpbnQgY29uZmlndXJhdGlvbiBjb250ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgZWRpdENvbnRleHQ/OiAoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogVGhlIG9sZGVzdCBOb2RlIHZlcnNpb24gc2hpcHBlZCBzb3VyY2UgaGFzIHRvIHJ1biBvbiwgYXMgYSBzZW12ZXIgcmFuZ2U6IGEgbGlicmFyeSB0aGF0IGFsc28gcnVucyBpbnNpZGUgYW5cbiAgICogb2xkZXIgcnVudGltZSB0aGFuIGl0cyBvd24gdG9vbGluZyAoYW4gT2JzaWRpYW4gcmVuZGVyZXIsIHNheSkgbmFtZXMgdGhhdCBydW50aW1lJ3MgTm9kZSBoZXJlLiBXaGVuIG9taXR0ZWQsXG4gICAqIGBlc2xpbnQtcGx1Z2luLW5gIHJlYWRzIHRoZSBgZW5naW5lc2AgZmllbGQgb2YgdGhlIHByb2plY3QncyBgcGFja2FnZS5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1Ob2RlVmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgcGFyYW1ldGVycyBmb3Ige0BsaW5rIGdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlnc1BhcmFtcyB7XG4gIC8qKlxuICAgKiBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb24gY29udGV4dC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQ7XG5cbiAgLyoqXG4gICAqIFRoZSBvbGRlc3QgTm9kZSB2ZXJzaW9uIHNoaXBwZWQgc291cmNlIGhhcyB0byBydW4gb24sIGFzIGEgc2VtdmVyIHJhbmdlLiBXaGVuIG9taXR0ZWQsIGBlc2xpbnQtcGx1Z2luLW5gIHJlYWRzXG4gICAqIHRoZSBgZW5naW5lc2AgZmllbGQgb2YgdGhlIHByb2plY3QncyBgcGFja2FnZS5qc29uYC5cbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1Ob2RlVmVyc2lvbj86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEdldE5vZGVDb21wYXRDb25maWdzUGFyYW1zIHtcbiAgcmVhZG9ubHkgY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dDtcbiAgcmVhZG9ubHkgbWluaW11bU5vZGVWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogVGhlIGNvbnRleHQgZm9yIGRlZmluaW5nIEVTTGludCBjb25maWd1cmF0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEVzbGludENvbmZpZ0NvbnRleHQge1xuICAvKipcbiAgICogVGhlIHJvb3QgY29uZmlndXJhdGlvbiBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByb290Q29uZmlnRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBzY3JpcHQgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2NyaXB0RmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBzb3VyY2UgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc291cmNlRmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xkZXJzIGhvbGRpbmcgdGhlIHByb2plY3QncyBzb3VyY2VzLCBieSBkZWZhdWx0IGBzcmNgIGFsb25lLiBBIHdvcmtzcGFjZSB3aG9zZSBwYWNrYWdlcyBlYWNoIGhhdmUgdGhlaXIgb3duXG4gICAqIGBzcmNgIGFkZHMgdGhlbSBoZXJlLCBzbyB0aGUgcnVsZXMga2V5ZWQgb24gYSBmaWxlJ3MgbmFtZSBpbnNpZGUgYSBzb3VyY2UgZm9sZGVyIHJlYWNoIHRob3NlIHBhY2thZ2VzIHRvby5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzb3VyY2VGb2xkZXJzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIC8qKlxuICAgKiBUaGUgdGVzdCBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB0ZXN0RmlsZXM6IHN0cmluZ1tdID0gW107XG5cbiAgLyoqXG4gICAqIFRoZSBhbGwgZmlsZXMuXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBhbGwgZmlsZXMuXG4gICAqL1xuICBwdWJsaWMgYWxsRmlsZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy50ZXN0RmlsZXMsIC4uLnRoaXMuc2NyaXB0RmlsZXMsIC4uLnRoaXMucm9vdENvbmZpZ0ZpbGVzLCAuLi50aGlzLnNvdXJjZUZpbGVzXTtcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGNvbnRleHQgb2YgYSBwcm9qZWN0IGxhaWQgb3V0IHRoZSBjb252ZW50aW9uYWwgd2F5OiBzb3VyY2VzIHVuZGVyIGBzcmNgLCBzY3JpcHRzIHVuZGVyIGBzY3JpcHRzYCwgdGVzdHNcbiAqIGJlc2lkZSB0aGUgc291cmNlcyBvciB1bmRlciBgX190ZXN0c19fYCwgYW5kIHRoZSBjb21taXRsaW50LCBFU0xpbnQgYW5kIFZpdGVzdCBjb25maWd1cmF0aW9ucyBhdCB0aGUgcm9vdC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgY29udGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRFc2xpbnRDb25maWdDb250ZXh0KCk6IEVzbGludENvbmZpZ0NvbnRleHQge1xuICBjb25zdCBjb250ZXh0ID0gbmV3IEVzbGludENvbmZpZ0NvbnRleHQoKTtcbiAgY29udGV4dC5zb3VyY2VGb2xkZXJzLnB1c2goUmVwb1BhdGhzLlNyYyk7XG4gIGNvbnRleHQucm9vdENvbmZpZ0ZpbGVzLnB1c2goXG4gICAgUmVwb1BhdGhzLkNvbW1pdGxpbnRDb25maWdUcyxcbiAgICBSZXBvUGF0aHMuRXNsaW50Q29uZmlnTXRzLFxuICAgIFJlcG9QYXRocy5WaXRlc3RDb25maWdUc1xuICApO1xuICBjb250ZXh0LnNjcmlwdEZpbGVzLnB1c2goXG4gICAgam9pbihSZXBvUGF0aHMuU2NyaXB0cywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUcylcbiAgKTtcbiAgY29udGV4dC5zb3VyY2VGaWxlcy5wdXNoKFxuICAgIGpvaW4oUmVwb1BhdGhzLlNyYywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUcyksXG4gICAgam9pbihSZXBvUGF0aHMuU3JjLCBSZXBvUGF0aHMuQW55UGF0aCwgUmVwb1BhdGhzLkFueVRzeClcbiAgKTtcbiAgY29udGV4dC50ZXN0RmlsZXMucHVzaChcbiAgICBqb2luKFJlcG9QYXRocy5UZXN0cywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUcyksXG4gICAgam9pbihSZXBvUGF0aHMuTW9ja3MsIFJlcG9QYXRocy5BbnlQYXRoLCBSZXBvUGF0aHMuQW55VHMpLFxuICAgIGpvaW4oUmVwb1BhdGhzLlNyYywgUmVwb1BhdGhzLkFueVBhdGgsIFJlcG9QYXRocy5BbnlUZXN0VHMpLFxuICAgIC8qXG4gICAgICogQSBidWlsZC1zY3JpcHQgdGVzdCBpcyBhIFRFU1QsIGFuZCB0aGlzIGNvbnZlbnRpb24gcHV0cyBpdCBpbiBhIGAqLnRlc3QudHNgIHVuZGVyIGBzY3JpcHRzL2AgLS0gYmVzaWRlIHRoZVxuICAgICAqIHNjcmlwdCBpdCBjb3ZlcnMgcmF0aGVyIHRoYW4gdW5kZXIgYHNyYy9gLiBXaXRob3V0IHRoaXMgZ2xvYiBpdCBtYXRjaGVkIGBzY3JpcHRGaWxlc2AgYWxvbmUsIHNvIGV2ZXJ5IHJlbGF4YXRpb25cbiAgICAgKiB0aGF0IGtleXMgb24gYGNvbnRleHQudGVzdEZpbGVzYCBtaXNzZWQgaXQ6IGBuby1tYWdpYy1udW1iZXJzYCBmaXJlZCBvbiBhIHN1aXRlIHdob3NlIHdob2xlIHN1YmplY3QgaXMgcmVjb3JkZWRcbiAgICAgKiBudW1iZXJzLCBhbmQgYHVuaWNvcm4vY29uc2lzdGVudC1mdW5jdGlvbi1zY29waW5nYCBvbiB0aGUgcGVyLXN1aXRlIGZpeHR1cmUgZmFjdG9yaWVzIHRoZSBibG9jayBhdCB0aGUgYm90dG9tXG4gICAgICogb2YgYGdldFVuaWNvcm5Db25maWdzYCBzYXlzIHRlc3RzIGV4aXN0IHRvIGFsbG93LlxuICAgICAqXG4gICAgICogVGhlIGZpbGUgbm93IG1hdGNoZXMgQk9USCBsaXN0cywgYW5kIHRoYXQgaXMgZGVsaWJlcmF0ZSByYXRoZXIgdGhhbiBhbiBvdmVybGFwIHRvIHJlc29sdmU6IGV2ZXJ5dGhpbmcgc2NvcGVkIHRvXG4gICAgICogYGNvbnRleHQuc2NyaXB0RmlsZXNgIG9ubHkgdHVybnMgcnVsZXMgT0ZGIChgaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXNgLCBgdW5pY29ybi9uby1wcm9jZXNzLWV4aXRgKSwgYm90aCBvZlxuICAgICAqIHdoaWNoIGEgc2NyaXB0IHRlc3Qgd2FudHMgYXMgbXVjaCBhcyB0aGUgc2NyaXB0IGRvZXMsIHNvIHRoZSB0d28gc2V0cyBjb21wb3NlIGluc3RlYWQgb2YgY29tcGV0aW5nLiBLZWVwIGl0IHRoYXRcbiAgICAgKiB3YXkgLS0gYSBydWxlIHR1cm5lZCBPTiBmb3IgYHNjcmlwdEZpbGVzYCB3b3VsZCBsYW5kIG9uIHRoZXNlIGZpbGVzIHRvbywgYW5kIGZsYXQtY29uZmlnIG9yZGVyLCBub3QgaW50ZW50LFxuICAgICAqIHdvdWxkIGRlY2lkZSB3aGljaCBzaWRlIHdvbi5cbiAgICAgKi9cbiAgICBqb2luKFJlcG9QYXRocy5TY3JpcHRzLCBSZXBvUGF0aHMuQW55UGF0aCwgUmVwb1BhdGhzLkFueVRlc3RUcylcbiAgKTtcbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBFU0xpbnQgY29uZmlndXJhdGlvbnMgb2YgYSBnZW5lcmljIFR5cGVTY3JpcHQgcHJvamVjdC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBwYXJhbWV0ZXJzIGZvciBkZWZpbmluZyBFU0xpbnQgY29uZmlndXJhdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgRVNMaW50IGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lRXNsaW50Q29uZmlncyhvcHRpb25zOiBEZWZpbmVFc2xpbnRDb25maWdzT3B0aW9ucyA9IHt9KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3QgY29udGV4dCA9IGNyZWF0ZURlZmF1bHRFc2xpbnRDb25maWdDb250ZXh0KCk7XG4gIG9wdGlvbnMuZWRpdENvbnRleHQ/Lihjb250ZXh0KTtcbiAgY29uc3QgY3VzdG9tQ29uZmlncyA9IG9wdGlvbnMuY3VzdG9tQ29uZmlncz8uKGNvbnRleHQpID8/IFtdO1xuXG4gIHJldHVybiBkZWZpbmVDb25maWcoXG4gICAgLi4uZ2V0R2xvYmFsSWdub3JlQ29uZmlncygpLFxuICAgIC4uLmdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzKHtcbiAgICAgIGNvbnRleHQsXG4gICAgICAuLi4ob3B0aW9ucy5taW5pbXVtTm9kZVZlcnNpb24gIT09IHVuZGVmaW5lZCAmJiB7IG1pbmltdW1Ob2RlVmVyc2lvbjogb3B0aW9ucy5taW5pbXVtTm9kZVZlcnNpb24gfSlcbiAgICB9KSxcbiAgICAuLi5jdXN0b21Db25maWdzXG4gICk7XG59XG5cbi8qKlxuICogVGhlIGNvbmZpZ3VyYXRpb25zIG9mIEVTTGludCdzIG93biBydWxlcy4gQSBwcm9qZWN0LXR5cGUgbGF5ZXIgcmVhZHMgaXQgdG8gbGVhcm4gd2hpY2ggY29yZSBydWxlcyB0aGlzXG4gKiBjb25maWd1cmF0aW9uIHNldHMgaXRzZWxmLlxuICpcbiAqIEBwYXJhbSBjb250ZXh0IC0gVGhlIEVTTGludCBjb25maWd1cmF0aW9uIGNvbnRleHQuXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFc2xpbnRDb3JlQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW2VzbGludC5jb25maWdzLnJlY29tbWVuZGVkXSxcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBydWxlczoge1xuICAgICAgICAnYWNjZXNzb3ItcGFpcnMnOiAnZXJyb3InLFxuICAgICAgICAnYXJyYXktY2FsbGJhY2stcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ2NhbWVsY2FzZSc6ICdlcnJvcicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBydWxlIHJlcG9ydHMgcGVyIGNvbW1lbnQgVE9LRU4sIHNvIGV2ZXJ5IGNvbnRpbnVhdGlvbiBsaW5lIG9mIGEgd3JhcHBlZCBgLy9gIGNvbW1lbnQgaXMgaXRzIG93biB0b2tlblxuICAgICAgICAgKiB0aGF0IHdvdWxkIGhhdmUgdG8gc3RhcnQgd2l0aCBhIGNhcGl0YWwg4oCUIHdoaWNoIGlzIGhvdyBwcm9zZSBlbmRzIHVwIHdpdGggY2FwaXRhbHMgbWlkLXNlbnRlbmNlLlxuICAgICAgICAgKiBgaWdub3JlQ29uc2VjdXRpdmVDb21tZW50c2AgZXhlbXB0cyBhIGxpbmUgY29tbWVudCB0aGF0IGRpcmVjdGx5IGZvbGxvd3MgYW5vdGhlciBvbmUsIHdoaWNoIGlzIGV4YWN0bHkgdGhlXG4gICAgICAgICAqIHNoYXBlIG9mIGEgd3JhcHBlZCBibG9jaywgd2hpbGUgc3RpbGwgaG9sZGluZyBpdHMgRklSU1QgbGluZSB0byBhIGNhcGl0YWwuIEJsb2NrIGNvbW1lbnRzIG5lZWQgbm8gc3VjaFxuICAgICAgICAgKiBvcHRpb246IGEgYmxvY2sgY29tbWVudCBpcyBhIHNpbmdsZSB0b2tlbiBob3dldmVyIG1hbnkgbGluZXMgaXQgc3BhbnMuXG4gICAgICAgICAqIGBpZ25vcmVQYXR0ZXJuYCBjb3ZlcnMgdGhlIGhhbGYgdGhhdCBsZWF2ZXMgYmVoaW5kOiBhIGNvbW1lbnQgd2hvc2UgRklSU1Qgd29yZCBpcyBhIGNhbWVsQ2FzZSBpZGVudGlmaWVyIGlzXG4gICAgICAgICAqIGV4ZW1wdCwgc28gYSBjb21tZW50IHRoYXQgb3BlbnMgYnkgbmFtaW5nIGEgc3ltYm9sIGtlZXBzIHRoZSBuYW1lIGEgcmVhZGVyIGNhbiBncmVwIGluc3RlYWQgb2YgYSBQYXNjYWxDYXNlXG4gICAgICAgICAqIG9uZSB0aGF0IGV4aXN0cyBub3doZXJlLiBUaGUgcnVsZSBhbmNob3JzIHRoZSBwYXR0ZXJuIGF0IHRoZSBzdGFydCBvZiB0aGUgY29tbWVudCBhbmQgYFthLXpBLVowLTldYCBtYXRjaGVzXG4gICAgICAgICAqIG5vIHdoaXRlc3BhY2UsIHNvIGl0IGNhbiBvbmx5IGV2ZXIgbWF0Y2ggdGhhdCBmaXJzdCB3b3JkIOKAlCBvcmRpbmFyeSBsb3dlcmNhc2UgcHJvc2Ugc3RheXMgcmVwb3J0ZWQuIEJvdGhcbiAgICAgICAgICogb3B0aW9uIGJhZ3MgbmVlZCBpdCwgYW5kIGBibG9ja2Aga2VlcHMgaXRzIGB2OGAgZXhlbXB0aW9uIGJ5IGFsdGVybmF0aW9uIHJhdGhlciB0aGFuIGxvc2luZyBpdC5cbiAgICAgICAgICovXG4gICAgICAgICdjYXBpdGFsaXplZC1jb21tZW50cyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdhbHdheXMnLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGJsb2NrOiB7IGlnbm9yZVBhdHRlcm46ICd2OHxbYS16XVthLXpBLVowLTldKltBLVpdJyB9LFxuICAgICAgICAgICAgbGluZTogeyBpZ25vcmVDb25zZWN1dGl2ZUNvbW1lbnRzOiB0cnVlLCBpZ25vcmVQYXR0ZXJuOiAnW2Etel1bYS16QS1aMC05XSpbQS1aXScgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ2NvbXBsZXhpdHknOiAnZXJyb3InLFxuICAgICAgICAnY29uc2lzdGVudC10aGlzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2N1cmx5JzogJ2Vycm9yJyxcbiAgICAgICAgJ2RlZmF1bHQtY2FzZSc6ICdlcnJvcicsXG4gICAgICAgICdkZWZhdWx0LWNhc2UtbGFzdCc6ICdlcnJvcicsXG4gICAgICAgICdkZWZhdWx0LXBhcmFtLWxhc3QnOiAnZXJyb3InLFxuICAgICAgICAnZXFlcWVxJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtbmFtZS1tYXRjaGluZyc6ICdlcnJvcicsXG4gICAgICAgICdmdW5jLW5hbWVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2Z1bmMtc3R5bGUnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICAnZGVjbGFyYXRpb24nLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93QXJyb3dGdW5jdGlvbnM6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnZ3JvdXBlZC1hY2Nlc3Nvci1wYWlycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgICdnZXRCZWZvcmVTZXQnXG4gICAgICAgIF0sXG4gICAgICAgICdndWFyZC1mb3ItaW4nOiAnZXJyb3InLFxuICAgICAgICAnbm8tYWxlcnQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tYXJyYXktY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tYml0d2lzZSc6ICdlcnJvcicsXG4gICAgICAgICduby1jYWxsZXInOiAnZXJyb3InLFxuICAgICAgICAnbm8tY29uc29sZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICd3YXJuJyxcbiAgICAgICAgICAgICAgJ2Vycm9yJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ25vLWNvbnN0cnVjdG9yLXJldHVybic6ICdlcnJvcicsXG4gICAgICAgICduby1kaXYtcmVnZXgnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZWxzZS1yZXR1cm4nOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvd0Vsc2VJZjogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1lbXB0eS1mdW5jdGlvbic6ICdlcnJvcicsXG4gICAgICAgICduby1leHRlbmQtbmF0aXZlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWV4dHJhLWJpbmQnOiAnZXJyb3InLFxuICAgICAgICAnbm8tZXh0cmEtbGFiZWwnOiAnZXJyb3InLFxuICAgICAgICAnbm8taW1wbGljaXQtY29lcmNpb24nOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBhbGxvdzogW1xuICAgICAgICAgICAgICAnISEnXG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAnbm8taW1wbGllZC1ldmFsJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWlubmVyLWRlY2xhcmF0aW9ucyc6ICdlcnJvcicsXG4gICAgICAgICduby1pdGVyYXRvcic6ICdlcnJvcicsXG4gICAgICAgICduby1sYWJlbC12YXInOiAnZXJyb3InLFxuICAgICAgICAnbm8tbGFiZWxzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvbmUtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLWxvbmVseS1pZic6ICdlcnJvcicsXG4gICAgICAgICduby1sb29wLWZ1bmMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tbWFnaWMtbnVtYmVycyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRldGVjdE9iamVjdHM6IHRydWUsXG4gICAgICAgICAgICBlbmZvcmNlQ29uc3Q6IHRydWUsXG4gICAgICAgICAgICBpZ25vcmU6IFtcbiAgICAgICAgICAgICAgLTEsXG4gICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgIDFcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgICduby1tdWx0aS1hc3NpZ24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tbXVsdGktc3RyJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5lZ2F0ZWQtY29uZGl0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5lc3RlZC10ZXJuYXJ5JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5ldy1mdW5jJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLW5ldy13cmFwcGVycyc6ICdlcnJvcicsXG4gICAgICAgICduby1vYmplY3QtY29uc3RydWN0b3InOiAnZXJyb3InLFxuICAgICAgICAnbm8tb2N0YWwtZXNjYXBlJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXByb21pc2UtZXhlY3V0b3ItcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXByb3RvJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXJlc3RyaWN0ZWQtc3ludGF4JzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgLi4ubm9SZXN0cmljdGVkU3ludGF4UnVsZUVudHJpZXNcbiAgICAgICAgXSxcbiAgICAgICAgJ25vLXJldHVybi1hc3NpZ24nOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2NyaXB0LXVybCc6ICdlcnJvcicsXG4gICAgICAgICduby1zZWxmLWNvbXBhcmUnOiAnZXJyb3InLFxuICAgICAgICAnbm8tc2VxdWVuY2VzJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXNoYWRvdyc6ICdlcnJvcicsXG4gICAgICAgICduby10ZW1wbGF0ZS1jdXJseS1pbi1zdHJpbmcnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdGhyb3ctbGl0ZXJhbCc6ICdlcnJvcicsXG4gICAgICAgICduby11bm1vZGlmaWVkLWxvb3AtY29uZGl0aW9uJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVubmVlZGVkLXRlcm5hcnknOiAnZXJyb3InLFxuICAgICAgICAnbm8tdW5yZWFjaGFibGUtbG9vcCc6ICdlcnJvcicsXG4gICAgICAgICduby11bnVzZWQtZXhwcmVzc2lvbnMnOiAnZXJyb3InLFxuICAgICAgICAnbm8tdXNlbGVzcy1hc3NpZ25tZW50JzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtY2FsbCc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbXB1dGVkLWtleSc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbmNhdCc6ICdlcnJvcicsXG4gICAgICAgICduby11c2VsZXNzLWNvbnN0cnVjdG9yJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtcmVuYW1lJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXVzZWxlc3MtcmV0dXJuJzogJ2Vycm9yJyxcbiAgICAgICAgJ25vLXZhcic6ICdlcnJvcicsXG4gICAgICAgICduby12b2lkJzogJ2Vycm9yJyxcbiAgICAgICAgJ29iamVjdC1zaG9ydGhhbmQnOiAnZXJyb3InLFxuICAgICAgICAnb3BlcmF0b3ItYXNzaWdubWVudCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItYXJyb3ctY2FsbGJhY2snOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLWNvbnN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1leHBvbmVudGlhdGlvbi1vcGVyYXRvcic6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItbmFtZWQtY2FwdHVyZS1ncm91cCc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItbnVtZXJpYy1saXRlcmFscyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItb2JqZWN0LWhhcy1vd24nOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLW9iamVjdC1zcHJlYWQnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXByb21pc2UtcmVqZWN0LWVycm9ycyc6ICdlcnJvcicsXG4gICAgICAgICdwcmVmZXItcmVnZXgtbGl0ZXJhbHMnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXJlc3QtcGFyYW1zJzogJ2Vycm9yJyxcbiAgICAgICAgJ3ByZWZlci1zcHJlYWQnOiAnZXJyb3InLFxuICAgICAgICAncHJlZmVyLXRlbXBsYXRlJzogJ2Vycm9yJyxcbiAgICAgICAgJ3JhZGl4JzogJ2Vycm9yJyxcbiAgICAgICAgJ3JlcXVpcmUtYXRvbWljLXVwZGF0ZXMnOiAnZXJyb3InLFxuICAgICAgICAncmVxdWlyZS1hd2FpdCc6ICdlcnJvcicsXG4gICAgICAgICdzeW1ib2wtZGVzY3JpcHRpb24nOiAnZXJyb3InLFxuICAgICAgICAndW5pY29kZS1ib20nOiAnZXJyb3InLFxuICAgICAgICAndmFycy1vbi10b3AnOiAnZXJyb3InLFxuICAgICAgICAneW9kYSc6ICdlcnJvcidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICduby1tYWdpYy1udW1iZXJzJzogJ29mZidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG4vKipcbiAqIFRoZSBnbG9iYWwgaWdub3JlczogZXZlcnl0aGluZyBgLmdpdGlnbm9yZWAgbmFtZXMsIHBsdXMgQ2xhdWRlIENvZGUncyB3b3JrdHJlZSBmb2xkZXIuXG4gKlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2xvYmFsSWdub3JlQ29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFxuICAgIC4uLmdldEdpdElnbm9yZUNvbmZpZ3MoKSxcbiAgICAvKlxuICAgICAqIE9uIHRvcCBvZiBgLmdpdGlnbm9yZWAsIG5vdCBpbnN0ZWFkIG9mIGl0OiBnaXQgZXhjbHVkZXMgQ2xhdWRlIENvZGUncyB3b3JrdHJlZSBmb2xkZXIgdGhyb3VnaFxuICAgICAqIGAuZ2l0L2luZm8vZXhjbHVkZWAsIHdoaWNoIGBpbmNsdWRlSWdub3JlRmlsZWAgYWJvdmUgZG9lcyBub3QgcmVhZC4gU2VlIGBsaW50LWlnbm9yZXMudHNgLlxuICAgICAqL1xuICAgIGdsb2JhbElnbm9yZXMoW0NMQVVERV9XT1JLVFJFRVNfSUdOT1JFX0dMT0JdLCAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9jbGF1ZGUtd29ya3RyZWVzJylcbiAgKTtcbn1cblxuLyoqXG4gKiBUaGUgZ2VuZXJpYyBsYXllcnMgb2YgdGhlIHNoYXJlZCBjb25maWd1cmF0aW9uLCB3aXRob3V0IHRoZSBnbG9iYWwgaWdub3Jlcy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHBhcmFtZXRlcnMuXG4gKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRUeXBlU2NyaXB0RXNsaW50Q29uZmlncyhwYXJhbXM6IEdldFR5cGVTY3JpcHRFc2xpbnRDb25maWdzUGFyYW1zKTogTGludGVyLkNvbmZpZ1tdIHtcbiAgY29uc3QgeyBjb250ZXh0IH0gPSBwYXJhbXM7XG4gIHJldHVybiBkZWZpbmVDb25maWcoXG4gICAgLi4uZ2V0RXNsaW50Q29yZUNvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0VHNlc2xpbnRDb25maWdzKGNvbnRleHQpLFxuICAgIC4uLmdldFN0eWxpc3RpY0NvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0SW1wb3J0WENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0UGVyZmVjdGlvbmlzdENvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0VW5pY29ybkNvbmZpZ3MoY29udGV4dCksXG4gICAgLi4uZ2V0RXNsaW50SW1wb3J0UmVzb2x2ZXJUeXBlc2NyaXB0Q29uZmlncygpLFxuICAgIC4uLmdldEVzbGludENvbW1lbnRzQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXRJbkhvdXNlUGx1Z2luQ29uZmlncyhjb250ZXh0KSxcbiAgICAuLi5nZXROb2RlQ29tcGF0Q29uZmlncyh7IGNvbnRleHQsIG1pbmltdW1Ob2RlVmVyc2lvbjogcGFyYW1zLm1pbmltdW1Ob2RlVmVyc2lvbiB9KVxuICApO1xufVxuXG5mdW5jdGlvbiBnZXRFc2xpbnRDb21tZW50c0NvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgcmVjb21tZW5kZWRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICBleHRlbmRzOiBbY29tbWVudHNDb25maWdzLnJlY29tbWVuZGVkXSxcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBydWxlczoge1xuICAgICAgICAnQGVzbGludC1jb21tdW5pdHkvZXNsaW50LWNvbW1lbnRzL3JlcXVpcmUtZGVzY3JpcHRpb24nOiAnZXJyb3InXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0RXNsaW50SW1wb3J0UmVzb2x2ZXJUeXBlc2NyaXB0Q29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBzZXR0aW5nczoge1xuICAgICAgICAnaW1wb3J0LXgvcmVzb2x2ZXItbmV4dCc6IFtcbiAgICAgICAgICBjcmVhdGVUeXBlU2NyaXB0SW1wb3J0UmVzb2x2ZXIoe1xuICAgICAgICAgICAgYWx3YXlzVHJ5VHlwZXM6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0R2l0SWdub3JlQ29uZmlncygpOiBMaW50ZXIuQ29uZmlnW10ge1xuICBjb25zdCBnaXRpZ25vcmVQYXRoID0gam9pbihnZXRSb290Rm9sZGVyKCkgPz8gJycsICcuZ2l0aWdub3JlJyk7XG4gIHJldHVybiBleGlzdHNTeW5jKGdpdGlnbm9yZVBhdGgpID8gW2luY2x1ZGVJZ25vcmVGaWxlKGdpdGlnbm9yZVBhdGgpXSA6IFtdO1xufVxuXG5mdW5jdGlvbiBnZXRJbXBvcnRYQ29uZmlncyhjb250ZXh0OiBFc2xpbnRDb25maWdDb250ZXh0KTogTGludGVyLkNvbmZpZ1tdIHtcbiAgcmV0dXJuIGRlZmluZUNvbmZpZyhbXG4gICAge1xuICAgICAgZXh0ZW5kczogW1xuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MucmVjb21tZW5kZWQsXG4gICAgICAgIGVzbGludFBsdWdpbkltcG9ydFhGbGF0Q29uZmlncy50eXBlc2NyaXB0LFxuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3MuZXJyb3JzLFxuICAgICAgICBlc2xpbnRQbHVnaW5JbXBvcnRYRmxhdENvbmZpZ3Mud2FybmluZ3NcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L2NvbnNpc3RlbnQtdHlwZS1zcGVjaWZpZXItc3R5bGUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvZXh0ZW5zaW9ucyc6IFsnZXJyb3InLCAnaWdub3JlUGFja2FnZXMnXSxcbiAgICAgICAgJ2ltcG9ydC14L2ZpcnN0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L2ltcG9ydHMtZmlyc3QnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbmV3bGluZS1hZnRlci1pbXBvcnQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tYWJzb2x1dGUtcGF0aCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1hbWQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tYW5vbnltb3VzLWRlZmF1bHQtZXhwb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWNvbW1vbmpzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWN5Y2xlJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlZmF1bHQtZXhwb3J0JzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWRlcHJlY2F0ZWQnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZHVwbGljYXRlcyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1keW5hbWljLXJlcXVpcmUnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tZW1wdHktbmFtZWQtYmxvY2tzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzJzogJ2Vycm9yJyxcbiAgICAgICAgJ2ltcG9ydC14L25vLWltcG9ydC1tb2R1bGUtZXhwb3J0cyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1tdXRhYmxlLWV4cG9ydHMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tbmFtZWQtZGVmYXVsdCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1uYW1lc3BhY2UnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tcmVsYXRpdmUtcGFja2FnZXMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8tcmVzdHJpY3RlZC1wYXRocyc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby1zZWxmLWltcG9ydCc6ICdlcnJvcicsXG4gICAgICAgICdpbXBvcnQteC9uby11bmFzc2lnbmVkLWltcG9ydCc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGFsbG93OiBbXG4gICAgICAgICAgICAgICcqKi8qLmNzcycsXG4gICAgICAgICAgICAgICcqKi8qLnNhc3MnLFxuICAgICAgICAgICAgICAnKiovKi5zY3NzJ1xuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ2ltcG9ydC14L25vLXVudXNlZC1tb2R1bGVzJzogJ29mZicsXG4gICAgICAgICdpbXBvcnQteC9uby11c2VsZXNzLXBhdGgtc2VnbWVudHMnOiAnZXJyb3InLFxuICAgICAgICAnaW1wb3J0LXgvbm8td2VicGFjay1sb2FkZXItc3ludGF4JzogJ2Vycm9yJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZmlsZXM6IGNvbnRleHQuc2NyaXB0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAnaW1wb3J0LXgvbm8tbm9kZWpzLW1vZHVsZXMnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLy8gQSB0ZXN0IHJ1bnMgdW5kZXIgdGhlIHRlc3QgcnVubmVyIGluIE5vZGUgYW5kIGlzIG5ldmVyIGJ1bmRsZWQgaW50byBhbnl0aGluZyB0aGF0IHNoaXBzLlxuICAgICAgZmlsZXM6IGNvbnRleHQudGVzdEZpbGVzLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ2ltcG9ydC14L25vLW5vZGVqcy1tb2R1bGVzJzogJ29mZidcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnJvb3RDb25maWdGaWxlcyxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdpbXBvcnQteC9uby1kZWZhdWx0LWV4cG9ydCc6ICdvZmYnXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0SW5Ib3VzZVBsdWdpbkNvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LmFsbEZpbGVzKCksXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIFtJTl9IT1VTRV9FU0xJTlRfUExVR0lOX05BTUVdOiBpbkhvdXNlRXNsaW50UGx1Z2luXG4gICAgICB9LFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8tYXN5bmMtY2FsbGJhY2stdG8tdW5zYWZlLXJldHVybic6ICdlcnJvcicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIE1lYXN1cmVkIG92ZXIgMzIgcGx1Z2lucyBidWlsdCBvbiB0aGlzIGNvbmZpZyBiZWZvcmUgaXQgd2FzIHR1cm5lZCBvbiAoMjAyNi0wOS0yNCk6IDI5IGhhZCBubyBmaW5kaW5nLFxuICAgICAgICAgKiB0aGUgb3RoZXIgdGhyZWUgaGFkIDggYmV0d2VlbiB0aGVtLCBldmVyeSBvbmUgYSBnZW51aW5lbHkgZGVhZCBsaW5rLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8tdW5yZXNvbHZlZC1qc2RvYy1saW5rJzogJ2Vycm9yJyxcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8tdW51c2VkLXBhcmFtcy1tZW1iZXJzJzogJ2Vycm9yJyxcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcyc6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2gnOiAnZXJyb3InLFxuICAgICAgICAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9wcmVmZXItbG9naWNhbC1vcGVyYXRvci1vdmVyLXRlcm5hcnknOiAnZXJyb3InLFxuICAgICAgICAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9wcmVmZXItbm9vcC1hc3luYyc6ICdlcnJvcicsXG4gICAgICAgICd0eXBlc2NyaXB0LWRldi10b29sa2l0L3JlYWRvbmx5LXBhcmFtcy1vcHRpb25zLXJlc3VsdC1tZW1iZXJzJzogJ2Vycm9yJyxcbiAgICAgICAgJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQvcmVxdWlyZS1tZXRob2QtdGVtcGxhdGUnOiAnZXJyb3InLFxuICAgICAgICAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdC9yZXF1aXJlLXN1cGVyLWNhbGwnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldE5vZGVDb21wYXRDb25maWdzKHBhcmFtczogR2V0Tm9kZUNvbXBhdENvbmZpZ3NQYXJhbXMpOiBMaW50ZXIuQ29uZmlnW10ge1xuICBjb25zdCB7IGNvbnRleHQsIG1pbmltdW1Ob2RlVmVyc2lvbiB9ID0gcGFyYW1zO1xuICBjb25zdCB2ZXJzaW9uT3B0aW9ucyA9IG1pbmltdW1Ob2RlVmVyc2lvbiA9PT0gdW5kZWZpbmVkID8ge30gOiB7IHZlcnNpb246IG1pbmltdW1Ob2RlVmVyc2lvbiB9O1xuXG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGZpbGVzOiBjb250ZXh0LnNvdXJjZUZpbGVzLFxuICAgICAgaWdub3JlczogW1xuICAgICAgICAuLi5jb250ZXh0LnRlc3RGaWxlcyxcbiAgICAgICAgLy8gRGV2LW9ubHkgdG9vbGluZyAoYnVpbGQsIGxpbnQsIHZlcnNpb24pIHJ1bnMgdmlhIGBqaXRpYCBpbiB0aGUgZGV2ZWxvcGVyJ3MgTm9kZSBlbnZpcm9ubWVudCBhbmQgbmV2ZXIgc2hpcHMsIHNvIHRoZSBzaGlwcGVkIHNvdXJjZSdzIE5vZGUgZmxvb3IgZG9lcyBub3QgYXBwbHkgdG8gaXQuXG4gICAgICAgIC4uLmNvbnRleHQuc2NyaXB0RmlsZXNcbiAgICAgIF0sXG4gICAgICBwbHVnaW5zOiB7XG4gICAgICAgIG46IG5vZGVQbHVnaW5cbiAgICAgIH0sXG4gICAgICBydWxlczoge1xuICAgICAgICAnbi9uby11bnN1cHBvcnRlZC1mZWF0dXJlcy9lcy1idWlsdGlucyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHZlcnNpb25PcHRpb25zXG4gICAgICAgIF0sXG4gICAgICAgICduL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL25vZGUtYnVpbHRpbnMnOiBbXG4gICAgICAgICAgJ2Vycm9yJyxcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBgQmxvYmAgYW5kIGBGaWxlYCBhcmUgRE9NIHdlYiBnbG9iYWxzIHByZXNlbnQgaW4gZXZlcnkgc3VwcG9ydGVkIGJyb3dzZXIgZW5naW5lLCBidXQgdGhlIHJ1bGUgYWxzbyBrbm93cyB0aGVtIGFzIE5vZGUncyBleHBlcmltZW50YWwgYnVpbHRpbnMgYW5kIGNhbm5vdCB0ZWxsIHdoaWNoIGlzIG1lYW50LiBJZ25vcmUgdGhlbSBnbG9iYWxseTsgZ2VudWluZWx5IG5ld2VyIEFQSXMgKGUuZy4gYEFib3J0U2lnbmFsLmFueWApIHN0YXkgZmxhZ2dlZC5cbiAgICAgICAgICAgIGlnbm9yZXM6IFtcbiAgICAgICAgICAgICAgJ0Jsb2InLFxuICAgICAgICAgICAgICAnRmlsZSdcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAuLi52ZXJzaW9uT3B0aW9uc1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfVxuICAgIH1cbiAgXSk7XG59XG5cbmZ1bmN0aW9uIGdldFBlcmZlY3Rpb25pc3RDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFt7XG4gICAgZXh0ZW5kczogW3BlcmZlY3Rpb25pc3RDb25maWdzWydyZWNvbW1lbmRlZC1hbHBoYWJldGljYWwnXV0sXG4gICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKVxuICB9XSk7XG59XG5cbmZ1bmN0aW9uIGdldFN0eWxpc3RpY0NvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGV4dGVuZHM6IFtcbiAgICAgICAgc3R5bGlzdGljLmNvbmZpZ3MucmVjb21tZW5kZWQsXG4gICAgICAgIHN0eWxpc3RpYy5jb25maWdzLmN1c3RvbWl6ZSh7XG4gICAgICAgICAgYXJyb3dQYXJlbnM6IHRydWUsXG4gICAgICAgICAgYnJhY2VTdHlsZTogJzF0YnMnLFxuICAgICAgICAgIGNvbW1hRGFuZ2xlOiAnbmV2ZXInLFxuICAgICAgICAgIHNlbWk6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgcnVsZXM6IHtcbiAgICAgICAgJ0BzdHlsaXN0aWMvZ2VuZXJhdG9yLXN0YXItc3BhY2luZyc6ICdvZmYnLFxuICAgICAgICAnQHN0eWxpc3RpYy9pbmRlbnQnOiAnb2ZmJyxcbiAgICAgICAgJ0BzdHlsaXN0aWMvaW5kZW50LWJpbmFyeS1vcHMnOiAnb2ZmJyxcbiAgICAgICAgJ0BzdHlsaXN0aWMvanN4LW9uZS1leHByZXNzaW9uLXBlci1saW5lJzogJ29mZicsXG4gICAgICAgICdAc3R5bGlzdGljL25vLWV4dHJhLXNlbWknOiAnZXJyb3InLFxuICAgICAgICAnQHN0eWxpc3RpYy9vYmplY3QtY3VybHktbmV3bGluZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIEV4cG9ydERlY2xhcmF0aW9uOiB7XG4gICAgICAgICAgICAgIG1pblByb3BlcnRpZXM6IDIsXG4gICAgICAgICAgICAgIG11bHRpbGluZTogdHJ1ZVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIEltcG9ydERlY2xhcmF0aW9uOiB7XG4gICAgICAgICAgICAgIG1pblByb3BlcnRpZXM6IDIsXG4gICAgICAgICAgICAgIG11bHRpbGluZTogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ0BzdHlsaXN0aWMvb3BlcmF0b3ItbGluZWJyZWFrJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgJ2JlZm9yZScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgICAgICAgICc9JzogJ2FmdGVyJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ0BzdHlsaXN0aWMvcXVvdGVzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgJ3NpbmdsZScsXG4gICAgICAgICAge1xuICAgICAgICAgICAgYWxsb3dUZW1wbGF0ZUxpdGVyYWxzOiAnbmV2ZXInXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0VHNlc2xpbnRDb25maWdzKGNvbnRleHQ6IEVzbGludENvbmZpZ0NvbnRleHQpOiBMaW50ZXIuQ29uZmlnW10ge1xuICByZXR1cm4gZGVmaW5lQ29uZmlnKFtcbiAgICB7XG4gICAgICBleHRlbmRzOiBbXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgX2RlZmF1bHRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICAgIC4uLnRzZXNsaW50LmNvbmZpZ3Muc3RyaWN0VHlwZUNoZWNrZWQsXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQteC9uby1uYW1lZC1hcy1kZWZhdWx0LW1lbWJlciAtLSBUaGUgZGVmYXVsdCBleHBvcnQgbmFtZSBgX2RlZmF1bHRgIGlzIHRvbyBjb25mdXNpbmcuXG4gICAgICAgIC4uLnRzZXNsaW50LmNvbmZpZ3Muc3R5bGlzdGljVHlwZUNoZWNrZWRcbiAgICAgIF0sXG4gICAgICBmaWxlczogY29udGV4dC5hbGxGaWxlcygpLFxuICAgICAgbGFuZ3VhZ2VPcHRpb25zOiB7XG4gICAgICAgIHBhcnNlck9wdGlvbnM6IHtcbiAgICAgICAgICBlY21hRmVhdHVyZXM6IHtcbiAgICAgICAgICAgIGpzeDogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcHJvamVjdFNlcnZpY2U6IHRydWUsXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYHRzY29uZmlnUm9vdERpcmAgaXMgYSBgdHlwZXNjcmlwdC1lc2xpbnRgIHBhcnNlciBvcHRpb24uXG4gICAgICAgICAgdHNjb25maWdSb290RGlyOiBnZXRSb290Rm9sZGVyKCkgPz8gJydcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtZnVuY3Rpb24tcmV0dXJuLXR5cGUnOiAnZXJyb3InLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1lbWJlci1hY2Nlc3NpYmlsaXR5JzogJ2Vycm9yJyxcbiAgICAgICAgLy8gVGhlIHJ1bGUncyBvd24gYHByb3BlcnR5YCBkZWZhdWx0LCBzcGVsbGVkIGFzIGEgYmFyZSBzZXZlcml0eSBzbyBpdCBzdGF5cyB0aGUgcnVsZSdzIGRlZmF1bHQgcmF0aGVyIHRoYW4gYSBjb3B5IG9mIGl0LlxuICAgICAgICAvLyBEbyBOT1QgcGFzcyBgJ21ldGhvZCdgIGZvciB0aWRpbmVzczogdGhlIG1ldGhvZCBmb3JtIGtlZXBzIHBhcmFtZXRlcnMgYml2YXJpYW50LCBkcm9wcyBgcmVhZG9ubHlgICh0aGUgcnVsZSdzIG93biBmaXhlclxuICAgICAgICAvLyBtZXNzYWdlIHNheXMgc28pLCBhbmQgbWFrZXMgYEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZGAgZmlyZSBvbiBldmVyeSBmb3J3YXJkZWQgYmFnIG1lbWJlciwgd2hpY2ggaXMgd2hhdCB0aGVcbiAgICAgICAgLy8gYHRoaXM6IHZvaWRgIGJvaWxlcnBsYXRlIHVzZWQgdG8gcGF5IGZvci4gRG8gTk9UIGRlbGV0ZSB0aGUgbGluZSBlaXRoZXIgLSB0aGUgcnVsZSBpcyBpbiBubyBwcmVzZXQsIHNvIHRoYXQgdHVybnMgaXQgb2ZmLlxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L21ldGhvZC1zaWduYXR1cmUtc3R5bGUnOiAnZXJyb3InLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLWZsb2F0aW5nLXByb21pc2VzJzogWydlcnJvcicsIHtcbiAgICAgICAgICBjaGVja1RoZW5hYmxlczogdHJ1ZVxuICAgICAgICB9XSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9uby1pbnZhbGlkLXZvaWQtdHlwZSc6IFsnZXJyb3InLCB7XG4gICAgICAgICAgYWxsb3dBc1RoaXNQYXJhbWV0ZXI6IHRydWVcbiAgICAgICAgfV0sXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcyc6IFsnZXJyb3InLCB7XG4gICAgICAgICAgYWxsb3dlZE5hbWVzOiBbXG4gICAgICAgICAgICAndGhhdCdcbiAgICAgICAgICBdXG4gICAgICAgIH1dLFxuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gYGFyZ3NgIGlzIGFuIEVTTGludCBydWxlIG9wdGlvbiBuYW1lLlxuICAgICAgICAgICAgYXJnczogJ2FsbCcsXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyAtLSBgYXJnc0lnbm9yZVBhdHRlcm5gIGlzIGEgYHR5cGVzY3JpcHQtZXNsaW50YCBydWxlIG9wdGlvbiBuYW1lLlxuICAgICAgICAgICAgYXJnc0lnbm9yZVBhdHRlcm46ICdeXycsXG4gICAgICAgICAgICBjYXVnaHRFcnJvcnM6ICdhbGwnLFxuICAgICAgICAgICAgY2F1Z2h0RXJyb3JzSWdub3JlUGF0dGVybjogJ15fJyxcbiAgICAgICAgICAgIGRlc3RydWN0dXJlZEFycmF5SWdub3JlUGF0dGVybjogJ15fJyxcbiAgICAgICAgICAgIGlnbm9yZVJlc3RTaWJsaW5nczogdHJ1ZSxcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25hbWUtcmVwbGFjZW1lbnRzIC0tIGB2YXJzSWdub3JlUGF0dGVybmAgaXMgYSBgdHlwZXNjcmlwdC1lc2xpbnRgIHJ1bGUgb3B0aW9uIG5hbWUuXG4gICAgICAgICAgICB2YXJzSWdub3JlUGF0dGVybjogJ15fJ1xuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgJ0B0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItcmVhZG9ubHknOiAnZXJyb3InXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBmaWxlczogY29udGV4dC50ZXN0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAnQHR5cGVzY3JpcHQtZXNsaW50L2RvdC1ub3RhdGlvbic6IFsnZXJyb3InLCB7XG4gICAgICAgICAgYWxsb3dQcml2YXRlQ2xhc3NQcm9wZXJ0eUFjY2VzczogdHJ1ZSxcbiAgICAgICAgICBhbGxvd1Byb3RlY3RlZENsYXNzUHJvcGVydHlBY2Nlc3M6IHRydWVcbiAgICAgICAgfV0sXG4gICAgICAgICdAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgc2V0dGluZ3M6IHtcbiAgICAgICAgcmVhY3Q6IHtcbiAgICAgICAgICB2ZXJzaW9uOiAnZGV0ZWN0J1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBdKTtcbn1cblxuZnVuY3Rpb24gZ2V0VW5pY29ybkNvbmZpZ3MoY29udGV4dDogRXNsaW50Q29uZmlnQ29udGV4dCk6IExpbnRlci5Db25maWdbXSB7XG4gIHJldHVybiBkZWZpbmVDb25maWcoW1xuICAgIHtcbiAgICAgIGV4dGVuZHM6IFt1bmljb3JuLmNvbmZpZ3MucmVjb21tZW5kZWRdLFxuICAgICAgZmlsZXM6IGNvbnRleHQuYWxsRmlsZXMoKSxcbiAgICAgIHJ1bGVzOiB7XG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZXNlIGVudHJpZXMgYXJlIG5vdCBhYmJyZXZpYXRpb25zIHRvIGJlIGV4cGFuZGVkIOKAlCB0aGV5IGFyZSBlc3RhYmxpc2hlZCB2b2NhYnVsYXJ5IGhlcmUuXG4gICAgICAgICAqXG4gICAgICAgICAqIEJyYW5kOiBgZGV2YCwgYGxpYmAsIGB1dGlsYC9gdXRpbHNgIHNwZWxsIHRoZSBwcm9kdWN0J3Mgb3duIG5hbWUuIExlZnQgb24sIHRoZSBydWxlIHJld3JpdGVzXG4gICAgICAgICAqIGBSZXBvUGF0aHNgIHRvIGBPYnNpZGlhbkRldmVsb3BtZW50VXRpbGl0aWVzUmVwb1BhdGhzYCBhbmQgYGdldExpYkRlYnVnZ2VyYCB0b1xuICAgICAgICAgKiBgZ2V0TGlicmFyeURlYnVnZ2VyYCwgcmVuYW1pbmcgZXhwb3J0ZWQgQVBJIGFmdGVyIHRoZSBwYWNrYWdlIGl0IGJlbG9uZ3MgdG8uXG4gICAgICAgICAqXG4gICAgICAgICAqIENvbnZlbnRpb246IGBwYXJhbXNgIGlzIHRoZSBwYXJhbWV0ZXItYmFnIGNvbnZlbnRpb24sIGVuZm9yY2VkIGJ5XG4gICAgICAgICAqIGB0eXBlc2NyaXB0LWRldi10b29sa2l0L3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2hgLCB3aGljaCByZXF1aXJlcyBiYWcgdHlwZXMgdG8gYmUgbmFtZWRcbiAgICAgICAgICogYDxPd25lcj5QYXJhbXNgIC8gYDxPd25lcj5PcHRpb25zYC4gRXhwYW5kaW5nIGl0IHRvIGBQYXJhbWV0ZXJzYCB3b3VsZCBwdXQgdGhlIHR3byBydWxlcyBpbiBkaXJlY3RcbiAgICAgICAgICogY29udHJhZGljdGlvbiBhbmQgYnJlYWsgMzAwKyBleHBvcnRlZCB0eXBlIG5hbWVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBSZXNlcnZlZCB3b3JkczogYSBiYXJlIGBhcmdzYCwgYGZuYCwgYHN0cmAsIGBtb2RgIG9yIGBldnRgIGV4cGFuZHMgdG8gYW4gaWRlbnRpZmllciB0aGF0IGlzIGFscmVhZHlcbiAgICAgICAgICogdGFrZW4sIHNvIHRoZSBydWxlIHN1Z2dlc3RzIGAkYXJndW1lbnRzYCwgYCRmdW5jdGlvbmAsIGFuZCBzbyBvbi4gU3BlbGwgdGhvc2UgYCRhcmd1bWVudHNgIC9cbiAgICAgICAgICogYCRmdW5jdGlvbmAgaW5zdGVhZCDigJQgYSBgJGAgcHJlZml4IHJlYWRzIGJldHRlciB0aGFuIGEgdHJhaWxpbmcgdW5kZXJzY29yZS4gVGhpcyBpcyBkZWxpYmVyYXRlbHkgTk9UXG4gICAgICAgICAqIGNvbmZpZ3VyZWQgYXMgYSBjdXN0b20gcmVwbGFjZW1lbnQ6IHVuaWNvcm4gc3Vic3RpdHV0ZXMgYXQgdGhlIHdvcmQgbGV2ZWwgaW5zaWRlIGNvbXBvdW5kIG5hbWVzLCBzb1xuICAgICAgICAgKiByZWRpcmVjdGluZyB0aGUgd2hvbGUgZW50cnkgdHVybnMgYGFzeW5jRm5gIGludG8gYGFzeW5jJGZ1bmN0aW9uYC4gQ29tcG91bmRzIHdhbnQgdGhlIHBsYWluIGV4cGFuc2lvblxuICAgICAgICAgKiAoYGFzeW5jRnVuY3Rpb25gKTsgb25seSB0aGUgYmFyZSwgZ2VudWluZWx5LWNvbGxpZGluZyBpZGVudGlmaWVycyB0YWtlIHRoZSBgJGAgZm9ybS5cbiAgICAgICAgICpcbiAgICAgICAgICogRG9tYWluIHdvcmRzOiBgZG9jYC9gZG9jc2AsIGBlbnZgLCBgZGlzdGAgYW5kIGBzcmNgIGFyZSB0aGUgY2xlYXJlciBzcGVsbGluZyBpbiB0aGlzIGNvZGViYXNlLlxuICAgICAgICAgKiBFeHBhbmRpbmcgYGRvY2AgYWxzbyBwaWNrcyB0aGUgd3Jvbmcgd29yZCDigJQgdGhlIGBhcGktZG9jLSpgIG1vZHVsZXMgZ2VuZXJhdGUgQVBJICpkb2N1bWVudGF0aW9uKiwgbm90XG4gICAgICAgICAqIGRvY3VtZW50cy4gYHNyY2AgYWRkaXRpb25hbGx5IGNvcnJ1cHRzIGNvZGU6IHRoZSBmaXhlciByZW5hbWVzIHRoZSBgU3JjYCBtZW1iZXIgb2YgdGhlIGV4cG9ydGVkXG4gICAgICAgICAqIGBPYnNpZGlhblBsdWdpblJlcG9QYXRoc2AgLyBgUmVwb1BhdGhzYCBlbnVtcyB3aGlsZSBsZWF2aW5nIGV2ZXJ5IGAuU3JjYCByZWZlcmVuY2VcbiAgICAgICAgICogZGFuZ2xpbmcsIGJlY2F1c2UgYGNoZWNrUHJvcGVydGllc2AgZXhlbXB0cyBwcm9wZXJ0eSBhY2Nlc3NlcyBidXQgbm90IHRoZSBkZWNsYXJhdGlvbnMgdGhleSBwb2ludCBhdC5cbiAgICAgICAgICpcbiAgICAgICAgICogRGlzYWJsaW5nIHRoZSByZXBsYWNlbWVudCBlbnRyaWVzIHByb3RlY3RzIHRoZXNlIHBlcm1hbmVudGx5OyBhbiBgYWxsb3dMaXN0YCB3b3VsZCBpbnN0ZWFkIG5lZWQgZXZlcnlcbiAgICAgICAgICogYWZmZWN0ZWQgaWRlbnRpZmllciBlbnVtZXJhdGVkIGJ5IGhhbmQgYW5kIHJlLWVudW1lcmF0ZWQgZm9yIGV2ZXJ5IG5ldyBvbmUuXG4gICAgICAgICAqXG4gICAgICAgICAqIE5PVEU6IHRoaXMgcnVsZSdzIGF1dG9maXggaXMgTk9UIHJlZmVyZW5jZS1hd2FyZSBmb3IgZGVjbGFyYXRpb25zIHRoYXQgcGFydGljaXBhdGUgaW4gYSBjb250cmFjdCDigJRcbiAgICAgICAgICogZW51bSBtZW1iZXJzLCBpbnRlcmZhY2UgbWVtYmVycywgYW5kIFR5cGVTY3JpcHQgcGFyYW1ldGVyIHByb3BlcnRpZXMgKGBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5XG4gICAgICAgICAqIGVsOiBIVE1MRWxlbWVudClgKSBhcmUgcmVuYW1lZCB3aGlsZSBgdGhpcy5lbGAgYW5kIGBFbnVtLk1lbWJlcmAgcmVmZXJlbmNlcyBhcmUgbGVmdCBkYW5nbGluZy4gQXBwbHlcbiAgICAgICAgICogaXRzIHJlcG9ydHMgYnkgaGFuZDsgbmV2ZXIgcnVuIGAtLWZpeGAgb3ZlciBpdC5cbiAgICAgICAgICovXG4gICAgICAgIC8qXG4gICAgICAgICAqIEEgZ29vZCBydWxlLCBidXQgaXRzIGRlZmF1bHQgcHJlZml4ZXMgZm9yY2UgdW5ncmFtbWF0aWNhbCBuYW1lczogYG1lbWJlclBhZ2VFeGlzdHNgIHdvdWxkIGJlY29tZVxuICAgICAgICAgKiBgaXNNZW1iZXJQYWdlRXhpc3RzYCByYXRoZXIgdGhhbiBgZG9lc01lbWJlclBhZ2VFeGlzdGAuIFRoZXNlIGVudHJpZXMgRVhURU5EIHRoZSBkZWZhdWx0cyAoYGlzYCxcbiAgICAgICAgICogYGhhc2AsIGBjYW5gLCBgc2hvdWxkYCwgLi4uKSByYXRoZXIgdGhhbiByZXBsYWNpbmcgdGhlbSwgc28gYSBib29sZWFuIHdpdGggbm8gYm9vbGVhbi1yZWFkaW5nIHByZWZpeFxuICAgICAgICAgKiBhdCBhbGwgaXMgc3RpbGwgcmVqZWN0ZWQgLS0gdGhlIHJ1bGUganVzdCBzdG9wcyBpbnNpc3RpbmcgdGhlIHByZWZpeCBjb21lIGZyb20gYSBzaG9ydGVyIGxpc3QuXG4gICAgICAgICAqXG4gICAgICAgICAqIFRoZSBsaXN0IGlzIGJpZGlyZWN0aW9uYWw6IGFkZGluZyBhIHByZWZpeCBhbHNvIGFzc2VydHMgdGhhdCBldmVyeXRoaW5nIG5hbWVkIHdpdGggaXQgSVMgYSBib29sZWFuLlxuICAgICAgICAgKiBgY2hlY2tgIGVhcm5zIGl0cyBwbGFjZSBvbiBib3RoIGNvdW50cywgc2luY2UgdGhlIGhhbmRmdWwgb2Ygbm9uLWJvb2xlYW4gYGNoZWNrKmAgbmFtZXMgaXQgc3VyZmFjZWRcbiAgICAgICAgICogd2VyZSBnZW51aW5lbHkgbWlzLW5hbWVkICh2b2lkIGZ1bmN0aW9ucyB0aGF0IHRocm93LCBhIHByb2JlIHJldHVybmluZyBhbiBIVFRQIHN0YXR1cykuIGB0ZXN0YCB3YXNcbiAgICAgICAgICogbWVhc3VyZWQgYW5kIHJlamVjdGVkOiBpdCB3b3VsZCB2YWxpZGF0ZSBmaXZlIGB0ZXN0KmAgbGluayBwcmVkaWNhdGVzIHRoYXQgcmVhZCBiZXR0ZXIgYXMgYGlzKmBcbiAgICAgICAgICogYW55d2F5LCBhdCB0aGUgY29zdCBvZiByZW5hbWluZyBTQ1JFQU1JTkdfQ0FTRSB0ZXN0IGZpeHR1cmVzIGFuZCB0aGUgYHRlc3RDb3ZlcmFnZWAvYHRlc3RXYXRjaGBcbiAgICAgICAgICogcnVubmVycyB0aGF0IGRlbGliZXJhdGVseSBtaXJyb3IgdGhlIGB0ZXN0OmNvdmVyYWdlYC9gdGVzdDp3YXRjaGAgbnBtIHNjcmlwdHMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9jb25zaXN0ZW50LWJvb2xlYW4tbmFtZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHByZWZpeGVzOiB7XG4gICAgICAgICAgICAgIGFsbG93czogdHJ1ZSxcbiAgICAgICAgICAgICAgY2hlY2s6IHRydWUsXG4gICAgICAgICAgICAgIGNvbnRhaW5zOiB0cnVlLFxuICAgICAgICAgICAgICBkb2VzOiB0cnVlLFxuICAgICAgICAgICAgICBpbmNsdWRlczogdHJ1ZSxcbiAgICAgICAgICAgICAgbXVzdDogdHJ1ZSxcbiAgICAgICAgICAgICAgbmVlZHM6IHRydWUsXG4gICAgICAgICAgICAgIHN1cHBvcnRzOiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvKlxuICAgICAgICAgKiBVbnNhdGlzZmlhYmxlIGFsb25nc2lkZSBgcGVyZmVjdGlvbmlzdC9zb3J0LWNsYXNzZXNgLCB3aGljaCBpcyBjb25maWd1cmVkIGhlcmUgYXMgYSBwbGFpblxuICAgICAgICAgKiBhbHBoYWJldGljYWwgc29ydC4gVGhpcyBydWxlIHdhbnRzIGEgY2F0ZWdvcnkgb3JkZXIgKGFsbCBmaWVsZHMsIHRoZW4gdGhlIGNvbnN0cnVjdG9yLCB0aGVuIGFsbFxuICAgICAgICAgKiBtZXRob2RzKSwgc28gdGhlIGV4dHJlbWVseSBjb21tb24gYHByaXZhdGUgX3hgIGZpZWxkIHBhaXJlZCB3aXRoIGEgYHB1YmxpYyBnZXQgeCgpYCBhY2Nlc3NvciBpc1xuICAgICAgICAgKiByZWplY3RlZCBieSB3aGljaGV2ZXIgcnVsZSBsb3NlczogYWxwaGFiZXRpY2FsbHkgdGhlIGFjY2Vzc29yIHByZWNlZGVzIHRoZSBmaWVsZCwgYnkgY2F0ZWdvcnkgdGhlXG4gICAgICAgICAqIGZpZWxkIHByZWNlZGVzIHRoZSBhY2Nlc3Nvci4gVW5saWtlIGBwcmVmZXItZ2xvYmFsLXRoaXNgIHRoZSBjbGFzaCBwcm9kdWNlcyBub1xuICAgICAgICAgKiBgRVNMaW50Q2lyY3VsYXJGaXhlc1dhcm5pbmdgLCBvbmx5IGJlY2F1c2UgdGhpcyBydWxlIHNoaXBzIG5vIGZpeGVyIC0tIGJvdGggcnVsZXMgYXJlIGBlcnJvcmAsIHNvIG5vXG4gICAgICAgICAqIGFycmFuZ2VtZW50IG9mIG1lbWJlcnMgc2F0aXNmaWVzIHRoZW0gYm90aC4gVGhlIGFscGhhYmV0aWNhbCBzb3J0IGlzIHRoZSBvbmUgYWxyZWFkeSByb2xsZWQgb3V0XG4gICAgICAgICAqIGFjcm9zcyB0aGUgcGx1Z2lucyBjb25zdW1pbmcgdGhpcyBjb25maWcsIHNvIGl0IGtlZXBzIHByZWNlZGVuY2UuIFJlLWVuYWJsaW5nIHRoaXMgcnVsZSB3b3VsZCBtZWFuXG4gICAgICAgICAqIGdpdmluZyBgcGVyZmVjdGlvbmlzdC9zb3J0LWNsYXNzZXNgIGEgbWF0Y2hpbmcgYGdyb3Vwc2Agb3B0aW9uIGFuZCByZW9yZGVyaW5nIGV2ZXJ5IGNsYXNzLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vY29uc2lzdGVudC1jbGFzcy1tZW1iZXItb3JkZXInOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogRXZlcnkgcmVwb3J0IGlzIGBuZXcgRXJyb3IoKS5zdGFja2AsIHdoaWNoIGNhcHR1cmVzIGEgc3RhY2sgdHJhY2UgYW5kIG5ldmVyIHN1cmZhY2VzIGl0cyBtZXNzYWdlLlxuICAgICAgICAgKiBUaGUgcnVsZSBjYW5ub3QgdGVsbCB0aGF0IGZyb20gYW4gZXJyb3IgdGhhdCBpcyBhY3R1YWxseSB0aHJvd24gYXQgYSB1c2VyLlxuICAgICAgICAgKlxuICAgICAgICAgKiBObyBiYXJlIGBuZXcgQWdncmVnYXRlRXJyb3IoZXJyb3JzKWAgaXMgbGVmdCBmb3IgaXQgdG8gY2F0Y2g6IGV2ZXJ5IHNpdGUgbm93IGJ1aWxkcyBpdHMgYWdncmVnYXRlXG4gICAgICAgICAqIHRocm91Z2ggYGNyZWF0ZUFnZ3JlZ2F0ZUVycm9yYCwgd2hpY2ggZ2l2ZXMgaXQgYSBtZXNzYWdlIHRoYXQgbmFtZXMgdGhlIGZhaWx1cmUuIEFuIGVtcHR5IG9uZSBpc1xuICAgICAgICAgKiBsb3NzeSBpbiBhIHdheSB0aGF0IG9ubHkgc2hvd3MgdXAgb3V0c2lkZSB0aGlzIGxpYnJhcnkg4oCUIGBlcnJvclRvU3RyaW5nYCB3YWxrcyBgZXJyb3JzYCBhbmQgcHJpbnRzXG4gICAgICAgICAqIHRoZSB3aG9sZSB0cmVlLCB3aGlsZSBldmVyeXRoaW5nIHJlYWRpbmcgYG1lc3NhZ2VgIHNlZXMgYW4gZW1wdHkgc2VudGVuY2UuIFRoZSBoZWxwZXIgbGl2ZXMgaW4gaXRzXG4gICAgICAgICAqIG93biBsZWFmIGBhZ2dyZWdhdGUtZXJyb3IudHNgIHJhdGhlciB0aGFuIGluIGBlcnJvci50c2AgcHJlY2lzZWx5IHNvIHRoYXQgYGRpc3Bvc2FibGUudHNgIGNhbiByZWFjaFxuICAgICAgICAgKiBpdCwgd2hpY2ggaXQgY291bGQgbm90IHdoaWxlIHRoZSBvbmx5IGNvcHkgc2F0IGluIGEgbW9kdWxlIGltcG9ydGluZyBpdCBiYWNrLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vZXJyb3ItbWVzc2FnZSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgZGVmYXVsdCBzdHlsZSBmb3IgYG5vZGU6cGF0aGAgaXMgYSBkZWZhdWx0IGltcG9ydCwgYnV0IHRoaXMgY29kZWJhc2UgaW1wb3J0cyBpdHMgbWVtYmVycyBieSBuYW1lXG4gICAgICAgICAqIHRocm91Z2hvdXQsIGNvbnNpc3RlbnRseSB3aXRoIGV2ZXJ5IG90aGVyIGBub2RlOmAgbW9kdWxlIGl0IHVzZXMuIENvbmZpZ3VyZSB0aGUgcnVsZSB0byBlbmZvcmNlIHRoZVxuICAgICAgICAgKiBzdHlsZSBhY3R1YWxseSBpbiB1c2UgcmF0aGVyIHRoYW4gYW5ub3RhdGUgMTcgc2l0ZXMgdGhhdCBhcmUgbm90IGdvaW5nIHRvIGNoYW5nZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL2ltcG9ydC1zdHlsZSc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHN0eWxlczoge1xuICAgICAgICAgICAgICAvLyBLZXllZCBieSB0aGUgVU5QUkVGSVhFRCBtb2R1bGUgbmFtZTogdGhlIHJ1bGUncyBvd24gdGFibGUgdXNlcyBgcGF0aGAsIHNvIGEgYG5vZGU6cGF0aGAga2V5IG5ldmVyIG1hdGNoZXMuXG4gICAgICAgICAgICAgIHBhdGg6IHtcbiAgICAgICAgICAgICAgICBuYW1lZDogdHJ1ZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcnVsZSBjb3VudHMgY29uc3RydWN0b3IgY2FsbHMgYW5kIGNvdW50cyB0aHJvdWdoIGFycmF5IGFuZCBvYmplY3QgbGl0ZXJhbHMsIHNvIGl0cyBkZWZhdWx0IG9mIDNcbiAgICAgICAgICogcmVwb3J0cyBvcmRpbmFyeSBjb21wb3NpdGlvbjogYFByb21pc2UucmVqZWN0KG5ldyBFcnJvcignYm9vbScpKWAgaW5zaWRlIGFuIGFzc2VydGlvbiwgYSB0ZXN0IGZpeHR1cmVcbiAgICAgICAgICogYnVpbHQgYXMgYGNyZWF0ZVR5cGVJbmZvKHsgbWV0aG9kczogW2NyZWF0ZU1lbWJlckluZm8oeyAuLi4gfSldIH0pYCwgYHRoaXMuYWRkQ2hpbGQobmV3IEModGhpcy5hcHApKWBcbiAgICAgICAgICogaW5zaWRlIGEgcGFyYW1zIGJhZy4gUmFpc2luZyB0aGUgbGltaXQgYnkgb25lIGNsZWFycyBldmVyeSByZXBvcnQgaGVyZSB3aGlsZSBzdGlsbCBjYXRjaGluZyB0aGVcbiAgICAgICAgICogZ2VudWluZWx5IHVucmVhZGFibGUgbmVzdGluZyB0aGUgcnVsZSBpcyBmb3IuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9tYXgtbmVzdGVkLWNhbGxzJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgbWF4OiA0XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAndW5pY29ybi9uYW1lLXJlcGxhY2VtZW50cyc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8qXG4gICAgICAgICAgICAgKiBQcm9wZXJ0eSBhbmQgbWVtYmVyIG5hbWVzIGFyZSBjaGVja2VkIHRvbywgc28gYW4gYWJicmV2aWF0aW9uIGNhbm5vdCBzdXJ2aXZlIGJ5IGxpdmluZyBvbiBhblxuICAgICAgICAgICAgICogb2JqZWN0IHJhdGhlciB0aGFuIGluIGEgdmFyaWFibGUuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogVGhlIHJ1bGUgaXMgcHVyZWx5IHN5bnRhY3RpYzogaXQgY2Fubm90IHRlbGwgYSBtZW1iZXIgd2UgZGVjbGFyZSBmcm9tIG9uZSBiZWxvbmdpbmcgdG8gYVxuICAgICAgICAgICAgICogZGVwZW5kZW5jeSwgYW5kIGl0IG9mZmVycyBubyBhdXRvZml4IGZvciBwcm9wZXJ0aWVzIChtZWFzdXJlZDogNjgxIGhpdHMsIDAgd2l0aCBhIGZpeGVyKS4gU2l0ZXNcbiAgICAgICAgICAgICAqIG5hbWluZyBhIGZvcmVpZ24gbWVtYmVyIC0tIGBEb21FbGVtZW50SW5mby5hdHRyYCwgYEV2YWxJbk9ic2lkaWFuUGFyYW1zLmZuYCwgYW5kIHRoZSBsaWtlIC0tIGFyZVxuICAgICAgICAgICAgICogdGhlcmVmb3JlIGltcG9zc2libGUgdG8gc2F0aXNmeSBhbmQgY2FycnkgYW4gaW5saW5lIGRpc2FibGUsIHNvIGV2ZXJ5dGhpbmcgc3RpbGwgcmVwb3J0ZWQgaXMgb3Vyc1xuICAgICAgICAgICAgICogdG8gcmVuYW1lLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFdoZW4gcmVuYW1pbmcgdGhlIHJlc3QsIG5vdGUgdGhhdCBgdHNjYCBhbG9uZSBpcyBOT1QgYSBzdWZmaWNpZW50IGdhdGU6IG9iamVjdC1saXRlcmFsIGtleXMgaW5cbiAgICAgICAgICAgICAqIGxvb3NlbHkgdHlwZWQgcG9zaXRpb25zIChgZXhwZWN0LmFycmF5Q29udGFpbmluZyhbeyBiYXRjaGVkQXJndW1lbnRzOiAuLi4gfV0pYCkgYXJlIG5vdCBjb250ZXh0dWFsbHlcbiAgICAgICAgICAgICAqIHR5cGVkLCBzbyBhIHJlbmFtZSBsZWF2ZXMgdGhlbSBiZWhpbmQgYW5kIGJyZWFrcyB0aGUgc3VpdGUgd2hlcmUgdGhlIHR5cGUgY2hlY2tlciBzZWVzIG5vdGhpbmcuXG4gICAgICAgICAgICAgKiBSZW5hbWUgaW4gc21hbGwgYmF0Y2hlcyB3aXRoIHRoZSBmdWxsIHRlc3QgcnVuIGluIHRoZSBsb29wLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFRoZSBkaXNhYmxlZCByZXBsYWNlbWVudHMgYmVsb3cgYXJlIGVzdGFibGlzaGVkIHZvY2FidWxhcnkgcmF0aGVyIHRoYW4gYWJicmV2aWF0aW9ucyB0byBiZVxuICAgICAgICAgICAgICogZXhwYW5kZWQuIGBlbGAgaXMgZXhlbXB0IGJlY2F1c2UgT2JzaWRpYW4gbmFtZXMgZXZlcnkgZWxlbWVudCBtZW1iZXIgdGhhdCB3YXkgLS0gYGNvbnRhaW5lckVsYCxcbiAgICAgICAgICAgICAqIGBjb250ZW50RWxgLCBgaW5wdXRFbGAsIGBzZWxlY3RFbGAgLS0gc28gZXhwYW5kaW5nIG91cnMgdG8gYCpFbGVtZW50YCB3b3VsZCBsZWF2ZSBvdXIgY29tcG9uZW50c1xuICAgICAgICAgICAgICogcmVhZGluZyBpbmNvbnNpc3RlbnRseSBiZXNpZGUgdGhlIE9ic2lkaWFuIG9uZXMgdGhleSBzaXQgbmV4dCB0by4gRGlzYWJsaW5nIHRoZSByZXBsYWNlbWVudCBhbHNvXG4gICAgICAgICAgICAgKiBjb3ZlcnMgY29tcG91bmQgbmFtZXMsIHdoaWNoIGlzIDcyIHNpdGVzIHRoYXQgd291bGQgb3RoZXJ3aXNlIGVhY2ggbmVlZCBhbiBpbmxpbmUgZGlzYWJsZS5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBgcmVmYCBpcyBleGVtcHQgZm9yIHRoZSBzYW1lIHJlYXNvbjogYEFzeW5jRXZlbnRSZWZgIGlzIHRoZSBhc3luYyBjb3VudGVycGFydCBvZiBPYnNpZGlhbidzXG4gICAgICAgICAgICAgKiBgRXZlbnRSZWZgLCBoYW5kZWQgdG8gdGhlIHNhbWUgYG9mZnJlZmAgLyBgcmVnaXN0ZXJFdmVudGAgc2hhcGVzLCBzbyB0aGUgdHdvIG5hbWVzIGhhdmUgdG8gbWF0Y2hcbiAgICAgICAgICAgICAqIHRvIHJlYWQgYXMgYSBwYWlyLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjaGVja1Byb3BlcnRpZXM6IHRydWUsXG4gICAgICAgICAgICByZXBsYWNlbWVudHM6IHtcbiAgICAgICAgICAgICAgLypcbiAgICAgICAgICAgICAgICogYGF0dHJgIC8gYGF0dHJzYCBhcmUgT2JzaWRpYW4ncyBvd246IGBjcmVhdGVFbCgnYScsIHsgYXR0cjogeyAuLi4gfSB9KWAgdGFrZXMgdGhlbSBieSB0aG9zZVxuICAgICAgICAgICAgICAgKiBuYW1lcyBvbiBgRG9tRWxlbWVudEluZm9gLCBzbyBvdXJzIGhhdmUgdG8gbWF0Y2ggdG8gYmUgcGFzc2VkIHRocm91Z2guIGBwcm9wc2AgaXMgdGhlXG4gICAgICAgICAgICAgICAqIHVuaXZlcnNhbCBjb21wb25lbnQgdm9jYWJ1bGFyeSwgZXhlbXB0IGZvciB0aGUgc2FtZSByZWFzb24gYHBhcmFtc2AgaXMuXG4gICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICBhdHRyOiBmYWxzZSxcbiAgICAgICAgICAgICAgYXR0cnM6IGZhbHNlLFxuICAgICAgICAgICAgICBkZXY6IGZhbHNlLFxuICAgICAgICAgICAgICAvKlxuICAgICAgICAgICAgICAgKiBFdmVyeSBgZGlyYCBoZXJlIGlzIGEgZmlsZXN5c3RlbSBkaXJlY3RvcnksIG5ldmVyIGEgZGlyZWN0aW9uLCBzbyB0aGUgcnVsZSBpcyBuYXJyb3dlZCB0byB0aGVcbiAgICAgICAgICAgICAgICogb25lIGV4cGFuc2lvbiByYXRoZXIgdGhhbiBsZWZ0IG9mZmVyaW5nIGEgY2hvaWNlIGl0IGNhbm5vdCBtYWtlLlxuICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbmFtZS1yZXBsYWNlbWVudHMgLS0gVGhpcyBpcyB0aGUgcnVsZSdzIG93biByZXBsYWNlbWVudCBrZXksIHdoaWNoIGhhcyB0byBiZSBzcGVsbGVkIHRoZSB3YXkgdGhlIHJ1bGUgcmVhZHMgaXQuXG4gICAgICAgICAgICAgIGRpcjoge1xuICAgICAgICAgICAgICAgIGRpcmVjdGlvbjogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiB0cnVlXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIGRpc3Q6IGZhbHNlLFxuICAgICAgICAgICAgICBkb2M6IGZhbHNlLFxuICAgICAgICAgICAgICBkb2NzOiBmYWxzZSxcbiAgICAgICAgICAgICAgZWw6IGZhbHNlLFxuICAgICAgICAgICAgICBlbnY6IGZhbHNlLFxuICAgICAgICAgICAgICBsaWI6IGZhbHNlLFxuICAgICAgICAgICAgICBwYXJhbXM6IGZhbHNlLFxuICAgICAgICAgICAgICBwcm9wczogZmFsc2UsXG4gICAgICAgICAgICAgIHJlZjogZmFsc2UsXG4gICAgICAgICAgICAgIHJlZnM6IGZhbHNlLFxuICAgICAgICAgICAgICBzcmM6IGZhbHNlLFxuICAgICAgICAgICAgICB1dGlsOiBmYWxzZSxcbiAgICAgICAgICAgICAgdXRpbHM6IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgbmV4dCBzaXggcnVsZXMgYWxsIHN1Z2dlc3QgYW4gQVBJIG5ld2VyIHRoYW4gdGhpcyBwcm9qZWN0J3MgYGxpYmAgKGBFUzIwMjJgKSwgc28gZm9sbG93aW5nIGFueSBvZlxuICAgICAgICAgKiB0aGVtIGZhaWxzIHRvIGNvbXBpbGUuIFRoZSBPYnNpZGlhbiBwbHVnaW4gbGF5ZXIgdGFrZXMgdGhlIGZsb29yIGZyb20gdGhlIG9sZGVzdCBPYnNpZGlhbiBpbnN0YWxsZXIgdGhhdFxuICAgICAgICAgKiBjYW4gc3RpbGwgcnVuIGN1cnJlbnQgT2JzaWRpYW4sIHdoaWNoIHJlY29yZHMgYGVjbWFTY3JpcHRWZXJzaW9uOiBcIkVTMjAyMlwiYC4gRWFjaCBpcyBvZmYgYXQgdGhlIGNvbmZpZ1xuICAgICAgICAgKiBsZXZlbCByYXRoZXIgdGhhbiBhbm5vdGF0ZWQgcGVyIHNpdGUsIGJlY2F1c2Ugbm9uZSBjYW4gZXZlciBiZSBzYXRpc2ZpZWQgd2hpbGUgdGhhdCBmbG9vciBob2xkcy4gUmV2aXNpdFxuICAgICAgICAgKiB0aGVtIHRvZ2V0aGVyIGlmIHRoZSBmbG9vciBtb3Zlcy5cbiAgICAgICAgICpcbiAgICAgICAgICogYEFycmF5I3RvUmV2ZXJzZWRgIGFuZCBgQXJyYXkjdG9Tb3J0ZWRgIGFyZSBFUzIwMjMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1hcnJheS1yZXZlcnNlJzogJ29mZicsXG4gICAgICAgICd1bmljb3JuL25vLWFycmF5LXNvcnQnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogYGNvbnRpbnVlYCBpbnNpZGUgYSBuZXN0ZWQgbG9vcCBpcyBvcmRpbmFyeSwgcmVhZGFibGUgY29udHJvbCBmbG93IGhlcmUuIFRoZSBydWxlJ3MgcmVtZWR5IGlzIHRvXG4gICAgICAgICAqIGV4dHJhY3QgZXZlcnkgc3VjaCBsb29wIGludG8gaXRzIG93biBmdW5jdGlvbiwgd2hpY2ggc3ByZWFkcyBvbmUgY29oZXJlbnQgdHJhdmVyc2FsIGFjcm9zcyB0d29cbiAgICAgICAgICogZGVjbGFyYXRpb25zIHdpdGhvdXQgbWFraW5nIGFueXRoaW5nIGNsZWFyZXIuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1icmVhay1pbi1uZXN0ZWQtbG9vcCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcnVsZSBjYW5ub3Qgc2VlIHRocm91Z2ggYSBob2lzdGVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLCBzbyBpdCB0cmVhdHMgYSBiaW5kaW5nIHRoYXQgYSBuZXN0ZWRcbiAgICAgICAgICogZnVuY3Rpb24gYWxyZWFkeSByZWFkIGFzIHVudXNlZCBiZWZvcmUgdGhlIGV4aXQuIEluIGBydW5XaXRoVGltZW91dGAgdGhhdCBpcyBgbGV0IGlzQ29tcGxldGVkYCwgd2hpY2hcbiAgICAgICAgICogYHJ1bigpYCBhbmQgYGlubmVyVGltZW91dCgpYCBib3RoIHRvdWNoIHdoaWxlIHRoZSBgUHJvbWlzZS5yYWNlYCBhYm92ZSB0aGUgZXhpdCBpcyBzdGlsbCBydW5uaW5nIC0tXG4gICAgICAgICAqIG1vdmluZyB0aGUgZGVjbGFyYXRpb24gcGFzdCB0aGUgZXhpdCwgYXMgdGhlIHJ1bGUgYXNrcywgd291bGQgbGVhdmUgdGhvc2UgcmVhZHMgaW4gdGhlIHRlbXBvcmFsIGRlYWRcbiAgICAgICAgICogem9uZS4gSXRzIG93biBmaXhlciBkZWNsaW5lcyBhbGwgMTUgc2l0ZXMgZm9yIHRoZSBzYW1lIHJlYXNvbiBpdCBjYW5ub3QgcHJvdmUgdGhlbSBzYWZlLCBzbyBmb2xsb3dpbmdcbiAgICAgICAgICogdGhlIHJ1bGUgaXMgZW50aXJlbHkgbWFudWFsLiBXaGF0IGlzIGxlZnQgYWZ0ZXIgdGhhdCBpcyBwbGFjZW1lbnQgc3R5bGU6IHRoZSByZW1haW5pbmcgcmVwb3J0cyBhcmVcbiAgICAgICAgICogbmFtZWQgY29uc3RhbnRzIGFuZCBkZXJpdmVkIHBhdGhzIGRlbGliZXJhdGVseSBncm91cGVkIGF0IHRoZSB0b3Agb2YgYSBmdW5jdGlvbiwgYW5kIHB1c2hpbmcgZWFjaCBvbmVcbiAgICAgICAgICogYmVsb3cgdGhlIGZpcnN0IGd1YXJkIHNwbGl0cyBhIGNvaGVzaXZlIGJsb2NrIHRvIG5vIGJlbmVmaXQuIFRoZSB0aHJlZSBzaXRlcyB3aGVyZSBkZWZlcnJpbmcgc2tpcHBlZFxuICAgICAgICAgKiByZWFsIHdvcmsgKGEgc2Vjb25kIGBjb21wdXRlTmVlZGVkRXhwb3N1cmVgIHdhbGssIGEgYHRvSnNvbmAgc2VyaWFsaXphdGlvbiwgYW4gYGVuc3VyZUxmRW5kaW5nc2AgcGFzcylcbiAgICAgICAgICogd2VyZSBhcHBsaWVkIGJ5IGhhbmQgaW5zdGVhZC5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLWRlY2xhcmF0aW9ucy1iZWZvcmUtZWFybHktZXhpdCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBBc3NpZ25pbmcgb250byB0aGUgZ2xvYmFsIG9iamVjdCBpcyBob3cgdGhpcyBsaWJyYXJ5IGluc3RhbGxzIGFuZCByZXN0b3JlcyB0ZXN0IGRvdWJsZXMsIGFuZCBob3cgYVxuICAgICAgICAgKiBmZXcgT2JzaWRpYW4tcnVudGltZSBnbG9iYWxzIGFyZSByZWFjaGVkIGF0IGFsbC4gVGhlIHJ1bGUgY2Fubm90IHNlcGFyYXRlIHRoYXQgZnJvbSBhbiBhY2NpZGVudGFsXG4gICAgICAgICAqIGdsb2JhbCB3cml0ZSwgYW5kIGl0IGhhcyBubyBmaXhlci5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLWdsb2JhbC1vYmplY3QtcHJvcGVydHktYXNzaWdubWVudCc6ICdvZmYnLFxuICAgICAgICAvLyBgbnVsbGAgaXMgbG9hZC1iZWFyaW5nIGhlcmU6IGFuIG9wdGlvbmFsIGNvbGxhYm9yYXRvciBpcyBtb2RlbGxlZCBhcyBhIHJlcXVpcmVkIGBudWxsIHwgWGAgZmllbGQgcmF0aGVyIHRoYW4gYW4gb3B0aW9uYWwgYFhgLCBzbyBgbnVsbGAgYW5kIGB1bmRlZmluZWRgIGFyZSBub3QgaW50ZXJjaGFuZ2VhYmxlLlxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgcnVsZSdzIGxpc3Qgb2Ygc3RhbmRhcmQgYFN5bWJvbGAgcHJvcGVydGllcyBwcmVkYXRlcyBleHBsaWNpdCByZXNvdXJjZSBtYW5hZ2VtZW50LCBzbyBpdCByZXBvcnRzXG4gICAgICAgICAqIGBTeW1ib2wuZGlzcG9zZWAgYW5kIGBTeW1ib2wuYXN5bmNEaXNwb3NlYCBhcyBub24tc3RhbmRhcmQuIEJvdGggYXJlIHBhcnQgb2YgdGhlIGxhbmd1YWdlIHRoYXQgdGhpc1xuICAgICAgICAgKiBsaWJyYXJ5IGlzIGJ1aWx0IG9uIC0tIDExNCBmaWxlcyBoZXJlIHVzZSBgdXNpbmdgIGRlY2xhcmF0aW9ucywgYW5kIHRoZSBkaXNwb3NhYmxlIHR5cGVzIGFyZSBhXG4gICAgICAgICAqIHB1YmxpYyBwYXJ0IG9mIGl0cyBzdXJmYWNlIC0tIHNvIGFsbCA1OSByZXBvcnRzIGFyZSB0aGUgcnVsZSBiZWluZyBvdXQgb2YgZGF0ZSByYXRoZXIgdGhhbiBhIGZpbmRpbmcuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby1ub25zdGFuZGFyZC1idWlsdGluLXByb3BlcnRpZXMnOiAnb2ZmJyxcbiAgICAgICAgJ3VuaWNvcm4vbm8tbnVsbCc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUeXBlU2NyaXB0J3MgZXhwbGljaXQgYHRoaXNgIHBhcmFtZXRlciAoYGZ1bmN0aW9uIGdldCh0aGlzOiBIb2xkZXIpIHsgcmV0dXJuIHRoaXMudmFsdWU7IH1gKSBtYWtlc1xuICAgICAgICAgKiBgdGhpc2Agb3V0c2lkZSBhIGNsYXNzIGJvdGggbGVnYWwgYW5kIHR5cGUtY2hlY2tlZCwgYnV0IHRoZSBydWxlIGlzIHN5bnRhY3RpYyBhbmQgZmxhZ3MgaXQgaWRlbnRpY2FsbHlcbiAgICAgICAgICogdG8gYSBnZW51aW5lbHkgdW5ib3VuZCBgdGhpc2AuIEl0IGhhcyBubyBvcHRpb25zIChgc2NoZW1hOiBbXWApIGFuZCBubyBmaXhlciwgc28gdGhlcmUgaXMgbm8gd2F5IHRvXG4gICAgICAgICAqIHNlcGFyYXRlIHRoZSBpZGlvbSBmcm9tIHRoZSBidWcgaXQgdGFyZ2V0cy4gTW9zdCBoaXRzIGhlcmUgd2VyZSB0eXBlZCBgdGhpc2AgcGFyYW1ldGVycyBhbmQgdGVzdHMgdGhhdFxuICAgICAgICAgKiBkZWxpYmVyYXRlbHkgYXNzZXJ0IGB0aGlzYCBiaW5kaW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tdGhpcy1vdXRzaWRlLW9mLWNsYXNzJzogJ29mZicsXG4gICAgICAgIC8vIFNhbWUgY2FsbCBhcyBpdHMgb2JqZWN0IGNvdW50ZXJwYXJ0IGFib3ZlOiB0aGUgZGVzdHJ1Y3R1cmluZyBkZXB0aCBmbGFnZ2VkIGhlcmUgaXMgZGVsaWJlcmF0ZSBhbmQgcmVhZHMgd2VsbC5cbiAgICAgICAgJ3VuaWNvcm4vbm8tdW5yZWFkYWJsZS1hcnJheS1kZXN0cnVjdHVyaW5nJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSByZXBvcnRzIGFyZSBhbGwgYGZvciAoY29uc3QgZmlsZSBvZiBhd2FpdCByZWFkZGlyUG9zaXgoLi4uKSlgLCB3aGljaCByZWFkcyBleGFjdGx5IGFzIGludGVuZGVkLlxuICAgICAgICAgKiBIb2lzdGluZyB0aGUgYXdhaXRlZCBjYWxsIGludG8gYSB2YXJpYWJsZSBuYW1lZCBhZnRlciB0aGUgbG9vcCdzIG93biBpdGVyYWJsZSBhZGRzIGEgbGluZSBhbmQgYSBuYW1lXG4gICAgICAgICAqIHdpdGhvdXQgYWRkaW5nIGluZm9ybWF0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tdW5yZWFkYWJsZS1mb3Itb2YtZXhwcmVzc2lvbic6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgbmVzdGVkIGRlc3RydWN0dXJpbmcgdGhpcyBmbGFncyBpcyBkZWxpYmVyYXRlIGhlcmUgYW5kIHJlYWRzIHdlbGw6IHB1bGxpbmcgYSBtZW1iZXIgb3V0IG9mIGFcbiAgICAgICAgICogcGFyYW1zIGJhZyBpbiBvbmUgc3RlcCBzdGF0ZXMgd2hlcmUgdGhlIHZhbHVlIGNvbWVzIGZyb20sIHdoaWNoIGEgc2Vjb25kIGludGVybWVkaWF0ZSBiaW5kaW5nIG9ubHlcbiAgICAgICAgICogb2JzY3VyZXMuIFRoZSBydWxlIHRha2VzIG5vIG9wdGlvbnMsIHNvIHRoZXJlIGlzIG5vIHdheSB0byBrZWVwIHRoZSBkZXB0aCBsaW1pdCBpdCBpcyByZWFsbHkgYWZ0ZXJcbiAgICAgICAgICogd2hpbGUgYWxsb3dpbmcgdGhlIHNoYXBlIGluIHVzZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL25vLXVucmVhZGFibGUtb2JqZWN0LWRlc3RydWN0dXJpbmcnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogYGNoZWNrQXJndW1lbnRzYCBzdHJpcHMgYHVuZGVmaW5lZGAgYXJndW1lbnRzLCB3aGljaCBzaGlmdHMgdGhlIHJlbWFpbmluZyBwb3NpdGlvbmFsIGFyZ3VtZW50cyBpbnRvXG4gICAgICAgICAqIHRoZSB3cm9uZyBzbG90czsgYGNoZWNrQXJyb3dGdW5jdGlvbkJvZHlgIHJlbW92ZXMgYHJldHVybiB1bmRlZmluZWQ7YCBmcm9tIGFycm93IGJvZGllcyB3aG9zZSBvdGhlclxuICAgICAgICAgKiBicmFuY2hlcyBkbyByZXR1cm4gYSB2YWx1ZSwgd2hpY2ggdmlvbGF0ZXMgdGhlIGBub0ltcGxpY2l0UmV0dXJuc2Agc2V0dGluZyB0aGlzIHByb2plY3QgY29tcGlsZXMgd2l0aC5cbiAgICAgICAgICogVGhlIHJ1bGUncyByZW1haW5pbmcgY2FzZXMgKGEgYmFyZSBgdW5kZWZpbmVkYCBpbml0aWFsaXplciwgYHJldHVybiB1bmRlZmluZWQ7YCBpbiBhIHZvaWQgZnVuY3Rpb24pXG4gICAgICAgICAqIGFyZSBzdGlsbCB3b3J0aCBoYXZpbmcuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9uby11c2VsZXNzLXVuZGVmaW5lZCc6IFtcbiAgICAgICAgICAnZXJyb3InLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNoZWNrQXJndW1lbnRzOiBmYWxzZSxcbiAgICAgICAgICAgIGNoZWNrQXJyb3dGdW5jdGlvbkJvZHk6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICBdLFxuICAgICAgICAvLyBgQXJyYXkuZnJvbUFzeW5jYCBpcyBFUzIwMjQuIFNlZSB0aGUgRVMyMDIyIGZsb29yIG5vdGUgYWJvdmUuXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1hcnJheS1mcm9tLWFzeW5jJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEV2ZXJ5IGhpdCBoZXJlIGlzIGEgcHJvbWlzZSBkZWxpYmVyYXRlbHkgTk9UIGF3YWl0ZWQsIGFuZCBgYXdhaXRgIHdvdWxkIGNoYW5nZSB3aGF0IHRoZSBjb2RlIGRvZXMuXG4gICAgICAgICAqIGByZXN1bHQuY2F0Y2godGhyb3dEZWxheWVkKWAgaW4gYGFzeW5jLWV2ZW50cy50c2AgaXMgdGhlIGZpcmUtYW5kLWZvcmdldCBlcnJvciBwYXRoIHRoZSBtb2R1bGUgaXNcbiAgICAgICAgICogYnVpbHQgb247IHRoZSByZXN0IGhvbGQgYW4gdW5yZXNvbHZlZCBwcm9taXNlIGFuZCBhc3NlcnQgdGhlIGNhbGxiYWNrIGhhcyBub3QgZmlyZWQgeWV0LCBzbyBhd2FpdGluZ1xuICAgICAgICAgKiB3b3VsZCBoYW5nIHRoZSB0ZXN0IG9yIGludmVydCB3aGF0IGl0IHByb3Zlcy4gVGhlIHJ1bGUgY2Fubm90IHRlbGwgYSBmb3Jnb3R0ZW4gYGF3YWl0YCBmcm9tIGFuXG4gICAgICAgICAqIGludGVudGlvbmFsIG9uZSwgYW5kIHRoaXMgY29kZWJhc2Ugc2NoZWR1bGVzIGZpcmUtYW5kLWZvcmdldCB3b3JrIGFzIGEgY29yZSBwYXR0ZXJuLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLWF3YWl0JzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEFsbCB0aHJlZSByZXBvcnRzIHJlYWQgSFRNTCBvdXQgKGBjb25zdCBodG1sID0gZWwuaW5uZXJIVE1MYCksIG5ldmVyIHdyaXRlIGl0LCBhbmQgZm9yIGEgcmVhZFxuICAgICAgICAgKiBgZ2V0SFRNTCgpYCByZXR1cm5zIHRoZSBzYW1lIHN0cmluZy4gV2hhdCBpdCBhZGRzIGlzIHNoYWRvdy1yb290IHNlcmlhbGl6YXRpb24gb3B0aW9ucyB0aGF0IG5vdGhpbmdcbiAgICAgICAgICogaGVyZSBhc2tzIGZvciwgaW4gZXhjaGFuZ2UgZm9yIGEgbXVjaCBuZXdlciBwbGF0Zm9ybSBmbG9vciB0aGFuIGBpbm5lckhUTUxgIC0tIGEgYmFkIHRyYWRlIGZvciBhXG4gICAgICAgICAqIGxpYnJhcnkgdGhhdCBoYXMgdG8gcnVuIG9uIHdoYXRldmVyIENocm9taXVtIHRoZSBpbnN0YWxsZWQgT2JzaWRpYW4gc2hpcHMuIFRoZSBydWxlJ3Mgb3RoZXIgaGFsZixcbiAgICAgICAgICogcmV3cml0aW5nIHdyaXRlcyB0byB0aGUgc2FuaXRpemluZyBgc2V0SFRNTCgpYCwgd291bGQgYmUgd29ydGggaGF2aW5nOyBpdCBqdXN0IG5ldmVyIGZpcmVzIGhlcmUuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItZG9tLW5vZGUtaHRtbC1tZXRob2RzJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIEl0ZXJhdG9yIGhlbHBlcnMgKGBJdGVyYXRvciNzb21lYCBhbmQgZnJpZW5kcykgYXJlIEVTMjAyNSwgc28gdGhpcyBiZWxvbmdzIHdpdGggYG5vLWFycmF5LXJldmVyc2VgIGFuZFxuICAgICAgICAgKiBgbm8tYXJyYXktc29ydGAgYWJvdmU6IHRoZSBzYW1lIEVTMjAyMiBmbG9vciBydWxlcyBpdCBvdXQsIGFuZCB0aGUgc2FtZSBub3RlIGFwcGxpZXMgLS0gcmV2aXNpdCB0aGVtXG4gICAgICAgICAqIHRvZ2V0aGVyIGlmIHRoYXQgZmxvb3IgbW92ZXMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItaXRlcmF0b3ItaGVscGVycyc6ICdvZmYnLFxuICAgICAgICAvLyBgSXRlcmF0b3IjdG9BcnJheWAgaXMgRVMyMDI1LiBTZWUgdGhlIEVTMjAyMiBmbG9vciBub3RlIGFib3ZlLlxuICAgICAgICAndW5pY29ybi9wcmVmZXItaXRlcmF0b3ItdG8tYXJyYXknOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogUmVwbGFjZWQgYnkgYHR5cGVzY3JpcHQtZGV2LXRvb2xraXQvcHJlZmVyLWxvZ2ljYWwtb3BlcmF0b3Itb3Zlci10ZXJuYXJ5YCwgd2hpY2ggcmVwb3J0cyB0aGUgc2FtZSBhbmRcbiAgICAgICAgICogYWxzbyBmaXhlcyBhIGJvb2xlYW4gbGl0ZXJhbCBicmFuY2ggaW4gVHlwZVNjcmlwdC4gVW5pY29ybiB3aXRoaG9sZHMgdGhhdCBmaXggdGhlcmUsIHdoaWxlXG4gICAgICAgICAqIGB1bmljb3JuL3ByZWZlci10ZXJuYXJ5YCBrZWVwcyBwcm9kdWNpbmcgdGhlIHNoYXBlLCBzbyBgbGludDpmaXhgIGxlZnQgYW4gZXJyb3IgaXQgaGFkIGp1c3QgY3JlYXRlZC5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3ByZWZlci1sb2dpY2FsLW9wZXJhdG9yLW92ZXItdGVybmFyeSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBUaGUgc3VnZ2VzdGVkIHJlcGxhY2VtZW50IGlzIGBNYXRoLnRydW5jKE51bWJlcih4KSlgLCB3aGljaCBpcyBsb25nZXIgdGhhbiBgcGFyc2VJbnQoeCwgMTApYCBhbmQgbm9cbiAgICAgICAgICogY2xlYXJlciwgYW5kIGl0IGlzIG5vdCB0aGUgc2FtZSBmdW5jdGlvbjogYHBhcnNlSW50YCBzdG9wcyBhdCB0aGUgZmlyc3QgY2hhcmFjdGVyIHRoYXQgY2Fubm90IGJlIHBhcnRcbiAgICAgICAgICogb2YgdGhlIG51bWJlciwgc28gYCcxMmFiYydgIHBhcnNlcyB0byAxMiB3aGVyZSBgTnVtYmVyYCB5aWVsZHMgYE5hTmAuIFR3byBvZiB0aGUgcmVwb3J0cyByZWFkIHVzZXJcbiAgICAgICAgICogaW5wdXQgdGhyb3VnaCB0aGF0IGRpZmZlcmVuY2UgLS0gdGhlIHBhZ2UtanVtcCBib3ggaW4gdGhlIGBEYXRhdmlld2AgaGVscGVyLCBhbmRcbiAgICAgICAgICogYE51bWJlckNvbXBvbmVudC52YWx1ZUZyb21TdHJpbmdgLCB3aG9zZSBsZW5pZW50IHBhcnNlIGlzIHBhcnQgb2YgYSBwdWJsaXNoZWQgY29tcG9uZW50J3MgYmVoYXZpb3IuXG4gICAgICAgICAqIFRoZSByZXN0IHBhcnNlIG1hY2hpbmUtZ2VuZXJhdGVkIHN0cmluZ3MsIHdoZXJlIHRoZSB0d28gYWdyZWUgYnV0IHRoZSBzaG9ydGVyIHNwZWxsaW5nIHN0aWxsIHdpbnMuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItbnVtYmVyLWNvZXJjaW9uJzogJ29mZicsXG4gICAgICAgIC8vIGBQcm9taXNlLndpdGhSZXNvbHZlcnNgIGlzIEVTMjAyNC4gU2VlIHRoZSBFUzIwMjIgZmxvb3Igbm90ZSBhYm92ZS5cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLXByb21pc2Utd2l0aC1yZXNvbHZlcnMnOiAnb2ZmJyxcbiAgICAgICAgLy8gYFNldCN1bmlvbmAgYW5kIGZyaWVuZHMgYXJlIEVTMjAyNS4gU2VlIHRoZSBFUzIwMjIgZmxvb3Igbm90ZSBhYm92ZS5cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLXNldC1tZXRob2RzJzogJ29mZicsXG4gICAgICAgIC8qXG4gICAgICAgICAqIFRoZSBydWxlIHJhbmtzIG9wZXJhbmRzIGJ5IHN5bnRhY3RpYyBzaGFwZSwgbm90IGNvc3QsIHNvIGV2ZXJ5IHJlcG9ydCBoZXJlIHN3YXBzIG9uZSBwcm9wZXJ0eSByZWFkXG4gICAgICAgICAqIGFoZWFkIG9mIGFub3RoZXIgYW5kIGJ1eXMgbm90aGluZy4gSXRzIG93biBtZXNzYWdlIGNvbmNlZGVzIGl0IGNhbm5vdCBjaGVjayB0aGUgcGFydCB0aGF0IG1hdHRlcnMgLS1cbiAgICAgICAgICogXCJhZnRlciB2ZXJpZnlpbmcgc2hvcnQtY2lyY3VpdCBiZWhhdmlvclwiIC0tIGFuZCBvbmUgcmVwb3J0IHNpdHMgZGlyZWN0bHkgdW5kZXIgYSBjb21tZW50IHJlY29yZGluZ1xuICAgICAgICAgKiB0aGF0IHRoZSBvcGVyYW5kcyBjaGFuZ2UgaW5zaWRlIGEgYHJlbmFtZWAgZXZlbnQgaGFuZGxlciwgd2hpY2ggaXMgd2hlcmUgb3JkZXIgc3RvcHMgYmVpbmcgZnJlZS5cbiAgICAgICAgICogVGhlIGN1cnJlbnQgb3JkZXJzIGFsc28gY2FycnkgaW50ZW50OiBhIG51bGwgZ3VhcmQgYmVmb3JlIHRoZSB1c2UgaXQgZ3VhcmRzLCBhbmQgdGhlIGNvbmRpdGlvbiBiZWluZ1xuICAgICAgICAgKiByZXBvcnRlZCBiZWZvcmUgdGhlIHN0YXRlIGl0IGNvbnRyYWRpY3RzLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vcHJlZmVyLXNpbXBsZS1jb25kaXRpb24tZmlyc3QnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogYFVSTC5jYW5QYXJzZWAgcmVxdWlyZXMgTm9kZSAxOC4xNywgd2VsbCBhYm92ZSB0aGUgTm9kZSAxNi4xNi4wIGZsb29yIHRoYXQgc2hpcHBlZCBzb3VyY2UgdGFyZ2V0c1xuICAgICAgICAgKiAoc2VlIHRoZSBPYnNpZGlhbiBwbHVnaW4gbGF5ZXIncyBgbWluaW11bU5vZGVWZXJzaW9uYCkuIFRoZSBydWxlIGNhbiB0aGVyZWZvcmUgbmV2ZXIgYmUgc2F0aXNmaWVkIHRoZXJlLCBzbyBpdCBpcyBvZmYgYXQgdGhlXG4gICAgICAgICAqIGNvbmZpZyBsZXZlbCByYXRoZXIgdGhhbiBhbm5vdGF0ZWQgYXQgZWFjaCBjYWxsIHNpdGUuXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9wcmVmZXItdXJsLWNhbi1wYXJzZSc6ICdvZmYnLFxuICAgICAgICAvKlxuICAgICAgICAgKiBFdmVyeSBhcnJheSByZXBvcnRlZCBoZXJlIGhvbGRzIHN0cmluZ3MsIHdoZXJlIHRoZSBkZWZhdWx0IHNvcnQgaXMgYWxyZWFkeSB3ZWxsIGRlZmluZWQgYW5kIGNvcnJlY3QuXG4gICAgICAgICAqIEFkZGluZyB0aGUgY29tcGFyYXRvciB0aGUgcnVsZSBhc2tzIGZvciB3b3VsZCBtZWFuIGNob29zaW5nIGJldHdlZW4gY29kZS11bml0IGFuZCBsb2NhbGUgb3JkZXJpbmcsXG4gICAgICAgICAqIHNvIGZvbGxvd2luZyBpdCB3b3VsZCBDSEFOR0UgdGhlIHNvcnQgcmF0aGVyIHRoYW4gZG9jdW1lbnQgaXQuIFRoZSBydWxlIGVhcm5zIGl0cyBwbGFjZSBvbiBudW1lcmljXG4gICAgICAgICAqIGFycmF5czsgaXQgZG9lcyBub3QgaGF2ZSBhbnkgaGVyZS5cbiAgICAgICAgICovXG4gICAgICAgICd1bmljb3JuL3JlcXVpcmUtYXJyYXktc29ydC1jb21wYXJlJzogJ29mZicsXG4gICAgICAgIC8vIFRoZSBjb2RlYmFzZSBhbHJlYWR5IHNwZWxscyBlbmNvZGluZ3MgdGhlIHdheSB0aGUgRW5jb2RpbmcgU3RhbmRhcmQgZG9lcyAoYHV0Zi04YCksIHdoaWNoIGlzIGFsc28gd2hhdCBgVGV4dERlY29kZXJgIHJlcG9ydHMuIEtlZXAgdGhlIHJ1bGUgZW5mb3JjaW5nIGNvbnNpc3RlbmN5LCBqdXN0IGluIHRoZSBkaXJlY3Rpb24gYWxyZWFkeSBpbiB1c2UuXG4gICAgICAgICd1bmljb3JuL3RleHQtZW5jb2RpbmctaWRlbnRpZmllci1jYXNlJzogW1xuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAge1xuICAgICAgICAgICAgd2l0aERhc2g6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIC8vIEJ1aWxkL2xpbnQvdmVyc2lvbiBzY3JpcHRzIGFyZSBDTEkgZW50cnkgcG9pbnRzLCB3aGVyZSBleGl0aW5nIHdpdGggYSBzdGF0dXMgY29kZSBpcyB0aGUgaW50ZXJmYWNlLlxuICAgICAgZmlsZXM6IGNvbnRleHQuc2NyaXB0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAndW5pY29ybi9uby1wcm9jZXNzLWV4aXQnOiAnb2ZmJ1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgLypcbiAgICAgICAqIEEgbW9kdWxlLWxldmVsIGZpeHR1cmUgYXNzaWduZWQgZnJvbSBgYmVmb3JlRWFjaGAgaXMgdGhlIHN0YW5kYXJkIHRlc3Qgc2hhcGU6XG4gICAgICAgKlxuICAgICAgICogICBsZXQgYXBwOiBBcHA7XG4gICAgICAgKiAgIGJlZm9yZUVhY2goKCkgPT4geyBhcHAgPSBBcHAuY3JlYXRlQ29uZmlndXJlZF9fKCk7IH0pO1xuICAgICAgICpcbiAgICAgICAqIFRoZSBydWxlIGlzIHJpZ2h0IGFib3V0IHByb2R1Y3Rpb24gY29kZSAtLSBtb2R1bGUgc3RhdGUgcmVhc3NpZ25lZCBmcm9tIGluc2lkZSBhIGZ1bmN0aW9uIGlzIHdvcnRoXG4gICAgICAgKiBmbGFnZ2luZywgYW5kIHRoZSBmaXggaXMgdG8gaG9sZCBpdCBpbiBhIGBjb25zdGAgb2JqZWN0IGluc3RlYWQuIEluIHRlc3RzIHRoYXQgd291bGQgcmVwbGFjZSBldmVyeVxuICAgICAgICogYGFwcGAgd2l0aCBgU1RBVEUuYXBwYCBhbmQgbWFrZSBlYWNoIGZpbGUgcmVhZCB3b3JzZSBmb3Igbm8gZ2Fpbiwgc2luY2UgdGhlIGZpeHR1cmUgaXMgcmVzZXQgcGVyIHRlc3RcbiAgICAgICAqIGJ5IGRlc2lnbi4gU2NvcGVkIG9mZiBoZXJlIHJhdGhlciB0aGFuIGRpc2FibGVkIG91dHJpZ2h0LCBzbyBwcm9kdWN0aW9uIGNvZGUga2VlcHMgdGhlIGNoZWNrLlxuICAgICAgICovXG4gICAgICBmaWxlczogY29udGV4dC50ZXN0RmlsZXMsXG4gICAgICBydWxlczoge1xuICAgICAgICAvKlxuICAgICAgICAgKiBUd28gc2hhcGVzIGhlcmUgY2Fubm90IGZvbGxvdyB0aGUgYWR2aWNlLiBBIGhlbHBlciBkZWZpbmVkIGluc2lkZSBhbiBgZXZhbEluT2JzaWRpYW5gIGNhbGxiYWNrXG4gICAgICAgICAqIGNhbm5vdCBiZSBob2lzdGVkIGF0IGFsbDogdGhlIGNhbGxiYWNrIGlzIHNlcmlhbGl6ZWQgd2l0aCBgdG9TdHJpbmcoKWAgYW5kIHJ1bnMgaW5zaWRlIE9ic2lkaWFuLCBzb1xuICAgICAgICAgKiBhbnl0aGluZyBsZWZ0IGJlaGluZCBpbiB0aGUgbW9kdWxlIHNjb3BlIGlzIHNpbXBseSBub3QgdGhlcmUuIEFuZCBhIHBlci1zdWl0ZSBmYWN0b3J5XG4gICAgICAgICAqIChgY3JlYXRlQ29tcG9uZW50YCwgYGNyZWF0ZU1vY2tQbHVnaW5gKSBpcyBkZWxpYmVyYXRlbHkgbG9jYWwsIGtlZXBpbmcgZWFjaCBzdWl0ZSdzIGZpeHR1cmUgbmV4dCB0b1xuICAgICAgICAgKiB0aGUgYXNzZXJ0aW9ucyB0aGF0IHJlYWQgaXQuIFByb2R1Y3Rpb24gY29kZSBrZWVwcyB0aGUgY2hlY2suXG4gICAgICAgICAqL1xuICAgICAgICAndW5pY29ybi9jb25zaXN0ZW50LWZ1bmN0aW9uLXNjb3BpbmcnOiAnb2ZmJyxcbiAgICAgICAgLypcbiAgICAgICAgICogQSB0ZXN0IGJpbmRpbmcgaXMgbmFtZWQgYWZ0ZXIgdGhlIHRoaW5nIGl0IGNhcHR1cmVzLCBub3QgYWZ0ZXIgd2hhdCBpdCBkb2VzOiBgY3JlYXRlRWxlbWVudFNweWBcbiAgICAgICAgICogaG9sZHMgdGhlIHNweSBvbiBgY3JlYXRlRWxlbWVudGAsIGFuZCBgY3JlYXRlUHJvZ3JhbU9wdGlvbnNgIGhvbGRzIHRoZSBvcHRpb25zIGBjcmVhdGVQcm9ncmFtYCB3YXNcbiAgICAgICAgICogY2FsbGVkIHdpdGguIFRoZSB2ZXJiIGJlbG9uZ3MgdG8gdGhlIG5hbWUgYmVpbmcgcmVmZXJlbmNlZCwgc28gdGhlIHJ1bGUgcmVhZHMgaXQgYXMgYSBmdW5jdGlvbiBuYW1lXG4gICAgICAgICAqIHRoYXQgaXMgbm90IGEgZnVuY3Rpb24uIExlZnQgb24gZm9yIHByb2R1Y3Rpb24gY29kZSwgd2hlcmUgdGhlIGNvbXBsYWludCBpcyB0aGUgcmlnaHQgb25lLlxuICAgICAgICAgKi9cbiAgICAgICAgJ3VuaWNvcm4vbm8tbm9uLWZ1bmN0aW9uLXZlcmItcHJlZml4JzogJ29mZicsXG4gICAgICAgICd1bmljb3JuL25vLXRvcC1sZXZlbC1hc3NpZ25tZW50LWluLWZ1bmN0aW9uJzogJ29mZidcbiAgICAgIH1cbiAgICB9XG4gIF0pO1xufVxuXG4vKiBlc2xpbnQtZW5hYmxlIG5vLW1hZ2ljLW51bWJlcnMgLS0gV2UgZGlzYWJsZWQgbWFnaWMgbnVtYmVycyBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgYWxsIG92ZXIgdGhlIGNvbmZpZ3MuICovXG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBZ0JBLE9BQU8scUJBQXFCO0FBQzVCLFNBQVMseUJBQXlCO0FBQ2xDLE9BQU8sWUFBWTtBQUNuQixTQUFTLFlBQVk7QUFFckIsT0FBTyxlQUFlO0FBQ3RCLFNBQVMsc0NBQXNDO0FBQy9DLFNBQVMsZUFBZSxzQ0FBc0M7QUFFOUQsT0FBTyxnQkFBZ0I7QUFDdkIsU0FBUyxXQUFXLDRCQUE0QjtBQUVoRCxPQUFPLGFBQWE7QUFDcEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLGtCQUFrQjtBQUUzQixPQUFPLGNBQWM7QUFF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
@@ -8,6 +8,7 @@ import { noUnresolvedJsdocLink } from "./no-unresolved-jsdoc-link.mjs";
8
8
  import { noUnusedParamsMembers } from "./no-unused-params-members.mjs";
9
9
  import { noUsedUnderscoreVariables } from "./no-used-underscore-variables.mjs";
10
10
  import { paramsOptionsNameMatch } from "./params-options-name-match.mjs";
11
+ import { preferLogicalOperatorOverTernary } from "./prefer-logical-operator-over-ternary.mjs";
11
12
  import { preferNoopAsync } from "./prefer-noop-async.mjs";
12
13
  import { readonlyParamsOptionsResultMembers } from "./readonly-params-options-result-members.mjs";
13
14
  import { requireMethodTemplate } from "./require-method-template.mjs";
@@ -19,6 +20,7 @@ const genericInHouseEslintRules = {
19
20
  "no-unused-params-members": noUnusedParamsMembers,
20
21
  "no-used-underscore-variables": noUsedUnderscoreVariables,
21
22
  "params-options-name-match": paramsOptionsNameMatch,
23
+ "prefer-logical-operator-over-ternary": preferLogicalOperatorOverTernary,
22
24
  "prefer-noop-async": preferNoopAsync,
23
25
  "readonly-params-options-result-members": readonlyParamsOptionsResultMembers,
24
26
  "require-method-template": requireMethodTemplate,
@@ -32,4 +34,4 @@ export {
32
34
  genericInHouseEslintRules,
33
35
  inHouseEslintPlugin
34
36
  };
35
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL2luLWhvdXNlLXBsdWdpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBnZW5lcmljIGluLWhvdXNlIEVTTGludCBydWxlcywgYW5kIHRoZSBwbHVnaW4gdGhhdCByZWdpc3RlcnMgdGhlbS5cbiAqXG4gKiBUaGUgZ2VuZXJpYyBydWxlcyBhcmUgcmVnaXN0ZXJlZCB1bmRlciB7QGxpbmsgSU5fSE9VU0VfRVNMSU5UX1BMVUdJTl9OQU1FfSwgdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgdGhhdCBkZWZpbmVzXG4gKiB0aGVtLiBBIHBhY2thZ2UgYWRkaW5nIHJ1bGVzIG9mIGl0cyBvd24gcmVnaXN0ZXJzIHRoZW0gdW5kZXIgaXRzIG93biBuYW1lLCBhcyBhIHBsdWdpbiBvZiBpdHMgb3duIGJlc2lkZVxuICoge0BsaW5rIGluSG91c2VFc2xpbnRQbHVnaW59LlxuICovXG5cbmltcG9ydCB0eXBlIHsgRVNMaW50IH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHsgbm9Bc3luY0NhbGxiYWNrVG9VbnNhZmVSZXR1cm4gfSBmcm9tICcuL25vLWFzeW5jLWNhbGxiYWNrLXRvLXVuc2FmZS1yZXR1cm4udHMnO1xuaW1wb3J0IHsgbm9VbnJlc29sdmVkSnNkb2NMaW5rIH0gZnJvbSAnLi9uby11bnJlc29sdmVkLWpzZG9jLWxpbmsudHMnO1xuaW1wb3J0IHsgbm9VbnVzZWRQYXJhbXNNZW1iZXJzIH0gZnJvbSAnLi9uby11bnVzZWQtcGFyYW1zLW1lbWJlcnMudHMnO1xuaW1wb3J0IHsgbm9Vc2VkVW5kZXJzY29yZVZhcmlhYmxlcyB9IGZyb20gJy4vbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcy50cyc7XG5pbXBvcnQgeyBwYXJhbXNPcHRpb25zTmFtZU1hdGNoIH0gZnJvbSAnLi9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoLnRzJztcbmltcG9ydCB7IHByZWZlck5vb3BBc3luYyB9IGZyb20gJy4vcHJlZmVyLW5vb3AtYXN5bmMudHMnO1xuaW1wb3J0IHsgcmVhZG9ubHlQYXJhbXNPcHRpb25zUmVzdWx0TWVtYmVycyB9IGZyb20gJy4vcmVhZG9ubHktcGFyYW1zLW9wdGlvbnMtcmVzdWx0LW1lbWJlcnMudHMnO1xuaW1wb3J0IHsgcmVxdWlyZU1ldGhvZFRlbXBsYXRlIH0gZnJvbSAnLi9yZXF1aXJlLW1ldGhvZC10ZW1wbGF0ZS50cyc7XG5pbXBvcnQgeyByZXF1aXJlU3VwZXJDYWxsIH0gZnJvbSAnLi9yZXF1aXJlLXN1cGVyLWNhbGwudHMnO1xuXG4vKipcbiAqIFRoZSBuYW1lc3BhY2UgdGhlIGdlbmVyaWMgaW4taG91c2UgcnVsZXMgYXJlIHJlZ2lzdGVyZWQgdW5kZXI6IHRoZSBuYW1lIG9mIHRoZSBwYWNrYWdlIHRoYXQgZGVmaW5lcyB0aGVtLlxuICovXG5leHBvcnQgY29uc3QgSU5fSE9VU0VfRVNMSU5UX1BMVUdJTl9OQU1FID0gJ3R5cGVzY3JpcHQtZGV2LXRvb2xraXQnO1xuXG4vKipcbiAqIFRoZSBnZW5lcmljIGluLWhvdXNlIHJ1bGVzLCBrZXllZCBieSB0aGVpciBuYW1lIGluc2lkZSB7QGxpbmsgSU5fSE9VU0VfRVNMSU5UX1BMVUdJTl9OQU1FfS5cbiAqL1xuZXhwb3J0IGNvbnN0IGdlbmVyaWNJbkhvdXNlRXNsaW50UnVsZXM6IE5vbk51bGxhYmxlPEVTTGludC5QbHVnaW5bJ3J1bGVzJ10+ID0ge1xuICAnbm8tYXN5bmMtY2FsbGJhY2stdG8tdW5zYWZlLXJldHVybic6IG5vQXN5bmNDYWxsYmFja1RvVW5zYWZlUmV0dXJuLFxuICAnbm8tdW5yZXNvbHZlZC1qc2RvYy1saW5rJzogbm9VbnJlc29sdmVkSnNkb2NMaW5rLFxuICAnbm8tdW51c2VkLXBhcmFtcy1tZW1iZXJzJzogbm9VbnVzZWRQYXJhbXNNZW1iZXJzLFxuICAnbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcyc6IG5vVXNlZFVuZGVyc2NvcmVWYXJpYWJsZXMsXG4gICdwYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoJzogcGFyYW1zT3B0aW9uc05hbWVNYXRjaCxcbiAgJ3ByZWZlci1ub29wLWFzeW5jJzogcHJlZmVyTm9vcEFzeW5jLFxuICAncmVhZG9ubHktcGFyYW1zLW9wdGlvbnMtcmVzdWx0LW1lbWJlcnMnOiByZWFkb25seVBhcmFtc09wdGlvbnNSZXN1bHRNZW1iZXJzLFxuICAncmVxdWlyZS1tZXRob2QtdGVtcGxhdGUnOiByZXF1aXJlTWV0aG9kVGVtcGxhdGUsXG4gICdyZXF1aXJlLXN1cGVyLWNhbGwnOiByZXF1aXJlU3VwZXJDYWxsXG59O1xuXG4vKipcbiAqIFRoZSBFU0xpbnQgcGx1Z2luIHJlZ2lzdGVyaW5nIHRoZSBnZW5lcmljIGluLWhvdXNlIHJ1bGVzIGFsb25lLCBmb3IgYSBwcm9qZWN0IHRoYXQgYWRkcyBub25lIG9mIGl0cyBvd24uXG4gKi9cbmV4cG9ydCBjb25zdCBpbkhvdXNlRXNsaW50UGx1Z2luOiBFU0xpbnQuUGx1Z2luID0ge1xuICBydWxlczogZ2VuZXJpY0luSG91c2VFc2xpbnRSdWxlc1xufTtcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBWUEsU0FBUyxxQ0FBcUM7QUFDOUMsU0FBUyw2QkFBNkI7QUFDdEMsU0FBUyw2QkFBNkI7QUFDdEMsU0FBUyxpQ0FBaUM7QUFDMUMsU0FBUyw4QkFBOEI7QUFDdkMsU0FBUyx1QkFBdUI7QUFDaEMsU0FBUywwQ0FBMEM7QUFDbkQsU0FBUyw2QkFBNkI7QUFDdEMsU0FBUyx3QkFBd0I7QUFLMUIsTUFBTSw4QkFBOEI7QUFLcEMsTUFBTSw0QkFBaUU7QUFBQSxFQUM1RSxzQ0FBc0M7QUFBQSxFQUN0Qyw0QkFBNEI7QUFBQSxFQUM1Qiw0QkFBNEI7QUFBQSxFQUM1QixnQ0FBZ0M7QUFBQSxFQUNoQyw2QkFBNkI7QUFBQSxFQUM3QixxQkFBcUI7QUFBQSxFQUNyQiwwQ0FBMEM7QUFBQSxFQUMxQywyQkFBMkI7QUFBQSxFQUMzQixzQkFBc0I7QUFDeEI7QUFLTyxNQUFNLHNCQUFxQztBQUFBLEVBQ2hELE9BQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
37
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL2luLWhvdXNlLXBsdWdpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFRoZSBnZW5lcmljIGluLWhvdXNlIEVTTGludCBydWxlcywgYW5kIHRoZSBwbHVnaW4gdGhhdCByZWdpc3RlcnMgdGhlbS5cbiAqXG4gKiBUaGUgZ2VuZXJpYyBydWxlcyBhcmUgcmVnaXN0ZXJlZCB1bmRlciB7QGxpbmsgSU5fSE9VU0VfRVNMSU5UX1BMVUdJTl9OQU1FfSwgdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgdGhhdCBkZWZpbmVzXG4gKiB0aGVtLiBBIHBhY2thZ2UgYWRkaW5nIHJ1bGVzIG9mIGl0cyBvd24gcmVnaXN0ZXJzIHRoZW0gdW5kZXIgaXRzIG93biBuYW1lLCBhcyBhIHBsdWdpbiBvZiBpdHMgb3duIGJlc2lkZVxuICoge0BsaW5rIGluSG91c2VFc2xpbnRQbHVnaW59LlxuICovXG5cbmltcG9ydCB0eXBlIHsgRVNMaW50IH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHsgbm9Bc3luY0NhbGxiYWNrVG9VbnNhZmVSZXR1cm4gfSBmcm9tICcuL25vLWFzeW5jLWNhbGxiYWNrLXRvLXVuc2FmZS1yZXR1cm4udHMnO1xuaW1wb3J0IHsgbm9VbnJlc29sdmVkSnNkb2NMaW5rIH0gZnJvbSAnLi9uby11bnJlc29sdmVkLWpzZG9jLWxpbmsudHMnO1xuaW1wb3J0IHsgbm9VbnVzZWRQYXJhbXNNZW1iZXJzIH0gZnJvbSAnLi9uby11bnVzZWQtcGFyYW1zLW1lbWJlcnMudHMnO1xuaW1wb3J0IHsgbm9Vc2VkVW5kZXJzY29yZVZhcmlhYmxlcyB9IGZyb20gJy4vbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcy50cyc7XG5pbXBvcnQgeyBwYXJhbXNPcHRpb25zTmFtZU1hdGNoIH0gZnJvbSAnLi9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoLnRzJztcbmltcG9ydCB7IHByZWZlckxvZ2ljYWxPcGVyYXRvck92ZXJUZXJuYXJ5IH0gZnJvbSAnLi9wcmVmZXItbG9naWNhbC1vcGVyYXRvci1vdmVyLXRlcm5hcnkudHMnO1xuaW1wb3J0IHsgcHJlZmVyTm9vcEFzeW5jIH0gZnJvbSAnLi9wcmVmZXItbm9vcC1hc3luYy50cyc7XG5pbXBvcnQgeyByZWFkb25seVBhcmFtc09wdGlvbnNSZXN1bHRNZW1iZXJzIH0gZnJvbSAnLi9yZWFkb25seS1wYXJhbXMtb3B0aW9ucy1yZXN1bHQtbWVtYmVycy50cyc7XG5pbXBvcnQgeyByZXF1aXJlTWV0aG9kVGVtcGxhdGUgfSBmcm9tICcuL3JlcXVpcmUtbWV0aG9kLXRlbXBsYXRlLnRzJztcbmltcG9ydCB7IHJlcXVpcmVTdXBlckNhbGwgfSBmcm9tICcuL3JlcXVpcmUtc3VwZXItY2FsbC50cyc7XG5cbi8qKlxuICogVGhlIG5hbWVzcGFjZSB0aGUgZ2VuZXJpYyBpbi1ob3VzZSBydWxlcyBhcmUgcmVnaXN0ZXJlZCB1bmRlcjogdGhlIG5hbWUgb2YgdGhlIHBhY2thZ2UgdGhhdCBkZWZpbmVzIHRoZW0uXG4gKi9cbmV4cG9ydCBjb25zdCBJTl9IT1VTRV9FU0xJTlRfUExVR0lOX05BTUUgPSAndHlwZXNjcmlwdC1kZXYtdG9vbGtpdCc7XG5cbi8qKlxuICogVGhlIGdlbmVyaWMgaW4taG91c2UgcnVsZXMsIGtleWVkIGJ5IHRoZWlyIG5hbWUgaW5zaWRlIHtAbGluayBJTl9IT1VTRV9FU0xJTlRfUExVR0lOX05BTUV9LlxuICovXG5leHBvcnQgY29uc3QgZ2VuZXJpY0luSG91c2VFc2xpbnRSdWxlczogTm9uTnVsbGFibGU8RVNMaW50LlBsdWdpblsncnVsZXMnXT4gPSB7XG4gICduby1hc3luYy1jYWxsYmFjay10by11bnNhZmUtcmV0dXJuJzogbm9Bc3luY0NhbGxiYWNrVG9VbnNhZmVSZXR1cm4sXG4gICduby11bnJlc29sdmVkLWpzZG9jLWxpbmsnOiBub1VucmVzb2x2ZWRKc2RvY0xpbmssXG4gICduby11bnVzZWQtcGFyYW1zLW1lbWJlcnMnOiBub1VudXNlZFBhcmFtc01lbWJlcnMsXG4gICduby11c2VkLXVuZGVyc2NvcmUtdmFyaWFibGVzJzogbm9Vc2VkVW5kZXJzY29yZVZhcmlhYmxlcyxcbiAgJ3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2gnOiBwYXJhbXNPcHRpb25zTmFtZU1hdGNoLFxuICAncHJlZmVyLWxvZ2ljYWwtb3BlcmF0b3Itb3Zlci10ZXJuYXJ5JzogcHJlZmVyTG9naWNhbE9wZXJhdG9yT3ZlclRlcm5hcnksXG4gICdwcmVmZXItbm9vcC1hc3luYyc6IHByZWZlck5vb3BBc3luYyxcbiAgJ3JlYWRvbmx5LXBhcmFtcy1vcHRpb25zLXJlc3VsdC1tZW1iZXJzJzogcmVhZG9ubHlQYXJhbXNPcHRpb25zUmVzdWx0TWVtYmVycyxcbiAgJ3JlcXVpcmUtbWV0aG9kLXRlbXBsYXRlJzogcmVxdWlyZU1ldGhvZFRlbXBsYXRlLFxuICAncmVxdWlyZS1zdXBlci1jYWxsJzogcmVxdWlyZVN1cGVyQ2FsbFxufTtcblxuLyoqXG4gKiBUaGUgRVNMaW50IHBsdWdpbiByZWdpc3RlcmluZyB0aGUgZ2VuZXJpYyBpbi1ob3VzZSBydWxlcyBhbG9uZSwgZm9yIGEgcHJvamVjdCB0aGF0IGFkZHMgbm9uZSBvZiBpdHMgb3duLlxuICovXG5leHBvcnQgY29uc3QgaW5Ib3VzZUVzbGludFBsdWdpbjogRVNMaW50LlBsdWdpbiA9IHtcbiAgcnVsZXM6IGdlbmVyaWNJbkhvdXNlRXNsaW50UnVsZXNcbn07XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQVlBLFNBQVMscUNBQXFDO0FBQzlDLFNBQVMsNkJBQTZCO0FBQ3RDLFNBQVMsNkJBQTZCO0FBQ3RDLFNBQVMsaUNBQWlDO0FBQzFDLFNBQVMsOEJBQThCO0FBQ3ZDLFNBQVMsd0NBQXdDO0FBQ2pELFNBQVMsdUJBQXVCO0FBQ2hDLFNBQVMsMENBQTBDO0FBQ25ELFNBQVMsNkJBQTZCO0FBQ3RDLFNBQVMsd0JBQXdCO0FBSzFCLE1BQU0sOEJBQThCO0FBS3BDLE1BQU0sNEJBQWlFO0FBQUEsRUFDNUUsc0NBQXNDO0FBQUEsRUFDdEMsNEJBQTRCO0FBQUEsRUFDNUIsNEJBQTRCO0FBQUEsRUFDNUIsZ0NBQWdDO0FBQUEsRUFDaEMsNkJBQTZCO0FBQUEsRUFDN0Isd0NBQXdDO0FBQUEsRUFDeEMscUJBQXFCO0FBQUEsRUFDckIsMENBQTBDO0FBQUEsRUFDMUMsMkJBQTJCO0FBQUEsRUFDM0Isc0JBQXNCO0FBQ3hCO0FBS08sTUFBTSxzQkFBcUM7QUFBQSxFQUNoRCxPQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -5,6 +5,7 @@ export * as 'no-unresolved-jsdoc-link' from './no-unresolved-jsdoc-link.mjs';
5
5
  export * as 'no-unused-params-members' from './no-unused-params-members.mjs';
6
6
  export * as 'no-used-underscore-variables' from './no-used-underscore-variables.mjs';
7
7
  export * as 'params-options-name-match' from './params-options-name-match.mjs';
8
+ export * as 'prefer-logical-operator-over-ternary' from './prefer-logical-operator-over-ternary.mjs';
8
9
  export * as 'prefer-noop-async' from './prefer-noop-async.mjs';
9
10
  export * as 'readonly-params-options-result-members' from './readonly-params-options-result-members.mjs';
10
11
  export * as 'require-method-template' from './require-method-template.mjs';
@@ -9,6 +9,7 @@ import * as no_unresolved_jsdoc_link from "./no-unresolved-jsdoc-link.mjs";
9
9
  import * as no_unused_params_members from "./no-unused-params-members.mjs";
10
10
  import * as no_used_underscore_variables from "./no-used-underscore-variables.mjs";
11
11
  import * as params_options_name_match from "./params-options-name-match.mjs";
12
+ import * as prefer_logical_operator_over_ternary from "./prefer-logical-operator-over-ternary.mjs";
12
13
  import * as prefer_noop_async from "./prefer-noop-async.mjs";
13
14
  import * as readonly_params_options_result_members from "./readonly-params-options-result-members.mjs";
14
15
  import * as require_method_template from "./require-method-template.mjs";
@@ -22,6 +23,7 @@ export {
22
23
  no_unused_params_members as "no-unused-params-members",
23
24
  no_used_underscore_variables as "no-used-underscore-variables",
24
25
  params_options_name_match as "params-options-name-match",
26
+ prefer_logical_operator_over_ternary as "prefer-logical-operator-over-ternary",
25
27
  prefer_noop_async as "prefer-noop-async",
26
28
  readonly_params_options_result_members as "readonly-params-options-result-members",
27
29
  require_method_template as "require-method-template",
@@ -29,4 +31,4 @@ export {
29
31
  rule_tester_helper as "rule-tester-helper",
30
32
  ts_estree_node as "ts-estree-node"
31
33
  };
32
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2luLWhvdXNlLXBsdWdpbicgZnJvbSAnLi9pbi1ob3VzZS1wbHVnaW4udHMnO1xuZXhwb3J0ICogYXMgJ25vLWFzeW5jLWNhbGxiYWNrLXRvLXVuc2FmZS1yZXR1cm4nIGZyb20gJy4vbm8tYXN5bmMtY2FsbGJhY2stdG8tdW5zYWZlLXJldHVybi50cyc7XG5leHBvcnQgKiBhcyAnbm8tdW5yZXNvbHZlZC1qc2RvYy1saW5rJyBmcm9tICcuL25vLXVucmVzb2x2ZWQtanNkb2MtbGluay50cyc7XG5leHBvcnQgKiBhcyAnbm8tdW51c2VkLXBhcmFtcy1tZW1iZXJzJyBmcm9tICcuL25vLXVudXNlZC1wYXJhbXMtbWVtYmVycy50cyc7XG5leHBvcnQgKiBhcyAnbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcycgZnJvbSAnLi9uby11c2VkLXVuZGVyc2NvcmUtdmFyaWFibGVzLnRzJztcbmV4cG9ydCAqIGFzICdwYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoJyBmcm9tICcuL3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2gudHMnO1xuZXhwb3J0ICogYXMgJ3ByZWZlci1ub29wLWFzeW5jJyBmcm9tICcuL3ByZWZlci1ub29wLWFzeW5jLnRzJztcbmV4cG9ydCAqIGFzICdyZWFkb25seS1wYXJhbXMtb3B0aW9ucy1yZXN1bHQtbWVtYmVycycgZnJvbSAnLi9yZWFkb25seS1wYXJhbXMtb3B0aW9ucy1yZXN1bHQtbWVtYmVycy50cyc7XG5leHBvcnQgKiBhcyAncmVxdWlyZS1tZXRob2QtdGVtcGxhdGUnIGZyb20gJy4vcmVxdWlyZS1tZXRob2QtdGVtcGxhdGUudHMnO1xuZXhwb3J0ICogYXMgJ3JlcXVpcmUtc3VwZXItY2FsbCcgZnJvbSAnLi9yZXF1aXJlLXN1cGVyLWNhbGwudHMnO1xuZXhwb3J0ICogYXMgJ3J1bGUtdGVzdGVyLWhlbHBlcicgZnJvbSAnLi9ydWxlLXRlc3Rlci1oZWxwZXIudHMnO1xuZXhwb3J0ICogYXMgJ3RzLWVzdHJlZS1ub2RlJyBmcm9tICcuL3RzLWVzdHJlZS1ub2RlLnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBRUEsWUFBWUEscUJBQXVCO0FBQ25DLFlBQVlDLHdDQUEwQztBQUN0RCxZQUFZQyw4QkFBZ0M7QUFDNUMsWUFBWUMsOEJBQWdDO0FBQzVDLFlBQVlDLGtDQUFvQztBQUNoRCxZQUFZQywrQkFBaUM7QUFDN0MsWUFBWUMsdUJBQXlCO0FBQ3JDLFlBQVlDLDRDQUE4QztBQUMxRCxZQUFZQyw2QkFBK0I7QUFDM0MsWUFBWUMsd0JBQTBCO0FBQ3RDLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZQyxvQkFBc0I7IiwKICAibmFtZXMiOiBbImluLWhvdXNlLXBsdWdpbiIsICJuby1hc3luYy1jYWxsYmFjay10by11bnNhZmUtcmV0dXJuIiwgIm5vLXVucmVzb2x2ZWQtanNkb2MtbGluayIsICJuby11bnVzZWQtcGFyYW1zLW1lbWJlcnMiLCAibm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcyIsICJwYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoIiwgInByZWZlci1ub29wLWFzeW5jIiwgInJlYWRvbmx5LXBhcmFtcy1vcHRpb25zLXJlc3VsdC1tZW1iZXJzIiwgInJlcXVpcmUtbWV0aG9kLXRlbXBsYXRlIiwgInJlcXVpcmUtc3VwZXItY2FsbCIsICJydWxlLXRlc3Rlci1oZWxwZXIiLCAidHMtZXN0cmVlLW5vZGUiXQp9Cg==
34
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vLi4vc3JjL2xpbnRlcnMvZXNsaW50LXJ1bGVzL2luZGV4LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKiBUSElTIElTIEEgR0VORVJBVEVEL0JVTkRMRUQgRklMRSBCWSBCVUlMRCBTQ1JJUFQgKi9cblxuZXhwb3J0ICogYXMgJ2luLWhvdXNlLXBsdWdpbicgZnJvbSAnLi9pbi1ob3VzZS1wbHVnaW4udHMnO1xuZXhwb3J0ICogYXMgJ25vLWFzeW5jLWNhbGxiYWNrLXRvLXVuc2FmZS1yZXR1cm4nIGZyb20gJy4vbm8tYXN5bmMtY2FsbGJhY2stdG8tdW5zYWZlLXJldHVybi50cyc7XG5leHBvcnQgKiBhcyAnbm8tdW5yZXNvbHZlZC1qc2RvYy1saW5rJyBmcm9tICcuL25vLXVucmVzb2x2ZWQtanNkb2MtbGluay50cyc7XG5leHBvcnQgKiBhcyAnbm8tdW51c2VkLXBhcmFtcy1tZW1iZXJzJyBmcm9tICcuL25vLXVudXNlZC1wYXJhbXMtbWVtYmVycy50cyc7XG5leHBvcnQgKiBhcyAnbm8tdXNlZC11bmRlcnNjb3JlLXZhcmlhYmxlcycgZnJvbSAnLi9uby11c2VkLXVuZGVyc2NvcmUtdmFyaWFibGVzLnRzJztcbmV4cG9ydCAqIGFzICdwYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoJyBmcm9tICcuL3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2gudHMnO1xuZXhwb3J0ICogYXMgJ3ByZWZlci1sb2dpY2FsLW9wZXJhdG9yLW92ZXItdGVybmFyeScgZnJvbSAnLi9wcmVmZXItbG9naWNhbC1vcGVyYXRvci1vdmVyLXRlcm5hcnkudHMnO1xuZXhwb3J0ICogYXMgJ3ByZWZlci1ub29wLWFzeW5jJyBmcm9tICcuL3ByZWZlci1ub29wLWFzeW5jLnRzJztcbmV4cG9ydCAqIGFzICdyZWFkb25seS1wYXJhbXMtb3B0aW9ucy1yZXN1bHQtbWVtYmVycycgZnJvbSAnLi9yZWFkb25seS1wYXJhbXMtb3B0aW9ucy1yZXN1bHQtbWVtYmVycy50cyc7XG5leHBvcnQgKiBhcyAncmVxdWlyZS1tZXRob2QtdGVtcGxhdGUnIGZyb20gJy4vcmVxdWlyZS1tZXRob2QtdGVtcGxhdGUudHMnO1xuZXhwb3J0ICogYXMgJ3JlcXVpcmUtc3VwZXItY2FsbCcgZnJvbSAnLi9yZXF1aXJlLXN1cGVyLWNhbGwudHMnO1xuZXhwb3J0ICogYXMgJ3J1bGUtdGVzdGVyLWhlbHBlcicgZnJvbSAnLi9ydWxlLXRlc3Rlci1oZWxwZXIudHMnO1xuZXhwb3J0ICogYXMgJ3RzLWVzdHJlZS1ub2RlJyBmcm9tICcuL3RzLWVzdHJlZS1ub2RlLnRzJztcbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBRUEsWUFBWUEscUJBQXVCO0FBQ25DLFlBQVlDLHdDQUEwQztBQUN0RCxZQUFZQyw4QkFBZ0M7QUFDNUMsWUFBWUMsOEJBQWdDO0FBQzVDLFlBQVlDLGtDQUFvQztBQUNoRCxZQUFZQywrQkFBaUM7QUFDN0MsWUFBWUMsMENBQTRDO0FBQ3hELFlBQVlDLHVCQUF5QjtBQUNyQyxZQUFZQyw0Q0FBOEM7QUFDMUQsWUFBWUMsNkJBQStCO0FBQzNDLFlBQVlDLHdCQUEwQjtBQUN0QyxZQUFZQyx3QkFBMEI7QUFDdEMsWUFBWUMsb0JBQXNCOyIsCiAgIm5hbWVzIjogWyJpbi1ob3VzZS1wbHVnaW4iLCAibm8tYXN5bmMtY2FsbGJhY2stdG8tdW5zYWZlLXJldHVybiIsICJuby11bnJlc29sdmVkLWpzZG9jLWxpbmsiLCAibm8tdW51c2VkLXBhcmFtcy1tZW1iZXJzIiwgIm5vLXVzZWQtdW5kZXJzY29yZS12YXJpYWJsZXMiLCAicGFyYW1zLW9wdGlvbnMtbmFtZS1tYXRjaCIsICJwcmVmZXItbG9naWNhbC1vcGVyYXRvci1vdmVyLXRlcm5hcnkiLCAicHJlZmVyLW5vb3AtYXN5bmMiLCAicmVhZG9ubHktcGFyYW1zLW9wdGlvbnMtcmVzdWx0LW1lbWJlcnMiLCAicmVxdWlyZS1tZXRob2QtdGVtcGxhdGUiLCAicmVxdWlyZS1zdXBlci1jYWxsIiwgInJ1bGUtdGVzdGVyLWhlbHBlciIsICJ0cy1lc3RyZWUtbm9kZSJdCn0K
@@ -0,0 +1,30 @@
1
+ /// <reference path="../../library-references.d.mts" />
2
+ /**
3
+ * @file
4
+ *
5
+ * ESLint rule: prefer-logical-operator-over-ternary
6
+ *
7
+ * `unicorn/prefer-logical-operator-over-ternary`, with the fix it withholds in a TypeScript file.
8
+ *
9
+ * Unicorn reports a ternary with one boolean branch (`a ? false : b`) and fixes it to a logical expression
10
+ * (`!a && b`), but only outside TypeScript. `unicorn/prefer-ternary` fixes `if (a) { return false; } return b;` into
11
+ * exactly that ternary, so in a TypeScript file `lint:fix` produced an error it then could not fix, and every site
12
+ * had to be rewritten by hand. This rule reports what unicorn reports and adds the fix where one branch is a boolean
13
+ * literal. The rewrite is exact at runtime: with a negated test (`a ? false : b` → `!a && b`, `a ? b : true` →
14
+ * `!a || b`) for any test, and otherwise (`a ? true : b` → `a || b`, `a ? b : false` → `a && b`) because unicorn
15
+ * reports that shape only for a test it has proven boolean.
16
+ */
17
+ import type { Rule } from 'eslint';
18
+ /**
19
+ * The id of the unicorn rule this rule delegates to, inside the `unicorn` namespace.
20
+ */
21
+ export declare const UNICORN_RULE_NAME = "prefer-logical-operator-over-ternary";
22
+ /**
23
+ * The message id unicorn reports a ternary under when a logical operator could replace it.
24
+ */
25
+ export declare const MESSAGE_ID = "prefer-logical-operator-over-ternary/error";
26
+ /**
27
+ * ESLint rule reporting what `unicorn/prefer-logical-operator-over-ternary` reports, fixing a ternary with a boolean
28
+ * literal branch in a TypeScript file too.
29
+ */
30
+ export declare const preferLogicalOperatorOverTernary: Rule.RuleModule;