obsidian-integration-testing 13.0.0 → 14.0.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 (102) hide show
  1. package/dist/lib/cjs/app-config.cjs +1 -1
  2. package/dist/lib/cjs/app-config.d.cts +25 -25
  3. package/dist/lib/cjs/connect-to-cdp.cjs +1 -1
  4. package/dist/lib/cjs/connect-to-cdp.d.cts +4 -4
  5. package/dist/lib/cjs/demo-vault-bootstrap.cjs +1 -1
  6. package/dist/lib/cjs/demo-vault-bootstrap.d.cts +10 -2
  7. package/dist/lib/cjs/device-settings.cjs +1 -1
  8. package/dist/lib/cjs/device-settings.d.cts +1 -1
  9. package/dist/lib/cjs/emulator-reaper.cjs +1 -1
  10. package/dist/lib/cjs/emulator-reaper.d.cts +2 -2
  11. package/dist/lib/cjs/enable-plugin.cjs +1 -1
  12. package/dist/lib/cjs/eval-in-obsidian.cjs +1 -1
  13. package/dist/lib/cjs/eval-in-obsidian.d.cts +12 -12
  14. package/dist/lib/cjs/generate-function-call.cjs +1 -1
  15. package/dist/lib/cjs/generate-function-call.d.cts +2 -2
  16. package/dist/lib/cjs/index.cjs +1 -1
  17. package/dist/lib/cjs/index.d.cts +4 -4
  18. package/dist/lib/cjs/jest/global-setup.cjs +1 -1
  19. package/dist/lib/cjs/jest/global-setup.d.cts +3 -3
  20. package/dist/lib/cjs/leftover-cleanup.cjs +1 -1
  21. package/dist/lib/cjs/leftover-cleanup.d.cts +2 -2
  22. package/dist/lib/cjs/library.cjs +1 -1
  23. package/dist/lib/cjs/namespace-bootstrap.cjs +1 -1
  24. package/dist/lib/cjs/obsidian-instance.cjs +1 -1
  25. package/dist/lib/cjs/obsidian-instance.d.cts +3 -3
  26. package/dist/lib/cjs/open-obsidian-settings-tab.cjs +3 -3
  27. package/dist/lib/cjs/open-obsidian-settings-tab.d.cts +4 -4
  28. package/dist/lib/cjs/parent-liveness.cjs +1 -1
  29. package/dist/lib/cjs/parent-liveness.d.cts +1 -1
  30. package/dist/lib/cjs/poll-in-obsidian.cjs +1 -1
  31. package/dist/lib/cjs/poll-in-obsidian.d.cts +3 -3
  32. package/dist/lib/cjs/poll-until.cjs +1 -1
  33. package/dist/lib/cjs/poll-until.d.cts +4 -4
  34. package/dist/lib/cjs/process-capture.cjs +1 -1
  35. package/dist/lib/cjs/process-capture.d.cts +3 -3
  36. package/dist/lib/cjs/run-version-matrix.cjs +1 -1
  37. package/dist/lib/cjs/run-version-matrix.d.cts +1 -1
  38. package/dist/lib/cjs/setup-lock.cjs +1 -1
  39. package/dist/lib/cjs/setup-lock.d.cts +1 -1
  40. package/dist/lib/cjs/sharp-loader.cjs +1 -1
  41. package/dist/lib/cjs/sharp-loader.d.cts +6 -6
  42. package/dist/lib/cjs/temporary-vault.cjs +2 -3
  43. package/dist/lib/cjs/temporary-vault.d.cts +4 -4
  44. package/dist/lib/cjs/transport-appium.cjs +1 -1
  45. package/dist/lib/cjs/transport-factory.cjs +1 -1
  46. package/dist/lib/cjs/transport.cjs +1 -1
  47. package/dist/lib/cjs/transport.d.cts +10 -10
  48. package/dist/lib/cjs/version-matrix.cjs +1 -1
  49. package/dist/lib/cjs/version-matrix.d.cts +2 -2
  50. package/dist/lib/cjs/vitest/global-setup.cjs +1 -1
  51. package/dist/lib/cjs/vitest/global-setup.d.cts +3 -3
  52. package/dist/lib/esm/app-config.d.mts +25 -25
  53. package/dist/lib/esm/app-config.mjs +1 -1
  54. package/dist/lib/esm/connect-to-cdp.d.mts +4 -4
  55. package/dist/lib/esm/connect-to-cdp.mjs +1 -1
  56. package/dist/lib/esm/demo-vault-bootstrap.d.mts +10 -2
  57. package/dist/lib/esm/demo-vault-bootstrap.mjs +1 -1
  58. package/dist/lib/esm/device-settings.d.mts +1 -1
  59. package/dist/lib/esm/device-settings.mjs +1 -1
  60. package/dist/lib/esm/emulator-reaper.d.mts +2 -2
  61. package/dist/lib/esm/emulator-reaper.mjs +1 -1
  62. package/dist/lib/esm/enable-plugin.mjs +1 -1
  63. package/dist/lib/esm/eval-in-obsidian.d.mts +12 -12
  64. package/dist/lib/esm/eval-in-obsidian.mjs +1 -1
  65. package/dist/lib/esm/generate-function-call.d.mts +2 -2
  66. package/dist/lib/esm/generate-function-call.mjs +1 -1
  67. package/dist/lib/esm/index.d.mts +4 -4
  68. package/dist/lib/esm/index.mjs +1 -1
  69. package/dist/lib/esm/jest/global-setup.d.mts +3 -3
  70. package/dist/lib/esm/jest/global-setup.mjs +1 -1
  71. package/dist/lib/esm/leftover-cleanup.d.mts +2 -2
  72. package/dist/lib/esm/leftover-cleanup.mjs +1 -1
  73. package/dist/lib/esm/library.mjs +1 -1
  74. package/dist/lib/esm/namespace-bootstrap.mjs +1 -1
  75. package/dist/lib/esm/obsidian-instance.d.mts +3 -3
  76. package/dist/lib/esm/obsidian-instance.mjs +1 -1
  77. package/dist/lib/esm/open-obsidian-settings-tab.d.mts +4 -4
  78. package/dist/lib/esm/open-obsidian-settings-tab.mjs +3 -3
  79. package/dist/lib/esm/parent-liveness.d.mts +1 -1
  80. package/dist/lib/esm/parent-liveness.mjs +1 -1
  81. package/dist/lib/esm/poll-in-obsidian.d.mts +3 -3
  82. package/dist/lib/esm/poll-in-obsidian.mjs +1 -1
  83. package/dist/lib/esm/poll-until.d.mts +4 -4
  84. package/dist/lib/esm/poll-until.mjs +1 -1
  85. package/dist/lib/esm/process-capture.d.mts +3 -3
  86. package/dist/lib/esm/process-capture.mjs +1 -1
  87. package/dist/lib/esm/run-version-matrix.d.mts +1 -1
  88. package/dist/lib/esm/run-version-matrix.mjs +1 -1
  89. package/dist/lib/esm/setup-lock.d.mts +1 -1
  90. package/dist/lib/esm/setup-lock.mjs +1 -1
  91. package/dist/lib/esm/sharp-loader.d.mts +6 -6
  92. package/dist/lib/esm/sharp-loader.mjs +1 -1
  93. package/dist/lib/esm/temporary-vault.d.mts +4 -4
  94. package/dist/lib/esm/temporary-vault.mjs +2 -3
  95. package/dist/lib/esm/transport-appium.mjs +1 -1
  96. package/dist/lib/esm/transport-factory.mjs +1 -1
  97. package/dist/lib/esm/transport.d.mts +10 -10
  98. package/dist/lib/esm/version-matrix.d.mts +2 -2
  99. package/dist/lib/esm/version-matrix.mjs +1 -1
  100. package/dist/lib/esm/vitest/global-setup.d.mts +3 -3
  101. package/dist/lib/esm/vitest/global-setup.mjs +1 -1
  102. package/package.json +1 -1
@@ -112,4 +112,4 @@ async function sweepLeftovers(transportOptions) {
112
112
  export {
113
113
  connectToCdp
114
114
  };
115
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Nvbm5lY3QtdG8tY2RwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHJvZ3JhbW1hdGljIGhlbHBlciB0byBsYXVuY2ggKG9yIGF0dGFjaCB0bykgYSBDRFAtZW5hYmxlZCBPYnNpZGlhbiBpbnN0YW5jZVxuICogd2l0aCB0aGUgcnVudGltZSBoZWxwZXIgbmFtZXNwYWNlIGJvb3RzdHJhcHBlZCwgZm9yIGFkLWhvYyByZWFsLWFwcCBkZWJ1Z2dpbmcuXG4gKlxuICogQSBzaW5nbGUge0BsaW5rIGNvbm5lY3RUb0NkcH0gY2FsbCByZXNvbHZlcyB0aGUgb3duZWQtaW5zdGFuY2UgY29uZmlnLCBvcGVucyBhXG4gKiB2YXVsdCwgYW5kIGJvb3RzdHJhcHMgYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYCAoc28gYGV2YWxXcmFwcGVyYCxcbiAqIHRoZSBiYXNlIGBsaWJgIGhlbHBlcnMsIGBlcnJvclRvU3RyaW5nYCwgYGdldE9ic2lkaWFuTW9kdWxlYCwgXHUyMDI2IGFyZSBhdmFpbGFibGUpLCB0aGVuXG4gKiBoYW5kcyBiYWNrIGEgZGlzcG9zYWJsZSB7QGxpbmsgQ2RwQ29ubmVjdGlvbn0gZXhwb3NpbmcgdGhlIGNob3NlbiBDRFAgcG9ydCwgYVxuICogcmF3IHtAbGluayBDZHBDb25uZWN0aW9uLmludm9rZX0gYW5kIHRoZSByaWNoIHtAbGluayBDZHBDb25uZWN0aW9uLmV2YWxJbk9ic2lkaWFufS5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBjb2RlIChsYXVuY2hlcyBPYnNpZGlhbiAvIENEUCkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgRXhjZXB0IH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHR5cGUgeyBBc2FyRmFsbGJhY2sgfSBmcm9tICcuL2FzYXItZmFsbGJhY2stZGV0ZWN0aW9uLm1qcyc7XG5pbXBvcnQgdHlwZSB7IENhcHR1cmVTY3JlZW5zaG90UGFyYW1zIH0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QubWpzJztcbmltcG9ydCB0eXBlIHsgQ29udGV4dElkIH0gZnJvbSAnLi9jb250ZXh0LWlkLm1qcyc7XG5pbXBvcnQgdHlwZSB7IEVsZWN0cm9uQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5tanMnO1xuaW1wb3J0IHR5cGUge1xuICBFdmFsSW5PYnNpZGlhblBhcmFtcyxcbiAgR2VuZXJpY09iamVjdFxufSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4ubWpzJztcbmltcG9ydCB0eXBlIHsgSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vaW5zdGFsbGVyLWNvbXBhdGliaWxpdHkubWpzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5tanMnO1xuXG5pbXBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5tanMnO1xuaW1wb3J0IHsgZW5zdXJlSGVhZGxlc3NWYXVsdENvbmZpZyB9IGZyb20gJy4vaGVhZGxlc3MtdmF1bHQtY29uZmlnLm1qcyc7XG5pbXBvcnQge1xuICByZXNvbHZlTGVmdG92ZXJNYXhBZ2VJbk1pbGxpc2Vjb25kcyxcbiAgc3dlZXBIb3N0TGVmdG92ZXJzLFxuICB3aWxsU3dlZXBMZWZ0b3ZlcnNcbn0gZnJvbSAnLi9sZWZ0b3Zlci1jbGVhbnVwLm1qcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5tanMnO1xuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi9ub3JtYWxpemUtb3B0aW9uYWwtcHJvcGVydGllcy5tanMnO1xuaW1wb3J0IHsgVGVtcG9yYXJ5VmF1bHQgfSBmcm9tICcuL3RlbXBvcmFyeS12YXVsdC5tanMnO1xuaW1wb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkubWpzJztcbmltcG9ydCB7IHJlc29sdmVPd25lZENvbmZpZ0RpcmVjdG9yeSB9IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMubWpzJztcblxuY29uc3QgREVGQVVMVF9DRFBfSE9TVCA9ICdsb2NhbGhvc3QnO1xuXG4vKipcbiAqIEEgbGl2ZSBjb25uZWN0aW9uIHRvIGEgQ0RQLWVuYWJsZWQgT2JzaWRpYW4gaW5zdGFuY2Ugd2l0aCB0aGUgcnVudGltZSBoZWxwZXJcbiAqIG5hbWVzcGFjZSBib290c3RyYXBwZWQuXG4gKlxuICogSW1wbGVtZW50cyBgQXN5bmNEaXNwb3NhYmxlYCwgc28gYGF3YWl0IHVzaW5nIGNvbm4gPSBhd2FpdCBjb25uZWN0VG9DZHAoXHUyMDI2KWBcbiAqIGRpc3Bvc2VzIGl0IChraWxsaW5nIGFuIG93bmVkIGluc3RhbmNlIGFuZCBcdTIwMTQgZm9yIGEgdGhyb3ctYXdheSB0ZW1wIHZhdWx0IFx1MjAxNFxuICogcmVtb3ZpbmcgaXRzIGRpcmVjdG9yeSkgYXV0b21hdGljYWxseS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZHBDb25uZWN0aW9uIGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIFRoZSBzaWxlbnQtYXNhci1mYWxsYmFjayB2ZXJkaWN0IGZvciBhbiBvd25lZCBpbnN0YW5jZSwgcmVhZCBsaXZlIGFmdGVyIGJvb3Q6XG4gICAqIHdoZXRoZXIgdGhlIGFwcCB2ZXJzaW9uIGl0IGlzIGFjdHVhbGx5IHJ1bm5pbmcgbWF0Y2hlcyB0aGUgc3dhcHBlZC1pbiBwaW4sIG9yXG4gICAqIHRoZSBpbnN0YWxsZXIgc2lsZW50bHkgcmV2ZXJ0ZWQgdG8gaXRzIG93biBidW5kbGVkIGFzYXIuIGB1bmRlZmluZWRgIGluIGF0dGFjaFxuICAgKiBtb2RlLCB3aGVuIG5vIGFzYXIgd2FzIHN3YXBwZWQsIG9yIHdoZW4gdGhlIHJ1bm5pbmcgdmVyc2lvbiB3YXMgdW5yZWFkYWJsZS4gQVxuICAgKiBgJ2ZhbGxiYWNrJ2AgdmVyZGljdCByZWFjaGVzIGhlcmUgb25seSB3aGVuIHRoZSB0aHJvdyBpcyBkaXNhYmxlZFxuICAgKiAoe0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnMuc2hvdWxkVGhyb3dPblNpbGVudEFzYXJGYWxsYmFja30gYGZhbHNlYCk7XG4gICAqIG90aGVyd2lzZSBpdCB0aHJvd3MgYFNpbGVudEFzYXJGYWxsYmFja0Vycm9yYCBiZWZvcmUgdGhlIGNvbm5lY3Rpb24gaXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFzYXJGYWxsYmFjaz86IEFzYXJGYWxsYmFjayB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ2FwdHVyZXMgYSBQTkcgc2NyZWVuc2hvdCBvZiB0aGlzIGNvbm5lY3Rpb24ncyBPYnNpZGlhbiB3aW5kb3csIHdpdGggdGhlXG4gICAqIHZhdWx0IHBhdGggcHJlLWJvdW5kLlxuICAgKlxuICAgKiBQYXNzIGB3aWR0aEluUGl4ZWxzYCArIGBoZWlnaHRJblBpeGVsc2AgdG8gcGluIHRoZSB2aWV3cG9ydCBmb3IgdGhlIGR1cmF0aW9uXG4gICAqIG9mIHRoZSBjYXB0dXJlLCBzbyB0aGUgZW1pdHRlZCBQTkcgaXMgZXhhY3RseSB0aGF0IHNpemUgd2hhdGV2ZXIgc2l6ZSB0aGVcbiAgICogd2luZG93IGhhcHBlbnMgdG8gYmUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZXhhY3Qgc2l6ZSB0byBjYXB0dXJlIGF0LiBPbWl0IHRvIGNhcHR1cmUgdGhlIHdpbmRvdyBhdCBpdHMgbmF0dXJhbCBzaXplLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSByYXcgUE5HIGJ5dGVzLlxuICAgKi9cbiAgY2FwdHVyZVNjcmVlbnNob3QocGFyYW1zPzogRXhjZXB0PENhcHR1cmVTY3JlZW5zaG90UGFyYW1zLCAnY3dkJz4pOiBQcm9taXNlPFVpbnQ4QXJyYXk+O1xuXG4gIC8qKlxuICAgKiBUaGUgYmFzZSBDRFAgVVJMLCBlLmcuIGBodHRwOi8vbG9jYWxob3N0OjUxODg4YC5cbiAgICovXG4gIHJlYWRvbmx5IGNkcFVybDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVzb2x2ZWQgaW5zdGFsbGVyXHUyMTk0YXBwIGNvbXBhdGliaWxpdHkgdmVyZGljdCBmb3IgYW4gb3duZWQgaW5zdGFuY2UsIHdoZW5cbiAgICogaXQgY291bGQgYmUgZGV0ZXJtaW5lZC4gYHVuZGVmaW5lZGAgaW4gYXR0YWNoIG1vZGUsIG9yIHdoZW4gdGhlIHZlcmRpY3QgaXNcbiAgICogdW5rbm93biAodW5kZXRlY3RhYmxlIHNoZWxsIHZlcnNpb24sIG9yIHRoZSBhcHAgdmVyc2lvbiBpcyBhYnNlbnQgZnJvbSB0aGVcbiAgICogdGFibGUpLiBBbiBgJ3VucnVubmFibGUnYCB2ZXJkaWN0IHJlYWNoZXMgaGVyZSBvbmx5IHdoZW4gdGhlIHByb2FjdGl2ZSB0aHJvd1xuICAgKiBpcyBkaXNhYmxlZCAoe0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnMuc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcn1cbiAgICogYGZhbHNlYCk7IG90aGVyd2lzZSBpdCB0aHJvd3MgYEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvcmAgYmVmb3JlIHRoZVxuICAgKiBjb25uZWN0aW9uIGlzIGNyZWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBjb21wYXRpYmlsaXR5PzogSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRGlzcG9zZXMgdGhlIGNvbm5lY3Rpb246IGtpbGxzIGFuIG93bmVkIGluc3RhbmNlIGFuZCByZW1vdmVzIGl0cyBpc29sYXRlZFxuICAgKiB1c2VyLWRhdGEgZGlyLiBUaGUgdmF1bHQgZGlyZWN0b3J5IGlzIHJlbW92ZWQgb25seSB3aGVuIGl0IGlzIGEgdGhyb3ctYXdheVxuICAgKiB0ZW1wIHZhdWx0IChzZWUge0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnMuc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2V9KTsgYVxuICAgKiByZWFsIHZhdWx0IHBhc3NlZCB2aWEge0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnMudmF1bHR9IGlzIG5ldmVyIGRlbGV0ZWQuXG4gICAqXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSBkaXNwb3NhbCBjb21wbGV0ZXMuXG4gICAqL1xuICBkaXNwb3NlKCk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFRoZSBydW50aW1lIEVsZWN0cm9uIGNvbXBhdGliaWxpdHkgdmVyZGljdCBmb3IgYW4gb3duZWQgaW5zdGFuY2UsIHJlYWQgbGl2ZVxuICAgKiBhZnRlciBib290OiB3aGV0aGVyIHRoZSBFbGVjdHJvbiB2ZXJzaW9uIGl0IGlzIGFjdHVhbGx5IHJ1bm5pbmcgaXMgbmV3IGVub3VnaFxuICAgKiBmb3IgdGhlIHJ1bm5pbmcgYXBwIHZlcnNpb24uIGB1bmRlZmluZWRgIGluIGF0dGFjaCBtb2RlLCBvciB3aGVuIHRoZSB2ZXJkaWN0XG4gICAqIGlzIHVua25vd24gKHRoZSBsaXZlIHZlcnNpb24gd2FzIHVucmVhZGFibGUsIG9yIHRoZSBhcHAgdmVyc2lvbiBjYXJyaWVzIG5vXG4gICAqIHJlY29tbWVuZGVkIEVsZWN0cm9uIHZlcnNpb24pLiBBbiBvbGQgRWxlY3Ryb24gbmV2ZXIgYmxvY2tzIFx1MjAxNCBpdCBvbmx5IHdhcm5zIFx1MjAxNFxuICAgKiBzbyB1bmxpa2Uge0BsaW5rIGNvbXBhdGliaWxpdHl9IHRoZXJlIGlzIG5vIHRocm93aW5nIHRpZXIuXG4gICAqL1xuICByZWFkb25seSBlbGVjdHJvbkNvbXBhdGliaWxpdHk/OiBFbGVjdHJvbkNvbXBhdGliaWxpdHkgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyBhIHNlbGYtY29udGFpbmVkIGZ1bmN0aW9uIGluc2lkZSBPYnNpZGlhbiB2aWEgdGhlIHJpY2ggaGVscGVyXG4gICAqIHBhdGgsIHJlY2VpdmluZyBgeyBhcHAsIGxpYiwgb2JzaWRpYW5Nb2R1bGUsIGNvbnRleHQgfWAgcGx1cyBhbnkgYGlucHV0YFxuICAgKiAoc2hhcmVkIGhlbHBlcnMgbGlrZSBgdHlwZUludG9FZGl0b3JgIC8gYHdhaXRVbnRpbGAgbGl2ZSBvbiBgbGliYCkuIE1pcnJvcnNcbiAgICogdGhlIHRvcC1sZXZlbCBgZXZhbEluT2JzaWRpYW5gLCB3aXRoIHRoZSB0cmFuc3BvcnQgYW5kIHZhdWx0IHBhdGggcHJlLWJvdW5kXG4gICAqIHRvIHRoaXMgY29ubmVjdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHBhcmFtcyAtIFRoZSBldmFsdWF0aW9uIHBhcmFtZXRlcnMgKGBjYWxsYmFja2AsIG9wdGlvbmFsIGBpbnB1dGAvYGNvbnRleHRJZGApLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSByZXR1cm4gdmFsdWUgb2YgYGNhbGxiYWNrYC5cbiAgICovXG4gIGV2YWxJbk9ic2lkaWFuPElucHV0IGV4dGVuZHMgR2VuZXJpY09iamVjdCwgUmVzdWx0LCBUQ29udGV4dElkIGV4dGVuZHMgQ29udGV4dElkPHVua25vd24+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkPihcbiAgICBwYXJhbXM6IEV4Y2VwdDxFdmFsSW5PYnNpZGlhblBhcmFtczxJbnB1dCwgUmVzdWx0LCBUQ29udGV4dElkPiwgJ3RyYW5zcG9ydCcgfCAndmF1bHRQYXRoJz5cbiAgKTogUHJvbWlzZTxSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSByYXcgSmF2YVNjcmlwdCBleHByZXNzaW9uIGluc2lkZSBPYnNpZGlhbiBhbmQgcmV0dXJucyB0aGVcbiAgICogbm9ybWFsaXplZCBzdHJpbmcgcmVzdWx0IChlLmcuIGAnNSdgLCBhIEpTT04gc3RyaW5nLCBvciBgJyhubyBvdXRwdXQpJ2ApLlxuICAgKlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiAtIEEgc2VsZi1jb250YWluZWQgSmF2YVNjcmlwdCBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSByYXcgcmVzdWx0IHN0cmluZy5cbiAgICovXG4gIGludm9rZShleHByZXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFRoZSBDRFAgcG9ydCB0aGUgaW5zdGFuY2UgaXMgcmVhY2hhYmxlIG9uICh0aGUgZnJlZSBwb3J0IGNob3NlbiBmb3IgYW5cbiAgICogb3duZWQgaW5zdGFuY2UsIG9yIHRoZSBhdHRhY2hlZCB7QGxpbmsgQ29ubmVjdFRvQ2RwT3B0aW9ucy5wb3J0fSkuXG4gICAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBvcGVuZWQgdmF1bHQuIEV4cG9zZXMgYHBhdGhgIGFuZCBgcG9wdWxhdGUoLi4uKWAgZm9yIHNlZWRpbmcgZmlsZXMuXG4gICAqL1xuICByZWFkb25seSB2YXVsdDogVGVtcG9yYXJ5VmF1bHQ7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGNvbm5lY3RUb0NkcH0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdFRvQ2RwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3IgaW5kaXZpZHVhbCBDRFAgY29tbWFuZHMuXG4gICAqXG4gICAqIEEgdGVzdCdzIGNsb3N1cmUgdHJhdmVscyBhcyBvbmUgYFJ1bnRpbWUuZXZhbHVhdGVgIGNvbW1hbmQsIHNvIHRoaXMgaXMgYWxzb1xuICAgKiB0aGUgZGVza3RvcCBwZXItZXZhbCBjYXAuIFRoZSBkZWZhdWx0IGlzIGBERUZBVUxUX0VWQUxfQ0FQX0lOX01JTExJU0VDT05EU2AsXG4gICAqIGV4cG9ydGVkIGZyb20gdGhlIHBhY2thZ2Ugcm9vdCBcdTIwMTQgaW1wb3J0IGl0IHJhdGhlciB0aGFuIHJlc3RhdGluZyB0aGUgbnVtYmVyLFxuICAgKiBzbyBhIGNsb3N1cmUgc2l6ZWQgYWdhaW5zdCB0aGUgY2FwIGZvbGxvd3MgaXQgaWYgaXQgZXZlciBtb3Zlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgYDMwMDAwYFxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWFuZFRpbWVvdXRJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHZhdWx0J3MgKipjb25maWcgZm9sZGVyKiogXHUyMDE0IE9ic2lkaWFuJ3MgcGVyLXZhdWx0ICpPdmVycmlkZSBjb25maWdcbiAgICogZm9sZGVyKiBzZXR0aW5nLCBlLmcuIGAnLm9ic2lkaWFuLWRlc2t0b3AnYC4gU2V0IGl0IHRvIG9wZW4gYSB2YXVsdCB0aGF0XG4gICAqIGtlZXBzIGl0cyBzZXR0aW5ncyBzb21ld2hlcmUgb3RoZXIgdGhhbiBgLm9ic2lkaWFuYDsgd2l0aG91dCBpdCBzdWNoIGEgdmF1bHRcbiAgICogb3BlbnMgYWdhaW5zdCBgLm9ic2lkaWFuYCwgd2hpY2ggZm9yIGEgdmF1bHQgdGhhdCBoYXMgYSBzdGFsZSBvbmUgYmVzaWRlIHRoZVxuICAgKiByZWFsIGZvbGRlciBtZWFucyBvcGVuaW5nIHN1Y2Nlc3NmdWxseSBhZ2FpbnN0IHRoZSB3cm9uZyBzZXR0aW5ncy5cbiAgICpcbiAgICogTXVzdCBzdGFydCB3aXRoIGEgZG90LCBtdXN0IG5vdCBiZSB0aGUgYmFyZSBkb3QsIGFuZCBtdXN0IG5vdCBjb250YWluIGEgcGF0aFxuICAgKiBzZXBhcmF0b3IgXHUyMDE0IGFueXRoaW5nIGVsc2UgdGhyb3dzIGJlZm9yZSBPYnNpZGlhbiBsYXVuY2hlcywgc2luY2UgT2JzaWRpYW5cbiAgICogd291bGQgc2lsZW50bHkgc3Vic3RpdHV0ZSBgLm9ic2lkaWFuYC4gQWZ0ZXIgdGhlIHZhdWx0IG9wZW5zLCBpdHMgYWN0dWFsXG4gICAqIGBhcHAudmF1bHQuY29uZmlnRGlyYCBpcyByZWFkIGJhY2sgYW5kIGEgbWlzbWF0Y2ggdGhyb3dzXG4gICAqIGBDb25maWdEaXJlY3RvcnlGYWxsYmFja0Vycm9yYC5cbiAgICpcbiAgICogSWdub3JlZCBpbiBhdHRhY2ggbW9kZSAoe0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnMucG9ydH0gc2V0KSwgd2hlcmUgdGhlXG4gICAqIHZhdWx0IGlzIG9wZW5lZCBieSB0aGUgdXNlcidzIG93biBPYnNpZGlhbiB1bmRlciBpdHMgb3duIGNvbmZpZy5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGAgKE9ic2lkaWFuJ3Mgb3duIGRlZmF1bHQsIGAub2JzaWRpYW5gKVxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFjZSB3aW5kb3cgaW4gbWlsbGlzZWNvbmRzIGZvciBmYXN0LWZhaWxpbmcgYSBkZWFkIGJvb3Qgb2YgdGhlIG93bmVkXG4gICAqIGluc3RhbmNlIFx1MjAxNCB0aGUgcmVuZGVyZXIgbG9hZGVkIGJ1dCB0aGUgYXBwIG5ldmVyIGJvb3RzdHJhcHBlZCAoZW1wdHlcbiAgICogYDxib2R5PmAsIG5vIGB3aW5kb3cuYXBwYCksIHRoZSB0ZXJtaW5hbCBzdGF0ZSB3aGVuIHRoZSBhc2FyIGNhbm5vdCBydW4gb25cbiAgICogdGhlIGxhdW5jaGVkIEVsZWN0cm9uIHNoZWxsLiBPbmNlIGl0IGhhcyBoZWxkIHRoaXMgbG9uZyBhXG4gICAqIGBSZW5kZXJlckZhaWxlZFRvSW5pdGlhbGl6ZUVycm9yYCBpcyB0aHJvd24gaW5zdGVhZCBvZiB3YWl0aW5nIG91dCB0aGUgZnVsbFxuICAgKiByZWFkaW5lc3MgdGltZW91dC4gSWdub3JlZCBpbiBhdHRhY2ggbW9kZSAoe0BsaW5rIHBvcnR9IHNldCkuIFNldCBgMGAgdG9cbiAgICogZGlzYWJsZSBmYXN0LWZhaWwuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAxMDAwMGBcbiAgICovXG4gIHJlYWRvbmx5IGRlYWRCb290R3JhY2VJbk1pbGxpc2Vjb25kcz86IG51bWJlcjtcblxuICAvKipcbiAgICogQ0RQIGhvc3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAnbG9jYWxob3N0J2BcbiAgICovXG4gIHJlYWRvbmx5IGhvc3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIE9ic2lkaWFuIHdpbmRvdyBpcyBzaG93biBvbiBzY3JlZW4uIERlZmF1bHRzIHRvIGB0cnVlYDsgc2V0XG4gICAqIGBmYWxzZWAgdG8gbGF1bmNoIGl0IG9mZi1zY3JlZW4uXG4gICAqIElnbm9yZWQgaW4gYXR0YWNoIG1vZGUgKHtAbGluayBwb3J0fSBzZXQpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IGlzT2JzaWRpYW5BcHBWaXNpYmxlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUGlucyB0aGUgRWxlY3Ryb24gc2hlbGwgKGluc3RhbGxlciBidWlsZCkgdGhlIG93bmVkIGluc3RhbmNlIHJ1bnMuIEFjY2VwdHNcbiAgICogYCd4LnkueidgLCBgJ3B1YmxpYy1sYXRlc3QnYCwgb3IgYCdjYXRhbHlzdC1sYXRlc3QnYC4gSWdub3JlZCB3aGVuXG4gICAqIHtAbGluayBwb3J0fSAoYXR0YWNoIG1vZGUpIGlzIHNldC4gV2hlbiBvbWl0dGVkLCB0aGUgaW5zdGFsbGVkIHNoZWxsIGlzIHVzZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB1bmRlZmluZWRgXG4gICAqL1xuICByZWFkb25seSBvYnNpZGlhbkluc3RhbGxlclZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBpbnMgdGhlIE9ic2lkaWFuIGFwcCB2ZXJzaW9uIChhc2FyKSB0aGUgb3duZWQgaW5zdGFuY2UgcnVucy4gQWNjZXB0c1xuICAgKiBgJ3gueS56J2AsIGAncHVibGljLWxhdGVzdCdgLCBvciBgJ2NhdGFseXN0LWxhdGVzdCdgLiBJZ25vcmVkIHdoZW5cbiAgICoge0BsaW5rIHBvcnR9IChhdHRhY2ggbW9kZSkgaXMgc2V0LiBXaGVuIG9taXR0ZWQsIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBpcyB1c2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5WZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDRFAgcG9ydCBvZiBhbiBhbHJlYWR5LXJ1bm5pbmcgT2JzaWRpYW4gdG8gKiphdHRhY2gqKiB0by4gV2hlbiBvbWl0dGVkLCBhblxuICAgKiBpc29sYXRlZCBpbnN0YW5jZSBpcyBsYXVuY2hlZCBvbiBhbiBhdXRvbWF0aWNhbGx5IGNob3NlbiBmcmVlIHBvcnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB1bmRlZmluZWRgXG4gICAqL1xuICByZWFkb25seSBwb3J0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIGxhdW5jaCB0aGUgb3duZWQgaW5zdGFuY2Ugd2l0aCBDaHJvbWl1bSdzIHNhbmRib3ggZGlzYWJsZWRcbiAgICogKGAtLW5vLXNhbmRib3hgKS5cbiAgICpcbiAgICogTmVlZGVkIHRvIGJvb3Qgb24gTGludXggd2l0aG91dCBhIGNvcnJlY3RseS1jb25maWd1cmVkIHNldHVpZFxuICAgKiBgY2hyb21lLXNhbmRib3hgIGhlbHBlciAoZS5nLiBhbiBpbnN0YWxsZXItZXh0cmFjdGVkIHBvcnRhYmxlIHNoZWxsLCBvciBDSVxuICAgKiBydW5uaW5nIGFzIGEgbm9uLXJvb3QgdXNlcik7IGhhcm1sZXNzIG9uIFdpbmRvd3MvbWFjT1MuIElnbm9yZWQgaW4gYXR0YWNoXG4gICAqIG1vZGUgKHtAbGluayBwb3J0fSBzZXQpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgZmFsc2VgXG4gICAqL1xuICByZWFkb25seSBzaG91bGREaXNhYmxlU2FuZGJveD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gcmVtb3ZlIHRoZSB2YXVsdCBkaXJlY3Rvcnkgb24ge0BsaW5rIENkcENvbm5lY3Rpb24uZGlzcG9zZX0uXG4gICAqXG4gICAqIFdoZW4gb21pdHRlZCwgZGVmYXVsdHMgdG8gYHRydWVgIGZvciBhbiBpbXBsaWNpdCB0aHJvdy1hd2F5IHRlbXAgdmF1bHRcbiAgICogKHtAbGluayB2YXVsdH0gbm90IGdpdmVuKSBhbmQgYGZhbHNlYCB3aGVuIGEge0BsaW5rIHZhdWx0fSBwYXRoIGlzIGdpdmVuLCBzb1xuICAgKiBhIHJlYWwgdmF1bHQgaXMgbmV2ZXIgZGVsZXRlZC4gU2V0IGV4cGxpY2l0bHkgdG8gb3ZlcnJpZGUuXG4gICAqL1xuICByZWFkb25seSBzaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYW4gKip1bnJ1bm5hYmxlKiogaW5zdGFsbGVyXHUyMTk0YXBwIHZlcnNpb24gcGFpciBmYWlscyBmYXN0IGJlZm9yZSBsYXVuY2guXG4gICAqXG4gICAqIFdoZW4gYHRydWVgICh0aGUgZGVmYXVsdCksIGFuIGluc3RhbGxlciBiZWxvdyB0aGUgYXBwJ3MgcnVuIGZsb29yIHRocm93c1xuICAgKiBgSW5jb21wYXRpYmxlSW5zdGFsbGVyVmVyc2lvbkVycm9yYCBmcm9tIHZlcnNpb24gcmVzb2x1dGlvbiBiZWZvcmUgYW55dGhpbmcgaXNcbiAgICogZG93bmxvYWRlZCBvciBsYXVuY2hlZC4gU2V0IGBmYWxzZWAgdG8gbGV0IHRoZSBwaW4gcHJvY2VlZCB0byBsYXVuY2ggXHUyMDE0IHdoZXJlXG4gICAqIHRoZSByZWFjdGl2ZSBkZWFkLWJvb3QgZmFzdC1mYWlsIHN0aWxsIGNhdGNoZXMgdGhlIGJsYWNrLXNjcmVlbiBib290LCBhbmQgdGhlXG4gICAqIGAndW5ydW5uYWJsZSdgIHZlcmRpY3QgaXMgc3VyZmFjZWQgb24ge0BsaW5rIENkcENvbm5lY3Rpb24uY29tcGF0aWJpbGl0eX1cbiAgICogcmF0aGVyIHRoYW4gdGhyb3duLiBJZ25vcmVkIGluIGF0dGFjaCBtb2RlICh7QGxpbmsgcG9ydH0gc2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRUaHJvd09uSW5jb21wYXRpYmxlSW5zdGFsbGVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciBhIHBvc3QtYm9vdCAqKnNpbGVudCBhc2FyIGZhbGxiYWNrKiogZmFpbHMgZmFzdC5cbiAgICpcbiAgICogV2hlbiBhbiBhc2FyIGlzIHN3YXBwZWQgb250byBhbiBpbnN0YWxsZXIgc2hlbGwgdG9vIG9sZCBmb3IgaXQsIHRoZSBpbnN0YW5jZVxuICAgKiBtYXkgc2lsZW50bHkgcmV2ZXJ0IHRvIHRoZSBpbnN0YWxsZXIncyBvd24gYnVuZGxlZCBhc2FyIGFuZCBydW4gdGhlICoqd3JvbmdcbiAgICogKG9sZGVyKSoqIHZlcnNpb24gYmVoaW5kIGEgaGVhbHRoeSBVSS4gV2hlbiBgdHJ1ZWAgKHRoZSBkZWZhdWx0KSwgdGhlIHJ1bm5pbmdcbiAgICogYXBwIHZlcnNpb24gaXMgdmVyaWZpZWQgYWdhaW5zdCB0aGUgcGluIHBvc3QtYm9vdCBhbmQgYSBtaXNtYXRjaCB0aHJvd3NcbiAgICogYFNpbGVudEFzYXJGYWxsYmFja0Vycm9yYC4gU2V0IGBmYWxzZWAgdG8gbGV0IHRoZSBib290IHByb2NlZWQgXHUyMDE0IHRoZSBtaXNtYXRjaFxuICAgKiBpcyB0aGVuIHN1cmZhY2VkIG9uIHtAbGluayBDZHBDb25uZWN0aW9uLmFzYXJGYWxsYmFja30gcmF0aGVyIHRoYW4gdGhyb3duLlxuICAgKiBJZ25vcmVkIGluIGF0dGFjaCBtb2RlICh7QGxpbmsgcG9ydH0gc2V0KSBhbmQgd2hlbiBubyBhc2FyIGlzIHN3YXBwZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkVGhyb3dPblNpbGVudEFzYXJGYWxsYmFjaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG93bmVkLWluc3RhbmNlIGNvbXBhdGliaWxpdHkgKipuYWcgd2FybmluZ3MqKiBhcmUgZW1pdHRlZC5cbiAgICpcbiAgICogQ292ZXJzIGJvdGggdGhlIG9mZmxpbmUgaW5zdGFsbGVyXHUyMTk0YXBwIHdhcm5pbmcgYW5kIHRoZSBwb3N0LWJvb3RcbiAgICogcnVudGltZS1FbGVjdHJvbiB3YXJuaW5nLiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpIGVhY2ggZmlyZXMgdmlhIHRoZSBoYXJuZXNzXG4gICAqIGxvZzsgc2V0IGBmYWxzZWAgdG8gc2lsZW5jZSBib3RoIFx1MjAxNCB0aGUgdmVyZGljdHMgYXJlIHN0aWxsIHN1cmZhY2VkIG9uXG4gICAqIHtAbGluayBDZHBDb25uZWN0aW9uLmNvbXBhdGliaWxpdHl9IC8ge0BsaW5rIENkcENvbm5lY3Rpb24uZWxlY3Ryb25Db21wYXRpYmlsaXR5fSxcbiAgICogb25seSB0aGUgbG9nIGlzIHN1cHByZXNzZWQuIElnbm9yZWQgaW4gYXR0YWNoIG1vZGUgKHtAbGluayBwb3J0fSBzZXQpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFdhcm5PbkNvbXBhdGliaWxpdHlJc3N1ZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBYnNvbHV0ZSBwYXRoIHRvIGFuIGV4aXN0aW5nIHZhdWx0IHRvIG9wZW4uIFdoZW4gb21pdHRlZCwgYW4gZW1wdHkgdGVtcG9yYXJ5XG4gICAqIHZhdWx0IGlzIGNyZWF0ZWQgKGFuZCByZW1vdmVkIG9uIGRpc3Bvc2UgdW5sZXNzXG4gICAqIHtAbGluayBzaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZX0gc2F5cyBvdGhlcndpc2UpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgdmF1bHQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQSByZXNvbHZlZCBDRFAgaG9zdC9wb3J0IHBhaXIuXG4gKi9cbmludGVyZmFjZSBSZXNvbHZlZEVuZHBvaW50IHtcbiAgaG9zdDogc3RyaW5nO1xuICBwb3J0OiBudW1iZXI7XG59XG5cbi8qKlxuICogTGF1bmNoZXMgKG9yIGF0dGFjaGVzIHRvKSBhIENEUC1lbmFibGVkIE9ic2lkaWFuIGluc3RhbmNlLCBvcGVucyBhIHZhdWx0LCBhbmRcbiAqIGJvb3RzdHJhcHMgdGhlIHJ1bnRpbWUgaGVscGVyIG5hbWVzcGFjZSwgcmV0dXJuaW5nIGEgZGlzcG9zYWJsZSBjb25uZWN0aW9uLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gQ29ubmVjdGlvbiBvcHRpb25zLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgbGl2ZSB7QGxpbmsgQ2RwQ29ubmVjdGlvbn0uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb25uZWN0VG9DZHAob3B0aW9ucz86IENvbm5lY3RUb0NkcE9wdGlvbnMpOiBQcm9taXNlPENkcENvbm5lY3Rpb24+IHtcbiAgY29uc3QgdHJhbnNwb3J0T3B0aW9ucyA9IGJ1aWxkQ2RwVHJhbnNwb3J0T3B0aW9ucyhvcHRpb25zKTtcbiAgYXdhaXQgc3dlZXBMZWZ0b3ZlcnModHJhbnNwb3J0T3B0aW9ucyk7XG4gIGNvbnN0IHRyYW5zcG9ydCA9IGF3YWl0IGNyZWF0ZVRyYW5zcG9ydEZyb21PcHRpb25zKHRyYW5zcG9ydE9wdGlvbnMpO1xuICBjb25zdCBzaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZSA9IG9wdGlvbnM/LnNob3VsZFJlbW92ZVZhdWx0T25EaXNwb3NlID8/IChvcHRpb25zPy52YXVsdCA9PT0gdW5kZWZpbmVkKTtcbiAgY29uc3QgdmF1bHQgPSBuZXcgVGVtcG9yYXJ5VmF1bHQob3B0aW9ucz8udmF1bHQsIHsgc2hvdWxkUmVtb3ZlRGlyZWN0b3J5T25EaXNwb3NlOiBzaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZSB9KTtcblxuICAvLyBUaGUgaGVhZGxlc3MgZGVmYXVsdHMgZ28gb25seSBpbnRvIGEgdmF1bHQgdGhlIGhhcm5lc3MgbWFkZSBcdTIwMTQgdGhlIHNhbWVcbiAgLy8gYG9wdGlvbnMudmF1bHQgPT09IHVuZGVmaW5lZGAgZGlzY3JpbWluYXRvciB0aGUgZGlzcG9zYWwgYWJvdmUgdHVybnMgb24uIEFcbiAgLy8gY2FsbGVyLXN1cHBsaWVkIHZhdWx0IGlzIGEgcmVhbCBvbmUgdGhlIHVzZXIga2VlcHMsIGFuZCBhIGRlYnVnZ2luZyBzZXNzaW9uXG4gIC8vIGhhcyBubyBidXNpbmVzcyByZXdyaXRpbmcgaXRzIHNldHRpbmdzLlxuICBpZiAob3B0aW9ucz8udmF1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgIGF3YWl0IGVuc3VyZUhlYWRsZXNzVmF1bHRDb25maWcoe1xuICAgICAgY29uZmlnRGlyZWN0b3J5OiByZXNvbHZlT3duZWRDb25maWdEaXJlY3RvcnkodHJhbnNwb3J0T3B0aW9ucyksXG4gICAgICBsYWJlbDogdHJhbnNwb3J0T3B0aW9ucy50eXBlLFxuICAgICAgdmF1bHRQYXRoOiB2YXVsdC5wYXRoXG4gICAgfSk7XG4gIH1cblxuICAvLyBSZWdpc3RlcmluZyB0aGUgdmF1bHQgaXMgd2hhdCBsYXVuY2hlcyB0aGUgb3duZWQgaW5zdGFuY2UgKHByb3Zpc2lvbnMgdGhlXG4gIC8vIGFzYXIsIG9wZW5zIHRoZSB2YXVsdCwgYW5kIGJvb3RzdHJhcHMgdGhlIGhlbHBlciBuYW1lc3BhY2UpLCBvciBvcGVucyB0aGVcbiAgLy8gdmF1bHQgaW4gdGhlIGF0dGFjaGVkIGluc3RhbmNlLlxuICBhd2FpdCB2YXVsdC5yZWdpc3Rlcih0cmFuc3BvcnQpO1xuXG4gIGNvbnN0IHsgaG9zdCwgcG9ydCB9ID0gcmVzb2x2ZUVuZHBvaW50KHRyYW5zcG9ydCwgb3B0aW9ucyk7XG4gIGNvbnN0IGNkcFVybCA9IGBodHRwOi8vJHtob3N0fToke1N0cmluZyhwb3J0KX1gO1xuICBjb25zdCBhc2FyRmFsbGJhY2sgPSB0cmFuc3BvcnQgaW5zdGFuY2VvZiBEZXNrdG9wQ2RwVHJhbnNwb3J0ID8gdHJhbnNwb3J0LmdldEFzYXJGYWxsYmFjaygpIDogdW5kZWZpbmVkO1xuICBjb25zdCBjb21wYXRpYmlsaXR5ID0gdHJhbnNwb3J0IGluc3RhbmNlb2YgRGVza3RvcENkcFRyYW5zcG9ydCA/IHRyYW5zcG9ydC5nZXRDb21wYXRpYmlsaXR5KCkgOiB1bmRlZmluZWQ7XG4gIGNvbnN0IGVsZWN0cm9uQ29tcGF0aWJpbGl0eSA9IHRyYW5zcG9ydCBpbnN0YW5jZW9mIERlc2t0b3BDZHBUcmFuc3BvcnQgPyB0cmFuc3BvcnQuZ2V0RWxlY3Ryb25Db21wYXRpYmlsaXR5KCkgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgY29ubmVjdGlvbjogQ2RwQ29ubmVjdGlvbiA9IHtcbiAgICBjZHBVcmwsXG4gICAgLi4uKGFzYXJGYWxsYmFjayAmJiB7IGFzYXJGYWxsYmFjayB9KSxcbiAgICAuLi4oY29tcGF0aWJpbGl0eSAmJiB7IGNvbXBhdGliaWxpdHkgfSksXG4gICAgLi4uKGVsZWN0cm9uQ29tcGF0aWJpbGl0eSAmJiB7IGVsZWN0cm9uQ29tcGF0aWJpbGl0eSB9KSxcblxuICAgIGFzeW5jIGNhcHR1cmVTY3JlZW5zaG90KHBhcmFtcz86IEV4Y2VwdDxDYXB0dXJlU2NyZWVuc2hvdFBhcmFtcywgJ2N3ZCc+KTogUHJvbWlzZTxVaW50OEFycmF5PiB7XG4gICAgICAvLyBFdmVyeSB0cmFuc3BvcnQgYGNvbm5lY3RUb0NkcGAgYnVpbGRzIGlzIGEgRGVza3RvcENkcFRyYW5zcG9ydCwgd2hpY2hcbiAgICAgIC8vIGltcGxlbWVudHMgdGhlIG9wdGlvbmFsIG1ldGhvZCBcdTIwMTQgYnV0IHRoZSBpbnRlcmZhY2Ugc3RpbGwgdHlwZXMgaXRcbiAgICAgIC8vIG9wdGlvbmFsLCBzbyB0aGUgYWJzZW5jZSBpcyByZXBvcnRlZCByYXRoZXIgdGhhbiBzaWxlbnRseSB0aHJvd24gYXQuXG4gICAgICBpZiAoIXRyYW5zcG9ydC5jYXB0dXJlU2NyZWVuc2hvdCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nvbm5lY3RUb0NkcDogdGhpcyB0cmFuc3BvcnQgY2Fubm90IGNhcHR1cmUgc2NyZWVuc2hvdHMuJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cmFuc3BvcnQuY2FwdHVyZVNjcmVlbnNob3QoeyAuLi5wYXJhbXMsIGN3ZDogdmF1bHQucGF0aCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgZGlzcG9zZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoZSB2YXVsdCBjYXJyaWVzIGBzaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZWAgaXRzZWxmIChoYW5kZWQgdG8gaXRzIGNvbnN0cnVjdG9yIGFib3ZlKSwgc29cbiAgICAgICAgLy8gdGhpcyBpcyBvbmUgY2FsbCByYXRoZXIgdGhhbiBhIGJyYW5jaDogaXQgYWx3YXlzIHVucmVnaXN0ZXJzLCBhbmQgcmVtb3ZlcyB0aGUgZGlyZWN0b3J5IG9ubHlcbiAgICAgICAgLy8gd2hlbiB0aGF0IGZsYWcgc2F5cyB0by5cbiAgICAgICAgYXdhaXQgdmF1bHQuZGlzcG9zZSh0cmFuc3BvcnQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgYXdhaXQgdHJhbnNwb3J0LmRpc3Bvc2U/LigpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBldmFsSW5PYnNpZGlhbjxJbnB1dCBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gICAgICBwYXJhbXM6IEV4Y2VwdDxFdmFsSW5PYnNpZGlhblBhcmFtczxJbnB1dCwgUmVzdWx0LCBUQ29udGV4dElkPiwgJ3RyYW5zcG9ydCcgfCAndmF1bHRQYXRoJz5cbiAgICApOiBQcm9taXNlPFJlc3VsdD4ge1xuICAgICAgcmV0dXJuIGV2YWxJbk9ic2lkaWFuPElucHV0LCBSZXN1bHQsIFRDb250ZXh0SWQ+KHsgLi4ucGFyYW1zLCB0cmFuc3BvcnQsIHZhdWx0UGF0aDogdmF1bHQucGF0aCB9KTtcbiAgICB9LFxuXG4gICAgYXN5bmMgaW52b2tlKGV4cHJlc3Npb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICByZXR1cm4gdHJhbnNwb3J0LmV2YWx1YXRlKGV4cHJlc3Npb24sIHsgY3dkOiB2YXVsdC5wYXRoIH0pO1xuICAgIH0sXG5cbiAgICBwb3J0LFxuXG4gICAgYXN5bmMgW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgYXdhaXQgY29ubmVjdGlvbi5kaXNwb3NlKCk7XG4gICAgfSxcblxuICAgIHZhdWx0XG4gIH07XG5cbiAgcmV0dXJuIGNvbm5lY3Rpb247XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSB7QGxpbmsgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zfSBmb3IgYSBjb25uZWN0aW9uLCB0aHJlYWRpbmcgb25seVxuICogdGhlIHByb3ZpZGVkIHtAbGluayBDb25uZWN0VG9DZHBPcHRpb25zfSB0aHJvdWdoIChvd25lZC12aXNpYmxlIGRlZmF1bHRzIHRvXG4gKiBgdHJ1ZWAsIHVubGlrZSB0aGUgaGlkZGVuLWJ5LWRlZmF1bHQgdGVzdCB0cmFuc3BvcnRzKS4gVW5zZXQga25vYnMgcGFzcyB0aHJvdWdoXG4gKiBhcyBgdW5kZWZpbmVkYCBhbmQgYXJlIHJlYWQgd2l0aCBgPz8gZGVmYXVsdGAgLyBgIT09IHVuZGVmaW5lZGAgZ3VhcmRzXG4gKiBkb3duc3RyZWFtLCBzbyBhbiBleHBsaWNpdCBgdW5kZWZpbmVkYCBpcyBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGFuIGFic2VudCBrZXkuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgY29ubmVjdGlvbiBvcHRpb25zLlxuICogQHJldHVybnMgVGhlIHRyYW5zcG9ydCBvcHRpb25zIHRvIGNyZWF0ZSB0aGUgY29ubmVjdGlvbidzIHRyYW5zcG9ydCBmcm9tLlxuICovXG5mdW5jdGlvbiBidWlsZENkcFRyYW5zcG9ydE9wdGlvbnMob3B0aW9ucz86IENvbm5lY3RUb0NkcE9wdGlvbnMpOiBPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnMge1xuICByZXR1cm4gbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzPE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucz4oe1xuICAgIGNvbW1hbmRUaW1lb3V0SW5NaWxsaXNlY29uZHM6IG9wdGlvbnM/LmNvbW1hbmRUaW1lb3V0SW5NaWxsaXNlY29uZHMsXG4gICAgY29uZmlnRGlyZWN0b3J5OiBvcHRpb25zPy5jb25maWdEaXJlY3RvcnksXG4gICAgZGVhZEJvb3RHcmFjZUluTWlsbGlzZWNvbmRzOiBvcHRpb25zPy5kZWFkQm9vdEdyYWNlSW5NaWxsaXNlY29uZHMsXG4gICAgaG9zdDogb3B0aW9ucz8uaG9zdCxcbiAgICBpc09ic2lkaWFuQXBwVmlzaWJsZTogb3B0aW9ucz8uaXNPYnNpZGlhbkFwcFZpc2libGUgPz8gdHJ1ZSxcbiAgICBvYnNpZGlhbkluc3RhbGxlclZlcnNpb246IG9wdGlvbnM/Lm9ic2lkaWFuSW5zdGFsbGVyVmVyc2lvbixcbiAgICBvYnNpZGlhblZlcnNpb246IG9wdGlvbnM/Lm9ic2lkaWFuVmVyc2lvbixcbiAgICBwb3J0OiBvcHRpb25zPy5wb3J0LFxuICAgIHNob3VsZERpc2FibGVTYW5kYm94OiBvcHRpb25zPy5zaG91bGREaXNhYmxlU2FuZGJveCxcbiAgICBzaG91bGRUaHJvd09uSW5jb21wYXRpYmxlSW5zdGFsbGVyOiBvcHRpb25zPy5zaG91bGRUaHJvd09uSW5jb21wYXRpYmxlSW5zdGFsbGVyLFxuICAgIHNob3VsZFRocm93T25TaWxlbnRBc2FyRmFsbGJhY2s6IG9wdGlvbnM/LnNob3VsZFRocm93T25TaWxlbnRBc2FyRmFsbGJhY2ssXG4gICAgc2hvdWxkV2Fybk9uQ29tcGF0aWJpbGl0eUlzc3Vlczogb3B0aW9ucz8uc2hvdWxkV2Fybk9uQ29tcGF0aWJpbGl0eUlzc3VlcyxcbiAgICB0eXBlOiAnb2JzaWRpYW4tY2RwJ1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgQ0RQIGhvc3QvcG9ydCBmb3IgdGhlIGNvbm5lY3Rpb246IGZyb20gdGhlIG93bmVkIGluc3RhbmNlJ3NcbiAqIGxhdW5jaGVkIGVuZHBvaW50IHdoZW4gcHJlc2VudCwgb3RoZXJ3aXNlIGZyb20gdGhlIGF0dGFjaCBvcHRpb25zLlxuICpcbiAqIEBwYXJhbSB0cmFuc3BvcnQgLSBUaGUgdHJhbnNwb3J0IGNyZWF0ZWQgZm9yIHRoaXMgY29ubmVjdGlvbi5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGNvbm5lY3Rpb24gb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBob3N0IGFuZCBwb3J0LlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgcG9ydCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZUVuZHBvaW50KHRyYW5zcG9ydDogdW5rbm93biwgb3B0aW9uczogQ29ubmVjdFRvQ2RwT3B0aW9ucyB8IHVuZGVmaW5lZCk6IFJlc29sdmVkRW5kcG9pbnQge1xuICBpZiAodHJhbnNwb3J0IGluc3RhbmNlb2YgRGVza3RvcENkcFRyYW5zcG9ydCkge1xuICAgIGNvbnN0IGVuZHBvaW50ID0gdHJhbnNwb3J0LmdldE93bmVkSW5zdGFuY2VFbmRwb2ludCgpO1xuICAgIGlmIChlbmRwb2ludCkge1xuICAgICAgcmV0dXJuIHsgaG9zdDogZW5kcG9pbnQuaG9zdCwgcG9ydDogZW5kcG9pbnQucG9ydCB9O1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zPy5wb3J0ICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4geyBob3N0OiBvcHRpb25zLmhvc3QgPz8gREVGQVVMVF9DRFBfSE9TVCwgcG9ydDogb3B0aW9ucy5wb3J0IH07XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoJ2Nvbm5lY3RUb0NkcDogY291bGQgbm90IGRldGVybWluZSB0aGUgQ0RQIHBvcnQuJyk7XG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgaG9zdC1zaWRlIHRlbXAgZGlyZWN0b3JpZXMgZWFybGllciBydW5zIGxlYWtlZCwgYmVmb3JlIHRoaXNcbiAqIGNvbm5lY3Rpb24gYWRkcyBpdHMgb3duLlxuICpcbiAqIGBjb25uZWN0VG9DZHBgIG1pbnRzIHRoZSBzYW1lIGB0ZW1wLXZhdWx0LSpgIC8gb3duZWQgYHVzZXJkYXRhLSpgIGRpcmVjdG9yaWVzXG4gKiB0aGUgdGVzdCBnbG9iYWwgc2V0dXAgZG9lcywgYW5kIGFuIGFkLWhvYyBkZWJ1Z2dpbmcgc2Vzc2lvbiBpcyBleGFjdGx5IHRoZVxuICoga2luZCB0aGF0IGdldHMga2lsbGVkIHdpdGggYSBsZWZ0b3ZlciBiZWhpbmQgXHUyMDE0IHNvIGl0IHN3ZWVwcyB0b28uIEFnZS1nYXRlZCBhbmRcbiAqIGJlc3QtZWZmb3J0OyBzZWUgdGhlIGNvcmUncyBgc3dlZXBMZWZ0b3ZlcnNgLlxuICpcbiAqIEBwYXJhbSB0cmFuc3BvcnRPcHRpb25zIC0gVGhlIHJlc29sdmVkIHRyYW5zcG9ydCBvcHRpb25zIChzb3VyY2Ugb2YgdGhlIHN3ZWVwIGtub2JzKS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gc3dlZXBMZWZ0b3ZlcnModHJhbnNwb3J0T3B0aW9uczogT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghd2lsbFN3ZWVwTGVmdG92ZXJzKHRyYW5zcG9ydE9wdGlvbnMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzd2VlcEhvc3RMZWZ0b3ZlcnMoe1xuICAgICAgbWF4QWdlSW5NaWxsaXNlY29uZHM6IHJlc29sdmVMZWZ0b3Zlck1heEFnZUluTWlsbGlzZWNvbmRzKHRyYW5zcG9ydE9wdGlvbnMpXG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5yZW1vdmVkQ291bnQgPiAwIHx8IHJlc3VsdC5mYWlsZWRDb3VudCA+IDApIHtcbiAgICAgIGxvZyhcbiAgICAgICAgYFtjb25uZWN0LXRvLWNkcF0gU3dlcHQgJHtTdHJpbmcocmVzdWx0LnJlbW92ZWRDb3VudCl9IGxlZnRvdmVyIHRlbXAgZGlyZWN0b3IoaWVzKSBmcm9tIGVhcmxpZXIgcnVucyBgXG4gICAgICAgICAgKyBgKCR7U3RyaW5nKHJlc3VsdC5mYWlsZWRDb3VudCl9IHN0aWxsIGluIHVzZSkuYFxuICAgICAgKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgbG9nKGBbY29ubmVjdC10by1jZHBdIExlZnRvdmVyIHN3ZWVwIGVycm9yIChub24tZmF0YWwpOiAke1N0cmluZyhlcnJvcil9YCk7XG4gIH1cbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQTRCQSxTQUFTLHNCQUFzQjtBQUMvQixTQUFTLGlDQUFpQztBQUMxQztBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFdBQVc7QUFDcEIsU0FBUyxtQ0FBbUM7QUFDNUMsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUywyQkFBMkI7QUFDcEMsU0FBUyxrQ0FBa0M7QUFDM0MsU0FBUyxtQ0FBbUM7QUFFNUMsTUFBTSxtQkFBbUI7QUE4UnpCLGVBQXNCLGFBQWEsU0FBdUQ7QUFDeEYsUUFBTSxtQkFBbUIseUJBQXlCLE9BQU87QUFDekQsUUFBTSxlQUFlLGdCQUFnQjtBQUNyQyxRQUFNLFlBQVksTUFBTSwyQkFBMkIsZ0JBQWdCO0FBQ25FLFFBQU0sNkJBQTZCLFNBQVMsOEJBQStCLFNBQVMsVUFBVTtBQUM5RixRQUFNLFFBQVEsSUFBSSxlQUFlLFNBQVMsT0FBTyxFQUFFLGdDQUFnQywyQkFBMkIsQ0FBQztBQU0vRyxNQUFJLFNBQVMsVUFBVSxRQUFXO0FBQ2hDLFVBQU0sMEJBQTBCO0FBQUEsTUFDOUIsaUJBQWlCLDRCQUE0QixnQkFBZ0I7QUFBQSxNQUM3RCxPQUFPLGlCQUFpQjtBQUFBLE1BQ3hCLFdBQVcsTUFBTTtBQUFBLElBQ25CLENBQUM7QUFBQSxFQUNIO0FBS0EsUUFBTSxNQUFNLFNBQVMsU0FBUztBQUU5QixRQUFNLEVBQUUsTUFBTSxLQUFLLElBQUksZ0JBQWdCLFdBQVcsT0FBTztBQUN6RCxRQUFNLFNBQVMsVUFBVSxJQUFJLElBQUksT0FBTyxJQUFJLENBQUM7QUFDN0MsUUFBTSxlQUFlLHFCQUFxQixzQkFBc0IsVUFBVSxnQkFBZ0IsSUFBSTtBQUM5RixRQUFNLGdCQUFnQixxQkFBcUIsc0JBQXNCLFVBQVUsaUJBQWlCLElBQUk7QUFDaEcsUUFBTSx3QkFBd0IscUJBQXFCLHNCQUFzQixVQUFVLHlCQUF5QixJQUFJO0FBRWhILFFBQU0sYUFBNEI7QUFBQSxJQUNoQztBQUFBLElBQ0EsR0FBSSxnQkFBZ0IsRUFBRSxhQUFhO0FBQUEsSUFDbkMsR0FBSSxpQkFBaUIsRUFBRSxjQUFjO0FBQUEsSUFDckMsR0FBSSx5QkFBeUIsRUFBRSxzQkFBc0I7QUFBQSxJQUVyRCxNQUFNLGtCQUFrQixRQUFzRTtBQUk1RixVQUFJLENBQUMsVUFBVSxtQkFBbUI7QUFDaEMsY0FBTSxJQUFJLE1BQU0sMERBQTBEO0FBQUEsTUFDNUU7QUFFQSxhQUFPLFVBQVUsa0JBQWtCLEVBQUUsR0FBRyxRQUFRLEtBQUssTUFBTSxLQUFLLENBQUM7QUFBQSxJQUNuRTtBQUFBLElBRUEsTUFBTSxVQUF5QjtBQUM3QixVQUFJO0FBSUYsY0FBTSxNQUFNLFFBQVEsU0FBUztBQUFBLE1BQy9CLFVBQUU7QUFDQSxjQUFNLFVBQVUsVUFBVTtBQUFBLE1BQzVCO0FBQUEsSUFDRjtBQUFBLElBRUEsTUFBTSxlQUNKLFFBQ2lCO0FBQ2pCLGFBQU8sZUFBMEMsRUFBRSxHQUFHLFFBQVEsV0FBVyxXQUFXLE1BQU0sS0FBSyxDQUFDO0FBQUEsSUFDbEc7QUFBQSxJQUVBLE1BQU0sT0FBTyxZQUFxQztBQUNoRCxhQUFPLFVBQVUsU0FBUyxZQUFZLEVBQUUsS0FBSyxNQUFNLEtBQUssQ0FBQztBQUFBLElBQzNEO0FBQUEsSUFFQTtBQUFBLElBRUEsT0FBTyxPQUFPLFlBQVksSUFBbUI7QUFDM0MsWUFBTSxXQUFXLFFBQVE7QUFBQSxJQUMzQjtBQUFBLElBRUE7QUFBQSxFQUNGO0FBRUEsU0FBTztBQUNUO0FBWUEsU0FBUyx5QkFBeUIsU0FBNEQ7QUFDNUYsU0FBTyw0QkFBeUQ7QUFBQSxJQUM5RCw4QkFBOEIsU0FBUztBQUFBLElBQ3ZDLGlCQUFpQixTQUFTO0FBQUEsSUFDMUIsNkJBQTZCLFNBQVM7QUFBQSxJQUN0QyxNQUFNLFNBQVM7QUFBQSxJQUNmLHNCQUFzQixTQUFTLHdCQUF3QjtBQUFBLElBQ3ZELDBCQUEwQixTQUFTO0FBQUEsSUFDbkMsaUJBQWlCLFNBQVM7QUFBQSxJQUMxQixNQUFNLFNBQVM7QUFBQSxJQUNmLHNCQUFzQixTQUFTO0FBQUEsSUFDL0Isb0NBQW9DLFNBQVM7QUFBQSxJQUM3QyxpQ0FBaUMsU0FBUztBQUFBLElBQzFDLGlDQUFpQyxTQUFTO0FBQUEsSUFDMUMsTUFBTTtBQUFBLEVBQ1IsQ0FBQztBQUNIO0FBV0EsU0FBUyxnQkFBZ0IsV0FBb0IsU0FBNEQ7QUFDdkcsTUFBSSxxQkFBcUIscUJBQXFCO0FBQzVDLFVBQU0sV0FBVyxVQUFVLHlCQUF5QjtBQUNwRCxRQUFJLFVBQVU7QUFDWixhQUFPLEVBQUUsTUFBTSxTQUFTLE1BQU0sTUFBTSxTQUFTLEtBQUs7QUFBQSxJQUNwRDtBQUFBLEVBQ0Y7QUFFQSxNQUFJLFNBQVMsU0FBUyxRQUFXO0FBQy9CLFdBQU8sRUFBRSxNQUFNLFFBQVEsUUFBUSxrQkFBa0IsTUFBTSxRQUFRLEtBQUs7QUFBQSxFQUN0RTtBQUVBLFFBQU0sSUFBSSxNQUFNLGlEQUFpRDtBQUNuRTtBQWFBLGVBQWUsZUFBZSxrQkFBOEQ7QUFDMUYsTUFBSSxDQUFDLG1CQUFtQixnQkFBZ0IsR0FBRztBQUN6QztBQUFBLEVBQ0Y7QUFFQSxNQUFJO0FBQ0YsVUFBTSxTQUFTLE1BQU0sbUJBQW1CO0FBQUEsTUFDdEMsc0JBQXNCLG9DQUFvQyxnQkFBZ0I7QUFBQSxJQUM1RSxDQUFDO0FBQ0QsUUFBSSxPQUFPLGVBQWUsS0FBSyxPQUFPLGNBQWMsR0FBRztBQUNyRDtBQUFBLFFBQ0UsMEJBQTBCLE9BQU8sT0FBTyxZQUFZLENBQUMsbURBQzdDLE9BQU8sT0FBTyxXQUFXLENBQUM7QUFBQSxNQUNwQztBQUFBLElBQ0Y7QUFBQSxFQUNGLFNBQVMsT0FBZ0I7QUFDdkIsUUFBSSxzREFBc0QsT0FBTyxLQUFLLENBQUMsRUFBRTtBQUFBLEVBQzNFO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
115
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2Nvbm5lY3QtdG8tY2RwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogUHJvZ3JhbW1hdGljIGhlbHBlciB0byBsYXVuY2ggKG9yIGF0dGFjaCB0bykgYSBDRFAtZW5hYmxlZCBPYnNpZGlhbiBpbnN0YW5jZVxuICogd2l0aCB0aGUgcnVudGltZSBoZWxwZXIgbmFtZXNwYWNlIGJvb3RzdHJhcHBlZCwgZm9yIGFkLWhvYyByZWFsLWFwcCBkZWJ1Z2dpbmcuXG4gKlxuICogQSBzaW5nbGUge0BsaW5rIGNvbm5lY3RUb0NkcH0gY2FsbCByZXNvbHZlcyB0aGUgb3duZWQtaW5zdGFuY2UgY29uZmlnLCBvcGVucyBhXG4gKiB2YXVsdCwgYW5kIGJvb3RzdHJhcHMgYHdpbmRvdy5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYCAoc28gYGV2YWxXcmFwcGVyYCxcbiAqIHRoZSBiYXNlIGBsaWJgIGhlbHBlcnMsIGBlcnJvclRvU3RyaW5nYCwgYGdldE9ic2lkaWFuTW9kdWxlYCwgXHUyMDI2IGFyZSBhdmFpbGFibGUpLCB0aGVuXG4gKiBoYW5kcyBiYWNrIGEgZGlzcG9zYWJsZSB7QGxpbmsgQ2RwQ29ubmVjdGlvbn0gZXhwb3NpbmcgdGhlIGNob3NlbiBDRFAgcG9ydCwgYVxuICogcmF3IHtAbGluayBDZHBDb25uZWN0aW9uLmludm9rZX0gYW5kIHRoZSByaWNoIHtAbGluayBDZHBDb25uZWN0aW9uLmV2YWxJbk9ic2lkaWFufS5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBjb2RlIChsYXVuY2hlcyBPYnNpZGlhbiAvIENEUCkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgRXhjZXB0IH0gZnJvbSAndHlwZS1mZXN0JztcblxuaW1wb3J0IHR5cGUgeyBBc2FyRmFsbGJhY2sgfSBmcm9tICcuL2FzYXItZmFsbGJhY2stZGV0ZWN0aW9uLm1qcyc7XG5pbXBvcnQgdHlwZSB7IENhcHR1cmVTY3JlZW5zaG90UGFyYW1zIH0gZnJvbSAnLi9jYXB0dXJlLXNjcmVlbnNob3QubWpzJztcbmltcG9ydCB0eXBlIHsgQ29udGV4dElkIH0gZnJvbSAnLi9jb250ZXh0LWlkLm1qcyc7XG5pbXBvcnQgdHlwZSB7IEVsZWN0cm9uQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vZWxlY3Ryb24tY29tcGF0aWJpbGl0eS5tanMnO1xuaW1wb3J0IHR5cGUge1xuICBFdmFsSW5PYnNpZGlhblBhcmFtcyxcbiAgR2VuZXJpY09iamVjdFxufSBmcm9tICcuL2V2YWwtaW4tb2JzaWRpYW4ubWpzJztcbmltcG9ydCB0eXBlIHsgSW5zdGFsbGVyQ29tcGF0aWJpbGl0eSB9IGZyb20gJy4vaW5zdGFsbGVyLWNvbXBhdGliaWxpdHkubWpzJztcbmltcG9ydCB0eXBlIHsgT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zIH0gZnJvbSAnLi90cmFuc3BvcnQtb3B0aW9ucy5tanMnO1xuXG5pbXBvcnQgeyBldmFsSW5PYnNpZGlhbiB9IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5tanMnO1xuaW1wb3J0IHsgZW5zdXJlSGVhZGxlc3NWYXVsdENvbmZpZyB9IGZyb20gJy4vaGVhZGxlc3MtdmF1bHQtY29uZmlnLm1qcyc7XG5pbXBvcnQge1xuICByZXNvbHZlTGVmdG92ZXJNYXhBZ2VJbk1pbGxpc2Vjb25kcyxcbiAgc3dlZXBIb3N0TGVmdG92ZXJzLFxuICB3aWxsU3dlZXBMZWZ0b3ZlcnNcbn0gZnJvbSAnLi9sZWZ0b3Zlci1jbGVhbnVwLm1qcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5tanMnO1xuaW1wb3J0IHsgbm9ybWFsaXplT3B0aW9uYWxQcm9wZXJ0aWVzIH0gZnJvbSAnLi9ub3JtYWxpemUtb3B0aW9uYWwtcHJvcGVydGllcy5tanMnO1xuaW1wb3J0IHsgVGVtcG9yYXJ5VmF1bHQgfSBmcm9tICcuL3RlbXBvcmFyeS12YXVsdC5tanMnO1xuaW1wb3J0IHsgRGVza3RvcENkcFRyYW5zcG9ydCB9IGZyb20gJy4vdHJhbnNwb3J0LWRlc2t0b3AtY2RwLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyB9IGZyb20gJy4vdHJhbnNwb3J0LWZhY3RvcnkubWpzJztcbmltcG9ydCB7IHJlc29sdmVPd25lZENvbmZpZ0RpcmVjdG9yeSB9IGZyb20gJy4vdHJhbnNwb3J0LW9wdGlvbnMubWpzJztcblxuY29uc3QgREVGQVVMVF9DRFBfSE9TVCA9ICdsb2NhbGhvc3QnO1xuXG4vKipcbiAqIEEgbGl2ZSBjb25uZWN0aW9uIHRvIGEgQ0RQLWVuYWJsZWQgT2JzaWRpYW4gaW5zdGFuY2Ugd2l0aCB0aGUgcnVudGltZSBoZWxwZXJcbiAqIG5hbWVzcGFjZSBib290c3RyYXBwZWQuXG4gKlxuICogSW1wbGVtZW50cyBgQXN5bmNEaXNwb3NhYmxlYCwgc28gYGF3YWl0IHVzaW5nIGNvbm4gPSBhd2FpdCBjb25uZWN0VG9DZHAoXHUyMDI2KWBcbiAqIGRpc3Bvc2VzIGl0IChraWxsaW5nIGFuIG93bmVkIGluc3RhbmNlIGFuZCBcdTIwMTQgZm9yIGEgdGhyb3ctYXdheSB0ZW1wIHZhdWx0IFx1MjAxNFxuICogcmVtb3ZpbmcgaXRzIGRpcmVjdG9yeSkgYXV0b21hdGljYWxseS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZHBDb25uZWN0aW9uIGV4dGVuZHMgQXN5bmNEaXNwb3NhYmxlIHtcbiAgLyoqXG4gICAqIFRoZSBzaWxlbnQtYXNhci1mYWxsYmFjayB2ZXJkaWN0IGZvciBhbiBvd25lZCBpbnN0YW5jZSwgcmVhZCBsaXZlIGFmdGVyIGJvb3Q6XG4gICAqIHdoZXRoZXIgdGhlIGFwcCB2ZXJzaW9uIGl0IGlzIGFjdHVhbGx5IHJ1bm5pbmcgbWF0Y2hlcyB0aGUgc3dhcHBlZC1pbiBwaW4sIG9yXG4gICAqIHRoZSBpbnN0YWxsZXIgc2lsZW50bHkgcmV2ZXJ0ZWQgdG8gaXRzIG93biBidW5kbGVkIGFzYXIuIGB1bmRlZmluZWRgIGluIGF0dGFjaFxuICAgKiBtb2RlLCB3aGVuIG5vIGFzYXIgd2FzIHN3YXBwZWQsIG9yIHdoZW4gdGhlIHJ1bm5pbmcgdmVyc2lvbiB3YXMgdW5yZWFkYWJsZS4gQVxuICAgKiBgJ2ZhbGxiYWNrJ2AgdmVyZGljdCByZWFjaGVzIGhlcmUgb25seSB3aGVuIHRoZSB0aHJvdyBpcyBkaXNhYmxlZFxuICAgKiAoe0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnMuc2hvdWxkVGhyb3dPblNpbGVudEFzYXJGYWxsYmFja30gYGZhbHNlYCk7XG4gICAqIG90aGVyd2lzZSBpdCB0aHJvd3MgYFNpbGVudEFzYXJGYWxsYmFja0Vycm9yYCBiZWZvcmUgdGhlIGNvbm5lY3Rpb24gaXMgY3JlYXRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGFzYXJGYWxsYmFjaz86IEFzYXJGYWxsYmFjayB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogQ2FwdHVyZXMgYSBQTkcgc2NyZWVuc2hvdCBvZiB0aGlzIGNvbm5lY3Rpb24ncyBPYnNpZGlhbiB3aW5kb3csIHdpdGggdGhlXG4gICAqIHZhdWx0IHBhdGggcHJlLWJvdW5kLlxuICAgKlxuICAgKiBQYXNzIGB3aWR0aEluUGl4ZWxzYCArIGBoZWlnaHRJblBpeGVsc2AgdG8gcGluIHRoZSB2aWV3cG9ydCBmb3IgdGhlIGR1cmF0aW9uXG4gICAqIG9mIHRoZSBjYXB0dXJlLCBzbyB0aGUgZW1pdHRlZCBQTkcgaXMgZXhhY3RseSB0aGF0IHNpemUgd2hhdGV2ZXIgc2l6ZSB0aGVcbiAgICogd2luZG93IGhhcHBlbnMgdG8gYmUuXG4gICAqXG4gICAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZXhhY3Qgc2l6ZSB0byBjYXB0dXJlIGF0LiBPbWl0IHRvIGNhcHR1cmUgdGhlIHdpbmRvdyBhdCBpdHMgbmF0dXJhbCBzaXplLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSByYXcgUE5HIGJ5dGVzLlxuICAgKi9cbiAgY2FwdHVyZVNjcmVlbnNob3Q6IChwYXJhbXM/OiBFeGNlcHQ8Q2FwdHVyZVNjcmVlbnNob3RQYXJhbXMsICdjd2QnPikgPT4gUHJvbWlzZTxVaW50OEFycmF5PjtcblxuICAvKipcbiAgICogVGhlIGJhc2UgQ0RQIFVSTCwgZS5nLiBgaHR0cDovL2xvY2FsaG9zdDo1MTg4OGAuXG4gICAqL1xuICByZWFkb25seSBjZHBVcmw6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlc29sdmVkIGluc3RhbGxlclx1MjE5NGFwcCBjb21wYXRpYmlsaXR5IHZlcmRpY3QgZm9yIGFuIG93bmVkIGluc3RhbmNlLCB3aGVuXG4gICAqIGl0IGNvdWxkIGJlIGRldGVybWluZWQuIGB1bmRlZmluZWRgIGluIGF0dGFjaCBtb2RlLCBvciB3aGVuIHRoZSB2ZXJkaWN0IGlzXG4gICAqIHVua25vd24gKHVuZGV0ZWN0YWJsZSBzaGVsbCB2ZXJzaW9uLCBvciB0aGUgYXBwIHZlcnNpb24gaXMgYWJzZW50IGZyb20gdGhlXG4gICAqIHRhYmxlKS4gQW4gYCd1bnJ1bm5hYmxlJ2AgdmVyZGljdCByZWFjaGVzIGhlcmUgb25seSB3aGVuIHRoZSBwcm9hY3RpdmUgdGhyb3dcbiAgICogaXMgZGlzYWJsZWQgKHtAbGluayBDb25uZWN0VG9DZHBPcHRpb25zLnNob3VsZFRocm93T25JbmNvbXBhdGlibGVJbnN0YWxsZXJ9XG4gICAqIGBmYWxzZWApOyBvdGhlcndpc2UgaXQgdGhyb3dzIGBJbmNvbXBhdGlibGVJbnN0YWxsZXJWZXJzaW9uRXJyb3JgIGJlZm9yZSB0aGVcbiAgICogY29ubmVjdGlvbiBpcyBjcmVhdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcGF0aWJpbGl0eT86IEluc3RhbGxlckNvbXBhdGliaWxpdHkgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIERpc3Bvc2VzIHRoZSBjb25uZWN0aW9uOiBraWxscyBhbiBvd25lZCBpbnN0YW5jZSBhbmQgcmVtb3ZlcyBpdHMgaXNvbGF0ZWRcbiAgICogdXNlci1kYXRhIGRpci4gVGhlIHZhdWx0IGRpcmVjdG9yeSBpcyByZW1vdmVkIG9ubHkgd2hlbiBpdCBpcyBhIHRocm93LWF3YXlcbiAgICogdGVtcCB2YXVsdCAoc2VlIHtAbGluayBDb25uZWN0VG9DZHBPcHRpb25zLnNob3VsZFJlbW92ZVZhdWx0T25EaXNwb3NlfSk7IGFcbiAgICogcmVhbCB2YXVsdCBwYXNzZWQgdmlhIHtAbGluayBDb25uZWN0VG9DZHBPcHRpb25zLnZhdWx0fSBpcyBuZXZlciBkZWxldGVkLlxuICAgKlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgZGlzcG9zYWwgY29tcGxldGVzLlxuICAgKi9cbiAgZGlzcG9zZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogVGhlIHJ1bnRpbWUgRWxlY3Ryb24gY29tcGF0aWJpbGl0eSB2ZXJkaWN0IGZvciBhbiBvd25lZCBpbnN0YW5jZSwgcmVhZCBsaXZlXG4gICAqIGFmdGVyIGJvb3Q6IHdoZXRoZXIgdGhlIEVsZWN0cm9uIHZlcnNpb24gaXQgaXMgYWN0dWFsbHkgcnVubmluZyBpcyBuZXcgZW5vdWdoXG4gICAqIGZvciB0aGUgcnVubmluZyBhcHAgdmVyc2lvbi4gYHVuZGVmaW5lZGAgaW4gYXR0YWNoIG1vZGUsIG9yIHdoZW4gdGhlIHZlcmRpY3RcbiAgICogaXMgdW5rbm93biAodGhlIGxpdmUgdmVyc2lvbiB3YXMgdW5yZWFkYWJsZSwgb3IgdGhlIGFwcCB2ZXJzaW9uIGNhcnJpZXMgbm9cbiAgICogcmVjb21tZW5kZWQgRWxlY3Ryb24gdmVyc2lvbikuIEFuIG9sZCBFbGVjdHJvbiBuZXZlciBibG9ja3MgXHUyMDE0IGl0IG9ubHkgd2FybnMgXHUyMDE0XG4gICAqIHNvIHVubGlrZSB7QGxpbmsgY29tcGF0aWJpbGl0eX0gdGhlcmUgaXMgbm8gdGhyb3dpbmcgdGllci5cbiAgICovXG4gIHJlYWRvbmx5IGVsZWN0cm9uQ29tcGF0aWJpbGl0eT86IEVsZWN0cm9uQ29tcGF0aWJpbGl0eSB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogRXZhbHVhdGVzIGEgc2VsZi1jb250YWluZWQgZnVuY3Rpb24gaW5zaWRlIE9ic2lkaWFuIHZpYSB0aGUgcmljaCBoZWxwZXJcbiAgICogcGF0aCwgcmVjZWl2aW5nIGB7IGFwcCwgbGliLCBvYnNpZGlhbk1vZHVsZSwgY29udGV4dCB9YCBwbHVzIGFueSBgaW5wdXRgXG4gICAqIChzaGFyZWQgaGVscGVycyBsaWtlIGB0eXBlSW50b0VkaXRvcmAgLyBgd2FpdFVudGlsYCBsaXZlIG9uIGBsaWJgKS4gTWlycm9yc1xuICAgKiB0aGUgdG9wLWxldmVsIGBldmFsSW5PYnNpZGlhbmAsIHdpdGggdGhlIHRyYW5zcG9ydCBhbmQgdmF1bHQgcGF0aCBwcmUtYm91bmRcbiAgICogdG8gdGhpcyBjb25uZWN0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGV2YWx1YXRpb24gcGFyYW1ldGVycyAoYGNhbGxiYWNrYCwgb3B0aW9uYWwgYGlucHV0YC9gY29udGV4dElkYCkuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiBgY2FsbGJhY2tgLlxuICAgKi9cbiAgZXZhbEluT2JzaWRpYW46IDxJbnB1dCBleHRlbmRzIEdlbmVyaWNPYmplY3QsIFJlc3VsdCwgVENvbnRleHRJZCBleHRlbmRzIENvbnRleHRJZDx1bmtub3duPiB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZD4oXG4gICAgcGFyYW1zOiBFeGNlcHQ8RXZhbEluT2JzaWRpYW5QYXJhbXM8SW5wdXQsIFJlc3VsdCwgVENvbnRleHRJZD4sICd0cmFuc3BvcnQnIHwgJ3ZhdWx0UGF0aCc+XG4gICkgPT4gUHJvbWlzZTxSZXN1bHQ+O1xuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgYSByYXcgSmF2YVNjcmlwdCBleHByZXNzaW9uIGluc2lkZSBPYnNpZGlhbiBhbmQgcmV0dXJucyB0aGVcbiAgICogbm9ybWFsaXplZCBzdHJpbmcgcmVzdWx0IChlLmcuIGAnNSdgLCBhIEpTT04gc3RyaW5nLCBvciBgJyhubyBvdXRwdXQpJ2ApLlxuICAgKlxuICAgKiBAcGFyYW0gZXhwcmVzc2lvbiAtIEEgc2VsZi1jb250YWluZWQgSmF2YVNjcmlwdCBleHByZXNzaW9uLlxuICAgKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHRvIHRoZSByYXcgcmVzdWx0IHN0cmluZy5cbiAgICovXG4gIGludm9rZTogKGV4cHJlc3Npb246IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBUaGUgQ0RQIHBvcnQgdGhlIGluc3RhbmNlIGlzIHJlYWNoYWJsZSBvbiAodGhlIGZyZWUgcG9ydCBjaG9zZW4gZm9yIGFuXG4gICAqIG93bmVkIGluc3RhbmNlLCBvciB0aGUgYXR0YWNoZWQge0BsaW5rIENvbm5lY3RUb0NkcE9wdGlvbnMucG9ydH0pLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgb3BlbmVkIHZhdWx0LiBFeHBvc2VzIGBwYXRoYCBhbmQgYHBvcHVsYXRlKC4uLilgIGZvciBzZWVkaW5nIGZpbGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgdmF1bHQ6IFRlbXBvcmFyeVZhdWx0O1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBjb25uZWN0VG9DZHB9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbm5lY3RUb0NkcE9wdGlvbnMge1xuICAvKipcbiAgICogVGltZW91dCBpbiBtaWxsaXNlY29uZHMgZm9yIGluZGl2aWR1YWwgQ0RQIGNvbW1hbmRzLlxuICAgKlxuICAgKiBBIHRlc3QncyBjbG9zdXJlIHRyYXZlbHMgYXMgb25lIGBSdW50aW1lLmV2YWx1YXRlYCBjb21tYW5kLCBzbyB0aGlzIGlzIGFsc29cbiAgICogdGhlIGRlc2t0b3AgcGVyLWV2YWwgY2FwLiBUaGUgZGVmYXVsdCBpcyBgREVGQVVMVF9FVkFMX0NBUF9JTl9NSUxMSVNFQ09ORFNgLFxuICAgKiBleHBvcnRlZCBmcm9tIHRoZSBwYWNrYWdlIHJvb3QgXHUyMDE0IGltcG9ydCBpdCByYXRoZXIgdGhhbiByZXN0YXRpbmcgdGhlIG51bWJlcixcbiAgICogc28gYSBjbG9zdXJlIHNpemVkIGFnYWluc3QgdGhlIGNhcCBmb2xsb3dzIGl0IGlmIGl0IGV2ZXIgbW92ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGAzMDAwMGBcbiAgICovXG4gIHJlYWRvbmx5IGNvbW1hbmRUaW1lb3V0SW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSB2YXVsdCdzICoqY29uZmlnIGZvbGRlcioqIFx1MjAxNCBPYnNpZGlhbidzIHBlci12YXVsdCAqT3ZlcnJpZGUgY29uZmlnXG4gICAqIGZvbGRlciogc2V0dGluZywgZS5nLiBgJy5vYnNpZGlhbi1kZXNrdG9wJ2AuIFNldCBpdCB0byBvcGVuIGEgdmF1bHQgdGhhdFxuICAgKiBrZWVwcyBpdHMgc2V0dGluZ3Mgc29tZXdoZXJlIG90aGVyIHRoYW4gYC5vYnNpZGlhbmA7IHdpdGhvdXQgaXQgc3VjaCBhIHZhdWx0XG4gICAqIG9wZW5zIGFnYWluc3QgYC5vYnNpZGlhbmAsIHdoaWNoIGZvciBhIHZhdWx0IHRoYXQgaGFzIGEgc3RhbGUgb25lIGJlc2lkZSB0aGVcbiAgICogcmVhbCBmb2xkZXIgbWVhbnMgb3BlbmluZyBzdWNjZXNzZnVsbHkgYWdhaW5zdCB0aGUgd3Jvbmcgc2V0dGluZ3MuXG4gICAqXG4gICAqIE11c3Qgc3RhcnQgd2l0aCBhIGRvdCwgbXVzdCBub3QgYmUgdGhlIGJhcmUgZG90LCBhbmQgbXVzdCBub3QgY29udGFpbiBhIHBhdGhcbiAgICogc2VwYXJhdG9yIFx1MjAxNCBhbnl0aGluZyBlbHNlIHRocm93cyBiZWZvcmUgT2JzaWRpYW4gbGF1bmNoZXMsIHNpbmNlIE9ic2lkaWFuXG4gICAqIHdvdWxkIHNpbGVudGx5IHN1YnN0aXR1dGUgYC5vYnNpZGlhbmAuIEFmdGVyIHRoZSB2YXVsdCBvcGVucywgaXRzIGFjdHVhbFxuICAgKiBgYXBwLnZhdWx0LmNvbmZpZ0RpcmAgaXMgcmVhZCBiYWNrIGFuZCBhIG1pc21hdGNoIHRocm93c1xuICAgKiBgQ29uZmlnRGlyZWN0b3J5RmFsbGJhY2tFcnJvcmAuXG4gICAqXG4gICAqIElnbm9yZWQgaW4gYXR0YWNoIG1vZGUgKHtAbGluayBDb25uZWN0VG9DZHBPcHRpb25zLnBvcnR9IHNldCksIHdoZXJlIHRoZVxuICAgKiB2YXVsdCBpcyBvcGVuZWQgYnkgdGhlIHVzZXIncyBvd24gT2JzaWRpYW4gdW5kZXIgaXRzIG93biBjb25maWcuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB1bmRlZmluZWRgIChPYnNpZGlhbidzIG93biBkZWZhdWx0LCBgLm9ic2lkaWFuYClcbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZ0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogR3JhY2Ugd2luZG93IGluIG1pbGxpc2Vjb25kcyBmb3IgZmFzdC1mYWlsaW5nIGEgZGVhZCBib290IG9mIHRoZSBvd25lZFxuICAgKiBpbnN0YW5jZSBcdTIwMTQgdGhlIHJlbmRlcmVyIGxvYWRlZCBidXQgdGhlIGFwcCBuZXZlciBib290c3RyYXBwZWQgKGVtcHR5XG4gICAqIGA8Ym9keT5gLCBubyBgd2luZG93LmFwcGApLCB0aGUgdGVybWluYWwgc3RhdGUgd2hlbiB0aGUgYXNhciBjYW5ub3QgcnVuIG9uXG4gICAqIHRoZSBsYXVuY2hlZCBFbGVjdHJvbiBzaGVsbC4gT25jZSBpdCBoYXMgaGVsZCB0aGlzIGxvbmcgYVxuICAgKiBgUmVuZGVyZXJGYWlsZWRUb0luaXRpYWxpemVFcnJvcmAgaXMgdGhyb3duIGluc3RlYWQgb2Ygd2FpdGluZyBvdXQgdGhlIGZ1bGxcbiAgICogcmVhZGluZXNzIHRpbWVvdXQuIElnbm9yZWQgaW4gYXR0YWNoIG1vZGUgKHtAbGluayBwb3J0fSBzZXQpLiBTZXQgYDBgIHRvXG4gICAqIGRpc2FibGUgZmFzdC1mYWlsLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgMTAwMDBgXG4gICAqL1xuICByZWFkb25seSBkZWFkQm9vdEdyYWNlSW5NaWxsaXNlY29uZHM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIENEUCBob3N0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgJ2xvY2FsaG9zdCdgXG4gICAqL1xuICByZWFkb25seSBob3N0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBPYnNpZGlhbiB3aW5kb3cgaXMgc2hvd24gb24gc2NyZWVuLiBEZWZhdWx0cyB0byBgdHJ1ZWA7IHNldFxuICAgKiBgZmFsc2VgIHRvIGxhdW5jaCBpdCBvZmYtc2NyZWVuLlxuICAgKiBJZ25vcmVkIGluIGF0dGFjaCBtb2RlICh7QGxpbmsgcG9ydH0gc2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBpc09ic2lkaWFuQXBwVmlzaWJsZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBpbnMgdGhlIEVsZWN0cm9uIHNoZWxsIChpbnN0YWxsZXIgYnVpbGQpIHRoZSBvd25lZCBpbnN0YW5jZSBydW5zLiBBY2NlcHRzXG4gICAqIGAneC55LnonYCwgYCdwdWJsaWMtbGF0ZXN0J2AsIG9yIGAnY2F0YWx5c3QtbGF0ZXN0J2AuIElnbm9yZWQgd2hlblxuICAgKiB7QGxpbmsgcG9ydH0gKGF0dGFjaCBtb2RlKSBpcyBzZXQuIFdoZW4gb21pdHRlZCwgdGhlIGluc3RhbGxlZCBzaGVsbCBpcyB1c2VkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgb2JzaWRpYW5JbnN0YWxsZXJWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQaW5zIHRoZSBPYnNpZGlhbiBhcHAgdmVyc2lvbiAoYXNhcikgdGhlIG93bmVkIGluc3RhbmNlIHJ1bnMuIEFjY2VwdHNcbiAgICogYCd4LnkueidgLCBgJ3B1YmxpYy1sYXRlc3QnYCwgb3IgYCdjYXRhbHlzdC1sYXRlc3QnYC4gSWdub3JlZCB3aGVuXG4gICAqIHtAbGluayBwb3J0fSAoYXR0YWNoIG1vZGUpIGlzIHNldC4gV2hlbiBvbWl0dGVkLCB0aGUgaW5zdGFsbGVkIHZlcnNpb24gaXMgdXNlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IG9ic2lkaWFuVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQ0RQIHBvcnQgb2YgYW4gYWxyZWFkeS1ydW5uaW5nIE9ic2lkaWFuIHRvICoqYXR0YWNoKiogdG8uIFdoZW4gb21pdHRlZCwgYW5cbiAgICogaXNvbGF0ZWQgaW5zdGFuY2UgaXMgbGF1bmNoZWQgb24gYW4gYXV0b21hdGljYWxseSBjaG9zZW4gZnJlZSBwb3J0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdW5kZWZpbmVkYFxuICAgKi9cbiAgcmVhZG9ubHkgcG9ydD86IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciB0byBsYXVuY2ggdGhlIG93bmVkIGluc3RhbmNlIHdpdGggQ2hyb21pdW0ncyBzYW5kYm94IGRpc2FibGVkXG4gICAqIChgLS1uby1zYW5kYm94YCkuXG4gICAqXG4gICAqIE5lZWRlZCB0byBib290IG9uIExpbnV4IHdpdGhvdXQgYSBjb3JyZWN0bHktY29uZmlndXJlZCBzZXR1aWRcbiAgICogYGNocm9tZS1zYW5kYm94YCBoZWxwZXIgKGUuZy4gYW4gaW5zdGFsbGVyLWV4dHJhY3RlZCBwb3J0YWJsZSBzaGVsbCwgb3IgQ0lcbiAgICogcnVubmluZyBhcyBhIG5vbi1yb290IHVzZXIpOyBoYXJtbGVzcyBvbiBXaW5kb3dzL21hY09TLiBJZ25vcmVkIGluIGF0dGFjaFxuICAgKiBtb2RlICh7QGxpbmsgcG9ydH0gc2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYGZhbHNlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRGlzYWJsZVNhbmRib3g/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHJlbW92ZSB0aGUgdmF1bHQgZGlyZWN0b3J5IG9uIHtAbGluayBDZHBDb25uZWN0aW9uLmRpc3Bvc2V9LlxuICAgKlxuICAgKiBXaGVuIG9taXR0ZWQsIGRlZmF1bHRzIHRvIGB0cnVlYCBmb3IgYW4gaW1wbGljaXQgdGhyb3ctYXdheSB0ZW1wIHZhdWx0XG4gICAqICh7QGxpbmsgdmF1bHR9IG5vdCBnaXZlbikgYW5kIGBmYWxzZWAgd2hlbiBhIHtAbGluayB2YXVsdH0gcGF0aCBpcyBnaXZlbiwgc29cbiAgICogYSByZWFsIHZhdWx0IGlzIG5ldmVyIGRlbGV0ZWQuIFNldCBleHBsaWNpdGx5IHRvIG92ZXJyaWRlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGFuICoqdW5ydW5uYWJsZSoqIGluc3RhbGxlclx1MjE5NGFwcCB2ZXJzaW9uIHBhaXIgZmFpbHMgZmFzdCBiZWZvcmUgbGF1bmNoLlxuICAgKlxuICAgKiBXaGVuIGB0cnVlYCAodGhlIGRlZmF1bHQpLCBhbiBpbnN0YWxsZXIgYmVsb3cgdGhlIGFwcCdzIHJ1biBmbG9vciB0aHJvd3NcbiAgICogYEluY29tcGF0aWJsZUluc3RhbGxlclZlcnNpb25FcnJvcmAgZnJvbSB2ZXJzaW9uIHJlc29sdXRpb24gYmVmb3JlIGFueXRoaW5nIGlzXG4gICAqIGRvd25sb2FkZWQgb3IgbGF1bmNoZWQuIFNldCBgZmFsc2VgIHRvIGxldCB0aGUgcGluIHByb2NlZWQgdG8gbGF1bmNoIFx1MjAxNCB3aGVyZVxuICAgKiB0aGUgcmVhY3RpdmUgZGVhZC1ib290IGZhc3QtZmFpbCBzdGlsbCBjYXRjaGVzIHRoZSBibGFjay1zY3JlZW4gYm9vdCwgYW5kIHRoZVxuICAgKiBgJ3VucnVubmFibGUnYCB2ZXJkaWN0IGlzIHN1cmZhY2VkIG9uIHtAbGluayBDZHBDb25uZWN0aW9uLmNvbXBhdGliaWxpdHl9XG4gICAqIHJhdGhlciB0aGFuIHRocm93bi4gSWdub3JlZCBpbiBhdHRhY2ggbW9kZSAoe0BsaW5rIHBvcnR9IHNldCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGB0cnVlYFxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBwb3N0LWJvb3QgKipzaWxlbnQgYXNhciBmYWxsYmFjayoqIGZhaWxzIGZhc3QuXG4gICAqXG4gICAqIFdoZW4gYW4gYXNhciBpcyBzd2FwcGVkIG9udG8gYW4gaW5zdGFsbGVyIHNoZWxsIHRvbyBvbGQgZm9yIGl0LCB0aGUgaW5zdGFuY2VcbiAgICogbWF5IHNpbGVudGx5IHJldmVydCB0byB0aGUgaW5zdGFsbGVyJ3Mgb3duIGJ1bmRsZWQgYXNhciBhbmQgcnVuIHRoZSAqKndyb25nXG4gICAqIChvbGRlcikqKiB2ZXJzaW9uIGJlaGluZCBhIGhlYWx0aHkgVUkuIFdoZW4gYHRydWVgICh0aGUgZGVmYXVsdCksIHRoZSBydW5uaW5nXG4gICAqIGFwcCB2ZXJzaW9uIGlzIHZlcmlmaWVkIGFnYWluc3QgdGhlIHBpbiBwb3N0LWJvb3QgYW5kIGEgbWlzbWF0Y2ggdGhyb3dzXG4gICAqIGBTaWxlbnRBc2FyRmFsbGJhY2tFcnJvcmAuIFNldCBgZmFsc2VgIHRvIGxldCB0aGUgYm9vdCBwcm9jZWVkIFx1MjAxNCB0aGUgbWlzbWF0Y2hcbiAgICogaXMgdGhlbiBzdXJmYWNlZCBvbiB7QGxpbmsgQ2RwQ29ubmVjdGlvbi5hc2FyRmFsbGJhY2t9IHJhdGhlciB0aGFuIHRocm93bi5cbiAgICogSWdub3JlZCBpbiBhdHRhY2ggbW9kZSAoe0BsaW5rIHBvcnR9IHNldCkgYW5kIHdoZW4gbm8gYXNhciBpcyBzd2FwcGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBgdHJ1ZWBcbiAgICovXG4gIHJlYWRvbmx5IHNob3VsZFRocm93T25TaWxlbnRBc2FyRmFsbGJhY2s/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBvd25lZC1pbnN0YW5jZSBjb21wYXRpYmlsaXR5ICoqbmFnIHdhcm5pbmdzKiogYXJlIGVtaXR0ZWQuXG4gICAqXG4gICAqIENvdmVycyBib3RoIHRoZSBvZmZsaW5lIGluc3RhbGxlclx1MjE5NGFwcCB3YXJuaW5nIGFuZCB0aGUgcG9zdC1ib290XG4gICAqIHJ1bnRpbWUtRWxlY3Ryb24gd2FybmluZy4gV2hlbiBgdHJ1ZWAgKHRoZSBkZWZhdWx0KSBlYWNoIGZpcmVzIHZpYSB0aGUgaGFybmVzc1xuICAgKiBsb2c7IHNldCBgZmFsc2VgIHRvIHNpbGVuY2UgYm90aCBcdTIwMTQgdGhlIHZlcmRpY3RzIGFyZSBzdGlsbCBzdXJmYWNlZCBvblxuICAgKiB7QGxpbmsgQ2RwQ29ubmVjdGlvbi5jb21wYXRpYmlsaXR5fSAvIHtAbGluayBDZHBDb25uZWN0aW9uLmVsZWN0cm9uQ29tcGF0aWJpbGl0eX0sXG4gICAqIG9ubHkgdGhlIGxvZyBpcyBzdXBwcmVzc2VkLiBJZ25vcmVkIGluIGF0dGFjaCBtb2RlICh7QGxpbmsgcG9ydH0gc2V0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHRydWVgXG4gICAqL1xuICByZWFkb25seSBzaG91bGRXYXJuT25Db21wYXRpYmlsaXR5SXNzdWVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWJzb2x1dGUgcGF0aCB0byBhbiBleGlzdGluZyB2YXVsdCB0byBvcGVuLiBXaGVuIG9taXR0ZWQsIGFuIGVtcHR5IHRlbXBvcmFyeVxuICAgKiB2YXVsdCBpcyBjcmVhdGVkIChhbmQgcmVtb3ZlZCBvbiBkaXNwb3NlIHVubGVzc1xuICAgKiB7QGxpbmsgc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2V9IHNheXMgb3RoZXJ3aXNlKS5cbiAgICpcbiAgICogQGRlZmF1bHQgYHVuZGVmaW5lZGBcbiAgICovXG4gIHJlYWRvbmx5IHZhdWx0Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcmVzb2x2ZWQgQ0RQIGhvc3QvcG9ydCBwYWlyLlxuICovXG5pbnRlcmZhY2UgUmVzb2x2ZWRFbmRwb2ludCB7XG4gIGhvc3Q6IHN0cmluZztcbiAgcG9ydDogbnVtYmVyO1xufVxuXG4vKipcbiAqIExhdW5jaGVzIChvciBhdHRhY2hlcyB0bykgYSBDRFAtZW5hYmxlZCBPYnNpZGlhbiBpbnN0YW5jZSwgb3BlbnMgYSB2YXVsdCwgYW5kXG4gKiBib290c3RyYXBzIHRoZSBydW50aW1lIGhlbHBlciBuYW1lc3BhY2UsIHJldHVybmluZyBhIGRpc3Bvc2FibGUgY29ubmVjdGlvbi5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIENvbm5lY3Rpb24gb3B0aW9ucy5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIGxpdmUge0BsaW5rIENkcENvbm5lY3Rpb259LlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY29ubmVjdFRvQ2RwKG9wdGlvbnM/OiBDb25uZWN0VG9DZHBPcHRpb25zKTogUHJvbWlzZTxDZHBDb25uZWN0aW9uPiB7XG4gIGNvbnN0IHRyYW5zcG9ydE9wdGlvbnMgPSBidWlsZENkcFRyYW5zcG9ydE9wdGlvbnMob3B0aW9ucyk7XG4gIGF3YWl0IHN3ZWVwTGVmdG92ZXJzKHRyYW5zcG9ydE9wdGlvbnMpO1xuICBjb25zdCB0cmFuc3BvcnQgPSBhd2FpdCBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9ucyh0cmFuc3BvcnRPcHRpb25zKTtcbiAgY29uc3Qgc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2UgPSBvcHRpb25zPy5zaG91bGRSZW1vdmVWYXVsdE9uRGlzcG9zZSA/PyAob3B0aW9ucz8udmF1bHQgPT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IHZhdWx0ID0gbmV3IFRlbXBvcmFyeVZhdWx0KG9wdGlvbnM/LnZhdWx0LCB7IHNob3VsZFJlbW92ZURpcmVjdG9yeU9uRGlzcG9zZTogc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2UgfSk7XG5cbiAgLy8gVGhlIGhlYWRsZXNzIGRlZmF1bHRzIGdvIG9ubHkgaW50byBhIHZhdWx0IHRoZSBoYXJuZXNzIG1hZGUgXHUyMDE0IHRoZSBzYW1lXG4gIC8vIGBvcHRpb25zLnZhdWx0ID09PSB1bmRlZmluZWRgIGRpc2NyaW1pbmF0b3IgdGhlIGRpc3Bvc2FsIGFib3ZlIHR1cm5zIG9uLiBBXG4gIC8vIGNhbGxlci1zdXBwbGllZCB2YXVsdCBpcyBhIHJlYWwgb25lIHRoZSB1c2VyIGtlZXBzLCBhbmQgYSBkZWJ1Z2dpbmcgc2Vzc2lvblxuICAvLyBoYXMgbm8gYnVzaW5lc3MgcmV3cml0aW5nIGl0cyBzZXR0aW5ncy5cbiAgaWYgKG9wdGlvbnM/LnZhdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICBhd2FpdCBlbnN1cmVIZWFkbGVzc1ZhdWx0Q29uZmlnKHtcbiAgICAgIGNvbmZpZ0RpcmVjdG9yeTogcmVzb2x2ZU93bmVkQ29uZmlnRGlyZWN0b3J5KHRyYW5zcG9ydE9wdGlvbnMpLFxuICAgICAgbGFiZWw6IHRyYW5zcG9ydE9wdGlvbnMudHlwZSxcbiAgICAgIHZhdWx0UGF0aDogdmF1bHQucGF0aFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUmVnaXN0ZXJpbmcgdGhlIHZhdWx0IGlzIHdoYXQgbGF1bmNoZXMgdGhlIG93bmVkIGluc3RhbmNlIChwcm92aXNpb25zIHRoZVxuICAvLyBhc2FyLCBvcGVucyB0aGUgdmF1bHQsIGFuZCBib290c3RyYXBzIHRoZSBoZWxwZXIgbmFtZXNwYWNlKSwgb3Igb3BlbnMgdGhlXG4gIC8vIHZhdWx0IGluIHRoZSBhdHRhY2hlZCBpbnN0YW5jZS5cbiAgYXdhaXQgdmF1bHQucmVnaXN0ZXIodHJhbnNwb3J0KTtcblxuICBjb25zdCB7IGhvc3QsIHBvcnQgfSA9IHJlc29sdmVFbmRwb2ludCh0cmFuc3BvcnQsIG9wdGlvbnMpO1xuICBjb25zdCBjZHBVcmwgPSBgaHR0cDovLyR7aG9zdH06JHtTdHJpbmcocG9ydCl9YDtcbiAgY29uc3QgYXNhckZhbGxiYWNrID0gdHJhbnNwb3J0IGluc3RhbmNlb2YgRGVza3RvcENkcFRyYW5zcG9ydCA/IHRyYW5zcG9ydC5nZXRBc2FyRmFsbGJhY2soKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY29tcGF0aWJpbGl0eSA9IHRyYW5zcG9ydCBpbnN0YW5jZW9mIERlc2t0b3BDZHBUcmFuc3BvcnQgPyB0cmFuc3BvcnQuZ2V0Q29tcGF0aWJpbGl0eSgpIDogdW5kZWZpbmVkO1xuICBjb25zdCBlbGVjdHJvbkNvbXBhdGliaWxpdHkgPSB0cmFuc3BvcnQgaW5zdGFuY2VvZiBEZXNrdG9wQ2RwVHJhbnNwb3J0ID8gdHJhbnNwb3J0LmdldEVsZWN0cm9uQ29tcGF0aWJpbGl0eSgpIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGNvbm5lY3Rpb246IENkcENvbm5lY3Rpb24gPSB7XG4gICAgY2RwVXJsLFxuICAgIC4uLihhc2FyRmFsbGJhY2sgJiYgeyBhc2FyRmFsbGJhY2sgfSksXG4gICAgLi4uKGNvbXBhdGliaWxpdHkgJiYgeyBjb21wYXRpYmlsaXR5IH0pLFxuICAgIC4uLihlbGVjdHJvbkNvbXBhdGliaWxpdHkgJiYgeyBlbGVjdHJvbkNvbXBhdGliaWxpdHkgfSksXG5cbiAgICBhc3luYyBjYXB0dXJlU2NyZWVuc2hvdChwYXJhbXM/OiBFeGNlcHQ8Q2FwdHVyZVNjcmVlbnNob3RQYXJhbXMsICdjd2QnPik6IFByb21pc2U8VWludDhBcnJheT4ge1xuICAgICAgLy8gRXZlcnkgdHJhbnNwb3J0IGBjb25uZWN0VG9DZHBgIGJ1aWxkcyBpcyBhIERlc2t0b3BDZHBUcmFuc3BvcnQsIHdoaWNoXG4gICAgICAvLyBpbXBsZW1lbnRzIHRoZSBvcHRpb25hbCBtZXRob2QgXHUyMDE0IGJ1dCB0aGUgaW50ZXJmYWNlIHN0aWxsIHR5cGVzIGl0XG4gICAgICAvLyBvcHRpb25hbCwgc28gdGhlIGFic2VuY2UgaXMgcmVwb3J0ZWQgcmF0aGVyIHRoYW4gc2lsZW50bHkgdGhyb3duIGF0LlxuICAgICAgaWYgKCF0cmFuc3BvcnQuY2FwdHVyZVNjcmVlbnNob3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb25uZWN0VG9DZHA6IHRoaXMgdHJhbnNwb3J0IGNhbm5vdCBjYXB0dXJlIHNjcmVlbnNob3RzLicpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJhbnNwb3J0LmNhcHR1cmVTY3JlZW5zaG90KHsgLi4ucGFyYW1zLCBjd2Q6IHZhdWx0LnBhdGggfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGUgdmF1bHQgY2FycmllcyBgc2hvdWxkUmVtb3ZlVmF1bHRPbkRpc3Bvc2VgIGl0c2VsZiAoaGFuZGVkIHRvIGl0cyBjb25zdHJ1Y3RvciBhYm92ZSksIHNvXG4gICAgICAgIC8vIHRoaXMgaXMgb25lIGNhbGwgcmF0aGVyIHRoYW4gYSBicmFuY2g6IGl0IGFsd2F5cyB1bnJlZ2lzdGVycywgYW5kIHJlbW92ZXMgdGhlIGRpcmVjdG9yeSBvbmx5XG4gICAgICAgIC8vIHdoZW4gdGhhdCBmbGFnIHNheXMgdG8uXG4gICAgICAgIGF3YWl0IHZhdWx0LmRpc3Bvc2UodHJhbnNwb3J0KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGF3YWl0IHRyYW5zcG9ydC5kaXNwb3NlPy4oKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZXZhbEluT2JzaWRpYW48SW5wdXQgZXh0ZW5kcyBHZW5lcmljT2JqZWN0LCBSZXN1bHQsIFRDb250ZXh0SWQgZXh0ZW5kcyBDb250ZXh0SWQ8dW5rbm93bj4gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+KFxuICAgICAgcGFyYW1zOiBFeGNlcHQ8RXZhbEluT2JzaWRpYW5QYXJhbXM8SW5wdXQsIFJlc3VsdCwgVENvbnRleHRJZD4sICd0cmFuc3BvcnQnIHwgJ3ZhdWx0UGF0aCc+XG4gICAgKTogUHJvbWlzZTxSZXN1bHQ+IHtcbiAgICAgIHJldHVybiBldmFsSW5PYnNpZGlhbjxJbnB1dCwgUmVzdWx0LCBUQ29udGV4dElkPih7IC4uLnBhcmFtcywgdHJhbnNwb3J0LCB2YXVsdFBhdGg6IHZhdWx0LnBhdGggfSk7XG4gICAgfSxcblxuICAgIGFzeW5jIGludm9rZShleHByZXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgcmV0dXJuIHRyYW5zcG9ydC5ldmFsdWF0ZShleHByZXNzaW9uLCB7IGN3ZDogdmF1bHQucGF0aCB9KTtcbiAgICB9LFxuXG4gICAgcG9ydCxcblxuICAgIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGF3YWl0IGNvbm5lY3Rpb24uZGlzcG9zZSgpO1xuICAgIH0sXG5cbiAgICB2YXVsdFxuICB9O1xuXG4gIHJldHVybiBjb25uZWN0aW9uO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUge0BsaW5rIE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9uc30gZm9yIGEgY29ubmVjdGlvbiwgdGhyZWFkaW5nIG9ubHlcbiAqIHRoZSBwcm92aWRlZCB7QGxpbmsgQ29ubmVjdFRvQ2RwT3B0aW9uc30gdGhyb3VnaCAob3duZWQtdmlzaWJsZSBkZWZhdWx0cyB0b1xuICogYHRydWVgLCB1bmxpa2UgdGhlIGhpZGRlbi1ieS1kZWZhdWx0IHRlc3QgdHJhbnNwb3J0cykuIFVuc2V0IGtub2JzIHBhc3MgdGhyb3VnaFxuICogYXMgYHVuZGVmaW5lZGAgYW5kIGFyZSByZWFkIHdpdGggYD8/IGRlZmF1bHRgIC8gYCE9PSB1bmRlZmluZWRgIGd1YXJkc1xuICogZG93bnN0cmVhbSwgc28gYW4gZXhwbGljaXQgYHVuZGVmaW5lZGAgaXMgaW5kaXN0aW5ndWlzaGFibGUgZnJvbSBhbiBhYnNlbnQga2V5LlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIGNvbm5lY3Rpb24gb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSB0cmFuc3BvcnQgb3B0aW9ucyB0byBjcmVhdGUgdGhlIGNvbm5lY3Rpb24ncyB0cmFuc3BvcnQgZnJvbS5cbiAqL1xuZnVuY3Rpb24gYnVpbGRDZHBUcmFuc3BvcnRPcHRpb25zKG9wdGlvbnM/OiBDb25uZWN0VG9DZHBPcHRpb25zKTogT2JzaWRpYW5DZHBUcmFuc3BvcnRPcHRpb25zIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZU9wdGlvbmFsUHJvcGVydGllczxPYnNpZGlhbkNkcFRyYW5zcG9ydE9wdGlvbnM+KHtcbiAgICBjb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzOiBvcHRpb25zPy5jb21tYW5kVGltZW91dEluTWlsbGlzZWNvbmRzLFxuICAgIGNvbmZpZ0RpcmVjdG9yeTogb3B0aW9ucz8uY29uZmlnRGlyZWN0b3J5LFxuICAgIGRlYWRCb290R3JhY2VJbk1pbGxpc2Vjb25kczogb3B0aW9ucz8uZGVhZEJvb3RHcmFjZUluTWlsbGlzZWNvbmRzLFxuICAgIGhvc3Q6IG9wdGlvbnM/Lmhvc3QsXG4gICAgaXNPYnNpZGlhbkFwcFZpc2libGU6IG9wdGlvbnM/LmlzT2JzaWRpYW5BcHBWaXNpYmxlID8/IHRydWUsXG4gICAgb2JzaWRpYW5JbnN0YWxsZXJWZXJzaW9uOiBvcHRpb25zPy5vYnNpZGlhbkluc3RhbGxlclZlcnNpb24sXG4gICAgb2JzaWRpYW5WZXJzaW9uOiBvcHRpb25zPy5vYnNpZGlhblZlcnNpb24sXG4gICAgcG9ydDogb3B0aW9ucz8ucG9ydCxcbiAgICBzaG91bGREaXNhYmxlU2FuZGJveDogb3B0aW9ucz8uc2hvdWxkRGlzYWJsZVNhbmRib3gsXG4gICAgc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcjogb3B0aW9ucz8uc2hvdWxkVGhyb3dPbkluY29tcGF0aWJsZUluc3RhbGxlcixcbiAgICBzaG91bGRUaHJvd09uU2lsZW50QXNhckZhbGxiYWNrOiBvcHRpb25zPy5zaG91bGRUaHJvd09uU2lsZW50QXNhckZhbGxiYWNrLFxuICAgIHNob3VsZFdhcm5PbkNvbXBhdGliaWxpdHlJc3N1ZXM6IG9wdGlvbnM/LnNob3VsZFdhcm5PbkNvbXBhdGliaWxpdHlJc3N1ZXMsXG4gICAgdHlwZTogJ29ic2lkaWFuLWNkcCdcbiAgfSk7XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIENEUCBob3N0L3BvcnQgZm9yIHRoZSBjb25uZWN0aW9uOiBmcm9tIHRoZSBvd25lZCBpbnN0YW5jZSdzXG4gKiBsYXVuY2hlZCBlbmRwb2ludCB3aGVuIHByZXNlbnQsIG90aGVyd2lzZSBmcm9tIHRoZSBhdHRhY2ggb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3J0IC0gVGhlIHRyYW5zcG9ydCBjcmVhdGVkIGZvciB0aGlzIGNvbm5lY3Rpb24uXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBjb25uZWN0aW9uIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgcmVzb2x2ZWQgaG9zdCBhbmQgcG9ydC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHBvcnQgY2Fubm90IGJlIGRldGVybWluZWQuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVFbmRwb2ludCh0cmFuc3BvcnQ6IHVua25vd24sIG9wdGlvbnM6IENvbm5lY3RUb0NkcE9wdGlvbnMgfCB1bmRlZmluZWQpOiBSZXNvbHZlZEVuZHBvaW50IHtcbiAgaWYgKHRyYW5zcG9ydCBpbnN0YW5jZW9mIERlc2t0b3BDZHBUcmFuc3BvcnQpIHtcbiAgICBjb25zdCBlbmRwb2ludCA9IHRyYW5zcG9ydC5nZXRPd25lZEluc3RhbmNlRW5kcG9pbnQoKTtcbiAgICBpZiAoZW5kcG9pbnQpIHtcbiAgICAgIHJldHVybiB7IGhvc3Q6IGVuZHBvaW50Lmhvc3QsIHBvcnQ6IGVuZHBvaW50LnBvcnQgfTtcbiAgICB9XG4gIH1cblxuICBpZiAob3B0aW9ucz8ucG9ydCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHsgaG9zdDogb3B0aW9ucy5ob3N0ID8/IERFRkFVTFRfQ0RQX0hPU1QsIHBvcnQ6IG9wdGlvbnMucG9ydCB9O1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKCdjb25uZWN0VG9DZHA6IGNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIENEUCBwb3J0LicpO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGhvc3Qtc2lkZSB0ZW1wIGRpcmVjdG9yaWVzIGVhcmxpZXIgcnVucyBsZWFrZWQsIGJlZm9yZSB0aGlzXG4gKiBjb25uZWN0aW9uIGFkZHMgaXRzIG93bi5cbiAqXG4gKiBgY29ubmVjdFRvQ2RwYCBtaW50cyB0aGUgc2FtZSBgdGVtcC12YXVsdC0qYCAvIG93bmVkIGB1c2VyZGF0YS0qYCBkaXJlY3Rvcmllc1xuICogdGhlIHRlc3QgZ2xvYmFsIHNldHVwIGRvZXMsIGFuZCBhbiBhZC1ob2MgZGVidWdnaW5nIHNlc3Npb24gaXMgZXhhY3RseSB0aGVcbiAqIGtpbmQgdGhhdCBnZXRzIGtpbGxlZCB3aXRoIGEgbGVmdG92ZXIgYmVoaW5kIFx1MjAxNCBzbyBpdCBzd2VlcHMgdG9vLiBBZ2UtZ2F0ZWQgYW5kXG4gKiBiZXN0LWVmZm9ydDsgc2VlIHRoZSBjb3JlJ3MgYHN3ZWVwTGVmdG92ZXJzYC5cbiAqXG4gKiBAcGFyYW0gdHJhbnNwb3J0T3B0aW9ucyAtIFRoZSByZXNvbHZlZCB0cmFuc3BvcnQgb3B0aW9ucyAoc291cmNlIG9mIHRoZSBzd2VlcCBrbm9icykuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHN3ZWVwTGVmdG92ZXJzKHRyYW5zcG9ydE9wdGlvbnM6IE9ic2lkaWFuQ2RwVHJhbnNwb3J0T3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIXdpbGxTd2VlcExlZnRvdmVycyh0cmFuc3BvcnRPcHRpb25zKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgc3dlZXBIb3N0TGVmdG92ZXJzKHtcbiAgICAgIG1heEFnZUluTWlsbGlzZWNvbmRzOiByZXNvbHZlTGVmdG92ZXJNYXhBZ2VJbk1pbGxpc2Vjb25kcyh0cmFuc3BvcnRPcHRpb25zKVxuICAgIH0pO1xuICAgIGlmIChyZXN1bHQucmVtb3ZlZENvdW50ID4gMCB8fCByZXN1bHQuZmFpbGVkQ291bnQgPiAwKSB7XG4gICAgICBsb2coXG4gICAgICAgIGBbY29ubmVjdC10by1jZHBdIFN3ZXB0ICR7U3RyaW5nKHJlc3VsdC5yZW1vdmVkQ291bnQpfSBsZWZ0b3ZlciB0ZW1wIGRpcmVjdG9yKGllcykgZnJvbSBlYXJsaWVyIHJ1bnMgYFxuICAgICAgICAgICsgYCgke1N0cmluZyhyZXN1bHQuZmFpbGVkQ291bnQpfSBzdGlsbCBpbiB1c2UpLmBcbiAgICAgICk7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIGxvZyhgW2Nvbm5lY3QtdG8tY2RwXSBMZWZ0b3ZlciBzd2VlcCBlcnJvciAobm9uLWZhdGFsKTogJHtTdHJpbmcoZXJyb3IpfWApO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiQUE0QkEsU0FBUyxzQkFBc0I7QUFDL0IsU0FBUyxpQ0FBaUM7QUFDMUM7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxXQUFXO0FBQ3BCLFNBQVMsbUNBQW1DO0FBQzVDLFNBQVMsc0JBQXNCO0FBQy9CLFNBQVMsMkJBQTJCO0FBQ3BDLFNBQVMsa0NBQWtDO0FBQzNDLFNBQVMsbUNBQW1DO0FBRTVDLE1BQU0sbUJBQW1CO0FBOFJ6QixlQUFzQixhQUFhLFNBQXVEO0FBQ3hGLFFBQU0sbUJBQW1CLHlCQUF5QixPQUFPO0FBQ3pELFFBQU0sZUFBZSxnQkFBZ0I7QUFDckMsUUFBTSxZQUFZLE1BQU0sMkJBQTJCLGdCQUFnQjtBQUNuRSxRQUFNLDZCQUE2QixTQUFTLDhCQUErQixTQUFTLFVBQVU7QUFDOUYsUUFBTSxRQUFRLElBQUksZUFBZSxTQUFTLE9BQU8sRUFBRSxnQ0FBZ0MsMkJBQTJCLENBQUM7QUFNL0csTUFBSSxTQUFTLFVBQVUsUUFBVztBQUNoQyxVQUFNLDBCQUEwQjtBQUFBLE1BQzlCLGlCQUFpQiw0QkFBNEIsZ0JBQWdCO0FBQUEsTUFDN0QsT0FBTyxpQkFBaUI7QUFBQSxNQUN4QixXQUFXLE1BQU07QUFBQSxJQUNuQixDQUFDO0FBQUEsRUFDSDtBQUtBLFFBQU0sTUFBTSxTQUFTLFNBQVM7QUFFOUIsUUFBTSxFQUFFLE1BQU0sS0FBSyxJQUFJLGdCQUFnQixXQUFXLE9BQU87QUFDekQsUUFBTSxTQUFTLFVBQVUsSUFBSSxJQUFJLE9BQU8sSUFBSSxDQUFDO0FBQzdDLFFBQU0sZUFBZSxxQkFBcUIsc0JBQXNCLFVBQVUsZ0JBQWdCLElBQUk7QUFDOUYsUUFBTSxnQkFBZ0IscUJBQXFCLHNCQUFzQixVQUFVLGlCQUFpQixJQUFJO0FBQ2hHLFFBQU0sd0JBQXdCLHFCQUFxQixzQkFBc0IsVUFBVSx5QkFBeUIsSUFBSTtBQUVoSCxRQUFNLGFBQTRCO0FBQUEsSUFDaEM7QUFBQSxJQUNBLEdBQUksZ0JBQWdCLEVBQUUsYUFBYTtBQUFBLElBQ25DLEdBQUksaUJBQWlCLEVBQUUsY0FBYztBQUFBLElBQ3JDLEdBQUkseUJBQXlCLEVBQUUsc0JBQXNCO0FBQUEsSUFFckQsTUFBTSxrQkFBa0IsUUFBc0U7QUFJNUYsVUFBSSxDQUFDLFVBQVUsbUJBQW1CO0FBQ2hDLGNBQU0sSUFBSSxNQUFNLDBEQUEwRDtBQUFBLE1BQzVFO0FBRUEsYUFBTyxVQUFVLGtCQUFrQixFQUFFLEdBQUcsUUFBUSxLQUFLLE1BQU0sS0FBSyxDQUFDO0FBQUEsSUFDbkU7QUFBQSxJQUVBLE1BQU0sVUFBeUI7QUFDN0IsVUFBSTtBQUlGLGNBQU0sTUFBTSxRQUFRLFNBQVM7QUFBQSxNQUMvQixVQUFFO0FBQ0EsY0FBTSxVQUFVLFVBQVU7QUFBQSxNQUM1QjtBQUFBLElBQ0Y7QUFBQSxJQUVBLE1BQU0sZUFDSixRQUNpQjtBQUNqQixhQUFPLGVBQTBDLEVBQUUsR0FBRyxRQUFRLFdBQVcsV0FBVyxNQUFNLEtBQUssQ0FBQztBQUFBLElBQ2xHO0FBQUEsSUFFQSxNQUFNLE9BQU8sWUFBcUM7QUFDaEQsYUFBTyxVQUFVLFNBQVMsWUFBWSxFQUFFLEtBQUssTUFBTSxLQUFLLENBQUM7QUFBQSxJQUMzRDtBQUFBLElBRUE7QUFBQSxJQUVBLE9BQU8sT0FBTyxZQUFZLElBQW1CO0FBQzNDLFlBQU0sV0FBVyxRQUFRO0FBQUEsSUFDM0I7QUFBQSxJQUVBO0FBQUEsRUFDRjtBQUVBLFNBQU87QUFDVDtBQVlBLFNBQVMseUJBQXlCLFNBQTREO0FBQzVGLFNBQU8sNEJBQXlEO0FBQUEsSUFDOUQsOEJBQThCLFNBQVM7QUFBQSxJQUN2QyxpQkFBaUIsU0FBUztBQUFBLElBQzFCLDZCQUE2QixTQUFTO0FBQUEsSUFDdEMsTUFBTSxTQUFTO0FBQUEsSUFDZixzQkFBc0IsU0FBUyx3QkFBd0I7QUFBQSxJQUN2RCwwQkFBMEIsU0FBUztBQUFBLElBQ25DLGlCQUFpQixTQUFTO0FBQUEsSUFDMUIsTUFBTSxTQUFTO0FBQUEsSUFDZixzQkFBc0IsU0FBUztBQUFBLElBQy9CLG9DQUFvQyxTQUFTO0FBQUEsSUFDN0MsaUNBQWlDLFNBQVM7QUFBQSxJQUMxQyxpQ0FBaUMsU0FBUztBQUFBLElBQzFDLE1BQU07QUFBQSxFQUNSLENBQUM7QUFDSDtBQVdBLFNBQVMsZ0JBQWdCLFdBQW9CLFNBQTREO0FBQ3ZHLE1BQUkscUJBQXFCLHFCQUFxQjtBQUM1QyxVQUFNLFdBQVcsVUFBVSx5QkFBeUI7QUFDcEQsUUFBSSxVQUFVO0FBQ1osYUFBTyxFQUFFLE1BQU0sU0FBUyxNQUFNLE1BQU0sU0FBUyxLQUFLO0FBQUEsSUFDcEQ7QUFBQSxFQUNGO0FBRUEsTUFBSSxTQUFTLFNBQVMsUUFBVztBQUMvQixXQUFPLEVBQUUsTUFBTSxRQUFRLFFBQVEsa0JBQWtCLE1BQU0sUUFBUSxLQUFLO0FBQUEsRUFDdEU7QUFFQSxRQUFNLElBQUksTUFBTSxpREFBaUQ7QUFDbkU7QUFhQSxlQUFlLGVBQWUsa0JBQThEO0FBQzFGLE1BQUksQ0FBQyxtQkFBbUIsZ0JBQWdCLEdBQUc7QUFDekM7QUFBQSxFQUNGO0FBRUEsTUFBSTtBQUNGLFVBQU0sU0FBUyxNQUFNLG1CQUFtQjtBQUFBLE1BQ3RDLHNCQUFzQixvQ0FBb0MsZ0JBQWdCO0FBQUEsSUFDNUUsQ0FBQztBQUNELFFBQUksT0FBTyxlQUFlLEtBQUssT0FBTyxjQUFjLEdBQUc7QUFDckQ7QUFBQSxRQUNFLDBCQUEwQixPQUFPLE9BQU8sWUFBWSxDQUFDLG1EQUM3QyxPQUFPLE9BQU8sV0FBVyxDQUFDO0FBQUEsTUFDcEM7QUFBQSxJQUNGO0FBQUEsRUFDRixTQUFTLE9BQWdCO0FBQ3ZCLFFBQUksc0RBQXNELE9BQU8sS0FBSyxDQUFDLEVBQUU7QUFBQSxFQUMzRTtBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
@@ -66,6 +66,14 @@ export interface BootstrapDemoVaultPluginsResult {
66
66
  */
67
67
  readonly skippedPluginIds: readonly string[];
68
68
  }
69
+ /**
70
+ * Parameters for {@link buildDemoVaultPopulateAsync} — the same bag {@link buildDemoVaultPopulate} takes,
71
+ * under the name the asynchronous builder derives.
72
+ *
73
+ * One declaration serves both builders. It keeps the synchronous builder's name, and this alias gives the
74
+ * asynchronous one its own, so neither has to be spelled after the other.
75
+ */
76
+ export type BuildDemoVaultPopulateAsyncParams = BuildDemoVaultPopulateParams;
69
77
  /**
70
78
  * One plugin installed by {@link bootstrapDemoVaultPlugins}.
71
79
  */
@@ -108,7 +116,7 @@ export declare function bootstrapDemoVaultPlugins(params: BootstrapDemoVaultPlug
108
116
  * Use this from a global setup's `populate` thunk — both the Vitest and Jest adapters accept a thunk
109
117
  * returning a promise — so a fresh clone, a new machine, or CI needs no manual install step.
110
118
  *
111
- * @param params - The same `BuildDemoVaultPopulateParams` the synchronous builder takes.
119
+ * @param params - The same bag the synchronous builder takes, as {@link BuildDemoVaultPopulateAsyncParams}.
112
120
  * @returns The populate map, ready to hand to a global setup's `populate` or `TemporaryVault.populate`.
113
121
  */
114
- export declare function buildDemoVaultPopulateAsync(params: BuildDemoVaultPopulateParams): Promise<PopulateFilesParams>;
122
+ export declare function buildDemoVaultPopulateAsync(params: BuildDemoVaultPopulateAsyncParams): Promise<PopulateFilesParams>;
@@ -124,4 +124,4 @@ export {
124
124
  bootstrapDemoVaultPlugins,
125
125
  buildDemoVaultPopulateAsync
126
126
  };
127
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlbW8tdmF1bHQtYm9vdHN0cmFwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSW5zdGFsbHMgYSBkZW1vIHZhdWx0J3MgKippbmplY3RlZCBjb21tdW5pdHkgcGx1Z2lucyoqIGhlYWRsZXNzbHksIGJ5IGRvd25sb2FkaW5nXG4gKiB0aGVpciBwdWJsaXNoZWQgR2l0SHViIHJlbGVhc2UgYXNzZXRzIHN0cmFpZ2h0IGludG9cbiAqIGBkZW1vLXZhdWx0Ly5vYnNpZGlhbi9wbHVnaW5zLzxpZD4vYC5cbiAqXG4gKiBgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZWAgcmVxdWlyZXMgZWFjaCBpbmplY3RlZCBwbHVnaW4ncyBgbWFpbi5qc2AgL1xuICogYG1hbmlmZXN0Lmpzb25gIHRvIGFscmVhZHkgYmUgb24gZGlzaywgYW5kIHRocm93cyB3aGVuIHRoZXkgYXJlIG5vdC4gVW50aWwgdGhpc1xuICogbW9kdWxlIGV4aXN0ZWQgdGhlIG9ubHkgZG9jdW1lbnRlZCByZW1lZHkgd2FzIGEgKipHVUkgc3RlcCoqIFx1MjAxNCBvcGVuIGBkZW1vLXZhdWx0L2BcbiAqIGluIE9ic2lkaWFuIG9uY2UgYW5kIGxldCBgZGVtby12YXVsdC1oZWxwZXJgIGluc3RhbGwgdGhlIHBsdWdpbiBhdCBydW50aW1lLlxuICogYC5vYnNpZGlhbi9wbHVnaW5zLypgIGlzIGdpdGlnbm9yZWQgaW4gYSBwbHVnaW4gcmVwbywgc28gdGhhdCBzdGF0ZVxuICogZXhpc3RzIG9uIGV4YWN0bHkgdGhlIG9uZSBtYWNoaW5lIHRoYXQgZGlkIGl0IGFuZCBpcyBpbnZpc2libGUgdG8gYSBmcmVzaCBjbG9uZSxcbiAqIGEgbmV3IG1hY2hpbmUsIG9yIENJLiBTaW5jZSBhIHBsdWdpbiByZXBvJ3MgcmVsZWFzZSBwcmVmbGlnaHQgcnVucyBpdHNcbiAqIGludGVncmF0aW9uIHRlc3RzLCB0aGF0IG1hZGUgKmN1dHRpbmcgYSByZWxlYXNlIGZyb20gYSBjbGVhbiBjbG9uZSogaW1wb3NzaWJsZVxuICogd2l0aG91dCBhIGh1bWFuIG9wZW5pbmcgYSBHVUkuXG4gKlxuICogRG93bmxvYWRpbmcgdGhlIHJlbGVhc2UgYXNzZXRzIGlzIHRoZSBleGFjdCBoZWFkbGVzcyBlcXVpdmFsZW50OiB0aGUgcmVzdWx0aW5nXG4gKiBmb2xkZXIgaXMgd2hhdCBPYnNpZGlhbiBpdHNlbGYgd291bGQgaGF2ZSBpbnN0YWxsZWQsIHNvIHRoZSBzaGlwcGVkXG4gKiBgKi1kZW1vLXZhdWx0LnppcGAgXHUyMDE0IHdoaWNoIHVuemlwcyBpbnRvIGEgc2luZ2xlIGAqLWRlbW8tdmF1bHQtPHZlcnNpb24+YCBmb2xkZXIgXHUyMDE0XG4gKiBzdGF5cyB0aGUgc3RhbmRhcmQgZGVtby12YXVsdCBhcnRpZmFjdC5cbiAqXG4gKiBUd28gZW50cnkgcG9pbnRzLCBwbHVzIHRoZSBgYm9vdHN0cmFwLWRlbW8tdmF1bHRgIENMSSBzdWJjb21tYW5kOlxuICpcbiAqIC0ge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnN9IFx1MjAxNCBpbnN0YWxsIHRoZSBtaXNzaW5nIG9uZXMsIGV4cGxpY2l0bHkuXG4gKiAtIHtAbGluayBidWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmN9IFx1MjAxNCBkbyB0aGF0IGFuZCB0aGVuIGJ1aWxkIHRoZSBwb3B1bGF0ZSBtYXAsXG4gKiAgIHNvIGEgZ2xvYmFsIHNldHVwIHNlbGYtaGVhbHMgd2l0aCBubyBtYW51YWwgc3RlcCBhdCBhbGwuXG4gKlxuICogVGhlIHN5bmMgYGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVgIGRlbGliZXJhdGVseSBrZWVwcyB0aHJvd2luZzogYGZldGNoYCBoYXMgbm9cbiAqIHN5bmNocm9ub3VzIGZvcm0sIHNvIGF1dG8taGVhbGluZyBjYW4gb25seSBsaXZlIG9uIGFuIGFzeW5jIHNpYmxpbmcuIEl0cyBtZXNzYWdlXG4gKiBub3cgbmFtZXMgYm90aCByZW1lZGllcyBhYm92ZSBpbnN0ZWFkIG9mIHRoZSBHVUkgc3RlcC5cbiAqL1xuXG5pbXBvcnQge1xuICBta2RpclN5bmMsXG4gIHdyaXRlRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHsgQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnlFbnRyeSB9IGZyb20gJy4vY29tbXVuaXR5LXBsdWdpbi1yZWdpc3RyeS5tanMnO1xuaW1wb3J0IHR5cGUge1xuICBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zLFxuICBJbmplY3RQbHVnaW5QYXJhbXNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLm1qcyc7XG5pbXBvcnQgdHlwZSB7IFBvcHVsYXRlRmlsZXNQYXJhbXMgfSBmcm9tICcuL3RlbXBvcmFyeS12YXVsdC5tanMnO1xuXG5pbXBvcnQge1xuICBidWlsZFBsdWdpbkFzc2V0VXJsLFxuICBDT01NVU5JVFlfUExVR0lOU19SRUdJU1RSWV9VUkwsXG4gIGlzVmFsaWRSZXBvUmVmZXJlbmNlLFxuICBPUFRJT05BTF9QTFVHSU5fQVNTRVRfTkFNRVMsXG4gIFJFUVVJUkVEX1BMVUdJTl9BU1NFVF9OQU1FUyxcbiAgc2VsZWN0UGx1Z2luUmVwb1xufSBmcm9tICcuL2NvbW11bml0eS1wbHVnaW4tcmVnaXN0cnkubWpzJztcbmltcG9ydCB7XG4gIGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGUsXG4gIHJlc29sdmVJbmplY3RlZFBsdWdpblNvdXJjZURpcmVjdG9yeSxcbiAgcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLm1qcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5tanMnO1xuXG4vKipcbiAqIEJyb3dzZXIgYFVzZXItQWdlbnRgIGZvciB0aGUgYXNzZXQgZG93bmxvYWRzLCBtYXRjaGluZyBgb2JzaWRpYW4taW5zdGFsbGVyLnRzYCBcdTIwMTRcbiAqIGEgcGxhaW4gTm9kZSBmZXRjaCBpcyByZWplY3RlZCBieSBzb21lIENETiBlZGdlcy5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI0LjAuMC4wIFNhZmFyaS81MzcuMzYnO1xuXG5jb25zdCBIVFRQX05PVF9GT1VORCA9IDQwNDtcblxuLyoqXG4gKiBUaGUgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeSwgZmV0Y2hlZCBhdCBtb3N0IG9uY2UgcGVyIHByb2Nlc3MuIEV2ZXJ5IGluamVjdGVkXG4gKiBwbHVnaW4gb2YgZXZlcnkgZGVtby12YXVsdCBwcm9qZWN0IGluIGEgcnVuIHJlc29sdmVzIGFnYWluc3QgdGhlIHNhbWUgdGFibGUsIGFuZFxuICogaXQgaXMgYSBtdWx0aS1tZWdhYnl0ZSBkb2N1bWVudC5cbiAqL1xubGV0IHJlZ2lzdHJ5UHJvbWlzZTogUHJvbWlzZTxyZWFkb25seSBDb21tdW5pdHlQbHVnaW5SZWdpc3RyeUVudHJ5W10+IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCb290c3RyYXBEZW1vVmF1bHRQbHVnaW5zUGFyYW1zIHtcbiAgLyoqXG4gIEFic29sdXRlIHBhdGggdG8gdGhlIHBsdWdpbiByZXBvJ3MgYGRlbW8tdmF1bHQvYCBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBkZW1vVmF1bHRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmplY3RlZCBwbHVnaW5zIHRvIGluc3RhbGwgXHUyMDE0IHRoZSBzYW1lIGxpc3QgcGFzc2VkIHRvIGBidWlsZERlbW9WYXVsdFBvcHVsYXRlYC4gUGx1Z2lucyB3aG9zZVxuICAgKiBiaW5hcmllcyBhcmUgYWxyZWFkeSBwcmVzZW50IGFyZSBza2lwcGVkICh1bmxlc3Mge0BsaW5rIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNQYXJhbXMuc2hvdWxkRm9yY2V9KSxcbiAgICogYXMgYXJlIHBsdWdpbnMgY2FycnlpbmcgYW4gZXhwbGljaXQgYHNvdXJjZURpcmVjdG9yeWAuXG4gICAqL1xuICByZWFkb25seSBpbmplY3RQbHVnaW5zOiByZWFkb25seSBJbmplY3RQbHVnaW5QYXJhbXNbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZS1kb3dubG9hZCBwbHVnaW5zIHRoYXQgYXJlIGFscmVhZHkgaW5zdGFsbGVkLCByZXBsYWNpbmcgdGhlbSB3aXRoIHRoZSBjdXJyZW50IHJlbGVhc2UuXG4gICAqIERlZmF1bHRzIHRvIGBmYWxzZWAgXHUyMDE0IHRoZSBub3JtYWwgcGF0aCBpbnN0YWxscyBvbmx5IHdoYXQgaXMgbWlzc2luZywgc28gYSB3YXJtIGNoZWNrb3V0IGRvZXMgbm9cbiAgICogbmV0d29yayBJL08gYXQgYWxsLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRm9yY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSBvdXRjb21lIG9mIGEge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnN9IHJ1bi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCb290c3RyYXBEZW1vVmF1bHRQbHVnaW5zUmVzdWx0IHtcbiAgLyoqXG4gIFRoZSBwbHVnaW5zIHRoYXQgd2VyZSBkb3dubG9hZGVkIGFuZCB3cml0dGVuLCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGluc3RhbGxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbGxlZDogcmVhZG9ubHkgSW5zdGFsbGVkUGx1Z2luSW5mb1tdO1xuXG4gIC8qKlxuICBUaGUgaWRzIG9mIHBsdWdpbnMgbGVmdCB1bnRvdWNoZWQgXHUyMDE0IGFscmVhZHkgaW5zdGFsbGVkLCBvciBvcHRlZCBvdXQgdmlhIGFuIGV4cGxpY2l0IGBzb3VyY2VEaXJlY3RvcnlgLlxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcHBlZFBsdWdpbklkczogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8qKlxuICogT25lIHBsdWdpbiBpbnN0YWxsZWQgYnkge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnN9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluc3RhbGxlZFBsdWdpbkluZm8ge1xuICAvKipcbiAgVGhlIGFzc2V0IGZpbGUgbmFtZXMgYWN0dWFsbHkgd3JpdHRlbiwgZS5nLiBgWydtYWluLmpzJywgJ21hbmlmZXN0Lmpzb24nLCAnc3R5bGVzLmNzcyddYC5cbiAgICovXG4gIHJlYWRvbmx5IGFzc2V0TmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICBUaGUgcGx1Z2luJ3MgaWQuXG4gICAqL1xuICByZWFkb25seSBwbHVnaW5JZDogc3RyaW5nO1xuXG4gIC8qKlxuICBUaGUgR2l0SHViIHJlcG9zaXRvcnkgdGhlIGFzc2V0cyBjYW1lIGZyb20sIGFzIGBvd25lci9uYW1lYC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG86IHN0cmluZztcblxuICAvKipcbiAgVGhlIHJlbGVhc2UgdGFnIGRvd25sb2FkZWQgZnJvbSwgb3IgYHVuZGVmaW5lZGAgd2hlbiB0aGUgcmVwb3NpdG9yeSdzIGxhdGVzdCByZWxlYXNlIHdhcyB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEluc3RhbGxzIGV2ZXJ5IGluamVjdGVkIGNvbW11bml0eSBwbHVnaW4gd2hvc2UgYnVpbHQgZmlsZXMgYXJlIG1pc3NpbmcgZnJvbSB0aGUgZGVtbyB2YXVsdCwgYnlcbiAqIGRvd25sb2FkaW5nIGl0cyBwdWJsaXNoZWQgcmVsZWFzZSBhc3NldHMgaW50byBgZGVtby12YXVsdC8ub2JzaWRpYW4vcGx1Z2lucy88aWQ+L2AuXG4gKlxuICogRWFjaCBwbHVnaW4ncyByZXBvc2l0b3J5IGNvbWVzIGZyb20gaXRzIHtAbGluayBJbmplY3RQbHVnaW5QYXJhbXMucmVwb30gd2hlbiBnaXZlbiwgb3RoZXJ3aXNlIGZyb21cbiAqIE9ic2lkaWFuJ3Mgb3duIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkgXHUyMDE0IHRoZSBzYW1lIGBpZGAgXHUyMTkyIGByZXBvYCB0YWJsZSB0aGUgaW4tYXBwIGNvbW11bml0eSBicm93c2VyXG4gKiBpbnN0YWxscyBmcm9tLCBzbyBubyBwbHVnaW4tc3BlY2lmaWMgbWFwcGluZyBpcyBoYXJkY29kZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSB7QGxpbmsgQm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc1BhcmFtc30uXG4gKiBAcmV0dXJucyBXaGF0IHdhcyBpbnN0YWxsZWQgYW5kIHdoYXQgd2FzIHNraXBwZWQuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGEgcGx1Z2luJ3MgcmVwb3NpdG9yeSBjYW5ub3QgYmUgcmVzb2x2ZWQsIG9yIGEgcmVxdWlyZWQgYXNzZXQgY2Fubm90IGJlIGRvd25sb2FkZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zKHBhcmFtczogQm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc1BhcmFtcyk6IFByb21pc2U8Qm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc1Jlc3VsdD4ge1xuICBjb25zdCB7IGRlbW9WYXVsdFBhdGgsIGluamVjdFBsdWdpbnMsIHNob3VsZEZvcmNlID0gZmFsc2UgfSA9IHBhcmFtcztcblxuICBjb25zdCBib290c3RyYXBwYWJsZSA9IGluamVjdFBsdWdpbnMuZmlsdGVyKChwbHVnaW4pID0+IHBsdWdpbi5zb3VyY2VEaXJlY3RvcnkgPT09IHVuZGVmaW5lZCk7XG4gIGNvbnN0IHRhcmdldHMgPSBzaG91bGRGb3JjZSA/IGJvb3RzdHJhcHBhYmxlIDogcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnMoeyBkZW1vVmF1bHRQYXRoLCBpbmplY3RQbHVnaW5zIH0pO1xuICBjb25zdCB0YXJnZXRQbHVnaW5JZHMgPSBuZXcgU2V0KHRhcmdldHMubWFwKChwbHVnaW4pID0+IHBsdWdpbi5wbHVnaW5JZCkpO1xuXG4gIGNvbnN0IGluc3RhbGxlZDogSW5zdGFsbGVkUGx1Z2luSW5mb1tdID0gW107XG4gIGZvciAoY29uc3QgcGx1Z2luIG9mIHRhcmdldHMpIHtcbiAgICAvLyBTZXF1ZW50aWFsIG9uIHB1cnBvc2U6IHRoZSBpbnN0YWxscyBzaGFyZSBvbmUgbWVtb2lzZWQgcmVnaXN0cnkgZmV0Y2guXG4gICAgLy8gUGFyYWxsZWxpc20gd291bGQgYnV5IG5vdGhpbmcgYnV0IGludGVybGVhdmVkIGxvZ3MgZm9yIHRoZSBoYW5kZnVsIG9mIHBsdWdpbnMgYSBkZW1vIHZhdWx0IGluamVjdHMuXG4gICAgaW5zdGFsbGVkLnB1c2goYXdhaXQgaW5zdGFsbFBsdWdpbihkZW1vVmF1bHRQYXRoLCBwbHVnaW4pKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaW5zdGFsbGVkLFxuICAgIHNraXBwZWRQbHVnaW5JZHM6IGluamVjdFBsdWdpbnMubWFwKChwbHVnaW4pID0+IHBsdWdpbi5wbHVnaW5JZCkuZmlsdGVyKChwbHVnaW5JZCkgPT4gIXRhcmdldFBsdWdpbklkcy5oYXMocGx1Z2luSWQpKVxuICB9O1xufVxuXG4vKipcbiAqIFRoZSBzZWxmLWhlYWxpbmcgY291bnRlcnBhcnQgb2YgYGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVgOiBpbnN0YWxscyBhbnkgaW5qZWN0ZWQgY29tbXVuaXR5IHBsdWdpbiB3aG9zZVxuICogYmluYXJpZXMgYXJlIG1pc3NpbmcgKHNlZSB7QGxpbmsgYm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2luc30pLCB0aGVuIGJ1aWxkcyB0aGUgcG9wdWxhdGUgbWFwIGV4YWN0bHkgYXMgdGhlXG4gKiBzeW5jaHJvbm91cyBidWlsZGVyIGRvZXMuXG4gKlxuICogVXNlIHRoaXMgZnJvbSBhIGdsb2JhbCBzZXR1cCdzIGBwb3B1bGF0ZWAgdGh1bmsgXHUyMDE0IGJvdGggdGhlIFZpdGVzdCBhbmQgSmVzdCBhZGFwdGVycyBhY2NlcHQgYSB0aHVua1xuICogcmV0dXJuaW5nIGEgcHJvbWlzZSBcdTIwMTQgc28gYSBmcmVzaCBjbG9uZSwgYSBuZXcgbWFjaGluZSwgb3IgQ0kgbmVlZHMgbm8gbWFudWFsIGluc3RhbGwgc3RlcC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHNhbWUgYEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVQYXJhbXNgIHRoZSBzeW5jaHJvbm91cyBidWlsZGVyIHRha2VzLlxuICogQHJldHVybnMgVGhlIHBvcHVsYXRlIG1hcCwgcmVhZHkgdG8gaGFuZCB0byBhIGdsb2JhbCBzZXR1cCdzIGBwb3B1bGF0ZWAgb3IgYFRlbXBvcmFyeVZhdWx0LnBvcHVsYXRlYC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi11dGlscy9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoIC0tIFRlbXBvcmFyeTogYEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVQYXJhbXNgIGlzIHJlLWV4cG9ydGVkIGZyb20gYGluZGV4LnRzYCwgc28gcmVuYW1pbmcgaXQgdG8gYEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY1BhcmFtc2AgaXMgYSBicmVha2luZyBjaGFuZ2UgaGVsZCBmb3IgdGhlIG5leHQgbWFqb3IuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGREZW1vVmF1bHRQb3B1bGF0ZUFzeW5jKHBhcmFtczogQnVpbGREZW1vVmF1bHRQb3B1bGF0ZVBhcmFtcyk6IFByb21pc2U8UG9wdWxhdGVGaWxlc1BhcmFtcz4ge1xuICBpZiAocGFyYW1zLmluamVjdFBsdWdpbnMgIT09IHVuZGVmaW5lZCkge1xuICAgIGF3YWl0IGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnMoeyBkZW1vVmF1bHRQYXRoOiBwYXJhbXMuZGVtb1ZhdWx0UGF0aCwgaW5qZWN0UGx1Z2luczogcGFyYW1zLmluamVjdFBsdWdpbnMgfSk7XG4gIH1cblxuICByZXR1cm4gYnVpbGREZW1vVmF1bHRQb3B1bGF0ZShwYXJhbXMpO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gTmV0d29yayBkb3dubG9hZCBnbHVlLCBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHJlcXVlc3QgaGVhZGVycyBmb3IgYSBHaXRIdWIgZG93bmxvYWQsIHNlbmRpbmcgYSBgR0lUSFVCX1RPS0VOYCAvIGBHSF9UT0tFTmAgYmVhcmVyIHdoZW4gb25lXG4gKiBpcyBpbiB0aGUgZW52aXJvbm1lbnQgXHUyMDE0IHdpdGhvdXQgaXQgdGhlIGFub255bW91cyBxdW90YSByZXR1cm5zIEhUVFAgNDAzIG9uIHNoYXJlZCBDSSBydW5uZXIgSVBzLlxuICpcbiAqIEByZXR1cm5zIFRoZSBoZWFkZXJzIHRvIHNlbmQuXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkR2l0SHViSGVhZGVycygpOiBIZWFkZXJzIHtcbiAgY29uc3QgaGVhZGVycyA9IG5ldyBIZWFkZXJzKHsgJ1VzZXItQWdlbnQnOiBET1dOTE9BRF9VU0VSX0FHRU5UIH0pO1xuICBjb25zdCB0b2tlbiA9IHByb2Nlc3MuZW52WydHSVRIVUJfVE9LRU4nXSA/PyBwcm9jZXNzLmVudlsnR0hfVE9LRU4nXTtcbiAgaWYgKHRva2VuKSB7XG4gICAgaGVhZGVycy5zZXQoJ0F1dGhvcml6YXRpb24nLCBgQmVhcmVyICR7dG9rZW59YCk7XG4gIH1cbiAgcmV0dXJuIGhlYWRlcnM7XG59XG5cbi8qKlxuICogRG93bmxvYWRzIG9uZSByZWxlYXNlIGFzc2V0LlxuICpcbiAqIEBwYXJhbSB1cmwgLSBUaGUgYXNzZXQncyBkb3dubG9hZCBVUkwuXG4gKiBAcGFyYW0gaXNSZXF1aXJlZCAtIFdoZXRoZXIgYSBtaXNzaW5nIGFzc2V0IChIVFRQIDQwNCkgaXMgYW4gZXJyb3IgcmF0aGVyIHRoYW4gYW4gYWJzZW50IG9wdGlvbmFsIGZpbGUuXG4gKiBAcmV0dXJucyBUaGUgYXNzZXQncyBieXRlcywgb3IgYHVuZGVmaW5lZGAgd2hlbiBhbiBvcHRpb25hbCBhc3NldCBpcyBub3QgcHVibGlzaGVkLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgZG93bmxvYWQgZmFpbHMgYW5kIHRoZSBhc3NldCBpcyByZXF1aXJlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZG93bmxvYWRBc3NldCh1cmw6IHN0cmluZywgaXNSZXF1aXJlZDogYm9vbGVhbik6IFByb21pc2U8QnVmZmVyIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IGhlYWRlcnM6IGJ1aWxkR2l0SHViSGVhZGVycygpIH0pO1xuICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgaWYgKCFpc1JlcXVpcmVkICYmIHJlc3BvbnNlLnN0YXR1cyA9PT0gSFRUUF9OT1RfRk9VTkQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGRvd25sb2FkICR7dXJsfTogSFRUUCAke1N0cmluZyhyZXNwb25zZS5zdGF0dXMpfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9YCk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5mcm9tKGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpO1xufVxuXG4vKipcbiAqIEZldGNoZXMgT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2luIHJlZ2lzdHJ5LCBtZW1vaXNlZCBmb3IgdGhlIGxpZmV0aW1lIG9mIHRoZSBwcm9jZXNzLlxuICpcbiAqIEByZXR1cm5zIFRoZSByZWdpc3RyeSByb3dzLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgcmVnaXN0cnkgY2Fubm90IGJlIGZldGNoZWQgb3IgcGFyc2VkLlxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaENvbW11bml0eVBsdWdpblJlZ2lzdHJ5KCk6IFByb21pc2U8cmVhZG9ubHkgQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnlFbnRyeVtdPiB7XG4gIHJlZ2lzdHJ5UHJvbWlzZSA/Pz0gKGFzeW5jICgpOiBQcm9taXNlPHJlYWRvbmx5IENvbW11bml0eVBsdWdpblJlZ2lzdHJ5RW50cnlbXT4gPT4ge1xuICAgIGxvZyhgW2RlbW8tdmF1bHQtYm9vdHN0cmFwXSBGZXRjaGluZyBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkgZnJvbSAke0NPTU1VTklUWV9QTFVHSU5TX1JFR0lTVFJZX1VSTH0uLi5gKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKENPTU1VTklUWV9QTFVHSU5TX1JFR0lTVFJZX1VSTCwgeyBoZWFkZXJzOiBidWlsZEdpdEh1YkhlYWRlcnMoKSB9KTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBGYWlsZWQgdG8gZmV0Y2ggT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2luIHJlZ2lzdHJ5ICgke0NPTU1VTklUWV9QTFVHSU5TX1JFR0lTVFJZX1VSTH0pOiBgXG4gICAgICAgICAgKyBgSFRUUCAke1N0cmluZyhyZXNwb25zZS5zdGF0dXMpfSAke3Jlc3BvbnNlLnN0YXR1c1RleHR9LiBgXG4gICAgICAgICAgKyAnUGFzcyBhbiBleHBsaWNpdCBgcmVwb2Agb24gdGhlIGluamVjdGVkIHBsdWdpbiB0byBza2lwIHRoZSByZWdpc3RyeSBsb29rdXAuJ1xuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyByZWFkb25seSBDb21tdW5pdHlQbHVnaW5SZWdpc3RyeUVudHJ5W107XG4gIH0pKCk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcmVnaXN0cnlQcm9taXNlO1xuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIC8vIERvIG5vdCBtZW1vaXNlIGEgZmFpbHVyZTogYSB0cmFuc2llbnQgbmV0d29yayBlcnJvciBtdXN0IG5vdCBwb2lzb24gZXZlcnkgbGF0ZXIgbG9va3VwLlxuICAgIHJlZ2lzdHJ5UHJvbWlzZSA9IHVuZGVmaW5lZDtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIERvd25sb2FkcyBvbmUgcGx1Z2luJ3MgcmVsZWFzZSBhc3NldHMgYW5kIHdyaXRlcyB0aGVtIGludG8gdGhlIGRlbW8gdmF1bHQuXG4gKlxuICogQHBhcmFtIGRlbW9WYXVsdFBhdGggLSBUaGUgZGVtbyB2YXVsdCByb290LlxuICogQHBhcmFtIHBsdWdpbiAtIFRoZSBwbHVnaW4gdG8gaW5zdGFsbC5cbiAqIEByZXR1cm5zIFdoYXQgd2FzIGluc3RhbGxlZC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHJlcG9zaXRvcnkgY2Fubm90IGJlIHJlc29sdmVkIG9yIGEgcmVxdWlyZWQgYXNzZXQgY2Fubm90IGJlIGRvd25sb2FkZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGluc3RhbGxQbHVnaW4oZGVtb1ZhdWx0UGF0aDogc3RyaW5nLCBwbHVnaW46IEluamVjdFBsdWdpblBhcmFtcyk6IFByb21pc2U8SW5zdGFsbGVkUGx1Z2luSW5mbz4ge1xuICBjb25zdCB7IHBsdWdpbklkLCB2ZXJzaW9uIH0gPSBwbHVnaW47XG4gIGNvbnN0IHJlcG8gPSBhd2FpdCByZXNvbHZlUGx1Z2luUmVwbyhwbHVnaW4pO1xuICBjb25zdCB0YXJnZXREaXJlY3RvcnkgPSByZXNvbHZlSW5qZWN0ZWRQbHVnaW5Tb3VyY2VEaXJlY3RvcnkoeyBkZW1vVmF1bHRQYXRoLCBwbHVnaW4gfSk7XG5cbiAgbG9nKGBbZGVtby12YXVsdC1ib290c3RyYXBdIEluc3RhbGxpbmcgXCIke3BsdWdpbklkfVwiIGZyb20gJHtyZXBvfUAke3ZlcnNpb24gPz8gJ2xhdGVzdCd9IGludG8gJHt0YXJnZXREaXJlY3Rvcnl9Li4uYCk7XG5cbiAgY29uc3QgZG93bmxvYWRzID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIC4uLlJFUVVJUkVEX1BMVUdJTl9BU1NFVF9OQU1FUy5tYXAoYXN5bmMgKGFzc2V0TmFtZSkgPT4gKHtcbiAgICAgIGFzc2V0TmFtZSxcbiAgICAgIGNvbnRlbnQ6IGF3YWl0IGRvd25sb2FkQXNzZXQoYnVpbGRQbHVnaW5Bc3NldFVybCh7IGFzc2V0TmFtZSwgcmVwbywgdmVyc2lvbiB9KSwgdHJ1ZSlcbiAgICB9KSksXG4gICAgLi4uT1BUSU9OQUxfUExVR0lOX0FTU0VUX05BTUVTLm1hcChhc3luYyAoYXNzZXROYW1lKSA9PiAoe1xuICAgICAgYXNzZXROYW1lLFxuICAgICAgY29udGVudDogYXdhaXQgZG93bmxvYWRBc3NldChidWlsZFBsdWdpbkFzc2V0VXJsKHsgYXNzZXROYW1lLCByZXBvLCB2ZXJzaW9uIH0pLCBmYWxzZSlcbiAgICB9KSlcbiAgXSk7XG5cbiAgbWtkaXJTeW5jKHRhcmdldERpcmVjdG9yeSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG5cbiAgY29uc3QgYXNzZXROYW1lczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCB7IGFzc2V0TmFtZSwgY29udGVudCB9IG9mIGRvd25sb2Fkcykge1xuICAgIGlmIChjb250ZW50ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICB3cml0ZUZpbGVTeW5jKGpvaW4odGFyZ2V0RGlyZWN0b3J5LCBhc3NldE5hbWUpLCBjb250ZW50KTtcbiAgICBhc3NldE5hbWVzLnB1c2goYXNzZXROYW1lKTtcbiAgfVxuXG4gIGxvZyhgW2RlbW8tdmF1bHQtYm9vdHN0cmFwXSBJbnN0YWxsZWQgXCIke3BsdWdpbklkfVwiOiAke2Fzc2V0TmFtZXMuam9pbignLCAnKX0uYCk7XG5cbiAgcmV0dXJuIHsgYXNzZXROYW1lcywgcGx1Z2luSWQsIHJlcG8sIHZlcnNpb24gfTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgR2l0SHViIHJlcG9zaXRvcnkgcHVibGlzaGluZyBhIHBsdWdpbiBcdTIwMTQgdGhlIGV4cGxpY2l0IG92ZXJyaWRlIHdoZW4gZ2l2ZW4sIG90aGVyd2lzZVxuICogT2JzaWRpYW4ncyBjb21tdW5pdHkgcGx1Z2luIHJlZ2lzdHJ5LlxuICpcbiAqIEBwYXJhbSBwbHVnaW4gLSBUaGUgcGx1Z2luIHRvIHJlc29sdmUuXG4gKiBAcmV0dXJucyBUaGUgYG93bmVyL25hbWVgIHJlcG9zaXRvcnkgcmVmZXJlbmNlLlxuICogQHRocm93cyBFcnJvciBpZiBhbiBleHBsaWNpdCBvdmVycmlkZSBpcyBtYWxmb3JtZWQsIG9yIHRoZSBpZCBpcyBub3QgYSByZWdpc3RlcmVkIGNvbW11bml0eSBwbHVnaW4uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQbHVnaW5SZXBvKHBsdWdpbjogSW5qZWN0UGx1Z2luUGFyYW1zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgeyBwbHVnaW5JZCwgcmVwbyB9ID0gcGx1Z2luO1xuXG4gIGlmIChyZXBvICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoIWlzVmFsaWRSZXBvUmVmZXJlbmNlKHJlcG8pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgXFxgcmVwb1xcYCBmb3IgY29tbXVuaXR5IHBsdWdpbiBcIiR7cGx1Z2luSWR9XCI6ICR7cmVwb30uIEV4cGVjdGVkIGFuIFxcYG93bmVyL25hbWVcXGAgcmVmZXJlbmNlLmApO1xuICAgIH1cbiAgICByZXR1cm4gcmVwbztcbiAgfVxuXG4gIGNvbnN0IHJlZ2lzdHJ5UmVwbyA9IHNlbGVjdFBsdWdpblJlcG8oeyBlbnRyaWVzOiBhd2FpdCBmZXRjaENvbW11bml0eVBsdWdpblJlZ2lzdHJ5KCksIHBsdWdpbklkIH0pO1xuICBpZiAocmVnaXN0cnlSZXBvID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQ29tbXVuaXR5IHBsdWdpbiBcIiR7cGx1Z2luSWR9XCIgaXMgbm90IGxpc3RlZCBpbiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnksIHNvIGl0cyBHaXRIdWIgYFxuICAgICAgICArICdyZXBvc2l0b3J5IGNhbm5vdCBiZSByZXNvbHZlZC4gUGFzcyBhbiBleHBsaWNpdCBgcmVwb2AgKGBvd25lci9uYW1lYCkgb24gdGhlIGluamVjdGVkIHBsdWdpbi4nXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiByZWdpc3RyeVJlcG87XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiQUFpQ0E7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLFlBQVk7QUFDckIsT0FBTyxhQUFhO0FBU3BCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsV0FBVztBQU1wQixNQUFNLHNCQUFzQjtBQUU1QixNQUFNLGlCQUFpQjtBQU92QixJQUFJO0FBOEVKLGVBQXNCLDBCQUEwQixRQUFtRjtBQUNqSSxRQUFNLEVBQUUsZUFBZSxlQUFlLGNBQWMsTUFBTSxJQUFJO0FBRTlELFFBQU0saUJBQWlCLGNBQWMsT0FBTyxDQUFDLFdBQVcsT0FBTyxvQkFBb0IsTUFBUztBQUM1RixRQUFNLFVBQVUsY0FBYyxpQkFBaUIsOEJBQThCLEVBQUUsZUFBZSxjQUFjLENBQUM7QUFDN0csUUFBTSxrQkFBa0IsSUFBSSxJQUFJLFFBQVEsSUFBSSxDQUFDLFdBQVcsT0FBTyxRQUFRLENBQUM7QUFFeEUsUUFBTSxZQUFtQyxDQUFDO0FBQzFDLGFBQVcsVUFBVSxTQUFTO0FBRzVCLGNBQVUsS0FBSyxNQUFNLGNBQWMsZUFBZSxNQUFNLENBQUM7QUFBQSxFQUMzRDtBQUVBLFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQSxrQkFBa0IsY0FBYyxJQUFJLENBQUMsV0FBVyxPQUFPLFFBQVEsRUFBRSxPQUFPLENBQUMsYUFBYSxDQUFDLGdCQUFnQixJQUFJLFFBQVEsQ0FBQztBQUFBLEVBQ3RIO0FBQ0Y7QUFj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
127
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RlbW8tdmF1bHQtYm9vdHN0cmFwLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogSW5zdGFsbHMgYSBkZW1vIHZhdWx0J3MgKippbmplY3RlZCBjb21tdW5pdHkgcGx1Z2lucyoqIGhlYWRsZXNzbHksIGJ5IGRvd25sb2FkaW5nXG4gKiB0aGVpciBwdWJsaXNoZWQgR2l0SHViIHJlbGVhc2UgYXNzZXRzIHN0cmFpZ2h0IGludG9cbiAqIGBkZW1vLXZhdWx0Ly5vYnNpZGlhbi9wbHVnaW5zLzxpZD4vYC5cbiAqXG4gKiBgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZWAgcmVxdWlyZXMgZWFjaCBpbmplY3RlZCBwbHVnaW4ncyBgbWFpbi5qc2AgL1xuICogYG1hbmlmZXN0Lmpzb25gIHRvIGFscmVhZHkgYmUgb24gZGlzaywgYW5kIHRocm93cyB3aGVuIHRoZXkgYXJlIG5vdC4gVW50aWwgdGhpc1xuICogbW9kdWxlIGV4aXN0ZWQgdGhlIG9ubHkgZG9jdW1lbnRlZCByZW1lZHkgd2FzIGEgKipHVUkgc3RlcCoqIFx1MjAxNCBvcGVuIGBkZW1vLXZhdWx0L2BcbiAqIGluIE9ic2lkaWFuIG9uY2UgYW5kIGxldCBgZGVtby12YXVsdC1oZWxwZXJgIGluc3RhbGwgdGhlIHBsdWdpbiBhdCBydW50aW1lLlxuICogYC5vYnNpZGlhbi9wbHVnaW5zLypgIGlzIGdpdGlnbm9yZWQgaW4gYSBwbHVnaW4gcmVwbywgc28gdGhhdCBzdGF0ZVxuICogZXhpc3RzIG9uIGV4YWN0bHkgdGhlIG9uZSBtYWNoaW5lIHRoYXQgZGlkIGl0IGFuZCBpcyBpbnZpc2libGUgdG8gYSBmcmVzaCBjbG9uZSxcbiAqIGEgbmV3IG1hY2hpbmUsIG9yIENJLiBTaW5jZSBhIHBsdWdpbiByZXBvJ3MgcmVsZWFzZSBwcmVmbGlnaHQgcnVucyBpdHNcbiAqIGludGVncmF0aW9uIHRlc3RzLCB0aGF0IG1hZGUgKmN1dHRpbmcgYSByZWxlYXNlIGZyb20gYSBjbGVhbiBjbG9uZSogaW1wb3NzaWJsZVxuICogd2l0aG91dCBhIGh1bWFuIG9wZW5pbmcgYSBHVUkuXG4gKlxuICogRG93bmxvYWRpbmcgdGhlIHJlbGVhc2UgYXNzZXRzIGlzIHRoZSBleGFjdCBoZWFkbGVzcyBlcXVpdmFsZW50OiB0aGUgcmVzdWx0aW5nXG4gKiBmb2xkZXIgaXMgd2hhdCBPYnNpZGlhbiBpdHNlbGYgd291bGQgaGF2ZSBpbnN0YWxsZWQsIHNvIHRoZSBzaGlwcGVkXG4gKiBgKi1kZW1vLXZhdWx0LnppcGAgXHUyMDE0IHdoaWNoIHVuemlwcyBpbnRvIGEgc2luZ2xlIGAqLWRlbW8tdmF1bHQtPHZlcnNpb24+YCBmb2xkZXIgXHUyMDE0XG4gKiBzdGF5cyB0aGUgc3RhbmRhcmQgZGVtby12YXVsdCBhcnRpZmFjdC5cbiAqXG4gKiBUd28gZW50cnkgcG9pbnRzLCBwbHVzIHRoZSBgYm9vdHN0cmFwLWRlbW8tdmF1bHRgIENMSSBzdWJjb21tYW5kOlxuICpcbiAqIC0ge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnN9IFx1MjAxNCBpbnN0YWxsIHRoZSBtaXNzaW5nIG9uZXMsIGV4cGxpY2l0bHkuXG4gKiAtIHtAbGluayBidWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmN9IFx1MjAxNCBkbyB0aGF0IGFuZCB0aGVuIGJ1aWxkIHRoZSBwb3B1bGF0ZSBtYXAsXG4gKiAgIHNvIGEgZ2xvYmFsIHNldHVwIHNlbGYtaGVhbHMgd2l0aCBubyBtYW51YWwgc3RlcCBhdCBhbGwuXG4gKlxuICogVGhlIHN5bmMgYGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVgIGRlbGliZXJhdGVseSBrZWVwcyB0aHJvd2luZzogYGZldGNoYCBoYXMgbm9cbiAqIHN5bmNocm9ub3VzIGZvcm0sIHNvIGF1dG8taGVhbGluZyBjYW4gb25seSBsaXZlIG9uIGFuIGFzeW5jIHNpYmxpbmcuIEl0cyBtZXNzYWdlXG4gKiBub3cgbmFtZXMgYm90aCByZW1lZGllcyBhYm92ZSBpbnN0ZWFkIG9mIHRoZSBHVUkgc3RlcC5cbiAqL1xuXG5pbXBvcnQge1xuICBta2RpclN5bmMsXG4gIHdyaXRlRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB0eXBlIHsgQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnlFbnRyeSB9IGZyb20gJy4vY29tbXVuaXR5LXBsdWdpbi1yZWdpc3RyeS5tanMnO1xuaW1wb3J0IHR5cGUge1xuICBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zLFxuICBJbmplY3RQbHVnaW5QYXJhbXNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLm1qcyc7XG5pbXBvcnQgdHlwZSB7IFBvcHVsYXRlRmlsZXNQYXJhbXMgfSBmcm9tICcuL3RlbXBvcmFyeS12YXVsdC5tanMnO1xuXG5pbXBvcnQge1xuICBidWlsZFBsdWdpbkFzc2V0VXJsLFxuICBDT01NVU5JVFlfUExVR0lOU19SRUdJU1RSWV9VUkwsXG4gIGlzVmFsaWRSZXBvUmVmZXJlbmNlLFxuICBPUFRJT05BTF9QTFVHSU5fQVNTRVRfTkFNRVMsXG4gIFJFUVVJUkVEX1BMVUdJTl9BU1NFVF9OQU1FUyxcbiAgc2VsZWN0UGx1Z2luUmVwb1xufSBmcm9tICcuL2NvbW11bml0eS1wbHVnaW4tcmVnaXN0cnkubWpzJztcbmltcG9ydCB7XG4gIGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGUsXG4gIHJlc29sdmVJbmplY3RlZFBsdWdpblNvdXJjZURpcmVjdG9yeSxcbiAgcmVzb2x2ZU1pc3NpbmdJbmplY3RlZFBsdWdpbnNcbn0gZnJvbSAnLi9kZW1vLXZhdWx0LXBvcHVsYXRlLm1qcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5tanMnO1xuXG4vKipcbiAqIEJyb3dzZXIgYFVzZXItQWdlbnRgIGZvciB0aGUgYXNzZXQgZG93bmxvYWRzLCBtYXRjaGluZyBgb2JzaWRpYW4taW5zdGFsbGVyLnRzYCBcdTIwMTRcbiAqIGEgcGxhaW4gTm9kZSBmZXRjaCBpcyByZWplY3RlZCBieSBzb21lIENETiBlZGdlcy5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTI0LjAuMC4wIFNhZmFyaS81MzcuMzYnO1xuXG5jb25zdCBIVFRQX05PVF9GT1VORCA9IDQwNDtcblxuLyoqXG4gKiBUaGUgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeSwgZmV0Y2hlZCBhdCBtb3N0IG9uY2UgcGVyIHByb2Nlc3MuIEV2ZXJ5IGluamVjdGVkXG4gKiBwbHVnaW4gb2YgZXZlcnkgZGVtby12YXVsdCBwcm9qZWN0IGluIGEgcnVuIHJlc29sdmVzIGFnYWluc3QgdGhlIHNhbWUgdGFibGUsIGFuZFxuICogaXQgaXMgYSBtdWx0aS1tZWdhYnl0ZSBkb2N1bWVudC5cbiAqL1xubGV0IHJlZ2lzdHJ5UHJvbWlzZTogUHJvbWlzZTxyZWFkb25seSBDb21tdW5pdHlQbHVnaW5SZWdpc3RyeUVudHJ5W10+IHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCb290c3RyYXBEZW1vVmF1bHRQbHVnaW5zUGFyYW1zIHtcbiAgLyoqXG4gIEFic29sdXRlIHBhdGggdG8gdGhlIHBsdWdpbiByZXBvJ3MgYGRlbW8tdmF1bHQvYCBkaXJlY3RvcnkuXG4gICAqL1xuICByZWFkb25seSBkZW1vVmF1bHRQYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbmplY3RlZCBwbHVnaW5zIHRvIGluc3RhbGwgXHUyMDE0IHRoZSBzYW1lIGxpc3QgcGFzc2VkIHRvIGBidWlsZERlbW9WYXVsdFBvcHVsYXRlYC4gUGx1Z2lucyB3aG9zZVxuICAgKiBiaW5hcmllcyBhcmUgYWxyZWFkeSBwcmVzZW50IGFyZSBza2lwcGVkICh1bmxlc3Mge0BsaW5rIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNQYXJhbXMuc2hvdWxkRm9yY2V9KSxcbiAgICogYXMgYXJlIHBsdWdpbnMgY2FycnlpbmcgYW4gZXhwbGljaXQgYHNvdXJjZURpcmVjdG9yeWAuXG4gICAqL1xuICByZWFkb25seSBpbmplY3RQbHVnaW5zOiByZWFkb25seSBJbmplY3RQbHVnaW5QYXJhbXNbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byByZS1kb3dubG9hZCBwbHVnaW5zIHRoYXQgYXJlIGFscmVhZHkgaW5zdGFsbGVkLCByZXBsYWNpbmcgdGhlbSB3aXRoIHRoZSBjdXJyZW50IHJlbGVhc2UuXG4gICAqIERlZmF1bHRzIHRvIGBmYWxzZWAgXHUyMDE0IHRoZSBub3JtYWwgcGF0aCBpbnN0YWxscyBvbmx5IHdoYXQgaXMgbWlzc2luZywgc28gYSB3YXJtIGNoZWNrb3V0IGRvZXMgbm9cbiAgICogbmV0d29yayBJL08gYXQgYWxsLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hvdWxkRm9yY2U/OiBib29sZWFuIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFRoZSBvdXRjb21lIG9mIGEge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnN9IHJ1bi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCb290c3RyYXBEZW1vVmF1bHRQbHVnaW5zUmVzdWx0IHtcbiAgLyoqXG4gIFRoZSBwbHVnaW5zIHRoYXQgd2VyZSBkb3dubG9hZGVkIGFuZCB3cml0dGVuLCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGluc3RhbGxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbGxlZDogcmVhZG9ubHkgSW5zdGFsbGVkUGx1Z2luSW5mb1tdO1xuXG4gIC8qKlxuICBUaGUgaWRzIG9mIHBsdWdpbnMgbGVmdCB1bnRvdWNoZWQgXHUyMDE0IGFscmVhZHkgaW5zdGFsbGVkLCBvciBvcHRlZCBvdXQgdmlhIGFuIGV4cGxpY2l0IGBzb3VyY2VEaXJlY3RvcnlgLlxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcHBlZFBsdWdpbklkczogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY30gXHUyMDE0IHRoZSBzYW1lIGJhZyB7QGxpbmsgYnVpbGREZW1vVmF1bHRQb3B1bGF0ZX0gdGFrZXMsXG4gKiB1bmRlciB0aGUgbmFtZSB0aGUgYXN5bmNocm9ub3VzIGJ1aWxkZXIgZGVyaXZlcy5cbiAqXG4gKiBPbmUgZGVjbGFyYXRpb24gc2VydmVzIGJvdGggYnVpbGRlcnMuIEl0IGtlZXBzIHRoZSBzeW5jaHJvbm91cyBidWlsZGVyJ3MgbmFtZSwgYW5kIHRoaXMgYWxpYXMgZ2l2ZXMgdGhlXG4gKiBhc3luY2hyb25vdXMgb25lIGl0cyBvd24sIHNvIG5laXRoZXIgaGFzIHRvIGJlIHNwZWxsZWQgYWZ0ZXIgdGhlIG90aGVyLlxuICovXG5leHBvcnQgdHlwZSBCdWlsZERlbW9WYXVsdFBvcHVsYXRlQXN5bmNQYXJhbXMgPSBCdWlsZERlbW9WYXVsdFBvcHVsYXRlUGFyYW1zO1xuXG4vKipcbiAqIE9uZSBwbHVnaW4gaW5zdGFsbGVkIGJ5IHtAbGluayBib290c3RyYXBEZW1vVmF1bHRQbHVnaW5zfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbnN0YWxsZWRQbHVnaW5JbmZvIHtcbiAgLyoqXG4gIFRoZSBhc3NldCBmaWxlIG5hbWVzIGFjdHVhbGx5IHdyaXR0ZW4sIGUuZy4gYFsnbWFpbi5qcycsICdtYW5pZmVzdC5qc29uJywgJ3N0eWxlcy5jc3MnXWAuXG4gICAqL1xuICByZWFkb25seSBhc3NldE5hbWVzOiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKipcbiAgVGhlIHBsdWdpbidzIGlkLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcblxuICAvKipcbiAgVGhlIEdpdEh1YiByZXBvc2l0b3J5IHRoZSBhc3NldHMgY2FtZSBmcm9tLCBhcyBgb3duZXIvbmFtZWAuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFRoZSByZWxlYXNlIHRhZyBkb3dubG9hZGVkIGZyb20sIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlIHJlcG9zaXRvcnkncyBsYXRlc3QgcmVsZWFzZSB3YXMgdXNlZC5cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZyB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBJbnN0YWxscyBldmVyeSBpbmplY3RlZCBjb21tdW5pdHkgcGx1Z2luIHdob3NlIGJ1aWx0IGZpbGVzIGFyZSBtaXNzaW5nIGZyb20gdGhlIGRlbW8gdmF1bHQsIGJ5XG4gKiBkb3dubG9hZGluZyBpdHMgcHVibGlzaGVkIHJlbGVhc2UgYXNzZXRzIGludG8gYGRlbW8tdmF1bHQvLm9ic2lkaWFuL3BsdWdpbnMvPGlkPi9gLlxuICpcbiAqIEVhY2ggcGx1Z2luJ3MgcmVwb3NpdG9yeSBjb21lcyBmcm9tIGl0cyB7QGxpbmsgSW5qZWN0UGx1Z2luUGFyYW1zLnJlcG99IHdoZW4gZ2l2ZW4sIG90aGVyd2lzZSBmcm9tXG4gKiBPYnNpZGlhbidzIG93biBjb21tdW5pdHkgcGx1Z2luIHJlZ2lzdHJ5IFx1MjAxNCB0aGUgc2FtZSBgaWRgIFx1MjE5MiBgcmVwb2AgdGFibGUgdGhlIGluLWFwcCBjb21tdW5pdHkgYnJvd3NlclxuICogaW5zdGFsbHMgZnJvbSwgc28gbm8gcGx1Z2luLXNwZWNpZmljIG1hcHBpbmcgaXMgaGFyZGNvZGVkLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNQYXJhbXN9LlxuICogQHJldHVybnMgV2hhdCB3YXMgaW5zdGFsbGVkIGFuZCB3aGF0IHdhcyBza2lwcGVkLlxuICogQHRocm93cyBFcnJvciBpZiBhIHBsdWdpbidzIHJlcG9zaXRvcnkgY2Fubm90IGJlIHJlc29sdmVkLCBvciBhIHJlcXVpcmVkIGFzc2V0IGNhbm5vdCBiZSBkb3dubG9hZGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2lucyhwYXJhbXM6IEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNQYXJhbXMpOiBQcm9taXNlPEJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnNSZXN1bHQ+IHtcbiAgY29uc3QgeyBkZW1vVmF1bHRQYXRoLCBpbmplY3RQbHVnaW5zLCBzaG91bGRGb3JjZSA9IGZhbHNlIH0gPSBwYXJhbXM7XG5cbiAgY29uc3QgYm9vdHN0cmFwcGFibGUgPSBpbmplY3RQbHVnaW5zLmZpbHRlcigocGx1Z2luKSA9PiBwbHVnaW4uc291cmNlRGlyZWN0b3J5ID09PSB1bmRlZmluZWQpO1xuICBjb25zdCB0YXJnZXRzID0gc2hvdWxkRm9yY2UgPyBib290c3RyYXBwYWJsZSA6IHJlc29sdmVNaXNzaW5nSW5qZWN0ZWRQbHVnaW5zKHsgZGVtb1ZhdWx0UGF0aCwgaW5qZWN0UGx1Z2lucyB9KTtcbiAgY29uc3QgdGFyZ2V0UGx1Z2luSWRzID0gbmV3IFNldCh0YXJnZXRzLm1hcCgocGx1Z2luKSA9PiBwbHVnaW4ucGx1Z2luSWQpKTtcblxuICBjb25zdCBpbnN0YWxsZWQ6IEluc3RhbGxlZFBsdWdpbkluZm9bXSA9IFtdO1xuICBmb3IgKGNvbnN0IHBsdWdpbiBvZiB0YXJnZXRzKSB7XG4gICAgLy8gU2VxdWVudGlhbCBvbiBwdXJwb3NlOiB0aGUgaW5zdGFsbHMgc2hhcmUgb25lIG1lbW9pc2VkIHJlZ2lzdHJ5IGZldGNoLlxuICAgIC8vIFBhcmFsbGVsaXNtIHdvdWxkIGJ1eSBub3RoaW5nIGJ1dCBpbnRlcmxlYXZlZCBsb2dzIGZvciB0aGUgaGFuZGZ1bCBvZiBwbHVnaW5zIGEgZGVtbyB2YXVsdCBpbmplY3RzLlxuICAgIGluc3RhbGxlZC5wdXNoKGF3YWl0IGluc3RhbGxQbHVnaW4oZGVtb1ZhdWx0UGF0aCwgcGx1Z2luKSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGluc3RhbGxlZCxcbiAgICBza2lwcGVkUGx1Z2luSWRzOiBpbmplY3RQbHVnaW5zLm1hcCgocGx1Z2luKSA9PiBwbHVnaW4ucGx1Z2luSWQpLmZpbHRlcigocGx1Z2luSWQpID0+ICF0YXJnZXRQbHVnaW5JZHMuaGFzKHBsdWdpbklkKSlcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgc2VsZi1oZWFsaW5nIGNvdW50ZXJwYXJ0IG9mIGBidWlsZERlbW9WYXVsdFBvcHVsYXRlYDogaW5zdGFsbHMgYW55IGluamVjdGVkIGNvbW11bml0eSBwbHVnaW4gd2hvc2VcbiAqIGJpbmFyaWVzIGFyZSBtaXNzaW5nIChzZWUge0BsaW5rIGJvb3RzdHJhcERlbW9WYXVsdFBsdWdpbnN9KSwgdGhlbiBidWlsZHMgdGhlIHBvcHVsYXRlIG1hcCBleGFjdGx5IGFzIHRoZVxuICogc3luY2hyb25vdXMgYnVpbGRlciBkb2VzLlxuICpcbiAqIFVzZSB0aGlzIGZyb20gYSBnbG9iYWwgc2V0dXAncyBgcG9wdWxhdGVgIHRodW5rIFx1MjAxNCBib3RoIHRoZSBWaXRlc3QgYW5kIEplc3QgYWRhcHRlcnMgYWNjZXB0IGEgdGh1bmtcbiAqIHJldHVybmluZyBhIHByb21pc2UgXHUyMDE0IHNvIGEgZnJlc2ggY2xvbmUsIGEgbmV3IG1hY2hpbmUsIG9yIENJIG5lZWRzIG5vIG1hbnVhbCBpbnN0YWxsIHN0ZXAuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBzYW1lIGJhZyB0aGUgc3luY2hyb25vdXMgYnVpbGRlciB0YWtlcywgYXMge0BsaW5rIEJ1aWxkRGVtb1ZhdWx0UG9wdWxhdGVBc3luY1BhcmFtc30uXG4gKiBAcmV0dXJucyBUaGUgcG9wdWxhdGUgbWFwLCByZWFkeSB0byBoYW5kIHRvIGEgZ2xvYmFsIHNldHVwJ3MgYHBvcHVsYXRlYCBvciBgVGVtcG9yYXJ5VmF1bHQucG9wdWxhdGVgLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGREZW1vVmF1bHRQb3B1bGF0ZUFzeW5jKHBhcmFtczogQnVpbGREZW1vVmF1bHRQb3B1bGF0ZUFzeW5jUGFyYW1zKTogUHJvbWlzZTxQb3B1bGF0ZUZpbGVzUGFyYW1zPiB7XG4gIGlmIChwYXJhbXMuaW5qZWN0UGx1Z2lucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgYXdhaXQgYm9vdHN0cmFwRGVtb1ZhdWx0UGx1Z2lucyh7IGRlbW9WYXVsdFBhdGg6IHBhcmFtcy5kZW1vVmF1bHRQYXRoLCBpbmplY3RQbHVnaW5zOiBwYXJhbXMuaW5qZWN0UGx1Z2lucyB9KTtcbiAgfVxuXG4gIHJldHVybiBidWlsZERlbW9WYXVsdFBvcHVsYXRlKHBhcmFtcyk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBOZXR3b3JrIGRvd25sb2FkIGdsdWUsIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG4vKipcbiAqIEJ1aWxkcyB0aGUgcmVxdWVzdCBoZWFkZXJzIGZvciBhIEdpdEh1YiBkb3dubG9hZCwgc2VuZGluZyBhIGBHSVRIVUJfVE9LRU5gIC8gYEdIX1RPS0VOYCBiZWFyZXIgd2hlbiBvbmVcbiAqIGlzIGluIHRoZSBlbnZpcm9ubWVudCBcdTIwMTQgd2l0aG91dCBpdCB0aGUgYW5vbnltb3VzIHF1b3RhIHJldHVybnMgSFRUUCA0MDMgb24gc2hhcmVkIENJIHJ1bm5lciBJUHMuXG4gKlxuICogQHJldHVybnMgVGhlIGhlYWRlcnMgdG8gc2VuZC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRHaXRIdWJIZWFkZXJzKCk6IEhlYWRlcnMge1xuICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoeyAnVXNlci1BZ2VudCc6IERPV05MT0FEX1VTRVJfQUdFTlQgfSk7XG4gIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnZbJ0dJVEhVQl9UT0tFTiddID8/IHByb2Nlc3MuZW52WydHSF9UT0tFTiddO1xuICBpZiAodG9rZW4pIHtcbiAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHt0b2tlbn1gKTtcbiAgfVxuICByZXR1cm4gaGVhZGVycztcbn1cblxuLyoqXG4gKiBEb3dubG9hZHMgb25lIHJlbGVhc2UgYXNzZXQuXG4gKlxuICogQHBhcmFtIHVybCAtIFRoZSBhc3NldCdzIGRvd25sb2FkIFVSTC5cbiAqIEBwYXJhbSBpc1JlcXVpcmVkIC0gV2hldGhlciBhIG1pc3NpbmcgYXNzZXQgKEhUVFAgNDA0KSBpcyBhbiBlcnJvciByYXRoZXIgdGhhbiBhbiBhYnNlbnQgb3B0aW9uYWwgZmlsZS5cbiAqIEByZXR1cm5zIFRoZSBhc3NldCdzIGJ5dGVzLCBvciBgdW5kZWZpbmVkYCB3aGVuIGFuIG9wdGlvbmFsIGFzc2V0IGlzIG5vdCBwdWJsaXNoZWQuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBkb3dubG9hZCBmYWlscyBhbmQgdGhlIGFzc2V0IGlzIHJlcXVpcmVkLlxuICovXG5hc3luYyBmdW5jdGlvbiBkb3dubG9hZEFzc2V0KHVybDogc3RyaW5nLCBpc1JlcXVpcmVkOiBib29sZWFuKTogUHJvbWlzZTxCdWZmZXIgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwsIHsgaGVhZGVyczogYnVpbGRHaXRIdWJIZWFkZXJzKCkgfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICBpZiAoIWlzUmVxdWlyZWQgJiYgcmVzcG9uc2Uuc3RhdHVzID09PSBIVFRQX05PVF9GT1VORCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZG93bmxvYWQgJHt1cmx9OiBIVFRQICR7U3RyaW5nKHJlc3BvbnNlLnN0YXR1cyl9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH1gKTtcbiAgfVxuICByZXR1cm4gQnVmZmVyLmZyb20oYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSk7XG59XG5cbi8qKlxuICogRmV0Y2hlcyBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnksIG1lbW9pc2VkIGZvciB0aGUgbGlmZXRpbWUgb2YgdGhlIHByb2Nlc3MuXG4gKlxuICogQHJldHVybnMgVGhlIHJlZ2lzdHJ5IHJvd3MuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSByZWdpc3RyeSBjYW5ub3QgYmUgZmV0Y2hlZCBvciBwYXJzZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnkoKTogUHJvbWlzZTxyZWFkb25seSBDb21tdW5pdHlQbHVnaW5SZWdpc3RyeUVudHJ5W10+IHtcbiAgcmVnaXN0cnlQcm9taXNlID8/PSAoYXN5bmMgKCk6IFByb21pc2U8cmVhZG9ubHkgQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnlFbnRyeVtdPiA9PiB7XG4gICAgbG9nKGBbZGVtby12YXVsdC1ib290c3RyYXBdIEZldGNoaW5nIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeSBmcm9tICR7Q09NTVVOSVRZX1BMVUdJTlNfUkVHSVNUUllfVVJMfS4uLmApO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goQ09NTVVOSVRZX1BMVUdJTlNfUkVHSVNUUllfVVJMLCB7IGhlYWRlcnM6IGJ1aWxkR2l0SHViSGVhZGVycygpIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEZhaWxlZCB0byBmZXRjaCBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkgKCR7Q09NTVVOSVRZX1BMVUdJTlNfUkVHSVNUUllfVVJMfSk6IGBcbiAgICAgICAgICArIGBIVFRQICR7U3RyaW5nKHJlc3BvbnNlLnN0YXR1cyl9ICR7cmVzcG9uc2Uuc3RhdHVzVGV4dH0uIGBcbiAgICAgICAgICArICdQYXNzIGFuIGV4cGxpY2l0IGByZXBvYCBvbiB0aGUgaW5qZWN0ZWQgcGx1Z2luIHRvIHNraXAgdGhlIHJlZ2lzdHJ5IGxvb2t1cC4nXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIHJlYWRvbmx5IENvbW11bml0eVBsdWdpblJlZ2lzdHJ5RW50cnlbXTtcbiAgfSkoKTtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCByZWdpc3RyeVByb21pc2U7XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgLy8gRG8gbm90IG1lbW9pc2UgYSBmYWlsdXJlOiBhIHRyYW5zaWVudCBuZXR3b3JrIGVycm9yIG11c3Qgbm90IHBvaXNvbiBldmVyeSBsYXRlciBsb29rdXAuXG4gICAgcmVnaXN0cnlQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbi8qKlxuICogRG93bmxvYWRzIG9uZSBwbHVnaW4ncyByZWxlYXNlIGFzc2V0cyBhbmQgd3JpdGVzIHRoZW0gaW50byB0aGUgZGVtbyB2YXVsdC5cbiAqXG4gKiBAcGFyYW0gZGVtb1ZhdWx0UGF0aCAtIFRoZSBkZW1vIHZhdWx0IHJvb3QuXG4gKiBAcGFyYW0gcGx1Z2luIC0gVGhlIHBsdWdpbiB0byBpbnN0YWxsLlxuICogQHJldHVybnMgV2hhdCB3YXMgaW5zdGFsbGVkLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgcmVwb3NpdG9yeSBjYW5ub3QgYmUgcmVzb2x2ZWQgb3IgYSByZXF1aXJlZCBhc3NldCBjYW5ub3QgYmUgZG93bmxvYWRlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbFBsdWdpbihkZW1vVmF1bHRQYXRoOiBzdHJpbmcsIHBsdWdpbjogSW5qZWN0UGx1Z2luUGFyYW1zKTogUHJvbWlzZTxJbnN0YWxsZWRQbHVnaW5JbmZvPiB7XG4gIGNvbnN0IHsgcGx1Z2luSWQsIHZlcnNpb24gfSA9IHBsdWdpbjtcbiAgY29uc3QgcmVwbyA9IGF3YWl0IHJlc29sdmVQbHVnaW5SZXBvKHBsdWdpbik7XG4gIGNvbnN0IHRhcmdldERpcmVjdG9yeSA9IHJlc29sdmVJbmplY3RlZFBsdWdpblNvdXJjZURpcmVjdG9yeSh7IGRlbW9WYXVsdFBhdGgsIHBsdWdpbiB9KTtcblxuICBsb2coYFtkZW1vLXZhdWx0LWJvb3RzdHJhcF0gSW5zdGFsbGluZyBcIiR7cGx1Z2luSWR9XCIgZnJvbSAke3JlcG99QCR7dmVyc2lvbiA/PyAnbGF0ZXN0J30gaW50byAke3RhcmdldERpcmVjdG9yeX0uLi5gKTtcblxuICBjb25zdCBkb3dubG9hZHMgPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgLi4uUkVRVUlSRURfUExVR0lOX0FTU0VUX05BTUVTLm1hcChhc3luYyAoYXNzZXROYW1lKSA9PiAoe1xuICAgICAgYXNzZXROYW1lLFxuICAgICAgY29udGVudDogYXdhaXQgZG93bmxvYWRBc3NldChidWlsZFBsdWdpbkFzc2V0VXJsKHsgYXNzZXROYW1lLCByZXBvLCB2ZXJzaW9uIH0pLCB0cnVlKVxuICAgIH0pKSxcbiAgICAuLi5PUFRJT05BTF9QTFVHSU5fQVNTRVRfTkFNRVMubWFwKGFzeW5jIChhc3NldE5hbWUpID0+ICh7XG4gICAgICBhc3NldE5hbWUsXG4gICAgICBjb250ZW50OiBhd2FpdCBkb3dubG9hZEFzc2V0KGJ1aWxkUGx1Z2luQXNzZXRVcmwoeyBhc3NldE5hbWUsIHJlcG8sIHZlcnNpb24gfSksIGZhbHNlKVxuICAgIH0pKVxuICBdKTtcblxuICBta2RpclN5bmModGFyZ2V0RGlyZWN0b3J5LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcblxuICBjb25zdCBhc3NldE5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHsgYXNzZXROYW1lLCBjb250ZW50IH0gb2YgZG93bmxvYWRzKSB7XG4gICAgaWYgKGNvbnRlbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHdyaXRlRmlsZVN5bmMoam9pbih0YXJnZXREaXJlY3RvcnksIGFzc2V0TmFtZSksIGNvbnRlbnQpO1xuICAgIGFzc2V0TmFtZXMucHVzaChhc3NldE5hbWUpO1xuICB9XG5cbiAgbG9nKGBbZGVtby12YXVsdC1ib290c3RyYXBdIEluc3RhbGxlZCBcIiR7cGx1Z2luSWR9XCI6ICR7YXNzZXROYW1lcy5qb2luKCcsICcpfS5gKTtcblxuICByZXR1cm4geyBhc3NldE5hbWVzLCBwbHVnaW5JZCwgcmVwbywgdmVyc2lvbiB9O1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBHaXRIdWIgcmVwb3NpdG9yeSBwdWJsaXNoaW5nIGEgcGx1Z2luIFx1MjAxNCB0aGUgZXhwbGljaXQgb3ZlcnJpZGUgd2hlbiBnaXZlbiwgb3RoZXJ3aXNlXG4gKiBPYnNpZGlhbidzIGNvbW11bml0eSBwbHVnaW4gcmVnaXN0cnkuXG4gKlxuICogQHBhcmFtIHBsdWdpbiAtIFRoZSBwbHVnaW4gdG8gcmVzb2x2ZS5cbiAqIEByZXR1cm5zIFRoZSBgb3duZXIvbmFtZWAgcmVwb3NpdG9yeSByZWZlcmVuY2UuXG4gKiBAdGhyb3dzIEVycm9yIGlmIGFuIGV4cGxpY2l0IG92ZXJyaWRlIGlzIG1hbGZvcm1lZCwgb3IgdGhlIGlkIGlzIG5vdCBhIHJlZ2lzdGVyZWQgY29tbXVuaXR5IHBsdWdpbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVBsdWdpblJlcG8ocGx1Z2luOiBJbmplY3RQbHVnaW5QYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCB7IHBsdWdpbklkLCByZXBvIH0gPSBwbHVnaW47XG5cbiAgaWYgKHJlcG8gIT09IHVuZGVmaW5lZCkge1xuICAgIGlmICghaXNWYWxpZFJlcG9SZWZlcmVuY2UocmVwbykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBcXGByZXBvXFxgIGZvciBjb21tdW5pdHkgcGx1Z2luIFwiJHtwbHVnaW5JZH1cIjogJHtyZXBvfS4gRXhwZWN0ZWQgYW4gXFxgb3duZXIvbmFtZVxcYCByZWZlcmVuY2UuYCk7XG4gICAgfVxuICAgIHJldHVybiByZXBvO1xuICB9XG5cbiAgY29uc3QgcmVnaXN0cnlSZXBvID0gc2VsZWN0UGx1Z2luUmVwbyh7IGVudHJpZXM6IGF3YWl0IGZldGNoQ29tbXVuaXR5UGx1Z2luUmVnaXN0cnkoKSwgcGx1Z2luSWQgfSk7XG4gIGlmIChyZWdpc3RyeVJlcG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBDb21tdW5pdHkgcGx1Z2luIFwiJHtwbHVnaW5JZH1cIiBpcyBub3QgbGlzdGVkIGluIE9ic2lkaWFuJ3MgY29tbXVuaXR5IHBsdWdpbiByZWdpc3RyeSwgc28gaXRzIEdpdEh1YiBgXG4gICAgICAgICsgJ3JlcG9zaXRvcnkgY2Fubm90IGJlIHJlc29sdmVkLiBQYXNzIGFuIGV4cGxpY2l0IGByZXBvYCAoYG93bmVyL25hbWVgKSBvbiB0aGUgaW5qZWN0ZWQgcGx1Z2luLidcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHJlZ2lzdHJ5UmVwbztcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQWlDQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsWUFBWTtBQUNyQixPQUFPLGFBQWE7QUFTcEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxXQUFXO0FBTXBCLE1BQU0sc0JBQXNCO0FBRTVCLE1BQU0saUJBQWlCO0FBT3ZCLElBQUk7QUF1RkosZUFBc0IsMEJBQTBCLFFBQW1GO0FBQ2pJLFFBQU0sRUFBRSxlQUFlLGVBQWUsY0FBYyxNQUFNLElBQUk7QUFFOUQsUUFBTSxpQkFBaUIsY0FBYyxPQUFPLENBQUMsV0FBVyxPQUFPLG9CQUFvQixNQUFTO0FBQzVGLFFBQU0sVUFBVSxjQUFjLGlCQUFpQiw4QkFBOEIsRUFBRSxlQUFlLGNBQWMsQ0FBQztBQUM3RyxRQUFNLGtCQUFrQixJQUFJLElBQUksUUFBUSxJQUFJLENBQUMsV0FBVyxPQUFPLFFBQVEsQ0FBQztBQUV4RSxRQUFNLFlBQW1DLENBQUM7QUFDMUMsYUFBVyxVQUFVLFNBQVM7QUFHNUIsY0FBVSxLQUFLLE1BQU0sY0FBYyxlQUFlLE1BQU0sQ0FBQztBQUFBLEVBQzNEO0FBRUEsU0FBTztBQUFBLElBQ0w7QUFBQSxJQUNBLGtCQUFrQixjQUFjLElBQUksQ0FBQyxXQUFXLE9BQU8sUUFBUSxFQUFFLE9BQU8sQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLElBQUksUUFBUSxDQUFDO0FBQUEsRUFDdEg7QUFDRjtBQWFBLGVBQXNCLDRCQUE0QixRQUF5RTtBQUN6SCxNQUFJLE9BQU8sa0JBQWtCLFFBQVc7QUFDdEMsVUFBTSwwQkFBMEIsRUFBRSxlQUFlLE9BQU8sZUFBZSxlQUFlLE9BQU8sY0FBYyxDQUFDO0FBQUEsRUFDOUc7QUFFQSxTQUFPLHVCQUF1QixNQUFNO0FBQ3RDO0FBVUEsU0FBUyxxQkFBOEI7QUFDckMsUUFBTSxVQUFVLElBQUksUUFBUSxFQUFFLGNBQWMsb0JBQW9CLENBQUM7QUFDakUsUUFBTSxRQUFRLFFBQVEsSUFBSSxjQUFjLEtBQUssUUFBUSxJQUFJLFVBQVU7QUFDbkUsTUFBSSxPQUFPO0FBQ1QsWUFBUSxJQUFJLGlCQUFpQixVQUFVLEtBQUssRUFBRTtBQUFBLEVBQ2hEO0FBQ0EsU0FBTztBQUNUO0FBVUEsZUFBZSxjQUFjLEtBQWEsWUFBa0Q7QUFDMUYsUUFBTSxXQUFXLE1BQU0sTUFBTSxLQUFLLEVBQUUsU0FBUyxtQkFBbUIsRUFBRSxDQUFDO0FBQ25FLE1BQUksQ0FBQyxTQUFTLElBQUk7QUFDaEIsUUFBSSxDQUFDLGNBQWMsU0FBUyxXQUFXLGdCQUFnQjtBQUNyRCxhQUFPO0FBQUEsSUFDVDtBQUNBLFVBQU0sSUFBSSxNQUFNLHNCQUFzQixHQUFHLFVBQVUsT0FBTyxTQUFTLE1BQU0sQ0FBQyxJQUFJLFNBQVMsVUFBVSxFQUFFO0FBQUEsRUFDckc7QUFDQSxTQUFPLE9BQU8sS0FBSyxNQUFNLFNBQVMsWUFBWSxDQUFDO0FBQ2pEO0FBUUEsZUFBZSwrQkFBaUY7QUFDOUYsdUJBQXFCLFlBQThEO0FBQ2pGLFFBQUksNkVBQTZFLDhCQUE4QixLQUFLO0FBQ3BILFVBQU0sV0FBVyxNQUFNLE1BQU0sZ0NBQWdDLEVBQUUsU0FBUyxtQkFBbUIsRUFBRSxDQUFDO0FBQzlGLFFBQUksQ0FBQyxTQUFTLElBQUk7QUFDaEIsWUFBTSxJQUFJO0FBQUEsUUFDUix5REFBeUQsOEJBQThCLFdBQzNFLE9BQU8sU0FBUyxNQUFNLENBQUMsSUFBSSxTQUFTLFVBQVU7QUFBQSxNQUU1RDtBQUFBLElBQ0Y7QUFDQSxXQUFPLE1BQU0sU0FBUyxLQUFLO0FBQUEsRUFDN0IsR0FBRztBQUVILE1BQUk7QUFDRixXQUFPLE1BQU07QUFBQSxFQUNmLFNBQVMsT0FBZ0I7QUFFdkIsc0JBQWtCO0FBQ2xCLFVBQU07QUFBQSxFQUNSO0FBQ0Y7QUFVQSxlQUFlLGNBQWMsZUFBdUIsUUFBMEQ7QUFDNUcsUUFBTSxFQUFFLFVBQVUsUUFBUSxJQUFJO0FBQzlCLFFBQU0sT0FBTyxNQUFNLGtCQUFrQixNQUFNO0FBQzNDLFFBQU0sa0JBQWtCLHFDQUFxQyxFQUFFLGVBQWUsT0FBTyxDQUFDO0FBRXRGLE1BQUksc0NBQXNDLFFBQVEsVUFBVSxJQUFJLElBQUksV0FBVyxRQUFRLFNBQVMsZUFBZSxLQUFLO0FBRXBILFFBQU0sWUFBWSxNQUFNLFFBQVEsSUFBSTtBQUFBLElBQ2xDLEdBQUcsNEJBQTRCLElBQUksT0FBTyxlQUFlO0FBQUEsTUFDdkQ7QUFBQSxNQUNBLFNBQVMsTUFBTSxjQUFjLG9CQUFvQixFQUFFLFdBQVcsTUFBTSxRQUFRLENBQUMsR0FBRyxJQUFJO0FBQUEsSUFDdEYsRUFBRTtBQUFBLElBQ0YsR0FBRyw0QkFBNEIsSUFBSSxPQUFPLGVBQWU7QUFBQSxNQUN2RDtBQUFBLE1BQ0EsU0FBUyxNQUFNLGNBQWMsb0JBQW9CLEVBQUUsV0FBVyxNQUFNLFFBQVEsQ0FBQyxHQUFHLEtBQUs7QUFBQSxJQUN2RixFQUFFO0FBQUEsRUFDSixDQUFDO0FBRUQsWUFBVSxpQkFBaUIsRUFBRSxXQUFXLEtBQUssQ0FBQztBQUU5QyxRQUFNLGFBQXVCLENBQUM7QUFDOUIsYUFBVyxFQUFFLFdBQVcsUUFBUSxLQUFLLFdBQVc7QUFDOUMsUUFBSSxZQUFZLFFBQVc7QUFDekI7QUFBQSxJQUNGO0FBQ0Esa0JBQWMsS0FBSyxpQkFBaUIsU0FBUyxHQUFHLE9BQU87QUFDdkQsZUFBVyxLQUFLLFNBQVM7QUFBQSxFQUMzQjtBQUVBLE1BQUkscUNBQXFDLFFBQVEsTUFBTSxXQUFXLEtBQUssSUFBSSxDQUFDLEdBQUc7QUFFL0UsU0FBTyxFQUFFLFlBQVksVUFBVSxNQUFNLFFBQVE7QUFDL0M7QUFVQSxlQUFlLGtCQUFrQixRQUE2QztBQUM1RSxRQUFNLEVBQUUsVUFBVSxLQUFLLElBQUk7QUFFM0IsTUFBSSxTQUFTLFFBQVc7QUFDdEIsUUFBSSxDQUFDLHFCQUFxQixJQUFJLEdBQUc7QUFDL0IsWUFBTSxJQUFJLE1BQU0sMENBQTBDLFFBQVEsTUFBTSxJQUFJLHlDQUF5QztBQUFBLElBQ3ZIO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGVBQWUsaUJBQWlCLEVBQUUsU0FBUyxNQUFNLDZCQUE2QixHQUFHLFNBQVMsQ0FBQztBQUNqRyxNQUFJLGlCQUFpQixRQUFXO0FBQzlCLFVBQU0sSUFBSTtBQUFBLE1BQ1IscUJBQXFCLFFBQVE7QUFBQSxJQUUvQjtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -44,7 +44,7 @@ export interface WithSoftKeyboardEnabledParams<T> {
44
44
  /**
45
45
  * The work to run while the on-screen keyboard is permitted.
46
46
  */
47
- callback(this: void): Promise<T>;
47
+ readonly callback: (this: void) => Promise<T>;
48
48
  /**
49
49
  * The device to address.
50
50
  */
@@ -64,4 +64,4 @@ export {
64
64
  withSoftKeyboardEnabled,
65
65
  writeDeviceSetting
66
66
  };
67
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RldmljZS1zZXR0aW5ncy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJlYWRzIGFuZCB3cml0ZXMgQW5kcm9pZCBkZXZpY2Ugc2V0dGluZ3MgXHUyMDE0IGFuZCB3cmFwcyB0aGUgb25lIHNldHRpbmcgYVxuICogc2NyZWVuc2hvdCBzdWl0ZSBoYXMgdG8gY2hhbmdlLlxuICpcbiAqIFRoZSBzY3JlZW5zaG90IEFWRHMgYXJlIGJ1aWx0IGBody5rZXlib2FyZD15ZXNgLCBzbyBBbmRyb2lkIHN1cHByZXNzZXMgdGhlXG4gKiBvbi1zY3JlZW4ga2V5Ym9hcmQgZXZlbiB3aGVyZSB0aGUgcGFnZSBhc2tzIGZvciBvbmUuIGBzaG93X2ltZV93aXRoX2hhcmRfa2V5Ym9hcmRgXG4gKiBpcyB3aGF0IHR1cm5zIGl0IGJhY2sgb24uIHtAbGluayB3aXRoU29mdEtleWJvYXJkRW5hYmxlZH0gZmxpcHMgaXQsIHJ1bnMgdGhlXG4gKiB3b3JrLCBhbmQgcHV0cyB0aGUgZGV2aWNlIGJhY2sgZXhhY3RseSBhcyBpdCBmb3VuZCBpdCBcdTIwMTQgaW5jbHVkaW5nIHJlc3RvcmluZyBhXG4gKiBzZXR0aW5nIHRoYXQgaGFkIG5ldmVyIGJlZW4gd3JpdHRlbiwgd2hpY2ggdGFrZXMgYSBkZWxldGUgcmF0aGVyIHRoYW4gYSB3cml0ZVxuICogKHNlZSBgZGV2aWNlLXNldHRpbmctcmVzdG9yZWApLlxuICpcbiAqIEV2ZXJ5IGZ1bmN0aW9uIGhlcmUgc2hlbGxzIG91dCwgc28gdGhlIHdob2xlIG1vZHVsZSBpcyBpbnRlZ3JhdGlvbi10aW1lIGNvZGU7XG4gKiB0aGUgcmVzdG9yZSBkZWNpc2lvbiBhbmQgdGhlIGFyZ3VtZW50IGxpc3QgaXQgZGVwZW5kcyBvbiBhcmUgdW5pdC10ZXN0ZWQgaW5cbiAqIHRoZWlyIG93biBtb2R1bGVzLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgKHNoZWxscyBvdXQgdG8gYSByZWFsIGRldmljZSkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgRGV2aWNlU2V0dGluZ05hbWVzcGFjZSB9IGZyb20gJy4vZGV2aWNlLXNldHRpbmdzLWNvbW1hbmQubWpzJztcblxuaW1wb3J0IHsgcnVuQWRiVGV4dCB9IGZyb20gJy4vYWRiLm1qcyc7XG5pbXBvcnQge1xuICBEZXZpY2VTZXR0aW5nUmVzdG9yZUtpbmQsXG4gIHJlc29sdmVEZXZpY2VTZXR0aW5nUmVzdG9yZVxufSBmcm9tICcuL2RldmljZS1zZXR0aW5nLXJlc3RvcmUubWpzJztcbmltcG9ydCB7XG4gIGJ1aWxkRGV2aWNlU2V0dGluZ3NDb21tYW5kQXJndW1lbnRzLFxuICBEZXZpY2VTZXR0aW5nVmVyYlxufSBmcm9tICcuL2RldmljZS1zZXR0aW5ncy1jb21tYW5kLm1qcyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGRlbGV0ZURldmljZVNldHRpbmd9IGFuZCB7QGxpbmsgcmVhZERldmljZVNldHRpbmd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZVNldHRpbmdQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGRldmljZSB0byBhZGRyZXNzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNldHRpbmcncyBuYW1lIHdpdGhpbiB7QGxpbmsgbmFtZXNwYWNlfSwgZS5nLiBgc2hvd19pbWVfd2l0aF9oYXJkX2tleWJvYXJkYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIG5hbWVzcGFjZSB0aGUgbmFtZSBsaXZlcyBpbi5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIERldmljZVNldHRpbmdOYW1lc3BhY2UuU2VjdXJlfVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlPzogRGV2aWNlU2V0dGluZ05hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgd2l0aFNvZnRLZXlib2FyZEVuYWJsZWR9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFdoYXQgdGhlIHdyYXBwZWQgd29yayByZXR1cm5zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkUGFyYW1zPFQ+IHtcbiAgLyoqXG4gICAqIFRoZSB3b3JrIHRvIHJ1biB3aGlsZSB0aGUgb24tc2NyZWVuIGtleWJvYXJkIGlzIHBlcm1pdHRlZC5cbiAgICovXG4gIGNhbGxiYWNrKHRoaXM6IHZvaWQpOiBQcm9taXNlPFQ+O1xuXG4gIC8qKlxuICAgKiBUaGUgZGV2aWNlIHRvIGFkZHJlc3MuXG4gICAqL1xuICByZWFkb25seSBkZXZpY2VJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayB3cml0ZURldmljZVNldHRpbmd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdyaXRlRGV2aWNlU2V0dGluZ1BhcmFtcyBleHRlbmRzIERldmljZVNldHRpbmdQYXJhbXMge1xuICAvKipcbiAgICogVGhlIHZhbHVlIHRvIHdyaXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBUaGUgc2V0dGluZyBkZWNpZGluZyB3aGV0aGVyIEFuZHJvaWQgZHJhd3MgYSBrZXlib2FyZCB3aGlsZSBhIGhhcmR3YXJlIG9uZSBpcyBhdHRhY2hlZC5cbiAqL1xuY29uc3QgU09GVF9LRVlCT0FSRF9TRVRUSU5HX05BTUUgPSAnc2hvd19pbWVfd2l0aF9oYXJkX2tleWJvYXJkJztcblxuY29uc3QgU09GVF9LRVlCT0FSRF9TRVRUSU5HX09OID0gJzEnO1xuXG4vKipcbiAqIENsZWFycyBhIGRldmljZSBzZXR0aW5nLCByZXR1cm5pbmcgaXQgdG8gbmV2ZXItaGF2aW5nLWJlZW4td3JpdHRlbi5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGRldmljZSwgdGhlIHNldHRpbmcgYW5kIGl0cyBuYW1lc3BhY2UuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIG9uY2UgdGhlIHNldHRpbmcgaXMgZ29uZS5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi11dGlscy9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoIC0tIFBlcm1hbmVudDogYERldmljZVNldHRpbmdQYXJhbXNgIGlzIG9uZSBiYWcgc2hhcmVkIGJ5IHRoZSByZWFkIGFuZCBkZWxldGUgaGVscGVycywgc28gbm8gcGVyLW93bmVyIG5hbWUgY2FuIHNhdGlzZnkgYm90aC5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkZWxldGVEZXZpY2VTZXR0aW5nKHBhcmFtczogRGV2aWNlU2V0dGluZ1BhcmFtcyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBydW5BZGJUZXh0KHtcbiAgICBjb21tYW5kQXJndW1lbnRzOiBidWlsZERldmljZVNldHRpbmdzQ29tbWFuZEFyZ3VtZW50cyh7XG4gICAgICBuYW1lOiBwYXJhbXMubmFtZSxcbiAgICAgIC4uLihwYXJhbXMubmFtZXNwYWNlICE9PSB1bmRlZmluZWQgJiYgeyBuYW1lc3BhY2U6IHBhcmFtcy5uYW1lc3BhY2UgfSksXG4gICAgICB2ZXJiOiBEZXZpY2VTZXR0aW5nVmVyYi5EZWxldGVcbiAgICB9KSxcbiAgICBkZXZpY2VJZDogcGFyYW1zLmRldmljZUlkXG4gIH0pO1xufVxuXG4vKipcbiAqIFJlYWRzIGEgZGV2aWNlIHNldHRpbmcuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBkZXZpY2UsIHRoZSBzZXR0aW5nIGFuZCBpdHMgbmFtZXNwYWNlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB0aGUgc2V0dGluZydzIHZhbHVlLCBvciB0aGUgbGl0ZXJhbCBgbnVsbGAgd2hlbiBpdCBoYXMgbmV2ZXJcbiAqICAgYmVlbiB3cml0dGVuLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgb2JzaWRpYW4tZGV2LXV0aWxzL3BhcmFtcy1vcHRpb25zLW5hbWUtbWF0Y2ggLS0gUGVybWFuZW50OiBgRGV2aWNlU2V0dGluZ1BhcmFtc2AgaXMgb25lIGJhZyBzaGFyZWQgYnkgdGhlIHJlYWQgYW5kIGRlbGV0ZSBoZWxwZXJzLCBzbyBubyBwZXItb3duZXIgbmFtZSBjYW4gc2F0aXNmeSBib3RoLlxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWREZXZpY2VTZXR0aW5nKHBhcmFtczogRGV2aWNlU2V0dGluZ1BhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5BZGJUZXh0KHtcbiAgICBjb21tYW5kQXJndW1lbnRzOiBidWlsZERldmljZVNldHRpbmdzQ29tbWFuZEFyZ3VtZW50cyh7XG4gICAgICBuYW1lOiBwYXJhbXMubmFtZSxcbiAgICAgIC4uLihwYXJhbXMubmFtZXNwYWNlICE9PSB1bmRlZmluZWQgJiYgeyBuYW1lc3BhY2U6IHBhcmFtcy5uYW1lc3BhY2UgfSksXG4gICAgICB2ZXJiOiBEZXZpY2VTZXR0aW5nVmVyYi5HZXRcbiAgICB9KSxcbiAgICBkZXZpY2VJZDogcGFyYW1zLmRldmljZUlkXG4gIH0pO1xufVxuXG4vKipcbiAqIFBlcm1pdHMgdGhlIG9uLXNjcmVlbiBrZXlib2FyZCBmb3IgdGhlIGR1cmF0aW9uIG9mIGEgY2FsbGJhY2ssIHRoZW4gcmVzdG9yZXMgdGhlIGRldmljZSBleGFjdGx5LlxuICpcbiAqIFRoZSByZXN0b3JlIHJ1bnMgd2hldGhlciB0aGUgY2FsbGJhY2sgc3VjY2VlZGVkIG9yIHRocmV3IFx1MjAxNCBhIHN1aXRlIHRoYXQgZGllcyBtaWQtY2FwdHVyZSBtdXN0IG5vdCBsZWF2ZVxuICogdGhlIGRldmljZSBjb25maWd1cmVkIGRpZmZlcmVudGx5IHRoYW4gaXQgZm91bmQgaXQuXG4gKlxuICogQHR5cGVQYXJhbSBUIC0gV2hhdCB0aGUgd3JhcHBlZCB3b3JrIHJldHVybnMuXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGRldmljZSBhbmQgdGhlIHdvcmsgdG8gcnVuLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB0byB3aGF0ZXZlciB0aGUgY2FsbGJhY2sgcmV0dXJuZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXRoU29mdEtleWJvYXJkRW5hYmxlZDxUPihwYXJhbXM6IFdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkUGFyYW1zPFQ+KTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IHNldHRpbmdQYXJhbXM6IERldmljZVNldHRpbmdQYXJhbXMgPSB7XG4gICAgZGV2aWNlSWQ6IHBhcmFtcy5kZXZpY2VJZCxcbiAgICBuYW1lOiBTT0ZUX0tFWUJPQVJEX1NFVFRJTkdfTkFNRVxuICB9O1xuXG4gIGNvbnN0IHByZXZpb3VzVmFsdWUgPSBhd2FpdCByZWFkRGV2aWNlU2V0dGluZyhzZXR0aW5nUGFyYW1zKTtcbiAgYXdhaXQgd3JpdGVEZXZpY2VTZXR0aW5nKHsgLi4uc2V0dGluZ1BhcmFtcywgdmFsdWU6IFNPRlRfS0VZQk9BUkRfU0VUVElOR19PTiB9KTtcblxuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBwYXJhbXMuY2FsbGJhY2soKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBjb25zdCByZXN0b3JlID0gcmVzb2x2ZURldmljZVNldHRpbmdSZXN0b3JlKHByZXZpb3VzVmFsdWUpO1xuICAgIGlmIChyZXN0b3JlLmtpbmQgPT09IERldmljZVNldHRpbmdSZXN0b3JlS2luZC5EZWxldGUpIHtcbiAgICAgIGF3YWl0IGRlbGV0ZURldmljZVNldHRpbmcoc2V0dGluZ1BhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IHdyaXRlRGV2aWNlU2V0dGluZyh7IC4uLnNldHRpbmdQYXJhbXMsIHZhbHVlOiByZXN0b3JlLnZhbHVlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFdyaXRlcyBhIGRldmljZSBzZXR0aW5nLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZGV2aWNlLCB0aGUgc2V0dGluZywgaXRzIG5hbWVzcGFjZSBhbmQgdGhlIHZhbHVlIHRvIHdyaXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBzZXR0aW5nIGlzIHdyaXR0ZW4uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cml0ZURldmljZVNldHRpbmcocGFyYW1zOiBXcml0ZURldmljZVNldHRpbmdQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcnVuQWRiVGV4dCh7XG4gICAgY29tbWFuZEFyZ3VtZW50czogYnVpbGREZXZpY2VTZXR0aW5nc0NvbW1hbmRBcmd1bWVudHMoe1xuICAgICAgbmFtZTogcGFyYW1zLm5hbWUsXG4gICAgICAuLi4ocGFyYW1zLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkICYmIHsgbmFtZXNwYWNlOiBwYXJhbXMubmFtZXNwYWNlIH0pLFxuICAgICAgdmFsdWU6IHBhcmFtcy52YWx1ZSxcbiAgICAgIHZlcmI6IERldmljZVNldHRpbmdWZXJiLlB1dFxuICAgIH0pLFxuICAgIGRldmljZUlkOiBwYXJhbXMuZGV2aWNlSWRcbiAgfSk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiQUFzQkEsU0FBUyxrQkFBa0I7QUFDM0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUDtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQXNEUCxNQUFNLDZCQUE2QjtBQUVuQyxNQUFNLDJCQUEyQjtBQVNqQyxlQUFzQixvQkFBb0IsUUFBNEM7QUFDcEYsUUFBTSxXQUFXO0FBQUEsSUFDZixrQkFBa0Isb0NBQW9DO0FBQUEsTUFDcEQsTUFBTSxPQUFPO0FBQUEsTUFDYixHQUFJLE9BQU8sY0FBYyxVQUFhLEVBQUUsV0FBVyxPQUFPLFVBQVU7QUFBQSxNQUNwRSxNQUFNLGtCQUFrQjtBQUFBLElBQzFCLENBQUM7QUFBQSxJQUNELFVBQVUsT0FBTztBQUFBLEVBQ25CLENBQUM7QUFDSDtBQVVBLGVBQXNCLGtCQUFrQixRQUE4QztBQUNwRixTQUFPLE1BQU0sV0FBVztBQUFBLElBQ3RCLGtCQUFrQixvQ0FBb0M7QUFBQSxNQUNwRCxNQUFNLE9BQU87QUFBQSxNQUNiLEdBQUksT0FBTyxjQUFjLFVBQWEsRUFBRSxXQUFXLE9BQU8sVUFBVTtBQUFBLE1BQ3BFLE1BQU0sa0JBQWtCO0FBQUEsSUFDMUIsQ0FBQztBQUFBLElBQ0QsVUFBVSxPQUFPO0FBQUEsRUFDbkIsQ0FBQztBQUNIO0FBWUEsZUFBc0Isd0JBQTJCLFFBQXNEO0FBQ3JHLFFBQU0sZ0JBQXFDO0FBQUEsSUFDekMsVUFBVSxPQUFPO0FBQUEsSUFDakIsTUFBTTtBQUFBLEVBQ1I7QUFFQSxRQUFNLGdCQUFnQixNQUFNLGtCQUFrQixhQUFhO0FBQzNELFFBQU0sbUJBQW1CLEVBQUUsR0FBRyxlQUFlLE9BQU8seUJBQXlCLENBQUM7QUFFOUUsTUFBSTtBQUNGLFdBQU8sTUFBTSxPQUFPLFNBQVM7QUFBQSxFQUMvQixVQUFFO0FBQ0EsVUFBTSxVQUFVLDRCQUE0QixhQUFhO0FBQ3pELFFBQUksUUFBUSxTQUFTLHlCQUF5QixRQUFRO0FBQ3BELFlBQU0sb0JBQW9CLGFBQWE7QUFBQSxJQUN6QyxPQUFPO0FBQ0wsWUFBTSxtQkFBbUIsRUFBRSxHQUFHLGVBQWUsT0FBTyxRQUFRLE1BQU0sQ0FBQztBQUFBLElBQ3JFO0FBQUEsRUFDRjtBQUNGO0FBUUEsZUFBc0IsbUJBQW1CLFFBQWlEO0FBQ3hGLFFBQU0sV0FBVztBQUFBLElBQ2Ysa0JBQWtCLG9DQUFvQztBQUFBLE1BQ3BELE1BQU0sT0FBTztBQUFBLE1BQ2IsR0FBSSxPQUFPLGNBQWMsVUFBYSxFQUFFLFdBQVcsT0FBTyxVQUFVO0FBQUEsTUFDcEUsT0FBTyxPQUFPO0FBQUEsTUFDZCxNQUFNLGtCQUFrQjtBQUFBLElBQzFCLENBQUM7QUFBQSxJQUNELFVBQVUsT0FBTztBQUFBLEVBQ25CLENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFtdCn0K
67
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RldmljZS1zZXR0aW5ncy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJlYWRzIGFuZCB3cml0ZXMgQW5kcm9pZCBkZXZpY2Ugc2V0dGluZ3MgXHUyMDE0IGFuZCB3cmFwcyB0aGUgb25lIHNldHRpbmcgYVxuICogc2NyZWVuc2hvdCBzdWl0ZSBoYXMgdG8gY2hhbmdlLlxuICpcbiAqIFRoZSBzY3JlZW5zaG90IEFWRHMgYXJlIGJ1aWx0IGBody5rZXlib2FyZD15ZXNgLCBzbyBBbmRyb2lkIHN1cHByZXNzZXMgdGhlXG4gKiBvbi1zY3JlZW4ga2V5Ym9hcmQgZXZlbiB3aGVyZSB0aGUgcGFnZSBhc2tzIGZvciBvbmUuIGBzaG93X2ltZV93aXRoX2hhcmRfa2V5Ym9hcmRgXG4gKiBpcyB3aGF0IHR1cm5zIGl0IGJhY2sgb24uIHtAbGluayB3aXRoU29mdEtleWJvYXJkRW5hYmxlZH0gZmxpcHMgaXQsIHJ1bnMgdGhlXG4gKiB3b3JrLCBhbmQgcHV0cyB0aGUgZGV2aWNlIGJhY2sgZXhhY3RseSBhcyBpdCBmb3VuZCBpdCBcdTIwMTQgaW5jbHVkaW5nIHJlc3RvcmluZyBhXG4gKiBzZXR0aW5nIHRoYXQgaGFkIG5ldmVyIGJlZW4gd3JpdHRlbiwgd2hpY2ggdGFrZXMgYSBkZWxldGUgcmF0aGVyIHRoYW4gYSB3cml0ZVxuICogKHNlZSBgZGV2aWNlLXNldHRpbmctcmVzdG9yZWApLlxuICpcbiAqIEV2ZXJ5IGZ1bmN0aW9uIGhlcmUgc2hlbGxzIG91dCwgc28gdGhlIHdob2xlIG1vZHVsZSBpcyBpbnRlZ3JhdGlvbi10aW1lIGNvZGU7XG4gKiB0aGUgcmVzdG9yZSBkZWNpc2lvbiBhbmQgdGhlIGFyZ3VtZW50IGxpc3QgaXQgZGVwZW5kcyBvbiBhcmUgdW5pdC10ZXN0ZWQgaW5cbiAqIHRoZWlyIG93biBtb2R1bGVzLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgKHNoZWxscyBvdXQgdG8gYSByZWFsIGRldmljZSkgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgRGV2aWNlU2V0dGluZ05hbWVzcGFjZSB9IGZyb20gJy4vZGV2aWNlLXNldHRpbmdzLWNvbW1hbmQubWpzJztcblxuaW1wb3J0IHsgcnVuQWRiVGV4dCB9IGZyb20gJy4vYWRiLm1qcyc7XG5pbXBvcnQge1xuICBEZXZpY2VTZXR0aW5nUmVzdG9yZUtpbmQsXG4gIHJlc29sdmVEZXZpY2VTZXR0aW5nUmVzdG9yZVxufSBmcm9tICcuL2RldmljZS1zZXR0aW5nLXJlc3RvcmUubWpzJztcbmltcG9ydCB7XG4gIGJ1aWxkRGV2aWNlU2V0dGluZ3NDb21tYW5kQXJndW1lbnRzLFxuICBEZXZpY2VTZXR0aW5nVmVyYlxufSBmcm9tICcuL2RldmljZS1zZXR0aW5ncy1jb21tYW5kLm1qcyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGRlbGV0ZURldmljZVNldHRpbmd9IGFuZCB7QGxpbmsgcmVhZERldmljZVNldHRpbmd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIERldmljZVNldHRpbmdQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGRldmljZSB0byBhZGRyZXNzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNldHRpbmcncyBuYW1lIHdpdGhpbiB7QGxpbmsgbmFtZXNwYWNlfSwgZS5nLiBgc2hvd19pbWVfd2l0aF9oYXJkX2tleWJvYXJkYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNldHRpbmdzIG5hbWVzcGFjZSB0aGUgbmFtZSBsaXZlcyBpbi5cbiAgICpcbiAgICogQGRlZmF1bHQge0BsaW5rIERldmljZVNldHRpbmdOYW1lc3BhY2UuU2VjdXJlfVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZXNwYWNlPzogRGV2aWNlU2V0dGluZ05hbWVzcGFjZTtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgd2l0aFNvZnRLZXlib2FyZEVuYWJsZWR9LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFdoYXQgdGhlIHdyYXBwZWQgd29yayByZXR1cm5zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFdpdGhTb2Z0S2V5Ym9hcmRFbmFibGVkUGFyYW1zPFQ+IHtcbiAgLyoqXG4gICAqIFRoZSB3b3JrIHRvIHJ1biB3aGlsZSB0aGUgb24tc2NyZWVuIGtleWJvYXJkIGlzIHBlcm1pdHRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGNhbGxiYWNrOiAodGhpczogdm9pZCkgPT4gUHJvbWlzZTxUPjtcblxuICAvKipcbiAgICogVGhlIGRldmljZSB0byBhZGRyZXNzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGV2aWNlSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgd3JpdGVEZXZpY2VTZXR0aW5nfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBXcml0ZURldmljZVNldHRpbmdQYXJhbXMgZXh0ZW5kcyBEZXZpY2VTZXR0aW5nUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSB0byB3cml0ZS5cbiAgICovXG4gIHJlYWRvbmx5IHZhbHVlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHNldHRpbmcgZGVjaWRpbmcgd2hldGhlciBBbmRyb2lkIGRyYXdzIGEga2V5Ym9hcmQgd2hpbGUgYSBoYXJkd2FyZSBvbmUgaXMgYXR0YWNoZWQuXG4gKi9cbmNvbnN0IFNPRlRfS0VZQk9BUkRfU0VUVElOR19OQU1FID0gJ3Nob3dfaW1lX3dpdGhfaGFyZF9rZXlib2FyZCc7XG5cbmNvbnN0IFNPRlRfS0VZQk9BUkRfU0VUVElOR19PTiA9ICcxJztcblxuLyoqXG4gKiBDbGVhcnMgYSBkZXZpY2Ugc2V0dGluZywgcmV0dXJuaW5nIGl0IHRvIG5ldmVyLWhhdmluZy1iZWVuLXdyaXR0ZW4uXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBkZXZpY2UsIHRoZSBzZXR0aW5nIGFuZCBpdHMgbmFtZXNwYWNlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyBvbmNlIHRoZSBzZXR0aW5nIGlzIGdvbmUuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBvYnNpZGlhbi1kZXYtdXRpbHMvcGFyYW1zLW9wdGlvbnMtbmFtZS1tYXRjaCAtLSBQZXJtYW5lbnQ6IGBEZXZpY2VTZXR0aW5nUGFyYW1zYCBpcyBvbmUgYmFnIHNoYXJlZCBieSB0aGUgcmVhZCBhbmQgZGVsZXRlIGhlbHBlcnMsIHNvIG5vIHBlci1vd25lciBuYW1lIGNhbiBzYXRpc2Z5IGJvdGguXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZGVsZXRlRGV2aWNlU2V0dGluZyhwYXJhbXM6IERldmljZVNldHRpbmdQYXJhbXMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgcnVuQWRiVGV4dCh7XG4gICAgY29tbWFuZEFyZ3VtZW50czogYnVpbGREZXZpY2VTZXR0aW5nc0NvbW1hbmRBcmd1bWVudHMoe1xuICAgICAgbmFtZTogcGFyYW1zLm5hbWUsXG4gICAgICAuLi4ocGFyYW1zLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkICYmIHsgbmFtZXNwYWNlOiBwYXJhbXMubmFtZXNwYWNlIH0pLFxuICAgICAgdmVyYjogRGV2aWNlU2V0dGluZ1ZlcmIuRGVsZXRlXG4gICAgfSksXG4gICAgZGV2aWNlSWQ6IHBhcmFtcy5kZXZpY2VJZFxuICB9KTtcbn1cblxuLyoqXG4gKiBSZWFkcyBhIGRldmljZSBzZXR0aW5nLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgZGV2aWNlLCB0aGUgc2V0dGluZyBhbmQgaXRzIG5hbWVzcGFjZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIHNldHRpbmcncyB2YWx1ZSwgb3IgdGhlIGxpdGVyYWwgYG51bGxgIHdoZW4gaXQgaGFzIG5ldmVyXG4gKiAgIGJlZW4gd3JpdHRlbi5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG9ic2lkaWFuLWRldi11dGlscy9wYXJhbXMtb3B0aW9ucy1uYW1lLW1hdGNoIC0tIFBlcm1hbmVudDogYERldmljZVNldHRpbmdQYXJhbXNgIGlzIG9uZSBiYWcgc2hhcmVkIGJ5IHRoZSByZWFkIGFuZCBkZWxldGUgaGVscGVycywgc28gbm8gcGVyLW93bmVyIG5hbWUgY2FuIHNhdGlzZnkgYm90aC5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkRGV2aWNlU2V0dGluZyhwYXJhbXM6IERldmljZVNldHRpbmdQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQWRiVGV4dCh7XG4gICAgY29tbWFuZEFyZ3VtZW50czogYnVpbGREZXZpY2VTZXR0aW5nc0NvbW1hbmRBcmd1bWVudHMoe1xuICAgICAgbmFtZTogcGFyYW1zLm5hbWUsXG4gICAgICAuLi4ocGFyYW1zLm5hbWVzcGFjZSAhPT0gdW5kZWZpbmVkICYmIHsgbmFtZXNwYWNlOiBwYXJhbXMubmFtZXNwYWNlIH0pLFxuICAgICAgdmVyYjogRGV2aWNlU2V0dGluZ1ZlcmIuR2V0XG4gICAgfSksXG4gICAgZGV2aWNlSWQ6IHBhcmFtcy5kZXZpY2VJZFxuICB9KTtcbn1cblxuLyoqXG4gKiBQZXJtaXRzIHRoZSBvbi1zY3JlZW4ga2V5Ym9hcmQgZm9yIHRoZSBkdXJhdGlvbiBvZiBhIGNhbGxiYWNrLCB0aGVuIHJlc3RvcmVzIHRoZSBkZXZpY2UgZXhhY3RseS5cbiAqXG4gKiBUaGUgcmVzdG9yZSBydW5zIHdoZXRoZXIgdGhlIGNhbGxiYWNrIHN1Y2NlZWRlZCBvciB0aHJldyBcdTIwMTQgYSBzdWl0ZSB0aGF0IGRpZXMgbWlkLWNhcHR1cmUgbXVzdCBub3QgbGVhdmVcbiAqIHRoZSBkZXZpY2UgY29uZmlndXJlZCBkaWZmZXJlbnRseSB0aGFuIGl0IGZvdW5kIGl0LlxuICpcbiAqIEB0eXBlUGFyYW0gVCAtIFdoYXQgdGhlIHdyYXBwZWQgd29yayByZXR1cm5zLlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBkZXZpY2UgYW5kIHRoZSB3b3JrIHRvIHJ1bi5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gd2hhdGV2ZXIgdGhlIGNhbGxiYWNrIHJldHVybmVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2l0aFNvZnRLZXlib2FyZEVuYWJsZWQ8VD4ocGFyYW1zOiBXaXRoU29mdEtleWJvYXJkRW5hYmxlZFBhcmFtczxUPik6IFByb21pc2U8VD4ge1xuICBjb25zdCBzZXR0aW5nUGFyYW1zOiBEZXZpY2VTZXR0aW5nUGFyYW1zID0ge1xuICAgIGRldmljZUlkOiBwYXJhbXMuZGV2aWNlSWQsXG4gICAgbmFtZTogU09GVF9LRVlCT0FSRF9TRVRUSU5HX05BTUVcbiAgfTtcblxuICBjb25zdCBwcmV2aW91c1ZhbHVlID0gYXdhaXQgcmVhZERldmljZVNldHRpbmcoc2V0dGluZ1BhcmFtcyk7XG4gIGF3YWl0IHdyaXRlRGV2aWNlU2V0dGluZyh7IC4uLnNldHRpbmdQYXJhbXMsIHZhbHVlOiBTT0ZUX0tFWUJPQVJEX1NFVFRJTkdfT04gfSk7XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgcGFyYW1zLmNhbGxiYWNrKCk7XG4gIH0gZmluYWxseSB7XG4gICAgY29uc3QgcmVzdG9yZSA9IHJlc29sdmVEZXZpY2VTZXR0aW5nUmVzdG9yZShwcmV2aW91c1ZhbHVlKTtcbiAgICBpZiAocmVzdG9yZS5raW5kID09PSBEZXZpY2VTZXR0aW5nUmVzdG9yZUtpbmQuRGVsZXRlKSB7XG4gICAgICBhd2FpdCBkZWxldGVEZXZpY2VTZXR0aW5nKHNldHRpbmdQYXJhbXMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCB3cml0ZURldmljZVNldHRpbmcoeyAuLi5zZXR0aW5nUGFyYW1zLCB2YWx1ZTogcmVzdG9yZS52YWx1ZSB9KTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBXcml0ZXMgYSBkZXZpY2Ugc2V0dGluZy5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIGRldmljZSwgdGhlIHNldHRpbmcsIGl0cyBuYW1lc3BhY2UgYW5kIHRoZSB2YWx1ZSB0byB3cml0ZS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgb25jZSB0aGUgc2V0dGluZyBpcyB3cml0dGVuLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVEZXZpY2VTZXR0aW5nKHBhcmFtczogV3JpdGVEZXZpY2VTZXR0aW5nUGFyYW1zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHJ1bkFkYlRleHQoe1xuICAgIGNvbW1hbmRBcmd1bWVudHM6IGJ1aWxkRGV2aWNlU2V0dGluZ3NDb21tYW5kQXJndW1lbnRzKHtcbiAgICAgIG5hbWU6IHBhcmFtcy5uYW1lLFxuICAgICAgLi4uKHBhcmFtcy5uYW1lc3BhY2UgIT09IHVuZGVmaW5lZCAmJiB7IG5hbWVzcGFjZTogcGFyYW1zLm5hbWVzcGFjZSB9KSxcbiAgICAgIHZhbHVlOiBwYXJhbXMudmFsdWUsXG4gICAgICB2ZXJiOiBEZXZpY2VTZXR0aW5nVmVyYi5QdXRcbiAgICB9KSxcbiAgICBkZXZpY2VJZDogcGFyYW1zLmRldmljZUlkXG4gIH0pO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBc0JBLFNBQVMsa0JBQWtCO0FBQzNCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1A7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFzRFAsTUFBTSw2QkFBNkI7QUFFbkMsTUFBTSwyQkFBMkI7QUFTakMsZUFBc0Isb0JBQW9CLFFBQTRDO0FBQ3BGLFFBQU0sV0FBVztBQUFBLElBQ2Ysa0JBQWtCLG9DQUFvQztBQUFBLE1BQ3BELE1BQU0sT0FBTztBQUFBLE1BQ2IsR0FBSSxPQUFPLGNBQWMsVUFBYSxFQUFFLFdBQVcsT0FBTyxVQUFVO0FBQUEsTUFDcEUsTUFBTSxrQkFBa0I7QUFBQSxJQUMxQixDQUFDO0FBQUEsSUFDRCxVQUFVLE9BQU87QUFBQSxFQUNuQixDQUFDO0FBQ0g7QUFVQSxlQUFzQixrQkFBa0IsUUFBOEM7QUFDcEYsU0FBTyxNQUFNLFdBQVc7QUFBQSxJQUN0QixrQkFBa0Isb0NBQW9DO0FBQUEsTUFDcEQsTUFBTSxPQUFPO0FBQUEsTUFDYixHQUFJLE9BQU8sY0FBYyxVQUFhLEVBQUUsV0FBVyxPQUFPLFVBQVU7QUFBQSxNQUNwRSxNQUFNLGtCQUFrQjtBQUFBLElBQzFCLENBQUM7QUFBQSxJQUNELFVBQVUsT0FBTztBQUFBLEVBQ25CLENBQUM7QUFDSDtBQVlBLGVBQXNCLHdCQUEyQixRQUFzRDtBQUNyRyxRQUFNLGdCQUFxQztBQUFBLElBQ3pDLFVBQVUsT0FBTztBQUFBLElBQ2pCLE1BQU07QUFBQSxFQUNSO0FBRUEsUUFBTSxnQkFBZ0IsTUFBTSxrQkFBa0IsYUFBYTtBQUMzRCxRQUFNLG1CQUFtQixFQUFFLEdBQUcsZUFBZSxPQUFPLHlCQUF5QixDQUFDO0FBRTlFLE1BQUk7QUFDRixXQUFPLE1BQU0sT0FBTyxTQUFTO0FBQUEsRUFDL0IsVUFBRTtBQUNBLFVBQU0sVUFBVSw0QkFBNEIsYUFBYTtBQUN6RCxRQUFJLFFBQVEsU0FBUyx5QkFBeUIsUUFBUTtBQUNwRCxZQUFNLG9CQUFvQixhQUFhO0FBQUEsSUFDekMsT0FBTztBQUNMLFlBQU0sbUJBQW1CLEVBQUUsR0FBRyxlQUFlLE9BQU8sUUFBUSxNQUFNLENBQUM7QUFBQSxJQUNyRTtBQUFBLEVBQ0Y7QUFDRjtBQVFBLGVBQXNCLG1CQUFtQixRQUFpRDtBQUN4RixRQUFNLFdBQVc7QUFBQSxJQUNmLGtCQUFrQixvQ0FBb0M7QUFBQSxNQUNwRCxNQUFNLE9BQU87QUFBQSxNQUNiLEdBQUksT0FBTyxjQUFjLFVBQWEsRUFBRSxXQUFXLE9BQU8sVUFBVTtBQUFBLE1BQ3BFLE9BQU8sT0FBTztBQUFBLE1BQ2QsTUFBTSxrQkFBa0I7QUFBQSxJQUMxQixDQUFDO0FBQUEsSUFDRCxVQUFVLE9BQU87QUFBQSxFQUNuQixDQUFDO0FBQ0g7IiwKICAibmFtZXMiOiBbXQp9Cg==
@@ -125,7 +125,7 @@ export interface ResolveEmulatorReaperWatchParams {
125
125
  /**
126
126
  Whether a PID is still running.
127
127
  */
128
- checkIsPidAlive(this: void, pid: number): boolean;
128
+ readonly checkIsPidAlive: (pid: number) => boolean;
129
129
  /**
130
130
  The AVD's marker as it reads now, if any.
131
131
  */
@@ -142,7 +142,7 @@ export interface SpawnEmulatorReaperParams {
142
142
  /**
143
143
  Receives the armed / not-armed line.
144
144
  */
145
- log(this: void, message: string): void;
145
+ readonly log: (message: string) => void;
146
146
  /**
147
147
  The recorded emulator's launch time, as written into its marker.
148
148
  */
@@ -208,4 +208,4 @@ export {
208
208
  runEmulatorReaper,
209
209
  spawnEmulatorReaper
210
210
  };
211
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLXJlYXBlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFN0b3BzIGFuIGVtdWxhdG9yIHRoaXMgaGFybmVzcyBzdGFydGVkIG9uY2UgaXRzIHJ1biBpcyBnb25lIGZvciBnb29kIFx1MjAxNCB0aGVcbiAqIGNhc2Ugbm90aGluZyBlbHNlIGNvdmVycywgKipMNTYqKidzIHBhdGggQiB3aXRoIG5vIGxhdGVyIHJ1bjogdGhlIHJ1bm5lciBpc1xuICoga2lsbGVkIChTSUdLSUxMLCBUYXNrIE1hbmFnZXIsIGFuIElERSBzdG9wIGJ1dHRvbiksIG5vIHRlYXJkb3duIHJ1bnMsIGFuZCBub1xuICogb3RoZXIgQW5kcm9pZCBydW4gZXZlciBjb21lcyBhbG9uZyB0byByZWNsYWltIHRoZSBsZWZ0b3ZlciBmcm9tIGl0cyBtYXJrZXIuXG4gKiBPbiAyMDI2LTA5LTEwIGFuIGVtdWxhdG9yIGxlZnQgbGlrZSB0aGF0IGtlcHQgYG5ldHNpbWRgIHNwaW5uaW5nIGZvciBzaXggaG91cnMuXG4gKlxuICogVGhlIHJlYXBlciBpcyBhIHNtYWxsIGRldGFjaGVkIE5vZGUgcHJvY2VzcyBzcGF3bmVkIGJlc2lkZSBldmVyeSBlbXVsYXRvciB0aGVcbiAqIGhhcm5lc3Mgc3RhcnRzIG9yIHRha2VzIG92ZXIuIEl0IGhvbGRzIG5vIGhhbmRsZSB0byB0aGUgZW11bGF0b3IgYW5kIG5lZWRzXG4gKiBub25lOiB0aGUgbWFya2VyIChgZW11bGF0b3ItbWFya2VyLnRzYCkgc2F5cyB3aGF0IHRvIHN0b3AsIGFuZCB0aGUgdmVyaWZpZWRcbiAqIHN0b3AgKGBlbXVsYXRvci1yZWNsYWltLnRzYCkgaXMgdGhlIG9uZSB0aGUgcnVuJ3Mgb3duIHRlYXJkb3duIHVzZXMuXG4gKlxuICogIyMgSXQgd2F0Y2hlcyB0aGUgYGFuZHJvaWRgIHNldHVwIGxvY2ssIG5vdCB0aGUgcHJvY2VzcyB0aGF0IHN0YXJ0ZWQgaXRcbiAqXG4gKiBUaGUgcHJvY2VzcyB0aGF0IHN0YXJ0cyB0aGUgZW11bGF0b3IgaXMgbm90IGFsd2F5cyB0aGUgcnVuLiBBIHByb2plY3Qgd2l0aCBub1xuICogdHJhbnNwb3J0IGdsb2JhbCBzZXR1cCBib290cyBpdCBmcm9tIGEgKip0ZXN0IHdvcmtlcioqICgqKkw1NioqIHBhdGggQSksIGFuZFxuICogVml0ZXN0IGVuZHMgd29ya2VycyBkdXJpbmcgYSBwZXJmZWN0bHkgaGVhbHRoeSBydW4gXHUyMDE0IHNvIGEgcmVhcGVyIHRpZWQgdG8gaXRzXG4gKiBzcGF3bmVyJ3MgbGlmZXRpbWUgKHRoZSAqKkwzMyoqIGxpdmVuZXNzIHNvY2tldCwgdGhlIGZpcnN0IGlkZWEpIHdvdWxkIHN0b3BcbiAqIHRoZSBlbXVsYXRvciBtaWQtcnVuLCBvciByYWNlIHRoZSBuZXh0IHdvcmtlciB0YWtpbmcgaXQgb3Zlci4gVGhlIGBhbmRyb2lkYFxuICogc2V0dXAgbG9jayAoKipMNyoqKSBpcyBoZWxkIGJ5IHRoZSBydW4ncyBtYWluIHByb2Nlc3MgZm9yIHRoZSB3aG9sZSBydW4sIGFuZFxuICogaXRzIGhvbGRlciBiZWluZyBhbGl2ZSBpcyBleGFjdGx5IHdoYXQgXCJhbiBBbmRyb2lkIHJ1biBpcyBpbiBmbGlnaHRcIiBtZWFucy5cbiAqXG4gKiBTbyB0aGUgcmVhcGVyIHBvbGxzIHRoYXQgbG9jaywgYW5kIG9uY2UgaXQgY2FuICoqdGFrZSoqIGl0IFx1MjAxNCBubyBsaXZlIHJ1blxuICogaG9sZHMgaXQgXHUyMDE0IGl0IHN0b3BzIHRoZSBoYXJuZXNzJ3MgbGVmdG92ZXJzIHdoaWxlIGhvbGRpbmcgaXQsIHdoaWNoIGlzIHRoZVxuICogcHJlY29uZGl0aW9uIGV2ZXJ5IGxlZnRvdmVyIHN0b3AgZG9jdW1lbnRzOiBubyBydW4gY2FuIGFkb3B0IGFuIGVtdWxhdG9yIHRoYXRcbiAqIGlzIG1pZC1zaHV0ZG93bi4gVGhhdCBpcyBwcmVjaXNlbHkgd2hhdCB0aGUgbmV4dCBydW4ncyBwcmVmbGlnaHQgd291bGQgZG8sXG4gKiBkb25lIGF0IHRoZSBmaXJzdCBtb21lbnQgdGhhdCBydW4gY291bGQgaGF2ZSBkb25lIGl0LlxuICpcbiAqIEEgZGVhZCBzYW1lLWhvc3QgaG9sZGVyIGlzIGFiYW5kb25lZCBhdCBvbmNlLiBBIGxpdmUtUElEIGhvbGRlciB0aGF0IGhhcyBnb25lXG4gKiBzaWxlbnQgaXMgb25seSBhYmFuZG9uZWQgYWZ0ZXJcbiAqIHtAbGluayBFTVVMQVRPUl9SRUFQRVJfTE9DS19TSUxFTkNFX0lOX01JTExJU0VDT05EU30sIGZhciB3aWRlciB0aGFuIHRoZVxuICogdHdvIG1pbnV0ZXMgYSB3YWl0aW5nIHJ1biBzdGVhbHMgb246IGEgcmVhcGVyIGlzIGFsd2F5cyB3YWl0aW5nLCBzbyBhdCB0d29cbiAqIG1pbnV0ZXMgYSBsaXZlIHJ1biB0aGF0IGJsb2NrZWQgaXRzIGV2ZW50IGxvb3Agd291bGQgbG9zZSBpdHMgZW11bGF0b3IuXG4gKlxuICogIyMgRmFpbC1vcGVuLCBsaWtlIHRoZSByZW5kZXJlciB3YXRjaGRvZ1xuICpcbiAqIEEgcmVhcGVyIGlzIGFybWVkIG9ubHkgd2hlbiBhIGxpdmUgcnVuIGhvbGRzIHRoZSBsb2NrIGF0IHRoZSBtb21lbnQgdGhlXG4gKiBlbXVsYXRvciBpcyByZWNvcmRlZC4gQSBydW4gdGhhdCB0YWtlcyBubyBsb2NrIFx1MjAxNCBhIGhhbmQtd2lyZWRcbiAqIGBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9uc2AgXHUyMDE0IGdldHMgbm9uZSwgYW5kIHNheXMgc28sIHJhdGhlciB0aGFuIGEgcmVhcGVyXG4gKiB0aGF0IHdvdWxkIHJlYWQgaXRzIG1pc3NpbmcgbG9jayBhcyBcInRoZSBydW4gaXMgb3ZlclwiIGFuZCBzdG9wIGFuIGVtdWxhdG9yXG4gKiBzb21lYm9keSBpcyB1c2luZy4gQSBzcGF3biB0aGF0IGZhaWxzIGlzIGxvZ2dlZCBhbmQgbmV2ZXIgZmFpbHMgdGhlIGxhdW5jaC5cbiAqXG4gKiAjIyBIb3cgaXQgcnVuc1xuICpcbiAqIGBwcm9jZXNzLmV4ZWNQYXRoIC1lIDxib290c3RyYXA+IDx0aGlzIG1vZHVsZSdzIFVSTD4gPGF2ZE5hbWU+IDxzdGFydGVkQXQ+YDpcbiAqIHRoZSBib290c3RyYXAgYGltcG9ydCgpYHMgdGhpcyB2ZXJ5IG1vZHVsZSBhbmQgY2FsbHMge0BsaW5rIHJ1bkVtdWxhdG9yUmVhcGVyfS5cbiAqIFRoZSBVUkwgaXMgdGhlIGJ1aWx0IGAubWpzYCAvIGAuY2pzYCBpbiBhIGNvbnN1bWVyJ3MgaW5zdGFsbCwgYW5kIHRoZSBgLnRzYFxuICogc291cmNlIGluIHRoaXMgcmVwbydzIG93biBzdWl0ZXMsIHdoaWNoIE5vZGUncyB0eXBlIHN0cmlwcGluZyBydW5zIGFzLWlzIFx1MjAxNCBzb1xuICogbm90aGluZyB0aGlzIG1vZHVsZSBpbXBvcnRzIG1heSByZWFjaCBhIG1vZHVsZSB0aGF0IHJlYWRzIHRoZSBidWlsZC10aW1lXG4gKiBgT0JTSURJQU5fTUVUQURBVEFgIGdsb2JhbC4gSXRzIHN0ZG91dC9zdGRlcnIgZ28gdG8gYSBwZXItQVZEIGxvZyBmaWxlLCBjYXBwZWRcbiAqIGF0IHtAbGluayBFTVVMQVRPUl9SRUFQRVJfTE9HX01BWF9TSVpFX0lOX0JZVEVTfSwgc28gdGhlIHZlcmRpY3QgbGluZXMgdGhlIHN0b3BcbiAqIHByaW50cyBhcmUgb24gcmVjb3JkIGV2ZW4gdGhvdWdoIG5vIHRlcm1pbmFsIGlzIGxlZnQgdG8gc2hvdyB0aGVtLlxuICpcbiAqICMjIEl0IGlzIHN0YXJ0ZWQgdGhyb3VnaCBhIHJlbGF5LCBzbyBhIHByb2Nlc3MtdHJlZSBraWxsIGNhbm5vdCB0YWtlIGl0XG4gKlxuICogYGRldGFjaGVkYCBkb2VzIG5vdCByZXBhcmVudCBvbiBXaW5kb3dzOiBhIGNoaWxkIHNwYXduZWQgc3RyYWlnaHQgZnJvbSB0aGUgcnVuXG4gKiBzdGF5cyBpbiB0aGUgcnVuJ3MgcHJvY2VzcyB0cmVlLCBzbyB0aGUga2lsbCBzaGFwZXMgdGhhdCB3YWxrIHRoYXQgdHJlZSB0YWtlXG4gKiB0aGUgc2FmZXR5IG5ldCBhbG9uZyB3aXRoIHRoZSB0aGluZyBpdCB3YXMgZ3VhcmRpbmcgXHUyMDE0IFRhc2sgTWFuYWdlcidzICpFbmRcbiAqIHRhc2sqLCBgdGFza2tpbGwgL1RgLCBhbiBJREUgc3RvcCBidXR0b24sIGEgYFBhcmVudFByb2Nlc3NJZGAgZGVzY2VuZGFudFxuICogc3dlZXAuIE1lYXN1cmVkIG9uIDIwMjYtMDktMTE6IGEgcmVhcGVyIGRpZWQgd2l0aCB0aGUgcnVuIGl0IHdhcyB3YXRjaGluZywgYW5kXG4gKiB0aGUgZW11bGF0b3IgaXQgd291bGQgaGF2ZSBzdG9wcGVkIGlkbGVkIG9uIGZvciB0ZW4gbWludXRlcy5cbiAqXG4gKiBTbyB0aGUgc3Bhd24gZ29lcyB0aHJvdWdoIGEgcmVsYXkgXHUyMDE0IHtAbGluayBidWlsZEVtdWxhdG9yUmVhcGVyUmVsYXlCb290c3RyYXB9IFx1MjAxNFxuICogd2hpY2ggc3RhcnRzIHRoZSByZWFwZXIgYW5kIGV4aXRzIGF0IG9uY2UuIEJ5IHRoZSB0aW1lIGFueSB0cmVlLXdhbGtlciB0YWtlc1xuICogaXRzIHNuYXBzaG90IHRoZSByZWxheSBpcyBnb25lLCBzbyB0aGVyZSBpcyBubyBlZGdlIGZyb20gdGhlIHJ1biB0byB0aGUgcmVhcGVyXG4gKiBsZWZ0IHRvIGZvbGxvdy4gVGhpcyBpcyB0aGUgZG91YmxlLWZvcmsgaWRpb20sIGFuZCBpdCBob2xkcyBvbiBQT1NJWCBmb3IgdGhlXG4gKiBzYW1lIHJlYXNvbjogb25jZSB0aGUgcmVsYXkgZXhpdHMsIHRoZSByZWFwZXIgYmVsb25ncyB0byBgaW5pdGAuXG4gKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgY2xvc2VTeW5jLFxuICBta2RpclN5bmMsXG4gIG9wZW5TeW5jLFxuICBzdGF0U3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ25vZGU6dXJsJztcblxuaW1wb3J0IHR5cGUgeyBFbXVsYXRvck1hcmtlciB9IGZyb20gJy4vZW11bGF0b3ItbWFya2VyLm1qcyc7XG5pbXBvcnQgdHlwZSB7IFNldHVwTG9jayB9IGZyb20gJy4vc2V0dXAtbG9jay5tanMnO1xuXG5pbXBvcnQgeyByZWFkRW11bGF0b3JNYXJrZXIgfSBmcm9tICcuL2VtdWxhdG9yLW1hcmtlci5tanMnO1xuaW1wb3J0IHsgRW11bGF0b3JSZWNsYWltZXIgfSBmcm9tICcuL2VtdWxhdG9yLXJlY2xhaW0ubWpzJztcbmltcG9ydCB7IEhBUk5FU1NfVEVNUF9ESVJfTkFNRSB9IGZyb20gJy4vbGVmdG92ZXItY2xlYW51cC5tanMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cubWpzJztcbmltcG9ydCB7IGNoZWNrSXNQcm9jZXNzQWxpdmUgfSBmcm9tICcuL3Byb2Nlc3MtbGl2ZW5lc3MubWpzJztcbmltcG9ydCB7XG4gIEFORFJPSURfU0VUVVBfTE9DS19TQ09QRSxcbiAgY2hlY2tJc1NldHVwTG9ja0hlbGQsXG4gIHRyeUFjcXVpcmVTZXR1cExvY2tcbn0gZnJvbSAnLi9zZXR1cC1sb2NrLm1qcyc7XG5cbi8qKlxuICogSG93IG9mdGVuIHRoZSByZWFwZXIgbG9va3MgYXQgdGhlIG1hcmtlciBhbmQgdGhlIGxvY2sgXHUyMDE0IHRoZSBsb2NrJ3Mgb3duXG4gKiBoZWFydGJlYXQgaW50ZXJ2YWwsIHNvIGEga2lsbGVkIHJ1biBpcyBub3RpY2VkIHdpdGhpbiBvbmUgYmVhdC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVNVUxBVE9SX1JFQVBFUl9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDA7XG5cbi8qKlxuICogSG93IGxvbmcgYSBzYW1lLWhvc3QgbG9jayBob2xkZXIgd2hvc2UgUElEIGlzIHN0aWxsIGFsaXZlIG1heSBzdGF5IHNpbGVudFxuICogYmVmb3JlIHRoZSByZWFwZXIgdHJlYXRzIGl0cyBydW4gYXMgZ29uZTogMzAgbWludXRlcywgdGhlIHRocmVzaG9sZCB0aGUgbG9ja1xuICogYWxyZWFkeSB1c2VzIGFjcm9zcyBob3N0cy4gT25seSBhIHJlY3ljbGVkIFBJRCBzaG91bGQgZXZlciByZWFjaCBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVNVUxBVE9SX1JFQVBFUl9MT0NLX1NJTEVOQ0VfSU5fTUlMTElTRUNPTkRTID0gMV84MDBfMDAwO1xuXG4vKipcbiAqIFRoZSBzaXplIHBhc3Qgd2hpY2ggdGhlIHJlYXBlciBsb2cgaXMgc3RhcnRlZCBhZnJlc2ggcmF0aGVyIHRoYW4gYXBwZW5kZWQgdG8uXG4gKi9cbmV4cG9ydCBjb25zdCBFTVVMQVRPUl9SRUFQRVJfTE9HX01BWF9TSVpFX0lOX0JZVEVTID0gMV8wNDhfNTc2O1xuXG4vKipcbiAqIFRoZSBleHBvcnQgdGhlIGJvb3RzdHJhcCBjYWxscy4gTmFtZWQgaGVyZSBzbyB0aGUgYm9vdHN0cmFwIGFuZCB0aGUgZXhwb3J0XG4gKiBjYW5ub3QgZHJpZnQgYXBhcnQuXG4gKi9cbmV4cG9ydCBjb25zdCBFTVVMQVRPUl9SRUFQRVJfRU5UUllfTkFNRSA9ICdydW5FbXVsYXRvclJlYXBlcic7XG5cbmNvbnN0IExPQ0tfTEFCRUwgPSAnZW11bGF0b3ItcmVhcGVyJztcbmNvbnN0IFJFQVBFUl9MT0dfRklMRV9TVUZGSVggPSAnLmVtdWxhdG9yLXJlYXBlci5sb2cnO1xuXG4vKipcbiAqIFdoYXQgdGhlIHJlYXBlciB3YXRjaGVzIGZvcjogdGhlIGVtdWxhdG9yIGEgbWFya2VyIHJlY29yZGVkIHdoZW4gaXQgd2FzIGFybWVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtdWxhdG9yUmVhcGVyQXJndW1lbnRzIHtcbiAgLyoqXG4gIFRoZSBBVkQgd2hvc2UgbWFya2VyIGl0IHdhdGNoZXMuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhlIHdhdGNoZWQgZW11bGF0b3Igd2FzIGxhdW5jaGVkLiBBIHRha2VvdmVyIGtlZXBzIGl0LCBzbyBpdCBuYW1lcyBvbmVcbiAgICogZW11bGF0b3IgYWNyb3NzIGV2ZXJ5IHJ1biB0aGF0IG93bnMgaXQsIGFuZCB0ZWxscyBhIGxhdGVyIGVtdWxhdG9yIG9mIHRoZVxuICAgKiBzYW1lIEFWRCBhcGFydC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogV2hhdCB0aGUgbWFya2VyIHNheXMgdGhlIHJlYXBlciBzaG91bGQgZG8gbmV4dC5cbiAqXG4gKiAtIGBlbXVsYXRvci1zdG9wcGVkYCBcdTIwMTQgdGhlIG1hcmtlciBpcyBnb25lLCBvciBub25lIG9mIGl0cyBQSURzIGlzIGFsaXZlOiB0aGVcbiAqICAgZW11bGF0b3Igd2FzIHN0b3BwZWQsIHNvIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byB3YXRjaC5cbiAqIC0gYHN1cGVyc2VkZWRgIFx1MjAxNCB0aGUgbWFya2VyIG5vdyByZWNvcmRzIGEgZGlmZmVyZW50IGVtdWxhdG9yIG9mIHRoZSBzYW1lIEFWRCxcbiAqICAgd2hpY2ggaGFzIGl0cyBvd24gcmVhcGVyLlxuICogLSBgd2F0Y2hgIFx1MjAxNCB0aGUgZW11bGF0b3IgaXMgc3RpbGwgdXAuXG4gKi9cbmV4cG9ydCB0eXBlIEVtdWxhdG9yUmVhcGVyV2F0Y2hWZXJkaWN0ID0gJ2VtdWxhdG9yLXN0b3BwZWQnIHwgJ3N1cGVyc2VkZWQnIHwgJ3dhdGNoJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZUVtdWxhdG9yUmVhcGVyV2F0Y2h9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVFbXVsYXRvclJlYXBlcldhdGNoUGFyYW1zIHtcbiAgLyoqXG4gIFRoZSBsYXVuY2ggdGltZSBvZiB0aGUgZW11bGF0b3IgdGhpcyByZWFwZXIgd2FzIGFybWVkIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IGFybWVkU3RhcnRlZEF0SW5NaWxsaXNlY29uZHM6IG51bWJlcjtcblxuICAvKipcbiAgV2hldGhlciBhIFBJRCBpcyBzdGlsbCBydW5uaW5nLlxuICAgKi9cbiAgY2hlY2tJc1BpZEFsaXZlKHRoaXM6IHZvaWQsIHBpZDogbnVtYmVyKTogYm9vbGVhbjtcblxuICAvKipcbiAgVGhlIEFWRCdzIG1hcmtlciBhcyBpdCByZWFkcyBub3csIGlmIGFueS5cbiAgICovXG4gIHJlYWRvbmx5IG1hcmtlcjogRW11bGF0b3JNYXJrZXIgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIHNwYXduRW11bGF0b3JSZWFwZXJ9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNwYXduRW11bGF0b3JSZWFwZXJQYXJhbXMge1xuICAvKipcbiAgVGhlIEFWRCB3aG9zZSBlbXVsYXRvciB3YXMganVzdCByZWNvcmRlZC5cbiAgICovXG4gIHJlYWRvbmx5IGF2ZE5hbWU6IHN0cmluZztcblxuICAvKipcbiAgUmVjZWl2ZXMgdGhlIGFybWVkIC8gbm90LWFybWVkIGxpbmUuXG4gICAqL1xuICBsb2codGhpczogdm9pZCwgbWVzc2FnZTogc3RyaW5nKTogdm9pZDtcblxuICAvKipcbiAgVGhlIHJlY29yZGVkIGVtdWxhdG9yJ3MgbGF1bmNoIHRpbWUsIGFzIHdyaXR0ZW4gaW50byBpdHMgbWFya2VyLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhcnRlZEF0SW5NaWxsaXNlY29uZHM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBFbmNvZGVzIHRoZSByZWFwZXIncyBhcmd1bWVudHMgZm9yIGl0cyBjb21tYW5kIGxpbmUuXG4gKlxuICogQHBhcmFtIHJlYXBlckFyZ3VtZW50cyAtIFdoYXQgdGhlIHJlYXBlciB3YXRjaGVzIGZvci5cbiAqIEByZXR1cm5zIFRoZSBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCBpbiB0aGUgb3JkZXIge0BsaW5rIHBhcnNlRW11bGF0b3JSZWFwZXJBcmd1bWVudHN9IHJlYWRzIHRoZW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEVtdWxhdG9yUmVhcGVyQXJndW1lbnRzKHJlYXBlckFyZ3VtZW50czogRW11bGF0b3JSZWFwZXJBcmd1bWVudHMpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBbcmVhcGVyQXJndW1lbnRzLmF2ZE5hbWUsIFN0cmluZyhyZWFwZXJBcmd1bWVudHMuc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMpXTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHNjcmlwdCBgbm9kZSAtZWAgcnVucyB0byBzdGFydCB0aGUgcmVhcGVyLlxuICpcbiAqIEl0IGBpbXBvcnQoKWBzIHRoZSBtb2R1bGUgd2hvc2UgVVJMIGlzIGl0cyBmaXJzdCBhcmd1bWVudCBhbmQgaGFuZHMgdGhlIHJlc3RcbiAqIHRvIHtAbGluayBydW5FbXVsYXRvclJlYXBlcn0uIGBpbXBvcnQoKWAgcmF0aGVyIHRoYW4gYHJlcXVpcmVgLCBiZWNhdXNlIGl0XG4gKiBsb2FkcyBhbGwgdGhyZWUgZm9ybXMgdGhlIG1vZHVsZSBzaGlwcyBhcyBcdTIwMTQgRVNNLCBDSlMsIGFuZCB0aGlzIHJlcG8ncyBvd25cbiAqIGAudHNgIHNvdXJjZSB1bmRlciBOb2RlJ3MgdHlwZSBzdHJpcHBpbmcuIEEgQ0pTIG1vZHVsZSdzIG5hbWVkIGV4cG9ydHMgYXJlXG4gKiBmb3VuZCBieSBOb2RlJ3Mgc3RhdGljIGFuYWx5c2lzOyBgZGVmYXVsdGAgaXMgdGhlIGZhbGxiYWNrIHdoZW4gdGhleSBhcmUgbm90LlxuICpcbiAqIEByZXR1cm5zIFRoZSBzY3JpcHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEVtdWxhdG9yUmVhcGVyQm9vdHN0cmFwKCk6IHN0cmluZyB7XG4gIHJldHVybiBbXG4gICAgJ2ltcG9ydChwcm9jZXNzLmFyZ3ZbMV0pLnRoZW4oKHJlYXBlck1vZHVsZSkgPT4geycsXG4gICAgYCAgY29uc3QgcnVuID0gcmVhcGVyTW9kdWxlLiR7RU1VTEFUT1JfUkVBUEVSX0VOVFJZX05BTUV9ID8/IHJlYXBlck1vZHVsZS5kZWZhdWx0LiR7RU1VTEFUT1JfUkVBUEVSX0VOVFJZX05BTUV9O2AsXG4gICAgJyAgcmV0dXJuIHJ1bihwcm9jZXNzLmFyZ3Yuc2xpY2UoMikpOycsXG4gICAgJ30pLmNhdGNoKChlcnJvcikgPT4geycsXG4gICAgJyAgY29uc29sZS5lcnJvcihlcnJvcik7JyxcbiAgICAnICBwcm9jZXNzLmV4aXRDb2RlID0gMTsnLFxuICAgICd9KTsnXG4gIF0uam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogQnVpbGRzIHRoZSBzY3JpcHQgYG5vZGUgLWVgIHJ1bnMgYXMgdGhlICoqcmVsYXkqKjogaXQgc3RhcnRzIHRoZSByZWFwZXIgYW5kXG4gKiBleGl0cyBhdCBvbmNlLCBzbyB0aGUgcmVhcGVyIGlzIGxlZnQgd2l0aCBhIGRlYWQgcGFyZW50IGFuZCBubyB0cmVlLXdhbGtpbmdcbiAqIGtpbGwgb2YgdGhlIHJ1biBjYW4gcmVhY2ggaXQuIFNlZSB0aGUgcmVsYXkgc2VjdGlvbiBpbiB0aGlzIG1vZHVsZSdzIGhlYWRlclxuICogZm9yIHdoeSB0aGF0IGluZGlyZWN0aW9uIGV4aXN0cyBhdCBhbGwuXG4gKlxuICogSXRzIG93biBhcmd1bWVudHMgYXJlIHRoZSByZWFwZXIncyB3aG9sZSBjb21tYW5kIGxpbmUgXHUyMDE0IHRoZSBib290c3RyYXAgc2NyaXB0XG4gKiBmaXJzdCwgdGhlbiBldmVyeXRoaW5nIHRoYXQgYm9vdHN0cmFwIHJlYWRzIFx1MjAxNCBzbyB0aGUgcmVsYXkgbmV2ZXIgaGFzIHRvIGtub3dcbiAqIHdoYXQgYW55IG9mIHRoZW0gbWVhbi4gSXQgaGFuZHMgdGhlIHJlYXBlciBpdHMgb3duIHN0ZG91dCBhbmQgc3RkZXJyLCB3aGljaFxuICogYXJlIHRoZSBjYXBwZWQgbG9nIGZpbGUgdGhlIHNwYXduZXIgb3BlbmVkLCBzbyB0aGUgbG9nIGlzIHVuYWZmZWN0ZWQgYnkgdGhlXG4gKiBleHRyYSBob3AuXG4gKlxuICogQHJldHVybnMgVGhlIHNjcmlwdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW11bGF0b3JSZWFwZXJSZWxheUJvb3RzdHJhcCgpOiBzdHJpbmcge1xuICByZXR1cm4gW1xuICAgICdjb25zdCB7IHNwYXduIH0gPSByZXF1aXJlKFwibm9kZTpjaGlsZF9wcm9jZXNzXCIpOycsXG4gICAgJ3RyeSB7JyxcbiAgICAnICBjb25zdCBjaGlsZCA9IHNwYXduKHByb2Nlc3MuZXhlY1BhdGgsIFtcIi1lXCIsIHByb2Nlc3MuYXJndlsxXSwgLi4ucHJvY2Vzcy5hcmd2LnNsaWNlKDIpXSwgeycsXG4gICAgJyAgICBkZXRhY2hlZDogdHJ1ZSwnLFxuICAgICcgICAgc3RkaW86IFtcImlnbm9yZVwiLCAxLCAyXSwnLFxuICAgICcgICAgd2luZG93c0hpZGU6IHRydWUnLFxuICAgICcgIH0pOycsXG4gICAgJyAgY2hpbGQub25jZShcImVycm9yXCIsIChlcnJvcikgPT4geyBjb25zb2xlLmVycm9yKGVycm9yKTsgfSk7JyxcbiAgICAnICBjaGlsZC51bnJlZigpOycsXG4gICAgJ30gY2F0Y2ggKGVycm9yKSB7JyxcbiAgICAnICBjb25zb2xlLmVycm9yKGVycm9yKTsnLFxuICAgICcgIHByb2Nlc3MuZXhpdENvZGUgPSAxOycsXG4gICAgJ30nXG4gIF0uam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogRGVjb2RlcyB0aGUgcmVhcGVyJ3MgY29tbWFuZC1saW5lIGFyZ3VtZW50cy5cbiAqXG4gKiBAcGFyYW0gYXJndiAtIFRoZSBhcmd1bWVudHMgYWZ0ZXIgdGhlIG1vZHVsZSBVUkwuXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnRzLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZXkgYXJlIG5vdCB0aGUgdHdvIHtAbGluayBidWlsZEVtdWxhdG9yUmVhcGVyQXJndW1lbnRzfSB3cml0ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUVtdWxhdG9yUmVhcGVyQXJndW1lbnRzKGFyZ3Y6IHJlYWRvbmx5IHN0cmluZ1tdKTogRW11bGF0b3JSZWFwZXJBcmd1bWVudHMgfCB1bmRlZmluZWQge1xuICBjb25zdCBbYXZkTmFtZSwgc3RhcnRlZEF0VGV4dCwgLi4ucmVzdF0gPSBhcmd2O1xuICBpZiAoIWF2ZE5hbWUgfHwgc3RhcnRlZEF0VGV4dCA9PT0gdW5kZWZpbmVkIHx8IHJlc3QubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzdGFydGVkQXRJbk1pbGxpc2Vjb25kcyA9IE51bWJlcihzdGFydGVkQXRUZXh0KTtcbiAgaWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihzdGFydGVkQXRJbk1pbGxpc2Vjb25kcykgfHwgc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMgPD0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4geyBhdmROYW1lLCBzdGFydGVkQXRJbk1pbGxpc2Vjb25kcyB9O1xufVxuXG4vKipcbiAqIERlY2lkZXMgaG93IHRoZSByZWFwZXIgbG9nIGlzIG9wZW5lZCwgc28gaXQgY2FuIG5ldmVyIGdyb3cgd2l0aG91dCBib3VuZC5cbiAqXG4gKiBAcGFyYW0gc2l6ZUluQnl0ZXMgLSBUaGUgbG9nJ3MgY3VycmVudCBzaXplLCBvciBgdW5kZWZpbmVkYCB3aGVuIHRoZXJlIGlzIG5vbmUuXG4gKiBAcmV0dXJucyBgJ2EnYCB0byBhcHBlbmQsIG9yIGAndydgIHRvIHN0YXJ0IGl0IGFmcmVzaCBvbmNlIGl0IGhhcyBwYXNzZWQgdGhlIGNhcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFbXVsYXRvclJlYXBlckxvZ09wZW5GbGFnKHNpemVJbkJ5dGVzOiBudW1iZXIgfCB1bmRlZmluZWQpOiAnYScgfCAndycge1xuICByZXR1cm4gc2l6ZUluQnl0ZXMgIT09IHVuZGVmaW5lZCAmJiBzaXplSW5CeXRlcyA+IEVNVUxBVE9SX1JFQVBFUl9MT0dfTUFYX1NJWkVfSU5fQllURVMgPyAndycgOiAnYSc7XG59XG5cbi8qKlxuICogRGVjaWRlcyB3aGF0IHRoZSBtYXJrZXIgc2F5cyB0aGUgcmVhcGVyIHNob3VsZCBkbyBuZXh0LlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUgbWFya2VyIGFzIGl0IHJlYWRzIG5vdywgYW5kIHRoZSBlbXVsYXRvciB0aGUgcmVhcGVyIHdhcyBhcm1lZCBmb3IuXG4gKiBAcmV0dXJucyBUaGUgdmVyZGljdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVFbXVsYXRvclJlYXBlcldhdGNoKHBhcmFtczogUmVzb2x2ZUVtdWxhdG9yUmVhcGVyV2F0Y2hQYXJhbXMpOiBFbXVsYXRvclJlYXBlcldhdGNoVmVyZGljdCB7XG4gIGNvbnN0IHsgbWFya2VyIH0gPSBwYXJhbXM7XG4gIGlmIChtYXJrZXIgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAnZW11bGF0b3Itc3RvcHBlZCc7XG4gIH1cblxuICBpZiAobWFya2VyLnN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzICE9PSBwYXJhbXMuYXJtZWRTdGFydGVkQXRJbk1pbGxpc2Vjb25kcykge1xuICAgIHJldHVybiAnc3VwZXJzZWRlZCc7XG4gIH1cblxuICAvKlxuICAgKiBBIGxhdW5jaC10aW1lIG1hcmtlcidzIFBJRCBsaXN0IGlzIGRlbGliZXJhdGVseSBpbmNvbXBsZXRlIFx1MjAxNCBpdCBuYW1lcyB0aGVcbiAgICogbGF1bmNoZXIsIGFuZCB0aGUgYmFja2VuZCBpdCBmb3JrcyBpcyBpZGVudGlmaWVkIGJ5IHRoZSBwcmUtbGF1bmNoIGRpZmYsXG4gICAqIHdoaWNoIGNvc3RzIGEgaG9zdCBwcm9jZXNzIGxpc3RpbmcgdGhpcyBwb2xsIGRlbGliZXJhdGVseSBkb2VzIG5vdCBtYWtlLlxuICAgKiBTbyBpdCBpcyBuZXZlciByZWFkIGFzIHN0b3BwZWQgZnJvbSBQSURzIGFsb25lOiB0aGUgcmVjbGFpbSwgd2hpY2ggZG9lc1xuICAgKiBtYWtlIHRoYXQgbGlzdGluZywgaXMgd2hhdCBqdWRnZXMgaXQuXG4gICAqL1xuICBpZiAobWFya2VyLnByZUxhdW5jaEVtdWxhdG9yUGlkcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICd3YXRjaCc7XG4gIH1cblxuICByZXR1cm4gbWFya2VyLm93bmVkRW11bGF0b3JQaWRzLnNvbWUoKHBpZCkgPT4gcGFyYW1zLmNoZWNrSXNQaWRBbGl2ZShwaWQpKSA/ICd3YXRjaCcgOiAnZW11bGF0b3Itc3RvcHBlZCc7XG59XG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBEZXRhY2hlZC1wcm9jZXNzIGdsdWUgY292ZXJlZCBieSB0aGUgQW5kcm9pZCBpbnRlZ3JhdGlvbiBzdWl0ZSwgbm90IHVuaXQgdGVzdHMuICovXG5cbi8qKlxuICogVGhlIHJlYXBlciBwcm9jZXNzJ3MgYm9keTogd2F0Y2hlcyB0aGUgbWFya2VyIGFuZCB0aGUgbG9jayB1bnRpbCBlaXRoZXIgdGhlXG4gKiBlbXVsYXRvciBpcyBnb25lIG9yIG5vIHJ1biBob2xkcyB0aGUgbG9jaywgYW5kIGluIHRoZSBzZWNvbmQgY2FzZSBzdG9wcyB0aGVcbiAqIGhhcm5lc3MncyBsZWZ0b3ZlcnMgd2hpbGUgaG9sZGluZyBpdC5cbiAqXG4gKiBFeHBvcnRlZCBmb3IgdGhlIGJvb3RzdHJhcCwgd2hpY2ggaXMgaXRzIG9ubHkgY2FsbGVyLlxuICpcbiAqIEBwYXJhbSBhcmd2IC0gVGhlIHJlYXBlcidzIGFyZ3VtZW50cywgYXMge0BsaW5rIGJ1aWxkRW11bGF0b3JSZWFwZXJBcmd1bWVudHN9IHdyb3RlIHRoZW0uXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5FbXVsYXRvclJlYXBlcihhcmd2OiByZWFkb25seSBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCByZWFwZXJBcmd1bWVudHMgPSBwYXJzZUVtdWxhdG9yUmVhcGVyQXJndW1lbnRzKGFyZ3YpO1xuICBpZiAoIXJlYXBlckFyZ3VtZW50cykge1xuICAgIGxvZyhgW2VtdWxhdG9yLXJlYXBlcl0gUmVmdXNpbmcgdG8gcnVuOiBleHBlY3RlZCA8YXZkTmFtZT4gPHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzPiwgZ290ICR7SlNPTi5zdHJpbmdpZnkoYXJndil9LmApO1xuICAgIHByb2Nlc3MuZXhpdENvZGUgPSAxO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHsgYXZkTmFtZSwgc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMgfSA9IHJlYXBlckFyZ3VtZW50cztcbiAgcmVhcGVyTG9nKFxuICAgIGBXYXRjaGluZyB0aGUgZW11bGF0b3Igc3RhcnRlZCBhdCAke25ldyBEYXRlKHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzKS50b0lTT1N0cmluZygpfSAocmVhcGVyIFBJRCAke1N0cmluZyhwcm9jZXNzLnBpZCl9KTsgaXQgaXMgc3RvcHBlZCBvbmNlIG5vIEFuZHJvaWQgcnVuIGhvbGRzIHRoZSAnJHtBTkRST0lEX1NFVFVQX0xPQ0tfU0NPUEV9JyBzZXR1cCBsb2NrLmBcbiAgKTtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgdmVyZGljdCA9IHJlYWRXYXRjaFZlcmRpY3QocmVhcGVyQXJndW1lbnRzKTtcbiAgICBpZiAodmVyZGljdCAhPT0gJ3dhdGNoJykge1xuICAgICAgcmVhcGVyTG9nKGRlc2NyaWJlRXhpdCh2ZXJkaWN0KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGxvY2s6IFNldHVwTG9jayB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgbG9jayA9IHRyeUFjcXVpcmVTZXR1cExvY2soe1xuICAgICAgICBsYWJlbDogTE9DS19MQUJFTCxcbiAgICAgICAgc2NvcGU6IEFORFJPSURfU0VUVVBfTE9DS19TQ09QRSxcbiAgICAgICAgc3RhbGVBZnRlclNpbGVuY2VJbk1pbGxpc2Vjb25kczogRU1VTEFUT1JfUkVBUEVSX0xPQ0tfU0lMRU5DRV9JTl9NSUxMSVNFQ09ORFNcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgICAvLyBGYWlsIG9wZW46IGEgbG9jayB0aGlzIHByb2Nlc3MgY2Fubm90IGV2ZW4gbG9vayBhdCBpcyBubyBldmlkZW5jZSB0aGUgcnVuIGlzIG92ZXIuXG4gICAgICByZWFwZXJMb2coYEdpdmluZyB1cDogdGhlIHNldHVwIGxvY2sgY291bGQgbm90IGJlIHJlYWQgKCR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfSkuIFRoZSBuZXh0IEFuZHJvaWQgcnVuIHJlY2xhaW1zIHRoZSBlbXVsYXRvciBpbnN0ZWFkLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChsb2NrKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBUaGUgcnVuIG1heSBoYXZlIGVuZGVkIG5vcm1hbGx5IGJldHdlZW4gdGhlIGxvb2sgYWJvdmUgYW5kIHRoZSBsb2NrOiBpdHMgdGVhcmRvd24gdGhlbiBzdG9wcGVkIHRoZSBlbXVsYXRvci5cbiAgICAgICAgY29uc3QgbG9ja2VkVmVyZGljdCA9IHJlYWRXYXRjaFZlcmRpY3QocmVhcGVyQXJndW1lbnRzKTtcbiAgICAgICAgaWYgKGxvY2tlZFZlcmRpY3QgIT09ICd3YXRjaCcpIHtcbiAgICAgICAgICByZWFwZXJMb2coZGVzY3JpYmVFeGl0KGxvY2tlZFZlcmRpY3QpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZWFwZXJMb2coJ05vIEFuZHJvaWQgcnVuIGhvbGRzIHRoZSBzZXR1cCBsb2NrIGFueSBtb3JlLCBzbyBub3RoaW5nIGlzIGxlZnQgdG8gc3RvcCB0aGUgZW11bGF0b3IuIFN0b3BwaW5nIHRoZSBsZWZ0b3ZlcnMgdGhpcyBoYXJuZXNzIHN0YXJ0ZWQuLi4nKTtcbiAgICAgICAgYXdhaXQgbmV3IEVtdWxhdG9yUmVjbGFpbWVyKHJlYXBlckxvZykucmVjbGFpbUxlZnRvdmVyRW11bGF0b3JzKHsgc2NvcGU6ICdlbmQtb2YtcnVuJyB9KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGxvY2sucmVsZWFzZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBzZXRUaW1lb3V0KHJlc29sdmUsIEVNVUxBVE9SX1JFQVBFUl9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiByZWFwZXJMb2cobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gICAgbG9nKGBbZW11bGF0b3ItcmVhcGVyOiR7YXZkTmFtZX1dICR7bWVzc2FnZX1gKTtcbiAgfVxufVxuXG4vKipcbiAqIFN0YXJ0cyB0aGUgcmVhcGVyIGZvciBhbiBlbXVsYXRvciB0aGUgaGFybmVzcyBqdXN0IHJlY29yZGVkIGFzIGl0cyBvd24sIHdoZW5cbiAqIGEgbGl2ZSBydW4gaG9sZHMgdGhlIGBhbmRyb2lkYCBzZXR1cCBsb2NrIFx1MjAxNCBhbmQgc2F5cyB3aGljaCBpdCBkaWQuXG4gKlxuICogTmV2ZXIgdGhyb3dzOiBhIHJlYXBlciB0aGF0IGNhbm5vdCBiZSBzcGF3bmVkIGlzIGEgbG9zdCBzYWZldHkgbmV0LCBub3QgYVxuICogcmVhc29uIHRvIGZhaWwgdGhlIGxhdW5jaCBpdCB3b3VsZCBoYXZlIGd1YXJkZWQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSByZWNvcmRlZCBlbXVsYXRvciwgYW5kIHdoZXJlIHRvIHJlcG9ydC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNwYXduRW11bGF0b3JSZWFwZXIocGFyYW1zOiBTcGF3bkVtdWxhdG9yUmVhcGVyUGFyYW1zKTogdm9pZCB7XG4gIGNvbnN0IHsgYXZkTmFtZSB9ID0gcGFyYW1zO1xuICBpZiAoIWNoZWNrSXNTZXR1cExvY2tIZWxkKEFORFJPSURfU0VUVVBfTE9DS19TQ09QRSkpIHtcbiAgICBwYXJhbXMubG9nKFxuICAgICAgYE5vIGVtdWxhdG9yIHJlYXBlciBhcm1lZCBmb3IgQVZEIFwiJHthdmROYW1lfVwiOiBubyBydW4gaG9sZHMgdGhlICcke0FORFJPSURfU0VUVVBfTE9DS19TQ09QRX0nIHNldHVwIGxvY2ssIHNvIGEgcmVhcGVyIGNvdWxkIG5vdCB0ZWxsIHRoaXMgcnVuIGVuZGluZyBmcm9tIGl0IGJlaW5nIGtpbGxlZC4gSWYgdGhpcyBwcm9jZXNzIGlzIGtpbGxlZCwgb25seSB0aGUgbmV4dCBBbmRyb2lkIHJ1biBvbiB0aGlzIGhvc3Qgc3RvcHMgdGhlIGVtdWxhdG9yLmBcbiAgICApO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGxvZ0ZpbGVQYXRoID0gam9pbihnZXRSZWFwZXJMb2dEaXJlY3RvcnkoKSwgYCR7YXZkTmFtZX0ke1JFQVBFUl9MT0dfRklMRV9TVUZGSVh9YCk7XG4gIHRyeSB7XG4gICAgbWtkaXJTeW5jKGdldFJlYXBlckxvZ0RpcmVjdG9yeSgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBjb25zdCBsb2dGaWxlRGVzY3JpcHRvciA9IG9wZW5TeW5jKGxvZ0ZpbGVQYXRoLCByZXNvbHZlRW11bGF0b3JSZWFwZXJMb2dPcGVuRmxhZyhyZWFkRmlsZVNpemUobG9nRmlsZVBhdGgpKSk7XG4gICAgdHJ5IHtcbiAgICAgIC8qXG4gICAgICAgKiBUaHJvdWdoIHRoZSByZWxheSwgbmV2ZXIgc3RyYWlnaHQgYXQgdGhlIHJlYXBlcjogYSByZWFwZXIgc3Bhd25lZCBoZXJlXG4gICAgICAgKiB3b3VsZCBiZSBhIGNoaWxkIG9mIHRoaXMgcnVuIGFuZCB3b3VsZCBkaWUgd2l0aCBpdCB1bmRlciBhbnkga2lsbCB0aGF0XG4gICAgICAgKiB3YWxrcyB0aGUgcHJvY2VzcyB0cmVlLiBUaGUgcmVsYXkgZXhpdHMgYXQgb25jZSwgbGVhdmluZyB0aGUgcmVhcGVyIHdpdGhcbiAgICAgICAqIGEgZGVhZCBwYXJlbnQgYW5kIG5vIGVkZ2UgYmFjayB0byB0aGlzIHJ1bi5cbiAgICAgICAqL1xuICAgICAgY29uc3QgcmVsYXkgPSBzcGF3bihcbiAgICAgICAgcHJvY2Vzcy5leGVjUGF0aCxcbiAgICAgICAgW1xuICAgICAgICAgICctZScsXG4gICAgICAgICAgYnVpbGRFbXVsYXRvclJlYXBlclJlbGF5Qm9vdHN0cmFwKCksXG4gICAgICAgICAgYnVpbGRFbXVsYXRvclJlYXBlckJvb3RzdHJhcCgpLFxuICAgICAgICAgIHJlc29sdmVPd25Nb2R1bGVVcmwoKSxcbiAgICAgICAgICAuLi5idWlsZEVtdWxhdG9yUmVhcGVyQXJndW1lbnRzKHsgYXZkTmFtZSwgc3RhcnRlZEF0SW5NaWxsaXNlY29uZHM6IHBhcmFtcy5zdGFydGVkQXRJbk1pbGxpc2Vjb25kcyB9KVxuICAgICAgICBdLFxuICAgICAgICB7IGRldGFjaGVkOiB0cnVlLCBzdGRpbzogWydpZ25vcmUnLCBsb2dGaWxlRGVzY3JpcHRvciwgbG9nRmlsZURlc2NyaXB0b3JdLCB3aW5kb3dzSGlkZTogdHJ1ZSB9XG4gICAgICApO1xuICAgICAgcmVsYXkub25jZSgnZXJyb3InLCAoZXJyb3IpID0+IHtcbiAgICAgICAgcGFyYW1zLmxvZyhgVGhlIGVtdWxhdG9yIHJlYXBlciByZWxheSBmb3IgQVZEIFwiJHthdmROYW1lfVwiIGZhaWxlZCB0byBzdGFydDogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgICAgfSk7XG4gICAgICByZWxheS51bnJlZigpO1xuICAgICAgcGFyYW1zLmxvZyhcbiAgICAgICAgYEVtdWxhdG9yIHJlYXBlciBhcm1lZCBmb3IgQVZEIFwiJHthdmROYW1lfVwiOiBpZiB0aGlzIHJ1biBpcyBraWxsZWQgXHUyMDE0IGEgcHJvY2Vzcy10cmVlIGtpbGwgaW5jbHVkZWQsIHNpbmNlIHRoZSByZWFwZXIgaXMgc3RhcnRlZCB0aHJvdWdoIGEgcmVsYXkgdGhhdCBleGl0cyBhdCBvbmNlIFx1MjAxNCBpdCBzdG9wcyB0aGUgZW11bGF0b3Igb25jZSBubyBBbmRyb2lkIHJ1biBob2xkcyB0aGUgJyR7QU5EUk9JRF9TRVRVUF9MT0NLX1NDT1BFfScgc2V0dXAgbG9jay4gSXRzIFBJRCBpcyB0aGUgZmlyc3QgbGluZSBvZiBpdHMgbG9nOiAke2xvZ0ZpbGVQYXRofWBcbiAgICAgICk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGNsb3NlU3luYyhsb2dGaWxlRGVzY3JpcHRvcik7XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuICAgIHBhcmFtcy5sb2coYENvdWxkIG5vdCBhcm0gdGhlIGVtdWxhdG9yIHJlYXBlciBmb3IgQVZEIFwiJHthdmROYW1lfVwiOiAke2Vycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvci5tZXNzYWdlIDogU3RyaW5nKGVycm9yKX1gKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkZXNjcmliZUV4aXQodmVyZGljdDogRXhjbHVkZTxFbXVsYXRvclJlYXBlcldhdGNoVmVyZGljdCwgJ3dhdGNoJz4pOiBzdHJpbmcge1xuICByZXR1cm4gdmVyZGljdCA9PT0gJ3N1cGVyc2VkZWQnXG4gICAgPyAnVGhlIG1hcmtlciBub3cgcmVjb3JkcyBhIGxhdGVyIGVtdWxhdG9yIG9mIHRoaXMgQVZELCB3aGljaCBoYXMgaXRzIG93biByZWFwZXI7IG5vdGhpbmcgbGVmdCB0byB3YXRjaC4nXG4gICAgOiAnVGhlIGVtdWxhdG9yIHdhcyBzdG9wcGVkOyBub3RoaW5nIGxlZnQgdG8gd2F0Y2guJztcbn1cblxuZnVuY3Rpb24gZ2V0UmVhcGVyTG9nRGlyZWN0b3J5KCk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKHRtcGRpcigpLCBIQVJORVNTX1RFTVBfRElSX05BTUUpO1xufVxuXG5mdW5jdGlvbiByZWFkRmlsZVNpemUocGF0aDogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gc3RhdFN5bmMocGF0aCkuc2l6ZTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkV2F0Y2hWZXJkaWN0KHJlYXBlckFyZ3VtZW50czogRW11bGF0b3JSZWFwZXJBcmd1bWVudHMpOiBFbXVsYXRvclJlYXBlcldhdGNoVmVyZGljdCB7XG4gIHJldHVybiByZXNvbHZlRW11bGF0b3JSZWFwZXJXYXRjaCh7XG4gICAgYXJtZWRTdGFydGVkQXRJbk1pbGxpc2Vjb25kczogcmVhcGVyQXJndW1lbnRzLnN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzLFxuICAgIGNoZWNrSXNQaWRBbGl2ZTogY2hlY2tJc1Byb2Nlc3NBbGl2ZSxcbiAgICBtYXJrZXI6IHJlYWRFbXVsYXRvck1hcmtlcihyZWFwZXJBcmd1bWVudHMuYXZkTmFtZSlcbiAgfSk7XG59XG5cbi8qKlxuICogRmluZHMgdGhpcyBtb2R1bGUncyBvd24gVVJMIFx1MjAxNCB0aGUgb25lIHRoZSBib290c3RyYXAgaW1wb3J0cy5cbiAqXG4gKiBUaGUgQ0pTIGJ1aWxkIGhhcyBubyBgaW1wb3J0Lm1ldGFgIChlc2J1aWxkIGVtcHRpZXMgaXQpLCBidXQgaXQgaGFzXG4gKiBgX19maWxlbmFtZWA7IHRoZSBFU00gYnVpbGQgYW5kIHRoZSBgLnRzYCBzb3VyY2UgaGF2ZSBgaW1wb3J0Lm1ldGEudXJsYC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgVVJMIG9mIHRoaXMgbW9kdWxlIGFzIGl0IGlzIHJ1bm5pbmcuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVPd25Nb2R1bGVVcmwoKTogc3RyaW5nIHtcbiAgcmV0dXJuIHR5cGVvZiBfX2ZpbGVuYW1lID09PSAnc3RyaW5nJyA/IHBhdGhUb0ZpbGVVUkwoX19maWxlbmFtZSkuaHJlZiA6IGltcG9ydC5tZXRhLnVybDtcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQXVFQSxTQUFTLGFBQWE7QUFDdEI7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsY0FBYztBQUN2QixTQUFTLFlBQVk7QUFDckIsT0FBTyxhQUFhO0FBQ3BCLFNBQVMscUJBQXFCO0FBSzlCLFNBQVMsMEJBQTBCO0FBQ25DLFNBQVMseUJBQXlC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
211
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VtdWxhdG9yLXJlYXBlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFN0b3BzIGFuIGVtdWxhdG9yIHRoaXMgaGFybmVzcyBzdGFydGVkIG9uY2UgaXRzIHJ1biBpcyBnb25lIGZvciBnb29kIFx1MjAxNCB0aGVcbiAqIGNhc2Ugbm90aGluZyBlbHNlIGNvdmVycywgKipMNTYqKidzIHBhdGggQiB3aXRoIG5vIGxhdGVyIHJ1bjogdGhlIHJ1bm5lciBpc1xuICoga2lsbGVkIChTSUdLSUxMLCBUYXNrIE1hbmFnZXIsIGFuIElERSBzdG9wIGJ1dHRvbiksIG5vIHRlYXJkb3duIHJ1bnMsIGFuZCBub1xuICogb3RoZXIgQW5kcm9pZCBydW4gZXZlciBjb21lcyBhbG9uZyB0byByZWNsYWltIHRoZSBsZWZ0b3ZlciBmcm9tIGl0cyBtYXJrZXIuXG4gKiBPbiAyMDI2LTA5LTEwIGFuIGVtdWxhdG9yIGxlZnQgbGlrZSB0aGF0IGtlcHQgYG5ldHNpbWRgIHNwaW5uaW5nIGZvciBzaXggaG91cnMuXG4gKlxuICogVGhlIHJlYXBlciBpcyBhIHNtYWxsIGRldGFjaGVkIE5vZGUgcHJvY2VzcyBzcGF3bmVkIGJlc2lkZSBldmVyeSBlbXVsYXRvciB0aGVcbiAqIGhhcm5lc3Mgc3RhcnRzIG9yIHRha2VzIG92ZXIuIEl0IGhvbGRzIG5vIGhhbmRsZSB0byB0aGUgZW11bGF0b3IgYW5kIG5lZWRzXG4gKiBub25lOiB0aGUgbWFya2VyIChgZW11bGF0b3ItbWFya2VyLnRzYCkgc2F5cyB3aGF0IHRvIHN0b3AsIGFuZCB0aGUgdmVyaWZpZWRcbiAqIHN0b3AgKGBlbXVsYXRvci1yZWNsYWltLnRzYCkgaXMgdGhlIG9uZSB0aGUgcnVuJ3Mgb3duIHRlYXJkb3duIHVzZXMuXG4gKlxuICogIyMgSXQgd2F0Y2hlcyB0aGUgYGFuZHJvaWRgIHNldHVwIGxvY2ssIG5vdCB0aGUgcHJvY2VzcyB0aGF0IHN0YXJ0ZWQgaXRcbiAqXG4gKiBUaGUgcHJvY2VzcyB0aGF0IHN0YXJ0cyB0aGUgZW11bGF0b3IgaXMgbm90IGFsd2F5cyB0aGUgcnVuLiBBIHByb2plY3Qgd2l0aCBub1xuICogdHJhbnNwb3J0IGdsb2JhbCBzZXR1cCBib290cyBpdCBmcm9tIGEgKip0ZXN0IHdvcmtlcioqICgqKkw1NioqIHBhdGggQSksIGFuZFxuICogVml0ZXN0IGVuZHMgd29ya2VycyBkdXJpbmcgYSBwZXJmZWN0bHkgaGVhbHRoeSBydW4gXHUyMDE0IHNvIGEgcmVhcGVyIHRpZWQgdG8gaXRzXG4gKiBzcGF3bmVyJ3MgbGlmZXRpbWUgKHRoZSAqKkwzMyoqIGxpdmVuZXNzIHNvY2tldCwgdGhlIGZpcnN0IGlkZWEpIHdvdWxkIHN0b3BcbiAqIHRoZSBlbXVsYXRvciBtaWQtcnVuLCBvciByYWNlIHRoZSBuZXh0IHdvcmtlciB0YWtpbmcgaXQgb3Zlci4gVGhlIGBhbmRyb2lkYFxuICogc2V0dXAgbG9jayAoKipMNyoqKSBpcyBoZWxkIGJ5IHRoZSBydW4ncyBtYWluIHByb2Nlc3MgZm9yIHRoZSB3aG9sZSBydW4sIGFuZFxuICogaXRzIGhvbGRlciBiZWluZyBhbGl2ZSBpcyBleGFjdGx5IHdoYXQgXCJhbiBBbmRyb2lkIHJ1biBpcyBpbiBmbGlnaHRcIiBtZWFucy5cbiAqXG4gKiBTbyB0aGUgcmVhcGVyIHBvbGxzIHRoYXQgbG9jaywgYW5kIG9uY2UgaXQgY2FuICoqdGFrZSoqIGl0IFx1MjAxNCBubyBsaXZlIHJ1blxuICogaG9sZHMgaXQgXHUyMDE0IGl0IHN0b3BzIHRoZSBoYXJuZXNzJ3MgbGVmdG92ZXJzIHdoaWxlIGhvbGRpbmcgaXQsIHdoaWNoIGlzIHRoZVxuICogcHJlY29uZGl0aW9uIGV2ZXJ5IGxlZnRvdmVyIHN0b3AgZG9jdW1lbnRzOiBubyBydW4gY2FuIGFkb3B0IGFuIGVtdWxhdG9yIHRoYXRcbiAqIGlzIG1pZC1zaHV0ZG93bi4gVGhhdCBpcyBwcmVjaXNlbHkgd2hhdCB0aGUgbmV4dCBydW4ncyBwcmVmbGlnaHQgd291bGQgZG8sXG4gKiBkb25lIGF0IHRoZSBmaXJzdCBtb21lbnQgdGhhdCBydW4gY291bGQgaGF2ZSBkb25lIGl0LlxuICpcbiAqIEEgZGVhZCBzYW1lLWhvc3QgaG9sZGVyIGlzIGFiYW5kb25lZCBhdCBvbmNlLiBBIGxpdmUtUElEIGhvbGRlciB0aGF0IGhhcyBnb25lXG4gKiBzaWxlbnQgaXMgb25seSBhYmFuZG9uZWQgYWZ0ZXJcbiAqIHtAbGluayBFTVVMQVRPUl9SRUFQRVJfTE9DS19TSUxFTkNFX0lOX01JTExJU0VDT05EU30sIGZhciB3aWRlciB0aGFuIHRoZVxuICogdHdvIG1pbnV0ZXMgYSB3YWl0aW5nIHJ1biBzdGVhbHMgb246IGEgcmVhcGVyIGlzIGFsd2F5cyB3YWl0aW5nLCBzbyBhdCB0d29cbiAqIG1pbnV0ZXMgYSBsaXZlIHJ1biB0aGF0IGJsb2NrZWQgaXRzIGV2ZW50IGxvb3Agd291bGQgbG9zZSBpdHMgZW11bGF0b3IuXG4gKlxuICogIyMgRmFpbC1vcGVuLCBsaWtlIHRoZSByZW5kZXJlciB3YXRjaGRvZ1xuICpcbiAqIEEgcmVhcGVyIGlzIGFybWVkIG9ubHkgd2hlbiBhIGxpdmUgcnVuIGhvbGRzIHRoZSBsb2NrIGF0IHRoZSBtb21lbnQgdGhlXG4gKiBlbXVsYXRvciBpcyByZWNvcmRlZC4gQSBydW4gdGhhdCB0YWtlcyBubyBsb2NrIFx1MjAxNCBhIGhhbmQtd2lyZWRcbiAqIGBjcmVhdGVUcmFuc3BvcnRGcm9tT3B0aW9uc2AgXHUyMDE0IGdldHMgbm9uZSwgYW5kIHNheXMgc28sIHJhdGhlciB0aGFuIGEgcmVhcGVyXG4gKiB0aGF0IHdvdWxkIHJlYWQgaXRzIG1pc3NpbmcgbG9jayBhcyBcInRoZSBydW4gaXMgb3ZlclwiIGFuZCBzdG9wIGFuIGVtdWxhdG9yXG4gKiBzb21lYm9keSBpcyB1c2luZy4gQSBzcGF3biB0aGF0IGZhaWxzIGlzIGxvZ2dlZCBhbmQgbmV2ZXIgZmFpbHMgdGhlIGxhdW5jaC5cbiAqXG4gKiAjIyBIb3cgaXQgcnVuc1xuICpcbiAqIGBwcm9jZXNzLmV4ZWNQYXRoIC1lIDxib290c3RyYXA+IDx0aGlzIG1vZHVsZSdzIFVSTD4gPGF2ZE5hbWU+IDxzdGFydGVkQXQ+YDpcbiAqIHRoZSBib290c3RyYXAgYGltcG9ydCgpYHMgdGhpcyB2ZXJ5IG1vZHVsZSBhbmQgY2FsbHMge0BsaW5rIHJ1bkVtdWxhdG9yUmVhcGVyfS5cbiAqIFRoZSBVUkwgaXMgdGhlIGJ1aWx0IGAubWpzYCAvIGAuY2pzYCBpbiBhIGNvbnN1bWVyJ3MgaW5zdGFsbCwgYW5kIHRoZSBgLnRzYFxuICogc291cmNlIGluIHRoaXMgcmVwbydzIG93biBzdWl0ZXMsIHdoaWNoIE5vZGUncyB0eXBlIHN0cmlwcGluZyBydW5zIGFzLWlzIFx1MjAxNCBzb1xuICogbm90aGluZyB0aGlzIG1vZHVsZSBpbXBvcnRzIG1heSByZWFjaCBhIG1vZHVsZSB0aGF0IHJlYWRzIHRoZSBidWlsZC10aW1lXG4gKiBgT0JTSURJQU5fTUVUQURBVEFgIGdsb2JhbC4gSXRzIHN0ZG91dC9zdGRlcnIgZ28gdG8gYSBwZXItQVZEIGxvZyBmaWxlLCBjYXBwZWRcbiAqIGF0IHtAbGluayBFTVVMQVRPUl9SRUFQRVJfTE9HX01BWF9TSVpFX0lOX0JZVEVTfSwgc28gdGhlIHZlcmRpY3QgbGluZXMgdGhlIHN0b3BcbiAqIHByaW50cyBhcmUgb24gcmVjb3JkIGV2ZW4gdGhvdWdoIG5vIHRlcm1pbmFsIGlzIGxlZnQgdG8gc2hvdyB0aGVtLlxuICpcbiAqICMjIEl0IGlzIHN0YXJ0ZWQgdGhyb3VnaCBhIHJlbGF5LCBzbyBhIHByb2Nlc3MtdHJlZSBraWxsIGNhbm5vdCB0YWtlIGl0XG4gKlxuICogYGRldGFjaGVkYCBkb2VzIG5vdCByZXBhcmVudCBvbiBXaW5kb3dzOiBhIGNoaWxkIHNwYXduZWQgc3RyYWlnaHQgZnJvbSB0aGUgcnVuXG4gKiBzdGF5cyBpbiB0aGUgcnVuJ3MgcHJvY2VzcyB0cmVlLCBzbyB0aGUga2lsbCBzaGFwZXMgdGhhdCB3YWxrIHRoYXQgdHJlZSB0YWtlXG4gKiB0aGUgc2FmZXR5IG5ldCBhbG9uZyB3aXRoIHRoZSB0aGluZyBpdCB3YXMgZ3VhcmRpbmcgXHUyMDE0IFRhc2sgTWFuYWdlcidzICpFbmRcbiAqIHRhc2sqLCBgdGFza2tpbGwgL1RgLCBhbiBJREUgc3RvcCBidXR0b24sIGEgYFBhcmVudFByb2Nlc3NJZGAgZGVzY2VuZGFudFxuICogc3dlZXAuIE1lYXN1cmVkIG9uIDIwMjYtMDktMTE6IGEgcmVhcGVyIGRpZWQgd2l0aCB0aGUgcnVuIGl0IHdhcyB3YXRjaGluZywgYW5kXG4gKiB0aGUgZW11bGF0b3IgaXQgd291bGQgaGF2ZSBzdG9wcGVkIGlkbGVkIG9uIGZvciB0ZW4gbWludXRlcy5cbiAqXG4gKiBTbyB0aGUgc3Bhd24gZ29lcyB0aHJvdWdoIGEgcmVsYXkgXHUyMDE0IHtAbGluayBidWlsZEVtdWxhdG9yUmVhcGVyUmVsYXlCb290c3RyYXB9IFx1MjAxNFxuICogd2hpY2ggc3RhcnRzIHRoZSByZWFwZXIgYW5kIGV4aXRzIGF0IG9uY2UuIEJ5IHRoZSB0aW1lIGFueSB0cmVlLXdhbGtlciB0YWtlc1xuICogaXRzIHNuYXBzaG90IHRoZSByZWxheSBpcyBnb25lLCBzbyB0aGVyZSBpcyBubyBlZGdlIGZyb20gdGhlIHJ1biB0byB0aGUgcmVhcGVyXG4gKiBsZWZ0IHRvIGZvbGxvdy4gVGhpcyBpcyB0aGUgZG91YmxlLWZvcmsgaWRpb20sIGFuZCBpdCBob2xkcyBvbiBQT1NJWCBmb3IgdGhlXG4gKiBzYW1lIHJlYXNvbjogb25jZSB0aGUgcmVsYXkgZXhpdHMsIHRoZSByZWFwZXIgYmVsb25ncyB0byBgaW5pdGAuXG4gKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgY2xvc2VTeW5jLFxuICBta2RpclN5bmMsXG4gIG9wZW5TeW5jLFxuICBzdGF0U3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgcGF0aFRvRmlsZVVSTCB9IGZyb20gJ25vZGU6dXJsJztcblxuaW1wb3J0IHR5cGUgeyBFbXVsYXRvck1hcmtlciB9IGZyb20gJy4vZW11bGF0b3ItbWFya2VyLm1qcyc7XG5pbXBvcnQgdHlwZSB7IFNldHVwTG9jayB9IGZyb20gJy4vc2V0dXAtbG9jay5tanMnO1xuXG5pbXBvcnQgeyByZWFkRW11bGF0b3JNYXJrZXIgfSBmcm9tICcuL2VtdWxhdG9yLW1hcmtlci5tanMnO1xuaW1wb3J0IHsgRW11bGF0b3JSZWNsYWltZXIgfSBmcm9tICcuL2VtdWxhdG9yLXJlY2xhaW0ubWpzJztcbmltcG9ydCB7IEhBUk5FU1NfVEVNUF9ESVJfTkFNRSB9IGZyb20gJy4vbGVmdG92ZXItY2xlYW51cC5tanMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cubWpzJztcbmltcG9ydCB7IGNoZWNrSXNQcm9jZXNzQWxpdmUgfSBmcm9tICcuL3Byb2Nlc3MtbGl2ZW5lc3MubWpzJztcbmltcG9ydCB7XG4gIEFORFJPSURfU0VUVVBfTE9DS19TQ09QRSxcbiAgY2hlY2tJc1NldHVwTG9ja0hlbGQsXG4gIHRyeUFjcXVpcmVTZXR1cExvY2tcbn0gZnJvbSAnLi9zZXR1cC1sb2NrLm1qcyc7XG5cbi8qKlxuICogSG93IG9mdGVuIHRoZSByZWFwZXIgbG9va3MgYXQgdGhlIG1hcmtlciBhbmQgdGhlIGxvY2sgXHUyMDE0IHRoZSBsb2NrJ3Mgb3duXG4gKiBoZWFydGJlYXQgaW50ZXJ2YWwsIHNvIGEga2lsbGVkIHJ1biBpcyBub3RpY2VkIHdpdGhpbiBvbmUgYmVhdC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVNVUxBVE9SX1JFQVBFUl9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDUwMDA7XG5cbi8qKlxuICogSG93IGxvbmcgYSBzYW1lLWhvc3QgbG9jayBob2xkZXIgd2hvc2UgUElEIGlzIHN0aWxsIGFsaXZlIG1heSBzdGF5IHNpbGVudFxuICogYmVmb3JlIHRoZSByZWFwZXIgdHJlYXRzIGl0cyBydW4gYXMgZ29uZTogMzAgbWludXRlcywgdGhlIHRocmVzaG9sZCB0aGUgbG9ja1xuICogYWxyZWFkeSB1c2VzIGFjcm9zcyBob3N0cy4gT25seSBhIHJlY3ljbGVkIFBJRCBzaG91bGQgZXZlciByZWFjaCBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IEVNVUxBVE9SX1JFQVBFUl9MT0NLX1NJTEVOQ0VfSU5fTUlMTElTRUNPTkRTID0gMV84MDBfMDAwO1xuXG4vKipcbiAqIFRoZSBzaXplIHBhc3Qgd2hpY2ggdGhlIHJlYXBlciBsb2cgaXMgc3RhcnRlZCBhZnJlc2ggcmF0aGVyIHRoYW4gYXBwZW5kZWQgdG8uXG4gKi9cbmV4cG9ydCBjb25zdCBFTVVMQVRPUl9SRUFQRVJfTE9HX01BWF9TSVpFX0lOX0JZVEVTID0gMV8wNDhfNTc2O1xuXG4vKipcbiAqIFRoZSBleHBvcnQgdGhlIGJvb3RzdHJhcCBjYWxscy4gTmFtZWQgaGVyZSBzbyB0aGUgYm9vdHN0cmFwIGFuZCB0aGUgZXhwb3J0XG4gKiBjYW5ub3QgZHJpZnQgYXBhcnQuXG4gKi9cbmV4cG9ydCBjb25zdCBFTVVMQVRPUl9SRUFQRVJfRU5UUllfTkFNRSA9ICdydW5FbXVsYXRvclJlYXBlcic7XG5cbmNvbnN0IExPQ0tfTEFCRUwgPSAnZW11bGF0b3ItcmVhcGVyJztcbmNvbnN0IFJFQVBFUl9MT0dfRklMRV9TVUZGSVggPSAnLmVtdWxhdG9yLXJlYXBlci5sb2cnO1xuXG4vKipcbiAqIFdoYXQgdGhlIHJlYXBlciB3YXRjaGVzIGZvcjogdGhlIGVtdWxhdG9yIGEgbWFya2VyIHJlY29yZGVkIHdoZW4gaXQgd2FzIGFybWVkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVtdWxhdG9yUmVhcGVyQXJndW1lbnRzIHtcbiAgLyoqXG4gIFRoZSBBVkQgd2hvc2UgbWFya2VyIGl0IHdhdGNoZXMuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZW4gdGhlIHdhdGNoZWQgZW11bGF0b3Igd2FzIGxhdW5jaGVkLiBBIHRha2VvdmVyIGtlZXBzIGl0LCBzbyBpdCBuYW1lcyBvbmVcbiAgICogZW11bGF0b3IgYWNyb3NzIGV2ZXJ5IHJ1biB0aGF0IG93bnMgaXQsIGFuZCB0ZWxscyBhIGxhdGVyIGVtdWxhdG9yIG9mIHRoZVxuICAgKiBzYW1lIEFWRCBhcGFydC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogV2hhdCB0aGUgbWFya2VyIHNheXMgdGhlIHJlYXBlciBzaG91bGQgZG8gbmV4dC5cbiAqXG4gKiAtIGBlbXVsYXRvci1zdG9wcGVkYCBcdTIwMTQgdGhlIG1hcmtlciBpcyBnb25lLCBvciBub25lIG9mIGl0cyBQSURzIGlzIGFsaXZlOiB0aGVcbiAqICAgZW11bGF0b3Igd2FzIHN0b3BwZWQsIHNvIHRoZXJlIGlzIG5vdGhpbmcgbGVmdCB0byB3YXRjaC5cbiAqIC0gYHN1cGVyc2VkZWRgIFx1MjAxNCB0aGUgbWFya2VyIG5vdyByZWNvcmRzIGEgZGlmZmVyZW50IGVtdWxhdG9yIG9mIHRoZSBzYW1lIEFWRCxcbiAqICAgd2hpY2ggaGFzIGl0cyBvd24gcmVhcGVyLlxuICogLSBgd2F0Y2hgIFx1MjAxNCB0aGUgZW11bGF0b3IgaXMgc3RpbGwgdXAuXG4gKi9cbmV4cG9ydCB0eXBlIEVtdWxhdG9yUmVhcGVyV2F0Y2hWZXJkaWN0ID0gJ2VtdWxhdG9yLXN0b3BwZWQnIHwgJ3N1cGVyc2VkZWQnIHwgJ3dhdGNoJztcblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciB7QGxpbmsgcmVzb2x2ZUVtdWxhdG9yUmVhcGVyV2F0Y2h9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVFbXVsYXRvclJlYXBlcldhdGNoUGFyYW1zIHtcbiAgLyoqXG4gIFRoZSBsYXVuY2ggdGltZSBvZiB0aGUgZW11bGF0b3IgdGhpcyByZWFwZXIgd2FzIGFybWVkIGZvci5cbiAgICovXG4gIHJlYWRvbmx5IGFybWVkU3RhcnRlZEF0SW5NaWxsaXNlY29uZHM6IG51bWJlcjtcblxuICAvKipcbiAgV2hldGhlciBhIFBJRCBpcyBzdGlsbCBydW5uaW5nLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hlY2tJc1BpZEFsaXZlOiAocGlkOiBudW1iZXIpID0+IGJvb2xlYW47XG5cbiAgLyoqXG4gIFRoZSBBVkQncyBtYXJrZXIgYXMgaXQgcmVhZHMgbm93LCBpZiBhbnkuXG4gICAqL1xuICByZWFkb25seSBtYXJrZXI6IEVtdWxhdG9yTWFya2VyIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBzcGF3bkVtdWxhdG9yUmVhcGVyfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcGF3bkVtdWxhdG9yUmVhcGVyUGFyYW1zIHtcbiAgLyoqXG4gIFRoZSBBVkQgd2hvc2UgZW11bGF0b3Igd2FzIGp1c3QgcmVjb3JkZWQuXG4gICAqL1xuICByZWFkb25seSBhdmROYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gIFJlY2VpdmVzIHRoZSBhcm1lZCAvIG5vdC1hcm1lZCBsaW5lLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9nOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuXG4gIC8qKlxuICBUaGUgcmVjb3JkZWQgZW11bGF0b3IncyBsYXVuY2ggdGltZSwgYXMgd3JpdHRlbiBpbnRvIGl0cyBtYXJrZXIuXG4gICAqL1xuICByZWFkb25seSBzdGFydGVkQXRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xufVxuXG4vKipcbiAqIEVuY29kZXMgdGhlIHJlYXBlcidzIGFyZ3VtZW50cyBmb3IgaXRzIGNvbW1hbmQgbGluZS5cbiAqXG4gKiBAcGFyYW0gcmVhcGVyQXJndW1lbnRzIC0gV2hhdCB0aGUgcmVhcGVyIHdhdGNoZXMgZm9yLlxuICogQHJldHVybnMgVGhlIGNvbW1hbmQtbGluZSBhcmd1bWVudHMsIGluIHRoZSBvcmRlciB7QGxpbmsgcGFyc2VFbXVsYXRvclJlYXBlckFyZ3VtZW50c30gcmVhZHMgdGhlbS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW11bGF0b3JSZWFwZXJBcmd1bWVudHMocmVhcGVyQXJndW1lbnRzOiBFbXVsYXRvclJlYXBlckFyZ3VtZW50cyk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIFtyZWFwZXJBcmd1bWVudHMuYXZkTmFtZSwgU3RyaW5nKHJlYXBlckFyZ3VtZW50cy5zdGFydGVkQXRJbk1pbGxpc2Vjb25kcyldO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0aGUgc2NyaXB0IGBub2RlIC1lYCBydW5zIHRvIHN0YXJ0IHRoZSByZWFwZXIuXG4gKlxuICogSXQgYGltcG9ydCgpYHMgdGhlIG1vZHVsZSB3aG9zZSBVUkwgaXMgaXRzIGZpcnN0IGFyZ3VtZW50IGFuZCBoYW5kcyB0aGUgcmVzdFxuICogdG8ge0BsaW5rIHJ1bkVtdWxhdG9yUmVhcGVyfS4gYGltcG9ydCgpYCByYXRoZXIgdGhhbiBgcmVxdWlyZWAsIGJlY2F1c2UgaXRcbiAqIGxvYWRzIGFsbCB0aHJlZSBmb3JtcyB0aGUgbW9kdWxlIHNoaXBzIGFzIFx1MjAxNCBFU00sIENKUywgYW5kIHRoaXMgcmVwbydzIG93blxuICogYC50c2Agc291cmNlIHVuZGVyIE5vZGUncyB0eXBlIHN0cmlwcGluZy4gQSBDSlMgbW9kdWxlJ3MgbmFtZWQgZXhwb3J0cyBhcmVcbiAqIGZvdW5kIGJ5IE5vZGUncyBzdGF0aWMgYW5hbHlzaXM7IGBkZWZhdWx0YCBpcyB0aGUgZmFsbGJhY2sgd2hlbiB0aGV5IGFyZSBub3QuXG4gKlxuICogQHJldHVybnMgVGhlIHNjcmlwdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkRW11bGF0b3JSZWFwZXJCb290c3RyYXAoKTogc3RyaW5nIHtcbiAgcmV0dXJuIFtcbiAgICAnaW1wb3J0KHByb2Nlc3MuYXJndlsxXSkudGhlbigocmVhcGVyTW9kdWxlKSA9PiB7JyxcbiAgICBgICBjb25zdCBydW4gPSByZWFwZXJNb2R1bGUuJHtFTVVMQVRPUl9SRUFQRVJfRU5UUllfTkFNRX0gPz8gcmVhcGVyTW9kdWxlLmRlZmF1bHQuJHtFTVVMQVRPUl9SRUFQRVJfRU5UUllfTkFNRX07YCxcbiAgICAnICByZXR1cm4gcnVuKHByb2Nlc3MuYXJndi5zbGljZSgyKSk7JyxcbiAgICAnfSkuY2F0Y2goKGVycm9yKSA9PiB7JyxcbiAgICAnICBjb25zb2xlLmVycm9yKGVycm9yKTsnLFxuICAgICcgIHByb2Nlc3MuZXhpdENvZGUgPSAxOycsXG4gICAgJ30pOydcbiAgXS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBCdWlsZHMgdGhlIHNjcmlwdCBgbm9kZSAtZWAgcnVucyBhcyB0aGUgKipyZWxheSoqOiBpdCBzdGFydHMgdGhlIHJlYXBlciBhbmRcbiAqIGV4aXRzIGF0IG9uY2UsIHNvIHRoZSByZWFwZXIgaXMgbGVmdCB3aXRoIGEgZGVhZCBwYXJlbnQgYW5kIG5vIHRyZWUtd2Fsa2luZ1xuICoga2lsbCBvZiB0aGUgcnVuIGNhbiByZWFjaCBpdC4gU2VlIHRoZSByZWxheSBzZWN0aW9uIGluIHRoaXMgbW9kdWxlJ3MgaGVhZGVyXG4gKiBmb3Igd2h5IHRoYXQgaW5kaXJlY3Rpb24gZXhpc3RzIGF0IGFsbC5cbiAqXG4gKiBJdHMgb3duIGFyZ3VtZW50cyBhcmUgdGhlIHJlYXBlcidzIHdob2xlIGNvbW1hbmQgbGluZSBcdTIwMTQgdGhlIGJvb3RzdHJhcCBzY3JpcHRcbiAqIGZpcnN0LCB0aGVuIGV2ZXJ5dGhpbmcgdGhhdCBib290c3RyYXAgcmVhZHMgXHUyMDE0IHNvIHRoZSByZWxheSBuZXZlciBoYXMgdG8ga25vd1xuICogd2hhdCBhbnkgb2YgdGhlbSBtZWFuLiBJdCBoYW5kcyB0aGUgcmVhcGVyIGl0cyBvd24gc3Rkb3V0IGFuZCBzdGRlcnIsIHdoaWNoXG4gKiBhcmUgdGhlIGNhcHBlZCBsb2cgZmlsZSB0aGUgc3Bhd25lciBvcGVuZWQsIHNvIHRoZSBsb2cgaXMgdW5hZmZlY3RlZCBieSB0aGVcbiAqIGV4dHJhIGhvcC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgc2NyaXB0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRFbXVsYXRvclJlYXBlclJlbGF5Qm9vdHN0cmFwKCk6IHN0cmluZyB7XG4gIHJldHVybiBbXG4gICAgJ2NvbnN0IHsgc3Bhd24gfSA9IHJlcXVpcmUoXCJub2RlOmNoaWxkX3Byb2Nlc3NcIik7JyxcbiAgICAndHJ5IHsnLFxuICAgICcgIGNvbnN0IGNoaWxkID0gc3Bhd24ocHJvY2Vzcy5leGVjUGF0aCwgW1wiLWVcIiwgcHJvY2Vzcy5hcmd2WzFdLCAuLi5wcm9jZXNzLmFyZ3Yuc2xpY2UoMildLCB7JyxcbiAgICAnICAgIGRldGFjaGVkOiB0cnVlLCcsXG4gICAgJyAgICBzdGRpbzogW1wiaWdub3JlXCIsIDEsIDJdLCcsXG4gICAgJyAgICB3aW5kb3dzSGlkZTogdHJ1ZScsXG4gICAgJyAgfSk7JyxcbiAgICAnICBjaGlsZC5vbmNlKFwiZXJyb3JcIiwgKGVycm9yKSA9PiB7IGNvbnNvbGUuZXJyb3IoZXJyb3IpOyB9KTsnLFxuICAgICcgIGNoaWxkLnVucmVmKCk7JyxcbiAgICAnfSBjYXRjaCAoZXJyb3IpIHsnLFxuICAgICcgIGNvbnNvbGUuZXJyb3IoZXJyb3IpOycsXG4gICAgJyAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7JyxcbiAgICAnfSdcbiAgXS5qb2luKCdcXG4nKTtcbn1cblxuLyoqXG4gKiBEZWNvZGVzIHRoZSByZWFwZXIncyBjb21tYW5kLWxpbmUgYXJndW1lbnRzLlxuICpcbiAqIEBwYXJhbSBhcmd2IC0gVGhlIGFyZ3VtZW50cyBhZnRlciB0aGUgbW9kdWxlIFVSTC5cbiAqIEByZXR1cm5zIFRoZSBhcmd1bWVudHMsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhleSBhcmUgbm90IHRoZSB0d28ge0BsaW5rIGJ1aWxkRW11bGF0b3JSZWFwZXJBcmd1bWVudHN9IHdyaXRlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRW11bGF0b3JSZWFwZXJBcmd1bWVudHMoYXJndjogcmVhZG9ubHkgc3RyaW5nW10pOiBFbXVsYXRvclJlYXBlckFyZ3VtZW50cyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IFthdmROYW1lLCBzdGFydGVkQXRUZXh0LCAuLi5yZXN0XSA9IGFyZ3Y7XG4gIGlmICghYXZkTmFtZSB8fCBzdGFydGVkQXRUZXh0ID09PSB1bmRlZmluZWQgfHwgcmVzdC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzID0gTnVtYmVyKHN0YXJ0ZWRBdFRleHQpO1xuICBpZiAoIU51bWJlci5pc1NhZmVJbnRlZ2VyKHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzKSB8fCBzdGFydGVkQXRJbk1pbGxpc2Vjb25kcyA8PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7IGF2ZE5hbWUsIHN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzIH07XG59XG5cbi8qKlxuICogRGVjaWRlcyBob3cgdGhlIHJlYXBlciBsb2cgaXMgb3BlbmVkLCBzbyBpdCBjYW4gbmV2ZXIgZ3JvdyB3aXRob3V0IGJvdW5kLlxuICpcbiAqIEBwYXJhbSBzaXplSW5CeXRlcyAtIFRoZSBsb2cncyBjdXJyZW50IHNpemUsIG9yIGB1bmRlZmluZWRgIHdoZW4gdGhlcmUgaXMgbm9uZS5cbiAqIEByZXR1cm5zIGAnYSdgIHRvIGFwcGVuZCwgb3IgYCd3J2AgdG8gc3RhcnQgaXQgYWZyZXNoIG9uY2UgaXQgaGFzIHBhc3NlZCB0aGUgY2FwLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUVtdWxhdG9yUmVhcGVyTG9nT3BlbkZsYWcoc2l6ZUluQnl0ZXM6IG51bWJlciB8IHVuZGVmaW5lZCk6ICdhJyB8ICd3JyB7XG4gIHJldHVybiBzaXplSW5CeXRlcyAhPT0gdW5kZWZpbmVkICYmIHNpemVJbkJ5dGVzID4gRU1VTEFUT1JfUkVBUEVSX0xPR19NQVhfU0laRV9JTl9CWVRFUyA/ICd3JyA6ICdhJztcbn1cblxuLyoqXG4gKiBEZWNpZGVzIHdoYXQgdGhlIG1hcmtlciBzYXlzIHRoZSByZWFwZXIgc2hvdWxkIGRvIG5leHQuXG4gKlxuICogQHBhcmFtIHBhcmFtcyAtIFRoZSBtYXJrZXIgYXMgaXQgcmVhZHMgbm93LCBhbmQgdGhlIGVtdWxhdG9yIHRoZSByZWFwZXIgd2FzIGFybWVkIGZvci5cbiAqIEByZXR1cm5zIFRoZSB2ZXJkaWN0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUVtdWxhdG9yUmVhcGVyV2F0Y2gocGFyYW1zOiBSZXNvbHZlRW11bGF0b3JSZWFwZXJXYXRjaFBhcmFtcyk6IEVtdWxhdG9yUmVhcGVyV2F0Y2hWZXJkaWN0IHtcbiAgY29uc3QgeyBtYXJrZXIgfSA9IHBhcmFtcztcbiAgaWYgKG1hcmtlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICdlbXVsYXRvci1zdG9wcGVkJztcbiAgfVxuXG4gIGlmIChtYXJrZXIuc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMgIT09IHBhcmFtcy5hcm1lZFN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzKSB7XG4gICAgcmV0dXJuICdzdXBlcnNlZGVkJztcbiAgfVxuXG4gIC8qXG4gICAqIEEgbGF1bmNoLXRpbWUgbWFya2VyJ3MgUElEIGxpc3QgaXMgZGVsaWJlcmF0ZWx5IGluY29tcGxldGUgXHUyMDE0IGl0IG5hbWVzIHRoZVxuICAgKiBsYXVuY2hlciwgYW5kIHRoZSBiYWNrZW5kIGl0IGZvcmtzIGlzIGlkZW50aWZpZWQgYnkgdGhlIHByZS1sYXVuY2ggZGlmZixcbiAgICogd2hpY2ggY29zdHMgYSBob3N0IHByb2Nlc3MgbGlzdGluZyB0aGlzIHBvbGwgZGVsaWJlcmF0ZWx5IGRvZXMgbm90IG1ha2UuXG4gICAqIFNvIGl0IGlzIG5ldmVyIHJlYWQgYXMgc3RvcHBlZCBmcm9tIFBJRHMgYWxvbmU6IHRoZSByZWNsYWltLCB3aGljaCBkb2VzXG4gICAqIG1ha2UgdGhhdCBsaXN0aW5nLCBpcyB3aGF0IGp1ZGdlcyBpdC5cbiAgICovXG4gIGlmIChtYXJrZXIucHJlTGF1bmNoRW11bGF0b3JQaWRzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gJ3dhdGNoJztcbiAgfVxuXG4gIHJldHVybiBtYXJrZXIub3duZWRFbXVsYXRvclBpZHMuc29tZSgocGlkKSA9PiBwYXJhbXMuY2hlY2tJc1BpZEFsaXZlKHBpZCkpID8gJ3dhdGNoJyA6ICdlbXVsYXRvci1zdG9wcGVkJztcbn1cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIERldGFjaGVkLXByb2Nlc3MgZ2x1ZSBjb3ZlcmVkIGJ5IHRoZSBBbmRyb2lkIGludGVncmF0aW9uIHN1aXRlLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuLyoqXG4gKiBUaGUgcmVhcGVyIHByb2Nlc3MncyBib2R5OiB3YXRjaGVzIHRoZSBtYXJrZXIgYW5kIHRoZSBsb2NrIHVudGlsIGVpdGhlciB0aGVcbiAqIGVtdWxhdG9yIGlzIGdvbmUgb3Igbm8gcnVuIGhvbGRzIHRoZSBsb2NrLCBhbmQgaW4gdGhlIHNlY29uZCBjYXNlIHN0b3BzIHRoZVxuICogaGFybmVzcydzIGxlZnRvdmVycyB3aGlsZSBob2xkaW5nIGl0LlxuICpcbiAqIEV4cG9ydGVkIGZvciB0aGUgYm9vdHN0cmFwLCB3aGljaCBpcyBpdHMgb25seSBjYWxsZXIuXG4gKlxuICogQHBhcmFtIGFyZ3YgLSBUaGUgcmVhcGVyJ3MgYXJndW1lbnRzLCBhcyB7QGxpbmsgYnVpbGRFbXVsYXRvclJlYXBlckFyZ3VtZW50c30gd3JvdGUgdGhlbS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkVtdWxhdG9yUmVhcGVyKGFyZ3Y6IHJlYWRvbmx5IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHJlYXBlckFyZ3VtZW50cyA9IHBhcnNlRW11bGF0b3JSZWFwZXJBcmd1bWVudHMoYXJndik7XG4gIGlmICghcmVhcGVyQXJndW1lbnRzKSB7XG4gICAgbG9nKGBbZW11bGF0b3ItcmVhcGVyXSBSZWZ1c2luZyB0byBydW46IGV4cGVjdGVkIDxhdmROYW1lPiA8c3RhcnRlZEF0SW5NaWxsaXNlY29uZHM+LCBnb3QgJHtKU09OLnN0cmluZ2lmeShhcmd2KX0uYCk7XG4gICAgcHJvY2Vzcy5leGl0Q29kZSA9IDE7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyBhdmROYW1lLCBzdGFydGVkQXRJbk1pbGxpc2Vjb25kcyB9ID0gcmVhcGVyQXJndW1lbnRzO1xuICByZWFwZXJMb2coXG4gICAgYFdhdGNoaW5nIHRoZSBlbXVsYXRvciBzdGFydGVkIGF0ICR7bmV3IERhdGUoc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMpLnRvSVNPU3RyaW5nKCl9IChyZWFwZXIgUElEICR7U3RyaW5nKHByb2Nlc3MucGlkKX0pOyBpdCBpcyBzdG9wcGVkIG9uY2Ugbm8gQW5kcm9pZCBydW4gaG9sZHMgdGhlICcke0FORFJPSURfU0VUVVBfTE9DS19TQ09QRX0nIHNldHVwIGxvY2suYFxuICApO1xuXG4gIGZvciAoOzspIHtcbiAgICBjb25zdCB2ZXJkaWN0ID0gcmVhZFdhdGNoVmVyZGljdChyZWFwZXJBcmd1bWVudHMpO1xuICAgIGlmICh2ZXJkaWN0ICE9PSAnd2F0Y2gnKSB7XG4gICAgICByZWFwZXJMb2coZGVzY3JpYmVFeGl0KHZlcmRpY3QpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgbG9jazogU2V0dXBMb2NrIHwgdW5kZWZpbmVkO1xuICAgIHRyeSB7XG4gICAgICBsb2NrID0gdHJ5QWNxdWlyZVNldHVwTG9jayh7XG4gICAgICAgIGxhYmVsOiBMT0NLX0xBQkVMLFxuICAgICAgICBzY29wZTogQU5EUk9JRF9TRVRVUF9MT0NLX1NDT1BFLFxuICAgICAgICBzdGFsZUFmdGVyU2lsZW5jZUluTWlsbGlzZWNvbmRzOiBFTVVMQVRPUl9SRUFQRVJfTE9DS19TSUxFTkNFX0lOX01JTExJU0VDT05EU1xuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICAgIC8vIEZhaWwgb3BlbjogYSBsb2NrIHRoaXMgcHJvY2VzcyBjYW5ub3QgZXZlbiBsb29rIGF0IGlzIG5vIGV2aWRlbmNlIHRoZSBydW4gaXMgb3Zlci5cbiAgICAgIHJlYXBlckxvZyhgR2l2aW5nIHVwOiB0aGUgc2V0dXAgbG9jayBjb3VsZCBub3QgYmUgcmVhZCAoJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9KS4gVGhlIG5leHQgQW5kcm9pZCBydW4gcmVjbGFpbXMgdGhlIGVtdWxhdG9yIGluc3RlYWQuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGxvY2spIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoZSBydW4gbWF5IGhhdmUgZW5kZWQgbm9ybWFsbHkgYmV0d2VlbiB0aGUgbG9vayBhYm92ZSBhbmQgdGhlIGxvY2s6IGl0cyB0ZWFyZG93biB0aGVuIHN0b3BwZWQgdGhlIGVtdWxhdG9yLlxuICAgICAgICBjb25zdCBsb2NrZWRWZXJkaWN0ID0gcmVhZFdhdGNoVmVyZGljdChyZWFwZXJBcmd1bWVudHMpO1xuICAgICAgICBpZiAobG9ja2VkVmVyZGljdCAhPT0gJ3dhdGNoJykge1xuICAgICAgICAgIHJlYXBlckxvZyhkZXNjcmliZUV4aXQobG9ja2VkVmVyZGljdCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlYXBlckxvZygnTm8gQW5kcm9pZCBydW4gaG9sZHMgdGhlIHNldHVwIGxvY2sgYW55IG1vcmUsIHNvIG5vdGhpbmcgaXMgbGVmdCB0byBzdG9wIHRoZSBlbXVsYXRvci4gU3RvcHBpbmcgdGhlIGxlZnRvdmVycyB0aGlzIGhhcm5lc3Mgc3RhcnRlZC4uLicpO1xuICAgICAgICBhd2FpdCBuZXcgRW11bGF0b3JSZWNsYWltZXIocmVhcGVyTG9nKS5yZWNsYWltTGVmdG92ZXJFbXVsYXRvcnMoeyBzY29wZTogJ2VuZC1vZi1ydW4nIH0pO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgbG9jay5yZWxlYXNlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgRU1VTEFUT1JfUkVBUEVSX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYXBlckxvZyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBsb2coYFtlbXVsYXRvci1yZWFwZXI6JHthdmROYW1lfV0gJHttZXNzYWdlfWApO1xuICB9XG59XG5cbi8qKlxuICogU3RhcnRzIHRoZSByZWFwZXIgZm9yIGFuIGVtdWxhdG9yIHRoZSBoYXJuZXNzIGp1c3QgcmVjb3JkZWQgYXMgaXRzIG93biwgd2hlblxuICogYSBsaXZlIHJ1biBob2xkcyB0aGUgYGFuZHJvaWRgIHNldHVwIGxvY2sgXHUyMDE0IGFuZCBzYXlzIHdoaWNoIGl0IGRpZC5cbiAqXG4gKiBOZXZlciB0aHJvd3M6IGEgcmVhcGVyIHRoYXQgY2Fubm90IGJlIHNwYXduZWQgaXMgYSBsb3N0IHNhZmV0eSBuZXQsIG5vdCBhXG4gKiByZWFzb24gdG8gZmFpbCB0aGUgbGF1bmNoIGl0IHdvdWxkIGhhdmUgZ3VhcmRlZC5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHJlY29yZGVkIGVtdWxhdG9yLCBhbmQgd2hlcmUgdG8gcmVwb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Bhd25FbXVsYXRvclJlYXBlcihwYXJhbXM6IFNwYXduRW11bGF0b3JSZWFwZXJQYXJhbXMpOiB2b2lkIHtcbiAgY29uc3QgeyBhdmROYW1lIH0gPSBwYXJhbXM7XG4gIGlmICghY2hlY2tJc1NldHVwTG9ja0hlbGQoQU5EUk9JRF9TRVRVUF9MT0NLX1NDT1BFKSkge1xuICAgIHBhcmFtcy5sb2coXG4gICAgICBgTm8gZW11bGF0b3IgcmVhcGVyIGFybWVkIGZvciBBVkQgXCIke2F2ZE5hbWV9XCI6IG5vIHJ1biBob2xkcyB0aGUgJyR7QU5EUk9JRF9TRVRVUF9MT0NLX1NDT1BFfScgc2V0dXAgbG9jaywgc28gYSByZWFwZXIgY291bGQgbm90IHRlbGwgdGhpcyBydW4gZW5kaW5nIGZyb20gaXQgYmVpbmcga2lsbGVkLiBJZiB0aGlzIHByb2Nlc3MgaXMga2lsbGVkLCBvbmx5IHRoZSBuZXh0IEFuZHJvaWQgcnVuIG9uIHRoaXMgaG9zdCBzdG9wcyB0aGUgZW11bGF0b3IuYFxuICAgICk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgbG9nRmlsZVBhdGggPSBqb2luKGdldFJlYXBlckxvZ0RpcmVjdG9yeSgpLCBgJHthdmROYW1lfSR7UkVBUEVSX0xPR19GSUxFX1NVRkZJWH1gKTtcbiAgdHJ5IHtcbiAgICBta2RpclN5bmMoZ2V0UmVhcGVyTG9nRGlyZWN0b3J5KCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnN0IGxvZ0ZpbGVEZXNjcmlwdG9yID0gb3BlblN5bmMobG9nRmlsZVBhdGgsIHJlc29sdmVFbXVsYXRvclJlYXBlckxvZ09wZW5GbGFnKHJlYWRGaWxlU2l6ZShsb2dGaWxlUGF0aCkpKTtcbiAgICB0cnkge1xuICAgICAgLypcbiAgICAgICAqIFRocm91Z2ggdGhlIHJlbGF5LCBuZXZlciBzdHJhaWdodCBhdCB0aGUgcmVhcGVyOiBhIHJlYXBlciBzcGF3bmVkIGhlcmVcbiAgICAgICAqIHdvdWxkIGJlIGEgY2hpbGQgb2YgdGhpcyBydW4gYW5kIHdvdWxkIGRpZSB3aXRoIGl0IHVuZGVyIGFueSBraWxsIHRoYXRcbiAgICAgICAqIHdhbGtzIHRoZSBwcm9jZXNzIHRyZWUuIFRoZSByZWxheSBleGl0cyBhdCBvbmNlLCBsZWF2aW5nIHRoZSByZWFwZXIgd2l0aFxuICAgICAgICogYSBkZWFkIHBhcmVudCBhbmQgbm8gZWRnZSBiYWNrIHRvIHRoaXMgcnVuLlxuICAgICAgICovXG4gICAgICBjb25zdCByZWxheSA9IHNwYXduKFxuICAgICAgICBwcm9jZXNzLmV4ZWNQYXRoLFxuICAgICAgICBbXG4gICAgICAgICAgJy1lJyxcbiAgICAgICAgICBidWlsZEVtdWxhdG9yUmVhcGVyUmVsYXlCb290c3RyYXAoKSxcbiAgICAgICAgICBidWlsZEVtdWxhdG9yUmVhcGVyQm9vdHN0cmFwKCksXG4gICAgICAgICAgcmVzb2x2ZU93bk1vZHVsZVVybCgpLFxuICAgICAgICAgIC4uLmJ1aWxkRW11bGF0b3JSZWFwZXJBcmd1bWVudHMoeyBhdmROYW1lLCBzdGFydGVkQXRJbk1pbGxpc2Vjb25kczogcGFyYW1zLnN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzIH0pXG4gICAgICAgIF0sXG4gICAgICAgIHsgZGV0YWNoZWQ6IHRydWUsIHN0ZGlvOiBbJ2lnbm9yZScsIGxvZ0ZpbGVEZXNjcmlwdG9yLCBsb2dGaWxlRGVzY3JpcHRvcl0sIHdpbmRvd3NIaWRlOiB0cnVlIH1cbiAgICAgICk7XG4gICAgICByZWxheS5vbmNlKCdlcnJvcicsIChlcnJvcikgPT4ge1xuICAgICAgICBwYXJhbXMubG9nKGBUaGUgZW11bGF0b3IgcmVhcGVyIHJlbGF5IGZvciBBVkQgXCIke2F2ZE5hbWV9XCIgZmFpbGVkIHRvIHN0YXJ0OiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgICB9KTtcbiAgICAgIHJlbGF5LnVucmVmKCk7XG4gICAgICBwYXJhbXMubG9nKFxuICAgICAgICBgRW11bGF0b3IgcmVhcGVyIGFybWVkIGZvciBBVkQgXCIke2F2ZE5hbWV9XCI6IGlmIHRoaXMgcnVuIGlzIGtpbGxlZCBcdTIwMTQgYSBwcm9jZXNzLXRyZWUga2lsbCBpbmNsdWRlZCwgc2luY2UgdGhlIHJlYXBlciBpcyBzdGFydGVkIHRocm91Z2ggYSByZWxheSB0aGF0IGV4aXRzIGF0IG9uY2UgXHUyMDE0IGl0IHN0b3BzIHRoZSBlbXVsYXRvciBvbmNlIG5vIEFuZHJvaWQgcnVuIGhvbGRzIHRoZSAnJHtBTkRST0lEX1NFVFVQX0xPQ0tfU0NPUEV9JyBzZXR1cCBsb2NrLiBJdHMgUElEIGlzIHRoZSBmaXJzdCBsaW5lIG9mIGl0cyBsb2c6ICR7bG9nRmlsZVBhdGh9YFxuICAgICAgKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY2xvc2VTeW5jKGxvZ0ZpbGVEZXNjcmlwdG9yKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAgcGFyYW1zLmxvZyhgQ291bGQgbm90IGFybSB0aGUgZW11bGF0b3IgcmVhcGVyIGZvciBBVkQgXCIke2F2ZE5hbWV9XCI6ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlc2NyaWJlRXhpdCh2ZXJkaWN0OiBFeGNsdWRlPEVtdWxhdG9yUmVhcGVyV2F0Y2hWZXJkaWN0LCAnd2F0Y2gnPik6IHN0cmluZyB7XG4gIHJldHVybiB2ZXJkaWN0ID09PSAnc3VwZXJzZWRlZCdcbiAgICA/ICdUaGUgbWFya2VyIG5vdyByZWNvcmRzIGEgbGF0ZXIgZW11bGF0b3Igb2YgdGhpcyBBVkQsIHdoaWNoIGhhcyBpdHMgb3duIHJlYXBlcjsgbm90aGluZyBsZWZ0IHRvIHdhdGNoLidcbiAgICA6ICdUaGUgZW11bGF0b3Igd2FzIHN0b3BwZWQ7IG5vdGhpbmcgbGVmdCB0byB3YXRjaC4nO1xufVxuXG5mdW5jdGlvbiBnZXRSZWFwZXJMb2dEaXJlY3RvcnkoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGpvaW4odG1wZGlyKCksIEhBUk5FU1NfVEVNUF9ESVJfTkFNRSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRGaWxlU2l6ZShwYXRoOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIHJldHVybiBzdGF0U3luYyhwYXRoKS5zaXplO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRXYXRjaFZlcmRpY3QocmVhcGVyQXJndW1lbnRzOiBFbXVsYXRvclJlYXBlckFyZ3VtZW50cyk6IEVtdWxhdG9yUmVhcGVyV2F0Y2hWZXJkaWN0IHtcbiAgcmV0dXJuIHJlc29sdmVFbXVsYXRvclJlYXBlcldhdGNoKHtcbiAgICBhcm1lZFN0YXJ0ZWRBdEluTWlsbGlzZWNvbmRzOiByZWFwZXJBcmd1bWVudHMuc3RhcnRlZEF0SW5NaWxsaXNlY29uZHMsXG4gICAgY2hlY2tJc1BpZEFsaXZlOiBjaGVja0lzUHJvY2Vzc0FsaXZlLFxuICAgIG1hcmtlcjogcmVhZEVtdWxhdG9yTWFya2VyKHJlYXBlckFyZ3VtZW50cy5hdmROYW1lKVxuICB9KTtcbn1cblxuLyoqXG4gKiBGaW5kcyB0aGlzIG1vZHVsZSdzIG93biBVUkwgXHUyMDE0IHRoZSBvbmUgdGhlIGJvb3RzdHJhcCBpbXBvcnRzLlxuICpcbiAqIFRoZSBDSlMgYnVpbGQgaGFzIG5vIGBpbXBvcnQubWV0YWAgKGVzYnVpbGQgZW1wdGllcyBpdCksIGJ1dCBpdCBoYXNcbiAqIGBfX2ZpbGVuYW1lYDsgdGhlIEVTTSBidWlsZCBhbmQgdGhlIGAudHNgIHNvdXJjZSBoYXZlIGBpbXBvcnQubWV0YS51cmxgLlxuICpcbiAqIEByZXR1cm5zIFRoZSBVUkwgb2YgdGhpcyBtb2R1bGUgYXMgaXQgaXMgcnVubmluZy5cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZU93bk1vZHVsZVVybCgpOiBzdHJpbmcge1xuICByZXR1cm4gdHlwZW9mIF9fZmlsZW5hbWUgPT09ICdzdHJpbmcnID8gcGF0aFRvRmlsZVVSTChfX2ZpbGVuYW1lKS5ocmVmIDogaW1wb3J0Lm1ldGEudXJsO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBdUVBLFNBQVMsYUFBYTtBQUN0QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxjQUFjO0FBQ3ZCLFNBQVMsWUFBWTtBQUNyQixPQUFPLGFBQWE7QUFDcEIsU0FBUyxxQkFBcUI7QUFLOUIsU0FBUywwQkFBMEI7QUFDbkMsU0FBUyx5QkFB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
@@ -83,4 +83,4 @@ export {
83
83
  enablePluginWithErrorCapture,
84
84
  getGenericPluginLoadFailureMessage
85
85
  };
86
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VuYWJsZS1wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTaGFyZWQgaGVscGVyIGZvciBlbmFibGluZyBhbiBPYnNpZGlhbiBwbHVnaW4gd2l0aCBlcnJvciBjYXB0dXJlLlxuICogVXNlZCBieSBib3RoIHRoZSBnbG9iYWwgc2V0dXAgYW5kIGludGVncmF0aW9uIHRlc3RzLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IENvbW1vbkFyZ3VtZW50cyB9IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5tanMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBlbmFibGVQbHVnaW5XaXRoRXJyb3JDYXB0dXJlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmFibGVQbHVnaW5QYXJhbXMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBwbHVnaW4gdG8gZW5hYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgZW5hYmxpbmcgYSBwbHVnaW4gd2l0aCBlcnJvciBjYXB0dXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuYWJsZVBsdWdpblJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgZXJyb3IgbWVzc2FnZSBjYXB0dXJlZCBieSB0aGUgYGxvYWRQbHVnaW5gIG1vbmtleS1wYXRjaCwgb3IgYHVuZGVmaW5lZGBcbiAgICogd2hlbiB0aGUgcGF0Y2ggc2F3IG5vIHRocm93LiBXaGVuIE9ic2lkaWFuIHN3YWxsb3dzIHRoZSBlcnJvciAqYmVmb3JlKiB0aGVcbiAgICogcGF0Y2ggKGxlYXZpbmcgdGhpcyBlbXB0eSkgYnV0IHRoZSBwbHVnaW4gc3RpbGwgZmFpbGVkIHRvIGxvYWQsIHRoZSByZWFsXG4gICAqIGNhdXNlIFx1MjAxNCBpZiBpdCByZWFjaGVkIHRoZSByZW5kZXJlciBjb25zb2xlIFx1MjAxNCBpcyBpbiB7QGxpbmsgRW5hYmxlUGx1Z2luUmVzdWx0LnJlbmRlcmVyQ29uc29sZUVycm9yc30uXG4gICAqL1xuICByZWFkb25seSBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcGx1Z2luIGlzIGluIHRoZSBlbmFibGVkIHNldCBhZnRlciB0aGUgZW5hYmxlIGF0dGVtcHQuXG4gICAqIEEgcGx1Z2luIGNhbiBiZSBcImVuYWJsZWRcIiAoY29uZmlndXJlZCkgYnV0IG5vdCBcImxvYWRlZFwiIChmYWlsZWQgdG8gaW5pdGlhbGl6ZSkuXG4gICAqL1xuICByZWFkb25seSBpc0VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHBsdWdpbiBpbnN0YW5jZSBhY3R1YWxseSBleGlzdHMgaW4gYGFwcC5wbHVnaW5zLnBsdWdpbnNgLlxuICAgKiBUaGlzIGlzIHRoZSBkZWZpbml0aXZlIGNoZWNrIFx1MjAxNCBhIHBsdWdpbiB0aGF0IGlzIGVuYWJsZWQgYnV0IG5vdCBsb2FkZWQgaGFzIGZhaWxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzTG9hZGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25zb2xlL2Vycm9yIG91dHB1dCBjYXB0dXJlZCBpbiB0aGUgcmVuZGVyZXIgZHVyaW5nIHRoZSBlbmFibGUgd2luZG93IFx1MjAxNFxuICAgKiBwb3B1bGF0ZWQgKipvbmx5Kiogd2hlbiB0aGUgcGx1Z2luIGZhaWxlZCB0byBsb2FkIGFuZCB0aGUgbW9ua2V5LXBhdGNoIHNhd1xuICAgKiBubyB0aHJvdyAoYCFlcnJvck1lc3NhZ2UgJiYgIWlzTG9hZGVkYCksIGkuZS4gZXhhY3RseSB0aGUgY2FzZSB0aGF0IHdvdWxkXG4gICAqIG90aGVyd2lzZSBzdXJmYWNlIHRoZSBnZW5lcmljIHtAbGluayBnZXRHZW5lcmljUGx1Z2luTG9hZEZhaWx1cmVNZXNzYWdlfSB0ZXh0LlxuICAgKiBgdW5kZWZpbmVkYCBvdGhlcndpc2UgKGluY2x1ZGluZyBvbiBzdWNjZXNzIGFuZCB3aGVuIHtAbGluayBFbmFibGVQbHVnaW5SZXN1bHQuZXJyb3JNZXNzYWdlfSBhbHJlYWR5IGhhcyB0aGUgZXJyb3IpLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVuZGVyZXJDb25zb2xlRXJyb3JzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmludGVyZmFjZSBJbnRlZ3JhdGlvblRlc3RpbmdFcnJvclRvU3RyaW5nIHtcbiAgZXJyb3JUb1N0cmluZyhlcnJvcjogdW5rbm93bik6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEludGVncmF0aW9uVGVzdGluZ0hvbGRlciB7XG4gIF9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc6IEludGVncmF0aW9uVGVzdGluZ0Vycm9yVG9TdHJpbmc7XG59XG5cbi8qKlxuICogRW5hYmxlcyBhIHBsdWdpbiBpbnNpZGUgT2JzaWRpYW4gYW5kIGNhcHR1cmVzIGFueSBsb2FkIGVycm9yLlxuICpcbiAqIE1vbmtleS1wYXRjaGVzIGBhcHAucGx1Z2lucy5sb2FkUGx1Z2luYCB0byBpbnRlcmNlcHQgZXJyb3JzIGJlZm9yZVxuICogT2JzaWRpYW4ncyBgZW5hYmxlUGx1Z2luYCB0cnktY2F0Y2ggc3dhbGxvd3MgdGhlbS4gVGhlIG9yaWdpbmFsIG1ldGhvZFxuICogaXMgYWx3YXlzIHJlc3RvcmVkIGluIGEgYGZpbmFsbHlgIGJsb2NrLlxuICpcbiAqIERlc2lnbmVkIHRvIGJlIHBhc3NlZCBhcyB0aGUgYGNhbGxiYWNrYCBhcmd1bWVudCB0byB7QGxpbmsgZXZhbEluT2JzaWRpYW59LlxuICpcbiAqIEBwYXJhbSBpbnB1dCAtIFRoZSBjb21tb24gaW5wdXQgcGx1cyB0aGUgcGx1Z2luIElELlxuICogQHBhcmFtIGlucHV0LmFwcCAtIFRoZSBPYnNpZGlhbiBhcHAgaW5zdGFuY2UuXG4gKiBAcGFyYW0gaW5wdXQucGx1Z2luSWQgLSBUaGUgSUQgb2YgdGhlIHBsdWdpbiB0byBlbmFibGUuXG4gKiBAcmV0dXJucyBUaGUgZW5hYmxlIHJlc3VsdCB3aXRoIGVycm9yIG1lc3NhZ2UgYW5kIGVuYWJsZWQgc3RhdHVzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5hYmxlUGx1Z2luV2l0aEVycm9yQ2FwdHVyZSh7IGFwcCwgcGx1Z2luSWQgfTogQ29tbW9uQXJndW1lbnRzICYgRW5hYmxlUGx1Z2luUGFyYW1zKTogUHJvbWlzZTxFbmFibGVQbHVnaW5SZXN1bHQ+IHtcbiAgaWYgKCFhcHAucGx1Z2lucy5pc0VuYWJsZWQoKSkge1xuICAgIGF3YWl0IGFwcC5wbHVnaW5zLnNldEVuYWJsZSh0cnVlKTtcbiAgfVxuXG4gIC8qXG4gICAqIEZvcmNlIGEgZ2VudWluZSByZWxvYWQgd2hlbiByZXRyeWluZy4gSWYgYSBwcmlvciBhdHRlbXB0IGxlZnQgdGhlIHBsdWdpbiBpblxuICAgKiB0aGUgZW5hYmxlZCBzZXQgYnV0IG5vdCBsb2FkZWQgKHRoZSBjb2xkLWJvb3QgcmFjZSksIGEgcGxhaW4gcmUtZW5hYmxlIGNhblxuICAgKiBzaG9ydC1jaXJjdWl0IG9uIHNvbWUgT2JzaWRpYW4gdmVyc2lvbnMgd2l0aG91dCByZS1hdHRlbXB0aW5nIHRoZSBsb2FkLlxuICAgKiBGdWxseSByZXNldCB0aGUgZW5hYmxlZCBzdGF0ZSBmaXJzdCBzbyB0aGUgYGVuYWJsZVBsdWdpbkFuZFNhdmVgIGJlbG93IGlzIGFcbiAgICogcmVhbCBmcmVzaCBlbmFibGUgKyBsb2FkLiBOby1vcCBvbiB0aGUgZmlyc3QgYXR0ZW1wdCAobm90IHlldCBlbmFibGVkKS5cbiAgICovXG4gIGlmIChhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMocGx1Z2luSWQpICYmICFPYmplY3QuaGFzT3duKGFwcC5wbHVnaW5zLnBsdWdpbnMsIHBsdWdpbklkKSkge1xuICAgIGF3YWl0IGFwcC5wbHVnaW5zLmRpc2FibGVQbHVnaW5BbmRTYXZlKHBsdWdpbklkKTtcbiAgfVxuXG4gIGxldCBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZCAtLSBJbnRlbnRpb25hbCBtb25rZXktcGF0Y2g7IHJlc3RvcmVkIGluIGZpbmFsbHkuXG4gIGNvbnN0IG9yaWdMb2FkUGx1Z2luID0gYXBwLnBsdWdpbnMubG9hZFBsdWdpbjtcbiAgYXBwLnBsdWdpbnMubG9hZFBsdWdpbiA9IGFzeW5jIGZ1bmN0aW9uIGxvYWRQbHVnaW4oaWQ6IHN0cmluZywgaXNVc2VyRW5hYmxlZD86IGJvb2xlYW4pOiBQcm9taXNlPFBsdWdpbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBvcmlnTG9hZFBsdWdpbi5jYWxsKHRoaXMsIGlkLCBpc1VzZXJFbmFibGVkKTtcbiAgICAgIGVycm9yTWVzc2FnZSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCAtLSBBcHByb3ZlZCBkb3VibGUgY2FzdDogYF9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3RpbmdgIGlzIG91ciBpbnRlcm5hbCBXaW5kb3cgYXVnbWVudGF0aW9uLCBpbnRlbnRpb25hbGx5IGtlcHQgbG9jYWwgKG5vdCBkZWNsYXJlZCBnbG9iYWxseSkgdG8gYXZvaWQgbGVha2luZyBpbnRvIGNvbnN1bWVyIHR5cGVzLlxuICAgICAgY29uc3QgaG9sZGVyID0gZ2xvYmFsVGhpcyBhcyB1bmtub3duIGFzIFBhcnRpYWw8SW50ZWdyYXRpb25UZXN0aW5nSG9sZGVyPjtcbiAgICAgIGVycm9yTWVzc2FnZSA9IGhvbGRlci5fX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nPy5lcnJvclRvU3RyaW5nKGVycm9yKSA/PyBTdHJpbmcoZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9O1xuXG4gIC8qXG4gICAqIExheWVyIDEgXHUyMDE0IGNhcHR1cmUgdGhlIHJlbmRlcmVyIGNvbnNvbGUgKyB1bmNhdWdodCBlcnJvcnMgZm9yIHRoZSBkdXJhdGlvbiBvZlxuICAgKiB0aGUgZW5hYmxlLiBJZiBPYnNpZGlhbiBzd2FsbG93cyB0aGUgbG9hZCBlcnJvciBiZWZvcmUgdGhlIG1vbmtleS1wYXRjaCBhYm92ZVxuICAgKiBzZWVzIGl0IChsZWF2aW5nIGBlcnJvck1lc3NhZ2VgIGVtcHR5KSwgdGhlIHJlYWwgY2F1c2UgaXMgdHlwaWNhbGx5IHN0aWxsXG4gICAqIGBjb25zb2xlLmVycm9yYCdkLCBzbyBjYXB0dXJpbmcgaXQgaGVyZSBzdXJmYWNlcyBpdCBpbiBwbGFjZSBvZiB0aGUgZ2VuZXJpY1xuICAgKiBmYWxsYmFjay4gV29ya3Mgb24gZGVza3RvcCBhbmQgQW5kcm9pZCBhbGlrZSBzaW5jZSB0aGlzIHdob2xlIGZ1bmN0aW9uIGlzXG4gICAqIHNlcmlhbGl6ZWQgYW5kIGluamVjdGVkIGludG8gdGhlIHJlbmRlcmVyLlxuICAgKi9cbiAgY29uc3QgY2FwdHVyZWRDb25zb2xlOiBzdHJpbmdbXSA9IFtdO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gQXBwcm92ZWQgZG91YmxlIGNhc3QsIHNhbWUgcmF0aW9uYWxlIGFzIGFib3ZlLlxuICBjb25zdCBmb3JtYXRIb2xkZXIgPSBnbG9iYWxUaGlzIGFzIHVua25vd24gYXMgUGFydGlhbDxJbnRlZ3JhdGlvblRlc3RpbmdIb2xkZXI+O1xuICBmdW5jdGlvbiBmb3JtYXRBcmd1bWVudChhcmd1bWVudDogdW5rbm93bik6IHN0cmluZyB7XG4gICAgaWYgKGFyZ3VtZW50IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIHJldHVybiBmb3JtYXRIb2xkZXIuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZz8uZXJyb3JUb1N0cmluZyhhcmd1bWVudCkgPz8gU3RyaW5nKGFyZ3VtZW50KTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBhcmd1bWVudCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBhcmd1bWVudDtcbiAgICB9XG4gICAgaWYgKGFyZ3VtZW50ID09PSB1bmRlZmluZWQgfHwgYXJndW1lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBTdHJpbmcoYXJndW1lbnQpO1xuICAgIH1cbiAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoYXJndW1lbnQpO1xuICAgIHJldHVybiBqc29uID8/IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudCk7XG4gIH1cbiAgZnVuY3Rpb24gcmVjb3JkQ29uc29sZSguLi5pbnB1dDogdW5rbm93bltdKTogdm9pZCB7XG4gICAgY2FwdHVyZWRDb25zb2xlLnB1c2goaW5wdXQubWFwKChhcmd1bWVudCkgPT4gZm9ybWF0QXJndW1lbnQoYXJndW1lbnQpKS5qb2luKCcgJykpO1xuICB9XG4gIGNvbnN0IG9yaWdDb25zb2xlRXJyb3IgPSBjb25zb2xlLmVycm9yO1xuICBjb25zdCBvcmlnQ29uc29sZVdhcm4gPSBjb25zb2xlLndhcm47XG4gIGNvbnNvbGUuZXJyb3IgPSAoLi4uaW5wdXQ6IHVua25vd25bXSk6IHZvaWQgPT4ge1xuICAgIHJlY29yZENvbnNvbGUoLi4uaW5wdXQpO1xuICAgIG9yaWdDb25zb2xlRXJyb3IuYXBwbHkoY29uc29sZSwgaW5wdXQpO1xuICB9O1xuICBjb25zb2xlLndhcm4gPSAoLi4uaW5wdXQ6IHVua25vd25bXSk6IHZvaWQgPT4ge1xuICAgIHJlY29yZENvbnNvbGUoLi4uaW5wdXQpO1xuICAgIG9yaWdDb25zb2xlV2Fybi5hcHBseShjb25zb2xlLCBpbnB1dCk7XG4gIH07XG4gIGZ1bmN0aW9uIG9uV2luZG93RXJyb3IoZXZlbnQ6IEVycm9yRXZlbnQpOiB2b2lkIHtcbiAgICBjYXB0dXJlZENvbnNvbGUucHVzaChldmVudC5lcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZm9ybWF0QXJndW1lbnQoZXZlbnQuZXJyb3IpIDogZXZlbnQubWVzc2FnZSk7XG4gIH1cbiAgZnVuY3Rpb24gb25VbmhhbmRsZWRSZWplY3Rpb24oZXZlbnQ6IFByb21pc2VSZWplY3Rpb25FdmVudCk6IHZvaWQge1xuICAgIGNhcHR1cmVkQ29uc29sZS5wdXNoKGZvcm1hdEFyZ3VtZW50KGV2ZW50LnJlYXNvbikpO1xuICB9XG4gIGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvbldpbmRvd0Vycm9yKTtcbiAgZ2xvYmFsVGhpcy5hZGRFdmVudExpc3RlbmVyKCd1bmhhbmRsZWRyZWplY3Rpb24nLCBvblVuaGFuZGxlZFJlamVjdGlvbik7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBhcHAucGx1Z2lucy5lbmFibGVQbHVnaW5BbmRTYXZlKHBsdWdpbklkKTtcbiAgfSBmaW5hbGx5IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVxdWlyZS1hdG9taWMtdXBkYXRlcyAtLSBJbnRlbnRpb25hbCByZXN0b3JlIG9mIG1vbmtleS1wYXRjaC5cbiAgICBhcHAucGx1Z2lucy5sb2FkUGx1Z2luID0gb3JpZ0xvYWRQbHVnaW47XG4gICAgY29uc29sZS5lcnJvciA9IG9yaWdDb25zb2xlRXJyb3I7XG4gICAgY29uc29sZS53YXJuID0gb3JpZ0NvbnNvbGVXYXJuO1xuICAgIGdsb2JhbFRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCBvbldpbmRvd0Vycm9yKTtcbiAgICBnbG9iYWxUaGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3VuaGFuZGxlZHJlamVjdGlvbicsIG9uVW5oYW5kbGVkUmVqZWN0aW9uKTtcbiAgfVxuXG4gIGNvbnN0IGlzTG9hZGVkID0gT2JqZWN0Lmhhc093bihhcHAucGx1Z2lucy5wbHVnaW5zLCBwbHVnaW5JZCk7XG5cbiAgbGV0IHJlbmRlcmVyQ29uc29sZUVycm9yczogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBpZiAoIWVycm9yTWVzc2FnZSAmJiAhaXNMb2FkZWQpIHtcbiAgICBjb25zdCBqb2luZWQgPSBjYXB0dXJlZENvbnNvbGUuam9pbignXFxuJykudHJpbSgpO1xuICAgIHJlbmRlcmVyQ29uc29sZUVycm9ycyA9IGpvaW5lZCB8fCB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVycm9yTWVzc2FnZSxcbiAgICBpc0VuYWJsZWQ6IGFwcC5wbHVnaW5zLmVuYWJsZWRQbHVnaW5zLmhhcyhwbHVnaW5JZCksXG4gICAgaXNMb2FkZWQsXG4gICAgcmVuZGVyZXJDb25zb2xlRXJyb3JzXG4gIH07XG59XG5cbi8qKlxuICogVGhlIGdlbmVyaWMgbGFzdC1yZXNvcnQgbWVzc2FnZSBzaG93biB3aGVuIGEgcGx1Z2luIGlzIGluIHRoZSBlbmFibGVkIHNldCBidXRcbiAqIG5vdCBsb2FkZWQgYW5kIG5vIHJlYWwgZXJyb3IgY291bGQgYmUgY2FwdHVyZWQgKG5laXRoZXIgdGhlIGBsb2FkUGx1Z2luYFxuICogbW9ua2V5LXBhdGNoIG5vciB0aGUgcmVuZGVyZXIgY29uc29sZSBub3IsIG9uIEFuZHJvaWQsIGBhZGIgbG9nY2F0YCBzdXJmYWNlZCBhXG4gKiBjYXVzZSkuXG4gKlxuICogSG9zdC1zaWRlIGhlbHBlciBcdTIwMTQgdXNlZCBieSB0aGUgc2V0dXAgb3JjaGVzdHJhdGlvbiB0byBjb21wb3NlIHRoZSBmaW5hbFxuICogZmFpbHVyZSBtZXNzYWdlLCBzbyB0aGUgcmVuZGVyZXItaW5qZWN0ZWQge0BsaW5rIGVuYWJsZVBsdWdpbldpdGhFcnJvckNhcHR1cmV9XG4gKiBzdGF5cyBzZWxmLWNvbnRhaW5lZC5cbiAqXG4gKiBAcGFyYW0gcGx1Z2luSWQgLSBUaGUgSUQgb2YgdGhlIHBsdWdpbiB0aGF0IGZhaWxlZCB0byBsb2FkLlxuICogQHJldHVybnMgVGhlIGdlbmVyaWMgZmFpbHVyZSBtZXNzYWdlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0R2VuZXJpY1BsdWdpbkxvYWRGYWlsdXJlTWVzc2FnZShwbHVnaW5JZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBQbHVnaW4gXCIke3BsdWdpbklkfVwiIGlzIGluIHRoZSBlbmFibGVkIHNldCBidXQgbm90IGxvYWRlZC4gYFxuICAgICsgJ09ic2lkaWFuIG1heSBoYXZlIGNhdWdodCB0aGUgZXJyb3IgYmVmb3JlIHRoZSBtb25rZXktcGF0Y2guICdcbiAgICArICdDaGVjayB0aGUgT2JzaWRpYW4gY29uc29sZSBmb3IgZGV0YWlscy4nO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIkFBK0VBLGVBQXNCLDZCQUE2QixFQUFFLEtBQUssU0FBUyxHQUFzRTtBQUN2SSxNQUFJLENBQUMsSUFBSSxRQUFRLFVBQVUsR0FBRztBQUM1QixVQUFNLElBQUksUUFBUSxVQUFVLElBQUk7QUFBQSxFQUNsQztBQVNBLE1BQUksSUFBSSxRQUFRLGVBQWUsSUFBSSxRQUFRLEtBQUssQ0FBQyxPQUFPLE9BQU8sSUFBSSxRQUFRLFNBQVMsUUFBUSxHQUFHO0FBQzdGLFVBQU0sSUFBSSxRQUFRLHFCQUFxQixRQUFRO0FBQUEsRUFDakQ7QUFFQSxNQUFJO0FBRUosUUFBTSxpQkFBaUIsSUFBSSxRQUFRO0FBQ25DLE1BQUksUUFBUSxhQUFhLGVBQWUsV0FBVyxJQUFZLGVBQTBDO0FBQ3ZHLFFBQUk7QUFDRixZQUFNLFNBQVMsTUFBTSxlQUFlLEtBQUssTUFBTSxJQUFJLGFBQWE7QUFDaEUscUJBQWU7QUFDZixhQUFPO0FBQUEsSUFDVCxTQUFTLE9BQU87QUFFZCxZQUFNLFNBQVM7QUFDZixxQkFBZSxPQUFPLDhCQUE4QixjQUFjLEtBQUssS0FBSyxPQUFPLEtBQUs7QUFDeEYsWUFBTTtBQUFBLElBQ1I7QUFBQSxFQUNGO0FBVUEsUUFBTSxrQkFBNEIsQ0FBQztBQUVuQyxRQUFNLGVBQWU7QUFDckIsV0FBUyxlQUFlLFVBQTJCO0FBQ2pELFFBQUksb0JBQW9CLE9BQU87QUFDN0IsYUFBTyxhQUFhLDhCQUE4QixjQUFjLFFBQVEsS0FBSyxPQUFPLFFBQVE7QUFBQSxJQUM5RjtBQUNBLFFBQUksT0FBTyxhQUFhLFVBQVU7QUFDaEMsYUFBTztBQUFBLElBQ1Q7QUFDQSxRQUFJLGFBQWEsVUFBYSxhQUFhLE1BQU07QUFDL0MsYUFBTyxPQUFPLFFBQVE7QUFBQSxJQUN4QjtBQUNBLFVBQU0sT0FBTyxLQUFLLFVBQVUsUUFBUTtBQUNwQyxXQUFPLFFBQVEsT0FBTyxVQUFVLFNBQVMsS0FBSyxRQUFRO0FBQUEsRUFDeEQ7QUFDQSxXQUFTLGlCQUFpQixPQUF3QjtBQUNoRCxvQkFBZ0IsS0FBSyxNQUFNLElBQUksQ0FBQyxhQUFhLGVBQWUsUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUM7QUFBQSxFQUNsRjtBQUNBLFFBQU0sbUJBQW1CLFFBQVE7QUFDakMsUUFBTSxrQkFBa0IsUUFBUTtBQUNoQyxVQUFRLFFBQVEsSUFBSSxVQUEyQjtBQUM3QyxrQkFBYyxHQUFHLEtBQUs7QUFDdEIscUJBQWlCLE1BQU0sU0FBUyxLQUFLO0FBQUEsRUFDdkM7QUFDQSxVQUFRLE9BQU8sSUFBSSxVQUEyQjtBQUM1QyxrQkFBYyxHQUFHLEtBQUs7QUFDdEIsb0JBQWdCLE1BQU0sU0FBUyxLQUFLO0FBQUEsRUFDdEM7QUFDQSxXQUFTLGNBQWMsT0FBeUI7QUFDOUMsb0JBQWdCLEtBQUssTUFBTSxpQkFBaUIsUUFBUSxlQUFlLE1BQU0sS0FBSyxJQUFJLE1BQU0sT0FBTztBQUFBLEVBQ2pHO0FBQ0EsV0FBUyxxQkFBcUIsT0FBb0M7QUFDaEUsb0JBQWdCLEtBQUssZUFBZSxNQUFNLE1BQU0sQ0FBQztBQUFBLEVBQ25EO0FBQ0EsYUFBVyxpQkFBaUIsU0FBUyxhQUFhO0FBQ2xELGFBQVcsaUJBQWlCLHNCQUFzQixvQkFBb0I7QUFFdEUsTUFBSTtBQUNGLFVBQU0sSUFBSSxRQUFRLG9CQUFvQixRQUFRO0FBQUEsRUFDaEQsVUFBRTtBQUVBLFFBQUksUUFBUSxhQUFhO0FBQ3pCLFlBQVEsUUFBUTtBQUNoQixZQUFRLE9BQU87QUFDZixlQUFXLG9CQUFvQixTQUFTLGFBQWE7QUFDckQsZUFBVyxvQkFBb0Isc0JBQXNCLG9CQUFvQjtBQUFBLEVBQzNFO0FBRUEsUUFBTSxXQUFXLE9BQU8sT0FBTyxJQUFJLFFBQVEsU0FBUyxRQUFRO0FBRTVELE1BQUk7QUFDSixNQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVTtBQUM5QixVQUFNLFNBQVMsZ0JBQWdCLEtBQUssSUFBSSxFQUFFLEtBQUs7QUFDL0MsNEJBQXdCLFVBQVU7QUFBQSxFQUNwQztBQUVBLFNBQU87QUFBQSxJQUNMO0FBQUEsSUFDQSxXQUFXLElBQUksUUFBUSxlQUFlLElBQUksUUFBUTtBQUFBLElBQ2xEO0FBQUEsSUFDQTtBQUFBLEVBQ0Y7QUFDRjtBQWVPLFNBQVMsbUNBQW1DLFVBQTBCO0FBQzNFLFNBQU8sV0FBVyxRQUFRO0FBRzVCOyIsCiAgIm5hbWVzIjogW10KfQo=
86
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2VuYWJsZS1wbHVnaW4udHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBTaGFyZWQgaGVscGVyIGZvciBlbmFibGluZyBhbiBPYnNpZGlhbiBwbHVnaW4gd2l0aCBlcnJvciBjYXB0dXJlLlxuICogVXNlZCBieSBib3RoIHRoZSBnbG9iYWwgc2V0dXAgYW5kIGludGVncmF0aW9uIHRlc3RzLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIGNvZGUgY292ZXJlZCBieSBpbnRlZ3JhdGlvbiB0ZXN0cywgbm90IHVuaXQgdGVzdHMuICovXG5cbmltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSAnb2JzaWRpYW4nO1xuXG5pbXBvcnQgdHlwZSB7IENvbW1vbkFyZ3VtZW50cyB9IGZyb20gJy4vZXZhbC1pbi1vYnNpZGlhbi5tanMnO1xuXG4vKipcbiAqIFBhcmFtZXRlcnMgZm9yIHtAbGluayBlbmFibGVQbHVnaW5XaXRoRXJyb3JDYXB0dXJlfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbmFibGVQbHVnaW5QYXJhbXMge1xuICAvKipcbiAgICogVGhlIElEIG9mIHRoZSBwbHVnaW4gdG8gZW5hYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2luSWQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXN1bHQgb2YgZW5hYmxpbmcgYSBwbHVnaW4gd2l0aCBlcnJvciBjYXB0dXJlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVuYWJsZVBsdWdpblJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgZXJyb3IgbWVzc2FnZSBjYXB0dXJlZCBieSB0aGUgYGxvYWRQbHVnaW5gIG1vbmtleS1wYXRjaCwgb3IgYHVuZGVmaW5lZGBcbiAgICogd2hlbiB0aGUgcGF0Y2ggc2F3IG5vIHRocm93LiBXaGVuIE9ic2lkaWFuIHN3YWxsb3dzIHRoZSBlcnJvciAqYmVmb3JlKiB0aGVcbiAgICogcGF0Y2ggKGxlYXZpbmcgdGhpcyBlbXB0eSkgYnV0IHRoZSBwbHVnaW4gc3RpbGwgZmFpbGVkIHRvIGxvYWQsIHRoZSByZWFsXG4gICAqIGNhdXNlIFx1MjAxNCBpZiBpdCByZWFjaGVkIHRoZSByZW5kZXJlciBjb25zb2xlIFx1MjAxNCBpcyBpbiB7QGxpbmsgRW5hYmxlUGx1Z2luUmVzdWx0LnJlbmRlcmVyQ29uc29sZUVycm9yc30uXG4gICAqL1xuICByZWFkb25seSBlcnJvck1lc3NhZ2U6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgcGx1Z2luIGlzIGluIHRoZSBlbmFibGVkIHNldCBhZnRlciB0aGUgZW5hYmxlIGF0dGVtcHQuXG4gICAqIEEgcGx1Z2luIGNhbiBiZSBcImVuYWJsZWRcIiAoY29uZmlndXJlZCkgYnV0IG5vdCBcImxvYWRlZFwiIChmYWlsZWQgdG8gaW5pdGlhbGl6ZSkuXG4gICAqL1xuICByZWFkb25seSBpc0VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHBsdWdpbiBpbnN0YW5jZSBhY3R1YWxseSBleGlzdHMgaW4gYGFwcC5wbHVnaW5zLnBsdWdpbnNgLlxuICAgKiBUaGlzIGlzIHRoZSBkZWZpbml0aXZlIGNoZWNrIFx1MjAxNCBhIHBsdWdpbiB0aGF0IGlzIGVuYWJsZWQgYnV0IG5vdCBsb2FkZWQgaGFzIGZhaWxlZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzTG9hZGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25zb2xlL2Vycm9yIG91dHB1dCBjYXB0dXJlZCBpbiB0aGUgcmVuZGVyZXIgZHVyaW5nIHRoZSBlbmFibGUgd2luZG93IFx1MjAxNFxuICAgKiBwb3B1bGF0ZWQgKipvbmx5Kiogd2hlbiB0aGUgcGx1Z2luIGZhaWxlZCB0byBsb2FkIGFuZCB0aGUgbW9ua2V5LXBhdGNoIHNhd1xuICAgKiBubyB0aHJvdyAoYCFlcnJvck1lc3NhZ2UgJiYgIWlzTG9hZGVkYCksIGkuZS4gZXhhY3RseSB0aGUgY2FzZSB0aGF0IHdvdWxkXG4gICAqIG90aGVyd2lzZSBzdXJmYWNlIHRoZSBnZW5lcmljIHtAbGluayBnZXRHZW5lcmljUGx1Z2luTG9hZEZhaWx1cmVNZXNzYWdlfSB0ZXh0LlxuICAgKiBgdW5kZWZpbmVkYCBvdGhlcndpc2UgKGluY2x1ZGluZyBvbiBzdWNjZXNzIGFuZCB3aGVuIHtAbGluayBFbmFibGVQbHVnaW5SZXN1bHQuZXJyb3JNZXNzYWdlfSBhbHJlYWR5IGhhcyB0aGUgZXJyb3IpLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVuZGVyZXJDb25zb2xlRXJyb3JzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmludGVyZmFjZSBJbnRlZ3JhdGlvblRlc3RpbmdFcnJvclRvU3RyaW5nIHtcbiAgZXJyb3JUb1N0cmluZzogKGVycm9yOiB1bmtub3duKSA9PiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBJbnRlZ3JhdGlvblRlc3RpbmdIb2xkZXIge1xuICBfX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nOiBJbnRlZ3JhdGlvblRlc3RpbmdFcnJvclRvU3RyaW5nO1xufVxuXG4vKipcbiAqIEVuYWJsZXMgYSBwbHVnaW4gaW5zaWRlIE9ic2lkaWFuIGFuZCBjYXB0dXJlcyBhbnkgbG9hZCBlcnJvci5cbiAqXG4gKiBNb25rZXktcGF0Y2hlcyBgYXBwLnBsdWdpbnMubG9hZFBsdWdpbmAgdG8gaW50ZXJjZXB0IGVycm9ycyBiZWZvcmVcbiAqIE9ic2lkaWFuJ3MgYGVuYWJsZVBsdWdpbmAgdHJ5LWNhdGNoIHN3YWxsb3dzIHRoZW0uIFRoZSBvcmlnaW5hbCBtZXRob2RcbiAqIGlzIGFsd2F5cyByZXN0b3JlZCBpbiBhIGBmaW5hbGx5YCBibG9jay5cbiAqXG4gKiBEZXNpZ25lZCB0byBiZSBwYXNzZWQgYXMgdGhlIGBjYWxsYmFja2AgYXJndW1lbnQgdG8ge0BsaW5rIGV2YWxJbk9ic2lkaWFufS5cbiAqXG4gKiBAcGFyYW0gaW5wdXQgLSBUaGUgY29tbW9uIGlucHV0IHBsdXMgdGhlIHBsdWdpbiBJRC5cbiAqIEBwYXJhbSBpbnB1dC5hcHAgLSBUaGUgT2JzaWRpYW4gYXBwIGluc3RhbmNlLlxuICogQHBhcmFtIGlucHV0LnBsdWdpbklkIC0gVGhlIElEIG9mIHRoZSBwbHVnaW4gdG8gZW5hYmxlLlxuICogQHJldHVybnMgVGhlIGVuYWJsZSByZXN1bHQgd2l0aCBlcnJvciBtZXNzYWdlIGFuZCBlbmFibGVkIHN0YXR1cy5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuYWJsZVBsdWdpbldpdGhFcnJvckNhcHR1cmUoeyBhcHAsIHBsdWdpbklkIH06IENvbW1vbkFyZ3VtZW50cyAmIEVuYWJsZVBsdWdpblBhcmFtcyk6IFByb21pc2U8RW5hYmxlUGx1Z2luUmVzdWx0PiB7XG4gIGlmICghYXBwLnBsdWdpbnMuaXNFbmFibGVkKCkpIHtcbiAgICBhd2FpdCBhcHAucGx1Z2lucy5zZXRFbmFibGUodHJ1ZSk7XG4gIH1cblxuICAvKlxuICAgKiBGb3JjZSBhIGdlbnVpbmUgcmVsb2FkIHdoZW4gcmV0cnlpbmcuIElmIGEgcHJpb3IgYXR0ZW1wdCBsZWZ0IHRoZSBwbHVnaW4gaW5cbiAgICogdGhlIGVuYWJsZWQgc2V0IGJ1dCBub3QgbG9hZGVkICh0aGUgY29sZC1ib290IHJhY2UpLCBhIHBsYWluIHJlLWVuYWJsZSBjYW5cbiAgICogc2hvcnQtY2lyY3VpdCBvbiBzb21lIE9ic2lkaWFuIHZlcnNpb25zIHdpdGhvdXQgcmUtYXR0ZW1wdGluZyB0aGUgbG9hZC5cbiAgICogRnVsbHkgcmVzZXQgdGhlIGVuYWJsZWQgc3RhdGUgZmlyc3Qgc28gdGhlIGBlbmFibGVQbHVnaW5BbmRTYXZlYCBiZWxvdyBpcyBhXG4gICAqIHJlYWwgZnJlc2ggZW5hYmxlICsgbG9hZC4gTm8tb3Agb24gdGhlIGZpcnN0IGF0dGVtcHQgKG5vdCB5ZXQgZW5hYmxlZCkuXG4gICAqL1xuICBpZiAoYXBwLnBsdWdpbnMuZW5hYmxlZFBsdWdpbnMuaGFzKHBsdWdpbklkKSAmJiAhT2JqZWN0Lmhhc093bihhcHAucGx1Z2lucy5wbHVnaW5zLCBwbHVnaW5JZCkpIHtcbiAgICBhd2FpdCBhcHAucGx1Z2lucy5kaXNhYmxlUGx1Z2luQW5kU2F2ZShwbHVnaW5JZCk7XG4gIH1cblxuICBsZXQgZXJyb3JNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2QgLS0gSW50ZW50aW9uYWwgbW9ua2V5LXBhdGNoOyByZXN0b3JlZCBpbiBmaW5hbGx5LlxuICBjb25zdCBvcmlnTG9hZFBsdWdpbiA9IGFwcC5wbHVnaW5zLmxvYWRQbHVnaW47XG4gIGFwcC5wbHVnaW5zLmxvYWRQbHVnaW4gPSBhc3luYyBmdW5jdGlvbiBsb2FkUGx1Z2luKGlkOiBzdHJpbmcsIGlzVXNlckVuYWJsZWQ/OiBib29sZWFuKTogUHJvbWlzZTxQbHVnaW4+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgb3JpZ0xvYWRQbHVnaW4uY2FsbCh0aGlzLCBpZCwgaXNVc2VyRW5hYmxlZCk7XG4gICAgICBlcnJvck1lc3NhZ2UgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXggLS0gQXBwcm92ZWQgZG91YmxlIGNhc3Q6IGBfX29ic2lkaWFuSW50ZWdyYXRpb25UZXN0aW5nYCBpcyBvdXIgaW50ZXJuYWwgV2luZG93IGF1Z21lbnRhdGlvbiwgaW50ZW50aW9uYWxseSBrZXB0IGxvY2FsIChub3QgZGVjbGFyZWQgZ2xvYmFsbHkpIHRvIGF2b2lkIGxlYWtpbmcgaW50byBjb25zdW1lciB0eXBlcy5cbiAgICAgIGNvbnN0IGhvbGRlciA9IGdsb2JhbFRoaXMgYXMgdW5rbm93biBhcyBQYXJ0aWFsPEludGVncmF0aW9uVGVzdGluZ0hvbGRlcj47XG4gICAgICBlcnJvck1lc3NhZ2UgPSBob2xkZXIuX19vYnNpZGlhbkludGVncmF0aW9uVGVzdGluZz8uZXJyb3JUb1N0cmluZyhlcnJvcikgPz8gU3RyaW5nKGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfTtcblxuICAvKlxuICAgKiBMYXllciAxIFx1MjAxNCBjYXB0dXJlIHRoZSByZW5kZXJlciBjb25zb2xlICsgdW5jYXVnaHQgZXJyb3JzIGZvciB0aGUgZHVyYXRpb24gb2ZcbiAgICogdGhlIGVuYWJsZS4gSWYgT2JzaWRpYW4gc3dhbGxvd3MgdGhlIGxvYWQgZXJyb3IgYmVmb3JlIHRoZSBtb25rZXktcGF0Y2ggYWJvdmVcbiAgICogc2VlcyBpdCAobGVhdmluZyBgZXJyb3JNZXNzYWdlYCBlbXB0eSksIHRoZSByZWFsIGNhdXNlIGlzIHR5cGljYWxseSBzdGlsbFxuICAgKiBgY29uc29sZS5lcnJvcmAnZCwgc28gY2FwdHVyaW5nIGl0IGhlcmUgc3VyZmFjZXMgaXQgaW4gcGxhY2Ugb2YgdGhlIGdlbmVyaWNcbiAgICogZmFsbGJhY2suIFdvcmtzIG9uIGRlc2t0b3AgYW5kIEFuZHJvaWQgYWxpa2Ugc2luY2UgdGhpcyB3aG9sZSBmdW5jdGlvbiBpc1xuICAgKiBzZXJpYWxpemVkIGFuZCBpbmplY3RlZCBpbnRvIHRoZSByZW5kZXJlci5cbiAgICovXG4gIGNvbnN0IGNhcHR1cmVkQ29uc29sZTogc3RyaW5nW10gPSBbXTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4IC0tIEFwcHJvdmVkIGRvdWJsZSBjYXN0LCBzYW1lIHJhdGlvbmFsZSBhcyBhYm92ZS5cbiAgY29uc3QgZm9ybWF0SG9sZGVyID0gZ2xvYmFsVGhpcyBhcyB1bmtub3duIGFzIFBhcnRpYWw8SW50ZWdyYXRpb25UZXN0aW5nSG9sZGVyPjtcbiAgZnVuY3Rpb24gZm9ybWF0QXJndW1lbnQoYXJndW1lbnQ6IHVua25vd24pOiBzdHJpbmcge1xuICAgIGlmIChhcmd1bWVudCBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICByZXR1cm4gZm9ybWF0SG9sZGVyLl9fb2JzaWRpYW5JbnRlZ3JhdGlvblRlc3Rpbmc/LmVycm9yVG9TdHJpbmcoYXJndW1lbnQpID8/IFN0cmluZyhhcmd1bWVudCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgYXJndW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnQ7XG4gICAgfVxuICAgIGlmIChhcmd1bWVudCA9PT0gdW5kZWZpbmVkIHx8IGFyZ3VtZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gU3RyaW5nKGFyZ3VtZW50KTtcbiAgICB9XG4gICAgY29uc3QganNvbiA9IEpTT04uc3RyaW5naWZ5KGFyZ3VtZW50KTtcbiAgICByZXR1cm4ganNvbiA/PyBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnQpO1xuICB9XG4gIGZ1bmN0aW9uIHJlY29yZENvbnNvbGUoLi4uaW5wdXQ6IHVua25vd25bXSk6IHZvaWQge1xuICAgIGNhcHR1cmVkQ29uc29sZS5wdXNoKGlucHV0Lm1hcCgoYXJndW1lbnQpID0+IGZvcm1hdEFyZ3VtZW50KGFyZ3VtZW50KSkuam9pbignICcpKTtcbiAgfVxuICBjb25zdCBvcmlnQ29uc29sZUVycm9yID0gY29uc29sZS5lcnJvcjtcbiAgY29uc3Qgb3JpZ0NvbnNvbGVXYXJuID0gY29uc29sZS53YXJuO1xuICBjb25zb2xlLmVycm9yID0gKC4uLmlucHV0OiB1bmtub3duW10pOiB2b2lkID0+IHtcbiAgICByZWNvcmRDb25zb2xlKC4uLmlucHV0KTtcbiAgICBvcmlnQ29uc29sZUVycm9yLmFwcGx5KGNvbnNvbGUsIGlucHV0KTtcbiAgfTtcbiAgY29uc29sZS53YXJuID0gKC4uLmlucHV0OiB1bmtub3duW10pOiB2b2lkID0+IHtcbiAgICByZWNvcmRDb25zb2xlKC4uLmlucHV0KTtcbiAgICBvcmlnQ29uc29sZVdhcm4uYXBwbHkoY29uc29sZSwgaW5wdXQpO1xuICB9O1xuICBmdW5jdGlvbiBvbldpbmRvd0Vycm9yKGV2ZW50OiBFcnJvckV2ZW50KTogdm9pZCB7XG4gICAgY2FwdHVyZWRDb25zb2xlLnB1c2goZXZlbnQuZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGZvcm1hdEFyZ3VtZW50KGV2ZW50LmVycm9yKSA6IGV2ZW50Lm1lc3NhZ2UpO1xuICB9XG4gIGZ1bmN0aW9uIG9uVW5oYW5kbGVkUmVqZWN0aW9uKGV2ZW50OiBQcm9taXNlUmVqZWN0aW9uRXZlbnQpOiB2b2lkIHtcbiAgICBjYXB0dXJlZENvbnNvbGUucHVzaChmb3JtYXRBcmd1bWVudChldmVudC5yZWFzb24pKTtcbiAgfVxuICBnbG9iYWxUaGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25XaW5kb3dFcnJvcik7XG4gIGdsb2JhbFRoaXMuYWRkRXZlbnRMaXN0ZW5lcigndW5oYW5kbGVkcmVqZWN0aW9uJywgb25VbmhhbmRsZWRSZWplY3Rpb24pO1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgYXBwLnBsdWdpbnMuZW5hYmxlUGx1Z2luQW5kU2F2ZShwbHVnaW5JZCk7XG4gIH0gZmluYWxseSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlcXVpcmUtYXRvbWljLXVwZGF0ZXMgLS0gSW50ZW50aW9uYWwgcmVzdG9yZSBvZiBtb25rZXktcGF0Y2guXG4gICAgYXBwLnBsdWdpbnMubG9hZFBsdWdpbiA9IG9yaWdMb2FkUGx1Z2luO1xuICAgIGNvbnNvbGUuZXJyb3IgPSBvcmlnQ29uc29sZUVycm9yO1xuICAgIGNvbnNvbGUud2FybiA9IG9yaWdDb25zb2xlV2FybjtcbiAgICBnbG9iYWxUaGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgb25XaW5kb3dFcnJvcik7XG4gICAgZ2xvYmFsVGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCd1bmhhbmRsZWRyZWplY3Rpb24nLCBvblVuaGFuZGxlZFJlamVjdGlvbik7XG4gIH1cblxuICBjb25zdCBpc0xvYWRlZCA9IE9iamVjdC5oYXNPd24oYXBwLnBsdWdpbnMucGx1Z2lucywgcGx1Z2luSWQpO1xuXG4gIGxldCByZW5kZXJlckNvbnNvbGVFcnJvcnM6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgaWYgKCFlcnJvck1lc3NhZ2UgJiYgIWlzTG9hZGVkKSB7XG4gICAgY29uc3Qgam9pbmVkID0gY2FwdHVyZWRDb25zb2xlLmpvaW4oJ1xcbicpLnRyaW0oKTtcbiAgICByZW5kZXJlckNvbnNvbGVFcnJvcnMgPSBqb2luZWQgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBlcnJvck1lc3NhZ2UsXG4gICAgaXNFbmFibGVkOiBhcHAucGx1Z2lucy5lbmFibGVkUGx1Z2lucy5oYXMocGx1Z2luSWQpLFxuICAgIGlzTG9hZGVkLFxuICAgIHJlbmRlcmVyQ29uc29sZUVycm9yc1xuICB9O1xufVxuXG4vKipcbiAqIFRoZSBnZW5lcmljIGxhc3QtcmVzb3J0IG1lc3NhZ2Ugc2hvd24gd2hlbiBhIHBsdWdpbiBpcyBpbiB0aGUgZW5hYmxlZCBzZXQgYnV0XG4gKiBub3QgbG9hZGVkIGFuZCBubyByZWFsIGVycm9yIGNvdWxkIGJlIGNhcHR1cmVkIChuZWl0aGVyIHRoZSBgbG9hZFBsdWdpbmBcbiAqIG1vbmtleS1wYXRjaCBub3IgdGhlIHJlbmRlcmVyIGNvbnNvbGUgbm9yLCBvbiBBbmRyb2lkLCBgYWRiIGxvZ2NhdGAgc3VyZmFjZWQgYVxuICogY2F1c2UpLlxuICpcbiAqIEhvc3Qtc2lkZSBoZWxwZXIgXHUyMDE0IHVzZWQgYnkgdGhlIHNldHVwIG9yY2hlc3RyYXRpb24gdG8gY29tcG9zZSB0aGUgZmluYWxcbiAqIGZhaWx1cmUgbWVzc2FnZSwgc28gdGhlIHJlbmRlcmVyLWluamVjdGVkIHtAbGluayBlbmFibGVQbHVnaW5XaXRoRXJyb3JDYXB0dXJlfVxuICogc3RheXMgc2VsZi1jb250YWluZWQuXG4gKlxuICogQHBhcmFtIHBsdWdpbklkIC0gVGhlIElEIG9mIHRoZSBwbHVnaW4gdGhhdCBmYWlsZWQgdG8gbG9hZC5cbiAqIEByZXR1cm5zIFRoZSBnZW5lcmljIGZhaWx1cmUgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdlbmVyaWNQbHVnaW5Mb2FkRmFpbHVyZU1lc3NhZ2UocGx1Z2luSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgUGx1Z2luIFwiJHtwbHVnaW5JZH1cIiBpcyBpbiB0aGUgZW5hYmxlZCBzZXQgYnV0IG5vdCBsb2FkZWQuIGBcbiAgICArICdPYnNpZGlhbiBtYXkgaGF2ZSBjYXVnaHQgdGhlIGVycm9yIGJlZm9yZSB0aGUgbW9ua2V5LXBhdGNoLiAnXG4gICAgKyAnQ2hlY2sgdGhlIE9ic2lkaWFuIGNvbnNvbGUgZm9yIGRldGFpbHMuJztcbn1cblxuLyogdjggaWdub3JlIHN0b3AgKi9cbiJdLAogICJtYXBwaW5ncyI6ICJBQStFQSxlQUFzQiw2QkFBNkIsRUFBRSxLQUFLLFNBQVMsR0FBc0U7QUFDdkksTUFBSSxDQUFDLElBQUksUUFBUSxVQUFVLEdBQUc7QUFDNUIsVUFBTSxJQUFJLFFBQVEsVUFBVSxJQUFJO0FBQUEsRUFDbEM7QUFTQSxNQUFJLElBQUksUUFBUSxlQUFlLElBQUksUUFBUSxLQUFLLENBQUMsT0FBTyxPQUFPLElBQUksUUFBUSxTQUFTLFFBQVEsR0FBRztBQUM3RixVQUFNLElBQUksUUFBUSxxQkFBcUIsUUFBUTtBQUFBLEVBQ2pEO0FBRUEsTUFBSTtBQUVKLFFBQU0saUJBQWlCLElBQUksUUFBUTtBQUNuQyxNQUFJLFFBQVEsYUFBYSxlQUFlLFdBQVcsSUFBWSxlQUEwQztBQUN2RyxRQUFJO0FBQ0YsWUFBTSxTQUFTLE1BQU0sZUFBZSxLQUFLLE1BQU0sSUFBSSxhQUFhO0FBQ2hFLHFCQUFlO0FBQ2YsYUFBTztBQUFBLElBQ1QsU0FBUyxPQUFPO0FBRWQsWUFBTSxTQUFTO0FBQ2YscUJBQWUsT0FBTyw4QkFBOEIsY0FBYyxLQUFLLEtBQUssT0FBTyxLQUFLO0FBQ3hGLFlBQU07QUFBQSxJQUNSO0FBQUEsRUFDRjtBQVVBLFFBQU0sa0JBQTRCLENBQUM7QUFFbkMsUUFBTSxlQUFlO0FBQ3JCLFdBQVMsZUFBZSxVQUEyQjtBQUNqRCxRQUFJLG9CQUFvQixPQUFPO0FBQzdCLGFBQU8sYUFBYSw4QkFBOEIsY0FBYyxRQUFRLEtBQUssT0FBTyxRQUFRO0FBQUEsSUFDOUY7QUFDQSxRQUFJLE9BQU8sYUFBYSxVQUFVO0FBQ2hDLGFBQU87QUFBQSxJQUNUO0FBQ0EsUUFBSSxhQUFhLFVBQWEsYUFBYSxNQUFNO0FBQy9DLGFBQU8sT0FBTyxRQUFRO0FBQUEsSUFDeEI7QUFDQSxVQUFNLE9BQU8sS0FBSyxVQUFVLFFBQVE7QUFDcEMsV0FBTyxRQUFRLE9BQU8sVUFBVSxTQUFTLEtBQUssUUFBUTtBQUFBLEVBQ3hEO0FBQ0EsV0FBUyxpQkFBaUIsT0FBd0I7QUFDaEQsb0JBQWdCLEtBQUssTUFBTSxJQUFJLENBQUMsYUFBYSxlQUFlLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDO0FBQUEsRUFDbEY7QUFDQSxRQUFNLG1CQUFtQixRQUFRO0FBQ2pDLFFBQU0sa0JBQWtCLFFBQVE7QUFDaEMsVUFBUSxRQUFRLElBQUksVUFBMkI7QUFDN0Msa0JBQWMsR0FBRyxLQUFLO0FBQ3RCLHFCQUFpQixNQUFNLFNBQVMsS0FBSztBQUFBLEVBQ3ZDO0FBQ0EsVUFBUSxPQUFPLElBQUksVUFBMkI7QUFDNUMsa0JBQWMsR0FBRyxLQUFLO0FBQ3RCLG9CQUFnQixNQUFNLFNBQVMsS0FBSztBQUFBLEVBQ3RDO0FBQ0EsV0FBUyxjQUFjLE9BQXlCO0FBQzlDLG9CQUFnQixLQUFLLE1BQU0saUJBQWlCLFFBQVEsZUFBZSxNQUFNLEtBQUssSUFBSSxNQUFNLE9BQU87QUFBQSxFQUNqRztBQUNBLFdBQVMscUJBQXFCLE9BQW9DO0FBQ2hFLG9CQUFnQixLQUFLLGVBQWUsTUFBTSxNQUFNLENBQUM7QUFBQSxFQUNuRDtBQUNBLGFBQVcsaUJBQWlCLFNBQVMsYUFBYTtBQUNsRCxhQUFXLGlCQUFpQixzQkFBc0Isb0JBQW9CO0FBRXRFLE1BQUk7QUFDRixVQUFNLElBQUksUUFBUSxvQkFBb0IsUUFBUTtBQUFBLEVBQ2hELFVBQUU7QUFFQSxRQUFJLFFBQVEsYUFBYTtBQUN6QixZQUFRLFFBQVE7QUFDaEIsWUFBUSxPQUFPO0FBQ2YsZUFBVyxvQkFBb0IsU0FBUyxhQUFhO0FBQ3JELGVBQVcsb0JBQW9CLHNCQUFzQixvQkFBb0I7QUFBQSxFQUMzRTtBQUVBLFFBQU0sV0FBVyxPQUFPLE9BQU8sSUFBSSxRQUFRLFNBQVMsUUFBUTtBQUU1RCxNQUFJO0FBQ0osTUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVU7QUFDOUIsVUFBTSxTQUFTLGdCQUFnQixLQUFLLElBQUksRUFBRSxLQUFLO0FBQy9DLDRCQUF3QixVQUFVO0FBQUEsRUFDcEM7QUFFQSxTQUFPO0FBQUEsSUFDTDtBQUFBLElBQ0EsV0FBVyxJQUFJLFFBQVEsZUFBZSxJQUFJLFFBQVE7QUFBQSxJQUNsRDtBQUFBLElBQ0E7QUFBQSxFQUNGO0FBQ0Y7QUFlTyxTQUFTLG1DQUFtQyxVQUEwQjtBQUMzRSxTQUFPLFdBQVcsUUFBUTtBQUc1QjsiLAogICJuYW1lcyI6IFtdCn0K