@eui/components 18.2.16-snapshot-1756456305763 → 18.2.16-snapshot-1756489547144

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 (86) hide show
  1. package/docs/js/search/search_index.js +2 -2
  2. package/docs/miscellaneous/variables.html +499 -71
  3. package/docs/properties.html +1 -1
  4. package/esm2022/eui-file-upload/utils/eui-file-upload.validators.mjs +3 -2
  5. package/esm2022/eui-file-upload/utils/mime-types.mjs +292 -39
  6. package/eui-file-upload/utils/mime-types.d.ts.map +1 -1
  7. package/fesm2022/eui-components-eui-file-upload.mjs +293 -39
  8. package/fesm2022/eui-components-eui-file-upload.mjs.map +1 -1
  9. package/package.json +9 -9
  10. package/directives/package.json +0 -3
  11. package/eui-accordion/package.json +0 -3
  12. package/eui-alert/package.json +0 -3
  13. package/eui-autocomplete/package.json +0 -3
  14. package/eui-avatar/package.json +0 -3
  15. package/eui-badge/package.json +0 -3
  16. package/eui-block-content/package.json +0 -3
  17. package/eui-block-document/package.json +0 -3
  18. package/eui-breadcrumb/package.json +0 -3
  19. package/eui-button/package.json +0 -3
  20. package/eui-button-group/package.json +0 -3
  21. package/eui-button-v2/package.json +0 -3
  22. package/eui-card/package.json +0 -3
  23. package/eui-chip/package.json +0 -3
  24. package/eui-chip-list/package.json +0 -3
  25. package/eui-dashboard-button/package.json +0 -3
  26. package/eui-dashboard-card/package.json +0 -3
  27. package/eui-date-range-selector/package.json +0 -3
  28. package/eui-datepicker/package.json +0 -3
  29. package/eui-dialog/package.json +0 -3
  30. package/eui-dimmer/package.json +0 -3
  31. package/eui-disable-content/package.json +0 -3
  32. package/eui-discussion-thread/package.json +0 -3
  33. package/eui-dropdown/package.json +0 -3
  34. package/eui-feedback-message/package.json +0 -3
  35. package/eui-fieldset/package.json +0 -3
  36. package/eui-file-upload/package.json +0 -3
  37. package/eui-growl/package.json +0 -3
  38. package/eui-icon/package.json +0 -3
  39. package/eui-icon-button/package.json +0 -3
  40. package/eui-icon-button-expander/package.json +0 -3
  41. package/eui-icon-color/package.json +0 -3
  42. package/eui-icon-input/package.json +0 -3
  43. package/eui-icon-state/package.json +0 -3
  44. package/eui-icon-toggle/package.json +0 -3
  45. package/eui-input-checkbox/package.json +0 -3
  46. package/eui-input-group/package.json +0 -3
  47. package/eui-input-number/package.json +0 -3
  48. package/eui-input-radio/package.json +0 -3
  49. package/eui-input-text/package.json +0 -3
  50. package/eui-label/package.json +0 -3
  51. package/eui-language-selector/package.json +0 -3
  52. package/eui-list/package.json +0 -3
  53. package/eui-menu/package.json +0 -3
  54. package/eui-message-box/package.json +0 -3
  55. package/eui-navbar/package.json +0 -3
  56. package/eui-overlay/package.json +0 -3
  57. package/eui-page/package.json +0 -3
  58. package/eui-paginator/package.json +0 -3
  59. package/eui-popover/package.json +0 -3
  60. package/eui-progress-bar/package.json +0 -3
  61. package/eui-progress-circle/package.json +0 -3
  62. package/eui-select/package.json +0 -3
  63. package/eui-sidebar-menu/package.json +0 -3
  64. package/eui-skeleton/package.json +0 -3
  65. package/eui-slide-toggle/package.json +0 -3
  66. package/eui-split-button/package.json +0 -3
  67. package/eui-table/package.json +0 -3
  68. package/eui-table-v2/package.json +0 -3
  69. package/eui-tabs/package.json +0 -3
  70. package/eui-textarea/package.json +0 -3
  71. package/eui-timebar/package.json +0 -3
  72. package/eui-timeline/package.json +0 -3
  73. package/eui-timepicker/package.json +0 -3
  74. package/eui-tree/package.json +0 -3
  75. package/eui-tree-list/package.json +0 -3
  76. package/eui-user-profile/package.json +0 -3
  77. package/eui-wizard/package.json +0 -3
  78. package/externals/charts/package.json +0 -3
  79. package/externals/eui-editor/package.json +0 -3
  80. package/externals/helpers/package.json +0 -3
  81. package/externals/quill/package.json +0 -3
  82. package/externals/search/favourite-queries/package.json +0 -3
  83. package/layout/package.json +0 -3
  84. package/pipes/package.json +0 -3
  85. package/shared/package.json +0 -3
  86. package/validators/package.json +0 -3
@@ -101,7 +101,7 @@
101
101
  </ol>
102
102
  <ul class="properties-list">
103
103
  <li>
104
- <b>Version</b> : 18.2.16-snapshot-1756456305763</li>
104
+ <b>Version</b> : 18.2.16-snapshot-1756489547144</li>
105
105
  </ul>
106
106
 
107
107
 
@@ -129,7 +129,8 @@ const validateFileMimeType = (file, mimeTypes) => {
129
129
  const reader = new FileReader();
130
130
  reader.onloadend = () => {
131
131
  const buffer = reader.result;
132
- const headerBytes = new Uint8Array(buffer).slice(0, 8);
132
+ // Read more bytes to support complex MIME type detection (e.g., ASF format analysis)
133
+ const headerBytes = new Uint8Array(buffer).slice(0, Math.min(1024, buffer.byteLength));
133
134
  const mime = getMimeType(headerBytes);
134
135
  if (mimeTypes.includes(mime)) {
135
136
  subscriber.next(null);
@@ -142,4 +143,4 @@ const validateFileMimeType = (file, mimeTypes) => {
142
143
  reader.readAsArrayBuffer(file);
143
144
  });
144
145
  };
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWZpbGUtdXBsb2FkLnZhbGlkYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9ldWktZmlsZS11cGxvYWQvdXRpbHMvZXVpLWZpbGUtdXBsb2FkLnZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsV0FBVyxFQUFZLE1BQU0sY0FBYyxDQUFDO0FBRXJEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQzFCLENBQUMsUUFBZ0IsRUFBZSxFQUFFLENBQ2xDLENBQUMsT0FBd0IsRUFBK0IsRUFBRSxDQUN0RCxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBRS9FOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQ3pCLENBQUMsT0FBZSxFQUFlLEVBQUUsQ0FDakMsQ0FBQyxPQUF3QixFQUE4QixFQUFFO0lBQ3JELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNsQixJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQixPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVUsRUFBRSxFQUFFO1lBQ2pDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDLEtBQUssSUFBSSxTQUFTLEdBQUcsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMs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QUMzQyxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BCLENBQUMsQ0FBQztBQUVOLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUFVLEVBQUUsU0FBcUIsRUFBa0QsRUFBRTtJQUMvRyxPQUFPLElBQUksVUFBVSxDQUE0QixDQUFDLFVBQVUsRUFBRSxFQUFFO1FBQzVELE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLFNBQVMsR0FBRyxHQUFTLEVBQUU7WUFDMUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQXFCLENBQUM7WUFDNUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2RCxNQUFNLElBQUksR0FBRyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDdEMsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUIsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLFVBQVUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzNDLENBQUM7WUFDRCxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxDQUFDO1FBQ0YsTUFBTSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ25DLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBBc3luY1ZhbGlkYXRvckZuLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCB6aXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgZ2V0TWltZVR5cGUsIE1pbWVUeXBlIH0gZnJvbSAnLi9taW1lLXR5cGVzJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFZhbGlkYXRvciB0aGF0IHJlcXVpcmVzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBmaWxlcyB0aGF0IGNhbiBiZSB1cGxvYWRlZC5cbiAqXG4gKiBAdXNhZ2VOb3Rlc1xuICogVmFsaWRhdGUgdGhhdCB0aGUgdXNlciBzZWxlY3RlZCBtYXhpbXVtIDMgZmlsZXM6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZmlsZVVwbG9hZCA9IG5ldyBGb3JtQ29udHJvbChudWxsLCBtYXhGaWxlc1ZhbGlkYXRvcigzKSk7XG4gKiBjb25zb2xlLmxvZyhmaWxlVXBsb2FkLmVycm9ycyk7IC8vIHsgbWF4RmlsZXM6IDMgfVxuICogYGBgXG4gKlxuICogQHJldHVybnMgQSB2YWxpZGF0b3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVycm9yIG1hcCB3aXRoIHRoZVxuICogYG1heEZpbGVzYCBpZiB0aGUgdmFsaWRhdGlvbiBjaGVjayBmYWlscywgb3RoZXJ3aXNlIGBudWxsYC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1heEZpbGVzVmFsaWRhdG9yID1cbiAgICAobWF4RmlsZXM6IG51bWJlcik6IFZhbGlkYXRvckZuID0+XG4gICAgKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgbWF4RmlsZXM6IG51bWJlciB9IHwgbnVsbCA9PlxuICAgICAgICBjb250cm9sLnZhbHVlICYmIGNvbnRyb2wudmFsdWUubGVuZ3RoID4gbWF4RmlsZXMgPyB7IG1heEZpbGVzIH0gOiBudWxsO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogVmFsaWRhdG9yIHRoYXQgcmVxdWlyZXMgdGhlIG1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIG9mIGZpbGVzIHRoYXQgY2FuIGJlIHVwbG9hZGVkLlxuICpcbiAqIEB1c2FnZU5vdGVzXG4gKiBWYWxpZGF0ZSB0aGF0IHRoZSB1c2VyIGRvZXNuJ3Qgc2VsZWN0IGEgZmlsZSBoYXZlIGEgc2l6ZSB1cCB0byAzMDBLYjpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBmaWxlVXBsb2FkID0gbmV3IEZvcm1Db250cm9sKG51bGwsIG1heFNpemVWYWxpZGF0b3IoMzAwMDAwKSk7XG4gKiBjb25zb2xlLmxvZyhmaWxlVXBsb2FkLmVycm9ycyk7IC8vIHsgbWF4U2l6ZTogMzAwMDAwIH1cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIEEgdmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBlcnJvciBtYXAgd2l0aCB0aGVcbiAqIGBtYXhTaXplYCBpZiB0aGUgdmFsaWRhdGlvbiBjaGVjayBmYWlscywgb3RoZXJ3aXNlIGBudWxsYC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1heFNpemVWYWxpZGF0b3IgPVxuICAgIChtYXhTaXplOiBudW1iZXIpOiBWYWxpZGF0b3JGbiA9PlxuICAgIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IG1heFNpemU6IG51bWJlciB9IHwgbnVsbCA9PiB7XG4gICAgICAgIGxldCB0b3RhbFNpemUgPSAwO1xuICAgICAgICBpZiAoY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgY29udHJvbC52YWx1ZS5mb3JFYWNoKChmaWxlOiBGaWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgdG90YWxTaXplICs9IGZpbGUuc2l6ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2wudmFsdWUgJiYgdG90YWxTaXplID4gbWF4U2l6ZSAqIDEuMDI0ID8geyBtYXhTaXplIH0gOiBudWxsO1xuICAgIH07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBWYWxpZGF0b3IgdGhhdCByZXF1aXJlcyB0aGUgbWF4aW11bSBzaXplIChpbiBieXRlcykgcGVyIGZpbGUgdGhhdCBjYW4gYmUgdXBsb2FkZWQuXG4gKlxuICogQHVzYWdlTm90ZXNcbiAqIFZhbGlkYXRlcyB0aGF0IHRoZSB1c2VyIGRvZXNuJ3Qgc2VsZWN0IGEgZmlsZSB0aGF0IGV4Y2VlZHMgdGhlIHByb3ZpZGVkIHNpemVcbiAqXG4gKiBAcmV0dXJucyBBIHZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZXJyb3IgbWFwIHdpdGggdGhlXG4gKiBgbWF4RmlsZVNpemVgIGFuZCB0aGUgYGluZGV4ZXNgIG9mIHRoZSBmaWxlL2ZpbGVzIHRoYXQgZXhjZWVkZWQgdGhlIG1heCBzaXplIGlmIHRoZSB2YWxpZGF0aW9uIGNoZWNrIGZhaWxzLCBvdGhlcndpc2UgYG51bGxgLlxuICovXG5leHBvcnQgY29uc3QgbWF4RmlsZVNpemVWYWxpZGF0b3IgPVxuICAgIChtYXhGaWxlU2l6ZTogbnVtYmVyKTogVmFsaWRhdG9yRm4gPT5cbiAgICAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBtYXhGaWxlU2l6ZTogbnVtYmVyLCBpbmRleGVzOiBBcnJheTxudW1iZXI+IH0gfCBudWxsID0+IHtcbiAgICAgICAgY29uc3QgZmlsZUluZGV4ZXMgPVtdO1xuICAgICAgICBsZXQgbWF4RmlsZUV4Y2VlZGVkID0gZmFsc2U7XG4gICAgICAgIGlmIChjb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICBjb250cm9sLnZhbHVlLmZvckVhY2goKGZpbGU6IEZpbGUsIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZS5zaXplID4gbWF4RmlsZVNpemUgKiAxLjAyNCkge1xuICAgICAgICAgICAgICAgICAgICBmaWxlSW5kZXhlcy5wdXNoKGluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgbWF4RmlsZUV4Y2VlZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250cm9sLnZhbHVlICYmIG1heEZpbGVFeGNlZWRlZCA/IHsgbWF4RmlsZVNpemUsIGluZGV4ZXM6IGZpbGVJbmRleGVzIH0gOiBudWxsO1xuICAgIH07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBWYWxpZGF0b3IgdGhhdCByZXF1aXJlcyBhbiBhcnJheSBvZiBtaW1lIHR5cGUgdGhhdCBjYW4gYmUgdXBsb2FkZWQuXG4gKlxuICogQHVzYWdlTm90ZXNcbiAqIFZhbGlkYXRlIHRoYXQgdGhlIHVzZXIgZG9lc24ndCBzZWxlY3QgYSBmaWxlIGhhdmluZyBhbm90aGVyIGV4dGVuc2lvbiB0aGFuIC5qcGcgb3IgLmpwZWc6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZmlsZVVwbG9hZCA9IG5ldyBGb3JtQ29udHJvbChudWxsLCBtaW1lVHlwZUV4dGVuc2lvblZhbGlkYXRvcihbJ2ltYWdlL2pwZWcnXSkpLFxuICogY29uc29sZS5sb2coZmlsZVVwbG9hZC5lcnJvcnMpOyAvLyB7IGludmFsaWRGaWxlRXh0ZW5zaW9uOiBbJ2ltYWdlL2pwZWcnXSB9XG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyBBIHZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZXJyb3IgbWFwIHdpdGggdGhlXG4gKiBgaW52YWxpZEZpbGVFeHRlbnNpb25gIGlmIHRoZSB2YWxpZGF0aW9uIGNoZWNrIGZhaWxzLCBvdGhlcndpc2UgYG51bGxgLlxuICovXG5leHBvcnQgY29uc3QgbWltZVR5cGVFeHRlbnNpb25WYWxpZGF0b3IgPVxuICAgIChtaW1lVHlwZXM6IHN0cmluZ1tdKTogVmFsaWRhdG9yRm4gPT5cbiAgICAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBpbnZhbGlkRmlsZUV4dGVuc2lvbjogc3RyaW5nW10gfSB8IG51bGwgPT4ge1xuICAgICAgICBjb25zdCBpbnZhbGlkRmlsZUV4dGVuc2lvbjogc3RyaW5nW10gPSBbXTtcbiAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnRyb2wudmFsdWUuZm9yRWFjaCgoZmlsZTogRmlsZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChtaW1lVHlwZXMuaW5kZXhPZihmaWxlLnR5cGUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkRmlsZUV4dGVuc2lvbi5wdXNoKGZpbGUubmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udHJvbC52YWx1ZSAmJiBpbnZhbGlkRmlsZUV4dGVuc2lvbi5sZW5ndGggPiAwID8geyBpbnZhbGlkRmlsZUV4dGVuc2lvbiB9IDogbnVsbDtcbiAgICB9O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogVmFsaWRhdG9yIHRoYXQgcmVxdWlyZXMgYW4gYXJyYXkgb2YgbWltZSB0eXBlIHRoYXQgY2FuIGJlIHVwbG9hZGVkLlxuICpcbiAqIEB1c2FnZU5vdGVzXG4gKiBWYWxpZGF0ZSB0aGF0IHRoZSB1c2VyIGRvZXNuJ3Qgc2VsZWN0IGEgZmlsZSBoYXZpbmcgYW5vdGhlciBleHRlbnNpb24gdGhhbiAuanBnIG9yIC5qcGVnOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGZpbGVVcGxvYWQgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCwgbWltZVR5cGVFeHRlbnNpb25WYWxpZGF0b3IoWydpbWFnZS9qcGVnJ10pKSxcbiAqIGNvbnNvbGUubG9nKGZpbGVVcGxvYWQuZXJyb3JzKTsgLy8geyBpbnZhbGlkTWltZUZpbGVUeXBlOiBbJ2ltYWdlL2pwZWcnXSB9XG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyBBbiBBc3luYyB2YWxpZGF0b3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVycm9yIG1hcCB3aXRoIHRoZVxuICogYGludmFsaWRNaW1lRmlsZVR5cGVgIGlmIHRoZSB2YWxpZGF0aW9uIGNoZWNrIGZhaWxzLCBvdGhlcndpc2UgYG51bGxgLlxuICovXG5leHBvcnQgY29uc3QgYXN5bmNNaW1lVHlwZUV4dGVuc2lvblZhbGlkYXRvciA9XG4gICAgKG1pbWVUeXBlczogTWltZVR5cGVbXSk6IEFzeW5jVmFsaWRhdG9yRm4gPT5cbiAgICAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogUHJvbWlzZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gfCBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPiA9PiB7XG4gICAgICAgIGlmIChjb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxlRXJyb3JPYnNlcnZhYmxlczogT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD5bXSA9IFtdO1xuICAgICAgICAgICAgLy8gaXRlcmF0ZSBvdmVyIGZpbGVzXG4gICAgICAgICAgICBjb250cm9sLnZhbHVlLmZvckVhY2goKGZpbGU6IEZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBwdXNoIG9ic2VydmFibGUgd2hpY2ggd2lsbCBjaGVjayB0aGUgbWltZSB2YWxpZGF0aW9uIHR5cGVcbiAgICAgICAgICAgICAgICBmaWxlRXJyb3JPYnNlcnZhYmxlcy5wdXNoKHZhbGlkYXRlRmlsZU1pbWVUeXBlKGZpbGUsIG1pbWVUeXBlcykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gemlwKC4uLmZpbGVFcnJvck9ic2VydmFibGVzKS5waXBlKFxuICAgICAgICAgICAgICAgIG1hcCgoZmlsZUVycm9ycykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlcnJvcnMgPSBmaWxlRXJyb3JzLmZpbHRlcigoZmlsZUVycm9yKSA9PiBmaWxlRXJyb3IgIT09IG51bGwpO1xuICAgICAgICAgICAgICAgICAgICAvLyBFcnJvciBzaG91bGQgYmUgeyBmaWxlTmFtZTogRmlsZVR5cGUgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7IGludmFsaWRNaW1lRmlsZVR5cGU6IGVycm9ycyB9O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgfTtcblxuY29uc3QgdmFsaWRhdGVGaWxlTWltZVR5cGUgPSAoZmlsZTogRmlsZSwgbWltZVR5cGVzOiBNaW1lVHlwZVtdKTogT2JzZXJ2YWJsZTx7IFtrZXk6IHN0cmluZ106IE1pbWVUeXBlIH0gfCBudWxsPiA9PiB7XG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHsgW3A6IHN0cmluZ106IE1pbWVUeXBlIH0+KChzdWJzY3JpYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgIHJlYWRlci5vbmxvYWRlbmQgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSByZWFkZXIucmVzdWx0IGFzIEFycmF5QnVmZmVyO1xuICAgICAgICAgICAgY29uc3QgaGVhZGVyQnl0ZXMgPSBuZXcgVWludDhBcnJheShidWZmZXIpLnNsaWNlKDAsIDgpO1xuICAgICAgICAgICAgY29uc3QgbWltZSA9IGdldE1pbWVUeXBlKGhlYWRlckJ5dGVzKTtcbiAgICAgICAgICAgIGlmIChtaW1lVHlwZXMuaW5jbHVkZXMobWltZSkpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh7IFtmaWxlLm5hbWVdOiBtaW1lIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9O1xuICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XG4gICAgfSk7XG59O1xuIl19
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXVpLWZpbGUtdXBsb2FkLnZhbGlkYXRvcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9ldWktZmlsZS11cGxvYWQvdXRpbHMvZXVpLWZpbGUtdXBsb2FkLnZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsV0FBVyxFQUFZLE1BQU0sY0FBYyxDQUFDO0FBRXJEOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQzFCLENBQUMsUUFBZ0IsRUFBZSxFQUFFLENBQ2xDLENBQUMsT0FBd0IsRUFBK0IsRUFBRSxDQUN0RCxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBRS9FOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQ3pCLENBQUMsT0FBZSxFQUFlLEVBQUUsQ0FDakMsQ0FBQyxPQUF3QixFQUE4QixFQUFFO0lBQ3JELElBQUksU0FBUyxHQUFHLENBQUMsQ0FBQztJQUNsQixJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNoQixPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQVUsRUFBRSxFQUFFO1lBQ2pDLFNBQVMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELE9BQU8sT0FBTyxDQUFDLEtBQUssSUFBSSxTQUFTLEdBQUcsT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMs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QUMzQyxDQUFDLENBQUMsQ0FDTCxDQUFDO0lBQ04sQ0FBQztJQUNELE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BCLENBQUMsQ0FBQztBQUVOLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxJQUFVLEVBQUUsU0FBcUIsRUFBa0QsRUFBRTtJQUMvRyxPQUFPLElBQUksVUFBVSxDQUE0QixDQUFDLFVBQVUsRUFBRSxFQUFFO1FBQzVELE1BQU0sTUFBTSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7UUFDaEMsTUFBTSxDQUFDLFNBQVMsR0FBRyxHQUFTLEVBQUU7WUFDMUIsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQXFCLENBQUM7WUFDNUMscUZBQXFGO1lBQ3JGLE1BQU0sV0FBVyxHQUFHLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDdkYsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3RDLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUMzQixVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzFCLENBQUM7aUJBQU0sQ0FBQztnQkFDSixVQUFVLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMzQyxDQUFDO1lBQ0QsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNuQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQXN5bmNWYWxpZGF0b3JGbiwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiwgemlwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IGdldE1pbWVUeXBlLCBNaW1lVHlwZSB9IGZyb20gJy4vbWltZS10eXBlcyc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiBWYWxpZGF0b3IgdGhhdCByZXF1aXJlcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgZmlsZXMgdGhhdCBjYW4gYmUgdXBsb2FkZWQuXG4gKlxuICogQHVzYWdlTm90ZXNcbiAqIFZhbGlkYXRlIHRoYXQgdGhlIHVzZXIgc2VsZWN0ZWQgbWF4aW11bSAzIGZpbGVzOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGZpbGVVcGxvYWQgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCwgbWF4RmlsZXNWYWxpZGF0b3IoMykpO1xuICogY29uc29sZS5sb2coZmlsZVVwbG9hZC5lcnJvcnMpOyAvLyB7IG1heEZpbGVzOiAzIH1cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIEEgdmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBlcnJvciBtYXAgd2l0aCB0aGVcbiAqIGBtYXhGaWxlc2AgaWYgdGhlIHZhbGlkYXRpb24gY2hlY2sgZmFpbHMsIG90aGVyd2lzZSBgbnVsbGAuXG4gKi9cbmV4cG9ydCBjb25zdCBtYXhGaWxlc1ZhbGlkYXRvciA9XG4gICAgKG1heEZpbGVzOiBudW1iZXIpOiBWYWxpZGF0b3JGbiA9PlxuICAgIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiB7IG1heEZpbGVzOiBudW1iZXIgfSB8IG51bGwgPT5cbiAgICAgICAgY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlLmxlbmd0aCA+IG1heEZpbGVzID8geyBtYXhGaWxlcyB9IDogbnVsbDtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFZhbGlkYXRvciB0aGF0IHJlcXVpcmVzIHRoZSBtYXhpbXVtIHNpemUgKGluIGJ5dGVzKSBvZiBmaWxlcyB0aGF0IGNhbiBiZSB1cGxvYWRlZC5cbiAqXG4gKiBAdXNhZ2VOb3Rlc1xuICogVmFsaWRhdGUgdGhhdCB0aGUgdXNlciBkb2Vzbid0IHNlbGVjdCBhIGZpbGUgaGF2ZSBhIHNpemUgdXAgdG8gMzAwS2I6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3QgZmlsZVVwbG9hZCA9IG5ldyBGb3JtQ29udHJvbChudWxsLCBtYXhTaXplVmFsaWRhdG9yKDMwMDAwMCkpO1xuICogY29uc29sZS5sb2coZmlsZVVwbG9hZC5lcnJvcnMpOyAvLyB7IG1heFNpemU6IDMwMDAwMCB9XG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyBBIHZhbGlkYXRvciBmdW5jdGlvbiB0aGF0IHJldHVybnMgYW4gZXJyb3IgbWFwIHdpdGggdGhlXG4gKiBgbWF4U2l6ZWAgaWYgdGhlIHZhbGlkYXRpb24gY2hlY2sgZmFpbHMsIG90aGVyd2lzZSBgbnVsbGAuXG4gKi9cbmV4cG9ydCBjb25zdCBtYXhTaXplVmFsaWRhdG9yID1cbiAgICAobWF4U2l6ZTogbnVtYmVyKTogVmFsaWRhdG9yRm4gPT5cbiAgICAoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBtYXhTaXplOiBudW1iZXIgfSB8IG51bGwgPT4ge1xuICAgICAgICBsZXQgdG90YWxTaXplID0gMDtcbiAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnRyb2wudmFsdWUuZm9yRWFjaCgoZmlsZTogRmlsZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRvdGFsU2l6ZSArPSBmaWxlLnNpemU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250cm9sLnZhbHVlICYmIHRvdGFsU2l6ZSA+IG1heFNpemUgKiAxLjAyNCA/IHsgbWF4U2l6ZSB9IDogbnVsbDtcbiAgICB9O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogVmFsaWRhdG9yIHRoYXQgcmVxdWlyZXMgdGhlIG1heGltdW0gc2l6ZSAoaW4gYnl0ZXMpIHBlciBmaWxlIHRoYXQgY2FuIGJlIHVwbG9hZGVkLlxuICpcbiAqIEB1c2FnZU5vdGVzXG4gKiBWYWxpZGF0ZXMgdGhhdCB0aGUgdXNlciBkb2Vzbid0IHNlbGVjdCBhIGZpbGUgdGhhdCBleGNlZWRzIHRoZSBwcm92aWRlZCBzaXplXG4gKlxuICogQHJldHVybnMgQSB2YWxpZGF0b3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVycm9yIG1hcCB3aXRoIHRoZVxuICogYG1heEZpbGVTaXplYCBhbmQgdGhlIGBpbmRleGVzYCBvZiB0aGUgZmlsZS9maWxlcyB0aGF0IGV4Y2VlZGVkIHRoZSBtYXggc2l6ZSBpZiB0aGUgdmFsaWRhdGlvbiBjaGVjayBmYWlscywgb3RoZXJ3aXNlIGBudWxsYC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1heEZpbGVTaXplVmFsaWRhdG9yID1cbiAgICAobWF4RmlsZVNpemU6IG51bWJlcik6IFZhbGlkYXRvckZuID0+XG4gICAgKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgbWF4RmlsZVNpemU6IG51bWJlciwgaW5kZXhlczogQXJyYXk8bnVtYmVyPiB9IHwgbnVsbCA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVJbmRleGVzID1bXTtcbiAgICAgICAgbGV0IG1heEZpbGVFeGNlZWRlZCA9IGZhbHNlO1xuICAgICAgICBpZiAoY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgY29udHJvbC52YWx1ZS5mb3JFYWNoKChmaWxlOiBGaWxlLCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGUuc2l6ZSA+IG1heEZpbGVTaXplICogMS4wMjQpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsZUluZGV4ZXMucHVzaChpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIG1heEZpbGVFeGNlZWRlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udHJvbC52YWx1ZSAmJiBtYXhGaWxlRXhjZWVkZWQgPyB7IG1heEZpbGVTaXplLCBpbmRleGVzOiBmaWxlSW5kZXhlcyB9IDogbnVsbDtcbiAgICB9O1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogVmFsaWRhdG9yIHRoYXQgcmVxdWlyZXMgYW4gYXJyYXkgb2YgbWltZSB0eXBlIHRoYXQgY2FuIGJlIHVwbG9hZGVkLlxuICpcbiAqIEB1c2FnZU5vdGVzXG4gKiBWYWxpZGF0ZSB0aGF0IHRoZSB1c2VyIGRvZXNuJ3Qgc2VsZWN0IGEgZmlsZSBoYXZpbmcgYW5vdGhlciBleHRlbnNpb24gdGhhbiAuanBnIG9yIC5qcGVnOlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGZpbGVVcGxvYWQgPSBuZXcgRm9ybUNvbnRyb2wobnVsbCwgbWltZVR5cGVFeHRlbnNpb25WYWxpZGF0b3IoWydpbWFnZS9qcGVnJ10pKSxcbiAqIGNvbnNvbGUubG9nKGZpbGVVcGxvYWQuZXJyb3JzKTsgLy8geyBpbnZhbGlkRmlsZUV4dGVuc2lvbjogWydpbWFnZS9qcGVnJ10gfVxuICogYGBgXG4gKlxuICogQHJldHVybnMgQSB2YWxpZGF0b3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFuIGVycm9yIG1hcCB3aXRoIHRoZVxuICogYGludmFsaWRGaWxlRXh0ZW5zaW9uYCBpZiB0aGUgdmFsaWRhdGlvbiBjaGVjayBmYWlscywgb3RoZXJ3aXNlIGBudWxsYC5cbiAqL1xuZXhwb3J0IGNvbnN0IG1pbWVUeXBlRXh0ZW5zaW9uVmFsaWRhdG9yID1cbiAgICAobWltZVR5cGVzOiBzdHJpbmdbXSk6IFZhbGlkYXRvckZuID0+XG4gICAgKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IHsgaW52YWxpZEZpbGVFeHRlbnNpb246IHN0cmluZ1tdIH0gfCBudWxsID0+IHtcbiAgICAgICAgY29uc3QgaW52YWxpZEZpbGVFeHRlbnNpb246IHN0cmluZ1tdID0gW107XG4gICAgICAgIGlmIChjb250cm9sLnZhbHVlKSB7XG4gICAgICAgICAgICBjb250cm9sLnZhbHVlLmZvckVhY2goKGZpbGU6IEZpbGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAobWltZVR5cGVzLmluZGV4T2YoZmlsZS50eXBlKSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaW52YWxpZEZpbGVFeHRlbnNpb24ucHVzaChmaWxlLm5hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRyb2wudmFsdWUgJiYgaW52YWxpZEZpbGVFeHRlbnNpb24ubGVuZ3RoID4gMCA/IHsgaW52YWxpZEZpbGVFeHRlbnNpb24gfSA6IG51bGw7XG4gICAgfTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFZhbGlkYXRvciB0aGF0IHJlcXVpcmVzIGFuIGFycmF5IG9mIG1pbWUgdHlwZSB0aGF0IGNhbiBiZSB1cGxvYWRlZC5cbiAqXG4gKiBAdXNhZ2VOb3Rlc1xuICogVmFsaWRhdGUgdGhhdCB0aGUgdXNlciBkb2Vzbid0IHNlbGVjdCBhIGZpbGUgaGF2aW5nIGFub3RoZXIgZXh0ZW5zaW9uIHRoYW4gLmpwZyBvciAuanBlZzpcbiAqXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCBmaWxlVXBsb2FkID0gbmV3IEZvcm1Db250cm9sKG51bGwsIG1pbWVUeXBlRXh0ZW5zaW9uVmFsaWRhdG9yKFsnaW1hZ2UvanBlZyddKSksXG4gKiBjb25zb2xlLmxvZyhmaWxlVXBsb2FkLmVycm9ycyk7IC8vIHsgaW52YWxpZE1pbWVGaWxlVHlwZTogWydpbWFnZS9qcGVnJ10gfVxuICogYGBgXG4gKlxuICogQHJldHVybnMgQW4gQXN5bmMgdmFsaWRhdG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbiBlcnJvciBtYXAgd2l0aCB0aGVcbiAqIGBpbnZhbGlkTWltZUZpbGVUeXBlYCBpZiB0aGUgdmFsaWRhdGlvbiBjaGVjayBmYWlscywgb3RoZXJ3aXNlIGBudWxsYC5cbiAqL1xuZXhwb3J0IGNvbnN0IGFzeW5jTWltZVR5cGVFeHRlbnNpb25WYWxpZGF0b3IgPVxuICAgIChtaW1lVHlwZXM6IE1pbWVUeXBlW10pOiBBc3luY1ZhbGlkYXRvckZuID0+XG4gICAgKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFByb21pc2U8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+IHwgT2JzZXJ2YWJsZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gPT4ge1xuICAgICAgICBpZiAoY29udHJvbC52YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgZmlsZUVycm9yT2JzZXJ2YWJsZXM6IE9ic2VydmFibGU8VmFsaWRhdGlvbkVycm9ycyB8IG51bGw+W10gPSBbXTtcbiAgICAgICAgICAgIC8vIGl0ZXJhdGUgb3ZlciBmaWxlc1xuICAgICAgICAgICAgY29udHJvbC52YWx1ZS5mb3JFYWNoKChmaWxlOiBGaWxlKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gcHVzaCBvYnNlcnZhYmxlIHdoaWNoIHdpbGwgY2hlY2sgdGhlIG1pbWUgdmFsaWRhdGlvbiB0eXBlXG4gICAgICAgICAgICAgICAgZmlsZUVycm9yT2JzZXJ2YWJsZXMucHVzaCh2YWxpZGF0ZUZpbGVNaW1lVHlwZShmaWxlLCBtaW1lVHlwZXMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHppcCguLi5maWxlRXJyb3JPYnNlcnZhYmxlcykucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoKGZpbGVFcnJvcnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gZmlsZUVycm9ycy5maWx0ZXIoKGZpbGVFcnJvcikgPT4gZmlsZUVycm9yICE9PSBudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXJyb3Igc2hvdWxkIGJlIHsgZmlsZU5hbWU6IEZpbGVUeXBlIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3JzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBpbnZhbGlkTWltZUZpbGVUeXBlOiBlcnJvcnMgfTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xuICAgIH07XG5cbmNvbnN0IHZhbGlkYXRlRmlsZU1pbWVUeXBlID0gKGZpbGU6IEZpbGUsIG1pbWVUeXBlczogTWltZVR5cGVbXSk6IE9ic2VydmFibGU8eyBba2V5OiBzdHJpbmddOiBNaW1lVHlwZSB9IHwgbnVsbD4gPT4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTx7IFtwOiBzdHJpbmddOiBNaW1lVHlwZSB9Pigoc3Vic2NyaWJlcikgPT4ge1xuICAgICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgICAgICByZWFkZXIub25sb2FkZW5kID0gKCk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gcmVhZGVyLnJlc3VsdCBhcyBBcnJheUJ1ZmZlcjtcbiAgICAgICAgICAgIC8vIFJlYWQgbW9yZSBieXRlcyB0byBzdXBwb3J0IGNvbXBsZXggTUlNRSB0eXBlIGRldGVjdGlvbiAoZS5nLiwgQVNGIGZvcm1hdCBhbmFseXNpcylcbiAgICAgICAgICAgIGNvbnN0IGhlYWRlckJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKS5zbGljZSgwLCBNYXRoLm1pbigxMDI0LCBidWZmZXIuYnl0ZUxlbmd0aCkpO1xuICAgICAgICAgICAgY29uc3QgbWltZSA9IGdldE1pbWVUeXBlKGhlYWRlckJ5dGVzKTtcbiAgICAgICAgICAgIGlmIChtaW1lVHlwZXMuaW5jbHVkZXMobWltZSkpIHtcbiAgICAgICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQobnVsbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCh7IFtmaWxlLm5hbWVdOiBtaW1lIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9O1xuICAgICAgICByZWFkZXIucmVhZEFzQXJyYXlCdWZmZXIoZmlsZSk7XG4gICAgfSk7XG59O1xuIl19
@@ -2,7 +2,7 @@ export const getMimeType = (header) => {
2
2
  // convert Uint8Array to hex string
3
3
  const hex = uint8ArrayToHexString(header);
4
4
  // map hex string to mime type
5
- if (hex.startsWith('ffd8ffe000104a46'))
5
+ if (hex.startsWith('ffd8ff'))
6
6
  return 'image/jpeg';
7
7
  if (hex.startsWith('89504e47'))
8
8
  return 'image/png';
@@ -26,24 +26,10 @@ export const getMimeType = (header) => {
26
26
  return 'image/vnd.adobe.photoshop';
27
27
  if (hex.startsWith('06054b50'))
28
28
  return 'application/x-indesign';
29
- if (hex.startsWith('504b0304'))
30
- return 'application/epub+zip';
31
- if (hex.startsWith('504b0304'))
32
- return 'application/x-xpinstall';
33
- if (hex.startsWith('504b0304'))
34
- return 'application/vnd.oasis.opendocument.text';
35
- if (hex.startsWith('504b0304'))
36
- return 'application/vnd.oasis.opendocument.spreadsheet';
37
- if (hex.startsWith('504b0304'))
38
- return 'application/vnd.oasis.opendocument.presentation';
39
- if (hex.startsWith('504b0304'))
40
- return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
41
- if (hex.startsWith('504b0304'))
42
- return 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
43
- if (hex.startsWith('504b0304'))
44
- return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
45
- if (hex.startsWith('504b0304'))
46
- return 'application/zip';
29
+ // Handle ZIP-based formats by examining content
30
+ if (hex.startsWith('504b0304')) {
31
+ return identifyZipBasedFormat(header);
32
+ }
47
33
  if (hex.startsWith('7b2274797065223a226a736f6e227d'))
48
34
  return 'application/json';
49
35
  if (hex.startsWith('7573746172'))
@@ -75,11 +61,7 @@ export const getMimeType = (header) => {
75
61
  if (hex.startsWith('0a010301'))
76
62
  return 'audio/qcelp';
77
63
  if (hex.startsWith('3026b2758e66cf11'))
78
- return 'audio/x-ms-asf';
79
- if (hex.startsWith('3026b2758e66cf11'))
80
- return 'video/x-ms-asf';
81
- if (hex.startsWith('3026b2758e66cf11'))
82
- return 'application/vnd.ms-asf';
64
+ return identifyAsfFormat(header);
83
65
  if (hex.startsWith('000001ba'))
84
66
  return 'video/mpeg';
85
67
  if (hex.startsWith('00000020667479703367'))
@@ -91,11 +73,7 @@ export const getMimeType = (header) => {
91
73
  if (hex.startsWith('4f707573'))
92
74
  return 'audio/opus';
93
75
  if (hex.startsWith('4f676753'))
94
- return 'video/ogg';
95
- if (hex.startsWith('4f676753'))
96
- return 'audio/ogg';
97
- if (hex.startsWith('4f676753'))
98
- return 'application/ogg';
76
+ return identifyOggFormat(header);
99
77
  if (hex.startsWith('664c6143'))
100
78
  return 'audio/x-flac';
101
79
  if (hex.startsWith('4d414320'))
@@ -140,8 +118,6 @@ export const getMimeType = (header) => {
140
118
  return 'application/x-sqlite3';
141
119
  if (hex.startsWith('4e45531a00000001'))
142
120
  return 'application/x-nintendo-nes-rom';
143
- if (hex.startsWith('504b0304'))
144
- return 'application/x-google-chrome-extension';
145
121
  if (hex.startsWith('4d534346'))
146
122
  return 'application/vnd.ms-cab-compressed';
147
123
  if (hex.startsWith('213c617263683e0a'))
@@ -185,13 +161,7 @@ export const getMimeType = (header) => {
185
161
  if (hex.startsWith('424f4f4b4d4f4249'))
186
162
  return 'application/x-mobipocket-ebook';
187
163
  if (hex.startsWith('667479706174'))
188
- return 'image/heif';
189
- if (hex.startsWith('667479706174'))
190
- return 'image/heif-sequence';
191
- if (hex.startsWith('667479706174'))
192
- return 'image/heic';
193
- if (hex.startsWith('667479706174'))
194
- return 'image/heic-sequence';
164
+ return identifyHeifFormat(header);
195
165
  if (hex.startsWith('4b545820'))
196
166
  return 'image/ktx';
197
167
  if (hex.startsWith('4449434d'))
@@ -212,7 +182,290 @@ export const getMimeType = (header) => {
212
182
  return 'audio/vnd.dolby.dd-raw';
213
183
  return null;
214
184
  };
185
+ const identifyZipBasedFormat = (data) => {
186
+ try {
187
+ const fileEntries = extractZipFileList(data);
188
+ // Chrome extension
189
+ if (fileEntries.includes('manifest.json')) {
190
+ return 'application/x-google-chrome-extension';
191
+ }
192
+ // EPUB
193
+ if (fileEntries.includes('META-INF/container.xml') || fileEntries.includes('mimetype')) {
194
+ return 'application/epub+zip';
195
+ }
196
+ // OpenDocument formats
197
+ if (fileEntries.includes('META-INF/manifest.xml')) {
198
+ if (fileEntries.some(f => f.endsWith('.odp')))
199
+ return 'application/vnd.oasis.opendocument.presentation';
200
+ if (fileEntries.some(f => f.endsWith('.ods')))
201
+ return 'application/vnd.oasis.opendocument.spreadsheet';
202
+ if (fileEntries.some(f => f.endsWith('.odt')))
203
+ return 'application/vnd.oasis.opendocument.text';
204
+ }
205
+ // Microsoft Office formats
206
+ if (fileEntries.includes('[Content_Types].xml')) {
207
+ if (fileEntries.includes('ppt/presentation.xml'))
208
+ return 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
209
+ if (fileEntries.includes('xl/workbook.xml'))
210
+ return 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
211
+ if (fileEntries.includes('word/document.xml'))
212
+ return 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
213
+ }
214
+ // Default to generic ZIP
215
+ return 'application/zip';
216
+ }
217
+ catch {
218
+ return 'application/zip';
219
+ }
220
+ };
221
+ const extractZipFileList = (data) => {
222
+ // Simplified ZIP parsing - looks for central directory entries
223
+ const files = [];
224
+ let offset = 0;
225
+ while (offset < data.length - 4) {
226
+ // Look for local file header signature (0x04034b50)
227
+ if (data[offset] === 0x50 && data[offset + 1] === 0x4b &&
228
+ data[offset + 2] === 0x03 && data[offset + 3] === 0x04) {
229
+ const filenameLength = data[offset + 26] | (data[offset + 27] << 8);
230
+ const extraFieldLength = data[offset + 28] | (data[offset + 29] << 8);
231
+ if (filenameLength > 0 && offset + 30 + filenameLength <= data.length) {
232
+ const filename = new TextDecoder().decode(data.slice(offset + 30, offset + 30 + filenameLength));
233
+ files.push(filename);
234
+ }
235
+ offset += 30 + filenameLength + extraFieldLength;
236
+ }
237
+ else {
238
+ offset++;
239
+ }
240
+ }
241
+ return files;
242
+ };
215
243
  const uint8ArrayToHexString = (uint8Array) => {
216
244
  return Array.prototype.map.call(uint8Array, (byte) => ('00' + byte.toString(16)).slice(-2)).join('');
217
245
  };
218
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWltZS10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2V1aS1maWxlLXVwbG9hZC91dGlscy9taW1lLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlKQSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFrQixFQUFZLEVBQUU7SUFDeEQsbUNBQW1DO0lBQ25DLE1BQU0sR0FBRyxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTFDLDhCQUE4QjtJQUM5QixJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUM7UUFBRSxPQUFPLFlBQVksQ0FBQztJQUM1RCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDbkQsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUFFLE9BQU8sWUFBWSxDQUFDO0lBQ3BELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQztRQUFFLE9BQU8sYUFBYSxDQUFDO0lBQzdELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFPLG1CQUFtQixDQUFDO0lBQzNELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFPLG1CQUFtQixDQUFDO0lBQzNELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFPLFlBQVksQ0FBQztJQUNwRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFDL0MsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUFFLE9BQU8sWUFBWSxDQUFDO0lBQ3BELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQztRQUFFLE9BQU8sb0JBQW9CLENBQUM7SUFDMUUsSUFBSSxHQUFH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VUFBVSxDQUFDLFVBQVUsQ0FBQztRQUFFLE9BQU8sbUJBQW1CLENBQUM7SUFDM0QsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUFFLE9BQU8sa0JBQWtCLENBQUM7SUFDMUQsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUFFLE9BQU8sZUFBZSxDQUFDO0lBQ3ZELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyx3QkFBd0IsQ0FBQztRQUFFLE9BQU8sWUFBWSxDQUFDO0lBQ2xFLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFPLG1CQUFtQixDQUFDO0lBQzNELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFPLDhCQUE4QixDQUFDO0lBQ3RFLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFPLGFBQWEsQ0FBQztJQUNyRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQUUsT0FBTyx3QkFBd0IsQ0FBQztJQUVoRSxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixNQUFNLHFCQUFxQixHQUFHLENBQUMsVUFBVSxFQUFVLEVBQUU7SUFDakQsT0FBTyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDekcsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgTWltZVR5cGUgPVxuICAgIHwgJ2ltYWdlL2pwZWcnXG4gICAgfCAnaW1hZ2UvcG5nJ1xuICAgIHwgJ2ltYWdlL2dpZidcbiAgICB8ICdpbWFnZS93ZWJwJ1xuICAgIHwgJ2ltYWdlL2ZsaWYnXG4gICAgfCAnaW1hZ2UveC14Y2YnXG4gICAgfCAnaW1hZ2UveC1jYW5vbi1jcjInXG4gICAgfCAnaW1hZ2UveC1jYW5vbi1jcjMnXG4gICAgfCAnaW1hZ2UvdGlmZidcbiAgICB8ICdpbWFnZS9ibXAnXG4gICAgfCAnaW1hZ2UvaWNucydcbiAgICB8ICdpbWFnZS92bmQubXMtcGhvdG8nXG4gICAgfCAnaW1hZ2Uvdm5kLmFkb2JlLnBob3Rvc2hvcCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWluZGVzaWduJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL2VwdWIremlwJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gteHBpbnN0YWxsJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dCdcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnNwcmVhZHNoZWV0J1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQucHJlc2VudGF0aW9uJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50J1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5wcmVzZW50YXRpb24nXG4gICAgfCAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnXG4gICAgfCAnYXBwbGljYXRpb24vemlwJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgfCAnYXBwbGljYXRpb24veC10YXInXG4gICAgfCAnYXBwbGljYXRpb24veC1yYXItY29tcHJlc3NlZCdcbiAgICB8ICdhcHBsaWNhdGlvbi9nemlwJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtYnppcDInXG4gICAgfCAnYXBwbGljYXRpb24veC03ei1jb21wcmVzc2VkJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtYXBwbGUtZGlza2ltYWdlJ1xuICAgIHwgJ3ZpZGVvL21wNCdcbiAgICB8ICdhdWRpby9taWRpJ1xuICAgIHwgJ3ZpZGVvL3gtbWF0cm9za2EnXG4gICAgfCAndmlkZW8vd2VibSdcbiAgICB8ICd2aWRlby9xdWlja3RpbWUnXG4gICAgfCAndmlkZW8vdm5kLmF2aSdcbiAgICB8ICdhdWRpby92bmQud2F2ZSdcbiAgICB8ICdhdWRpby9xY2VscCdcbiAgICB8ICdhdWRpby94LW1zLWFzZidcbiAgICB8ICd2aWRlby94LW1zLWFzZidcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQubXMtYXNmJ1xuICAgIHwgJ3ZpZGVvL21wZWcnXG4gICAgfCAndmlkZW8vM2dwcCdcbiAgICB8ICdhdWRpby9tcGVnJ1xuICAgIHwgJ2F1ZGlvL21wNCdcbiAgICB8ICdhdWRpby9vcHVzJ1xuICAgIHwgJ3ZpZGVvL29nZydcbiAgICB8ICdhdWRpby9vZ2cnXG4gICAgfCAnYXBwbGljYXRpb24vb2dnJ1xuICAgIHwgJ2F1ZGlvL3gtZmxhYydcbiAgICB8ICdhdWRpby9hcGUnXG4gICAgfCAnYXVkaW8vd2F2cGFjaydcbiAgICB8ICdhdWRpby9hbXInXG4gICAgfCAnYXBwbGljYXRpb24vcGRmJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtZWxmJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCdcbiAgICB8ICdhcHBsaWNhdGlvbi9ydGYnXG4gICAgfCAnYXBwbGljYXRpb24vd2FzbSdcbiAgICB8ICdmb250L3dvZmYnXG4gICAgfCAnZm9udC93b2ZmMidcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQubXMtZm9udG9iamVjdCdcbiAgICB8ICdmb250L3R0ZidcbiAgICB8ICdmb250L290ZidcbiAgICB8ICdpbWFnZS94LWljb24nXG4gICAgfCAndmlkZW8veC1mbHYnXG4gICAgfCAnYXBwbGljYXRpb24vcG9zdHNjcmlwdCdcbiAgICB8ICdhcHBsaWNhdGlvbi9lcHMnXG4gICAgfCAnYXBwbGljYXRpb24veC14eidcbiAgICB8ICdhcHBsaWNhdGlvbi94LXNxbGl0ZTMnXG4gICAgfCAnYXBwbGljYXRpb24veC1uaW50ZW5kby1uZXMtcm9tJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtZ29vZ2xlLWNocm9tZS1leHRlbnNpb24nXG4gICAgfCAnYXBwbGljYXRpb24vdm5kLm1zLWNhYi1jb21wcmVzc2VkJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtZGViJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtdW5peC1hcmNoaXZlJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtcnBtJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtY29tcHJlc3MnXG4gICAgfCAnYXBwbGljYXRpb24veC1semlwJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtY2ZiJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtbWllJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtYXBhY2hlLWFycm93J1xuICAgIHwgJ2FwcGxpY2F0aW9uL214ZidcbiAgICB8ICd2aWRlby9tcDJ0J1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtYmxlbmRlcidcbiAgICB8ICdpbWFnZS9icGcnXG4gICAgfCAnaW1hZ2UvajJjJ1xuICAgIHwgJ2ltYWdlL2pwMidcbiAgICB8ICdpbWFnZS9qcHgnXG4gICAgfCAnaW1hZ2UvanBtJ1xuICAgIHwgJ2ltYWdlL21qMidcbiAgICB8ICdhdWRpby9haWZmJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3htbCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LW1vYmlwb2NrZXQtZWJvb2snXG4gICAgfCAnaW1hZ2UvaGVpZidcbiAgICB8ICdpbWFnZS9oZWlmLXNlcXVlbmNlJ1xuICAgIHwgJ2ltYWdlL2hlaWMnXG4gICAgfCAnaW1hZ2UvaGVpYy1zZXF1ZW5jZSdcbiAgICB8ICdpbWFnZS9rdHgnXG4gICAgfCAnYXBwbGljYXRpb24vZGljb20nXG4gICAgfCAnYXVkaW8veC1tdXNlcGFjaydcbiAgICB8ICd0ZXh0L2NhbGVuZGFyJ1xuICAgIHwgJ3RleHQvdmNhcmQnXG4gICAgfCAnbW9kZWwvZ2x0Zi1iaW5hcnknXG4gICAgfCAnYXBwbGljYXRpb24vdm5kLnRjcGR1bXAucGNhcCdcbiAgICB8ICdhdWRpby94LXZvYydcbiAgICB8ICdhdWRpby92bmQuZG9sYnkuZGQtcmF3J1xuICAgIHwgJ2F1ZGlvL3gtbTRhJ1xuICAgIHwgJ2ltYWdlL2FwbmcnXG4gICAgfCAnaW1hZ2UveC1vbHltcHVzLW9yZidcbiAgICB8ICdpbWFnZS94LXNvbnktYXJ3J1xuICAgIHwgJ2ltYWdlL3gtYWRvYmUtZG5nJ1xuICAgIHwgJ2ltYWdlL3gtbmlrb24tbmVmJ1xuICAgIHwgJ2ltYWdlL3gtcGFuYXNvbmljLXJ3MidcbiAgICB8ICdpbWFnZS94LWZ1amlmaWxtLXJhZidcbiAgICB8ICd2aWRlby94LW00didcbiAgICB8ICd2aWRlby8zZ3BwMidcbiAgICB8ICdhcHBsaWNhdGlvbi94LWVzcmktc2hhcGUnXG4gICAgfCAnYXVkaW8vYWFjJ1xuICAgIHwgJ2F1ZGlvL3gtaXQnXG4gICAgfCAnYXVkaW8veC1zM20nXG4gICAgfCAnYXVkaW8veC14bSdcbiAgICB8ICd2aWRlby9NUDFTJ1xuICAgIHwgJ3ZpZGVvL01QMlAnXG4gICAgfCAnYXBwbGljYXRpb24vdm5kLnNrZXRjaHVwLnNrcCdcbiAgICB8ICdpbWFnZS9hdmlmJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtbHpoLWNvbXByZXNzZWQnXG4gICAgfCAnYXBwbGljYXRpb24vcGdwLWVuY3J5cHRlZCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWFzYXInXG4gICAgfCAnbW9kZWwvc3RsJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1odG1saGVscCdcbiAgICB8ICdtb2RlbC8zbWYnXG4gICAgfCAnaW1hZ2UvanhsJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3pzdGQnXG4gICAgfCAnaW1hZ2UvamxzJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1vdXRsb29rJ1xuICAgIHwgJ2ltYWdlL3ZuZC5kd2cnXG4gICAgfCAnYXBwbGljYXRpb24veC1wYXJxdWV0J1xuICAgIHwgJ2FwcGxpY2F0aW9uL2phdmEtdm0nXG4gICAgfCAnYXBwbGljYXRpb24veC1hcmonXG4gICAgfCAnYXBwbGljYXRpb24veC1jcGlvJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtYWNlLWNvbXByZXNzZWQnXG4gICAgfCAnYXBwbGljYXRpb24vYXZybydcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQuaWNjcHJvZmlsZSc7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgc2VtaS1zdHlsZVxuXG5leHBvcnQgY29uc3QgZ2V0TWltZVR5cGUgPSAoaGVhZGVyOiBVaW50OEFycmF5KTogTWltZVR5cGUgPT4ge1xuICAgIC8vIGNvbnZlcnQgVWludDhBcnJheSB0byBoZXggc3RyaW5nXG4gICAgY29uc3QgaGV4ID0gdWludDhBcnJheVRvSGV4U3RyaW5nKGhlYWRlcik7XG5cbiAgICAvLyBtYXAgaGV4IHN0cmluZyB0byBtaW1lIHR5cGVcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJ2ZmZDhmZmUwMDAxMDRhNDYnKSkgcmV0dXJuICdpbWFnZS9qcGVnJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzg5NTA0ZTQ3JykpIHJldHVybiAnaW1hZ2UvcG5nJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ2NGM0OTQ2JykpIHJldHVybiAnaW1hZ2UvZmxpZic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc2NzY5NmQ3MDIwNzg2MzY2JykpIHJldHVybiAnaW1hZ2UveC14Y2YnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDk0OTJhMDAnKSkgcmV0dXJuICdpbWFnZS94LWNhbm9uLWNyMic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0OTQ5MmEwMCcpKSByZXR1cm4gJ2ltYWdlL3gtY2Fub24tY3IzJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ5NDkyYTAwJykpIHJldHVybiAnaW1hZ2UvdGlmZic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0MjRkJykpIHJldHVybiAnaW1hZ2UvYm1wJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzY5NjM2ZTczJykpIHJldHVybiAnaW1hZ2UvaWNucyc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0OTQ5MWEwMDAwMDA0ODQ1NDE1MDUwJykpIHJldHVybiAnaW1hZ2Uvdm5kLm1zLXBob3RvJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzM4NDI1MDUzJykpIHJldHVybiAnaW1hZ2Uvdm5kLmFkb2JlLnBob3Rvc2hvcCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcwNjA1NGI1MCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtaW5kZXNpZ24nO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNTA0YjAzMDQnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi9lcHViK3ppcCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc1MDRiMDMwNCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gteHBpbnN0YWxsJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzUwNGIwMzA0JykpIHJldHVybiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0JztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzUwNGIwMzA0JykpIHJldHVybiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc1MDRiMDMwNCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQucHJlc2VudGF0aW9uJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzUwNGIwMzA0JykpIHJldHVybiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZG9jdW1lbnQnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNTA0YjAzMDQnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzUwNGIwMzA0JykpIHJldHVybiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNTA0YjAzMDQnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi96aXAnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnN2IyMjc0Nzk3MDY1MjIzYTIyNmE3MzZmNmUyMjdkJykpIHJldHVybiAnYXBwbGljYXRpb24vanNvbic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc3NTczNzQ2MTcyJykpIHJldHVybiAnYXBwbGljYXRpb24veC10YXInO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNTI2MTcyMjExYTA3MDAnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LXJhci1jb21wcmVzc2VkJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzFmOGIwOCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL2d6aXAnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDI1YTY4JykpIHJldHVybiAnYXBwbGljYXRpb24veC1iemlwMic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCczNzdhYmNhZjI3MWMnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LTd6LWNvbXByZXNzZWQnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNzhkYScpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtYXBwbGUtZGlza2ltYWdlJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDAwMDIwNjY3NDc5NzA2ZDcwJykpIHJldHVybiAndmlkZW8vbXA0JztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzRkNTQ2ODY0JykpIHJldHVybiAnYXVkaW8vbWlkaSc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcxYTQ1ZGZhMzkzNDI4Mjg4JykpIHJldHVybiAndmlkZW8veC1tYXRyb3NrYSc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcxYTQ1ZGZhMycpKSByZXR1cm4gJ3ZpZGVvL3dlYm0nO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMDAwMDAwMTQ2Njc0Nzk3MDcxNzQnKSkgcmV0dXJuICd2aWRlby9xdWlja3RpbWUnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNTI0OTQ2NDYnKSkgcmV0dXJuICd2aWRlby92bmQuYXZpJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzUyNDk0NjQ2JykpIHJldHVybiAnYXVkaW8vdm5kLndhdmUnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMGEwMTAzMDEnKSkgcmV0dXJuICdhdWRpby9xY2VscCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCczMDI2YjI3NThlNjZjZjExJykpIHJldHVybiAnYXVkaW8veC1tcy1hc2YnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMzAyNmIyNzU4ZTY2Y2YxMScpKSByZXR1cm4gJ3ZpZGVvL3gtbXMtYXNmJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzMwMjZiMjc1OGU2NmNmMTEnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQubXMtYXNmJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDAwMWJhJykpIHJldHVybiAndmlkZW8vbXBlZyc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcwMDAwMDAyMDY2NzQ3OTcwMzM2NycpKSByZXR1cm4gJ3ZpZGVvLzNncHAnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDk0NDMzJykpIHJldHVybiAnYXVkaW8vbXBlZyc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcwMDAwMDAyMDY2NzQ3OTcwNGQzNDQxMjAnKSkgcmV0dXJuICdhdWRpby9tcDQnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNGY3MDc1NzMnKSkgcmV0dXJuICdhdWRpby9vcHVzJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzRmNjc2NzUzJykpIHJldHVybiAndmlkZW8vb2dnJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzRmNjc2NzUzJykpIHJldHVybiAnYXVkaW8vb2dnJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzRmNjc2NzUzJykpIHJldHVybiAnYXBwbGljYXRpb24vb2dnJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzY2NGM2MTQzJykpIHJldHVybiAnYXVkaW8veC1mbGFjJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzRkNDE0MzIwJykpIHJldHVybiAnYXVkaW8vYXBlJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzc3NzY3MDZiJykpIHJldHVybiAnYXVkaW8vd2F2cGFjayc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcyMzIxNDE0ZDUyMGEnKSkgcmV0dXJuICdhdWRpby9hbXInO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMjU1MDQ0NDYyZDMxMmUnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi9wZGYnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnN2Y0NTRjNDYnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LWVsZic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZDVhJykpIHJldHVybiAnYXBwbGljYXRpb24veC1tc2Rvd25sb2FkJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQzNTc1MycpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzdiNWM3Mjc0NjYzMScpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3J0Zic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcwMDYxNzM2ZCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3dhc20nO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNzc0ZjQ2NDYnKSkgcmV0dXJuICdmb250L3dvZmYnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNzc0ZjQ2MzInKSkgcmV0dXJuICdmb250L3dvZmYyJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDEwMDAwMDAwOCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0JztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDEwMDAwMDAnKSkgcmV0dXJuICdmb250L3R0Zic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZjU0NTQ0ZjAwJykpIHJldHVybiAnZm9udC9vdGYnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMDAwMDAxMDAwMTAwJykpIHJldHVybiAnaW1hZ2UveC1pY29uJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ2NGM1NjAxMDUnKSkgcmV0dXJuICd2aWRlby94LWZsdic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcyNTIxNTA1MycpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3Bvc3RzY3JpcHQnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMjUyMTUwNTMnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi9lcHMnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnZmQzNzdhNTg1YTAwJykpIHJldHVybiAnYXBwbGljYXRpb24veC14eic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc1MzUxNGM2OTc0NjUyMDY2NmY3MjZkNjE3NDIwMzMwMCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtc3FsaXRlMyc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZTQ1NTMxYTAwMDAwMDAxJykpIHJldHVybiAnYXBwbGljYXRpb24veC1uaW50ZW5kby1uZXMtcm9tJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzUwNGIwMzA0JykpIHJldHVybiAnYXBwbGljYXRpb24veC1nb29nbGUtY2hyb21lLWV4dGVuc2lvbic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZDUzNDM0NicpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1jYWItY29tcHJlc3NlZCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcyMTNjNjE3MjYzNjgzZTBhJykpIHJldHVybiAnYXBwbGljYXRpb24veC1kZWInO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMWY4YjA4JykpIHJldHVybiAnYXBwbGljYXRpb24veC11bml4LWFyY2hpdmUnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnZWRhYmVlZGInKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LXJwbSc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcxZjlkOTAnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LWNvbXByZXNzJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzRjNWE0OTUwJykpIHJldHVybiAnYXBwbGljYXRpb24veC1semlwJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJ2QwY2YxMWUwYTFiMTFhZTEnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LWNmYic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZDQ5NDU1ZicpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtbWllJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQxNDE1MjMxNDYnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LWFwYWNoZS1hcnJvdyc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcwNjBlMmIzNDAyMDUwMTAxJykpIHJldHVybiAnYXBwbGljYXRpb24vbXhmJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ3JykpIHJldHVybiAndmlkZW8vbXAydCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0MjUwZTQnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LWJsZW5kZXInO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDI1MDQ3ZmInKSkgcmV0dXJuICdpbWFnZS9icGcnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnZmY0ZmZmNTEnKSkgcmV0dXJuICdpbWFnZS9qMmMnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMDAwMDAwMGM2YTUwMjAyMDBkMGEnKSkgcmV0dXJuICdpbWFnZS9qcDInO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNmE1MDIwMjAwZDBhODcwYScpKSByZXR1cm4gJ2ltYWdlL2pweCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc2YTUwMjAyMDBkMGE4NzBhJykpIHJldHVybiAnaW1hZ2UvanBtJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDAwMDBjNmE1MDIwMjAwZDBhJykpIHJldHVybiAnaW1hZ2UvbWoyJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ2NGY1MjRkJykpIHJldHVybiAnYXVkaW8vYWlmZic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCczYzNmNzg2ZDZjMjAnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94bWwnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDI0ZjRmNGI0ZDRmNDI0OScpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtbW9iaXBvY2tldC1lYm9vayc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc2Njc0Nzk3MDYxNzQnKSkgcmV0dXJuICdpbWFnZS9oZWlmJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzY2NzQ3OTcwNjE3NCcpKSByZXR1cm4gJ2ltYWdlL2hlaWYtc2VxdWVuY2UnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNjY3NDc5NzA2MTc0JykpIHJldHVybiAnaW1hZ2UvaGVpYyc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc2Njc0Nzk3MDYxNzQnKSkgcmV0dXJuICdpbWFnZS9oZWljLXNlcXVlbmNlJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzRiNTQ1ODIwJykpIHJldHVybiAnaW1hZ2Uva3R4JztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ0NDk0MzRkJykpIHJldHVybiAnYXBwbGljYXRpb24vZGljb20nO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNGQ1MDQzNGInKSkgcmV0dXJuICdhdWRpby94LW11c2VwYWNrJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzU2NjU2ZTY0JykpIHJldHVybiAndGV4dC9jYWxlbmRhcic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0MjQ1NDc0OTRlM2E1NjQzNDE1MjQ0JykpIHJldHVybiAndGV4dC92Y2FyZCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc2NzZjNTQ1OCcpKSByZXR1cm4gJ21vZGVsL2dsdGYtYmluYXJ5JztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJ2Q0YzNiMmExJykpIHJldHVybiAnYXBwbGljYXRpb24vdm5kLnRjcGR1bXAucGNhcCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0NjRmNTI0ZCcpKSByZXR1cm4gJ2F1ZGlvL3gtdm9jJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzY0NjQ2ZjZjJykpIHJldHVybiAnYXVkaW8vdm5kLmRvbGJ5LmRkLXJhdyc7XG5cbiAgICByZXR1cm4gbnVsbDtcbn07XG5cbmNvbnN0IHVpbnQ4QXJyYXlUb0hleFN0cmluZyA9ICh1aW50OEFycmF5KTogc3RyaW5nID0+IHtcbiAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLm1hcC5jYWxsKHVpbnQ4QXJyYXksIChieXRlKSA9PiAoJzAwJyArIGJ5dGUudG9TdHJpbmcoMTYpKS5zbGljZSgtMikpLmpvaW4oJycpO1xufTtcbiJdfQ==
246
+ const identifyAsfFormat = (data) => {
247
+ // ASF files all start with the same GUID: 3026b2758e66cf11a6d900aa0062ce6c
248
+ // To distinguish between audio, video, and application ASF, we need to examine
249
+ // the stream properties in the ASF header
250
+ try {
251
+ // Look for stream properties object GUID starting at offset 30
252
+ // Audio stream properties: b7dc0791a9b711cf8ee600c00c205365
253
+ // Video stream properties: bc19efc05b4d11cf9b1100aa00bbcb8b
254
+ if (data.length < 100) {
255
+ // Not enough data to analyze, default to application
256
+ return 'application/vnd.ms-asf';
257
+ }
258
+ const hex = uint8ArrayToHexString(data);
259
+ // Look for video stream properties GUID (indicates video content)
260
+ if (hex.includes('bc19efc05b4d11cf9b1100aa00bbcb8b')) {
261
+ return 'video/x-ms-asf';
262
+ }
263
+ // Look for audio stream properties GUID (indicates audio content)
264
+ if (hex.includes('b7dc0791a9b711cf8ee600c00c205365')) {
265
+ return 'audio/x-ms-asf';
266
+ }
267
+ // Check for Windows Media Audio/Video codec identifiers
268
+ // WMA codec: 161 (0xa1) or 162 (0xa2) or 163 (0xa3)
269
+ // WMV codec: Common values include various Windows Media Video identifiers
270
+ // Scan through the header for codec information
271
+ for (let i = 0; i < Math.min(data.length - 4, 1000); i++) {
272
+ // Look for audio codec indicators
273
+ if (data[i] === 0xa1 || data[i] === 0xa2 || data[i] === 0xa3) {
274
+ // Found WMA codec indicator
275
+ return 'audio/x-ms-asf';
276
+ }
277
+ }
278
+ // Look for common video indicators in the first 1KB
279
+ const textContent = new TextDecoder('utf-8', { fatal: false }).decode(data.slice(0, Math.min(1000, data.length)));
280
+ // Check for video-related strings
281
+ if (textContent.toLowerCase().includes('video') ||
282
+ textContent.toLowerCase().includes('wmv') ||
283
+ textContent.toLowerCase().includes('mpeg')) {
284
+ return 'video/x-ms-asf';
285
+ }
286
+ // Check for audio-related strings
287
+ if (textContent.toLowerCase().includes('audio') ||
288
+ textContent.toLowerCase().includes('wma') ||
289
+ textContent.toLowerCase().includes('music')) {
290
+ return 'audio/x-ms-asf';
291
+ }
292
+ // Default to application/vnd.ms-asf if we can't determine the specific type
293
+ return 'application/vnd.ms-asf';
294
+ }
295
+ catch {
296
+ // If any error occurs during analysis, default to application type
297
+ return 'application/vnd.ms-asf';
298
+ }
299
+ };
300
+ const identifyHeifFormat = (data) => {
301
+ // HEIF/HEIC files all start with the same ftyp box signature: 667479706174
302
+ // To distinguish between formats, we need to examine the brand and compatible brands
303
+ // in the ftyp (file type) box
304
+ try {
305
+ if (data.length < 20) {
306
+ // Not enough data to analyze, default to HEIF
307
+ return 'image/heif';
308
+ }
309
+ const hex = uint8ArrayToHexString(data);
310
+ // The ftyp box structure:
311
+ // Bytes 0-3: Box size (4 bytes)
312
+ // Bytes 4-7: Box type "ftyp" (4 bytes) - 667479706174
313
+ // Bytes 8-11: Major brand (4 bytes)
314
+ // Bytes 12-15: Minor version (4 bytes)
315
+ // Bytes 16+: Compatible brands (4 bytes each)
316
+ // Extract major brand (4 bytes starting at offset 8)
317
+ // Convert to ASCII string for easier comparison
318
+ const majorBrand = String.fromCharCode(data[8], data[9], data[10], data[11]);
319
+ // Look for compatible brands in the first 100 bytes
320
+ const compatibleBrandsHex = hex.substring(32, Math.min(200, hex.length)); // Start after major brand + minor version
321
+ // HEIC brands: 'heic', 'heix', 'hevc', 'hevx'
322
+ if (majorBrand === 'heic' ||
323
+ compatibleBrandsHex.includes('68656963') || // 'heic'
324
+ compatibleBrandsHex.includes('68656978') || // 'heix'
325
+ compatibleBrandsHex.includes('68657663') || // 'hevc'
326
+ compatibleBrandsHex.includes('68657678')) { // 'hevx'
327
+ // Check for sequence/animation indicators
328
+ if (compatibleBrandsHex.includes('68657673') || // 'hevs' - HEIC sequence
329
+ compatibleBrandsHex.includes('6d736631') || // 'msf1' - sequence
330
+ majorBrand === 'hevs') {
331
+ return 'image/heic-sequence';
332
+ }
333
+ return 'image/heic';
334
+ }
335
+ // HEIF brands: 'mif1', 'msf1'
336
+ if (majorBrand === 'mif1' || majorBrand === 'msf1' ||
337
+ compatibleBrandsHex.includes('6d696631') || // 'mif1'
338
+ compatibleBrandsHex.includes('6d736631')) { // 'msf1'
339
+ // Check for sequence/animation indicators
340
+ if (majorBrand === 'msf1' ||
341
+ compatibleBrandsHex.includes('6d736631')) { // 'msf1' - sequence
342
+ return 'image/heif-sequence';
343
+ }
344
+ return 'image/heif';
345
+ }
346
+ // Check for specific sequence indicators in the data
347
+ if (hex.includes('6d736631') || // 'msf1' - multi-image sequence
348
+ hex.includes('68657673')) { // 'hevs' - HEIC sequence
349
+ // If we find HEIC-related brands, it's HEIC sequence
350
+ if (hex.includes('68656963') || hex.includes('68657663')) {
351
+ return 'image/heic-sequence';
352
+ }
353
+ return 'image/heif-sequence';
354
+ }
355
+ // If we find HEIC indicators but no sequence, it's single HEIC
356
+ if (hex.includes('68656963') || // 'heic'
357
+ hex.includes('68657663') || // 'hevc'
358
+ hex.includes('68656978') || // 'heix'
359
+ hex.includes('68657678')) { // 'hevx'
360
+ return 'image/heic';
361
+ }
362
+ // Default to HEIF for any other case
363
+ return 'image/heif';
364
+ }
365
+ catch {
366
+ // If any error occurs during analysis, default to HEIF
367
+ return 'image/heif';
368
+ }
369
+ };
370
+ const identifyOggFormat = (data) => {
371
+ // OGG files all start with "OggS" (4f676753) but can contain different codecs
372
+ // To distinguish between audio, video, and application OGG, we need to examine
373
+ // the codec information in the OGG page headers
374
+ try {
375
+ if (data.length < 64) {
376
+ // Not enough data to analyze, default to audio
377
+ return 'audio/ogg';
378
+ }
379
+ const hex = uint8ArrayToHexString(data);
380
+ // Look for codec identification patterns in the first few hundred bytes
381
+ // Common video codecs in OGG:
382
+ // - Theora: "theora" or "\x80theora"
383
+ // - VP8/VP9: various signatures
384
+ // - Dirac: "BBCD"
385
+ // Common audio codecs in OGG:
386
+ // - Vorbis: "vorbis" or "\x01vorbis"
387
+ // - Opus: "OpusHead"
388
+ // - FLAC: "fLaC"
389
+ // - Speex: "Speex"
390
+ // Convert some bytes to text for string matching
391
+ const textContent = new TextDecoder('utf-8', { fatal: false }).decode(data.slice(0, Math.min(512, data.length)));
392
+ const lowerContent = textContent.toLowerCase();
393
+ // Check for video codec indicators first (as they're more specific)
394
+ if (lowerContent.includes('theora') ||
395
+ hex.includes('8074686f726120') || // "\x80theora "
396
+ hex.includes('7468656f7261') || // "theora"
397
+ lowerContent.includes('dirac') ||
398
+ hex.includes('42424344') || // "BBCD" - Dirac
399
+ lowerContent.includes('vp8') ||
400
+ lowerContent.includes('vp9')) {
401
+ return 'video/ogg';
402
+ }
403
+ // Check for audio codec indicators
404
+ if (lowerContent.includes('vorbis') ||
405
+ hex.includes('01766f72626973') || // "\x01vorbis"
406
+ hex.includes('766f72626973') || // "vorbis"
407
+ lowerContent.includes('opushead') ||
408
+ hex.includes('4f7075734865616420') || // "OpusHead "
409
+ lowerContent.includes('speex') ||
410
+ hex.includes('53706565782020') || // "Speex "
411
+ lowerContent.includes('flac') ||
412
+ hex.includes('664c6143')) { // "fLaC"
413
+ return 'audio/ogg';
414
+ }
415
+ // Look for OGG stream structure patterns
416
+ // OGG pages have a specific structure, look for multiple "OggS" signatures
417
+ // which might indicate a complex multimedia container
418
+ let oggSCount = 0;
419
+ for (let i = 0; i < Math.min(data.length - 4, 1000); i += 4) {
420
+ if (data[i] === 0x4f && data[i + 1] === 0x67 &&
421
+ data[i + 2] === 0x67 && data[i + 3] === 0x53) {
422
+ oggSCount++;
423
+ }
424
+ }
425
+ // Multiple OGG pages might indicate a more complex application format
426
+ if (oggSCount > 3) {
427
+ // Check if it's likely a multimedia container vs pure audio/video
428
+ if (lowerContent.includes('application') ||
429
+ lowerContent.includes('metadata') ||
430
+ lowerContent.includes('index') ||
431
+ (!lowerContent.includes('audio') && !lowerContent.includes('video') &&
432
+ !lowerContent.includes('vorbis') && !lowerContent.includes('theora'))) {
433
+ return 'application/ogg';
434
+ }
435
+ }
436
+ // Look for file extension hints in metadata (if present)
437
+ if (lowerContent.includes('.ogv') || lowerContent.includes('video')) {
438
+ return 'video/ogg';
439
+ }
440
+ if (lowerContent.includes('.oga') || lowerContent.includes('audio') || lowerContent.includes('music')) {
441
+ return 'audio/ogg';
442
+ }
443
+ // Check the OGG page header flags
444
+ // Byte 5 in OGG page header contains flags
445
+ // If we have enough data, check the stream type
446
+ if (data.length > 26) {
447
+ const pageHeaderType = data[5];
448
+ // Fresh packet start (0x02) often indicates beginning of codec data
449
+ if ((pageHeaderType & 0x02) === 0x02) {
450
+ // Look at the packet data starting around byte 27
451
+ const packetStart = data.slice(27, Math.min(data.length, 50));
452
+ const packetHex = uint8ArrayToHexString(packetStart);
453
+ // Check for Vorbis identification header
454
+ if (packetHex.startsWith('01766f72626973')) {
455
+ return 'audio/ogg';
456
+ }
457
+ // Check for Theora identification header
458
+ if (packetHex.startsWith('8074686f726120')) {
459
+ return 'video/ogg';
460
+ }
461
+ }
462
+ }
463
+ // Default to audio/ogg as it's the most common OGG format
464
+ return 'audio/ogg';
465
+ }
466
+ catch {
467
+ // If any error occurs during analysis, default to audio
468
+ return 'audio/ogg';
469
+ }
470
+ };
471
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWltZS10eXBlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2V1aS1maWxlLXVwbG9hZC91dGlscy9taW1lLXR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWlKQSxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBQyxNQUFrQixFQUFZLEVBQUU7SUFDeEQsbUNBQW1DO0lBQ25DLE1BQU0sR0FBRyxHQUFHLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRTFDLDhCQUE4QjtJQUM5QixJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFDbEQsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQ25ELElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFPLFlBQVksQ0FBQztJQUNwRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUM7UUFBRSxPQUFPLGFBQWEsQ0FBQztJQUM3RCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQUUsT0FBTyxtQkFBbUIsQ0FBQztJQUMzRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQUUsT0FBTyxtQkFBbUIsQ0FBQztJQUMzRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDO1FBQUUsT0FBTyxZQUFZLENBQUM7SUFDcEQsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUFFLE9BQU8sV0FBVyxDQUFDO0lBQy9DLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFBRSxPQUFPLFlBQVksQ0FBQztJQUNwRCxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsd0JBQXdCLENBQUM7UUFBRSxPQUFPLG9CQUFvQixDQUFDO0lBQzFFLElBQUksR0FBRyxD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QUFJLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztZQUN2RyxPQUFPLFdBQVcsQ0FBQztRQUNwQixDQUFDO1FBRUQsa0NBQWtDO1FBQ2xDLDJDQUEyQztRQUMzQyxnREFBZ0Q7UUFDaEQsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMvQixvRUFBb0U7WUFDcEUsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDdEMsa0RBQWtEO2dCQUNsRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDOUQsTUFBTSxTQUFTLEdBQUcscUJBQXFCLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBRXJELHlDQUF5QztnQkFDekMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztvQkFDNUMsT0FBTyxXQUFXLENBQUM7Z0JBQ3BCLENBQUM7Z0JBRUQseUNBQXlDO2dCQUN6QyxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO29CQUM1QyxPQUFPLFdBQVcsQ0FBQztnQkFDcEIsQ0FBQztZQUNGLENBQUM7UUFDRixDQUFDO1FBRUQsMERBQTBEO1FBQzFELE9BQU8sV0FBVyxDQUFDO0lBRXBCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUix3REFBd0Q7UUFDeEQsT0FBTyxXQUFXLENBQUM7SUFDcEIsQ0FBQztBQUNGLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB0eXBlIE1pbWVUeXBlID1cbiAgICB8ICdpbWFnZS9qcGVnJ1xuICAgIHwgJ2ltYWdlL3BuZydcbiAgICB8ICdpbWFnZS9naWYnXG4gICAgfCAnaW1hZ2Uvd2VicCdcbiAgICB8ICdpbWFnZS9mbGlmJ1xuICAgIHwgJ2ltYWdlL3gteGNmJ1xuICAgIHwgJ2ltYWdlL3gtY2Fub24tY3IyJ1xuICAgIHwgJ2ltYWdlL3gtY2Fub24tY3IzJ1xuICAgIHwgJ2ltYWdlL3RpZmYnXG4gICAgfCAnaW1hZ2UvYm1wJ1xuICAgIHwgJ2ltYWdlL2ljbnMnXG4gICAgfCAnaW1hZ2Uvdm5kLm1zLXBob3RvJ1xuICAgIHwgJ2ltYWdlL3ZuZC5hZG9iZS5waG90b3Nob3AnXG4gICAgfCAnYXBwbGljYXRpb24veC1pbmRlc2lnbidcbiAgICB8ICdhcHBsaWNhdGlvbi9lcHViK3ppcCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LXhwaW5zdGFsbCdcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQnXG4gICAgfCAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldCdcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnByZXNlbnRhdGlvbidcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudCdcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0J1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ppcCdcbiAgICB8ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtdGFyJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtcmFyLWNvbXByZXNzZWQnXG4gICAgfCAnYXBwbGljYXRpb24vZ3ppcCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWJ6aXAyJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtN3otY29tcHJlc3NlZCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWFwcGxlLWRpc2tpbWFnZSdcbiAgICB8ICd2aWRlby9tcDQnXG4gICAgfCAnYXVkaW8vbWlkaSdcbiAgICB8ICd2aWRlby94LW1hdHJvc2thJ1xuICAgIHwgJ3ZpZGVvL3dlYm0nXG4gICAgfCAndmlkZW8vcXVpY2t0aW1lJ1xuICAgIHwgJ3ZpZGVvL3ZuZC5hdmknXG4gICAgfCAnYXVkaW8vdm5kLndhdmUnXG4gICAgfCAnYXVkaW8vcWNlbHAnXG4gICAgfCAnYXVkaW8veC1tcy1hc2YnXG4gICAgfCAndmlkZW8veC1tcy1hc2YnXG4gICAgfCAnYXBwbGljYXRpb24vdm5kLm1zLWFzZidcbiAgICB8ICd2aWRlby9tcGVnJ1xuICAgIHwgJ3ZpZGVvLzNncHAnXG4gICAgfCAnYXVkaW8vbXBlZydcbiAgICB8ICdhdWRpby9tcDQnXG4gICAgfCAnYXVkaW8vb3B1cydcbiAgICB8ICd2aWRlby9vZ2cnXG4gICAgfCAnYXVkaW8vb2dnJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL29nZydcbiAgICB8ICdhdWRpby94LWZsYWMnXG4gICAgfCAnYXVkaW8vYXBlJ1xuICAgIHwgJ2F1ZGlvL3dhdnBhY2snXG4gICAgfCAnYXVkaW8vYW1yJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3BkZidcbiAgICB8ICdhcHBsaWNhdGlvbi94LWVsZidcbiAgICB8ICdhcHBsaWNhdGlvbi94LW1zZG93bmxvYWQnXG4gICAgfCAnYXBwbGljYXRpb24veC1zaG9ja3dhdmUtZmxhc2gnXG4gICAgfCAnYXBwbGljYXRpb24vcnRmJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3dhc20nXG4gICAgfCAnZm9udC93b2ZmJ1xuICAgIHwgJ2ZvbnQvd29mZjInXG4gICAgfCAnYXBwbGljYXRpb24vdm5kLm1zLWZvbnRvYmplY3QnXG4gICAgfCAnZm9udC90dGYnXG4gICAgfCAnZm9udC9vdGYnXG4gICAgfCAnaW1hZ2UveC1pY29uJ1xuICAgIHwgJ3ZpZGVvL3gtZmx2J1xuICAgIHwgJ2FwcGxpY2F0aW9uL3Bvc3RzY3JpcHQnXG4gICAgfCAnYXBwbGljYXRpb24vZXBzJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gteHonXG4gICAgfCAnYXBwbGljYXRpb24veC1zcWxpdGUzJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtbmludGVuZG8tbmVzLXJvbSdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWdvb2dsZS1jaHJvbWUtZXh0ZW5zaW9uJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC5tcy1jYWItY29tcHJlc3NlZCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWRlYidcbiAgICB8ICdhcHBsaWNhdGlvbi94LXVuaXgtYXJjaGl2ZSdcbiAgICB8ICdhcHBsaWNhdGlvbi94LXJwbSdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWNvbXByZXNzJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtbHppcCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWNmYidcbiAgICB8ICdhcHBsaWNhdGlvbi94LW1pZSdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWFwYWNoZS1hcnJvdydcbiAgICB8ICdhcHBsaWNhdGlvbi9teGYnXG4gICAgfCAndmlkZW8vbXAydCdcbiAgICB8ICdhcHBsaWNhdGlvbi94LWJsZW5kZXInXG4gICAgfCAnaW1hZ2UvYnBnJ1xuICAgIHwgJ2ltYWdlL2oyYydcbiAgICB8ICdpbWFnZS9qcDInXG4gICAgfCAnaW1hZ2UvanB4J1xuICAgIHwgJ2ltYWdlL2pwbSdcbiAgICB8ICdpbWFnZS9tajInXG4gICAgfCAnYXVkaW8vYWlmZidcbiAgICB8ICdhcHBsaWNhdGlvbi94bWwnXG4gICAgfCAnYXBwbGljYXRpb24veC1tb2JpcG9ja2V0LWVib29rJ1xuICAgIHwgJ2ltYWdlL2hlaWYnXG4gICAgfCAnaW1hZ2UvaGVpZi1zZXF1ZW5jZSdcbiAgICB8ICdpbWFnZS9oZWljJ1xuICAgIHwgJ2ltYWdlL2hlaWMtc2VxdWVuY2UnXG4gICAgfCAnaW1hZ2Uva3R4J1xuICAgIHwgJ2FwcGxpY2F0aW9uL2RpY29tJ1xuICAgIHwgJ2F1ZGlvL3gtbXVzZXBhY2snXG4gICAgfCAndGV4dC9jYWxlbmRhcidcbiAgICB8ICd0ZXh0L3ZjYXJkJ1xuICAgIHwgJ21vZGVsL2dsdGYtYmluYXJ5J1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC50Y3BkdW1wLnBjYXAnXG4gICAgfCAnYXVkaW8veC12b2MnXG4gICAgfCAnYXVkaW8vdm5kLmRvbGJ5LmRkLXJhdydcbiAgICB8ICdhdWRpby94LW00YSdcbiAgICB8ICdpbWFnZS9hcG5nJ1xuICAgIHwgJ2ltYWdlL3gtb2x5bXB1cy1vcmYnXG4gICAgfCAnaW1hZ2UveC1zb255LWFydydcbiAgICB8ICdpbWFnZS94LWFkb2JlLWRuZydcbiAgICB8ICdpbWFnZS94LW5pa29uLW5lZidcbiAgICB8ICdpbWFnZS94LXBhbmFzb25pYy1ydzInXG4gICAgfCAnaW1hZ2UveC1mdWppZmlsbS1yYWYnXG4gICAgfCAndmlkZW8veC1tNHYnXG4gICAgfCAndmlkZW8vM2dwcDInXG4gICAgfCAnYXBwbGljYXRpb24veC1lc3JpLXNoYXBlJ1xuICAgIHwgJ2F1ZGlvL2FhYydcbiAgICB8ICdhdWRpby94LWl0J1xuICAgIHwgJ2F1ZGlvL3gtczNtJ1xuICAgIHwgJ2F1ZGlvL3gteG0nXG4gICAgfCAndmlkZW8vTVAxUydcbiAgICB8ICd2aWRlby9NUDJQJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3ZuZC5za2V0Y2h1cC5za3AnXG4gICAgfCAnaW1hZ2UvYXZpZidcbiAgICB8ICdhcHBsaWNhdGlvbi94LWx6aC1jb21wcmVzc2VkJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3BncC1lbmNyeXB0ZWQnXG4gICAgfCAnYXBwbGljYXRpb24veC1hc2FyJ1xuICAgIHwgJ21vZGVsL3N0bCdcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQubXMtaHRtbGhlbHAnXG4gICAgfCAnbW9kZWwvM21mJ1xuICAgIHwgJ2ltYWdlL2p4bCdcbiAgICB8ICdhcHBsaWNhdGlvbi96c3RkJ1xuICAgIHwgJ2ltYWdlL2pscydcbiAgICB8ICdhcHBsaWNhdGlvbi92bmQubXMtb3V0bG9vaydcbiAgICB8ICdpbWFnZS92bmQuZHdnJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtcGFycXVldCdcbiAgICB8ICdhcHBsaWNhdGlvbi9qYXZhLXZtJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtYXJqJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL3gtY3BpbydcbiAgICB8ICdhcHBsaWNhdGlvbi94LWFjZS1jb21wcmVzc2VkJ1xuICAgIHwgJ2FwcGxpY2F0aW9uL2F2cm8nXG4gICAgfCAnYXBwbGljYXRpb24vdm5kLmljY3Byb2ZpbGUnOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIHNlbWktc3R5bGVcblxuZXhwb3J0IGNvbnN0IGdldE1pbWVUeXBlID0gKGhlYWRlcjogVWludDhBcnJheSk6IE1pbWVUeXBlID0+IHtcbiAgICAvLyBjb252ZXJ0IFVpbnQ4QXJyYXkgdG8gaGV4IHN0cmluZ1xuICAgIGNvbnN0IGhleCA9IHVpbnQ4QXJyYXlUb0hleFN0cmluZyhoZWFkZXIpO1xuXG4gICAgLy8gbWFwIGhleCBzdHJpbmcgdG8gbWltZSB0eXBlXG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCdmZmQ4ZmYnKSkgcmV0dXJuICdpbWFnZS9qcGVnJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzg5NTA0ZTQ3JykpIHJldHVybiAnaW1hZ2UvcG5nJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ2NGM0OTQ2JykpIHJldHVybiAnaW1hZ2UvZmxpZic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc2NzY5NmQ3MDIwNzg2MzY2JykpIHJldHVybiAnaW1hZ2UveC14Y2YnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDk0OTJhMDAnKSkgcmV0dXJuICdpbWFnZS94LWNhbm9uLWNyMic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0OTQ5MmEwMCcpKSByZXR1cm4gJ2ltYWdlL3gtY2Fub24tY3IzJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ5NDkyYTAwJykpIHJldHVybiAnaW1hZ2UvdGlmZic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0MjRkJykpIHJldHVybiAnaW1hZ2UvYm1wJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzY5NjM2ZTczJykpIHJldHVybiAnaW1hZ2UvaWNucyc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0OTQ5MWEwMDAwMDA0ODQ1NDE1MDUwJykpIHJldHVybiAnaW1hZ2Uvdm5kLm1zLXBob3RvJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzM4NDI1MDUzJykpIHJldHVybiAnaW1hZ2Uvdm5kLmFkb2JlLnBob3Rvc2hvcCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcwNjA1NGI1MCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtaW5kZXNpZ24nO1xuXHQvLyBIYW5kbGUgWklQLWJhc2VkIGZvcm1hdHMgYnkgZXhhbWluaW5nIGNvbnRlbnRcblx0aWYgKGhleC5zdGFydHNXaXRoKCc1MDRiMDMwNCcpKSB7XG5cdFx0cmV0dXJuIGlkZW50aWZ5WmlwQmFzZWRGb3JtYXQoaGVhZGVyKTtcblx0fVxuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnN2IyMjc0Nzk3MDY1MjIzYTIyNmE3MzZmNmUyMjdkJykpIHJldHVybiAnYXBwbGljYXRpb24vanNvbic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc3NTczNzQ2MTcyJykpIHJldHVybiAnYXBwbGljYXRpb24veC10YXInO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNTI2MTcyMjExYTA3MDAnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LXJhci1jb21wcmVzc2VkJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzFmOGIwOCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL2d6aXAnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDI1YTY4JykpIHJldHVybiAnYXBwbGljYXRpb24veC1iemlwMic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCczNzdhYmNhZjI3MWMnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LTd6LWNvbXByZXNzZWQnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNzhkYScpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtYXBwbGUtZGlza2ltYWdlJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDAwMDIwNjY3NDc5NzA2ZDcwJykpIHJldHVybiAndmlkZW8vbXA0JztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzRkNTQ2ODY0JykpIHJldHVybiAnYXVkaW8vbWlkaSc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcxYTQ1ZGZhMzkzNDI4Mjg4JykpIHJldHVybiAndmlkZW8veC1tYXRyb3NrYSc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcxYTQ1ZGZhMycpKSByZXR1cm4gJ3ZpZGVvL3dlYm0nO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMDAwMDAwMTQ2Njc0Nzk3MDcxNzQnKSkgcmV0dXJuICd2aWRlby9xdWlja3RpbWUnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNTI0OTQ2NDYnKSkgcmV0dXJuICd2aWRlby92bmQuYXZpJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzUyNDk0NjQ2JykpIHJldHVybiAnYXVkaW8vdm5kLndhdmUnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMGEwMTAzMDEnKSkgcmV0dXJuICdhdWRpby9xY2VscCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCczMDI2YjI3NThlNjZjZjExJykpIHJldHVybiBpZGVudGlmeUFzZkZvcm1hdChoZWFkZXIpO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMDAwMDAxYmEnKSkgcmV0dXJuICd2aWRlby9tcGVnJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDAwMDIwNjY3NDc5NzAzMzY3JykpIHJldHVybiAndmlkZW8vM2dwcCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0OTQ0MzMnKSkgcmV0dXJuICdhdWRpby9tcGVnJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDAwMDIwNjY3NDc5NzA0ZDM0NDEyMCcpKSByZXR1cm4gJ2F1ZGlvL21wNCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZjcwNzU3MycpKSByZXR1cm4gJ2F1ZGlvL29wdXMnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNGY2NzY3NTMnKSkgcmV0dXJuIGlkZW50aWZ5T2dnRm9ybWF0KGhlYWRlcik7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc2NjRjNjE0MycpKSByZXR1cm4gJ2F1ZGlvL3gtZmxhYyc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZDQxNDMyMCcpKSByZXR1cm4gJ2F1ZGlvL2FwZSc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc3Nzc2NzA2YicpKSByZXR1cm4gJ2F1ZGlvL3dhdnBhY2snO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMjMyMTQxNGQ1MjBhJykpIHJldHVybiAnYXVkaW8vYW1yJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzI1NTA0NDQ2MmQzMTJlJykpIHJldHVybiAnYXBwbGljYXRpb24vcGRmJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzdmNDU0YzQ2JykpIHJldHVybiAnYXBwbGljYXRpb24veC1lbGYnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNGQ1YScpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtbXNkb3dubG9hZCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0MzU3NTMnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc3YjVjNzI3NDY2MzEnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi9ydGYnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMDA2MTczNmQnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi93YXNtJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzc3NGY0NjQ2JykpIHJldHVybiAnZm9udC93b2ZmJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzc3NGY0NjMyJykpIHJldHVybiAnZm9udC93b2ZmMic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcwMDAxMDAwMDAwMDgnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQubXMtZm9udG9iamVjdCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcwMDAxMDAwMDAwJykpIHJldHVybiAnZm9udC90dGYnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNGY1NDU0NGYwMCcpKSByZXR1cm4gJ2ZvbnQvb3RmJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDAwMTAwMDEwMCcpKSByZXR1cm4gJ2ltYWdlL3gtaWNvbic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0NjRjNTYwMTA1JykpIHJldHVybiAndmlkZW8veC1mbHYnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMjUyMTUwNTMnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi9wb3N0c2NyaXB0JztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzI1MjE1MDUzJykpIHJldHVybiAnYXBwbGljYXRpb24vZXBzJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJ2ZkMzc3YTU4NWEwMCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gteHonO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNTM1MTRjNjk3NDY1MjA2NjZmNzI2ZDYxNzQyMDMzMDAnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LXNxbGl0ZTMnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNGU0NTUzMWEwMDAwMDAwMScpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtbmludGVuZG8tbmVzLXJvbSc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZDUzNDM0NicpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1jYWItY29tcHJlc3NlZCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcyMTNjNjE3MjYzNjgzZTBhJykpIHJldHVybiAnYXBwbGljYXRpb24veC1kZWInO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMWY4YjA4JykpIHJldHVybiAnYXBwbGljYXRpb24veC11bml4LWFyY2hpdmUnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnZWRhYmVlZGInKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LXJwbSc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcxZjlkOTAnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LWNvbXByZXNzJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzRjNWE0OTUwJykpIHJldHVybiAnYXBwbGljYXRpb24veC1semlwJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJ2QwY2YxMWUwYTFiMTFhZTEnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LWNmYic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZDQ5NDU1ZicpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtbWllJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQxNDE1MjMxNDYnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LWFwYWNoZS1hcnJvdyc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCcwNjBlMmIzNDAyMDUwMTAxJykpIHJldHVybiAnYXBwbGljYXRpb24vbXhmJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ3JykpIHJldHVybiAndmlkZW8vbXAydCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0MjUwZTQnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94LWJsZW5kZXInO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDI1MDQ3ZmInKSkgcmV0dXJuICdpbWFnZS9icGcnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnZmY0ZmZmNTEnKSkgcmV0dXJuICdpbWFnZS9qMmMnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnMDAwMDAwMGM2YTUwMjAyMDBkMGEnKSkgcmV0dXJuICdpbWFnZS9qcDInO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNmE1MDIwMjAwZDBhODcwYScpKSByZXR1cm4gJ2ltYWdlL2pweCc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc2YTUwMjAyMDBkMGE4NzBhJykpIHJldHVybiAnaW1hZ2UvanBtJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzAwMDAwMDBjNmE1MDIwMjAwZDBhJykpIHJldHVybiAnaW1hZ2UvbWoyJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ2NGY1MjRkJykpIHJldHVybiAnYXVkaW8vYWlmZic7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCczYzNmNzg2ZDZjMjAnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi94bWwnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDI0ZjRmNGI0ZDRmNDI0OScpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3gtbW9iaXBvY2tldC1lYm9vayc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc2Njc0Nzk3MDYxNzQnKSkgcmV0dXJuIGlkZW50aWZ5SGVpZkZvcm1hdChoZWFkZXIpO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNGI1NDU4MjAnKSkgcmV0dXJuICdpbWFnZS9rdHgnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNDQ0OTQzNGQnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi9kaWNvbSc7XG4gICAgaWYgKGhleC5zdGFydHNXaXRoKCc0ZDUwNDM0YicpKSByZXR1cm4gJ2F1ZGlvL3gtbXVzZXBhY2snO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNTY2NTZlNjQnKSkgcmV0dXJuICd0ZXh0L2NhbGVuZGFyJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQyNDU0NzQ5NGUzYTU2NDM0MTUyNDQnKSkgcmV0dXJuICd0ZXh0L3ZjYXJkJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzY3NmM1NDU4JykpIHJldHVybiAnbW9kZWwvZ2x0Zi1iaW5hcnknO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnZDRjM2IyYTEnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQudGNwZHVtcC5wY2FwJztcbiAgICBpZiAoaGV4LnN0YXJ0c1dpdGgoJzQ2NGY1MjRkJykpIHJldHVybiAnYXVkaW8veC12b2MnO1xuICAgIGlmIChoZXguc3RhcnRzV2l0aCgnNjQ2NDZmNmMnKSkgcmV0dXJuICdhdWRpby92bmQuZG9sYnkuZGQtcmF3JztcblxuICAgIHJldHVybiBudWxsO1xufTtcblxuY29uc3QgaWRlbnRpZnlaaXBCYXNlZEZvcm1hdCA9IChkYXRhOiBVaW50OEFycmF5KTogTWltZVR5cGUgPT4ge1xuXHR0cnkge1xuXHRcdGNvbnN0IGZpbGVFbnRyaWVzID0gZXh0cmFjdFppcEZpbGVMaXN0KGRhdGEpO1xuXG5cdFx0Ly8gQ2hyb21lIGV4dGVuc2lvblxuXHRcdGlmIChmaWxlRW50cmllcy5pbmNsdWRlcygnbWFuaWZlc3QuanNvbicpKSB7XG5cdFx0XHRyZXR1cm4gJ2FwcGxpY2F0aW9uL3gtZ29vZ2xlLWNocm9tZS1leHRlbnNpb24nO1xuXHRcdH1cblxuXHRcdC8vIEVQVUJcblx0XHRpZiAoZmlsZUVudHJpZXMuaW5jbHVkZXMoJ01FVEEtSU5GL2NvbnRhaW5lci54bWwnKSB8fCBmaWxlRW50cmllcy5pbmNsdWRlcygnbWltZXR5cGUnKSkge1xuXHRcdFx0cmV0dXJuICdhcHBsaWNhdGlvbi9lcHViK3ppcCc7XG5cdFx0fVxuXG5cdFx0Ly8gT3BlbkRvY3VtZW50IGZvcm1hdHNcblx0XHRpZiAoZmlsZUVudHJpZXMuaW5jbHVkZXMoJ01FVEEtSU5GL21hbmlmZXN0LnhtbCcpKSB7XG5cdFx0XHRpZiAoZmlsZUVudHJpZXMuc29tZShmID0+IGYuZW5kc1dpdGgoJy5vZHAnKSkpIHJldHVybiAnYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5wcmVzZW50YXRpb24nO1xuXHRcdFx0aWYgKGZpbGVFbnRyaWVzLnNvbWUoZiA9PiBmLmVuZHNXaXRoKCcub2RzJykpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQnO1xuXHRcdFx0aWYgKGZpbGVFbnRyaWVzLnNvbWUoZiA9PiBmLmVuZHNXaXRoKCcub2R0JykpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQudGV4dCc7XG5cdFx0fVxuXG5cdFx0Ly8gTWljcm9zb2Z0IE9mZmljZSBmb3JtYXRzXG5cdFx0aWYgKGZpbGVFbnRyaWVzLmluY2x1ZGVzKCdbQ29udGVudF9UeXBlc10ueG1sJykpIHtcblx0XHRcdGlmIChmaWxlRW50cmllcy5pbmNsdWRlcygncHB0L3ByZXNlbnRhdGlvbi54bWwnKSkgcmV0dXJuICdhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uJztcblx0XHRcdGlmIChmaWxlRW50cmllcy5pbmNsdWRlcygneGwvd29ya2Jvb2sueG1sJykpIHJldHVybiAnYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQnO1xuXHRcdFx0aWYgKGZpbGVFbnRyaWVzLmluY2x1ZGVzKCd3b3JkL2RvY3VtZW50LnhtbCcpKSByZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmRvY3VtZW50Jztcblx0XHR9XG5cblx0XHQvLyBEZWZhdWx0IHRvIGdlbmVyaWMgWklQXG5cdFx0cmV0dXJuICdhcHBsaWNhdGlvbi96aXAnO1xuXG5cdH0gY2F0Y2gge1xuXHRcdHJldHVybiAnYXBwbGljYXRpb24vemlwJztcblx0fVxufTtcblxuY29uc3QgZXh0cmFjdFppcEZpbGVMaXN0ID0gKGRhdGE6IFVpbnQ4QXJyYXkpOiBzdHJpbmdbXSA9PiB7XG5cdC8vIFNpbXBsaWZpZWQgWklQIHBhcnNpbmcgLSBsb29rcyBmb3IgY2VudHJhbCBkaXJlY3RvcnkgZW50cmllc1xuXHRjb25zdCBmaWxlczogc3RyaW5nW10gPSBbXTtcblx0bGV0IG9mZnNldCA9IDA7XG5cblx0d2hpbGUgKG9mZnNldCA8IGRhdGEubGVuZ3RoIC0gNCkge1xuXHRcdC8vIExvb2sgZm9yIGxvY2FsIGZpbGUgaGVhZGVyIHNpZ25hdHVyZSAoMHgwNDAzNGI1MClcblx0XHRpZiAoZGF0YVtvZmZzZXRdID09PSAweDUwICYmIGRhdGFbb2Zmc2V0ICsgMV0gPT09IDB4NGIgJiZcblx0XHRcdGRhdGFbb2Zmc2V0ICsgMl0gPT09IDB4MDMgJiYgZGF0YVtvZmZzZXQgKyAzXSA9PT0gMHgwNCkge1xuXG5cdFx0XHRjb25zdCBmaWxlbmFtZUxlbmd0aCA9IGRhdGFbb2Zmc2V0ICsgMjZdIHwgKGRhdGFbb2Zmc2V0ICsgMjddIDw8IDgpO1xuXHRcdFx0Y29uc3QgZXh0cmFGaWVsZExlbmd0aCA9IGRhdGFbb2Zmc2V0ICsgMjhdIHwgKGRhdGFbb2Zmc2V0ICsgMjldIDw8IDgpO1xuXG5cdFx0XHRpZiAoZmlsZW5hbWVMZW5ndGggPiAwICYmIG9mZnNldCArIDMwICsgZmlsZW5hbWVMZW5ndGggPD0gZGF0YS5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgZmlsZW5hbWUgPSBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoZGF0YS5zbGljZShvZmZzZXQgKyAzMCwgb2Zmc2V0ICsgMzAgKyBmaWxlbmFtZUxlbmd0aCkpO1xuXHRcdFx0XHRmaWxlcy5wdXNoKGZpbGVuYW1lKTtcblx0XHRcdH1cblxuXHRcdFx0b2Zmc2V0ICs9IDMwICsgZmlsZW5hbWVMZW5ndGggKyBleHRyYUZpZWxkTGVuZ3RoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvZmZzZXQrKztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZmlsZXM7XG59O1xuXG5jb25zdCB1aW50OEFycmF5VG9IZXhTdHJpbmcgPSAodWludDhBcnJheSk6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5tYXAuY2FsbCh1aW50OEFycmF5LCAoYnl0ZSkgPT4gKCcwMCcgKyBieXRlLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTIpKS5qb2luKCcnKTtcbn07XG5cbmNvbnN0IGlkZW50aWZ5QXNmRm9ybWF0ID0gKGRhdGE6IFVpbnQ4QXJyYXkpOiBNaW1lVHlwZSA9PiB7XG5cdC8vIEFTRiBmaWxlcyBhbGwgc3RhcnQgd2l0aCB0aGUgc2FtZSBHVUlEOiAzMDI2YjI3NThlNjZjZjExYTZkOTAwYWEwMDYyY2U2Y1xuXHQvLyBUbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIGF1ZGlvLCB2aWRlbywgYW5kIGFwcGxpY2F0aW9uIEFTRiwgd2UgbmVlZCB0byBleGFtaW5lXG5cdC8vIHRoZSBzdHJlYW0gcHJvcGVydGllcyBpbiB0aGUgQVNGIGhlYWRlclxuXG5cdHRyeSB7XG5cdFx0Ly8gTG9vayBmb3Igc3RyZWFtIHByb3BlcnRpZXMgb2JqZWN0IEdVSUQgc3RhcnRpbmcgYXQgb2Zmc2V0IDMwXG5cdFx0Ly8gQXVkaW8gc3RyZWFtIHByb3BlcnRpZXM6IGI3ZGMwNzkxYTliNzExY2Y4ZWU2MDBjMDBjMjA1MzY1XG5cdFx0Ly8gVmlkZW8gc3RyZWFtIHByb3BlcnRpZXM6IGJjMTllZmMwNWI0ZDExY2Y5YjExMDBhYTAwYmJjYjhiXG5cblx0XHRpZiAoZGF0YS5sZW5ndGggPCAxMDApIHtcblx0XHRcdC8vIE5vdCBlbm91Z2ggZGF0YSB0byBhbmFseXplLCBkZWZhdWx0IHRvIGFwcGxpY2F0aW9uXG5cdFx0XHRyZXR1cm4gJ2FwcGxpY2F0aW9uL3ZuZC5tcy1hc2YnO1xuXHRcdH1cblxuXHRcdGNvbnN0IGhleCA9IHVpbnQ4QXJyYXlUb0hleFN0cmluZyhkYXRhKTtcblxuXHRcdC8vIExvb2sgZm9yIHZpZGVvIHN0cmVhbSBwcm9wZXJ0aWVzIEdVSUQgKGluZGljYXRlcyB2aWRlbyBjb250ZW50KVxuXHRcdGlmIChoZXguaW5jbHVkZXMoJ2JjMTllZmMwNWI0ZDExY2Y5YjExMDBhYTAwYmJjYjhiJykpIHtcblx0XHRcdHJldHVybiAndmlkZW8veC1tcy1hc2YnO1xuXHRcdH1cblxuXHRcdC8vIExvb2sgZm9yIGF1ZGlvIHN0cmVhbSBwcm9wZXJ0aWVzIEdVSUQgKGluZGljYXRlcyBhdWRpbyBjb250ZW50KVxuXHRcdGlmIChoZXguaW5jbHVkZXMoJ2I3ZGMwNzkxYTliNzExY2Y4ZWU2MDBjMDBjMjA1MzY1JykpIHtcblx0XHRcdHJldHVybiAnYXVkaW8veC1tcy1hc2YnO1xuXHRcdH1cblxuXHRcdC8vIENoZWNrIGZvciBXaW5kb3dzIE1lZGlhIEF1ZGlvL1ZpZGVvIGNvZGVjIGlkZW50aWZpZXJzXG5cdFx0Ly8gV01BIGNvZGVjOiAxNjEgKDB4YTEpIG9yIDE2MiAoMHhhMikgb3IgMTYzICgweGEzKVxuXHRcdC8vIFdNViBjb2RlYzogQ29tbW9uIHZhbHVlcyBpbmNsdWRlIHZhcmlvdXMgV2luZG93cyBNZWRpYSBWaWRlbyBpZGVudGlmaWVyc1xuXG5cdFx0Ly8gU2NhbiB0aHJvdWdoIHRoZSBoZWFkZXIgZm9yIGNvZGVjIGluZm9ybWF0aW9uXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1pbihkYXRhLmxlbmd0aCAtIDQsIDEwMDApOyBpKyspIHtcblx0XHRcdC8vIExvb2sgZm9yIGF1ZGlvIGNvZGVjIGluZGljYXRvcnNcblx0XHRcdGlmIChkYXRhW2ldID09PSAweGExIHx8IGRhdGFbaV0gPT09IDB4YTIgfHwgZGF0YVtpXSA9PT0gMHhhMykge1xuXHRcdFx0XHQvLyBGb3VuZCBXTUEgY29kZWMgaW5kaWNhdG9yXG5cdFx0XHRcdHJldHVybiAnYXVkaW8veC1tcy1hc2YnO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIExvb2sgZm9yIGNvbW1vbiB2aWRlbyBpbmRpY2F0b3JzIGluIHRoZSBmaXJzdCAxS0Jcblx0XHRjb25zdCB0ZXh0Q29udGVudCA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGZhdGFsOiBmYWxzZSB9KS5kZWNvZGUoZGF0YS5zbGljZSgwLCBNYXRoLm1pbigxMDAwLCBkYXRhLmxlbmd0aCkpKTtcblxuXHRcdC8vIENoZWNrIGZvciB2aWRlby1yZWxhdGVkIHN0cmluZ3Ncblx0XHRpZiAodGV4dENvbnRlbnQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygndmlkZW8nKSB8fFxuXHRcdCAgICB0ZXh0Q29udGVudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd3bXYnKSB8fFxuXHRcdCAgICB0ZXh0Q29udGVudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdtcGVnJykpIHtcblx0XHRcdHJldHVybiAndmlkZW8veC1tcy1hc2YnO1xuXHRcdH1cblxuXHRcdC8vIENoZWNrIGZvciBhdWRpby1yZWxhdGVkIHN0cmluZ3Ncblx0XHRpZiAodGV4dENvbnRlbnQudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnYXVkaW8nKSB8fFxuXHRcdCAgICB0ZXh0Q29udGVudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCd3bWEnKSB8fFxuXHRcdCAgICB0ZXh0Q29udGVudC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKCdtdXNpYycpKSB7XG5cdFx0XHRyZXR1cm4gJ2F1ZGlvL3gtbXMtYXNmJztcblx0XHR9XG5cblx0XHQvLyBEZWZhdWx0IHRvIGFwcGxpY2F0aW9uL3ZuZC5tcy1hc2YgaWYgd2UgY2FuJ3QgZGV0ZXJtaW5lIHRoZSBzcGVjaWZpYyB0eXBlXG5cdFx0cmV0dXJuICdhcHBsaWNhdGlvbi92bmQubXMtYXNmJztcblxuXHR9IGNhdGNoIHtcblx0XHQvLyBJZiBhbnkgZXJyb3Igb2NjdXJzIGR1cmluZyBhbmFseXNpcywgZGVmYXVsdCB0byBhcHBsaWNhdGlvbiB0eXBlXG5cdFx0cmV0dXJuICdhcHBsaWNhdGlvbi92bmQubXMtYXNmJztcblx0fVxufTtcblxuY29uc3QgaWRlbnRpZnlIZWlmRm9ybWF0ID0gKGRhdGE6IFVpbnQ4QXJyYXkpOiBNaW1lVHlwZSA9PiB7XG5cdC8vIEhFSUYvSEVJQyBmaWxlcyBhbGwgc3RhcnQgd2l0aCB0aGUgc2FtZSBmdHlwIGJveCBzaWduYXR1cmU6IDY2NzQ3OTcwNjE3NFxuXHQvLyBUbyBkaXN0aW5ndWlzaCBiZXR3ZWVuIGZvcm1hdHMsIHdlIG5lZWQgdG8gZXhhbWluZSB0aGUgYnJhbmQgYW5kIGNvbXBhdGlibGUgYnJhbmRzXG5cdC8vIGluIHRoZSBmdHlwIChmaWxlIHR5cGUpIGJveFxuXG5cdHRyeSB7XG5cdFx0aWYgKGRhdGEubGVuZ3RoIDwgMjApIHtcblx0XHRcdC8vIE5vdCBlbm91Z2ggZGF0YSB0byBhbmFseXplLCBkZWZhdWx0IHRvIEhFSUZcblx0XHRcdHJldHVybiAnaW1hZ2UvaGVpZic7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaGV4ID0gdWludDhBcnJheVRvSGV4U3RyaW5nKGRhdGEpO1xuXG5cdFx0Ly8gVGhlIGZ0eXAgYm94IHN0cnVjdHVyZTpcblx0XHQvLyBCeXRlcyAwLTM6IEJveCBzaXplICg0IGJ5dGVzKVxuXHRcdC8vIEJ5dGVzIDQtNzogQm94IHR5cGUgXCJmdHlwXCIgKDQgYnl0ZXMpIC0gNjY3NDc5NzA2MTc0XG5cdFx0Ly8gQnl0ZXMgOC0xMTogTWFqb3IgYnJhbmQgKDQgYnl0ZXMpXG5cdFx0Ly8gQnl0ZXMgMTItMTU6IE1pbm9yIHZlcnNpb24gKDQgYnl0ZXMpXG5cdFx0Ly8gQnl0ZXMgMTYrOiBDb21wYXRpYmxlIGJyYW5kcyAoNCBieXRlcyBlYWNoKVxuXG5cdFx0Ly8gRXh0cmFjdCBtYWpvciBicmFuZCAoNCBieXRlcyBzdGFydGluZyBhdCBvZmZzZXQgOClcblx0XHQvLyBDb252ZXJ0IHRvIEFTQ0lJIHN0cmluZyBmb3IgZWFzaWVyIGNvbXBhcmlzb25cblx0XHRjb25zdCBtYWpvckJyYW5kID0gU3RyaW5nLmZyb21DaGFyQ29kZShcblx0XHRcdGRhdGFbOF0sIGRhdGFbOV0sIGRhdGFbMTBdLCBkYXRhWzExXSxcblx0XHQpO1xuXG5cdFx0Ly8gTG9vayBmb3IgY29tcGF0aWJsZSBicmFuZHMgaW4gdGhlIGZpcnN0IDEwMCBieXRlc1xuXHRcdGNvbnN0IGNvbXBhdGlibGVCcmFuZHNIZXggPSBoZXguc3Vic3RyaW5nKDMyLCBNYXRoLm1pbigyMDAsIGhleC5sZW5ndGgpKTsgLy8gU3RhcnQgYWZ0ZXIgbWFqb3IgYnJhbmQgKyBtaW5vciB2ZXJzaW9uXG5cblx0XHQvLyBIRUlDIGJyYW5kczogJ2hlaWMnLCAnaGVpeCcsICdoZXZjJywgJ2hldngnXG5cdFx0aWYgKG1ham9yQnJhbmQgPT09ICdoZWljJyB8fFxuXHRcdCAgICBjb21wYXRpYmxlQnJhbmRzSGV4LmluY2x1ZGVzKCc2ODY1Njk2MycpIHx8IC8vICdoZWljJ1xuXHRcdCAgICBjb21wYXRpYmxlQnJhbmRzSGV4LmluY2x1ZGVzKCc2ODY1Njk3OCcpIHx8IC8vICdoZWl4J1xuXHRcdCAgICBjb21wYXRpYmxlQnJhbmRzSGV4LmluY2x1ZGVzKCc2ODY1NzY2MycpIHx8IC8vICdoZXZjJ1xuXHRcdCAgICBjb21wYXRpYmxlQnJhbmRzSGV4LmluY2x1ZGVzKCc2ODY1NzY3OCcpKSB7IC8vICdoZXZ4J1xuXG5cdFx0XHQvLyBDaGVjayBmb3Igc2VxdWVuY2UvYW5pbWF0aW9uIGluZGljYXRvcnNcblx0XHRcdGlmIChjb21wYXRpYmxlQnJhbmRzSGV4LmluY2x1ZGVzKCc2ODY1NzY3MycpIHx8IC8vICdoZXZzJyAtIEhFSUMgc2VxdWVuY2Vcblx0XHRcdCAgICBjb21wYXRpYmxlQnJhbmRzSGV4LmluY2x1ZGVzKCc2ZDczNjYzMScpIHx8IC8vICdtc2YxJyAtIHNlcXVlbmNlXG5cdFx0XHQgICAgbWFqb3JCcmFuZCA9PT0gJ2hldnMnKSB7XG5cdFx0XHRcdHJldHVybiAnaW1hZ2UvaGVpYy1zZXF1ZW5jZSc7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAnaW1hZ2UvaGVpYyc7XG5cdFx0fVxuXG5cdFx0Ly8gSEVJRiBicmFuZHM6ICdtaWYxJywgJ21zZjEnXG5cdFx0aWYgKG1ham9yQnJhbmQgPT09ICdtaWYxJyB8fCBtYWpvckJyYW5kID09PSAnbXNmMScgfHxcblx0XHQgICAgY29tcGF0aWJsZUJyYW5kc0hleC5pbmNsdWRlcygnNmQ2OTY2MzEnKSB8fCAvLyAnbWlmMSdcblx0XHQgICAgY29tcGF0aWJsZUJyYW5kc0hleC5pbmNsdWRlcygnNmQ3MzY2MzEnKSkgeyAvLyAnbXNmMSdcblxuXHRcdFx0Ly8gQ2hlY2sgZm9yIHNlcXVlbmNlL2FuaW1hdGlvbiBpbmRpY2F0b3JzXG5cdFx0XHRpZiAobWFqb3JCcmFuZCA9PT0gJ21zZjEnIHx8XG5cdFx0XHQgICAgY29tcGF0aWJsZUJyYW5kc0hleC5pbmNsdWRlcygnNmQ3MzY2MzEnKSkgeyAvLyAnbXNmMScgLSBzZXF1ZW5jZVxuXHRcdFx0XHRyZXR1cm4gJ2ltYWdlL2hlaWYtc2VxdWVuY2UnO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gJ2ltYWdlL2hlaWYnO1xuXHRcdH1cblxuXHRcdC8vIENoZWNrIGZvciBzcGVjaWZpYyBzZXF1ZW5jZSBpbmRpY2F0b3JzIGluIHRoZSBkYXRhXG5cdFx0aWYgKGhleC5pbmNsdWRlcygnNmQ3MzY2MzEnKSB8fCAvLyAnbXNmMScgLSBtdWx0aS1pbWFnZSBzZXF1ZW5jZVxuXHRcdCAgICBoZXguaW5jbHVkZXMoJzY4NjU3NjczJykpIHsgLy8gJ2hldnMnIC0gSEVJQyBzZXF1ZW5jZVxuXG5cdFx0XHQvLyBJZiB3ZSBmaW5kIEhFSUMtcmVsYXRlZCBicmFuZHMsIGl0J3MgSEVJQyBzZXF1ZW5jZVxuXHRcdFx0aWYgKGhleC5pbmNsdWRlcygnNjg2NTY5NjMnKSB8fCBoZXguaW5jbHVkZXMoJzY4NjU3NjYzJykpIHtcblx0XHRcdFx0cmV0dXJuICdpbWFnZS9oZWljLXNlcXVlbmNlJztcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICdpbWFnZS9oZWlmLXNlcXVlbmNlJztcblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBmaW5kIEhFSUMgaW5kaWNhdG9ycyBidXQgbm8gc2VxdWVuY2UsIGl0J3Mgc2luZ2xlIEhFSUNcblx0XHRpZiAoaGV4LmluY2x1ZGVzKCc2ODY1Njk2MycpIHx8IC8vICdoZWljJ1xuXHRcdCAgICBoZXguaW5jbHVkZXMoJzY4NjU3NjYzJykgfHwgLy8gJ2hldmMnXG5cdFx0ICAgIGhleC5pbmNsdWRlcygnNjg2NTY5NzgnKSB8fCAvLyAnaGVpeCdcblx0XHQgICAgaGV4LmluY2x1ZGVzKCc2ODY1NzY3OCcpKSB7IC8vICdoZXZ4J1xuXHRcdFx0cmV0dXJuICdpbWFnZS9oZWljJztcblx0XHR9XG5cblx0XHQvLyBEZWZhdWx0IHRvIEhFSUYgZm9yIGFueSBvdGhlciBjYXNlXG5cdFx0cmV0dXJuICdpbWFnZS9oZWlmJztcblxuXHR9IGNhdGNoIHtcblx0XHQvLyBJZiBhbnkgZXJyb3Igb2NjdXJzIGR1cmluZyBhbmFseXNpcywgZGVmYXVsdCB0byBIRUlGXG5cdFx0cmV0dXJuICdpbWFnZS9oZWlmJztcblx0fVxufTtcblxuY29uc3QgaWRlbnRpZnlPZ2dGb3JtYXQgPSAoZGF0YTogVWludDhBcnJheSk6IE1pbWVUeXBlID0+IHtcblx0Ly8gT0dHIGZpbGVzIGFsbCBzdGFydCB3aXRoIFwiT2dnU1wiICg0ZjY3Njc1MykgYnV0IGNhbiBjb250YWluIGRpZmZlcmVudCBjb2RlY3Ncblx0Ly8gVG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBhdWRpbywgdmlkZW8sIGFuZCBhcHBsaWNhdGlvbiBPR0csIHdlIG5lZWQgdG8gZXhhbWluZVxuXHQvLyB0aGUgY29kZWMgaW5mb3JtYXRpb24gaW4gdGhlIE9HRyBwYWdlIGhlYWRlcnNcblxuXHR0cnkge1xuXHRcdGlmIChkYXRhLmxlbmd0aCA8IDY0KSB7XG5cdFx0XHQvLyBOb3QgZW5vdWdoIGRhdGEgdG8gYW5hbHl6ZSwgZGVmYXVsdCB0byBhdWRpb1xuXHRcdFx0cmV0dXJuICdhdWRpby9vZ2cnO1xuXHRcdH1cblxuXHRcdGNvbnN0IGhleCA9IHVpbnQ4QXJyYXlUb0hleFN0cmluZyhkYXRhKTtcblxuXHRcdC8vIExvb2sgZm9yIGNvZGVjIGlkZW50aWZpY2F0aW9uIHBhdHRlcm5zIGluIHRoZSBmaXJzdCBmZXcgaHVuZHJlZCBieXRlc1xuXHRcdC8vIENvbW1vbiB2aWRlbyBjb2RlY3MgaW4gT0dHOlxuXHRcdC8vIC0gVGhlb3JhOiBcInRoZW9yYVwiIG9yIFwiXFx4ODB0aGVvcmFcIlxuXHRcdC8vIC0gVlA4L1ZQOTogdmFyaW91cyBzaWduYXR1cmVzXG5cdFx0Ly8gLSBEaXJhYzogXCJCQkNEXCJcblxuXHRcdC8vIENvbW1vbiBhdWRpbyBjb2RlY3MgaW4gT0dHOlxuXHRcdC8vIC0gVm9yYmlzOiBcInZvcmJpc1wiIG9yIFwiXFx4MDF2b3JiaXNcIlxuXHRcdC8vIC0gT3B1czogXCJPcHVzSGVhZFwiXG5cdFx0Ly8gLSBGTEFDOiBcImZMYUNcIlxuXHRcdC8vIC0gU3BlZXg6IFwiU3BlZXhcIlxuXG5cdFx0Ly8gQ29udmVydCBzb21lIGJ5dGVzIHRvIHRleHQgZm9yIHN0cmluZyBtYXRjaGluZ1xuXHRcdGNvbnN0IHRleHRDb250ZW50ID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcsIHsgZmF0YWw6IGZhbHNlIH0pLmRlY29kZShkYXRhLnNsaWNlKDAsIE1hdGgubWluKDUxMiwgZGF0YS5sZW5ndGgpKSk7XG5cdFx0Y29uc3QgbG93ZXJDb250ZW50ID0gdGV4dENvbnRlbnQudG9Mb3dlckNhc2UoKTtcblxuXHRcdC8vIENoZWNrIGZvciB2aWRlbyBjb2RlYyBpbmRpY2F0b3JzIGZpcnN0IChhcyB0aGV5J3JlIG1vcmUgc3BlY2lmaWMpXG5cdFx0aWYgKGxvd2VyQ29udGVudC5pbmNsdWRlcygndGhlb3JhJykgfHxcblx0XHQgICAgaGV4LmluY2x1ZGVzKCc4MDc0Njg2ZjcyNjEyMCcpIHx8IC8vIFwiXFx4ODB0aGVvcmEgXCJcblx0XHQgICAgaGV4LmluY2x1ZGVzKCc3NDY4NjU2ZjcyNjEnKSB8fCAgIC8vIFwidGhlb3JhXCJcblx0XHQgICAgbG93ZXJDb250ZW50LmluY2x1ZGVzKCdkaXJhYycpIHx8XG5cdFx0ICAgIGhleC5pbmNsdWRlcygnNDI0MjQzNDQnKSB8fCAgICAgICAvLyBcIkJCQ0RcIiAtIERpcmFjXG5cdFx0ICAgIGxvd2VyQ29udGVudC5pbmNsdWRlcygndnA4JykgfHxcblx0XHQgICAgbG93ZXJDb250ZW50LmluY2x1ZGVzKCd2cDknKSkge1xuXHRcdFx0cmV0dXJuICd2aWRlby9vZ2cnO1xuXHRcdH1cblxuXHRcdC8vIENoZWNrIGZvciBhdWRpbyBjb2RlYyBpbmRpY2F0b3JzXG5cdFx0aWYgKGxvd2VyQ29udGVudC5pbmNsdWRlcygndm9yYmlzJykgfHxcblx0XHQgICAgaGV4LmluY2x1ZGVzKCcwMTc2NmY3MjYyNjk3MycpIHx8IC8vIFwiXFx4MDF2b3JiaXNcIlxuXHRcdCAgICBoZXguaW5jbHVkZXMoJzc2NmY3MjYyNjk3MycpIHx8ICAgLy8gXCJ2b3JiaXNcIlxuXHRcdCAgICBsb3dlckNvbnRlbnQuaW5jbHVkZXMoJ29wdXNoZWFkJykgfHxcblx0XHQgICAgaGV4LmluY2x1ZGVzKCc0ZjcwNzU3MzQ4NjU2MTY0MjAnKSB8fCAvLyBcIk9wdXNIZWFkIFwiXG5cdFx0ICAgIGxvd2VyQ29udGVudC5pbmNsdWRlcygnc3BlZXgnKSB8fFxuXHRcdCAgICBoZXguaW5jbHVkZXMoJzUzNzA2NTY1NzgyMDIwJykgfHwgLy8gXCJTcGVleCAgXCJcblx0XHQgICAgbG93ZXJDb250ZW50LmluY2x1ZGVzKCdmbGFjJykgfHxcblx0XHQgICAgaGV4LmluY2x1ZGVzKCc2NjRjNjE0MycpKSB7ICAgICAgLy8gXCJmTGFDXCJcblx0XHRcdHJldHVybiAnYXVkaW8vb2dnJztcblx0XHR9XG5cblx0XHQvLyBMb29rIGZvciBPR0cgc3RyZWFtIHN0cnVjdHVyZSBwYXR0ZXJuc1xuXHRcdC8vIE9HRyBwYWdlcyBoYXZlIGEgc3BlY2lmaWMgc3RydWN0dXJlLCBsb29rIGZvciBtdWx0aXBsZSBcIk9nZ1NcIiBzaWduYXR1cmVzXG5cdFx0Ly8gd2hpY2ggbWlnaHQgaW5kaWNhdGUgYSBjb21wbGV4IG11bHRpbWVkaWEgY29udGFpbmVyXG5cdFx0bGV0IG9nZ1NDb3VudCA9IDA7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBNYXRoLm1pbihkYXRhLmxlbmd0aCAtIDQsIDEwMDApOyBpICs9IDQpIHtcblx0XHRcdGlmIChkYXRhW2ldID09PSAweDRmICYmIGRhdGFbaSArIDFdID09PSAweDY3ICYmXG5cdFx0XHQgICAgZGF0YVtpICsgMl0gPT09IDB4NjcgJiYgZGF0YVtpICsgM10gPT09IDB4NTMpIHtcblx0XHRcdFx0b2dnU0NvdW50Kys7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgT0dHIHBhZ2VzIG1pZ2h0IGluZGljYXRlIGEgbW9yZSBjb21wbGV4IGFwcGxpY2F0aW9uIGZvcm1hdFxuXHRcdGlmIChvZ2dTQ291bnQgPiAzKSB7XG5cdFx0XHQvLyBDaGVjayBpZiBpdCdzIGxpa2VseSBhIG11bHRpbWVkaWEgY29udGFpbmVyIHZzIHB1cmUgYXVkaW8vdmlkZW9cblx0XHRcdGlmIChsb3dlckNvbnRlbnQuaW5jbHVkZXMoJ2FwcGxpY2F0aW9uJykgfHxcblx0XHRcdCAgICBsb3dlckNvbnRlbnQuaW5jbHVkZXMoJ21ldGFkYXRhJykgfHxcblx0XHRcdCAgICBsb3dlckNvbnRlbnQuaW5jbHVkZXMoJ2luZGV4JykgfHxcblx0XHRcdCAgICAoIWxvd2VyQ29udGVudC5pbmNsdWRlcygnYXVkaW8nKSAmJiAhbG93ZXJDb250ZW50LmluY2x1ZGVzKCd2aWRlbycpICYmXG5cdFx0XHQgICAgICFsb3dlckNvbnRlbnQuaW5jbHVkZXMoJ3ZvcmJpcycpICYmICFsb3dlckNvbnRlbnQuaW5jbHVkZXMoJ3RoZW9yYScpKSkge1xuXHRcdFx0XHRyZXR1cm4gJ2FwcGxpY2F0aW9uL29nZyc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTG9vayBmb3IgZmlsZSBleHRlbnNpb24gaGludHMgaW4gbWV0YWRhdGEgKGlmIHByZXNlbnQpXG5cdFx0aWYgKGxvd2VyQ29udGVudC5pbmNsdWRlcygnLm9ndicpIHx8IGxvd2VyQ29udGVudC5pbmNsdWRlcygndmlkZW8nKSkge1xuXHRcdFx0cmV0dXJuICd2aWRlby9vZ2cnO1xuXHRcdH1cblxuXHRcdGlmIChsb3dlckNvbnRlbnQuaW5jbHVkZXMoJy5vZ2EnKSB8fCBsb3dlckNvbnRlbnQuaW5jbHVkZXMoJ2F1ZGlvJykgfHwgbG93ZXJDb250ZW50LmluY2x1ZGVzKCdtdXNpYycpKSB7XG5cdFx0XHRyZXR1cm4gJ2F1ZGlvL29nZyc7XG5cdFx0fVxuXG5cdFx0Ly8gQ2hlY2sgdGhlIE9HRyBwYWdlIGhlYWRlciBmbGFnc1xuXHRcdC8vIEJ5dGUgNSBpbiBPR0cgcGFnZSBoZWFkZXIgY29udGFpbnMgZmxhZ3Ncblx0XHQvLyBJZiB3ZSBoYXZlIGVub3VnaCBkYXRhLCBjaGVjayB0aGUgc3RyZWFtIHR5cGVcblx0XHRpZiAoZGF0YS5sZW5ndGggPiAyNikge1xuXHRcdFx0Y29uc3QgcGFnZUhlYWRlclR5cGUgPSBkYXRhWzVdO1xuXHRcdFx0Ly8gRnJlc2ggcGFja2V0IHN0YXJ0ICgweDAyKSBvZnRlbiBpbmRpY2F0ZXMgYmVnaW5uaW5nIG9mIGNvZGVjIGRhdGFcblx0XHRcdGlmICgocGFnZUhlYWRlclR5cGUgJiAweDAyKSA9PT0gMHgwMikge1xuXHRcdFx0XHQvLyBMb29rIGF0IHRoZSBwYWNrZXQgZGF0YSBzdGFydGluZyBhcm91bmQgYnl0ZSAyN1xuXHRcdFx0XHRjb25zdCBwYWNrZXRTdGFydCA9IGRhdGEuc2xpY2UoMjcsIE1hdGgubWluKGRhdGEubGVuZ3RoLCA1MCkpO1xuXHRcdFx0XHRjb25zdCBwYWNrZXRIZXggPSB1aW50OEFycmF5VG9IZXhTdHJpbmcocGFja2V0U3RhcnQpO1xuXG5cdFx0XHRcdC8vIENoZWNrIGZvciBWb3JiaXMgaWRlbnRpZmljYXRpb24gaGVhZGVyXG5cdFx0XHRcdGlmIChwYWNrZXRIZXguc3RhcnRzV2l0aCgnMDE3NjZmNzI2MjY5NzMnKSkge1xuXHRcdFx0XHRcdHJldHVybiAnYXVkaW8vb2dnJztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENoZWNrIGZvciBUaGVvcmEgaWRlbnRpZmljYXRpb24gaGVhZGVyXG5cdFx0XHRcdGlmIChwYWNrZXRIZXguc3RhcnRzV2l0aCgnODA3NDY4NmY3MjYxMjAnKSkge1xuXHRcdFx0XHRcdHJldHVybiAndmlkZW8vb2dnJztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIERlZmF1bHQgdG8gYXVkaW8vb2dnIGFzIGl0J3MgdGhlIG1vc3QgY29tbW9uIE9HRyBmb3JtYXRcblx0XHRyZXR1cm4gJ2F1ZGlvL29nZyc7XG5cblx0fSBjYXRjaCB7XG5cdFx0Ly8gSWYgYW55IGVycm9yIG9jY3VycyBkdXJpbmcgYW5hbHlzaXMsIGRlZmF1bHQgdG8gYXVkaW9cblx0XHRyZXR1cm4gJ2F1ZGlvL29nZyc7XG5cdH1cbn07XG4iXX0=