@tricoteuses/assemblee 1.9.7 → 1.9.8

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 (170) hide show
  1. package/lib/api.js +1 -1
  2. package/lib/api.mjs +1 -1
  3. package/lib/bugs/acteur-00010/plugin.test.js +5 -5
  4. package/lib/bugs/acteur-00010/plugin.test.mjs +1 -1
  5. package/lib/bugs/acteur-00010.js +18 -17
  6. package/lib/bugs/acteur-00010.mjs +1 -1
  7. package/lib/bugs/agenda-00002/plugin.test.js +6 -6
  8. package/lib/bugs/agenda-00002/plugin.test.mjs +1 -1
  9. package/lib/bugs/agenda-00002.js +32 -31
  10. package/lib/bugs/agenda-00002.mjs +3 -3
  11. package/lib/bugs/agenda-00008/plugin.test.js +5 -5
  12. package/lib/bugs/agenda-00008/plugin.test.mjs +1 -1
  13. package/lib/bugs/agenda-00008.js +18 -17
  14. package/lib/bugs/agenda-00008.mjs +1 -1
  15. package/lib/bugs/agenda-00011/plugin.test.js +10 -10
  16. package/lib/bugs/agenda-00011/plugin.test.mjs +1 -1
  17. package/lib/bugs/agenda-00011.js +29 -28
  18. package/lib/bugs/agenda-00011.mjs +3 -3
  19. package/lib/bugs.js +29 -27
  20. package/lib/bugs.mjs +3 -3
  21. package/lib/cleaners/actes_legislatifs.js +5 -5
  22. package/lib/cleaners/actes_legislatifs.mjs +1 -1
  23. package/lib/cleaners/acteurs.js +5 -5
  24. package/lib/cleaners/acteurs.mjs +1 -1
  25. package/lib/cleaners/amendements.js +5 -5
  26. package/lib/cleaners/amendements.mjs +1 -1
  27. package/lib/cleaners/debats.js +1 -1
  28. package/lib/cleaners/debats.mjs +1 -1
  29. package/lib/cleaners/documents.js +5 -5
  30. package/lib/cleaners/documents.mjs +1 -1
  31. package/lib/cleaners/dossiers_legislatifs.js +5 -5
  32. package/lib/cleaners/dossiers_legislatifs.mjs +1 -1
  33. package/lib/cleaners/index.js +1 -1
  34. package/lib/cleaners/index.mjs +1 -1
  35. package/lib/cleaners/organes.js +2 -2
  36. package/lib/cleaners/organes.mjs +1 -1
  37. package/lib/cleaners/questions.js +1 -1
  38. package/lib/cleaners/questions.mjs +1 -1
  39. package/lib/cleaners/reunions.js +5 -5
  40. package/lib/cleaners/reunions.mjs +1 -1
  41. package/lib/cleaners/scrutins.js +8 -8
  42. package/lib/cleaners/scrutins.mjs +1 -1
  43. package/lib/cleaners/textes_loi.js +1 -1
  44. package/lib/cleaners/textes_loi.mjs +1 -1
  45. package/lib/cleaners/xml.js +8 -8
  46. package/lib/cleaners/xml.mjs +1 -1
  47. package/lib/datasets.js +9 -9
  48. package/lib/datasets.mjs +1 -1
  49. package/lib/dates.js +4 -3
  50. package/lib/dates.mjs +1 -1
  51. package/lib/dossiers_legislatifs.js +8 -8
  52. package/lib/dossiers_legislatifs.mjs +1 -1
  53. package/lib/examples/PIONANR5L15B0020/input.js +1 -1
  54. package/lib/examples/PIONANR5L15B0020/input.mjs +1 -1
  55. package/lib/examples/PRJLANR5L16B0914/input.js +1 -1
  56. package/lib/examples/PRJLANR5L16B0914/input.mjs +1 -1
  57. package/lib/examples/PRJLANR5L16B2014/input.js +1 -1
  58. package/lib/examples/PRJLANR5L16B2014/input.mjs +1 -1
  59. package/lib/examples/PRJLANR5L16B2424/input.js +1 -1
  60. package/lib/examples/PRJLANR5L16B2424/input.mjs +1 -1
  61. package/lib/examples/PRJLANR5L16B2462/input.js +1 -1
  62. package/lib/examples/PRJLANR5L16B2462/input.mjs +1 -1
  63. package/lib/file_systems.js +14 -15
  64. package/lib/file_systems.mjs +3 -3
  65. package/lib/git.js +5 -5
  66. package/lib/git.mjs +1 -1
  67. package/lib/index.js +1 -1
  68. package/lib/index.mjs +1 -1
  69. package/lib/inserters.js +4 -4
  70. package/lib/inserters.mjs +1 -1
  71. package/lib/loaders.js +19 -19
  72. package/lib/loaders.mjs +1 -1
  73. package/lib/logger.js +1 -1
  74. package/lib/logger.mjs +1 -1
  75. package/lib/organes.js +1 -1
  76. package/lib/organes.mjs +1 -1
  77. package/lib/parsers/documents.js +11 -11
  78. package/lib/parsers/documents.mjs +1 -1
  79. package/lib/parsers/index.js +1 -1
  80. package/lib/parsers/index.mjs +1 -1
  81. package/lib/parsers/recherche_amendements.js +15 -17
  82. package/lib/parsers/recherche_amendements.mjs +1 -1
  83. package/lib/parsers/textes_lois.js +18 -18
  84. package/lib/parsers/textes_lois.mjs +1 -1
  85. package/lib/raw_types/acteurs_et_organes.js +9 -9
  86. package/lib/raw_types/acteurs_et_organes.mjs +1 -1
  87. package/lib/raw_types/agendas.js +9 -9
  88. package/lib/raw_types/agendas.mjs +1 -1
  89. package/lib/raw_types/amendements.js +9 -9
  90. package/lib/raw_types/amendements.mjs +1 -1
  91. package/lib/raw_types/debats.js +9 -9
  92. package/lib/raw_types/debats.mjs +1 -1
  93. package/lib/raw_types/dossiers_legislatifs.d.ts +1 -0
  94. package/lib/raw_types/dossiers_legislatifs.js +11 -10
  95. package/lib/raw_types/dossiers_legislatifs.mjs +3 -2
  96. package/lib/raw_types/questions.js +9 -9
  97. package/lib/raw_types/questions.mjs +1 -1
  98. package/lib/raw_types/scrutins.js +9 -9
  99. package/lib/raw_types/scrutins.mjs +1 -1
  100. package/lib/raw_types/textes_loi.js +9 -9
  101. package/lib/raw_types/textes_loi.mjs +1 -1
  102. package/lib/scripts/bugs_helper.js +26 -25
  103. package/lib/scripts/bugs_helper.mjs +3 -3
  104. package/lib/scripts/clean_reorganized_data.js +10 -9
  105. package/lib/scripts/clean_reorganized_data.mjs +1 -1
  106. package/lib/scripts/diff_amendements.js +8 -9
  107. package/lib/scripts/diff_amendements.mjs +1 -1
  108. package/lib/scripts/document_dossiers_legislatifs.js +27 -24
  109. package/lib/scripts/document_dossiers_legislatifs.mjs +3 -3
  110. package/lib/scripts/get_today_reunions.js +2 -3
  111. package/lib/scripts/get_today_reunions.mjs +1 -1
  112. package/lib/scripts/merge_scrutins.js +8 -9
  113. package/lib/scripts/merge_scrutins.mjs +1 -1
  114. package/lib/scripts/parse_textes_lois.js +5 -6
  115. package/lib/scripts/parse_textes_lois.mjs +1 -1
  116. package/lib/scripts/process_open_dataset.js +14 -15
  117. package/lib/scripts/process_open_dataset.mjs +1 -1
  118. package/lib/scripts/process_textes_loi_dataset.js +16 -17
  119. package/lib/scripts/process_textes_loi_dataset.mjs +1 -1
  120. package/lib/scripts/raw_types_from_amendements.js +12 -13
  121. package/lib/scripts/raw_types_from_amendements.mjs +1 -1
  122. package/lib/scripts/reorganize_data.js +14 -13
  123. package/lib/scripts/reorganize_data.mjs +1 -1
  124. package/lib/scripts/retrieve_deputes_photos.js +11 -12
  125. package/lib/scripts/retrieve_deputes_photos.mjs +1 -1
  126. package/lib/scripts/retrieve_documents.js +12 -13
  127. package/lib/scripts/retrieve_documents.mjs +1 -1
  128. package/lib/scripts/retrieve_open_data.js +12 -12
  129. package/lib/scripts/retrieve_open_data.mjs +1 -1
  130. package/lib/scripts/retrieve_pending_amendments.js +14 -14
  131. package/lib/scripts/retrieve_pending_amendments.mjs +1 -1
  132. package/lib/scripts/retrieve_senateurs_photos.js +10 -10
  133. package/lib/scripts/retrieve_senateurs_photos.mjs +1 -1
  134. package/lib/scripts/retrieve_textes_lois.js +15 -17
  135. package/lib/scripts/retrieve_textes_lois.mjs +1 -1
  136. package/lib/scripts/shared/cli_helpers.js +1 -1
  137. package/lib/scripts/shared/cli_helpers.mjs +1 -1
  138. package/lib/scripts/test_iter_load.js +5 -5
  139. package/lib/scripts/test_iter_load.mjs +1 -1
  140. package/lib/scripts/test_load.js +2 -2
  141. package/lib/scripts/test_load.mjs +1 -1
  142. package/lib/scripts/test_load_big_files.js +2 -2
  143. package/lib/scripts/test_load_big_files.mjs +1 -1
  144. package/lib/scripts/validate_json.js +18 -17
  145. package/lib/scripts/validate_json.mjs +3 -3
  146. package/lib/shared_types/codes_actes.js +1 -1
  147. package/lib/shared_types/codes_actes.mjs +1 -1
  148. package/lib/strings.js +1 -1
  149. package/lib/strings.mjs +1 -1
  150. package/lib/types/acteurs_et_organes.js +9 -9
  151. package/lib/types/acteurs_et_organes.mjs +1 -1
  152. package/lib/types/agendas.js +9 -9
  153. package/lib/types/agendas.mjs +1 -1
  154. package/lib/types/amendements.js +9 -9
  155. package/lib/types/amendements.mjs +1 -1
  156. package/lib/types/debats.js +9 -9
  157. package/lib/types/debats.mjs +1 -1
  158. package/lib/types/dossiers_legislatifs.js +9 -9
  159. package/lib/types/dossiers_legislatifs.mjs +1 -1
  160. package/lib/types/legislatures.js +1 -1
  161. package/lib/types/legislatures.mjs +1 -1
  162. package/lib/types/questions.js +9 -9
  163. package/lib/types/questions.mjs +1 -1
  164. package/lib/types/scrutins.js +9 -9
  165. package/lib/types/scrutins.mjs +1 -1
  166. package/lib/types/textes_loi.js +9 -9
  167. package/lib/types/textes_loi.mjs +1 -1
  168. package/lib/urls.js +2 -2
  169. package/lib/urls.mjs +1 -1
  170. package/package.json +3 -3
package/lib/loaders.mjs CHANGED
@@ -895,4 +895,4 @@ function pathFromUid(dataDir, uid, dataRegexp) {
895
895
  fs.ensureDirSync(numeroMilliersDir);
896
896
  return path.join(numeroMilliersDir, uid);
897
897
  }
898
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJmcyIsInBhdGgiLCJFbmFibGVkRGF0YXNldHMiLCJkYXRhc2V0cyIsIndhbGtEaXIiLCJDb252ZXJ0IiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJBZ2VuZGFzQ29udmVydCIsIkFtZW5kZW1lbnRzQ29udmVydCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwiTGVnaXNsYXR1cmUiLCJTY3J1dGluc0NvbnZlcnQiLCJRdWVzdGlvbnNDb252ZXJ0IiwiQ29tcHRlc1JlbmR1c0NvbnZlcnQiLCJUZXh0ZXNMb2lDb252ZXJ0IiwiZG9jdW1lbnRVaWRSZWdleCIsImRvc3NpZXJVaWRSZWdleCIsInJldW5pb25VaWRSZWdleCIsInNjcnV0aW5VaWRSZWdleCIsImNvbXB0ZVJlbmR1VWlkUmVnZXgiLCJxdWVzdGlvblVpZFJlZ2V4IiwiaXRlckxvYWRBc3NlbWJsZWVJdGVtcyIsImRhdGFEaXIiLCJsZWdpc2xhdHVyZSIsImNvbnZlcnRUb0l0ZW0iLCJzdWJmb2xkZXJOYW1lIiwiZmlsZUV4dGVuc2lvbiIsIm5vVmFsaWRhdGlvbiIsImxvZyIsIml0ZW1VaWQiLCJTZXQiLCJkYXRhc2V0IiwiaWdub3JlRm9yV2ViIiwidW5kZWZpbmVkIiwiQWxsIiwiZmlsZUV4dGVuc2lvblJlZ2V4IiwiUmVnRXhwIiwiZGF0YXNldERpciIsImpvaW4iLCJmaWxlbmFtZSIsInJlcGxhY2UiLCJpdGVtU3BsaXRQYXRoIiwiaXRlbUZpbGVuYW1lIiwibGVuZ3RoIiwiZW5kc1dpdGgiLCJpdGVtRmlsZVBhdGgiLCJjb25zb2xlIiwiaXRlbUpzb24iLCJyZWFkRmlsZVN5bmMiLCJlbmNvZGluZyIsIml0ZW0iLCJKU09OIiwicGFyc2UiLCJoYXMiLCJ1aWQiLCJhZGQiLCJkYXRhc2V0TGVnaXNsYXR1cmUiLCJpdGVyTG9hZEFzc2VtYmxlZUFjdGV1cnMiLCJvcHRpb25zIiwiYWN0ZXVyIiwiYWN0ZXVyc0V0T3JnYW5lcyIsInRvQWN0ZXVyIiwiaXRlckxvYWRBc3NlbWJsZWVPcmdhbmVzIiwib3JnYW5lIiwidG9PcmdhbmUiLCJpdGVyTG9hZEFzc2VtYmxlZUFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudCIsImFtZW5kZW1lbnRzIiwidG9BbWVuZGVtZW50IiwiaXRlckxvYWRBc3NlbWJsZWVEb2N1bWVudHMiLCJkb2N1bWVudCIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJ0b0RvY3VtZW50IiwiaXRlckxvYWRBc3NlbWJsZWVEb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwiZG9zc2llclBhcmxlbWVudGFpcmUiLCJ0b0Rvc3NpZXJQYXJsZW1lbnRhaXJlIiwiaXRlckxvYWRBc3NlbWJsZWVSZXVuaW9ucyIsInJldW5pb24iLCJhZ2VuZGFzIiwidG9SZXVuaW9uIiwiaXRlckxvYWRBc3NlbWJsZWVTY3J1dGlucyIsInNjcnV0aW4iLCJzY3J1dGlucyIsInRvU2NydXRpbiIsIml0ZXJMb2FkQXNzZW1ibGVlUXVlc3Rpb25zIiwicXVlc3Rpb24iLCJxdWVzdGlvbnMiLCJ0b1F1ZXN0aW9uIiwiaXRlckxvYWRBc3NlbWJsZWVDb21wdGVzUmVuZHVzIiwiY29tcHRlUmVuZHUiLCJjb21wdGVzUmVuZHVzU2VhbmNlcyIsInRvQ29tcHRlUmVuZHUiLCJpdGVyTG9hZEFzc2VtYmxlZVRleHRlTG9pIiwidGV4dGVMb2kiLCJ0ZXh0ZXNMb2kiLCJ0b1RleHRlc0xvaSIsImxvYWRBc3NlbWJsZWVEYXRhIiwiZW5hYmxlZERhdGFzZXRzIiwiYWN0ZXVyQnlVaWQiLCJvcmdhbmVCeVVpZCIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImFjdGV1ckZpbGVQYXRoIiwiYWN0ZXVySnNvbiIsIm9yZ2FuZVNwbGl0UGF0aCIsIm9yZ2FuZUZpbGVuYW1lIiwib3JnYW5lRmlsZVBhdGgiLCJvcmdhbmVKc29uIiwicmV1bmlvbkJ5VWlkIiwicmV1bmlvbnNCeURheSIsInJldW5pb25zQnlEb3NzaWVyVWlkIiwiQWdlbmRhcyIsInJldW5pb25TcGxpdFBhdGgiLCJyZXVuaW9uRmlsZW5hbWUiLCJyZXVuaW9uRmlsZVBhdGgiLCJyZXVuaW9uSnNvbiIsImRheSIsInRpbWVzdGFtcERlYnV0IiwidG9JU09TdHJpbmciLCJzcGxpdCIsInJldW5pb25zQXREYXkiLCJwdXNoIiwib2RqIiwicG9pbnRPZGoiLCJwb2ludHNPZGoiLCJkb3NzaWVyTGVnaXNsYXRpZlJlZiIsImRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIiwicmV1bmlvbnNBdERvc3NpZXJVaWQiLCJhbWVuZGVtZW50QnlVaWQiLCJBbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50RmlsZVBhdGgiLCJhbWVuZGVtZW50SnNvbiIsImRvY3VtZW50QnlVaWQiLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4iLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW4iLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkIiwiRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50RmlsZVBhdGgiLCJkb2N1bWVudEpzb24iLCJkb3NzaWVyU3BsaXRQYXRoIiwiZG9zc2llckZpbGVuYW1lIiwiZG9zc2llckZpbGVQYXRoIiwiZG9zc2llckpzb24iLCJkb3NzaWVyIiwidGl0cmVEb3NzaWVyIiwic2VuYXRDaGVtaW4iLCJ0aXRyZUNoZW1pbiIsInBob3RvQnlVaWQiLCJQaG90b3MiLCJqc29uRmlsZVBhdGgiLCJEaXhTZXB0IiwiZXhpc3RzU3luYyIsImpzb24iLCJPYmplY3QiLCJhc3NpZ24iLCJzY3J1dGluQnlVaWQiLCJTY3J1dGlucyIsInNjcnV0aW5TcGxpdFBhdGgiLCJzY3J1dGluRmlsZW5hbWUiLCJzY3J1dGluRmlsZVBhdGgiLCJzY3J1dGluSnNvbiIsInF1ZXN0aW9uQnlVaWQiLCJRdWVzdGlvbnMiLCJxdWVzdGlvblNwbGl0UGF0aCIsInF1ZXN0aW9uRmlsZW5hbWUiLCJxdWVzdGlvbkZpbGVQYXRoIiwicXVlc3Rpb25Kc29uIiwiY29tcHRlUmVuZHVCeVVpZCIsIkNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiY29tcHRlUmVuZHVQYXRoIiwiY29tcHRlUmVuZHVGaWxlbmFtZSIsImNvbXB0ZVJlbmR1RmlsZVBhdGgiLCJjb21wdGVSZW5kdUpzb24iLCJsb2FkQXNzZW1ibGVlRGF0YUZyb21CaWdGaWxlcyIsInRvQWN0ZXVyc0V0T3JnYW5lcyIsImFjdGV1cnMiLCJvcmdhbmVzIiwidG9BZ2VuZGFzIiwicmV1bmlvbnMiLCJ0b0FtZW5kZW1lbnRzIiwidGV4dGVMZWdpc2xhdGlmIiwidGV4dGVzTGVnaXNsYXRpZnMiLCJ0b0Rvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwidG9TY3J1dGlucyIsInRvUXVlc3Rpb25zIiwiY29tcHRlc1JlbmR1cyIsInRvQ29tcHRlc1JlbmR1cyIsImxvYWRBc3NlbWJsZWVEb2N1bWVudEZpbGUiLCJmb3JtYXRzIiwiZG9jdW1lbnRzRGlyIiwiZG9jdW1lbnREaXIiLCJwYXRoRnJvbURvY3VtZW50VWlkIiwiaW5kZXhQYXRoIiwicGF0aEV4aXN0c1N5bmMiLCJpbmRleCIsInJlYWRKc29uU3luYyIsImZvcm1hdCIsInVybCIsImxvYWRBc3NlbWJsZWVQaG90b3NEZXB1dGVzIiwibG9hZEFzc2VtYmxlZVBob3Rvc1NlbmF0ZXVycyIsIm1hdGNoIiwibm90U3RyaWN0RXF1YWwiLCJncm91cHMiLCJkb2N1bWVudFR5cGUiLCJkb2N1bWVudFR5cGUyIiwiY2hhbWJyZURpciIsImNoYW1icmUiLCJjaGFtYnJlMiIsInJlcHVibGlxdWVEaXIiLCJyZXB1YmxpcXVlIiwicmVwdWJsaXF1ZTIiLCJsZWdpc2xhdHVyZURpciIsImxlZ2lzbGF0dXJlMiIsImV0YXQiLCJlbnN1cmVEaXJTeW5jIiwiZXRhdERpciIsIm51bWVybyIsIm51bWVybzIiLCJzdWJzdHJpbmciLCJudW1lcm9NaWxsaWVyc0RpciIsInBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQiLCJkb3NzaWVyc0RpciIsInBhdGhGcm9tVWlkIiwicGF0aEZyb21SZXVuaW9uVWlkIiwicmV1bmlvbnNEaXIiLCJleGVjIiwic2Vzc2lvbkRpciIsImlkRGlyIiwibnVtZXJvTWlsbGlvbnNEaXIiLCJwYXRoRnJvbVNjcnV0aW5VaWQiLCJzY3J1dGluc0RpciIsInBhdGhGcm9tUXVlc3Rpb25VaWQiLCJwYXRoRnJvbUNvbXB0ZVJlbmR1VWlkIiwiZGF0YVJlZ2V4cCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vLyBMb2FkIGRhdGEgZnJvbSBmaWxlc1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuL2RhdGFzZXRzXCJcbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMsIERhdGFzZXQgfSBmcm9tIFwiLi9kYXRhc2V0c1wiXG5pbXBvcnQgdHlwZSB7IERvY3VtZW50RmlsZXNJbmRleCB9IGZyb20gXCIuL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmV4cG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBBY3RldXIsXG4gIENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQsXG4gIE9yZ2FuZSxcbiAgUGhvdG8sXG59IGZyb20gXCIuL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNDb252ZXJ0LCBSZXVuaW9uIH0gZnJvbSBcIi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBBbWVuZGVtZW50LCBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCB9IGZyb20gXCIuL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgTGVnaXNsYXR1cmUgfSBmcm9tIFwiLi90eXBlcy9sZWdpc2xhdHVyZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc0NvbnZlcnQsIFNjcnV0aW4gfSBmcm9tIFwiLi90eXBlcy9zY3J1dGluc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFF1ZXN0aW9uc0NvbnZlcnQsIFF1ZXN0aW9uIH0gZnJvbSBcIi4vdHlwZXMvcXVlc3Rpb25zXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQ29tcHRlc1JlbmR1c0NvbnZlcnQsIENvbXB0ZVJlbmR1IH0gZnJvbSBcIi4vdHlwZXMvZGViYXRzXCJcbmltcG9ydCB7IFRleHRlc0xvaSwgQ29udmVydCBhcyBUZXh0ZXNMb2lDb252ZXJ0IH0gZnJvbSBcIi4vdHlwZXMvdGV4dGVzX2xvaVwiXG5pbXBvcnQgeyBEb2N1bWVudFVybEZvcm1hdCB9IGZyb20gXCIuL3VybHNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGEge1xuICByZWFkb25seSBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfVxuICByZWFkb25seSBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9XG4gIHJlYWRvbmx5IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9XG4gIHJlYWRvbmx5IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9XG4gIHJlYWRvbmx5IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxuICByZWFkb25seSByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9XG4gIHJlYWRvbmx5IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9XG4gIHJlYWRvbmx5IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH1cbiAgcmVhZG9ubHkgcXVlc3Rpb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBRdWVzdGlvbiB9XG4gIHJlYWRvbmx5IGNvbXB0ZVJlbmR1QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQ29tcHRlUmVuZHUgfVxufVxuXG5jb25zdCBkb2N1bWVudFVpZFJlZ2V4ID1cbiAgL14oKD88ZG9jdW1lbnRUeXBlPkFDSU58QUxDTnxBVkNFfEFWSVN8REVDTHxFVERJfExFVFR8TUVTU3xNSU9OfFBJT058UE5SRXxQUkpMfFJBUFB8UklORnxSSU9OKSg/PGNoYW1icmU+QU58Q0d8U04pKD88cmVwdWJsaXF1ZT5SXFxkKylbTFNdKD88bGVnaXNsYXR1cmU+XFxkKykoPzxldGF0PkJ8QlRBfEJUQ3xUQVApKD88bnVtZXJvPlxcZCspKC0uKik/KXwoKD88ZG9jdW1lbnRUeXBlMj5NSU9OKSg/PGNoYW1icmUyPkFOfFNOKSg/PHJlcHVibGlxdWUyPlJcXGQrKVtMU10oPzxsZWdpc2xhdHVyZTI+XFxkKyktTig/PG51bWVybzI+XFxkKykpJC9cbmNvbnN0IGRvc3NpZXJVaWRSZWdleCA9IC9eREwoUlxcZCspKExcXGQrKU4oXFxkKykkL1xuY29uc3QgcmV1bmlvblVpZFJlZ2V4ID1cbiAgL15SVShBTnxDR3xTTikoUlxcZCspKExcXGQrKShbQVNdXFxkezR9KShJREN8SURGTD98SURTKShcXGQrKSQvXG5jb25zdCBzY3J1dGluVWlkUmVnZXggPSAvXlZUKEFOfENHKShSXFxkKykoTFxcZCspVihcXGQrKSQvXG5jb25zdCBjb21wdGVSZW5kdVVpZFJlZ2V4OiBSZWdFeHAgPVxuICAvXkNSUyhBTnxDRykoUlxcZCspKExcXGQrKShTXFxkKykoT3xFfEQpKFxcZCspKE5cXGQrKSQvXG5jb25zdCBxdWVzdGlvblVpZFJlZ2V4OiBSZWdFeHAgPSAvXlFBTihSXFxkKykoTFxcZCspUShFfEd8T1NEKShcXGQrKSQvXG5cbnR5cGUgSXRlbUNvbnZlcnRlcjxUPiA9IChqc29uOiBzdHJpbmcpID0+IFRcblxuZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlSXRlbXM8VCBleHRlbmRzIHsgdWlkOiBzdHJpbmcgfT4oXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICBkYXRhc2V0czogRGF0YXNldFtdLFxuICBjb252ZXJ0VG9JdGVtOiBJdGVtQ29udmVydGVyPFQ+LFxuICBzdWJmb2xkZXJOYW1lOiBzdHJpbmdbXSxcbiAgZmlsZUV4dGVuc2lvbjogc3RyaW5nID0gXCJqc29uXCIsXG4gIHsgbm9WYWxpZGF0aW9uID0gZmFsc2UsIGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjx7IGl0ZW06IFQ7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSwgdm9pZCwgdW5rbm93bj4ge1xuICBjb25zdCBpdGVtVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBsZXQgZmlsZUV4dGVuc2lvblJlZ2V4ID0gbmV3IFJlZ0V4cChgXFxcXC4ke2ZpbGVFeHRlbnNpb259JGApXG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoZmlsZUV4dGVuc2lvblJlZ2V4LCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgaXRlbVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIHN1YmZvbGRlck5hbWUpKSB7XG4gICAgICBjb25zdCBpdGVtRmlsZW5hbWUgPSBpdGVtU3BsaXRQYXRoW2l0ZW1TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghaXRlbUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGl0ZW1GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5pdGVtU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2l0ZW1GaWxlUGF0aH3igKZgKVxuICAgICAgfVxuXG4gICAgICBsZXQgaXRlbUpzb246IGFueSA9IGZzLnJlYWRGaWxlU3luYyhpdGVtRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBsZXQgaXRlbTogVCA9IG5vVmFsaWRhdGlvblxuICAgICAgICA/IEpTT04ucGFyc2UoaXRlbUpzb24pXG4gICAgICAgIDogY29udmVydFRvSXRlbShpdGVtSnNvbilcblxuICAgICAgaWYgKGl0ZW1VaWQuaGFzKGl0ZW0udWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaXRlbVVpZC5hZGQoaXRlbS51aWQpXG4gICAgICB5aWVsZCB7IGl0ZW06IGl0ZW0sIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG5cbiAgICAgIGl0ZW1Kc29uID0gbnVsbFxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlQWN0ZXVycyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIG9wdGlvbnMgPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBhY3RldXI6IEFjdGV1cjsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgZm9yIChjb25zdCB7XG4gICAgaXRlbTogYWN0ZXVyLFxuICAgIGRhdGFzZXRMZWdpc2xhdHVyZSxcbiAgfSBvZiBpdGVyTG9hZEFzc2VtYmxlZUl0ZW1zPEFjdGV1cj4oXG4gICAgZGF0YURpcixcbiAgICBsZWdpc2xhdHVyZSxcbiAgICBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzLFxuICAgIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyLFxuICAgIFtcImFjdGV1cnNcIl0sXG4gICAgXCJqc29uXCIsXG4gICAgb3B0aW9ucyxcbiAgKSkge1xuICAgIHlpZWxkIHsgYWN0ZXVyLCBkYXRhc2V0TGVnaXNsYXR1cmUgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVPcmdhbmVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgb3B0aW9ucyA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IG9yZ2FuZTogT3JnYW5lOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBmb3IgKGNvbnN0IHtcbiAgICBpdGVtOiBvcmdhbmUsXG4gICAgZGF0YXNldExlZ2lzbGF0dXJlLFxuICB9IG9mIGl0ZXJMb2FkQXNzZW1ibGVlSXRlbXM8T3JnYW5lPihcbiAgICBkYXRhRGlyLFxuICAgIGxlZ2lzbGF0dXJlLFxuICAgIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMsXG4gICAgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9PcmdhbmUsXG4gICAgW1wib3JnYW5lc1wiXSxcbiAgICBcImpzb25cIixcbiAgICBvcHRpb25zLFxuICApKSB7XG4gICAgeWllbGQgeyBvcmdhbmUsIGRhdGFzZXRMZWdpc2xhdHVyZSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZUFtZW5kZW1lbnRzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgb3B0aW9ucyA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGFtZW5kZW1lbnQ6IEFtZW5kZW1lbnQ7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGZvciAoY29uc3Qge1xuICAgIGl0ZW06IGFtZW5kZW1lbnQsXG4gICAgZGF0YXNldExlZ2lzbGF0dXJlLFxuICB9IG9mIGl0ZXJMb2FkQXNzZW1ibGVlSXRlbXM8QW1lbmRlbWVudD4oXG4gICAgZGF0YURpcixcbiAgICBsZWdpc2xhdHVyZSxcbiAgICBkYXRhc2V0cy5hbWVuZGVtZW50cyxcbiAgICBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50LFxuICAgIFtdLFxuICAgIFwianNvblwiLFxuICAgIG9wdGlvbnMsXG4gICkpIHtcbiAgICB5aWVsZCB7IGFtZW5kZW1lbnQsIGRhdGFzZXRMZWdpc2xhdHVyZSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIG9wdGlvbnMgPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBkb2N1bWVudDogRG9jdW1lbnQ7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGZvciAoY29uc3Qge1xuICAgIGl0ZW06IGRvY3VtZW50LFxuICAgIGRhdGFzZXRMZWdpc2xhdHVyZSxcbiAgfSBvZiBpdGVyTG9hZEFzc2VtYmxlZUl0ZW1zPERvY3VtZW50PihcbiAgICBkYXRhRGlyLFxuICAgIGxlZ2lzbGF0dXJlLFxuICAgIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMsXG4gICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb2N1bWVudCxcbiAgICBbXCJkb2N1bWVudHNcIl0sXG4gICAgXCJqc29uXCIsXG4gICAgb3B0aW9ucyxcbiAgKSkge1xuICAgIHlpZWxkIHsgZG9jdW1lbnQsIGRhdGFzZXRMZWdpc2xhdHVyZSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZURvc3NpZXJzUGFybGVtZW50YWlyZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICBvcHRpb25zID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHtcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgICBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlXG4gIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBmb3IgKGNvbnN0IHtcbiAgICBpdGVtOiBkb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgICBkYXRhc2V0TGVnaXNsYXR1cmUsXG4gIH0gb2YgaXRlckxvYWRBc3NlbWJsZWVJdGVtczxEb3NzaWVyUGFybGVtZW50YWlyZT4oXG4gICAgZGF0YURpcixcbiAgICBsZWdpc2xhdHVyZSxcbiAgICBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzLFxuICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUsXG4gICAgW1wiZG9zc2llcnNcIl0sXG4gICAgXCJqc29uXCIsXG4gICAgb3B0aW9ucyxcbiAgKSkge1xuICAgIHlpZWxkIHsgZG9zc2llclBhcmxlbWVudGFpcmUsIGRhdGFzZXRMZWdpc2xhdHVyZSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZVJldW5pb25zKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgb3B0aW9ucyA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IHJldW5pb246IFJldW5pb247IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGZvciAoY29uc3Qge1xuICAgIGl0ZW06IHJldW5pb24sXG4gICAgZGF0YXNldExlZ2lzbGF0dXJlLFxuICB9IG9mIGl0ZXJMb2FkQXNzZW1ibGVlSXRlbXM8UmV1bmlvbj4oXG4gICAgZGF0YURpcixcbiAgICBsZWdpc2xhdHVyZSxcbiAgICBkYXRhc2V0cy5hZ2VuZGFzLFxuICAgIEFnZW5kYXNDb252ZXJ0LnRvUmV1bmlvbixcbiAgICBbXSxcbiAgICBcImpzb25cIixcbiAgICBvcHRpb25zLFxuICApKSB7XG4gICAgeWllbGQgeyByZXVuaW9uLCBkYXRhc2V0TGVnaXNsYXR1cmUgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVTY3J1dGlucyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIG9wdGlvbnMgPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBzY3J1dGluOiBTY3J1dGluOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBmb3IgKGNvbnN0IHtcbiAgICBpdGVtOiBzY3J1dGluLFxuICAgIGRhdGFzZXRMZWdpc2xhdHVyZSxcbiAgfSBvZiBpdGVyTG9hZEFzc2VtYmxlZUl0ZW1zPFNjcnV0aW4+KFxuICAgIGRhdGFEaXIsXG4gICAgbGVnaXNsYXR1cmUsXG4gICAgZGF0YXNldHMuc2NydXRpbnMsXG4gICAgU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbixcbiAgICBbXSxcbiAgICBcImpzb25cIixcbiAgICBvcHRpb25zLFxuICApKSB7XG4gICAgeWllbGQgeyBzY3J1dGluLCBkYXRhc2V0TGVnaXNsYXR1cmUgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVRdWVzdGlvbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICBvcHRpb25zID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgcXVlc3Rpb246IFF1ZXN0aW9uOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBmb3IgKGNvbnN0IHtcbiAgICBpdGVtOiBxdWVzdGlvbixcbiAgICBkYXRhc2V0TGVnaXNsYXR1cmUsXG4gIH0gb2YgaXRlckxvYWRBc3NlbWJsZWVJdGVtczxRdWVzdGlvbj4oXG4gICAgZGF0YURpcixcbiAgICBsZWdpc2xhdHVyZSxcbiAgICBkYXRhc2V0cy5xdWVzdGlvbnMsXG4gICAgUXVlc3Rpb25zQ29udmVydC50b1F1ZXN0aW9uLFxuICAgIFtdLFxuICAgIFwianNvblwiLFxuICAgIG9wdGlvbnMsXG4gICkpIHtcbiAgICB5aWVsZCB7IHF1ZXN0aW9uLCBkYXRhc2V0TGVnaXNsYXR1cmUgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVDb21wdGVzUmVuZHVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgb3B0aW9ucyA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGNvbXB0ZVJlbmR1OiBDb21wdGVSZW5kdTsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgZm9yIChjb25zdCB7XG4gICAgaXRlbTogY29tcHRlUmVuZHUsXG4gICAgZGF0YXNldExlZ2lzbGF0dXJlLFxuICB9IG9mIGl0ZXJMb2FkQXNzZW1ibGVlSXRlbXM8Q29tcHRlUmVuZHU+KFxuICAgIGRhdGFEaXIsXG4gICAgbGVnaXNsYXR1cmUsXG4gICAgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMsXG4gICAgQ29tcHRlc1JlbmR1c0NvbnZlcnQudG9Db21wdGVSZW5kdSxcbiAgICBbXSxcbiAgICBcInhtbFwiLFxuICAgIG9wdGlvbnMsXG4gICkpIHtcbiAgICB5aWVsZCB7IGNvbXB0ZVJlbmR1LCBkYXRhc2V0TGVnaXNsYXR1cmUgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVUZXh0ZUxvaShcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIG9wdGlvbnMgPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyB0ZXh0ZUxvaTogVGV4dGVzTG9pOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBmb3IgKGNvbnN0IHtcbiAgICBpdGVtOiB0ZXh0ZUxvaSxcbiAgICBkYXRhc2V0TGVnaXNsYXR1cmUsXG4gIH0gb2YgaXRlckxvYWRBc3NlbWJsZWVJdGVtczxUZXh0ZXNMb2k+KFxuICAgIGRhdGFEaXIsXG4gICAgbGVnaXNsYXR1cmUsXG4gICAgZGF0YXNldHMudGV4dGVzTG9pLFxuICAgIFRleHRlc0xvaUNvbnZlcnQudG9UZXh0ZXNMb2ksXG4gICAgW10sXG4gICAgXCJqc29uXCIsXG4gICAgb3B0aW9ucyxcbiAgKSkge1xuICAgIHlpZWxkIHsgdGV4dGVMb2ksIGRhdGFzZXRMZWdpc2xhdHVyZSB9XG4gIH1cbn1cblxuLy8vIExvYWQgZGF0YSBmcm9tIHNwbGl0IGZpbGVzLlxuLy8vIERlcHJlY2F0ZWQ6IFVzZSBpdGVyTG9hZC4uLiBpdGVyYXRvcnMgaW5zdGVhZC5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlRGF0YShcbiAgZGF0YURpcjogc3RyaW5nLFxuICBlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IERhdGEge1xuICBjb25zdCBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfSA9IHt9XG4gIGNvbnN0IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBhY3RldXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJhY3RldXJzXCJdKSkge1xuICAgICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFhY3RldXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hY3RldXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FjdGV1ckZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVySnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFjdGV1ckZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBhY3RldXIgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cihhY3RldXJKc29uKVxuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAoYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID0gYWN0ZXVyXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJvcmdhbmVzXCJdKSkge1xuICAgICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5vcmdhbmVTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke29yZ2FuZUZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JnYW5lSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKG9yZ2FuZUZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBvcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcIm9yZ2FuZVwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAob3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID0gb3JnYW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEb3NzaWVyVWlkOiB7IFtkb3NzaWVyVWlkOiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPSByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnJldW5pb25TcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3JldW5pb25GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmV1bmlvbkZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXVuaW9uID0gQWdlbmRhc0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25Kc29uKVxuICAgICAgICBpZiAocmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9IHJldW5pb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRheSA9IHJldW5pb24udGltZXN0YW1wRGVidXQudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF1cbiAgICAgICAgbGV0IHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV1cbiAgICAgICAgaWYgKHJldW5pb25zQXREYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV0gPSBbXVxuICAgICAgICB9XG4gICAgICAgIHJldW5pb25zQXREYXkucHVzaChyZXVuaW9uKVxuXG4gICAgICAgIGNvbnN0IG9kaiA9IHJldW5pb24ub2RqXG4gICAgICAgIGlmIChvZGogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcG9pbnRPZGogb2Ygb2RqLnBvaW50c09kaiB8fCBbXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyTGVnaXNsYXRpZlJlZiBvZiBwb2ludE9kai5kb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyB8fFxuICAgICAgICAgICAgICBbXSkge1xuICAgICAgICAgICAgICBsZXQgcmV1bmlvbnNBdERvc3NpZXJVaWQgPVxuICAgICAgICAgICAgICAgIHJldW5pb25zQnlEb3NzaWVyVWlkW2Rvc3NpZXJMZWdpc2xhdGlmUmVmXVxuICAgICAgICAgICAgICBpZiAocmV1bmlvbnNBdERvc3NpZXJVaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkID0gcmV1bmlvbnNCeURvc3NpZXJVaWRbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyTGVnaXNsYXRpZlJlZlxuICAgICAgICAgICAgICAgIF0gPSBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkLnB1c2gocmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYW1lbmRlbWVudFNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YW1lbmRlbWVudEZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhbWVuZGVtZW50RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50KGFtZW5kZW1lbnRKc29uKVxuICAgICAgICBpZiAoYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9IGFtZW5kZW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBkb2N1bWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvY3VtZW50c1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRGaWxlbmFtZSA9IGRvY3VtZW50U3BsaXRQYXRoW2RvY3VtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9jdW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmRvY3VtZW50U3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb2N1bWVudEZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9jdW1lbnRGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0RvY3VtZW50KGRvY3VtZW50SnNvbilcbiAgICAgICAgaWYgKGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID0gZG9jdW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRvc3NpZXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJkb3NzaWVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVuYW1lID0gZG9zc2llclNwbGl0UGF0aFtkb3NzaWVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9zc2llckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5kb3NzaWVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb3NzaWVyRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3NzaWVySnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGRvc3NpZXJGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9zc2llciA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVySnNvbilcbiAgICAgICAgY29uc3QgdGl0cmVEb3NzaWVyID0gZG9zc2llci50aXRyZURvc3NpZXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci5zZW5hdENoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIudGl0cmVDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUGhvdG9zKSB7XG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGBwaG90b3NfZGVwdXRlc18ke1xuICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBMZWdpc2xhdHVyZS5BbGwuXG4gICAgICAgICAgbGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCA/IExlZ2lzbGF0dXJlLkRpeFNlcHQgOiBsZWdpc2xhdHVyZVxuICAgICAgICB9YCxcbiAgICAgICAgXCJkZXB1dGVzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgICAgIFwic2VuYXRldXJzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzY3J1dGluQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogU2NydXRpbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPSBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnNjcnV0aW5TcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3NjcnV0aW5GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoc2NydXRpbkZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBzY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgICAgaWYgKHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPSBzY3J1dGluXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBxdWVzdGlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFF1ZXN0aW9uIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlF1ZXN0aW9ucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBxdWVzdGlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uRmlsZW5hbWUgPSBxdWVzdGlvblNwbGl0UGF0aFtxdWVzdGlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXF1ZXN0aW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVlc3Rpb25GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5xdWVzdGlvblNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cXVlc3Rpb25GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHF1ZXN0aW9uRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gUXVlc3Rpb25zQ29udmVydC50b1F1ZXN0aW9uKHF1ZXN0aW9uSnNvbilcbiAgICAgICAgaWYgKHF1ZXN0aW9uQnlVaWRbcXVlc3Rpb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcXVlc3Rpb25CeVVpZFtxdWVzdGlvbi51aWRdID0gcXVlc3Rpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbXB0ZVJlbmR1QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQ29tcHRlUmVuZHUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQ29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBjb21wdGVSZW5kdVBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBjb21wdGVSZW5kdUZpbGVuYW1lID0gY29tcHRlUmVuZHVQYXRoW2NvbXB0ZVJlbmR1UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWNvbXB0ZVJlbmR1RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHRlUmVuZHVGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5jb21wdGVSZW5kdVBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2NvbXB0ZVJlbmR1RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wdGVSZW5kdUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhjb21wdGVSZW5kdUZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBjb21wdGVSZW5kdSA9IENvbXB0ZXNSZW5kdXNDb252ZXJ0LnRvQ29tcHRlUmVuZHUoY29tcHRlUmVuZHVKc29uKVxuICAgICAgICBpZiAoY29tcHRlUmVuZHVCeVVpZFtjb21wdGVSZW5kdS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb21wdGVSZW5kdUJ5VWlkW2NvbXB0ZVJlbmR1LnVpZF0gPSBjb21wdGVSZW5kdVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gICAgcXVlc3Rpb25CeVVpZCxcbiAgICBjb21wdGVSZW5kdUJ5VWlkLFxuICB9XG59XG5cbi8vLyBMb2FkIGRhdGEgZnJvbSBiaWcgbW9ub2x5dGljIGZpbGVzLlxuLy8vIERlcHJlY2F0ZWQ6IEFzc2VtYmzDqWUgbmF0aW9uYWxlIG9wZW4gZGF0YSBubyBtb3JlIHVzZXMgbW9ub2x5dGljIGZpbGVzLlxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEYXRhRnJvbUJpZ0ZpbGVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogRGF0YSB7XG4gIGNvbnN0IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9ID0ge31cbiAgY29uc3Qgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFjdGV1cnNFdE9yZ2FuZXMgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cnNFdE9yZ2FuZXMoanNvbilcbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIGFjdGV1cnNFdE9yZ2FuZXMuYWN0ZXVycykge1xuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAoYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID0gYWN0ZXVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qgb3JnYW5lIG9mIGFjdGV1cnNFdE9yZ2FuZXMub3JnYW5lcykge1xuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcIm9yZ2FuZVwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAob3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID0gb3JnYW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEb3NzaWVyVWlkOiB7IFtkb3NzaWVyVWlkOiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYWdlbmRhcyA9IEFnZW5kYXNDb252ZXJ0LnRvQWdlbmRhcyhqc29uKVxuICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIGFnZW5kYXMucmV1bmlvbnMpIHtcbiAgICAgICAgaWYgKHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPSByZXVuaW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXkgPSByZXVuaW9uLnRpbWVzdGFtcERlYnV0LnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdXG4gICAgICAgIGxldCByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldXG4gICAgICAgIGlmIChyZXVuaW9uc0F0RGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldID0gW11cbiAgICAgICAgfVxuICAgICAgICByZXVuaW9uc0F0RGF5LnB1c2gocmV1bmlvbilcblxuICAgICAgICBjb25zdCBvZGogPSByZXVuaW9uLm9kalxuICAgICAgICBpZiAob2RqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50T2RqIG9mIG9kai5wb2ludHNPZGogfHwgW10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9zc2llckxlZ2lzbGF0aWZSZWYgb2YgcG9pbnRPZGouZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMgfHxcbiAgICAgICAgICAgICAgW10pIHtcbiAgICAgICAgICAgICAgbGV0IHJldW5pb25zQXREb3NzaWVyVWlkID1cbiAgICAgICAgICAgICAgICByZXVuaW9uc0J5RG9zc2llclVpZFtkb3NzaWVyTGVnaXNsYXRpZlJlZl1cbiAgICAgICAgICAgICAgaWYgKHJldW5pb25zQXREb3NzaWVyVWlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZCA9IHJldW5pb25zQnlEb3NzaWVyVWlkW1xuICAgICAgICAgICAgICAgICAgZG9zc2llckxlZ2lzbGF0aWZSZWZcbiAgICAgICAgICAgICAgICBdID0gW11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZC5wdXNoKHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW1lbmRlbWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFtZW5kZW1lbnQgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhbWVuZGVtZW50cyA9IEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnRzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHRleHRlTGVnaXNsYXRpZiBvZiBhbWVuZGVtZW50cy50ZXh0ZXNMZWdpc2xhdGlmcykge1xuICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnQgb2YgdGV4dGVMZWdpc2xhdGlmLmFtZW5kZW1lbnRzKSB7XG4gICAgICAgICAgaWYgKGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9IGFtZW5kZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBkb2N1bWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvY3VtZW50IH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgZG9zc2llcnNMZWdpc2xhdGlmcyA9XG4gICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llcnNMZWdpc2xhdGlmcyhqc29uKVxuICAgICAgZm9yIChjb25zdCBkb2N1bWVudCBvZiBkb3NzaWVyc0xlZ2lzbGF0aWZzLnRleHRlc0xlZ2lzbGF0aWZzKSB7XG4gICAgICAgIGlmIChkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9IGRvY3VtZW50XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZG9zc2llciBvZiBkb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXJzUGFybGVtZW50YWlyZXMpIHtcbiAgICAgICAgY29uc3QgdGl0cmVEb3NzaWVyID0gZG9zc2llci50aXRyZURvc3NpZXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci5zZW5hdENoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIudGl0cmVDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5QaG90b3MpIHtcbiAgICBjb25zdCBwaG90b0J5VWlkID0ge31cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBgcGhvdG9zX2RlcHV0ZXNfJHtcbiAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgTGVnaXNsYXR1cmUuQWxsLlxuICAgICAgICAgIGxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgPyBMZWdpc2xhdHVyZS5EaXhTZXB0IDogbGVnaXNsYXR1cmVcbiAgICAgICAgfWAsXG4gICAgICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIFwicGhvdG9zX3NlbmF0ZXVyc1wiLFxuICAgICAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBzY3J1dGlucyA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW5zKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW4gb2Ygc2NydXRpbnMuc2NydXRpbnMpIHtcbiAgICAgICAgaWYgKHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPSBzY3J1dGluXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBxdWVzdGlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFF1ZXN0aW9uIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlF1ZXN0aW9ucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBxdWVzdGlvbnMgPSBRdWVzdGlvbnNDb252ZXJ0LnRvUXVlc3Rpb25zKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHF1ZXN0aW9ucy5xdWVzdGlvbnMpIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uQnlVaWRbcXVlc3Rpb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcXVlc3Rpb25CeVVpZFtxdWVzdGlvbi51aWRdID0gcXVlc3Rpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbXB0ZVJlbmR1QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQ29tcHRlUmVuZHUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQ29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBjb21wdGVzUmVuZHVzID0gQ29tcHRlc1JlbmR1c0NvbnZlcnQudG9Db21wdGVzUmVuZHVzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IGNvbXB0ZVJlbmR1IG9mIGNvbXB0ZXNSZW5kdXMuY29tcHRlc1JlbmR1cykge1xuICAgICAgICBpZiAoY29tcHRlUmVuZHVCeVVpZFtjb21wdGVSZW5kdS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb21wdGVSZW5kdUJ5VWlkW2NvbXB0ZVJlbmR1LnVpZF0gPSBjb21wdGVSZW5kdVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gICAgcXVlc3Rpb25CeVVpZCxcbiAgICBjb21wdGVSZW5kdUJ5VWlkLFxuICB9XG59XG5cbi8qKlxuICogUmVhZCBpbmZvcyBvZiBhIGRvY3VtZW50IG9yIGEgZGl2aXNpb24gb2YgYSBkb2N1bWVudCBmcm9tIGZpbGUgc3lzdGVtXG4gKlxuICogQHBhcmFtIGRhdGFEaXJcbiAqIEBwYXJhbSB1aWQgVUlEIG9mIGEgZG9jdW1lbnQgb3IgYSBkaXZpc2lvblxuICogQHBhcmFtIGZvcm1hdHMgcmVxdWVzdGVkIGZvcm1hdHMgb2YgdGhlIGRvY3VtZW50IGluIGRlY3JlYXNpbmcgcHJlZmVyZW5jZSBvcmRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZURvY3VtZW50RmlsZShcbiAgZGF0YURpcjogc3RyaW5nLFxuICB1aWQ6IHN0cmluZyxcbiAgZm9ybWF0czogRG9jdW1lbnRVcmxGb3JtYXRbXSxcbik6XG4gIHwge1xuICAgICAgZm9ybWF0OiBEb2N1bWVudFVybEZvcm1hdFxuICAgICAgcGF0aDogc3RyaW5nXG4gICAgICB1cmw6IHN0cmluZ1xuICAgIH1cbiAgfCB1bmRlZmluZWQge1xuICBjb25zdCBkb2N1bWVudHNEaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgXCJEb2N1bWVudHNcIilcbiAgY29uc3QgZG9jdW1lbnREaXIgPSBwYXRoRnJvbURvY3VtZW50VWlkKGRvY3VtZW50c0RpciwgdWlkKVxuICBjb25zdCBpbmRleFBhdGggPSBwYXRoLmpvaW4oZG9jdW1lbnREaXIsIFwiaW5kZXguanNvblwiKVxuICBpZiAoIWZzLnBhdGhFeGlzdHNTeW5jKGluZGV4UGF0aCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgY29uc3QgaW5kZXggPSBmcy5yZWFkSnNvblN5bmMoaW5kZXhQYXRoKSBhcyBEb2N1bWVudEZpbGVzSW5kZXhcbiAgZm9yIChjb25zdCBmb3JtYXQgb2YgZm9ybWF0cykge1xuICAgIGZvciAoY29uc3QgeyBmaWxlbmFtZSwgdXJsIH0gb2YgaW5kZXhbZm9ybWF0XSA/PyBbXSkge1xuICAgICAgaWYgKGZpbGVuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGZvcm1hdCwgcGF0aDogcGF0aC5qb2luKGRvY3VtZW50RGlyLCBmaWxlbmFtZSksIHVybCB9XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVQaG90b3NEZXB1dGVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0ge1xuICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICBkYXRhRGlyLFxuICAgIGBwaG90b3NfZGVwdXRlc18ke1xuICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgIGxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgPyBMZWdpc2xhdHVyZS5EaXhTZXB0IDogbGVnaXNsYXR1cmVcbiAgICB9YCxcbiAgICBcImRlcHV0ZXMuanNvblwiLFxuICApXG4gIGlmIChsb2cpIHtcbiAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICB9XG4gIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gIHJldHVybiBKU09OLnBhcnNlKGpzb24pIGFzIHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZVBob3Rvc1NlbmF0ZXVycyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSB7XG4gIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgIGRhdGFEaXIsXG4gICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgXCJzZW5hdGV1cnMuanNvblwiLFxuICApXG4gIGlmIChsb2cpIHtcbiAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICB9XG4gIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gIHJldHVybiBKU09OLnBhcnNlKGpzb24pIGFzIHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21Eb2N1bWVudFVpZChkb2N1bWVudHNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHVpZC5tYXRjaChkb2N1bWVudFVpZFJlZ2V4KVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIGRvY3VtZW50IFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCBncm91cHMgPSBtYXRjaCEuZ3JvdXBzIGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cbiAgY29uc3QgZG9jdW1lbnRUeXBlID0gcGF0aC5qb2luKFxuICAgIGRvY3VtZW50c0RpcixcbiAgICBncm91cHMuZG9jdW1lbnRUeXBlID8/IGdyb3Vwcy5kb2N1bWVudFR5cGUyLFxuICApXG4gIGNvbnN0IGNoYW1icmVEaXIgPSBwYXRoLmpvaW4oZG9jdW1lbnRUeXBlLCBncm91cHMuY2hhbWJyZSA/PyBncm91cHMuY2hhbWJyZTIpXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oXG4gICAgY2hhbWJyZURpcixcbiAgICBncm91cHMucmVwdWJsaXF1ZSA/PyBncm91cHMucmVwdWJsaXF1ZTIsXG4gIClcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4oXG4gICAgcmVwdWJsaXF1ZURpcixcbiAgICBncm91cHMubGVnaXNsYXR1cmUgPz8gZ3JvdXBzLmxlZ2lzbGF0dXJlMixcbiAgKVxuICBjb25zdCBldGF0ID0gZ3JvdXBzLmV0YXRcbiAgaWYgKGV0YXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGZzLmVuc3VyZURpclN5bmMobGVnaXNsYXR1cmVEaXIpXG4gICAgcmV0dXJuIHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgdWlkKVxuICB9XG4gIGNvbnN0IGV0YXREaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIGV0YXQpXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMFwiICsgKGdyb3Vwcy5udW1lcm8gPz8gZ3JvdXBzLm51bWVybzIpXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHJpbmcobnVtZXJvLmxlbmd0aCAtIDYpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKGV0YXREaXIsIG51bWVyby5zdWJzdHJpbmcoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQoXG4gIGRvc3NpZXJzRGlyOiBzdHJpbmcsXG4gIHVpZDogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGhGcm9tVWlkKGRvc3NpZXJzRGlyLCB1aWQsIGRvc3NpZXJVaWRSZWdleClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tUmV1bmlvblVpZChyZXVuaW9uc0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gcmV1bmlvblVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIHJldW5pb24gVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IGNoYW1icmVEaXIgPSBwYXRoLmpvaW4ocmV1bmlvbnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihjaGFtYnJlRGlyLCBtYXRjaCFbMl0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVszXSlcbiAgY29uc3Qgc2Vzc2lvbkRpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbWF0Y2ghWzRdKVxuICBjb25zdCBpZERpciA9IHBhdGguam9pbihzZXNzaW9uRGlyLCBtYXRjaCFbNV0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMDAwMFwiICsgbWF0Y2ghWzZdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHJpbmcobnVtZXJvLmxlbmd0aCAtIDkpXG4gIGNvbnN0IG51bWVyb01pbGxpb25zRGlyID0gcGF0aC5qb2luKGlkRGlyLCBudW1lcm8uc3Vic3RyaW5nKDAsIDMpKVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihudW1lcm9NaWxsaW9uc0RpciwgbnVtZXJvLnN1YnN0cmluZygzLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21TY3J1dGluVWlkKHNjcnV0aW5zRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBzY3J1dGluVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3Igc2NydXRpbiBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgY2hhbWJyZURpciA9IHBhdGguam9pbihzY3J1dGluc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGNoYW1icmVEaXIsIG1hdGNoIVsyXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzNdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVs0XVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyaW5nKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cmluZygwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21RdWVzdGlvblVpZChkYXRhRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGhGcm9tVWlkKGRhdGFEaXIsIHVpZCwgcXVlc3Rpb25VaWRSZWdleClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tQ29tcHRlUmVuZHVVaWQoZGF0YURpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoRnJvbVVpZChkYXRhRGlyLCB1aWQsIGNvbXB0ZVJlbmR1VWlkUmVnZXgpXG59XG5cbi8vIEdldCBzdGFuZGFyZCBwYXRoIGZvciBvYmplY3Qgd2l0aCB1aWQgOiByZXB1YmxpcXVlID4gbGVnaXNsYXR1cmUgPiBncm91cCBvYmplY3RzIGJ5IHRob3VzYW5kc1xuZnVuY3Rpb24gcGF0aEZyb21VaWQoZGF0YURpcjogc3RyaW5nLCB1aWQ6IHN0cmluZywgZGF0YVJlZ2V4cDogUmVnRXhwKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBkYXRhUmVnZXhwLmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIG9iamVjdCB3aXRoIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzJdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVszXVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyaW5nKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cmluZygwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxPQUFPQSxNQUFNLE1BQU0sUUFBUTtBQUMzQixPQUFPQyxFQUFFLE1BQU0sVUFBVTtBQUN6QixPQUFPQyxJQUFJLE1BQU0sTUFBTTtBQUFBLFNBRWRDLGVBQWU7QUFBQSxTQUNmQyxRQUFRLEVBQUVELGVBQWU7QUFBQSxTQUV6QkUsT0FBTztBQUFBLFNBQ1BBLE9BQU87QUFBQSxTQUdkQyxPQUFPLElBQUlDLHVCQUF1QjtBQUFBLFNBSTNCRCxPQUFPLElBQUlFLGNBQWM7QUFBQSxTQUNiRixPQUFPLElBQUlHLGtCQUFrQjtBQUFBLFNBRWhESCxPQUFPLElBQUlJLDBCQUEwQjtBQUFBLFNBSTlCQyxXQUFXO0FBQUEsU0FDWEwsT0FBTyxJQUFJTSxlQUFlO0FBQUEsU0FDMUJOLE9BQU8sSUFBSU8sZ0JBQWdCO0FB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
898
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhc3NlcnQiLCJmcyIsInBhdGgiLCJFbmFibGVkRGF0YXNldHMiLCJkYXRhc2V0cyIsIndhbGtEaXIiLCJDb252ZXJ0IiwiQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQiLCJBZ2VuZGFzQ29udmVydCIsIkFtZW5kZW1lbnRzQ29udmVydCIsIkRvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0IiwiTGVnaXNsYXR1cmUiLCJTY3J1dGluc0NvbnZlcnQiLCJRdWVzdGlvbnNDb252ZXJ0IiwiQ29tcHRlc1JlbmR1c0NvbnZlcnQiLCJUZXh0ZXNMb2lDb252ZXJ0IiwiZG9jdW1lbnRVaWRSZWdleCIsImRvc3NpZXJVaWRSZWdleCIsInJldW5pb25VaWRSZWdleCIsInNjcnV0aW5VaWRSZWdleCIsImNvbXB0ZVJlbmR1VWlkUmVnZXgiLCJxdWVzdGlvblVpZFJlZ2V4IiwiaXRlckxvYWRBc3NlbWJsZWVJdGVtcyIsImRhdGFEaXIiLCJsZWdpc2xhdHVyZSIsImNvbnZlcnRUb0l0ZW0iLCJzdWJmb2xkZXJOYW1lIiwiZmlsZUV4dGVuc2lvbiIsIm5vVmFsaWRhdGlvbiIsImxvZyIsIml0ZW1VaWQiLCJTZXQiLCJkYXRhc2V0IiwiaWdub3JlRm9yV2ViIiwidW5kZWZpbmVkIiwiQWxsIiwiZmlsZUV4dGVuc2lvblJlZ2V4IiwiUmVnRXhwIiwiZGF0YXNldERpciIsImpvaW4iLCJmaWxlbmFtZSIsInJlcGxhY2UiLCJpdGVtU3BsaXRQYXRoIiwiaXRlbUZpbGVuYW1lIiwibGVuZ3RoIiwiZW5kc1dpdGgiLCJpdGVtRmlsZVBhdGgiLCJjb25zb2xlIiwiaXRlbUpzb24iLCJyZWFkRmlsZVN5bmMiLCJlbmNvZGluZyIsIml0ZW0iLCJKU09OIiwicGFyc2UiLCJoYXMiLCJ1aWQiLCJhZGQiLCJkYXRhc2V0TGVnaXNsYXR1cmUiLCJpdGVyTG9hZEFzc2VtYmxlZUFjdGV1cnMiLCJvcHRpb25zIiwiYWN0ZXVyIiwiYWN0ZXVyc0V0T3JnYW5lcyIsInRvQWN0ZXVyIiwiaXRlckxvYWRBc3NlbWJsZWVPcmdhbmVzIiwib3JnYW5lIiwidG9PcmdhbmUiLCJpdGVyTG9hZEFzc2VtYmxlZUFtZW5kZW1lbnRzIiwiYW1lbmRlbWVudCIsImFtZW5kZW1lbnRzIiwidG9BbWVuZGVtZW50IiwiaXRlckxvYWRBc3NlbWJsZWVEb2N1bWVudHMiLCJkb2N1bWVudCIsImRvc3NpZXJzTGVnaXNsYXRpZnMiLCJ0b0RvY3VtZW50IiwiaXRlckxvYWRBc3NlbWJsZWVEb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwiZG9zc2llclBhcmxlbWVudGFpcmUiLCJ0b0Rvc3NpZXJQYXJsZW1lbnRhaXJlIiwiaXRlckxvYWRBc3NlbWJsZWVSZXVuaW9ucyIsInJldW5pb24iLCJhZ2VuZGFzIiwidG9SZXVuaW9uIiwiaXRlckxvYWRBc3NlbWJsZWVTY3J1dGlucyIsInNjcnV0aW4iLCJzY3J1dGlucyIsInRvU2NydXRpbiIsIml0ZXJMb2FkQXNzZW1ibGVlUXVlc3Rpb25zIiwicXVlc3Rpb24iLCJxdWVzdGlvbnMiLCJ0b1F1ZXN0aW9uIiwiaXRlckxvYWRBc3NlbWJsZWVDb21wdGVzUmVuZHVzIiwiY29tcHRlUmVuZHUiLCJjb21wdGVzUmVuZHVzU2VhbmNlcyIsInRvQ29tcHRlUmVuZHUiLCJpdGVyTG9hZEFzc2VtYmxlZVRleHRlTG9pIiwidGV4dGVMb2kiLCJ0ZXh0ZXNMb2kiLCJ0b1RleHRlc0xvaSIsImxvYWRBc3NlbWJsZWVEYXRhIiwiZW5hYmxlZERhdGFzZXRzIiwiYWN0ZXVyQnlVaWQiLCJvcmdhbmVCeVVpZCIsIkFjdGV1cnNFdE9yZ2FuZXMiLCJhY3RldXJTcGxpdFBhdGgiLCJhY3RldXJGaWxlbmFtZSIsImFjdGV1ckZpbGVQYXRoIiwiYWN0ZXVySnNvbiIsIm9yZ2FuZVNwbGl0UGF0aCIsIm9yZ2FuZUZpbGVuYW1lIiwib3JnYW5lRmlsZVBhdGgiLCJvcmdhbmVKc29uIiwicmV1bmlvbkJ5VWlkIiwicmV1bmlvbnNCeURheSIsInJldW5pb25zQnlEb3NzaWVyVWlkIiwiQWdlbmRhcyIsInJldW5pb25TcGxpdFBhdGgiLCJyZXVuaW9uRmlsZW5hbWUiLCJyZXVuaW9uRmlsZVBhdGgiLCJyZXVuaW9uSnNvbiIsImRheSIsInRpbWVzdGFtcERlYnV0IiwidG9JU09TdHJpbmciLCJzcGxpdCIsInJldW5pb25zQXREYXkiLCJwdXNoIiwib2RqIiwicG9pbnRPZGoiLCJwb2ludHNPZGoiLCJkb3NzaWVyTGVnaXNsYXRpZlJlZiIsImRvc3NpZXJzTGVnaXNsYXRpZnNSZWZzIiwicmV1bmlvbnNBdERvc3NpZXJVaWQiLCJhbWVuZGVtZW50QnlVaWQiLCJBbWVuZGVtZW50cyIsImFtZW5kZW1lbnRTcGxpdFBhdGgiLCJhbWVuZGVtZW50RmlsZW5hbWUiLCJhbWVuZGVtZW50RmlsZVBhdGgiLCJhbWVuZGVtZW50SnNvbiIsImRvY3VtZW50QnlVaWQiLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4iLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW4iLCJkb3NzaWVyUGFybGVtZW50YWlyZUJ5VWlkIiwiRG9zc2llcnNMZWdpc2xhdGlmcyIsImRvY3VtZW50U3BsaXRQYXRoIiwiZG9jdW1lbnRGaWxlbmFtZSIsImRvY3VtZW50RmlsZVBhdGgiLCJkb2N1bWVudEpzb24iLCJkb3NzaWVyU3BsaXRQYXRoIiwiZG9zc2llckZpbGVuYW1lIiwiZG9zc2llckZpbGVQYXRoIiwiZG9zc2llckpzb24iLCJkb3NzaWVyIiwidGl0cmVEb3NzaWVyIiwic2VuYXRDaGVtaW4iLCJ0aXRyZUNoZW1pbiIsInBob3RvQnlVaWQiLCJQaG90b3MiLCJqc29uRmlsZVBhdGgiLCJEaXhTZXB0IiwiZXhpc3RzU3luYyIsImpzb24iLCJPYmplY3QiLCJhc3NpZ24iLCJzY3J1dGluQnlVaWQiLCJTY3J1dGlucyIsInNjcnV0aW5TcGxpdFBhdGgiLCJzY3J1dGluRmlsZW5hbWUiLCJzY3J1dGluRmlsZVBhdGgiLCJzY3J1dGluSnNvbiIsInF1ZXN0aW9uQnlVaWQiLCJRdWVzdGlvbnMiLCJxdWVzdGlvblNwbGl0UGF0aCIsInF1ZXN0aW9uRmlsZW5hbWUiLCJxdWVzdGlvbkZpbGVQYXRoIiwicXVlc3Rpb25Kc29uIiwiY29tcHRlUmVuZHVCeVVpZCIsIkNvbXB0ZXNSZW5kdXNTZWFuY2VzIiwiY29tcHRlUmVuZHVQYXRoIiwiY29tcHRlUmVuZHVGaWxlbmFtZSIsImNvbXB0ZVJlbmR1RmlsZVBhdGgiLCJjb21wdGVSZW5kdUpzb24iLCJsb2FkQXNzZW1ibGVlRGF0YUZyb21CaWdGaWxlcyIsInRvQWN0ZXVyc0V0T3JnYW5lcyIsImFjdGV1cnMiLCJvcmdhbmVzIiwidG9BZ2VuZGFzIiwicmV1bmlvbnMiLCJ0b0FtZW5kZW1lbnRzIiwidGV4dGVMZWdpc2xhdGlmIiwidGV4dGVzTGVnaXNsYXRpZnMiLCJ0b0Rvc3NpZXJzTGVnaXNsYXRpZnMiLCJkb3NzaWVyc1BhcmxlbWVudGFpcmVzIiwidG9TY3J1dGlucyIsInRvUXVlc3Rpb25zIiwiY29tcHRlc1JlbmR1cyIsInRvQ29tcHRlc1JlbmR1cyIsImxvYWRBc3NlbWJsZWVEb2N1bWVudEZpbGUiLCJmb3JtYXRzIiwiZG9jdW1lbnRzRGlyIiwiZG9jdW1lbnREaXIiLCJwYXRoRnJvbURvY3VtZW50VWlkIiwiaW5kZXhQYXRoIiwicGF0aEV4aXN0c1N5bmMiLCJpbmRleCIsInJlYWRKc29uU3luYyIsImZvcm1hdCIsInVybCIsImxvYWRBc3NlbWJsZWVQaG90b3NEZXB1dGVzIiwibG9hZEFzc2VtYmxlZVBob3Rvc1NlbmF0ZXVycyIsIm1hdGNoIiwibm90U3RyaWN0RXF1YWwiLCJncm91cHMiLCJkb2N1bWVudFR5cGUiLCJkb2N1bWVudFR5cGUyIiwiY2hhbWJyZURpciIsImNoYW1icmUiLCJjaGFtYnJlMiIsInJlcHVibGlxdWVEaXIiLCJyZXB1YmxpcXVlIiwicmVwdWJsaXF1ZTIiLCJsZWdpc2xhdHVyZURpciIsImxlZ2lzbGF0dXJlMiIsImV0YXQiLCJlbnN1cmVEaXJTeW5jIiwiZXRhdERpciIsIm51bWVybyIsIm51bWVybzIiLCJzdWJzdHJpbmciLCJudW1lcm9NaWxsaWVyc0RpciIsInBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQiLCJkb3NzaWVyc0RpciIsInBhdGhGcm9tVWlkIiwicGF0aEZyb21SZXVuaW9uVWlkIiwicmV1bmlvbnNEaXIiLCJleGVjIiwic2Vzc2lvbkRpciIsImlkRGlyIiwibnVtZXJvTWlsbGlvbnNEaXIiLCJwYXRoRnJvbVNjcnV0aW5VaWQiLCJzY3J1dGluc0RpciIsInBhdGhGcm9tUXVlc3Rpb25VaWQiLCJwYXRoRnJvbUNvbXB0ZVJlbmR1VWlkIiwiZGF0YVJlZ2V4cCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9sb2FkZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vLyBMb2FkIGRhdGEgZnJvbSBmaWxlc1xuXG5pbXBvcnQgYXNzZXJ0IGZyb20gXCJhc3NlcnRcIlxuaW1wb3J0IGZzIGZyb20gXCJmcy1leHRyYVwiXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiXG5cbmV4cG9ydCB7IEVuYWJsZWREYXRhc2V0cyB9IGZyb20gXCIuL2RhdGFzZXRzXCJcbmltcG9ydCB7IGRhdGFzZXRzLCBFbmFibGVkRGF0YXNldHMsIERhdGFzZXQgfSBmcm9tIFwiLi9kYXRhc2V0c1wiXG5pbXBvcnQgdHlwZSB7IERvY3VtZW50RmlsZXNJbmRleCB9IGZyb20gXCIuL2Rvc3NpZXJzX2xlZ2lzbGF0aWZzXCJcbmV4cG9ydCB7IHdhbGtEaXIgfSBmcm9tIFwiLi9maWxlX3N5c3RlbXNcIlxuaW1wb3J0IHsgd2Fsa0RpciB9IGZyb20gXCIuL2ZpbGVfc3lzdGVtc1wiXG5pbXBvcnQge1xuICBBY3RldXIsXG4gIENvbnZlcnQgYXMgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQsXG4gIE9yZ2FuZSxcbiAgUGhvdG8sXG59IGZyb20gXCIuL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIEFnZW5kYXNDb252ZXJ0LCBSZXVuaW9uIH0gZnJvbSBcIi4vdHlwZXMvYWdlbmRhc1wiXG5pbXBvcnQgeyBBbWVuZGVtZW50LCBDb252ZXJ0IGFzIEFtZW5kZW1lbnRzQ29udmVydCB9IGZyb20gXCIuL3R5cGVzL2FtZW5kZW1lbnRzXCJcbmltcG9ydCB7XG4gIENvbnZlcnQgYXMgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQsXG4gIERvY3VtZW50LFxuICBEb3NzaWVyUGFybGVtZW50YWlyZSxcbn0gZnJvbSBcIi4vdHlwZXMvZG9zc2llcnNfbGVnaXNsYXRpZnNcIlxuaW1wb3J0IHsgTGVnaXNsYXR1cmUgfSBmcm9tIFwiLi90eXBlcy9sZWdpc2xhdHVyZXNcIlxuaW1wb3J0IHsgQ29udmVydCBhcyBTY3J1dGluc0NvbnZlcnQsIFNjcnV0aW4gfSBmcm9tIFwiLi90eXBlcy9zY3J1dGluc1wiXG5pbXBvcnQgeyBDb252ZXJ0IGFzIFF1ZXN0aW9uc0NvbnZlcnQsIFF1ZXN0aW9uIH0gZnJvbSBcIi4vdHlwZXMvcXVlc3Rpb25zXCJcbmltcG9ydCB7IENvbnZlcnQgYXMgQ29tcHRlc1JlbmR1c0NvbnZlcnQsIENvbXB0ZVJlbmR1IH0gZnJvbSBcIi4vdHlwZXMvZGViYXRzXCJcbmltcG9ydCB7IFRleHRlc0xvaSwgQ29udmVydCBhcyBUZXh0ZXNMb2lDb252ZXJ0IH0gZnJvbSBcIi4vdHlwZXMvdGV4dGVzX2xvaVwiXG5pbXBvcnQgeyBEb2N1bWVudFVybEZvcm1hdCB9IGZyb20gXCIuL3VybHNcIlxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGEge1xuICByZWFkb25seSBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfVxuICByZWFkb25seSBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9XG4gIHJlYWRvbmx5IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfVxuICByZWFkb25seSBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9XG4gIHJlYWRvbmx5IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlUaXRyZUNoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH1cbiAgcmVhZG9ubHkgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9XG4gIHJlYWRvbmx5IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9XG4gIHJlYWRvbmx5IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxuICByZWFkb25seSByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9XG4gIHJlYWRvbmx5IHJldW5pb25zQnlEYXk6IHsgW2RheTogc3RyaW5nXTogUmV1bmlvbltdIH1cbiAgcmVhZG9ubHkgcmV1bmlvbnNCeURvc3NpZXJVaWQ6IHsgW2Rvc3NpZXJVaWQ6IHN0cmluZ106IFJldW5pb25bXSB9XG4gIHJlYWRvbmx5IHNjcnV0aW5CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBTY3J1dGluIH1cbiAgcmVhZG9ubHkgcXVlc3Rpb25CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBRdWVzdGlvbiB9XG4gIHJlYWRvbmx5IGNvbXB0ZVJlbmR1QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQ29tcHRlUmVuZHUgfVxufVxuXG5jb25zdCBkb2N1bWVudFVpZFJlZ2V4ID1cbiAgL14oKD88ZG9jdW1lbnRUeXBlPkFDSU58QUxDTnxBVkNFfEFWSVN8REVDTHxFVERJfExFVFR8TUVTU3xNSU9OfFBJT058UE5SRXxQUkpMfFJBUFB8UklORnxSSU9OKSg/PGNoYW1icmU+QU58Q0d8U04pKD88cmVwdWJsaXF1ZT5SXFxkKylbTFNdKD88bGVnaXNsYXR1cmU+XFxkKykoPzxldGF0PkJ8QlRBfEJUQ3xUQVApKD88bnVtZXJvPlxcZCspKC0uKik/KXwoKD88ZG9jdW1lbnRUeXBlMj5NSU9OKSg/PGNoYW1icmUyPkFOfFNOKSg/PHJlcHVibGlxdWUyPlJcXGQrKVtMU10oPzxsZWdpc2xhdHVyZTI+XFxkKyktTig/PG51bWVybzI+XFxkKykpJC9cbmNvbnN0IGRvc3NpZXJVaWRSZWdleCA9IC9eREwoUlxcZCspKExcXGQrKU4oXFxkKykkL1xuY29uc3QgcmV1bmlvblVpZFJlZ2V4ID1cbiAgL15SVShBTnxDR3xTTikoUlxcZCspKExcXGQrKShbQVNdXFxkezR9KShJREN8SURGTD98SURTKShcXGQrKSQvXG5jb25zdCBzY3J1dGluVWlkUmVnZXggPSAvXlZUKEFOfENHKShSXFxkKykoTFxcZCspVihcXGQrKSQvXG5jb25zdCBjb21wdGVSZW5kdVVpZFJlZ2V4OiBSZWdFeHAgPVxuICAvXkNSUyhBTnxDRykoUlxcZCspKExcXGQrKShTXFxkKykoT3xFfEQpKFxcZCspKE5cXGQrKSQvXG5jb25zdCBxdWVzdGlvblVpZFJlZ2V4OiBSZWdFeHAgPSAvXlFBTihSXFxkKykoTFxcZCspUShFfEd8T1NEKShcXGQrKSQvXG5cbnR5cGUgSXRlbUNvbnZlcnRlcjxUPiA9IChqc29uOiBzdHJpbmcpID0+IFRcblxuZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlSXRlbXM8VCBleHRlbmRzIHsgdWlkOiBzdHJpbmcgfT4oXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICBkYXRhc2V0czogRGF0YXNldFtdLFxuICBjb252ZXJ0VG9JdGVtOiBJdGVtQ29udmVydGVyPFQ+LFxuICBzdWJmb2xkZXJOYW1lOiBzdHJpbmdbXSxcbiAgZmlsZUV4dGVuc2lvbjogc3RyaW5nID0gXCJqc29uXCIsXG4gIHsgbm9WYWxpZGF0aW9uID0gZmFsc2UsIGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IEdlbmVyYXRvcjx7IGl0ZW06IFQ7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSwgdm9pZCwgdW5rbm93bj4ge1xuICBjb25zdCBpdGVtVWlkID0gbmV3IFNldDxzdHJpbmc+KClcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzKSB7XG4gICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBsZXQgZmlsZUV4dGVuc2lvblJlZ2V4ID0gbmV3IFJlZ0V4cChgXFxcXC4ke2ZpbGVFeHRlbnNpb259JGApXG4gICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgIGRhdGFEaXIsXG4gICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoZmlsZUV4dGVuc2lvblJlZ2V4LCBcIl9uZXR0b3llXCIpLFxuICAgIClcblxuICAgIGZvciAoY29uc3QgaXRlbVNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIHN1YmZvbGRlck5hbWUpKSB7XG4gICAgICBjb25zdCBpdGVtRmlsZW5hbWUgPSBpdGVtU3BsaXRQYXRoW2l0ZW1TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgIGlmICghaXRlbUZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGl0ZW1GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5pdGVtU3BsaXRQYXRoKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2l0ZW1GaWxlUGF0aH3igKZgKVxuICAgICAgfVxuXG4gICAgICBsZXQgaXRlbUpzb246IGFueSA9IGZzLnJlYWRGaWxlU3luYyhpdGVtRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBsZXQgaXRlbTogVCA9IG5vVmFsaWRhdGlvblxuICAgICAgICA/IEpTT04ucGFyc2UoaXRlbUpzb24pXG4gICAgICAgIDogY29udmVydFRvSXRlbShpdGVtSnNvbilcblxuICAgICAgaWYgKGl0ZW1VaWQuaGFzKGl0ZW0udWlkKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaXRlbVVpZC5hZGQoaXRlbS51aWQpXG4gICAgICB5aWVsZCB7IGl0ZW06IGl0ZW0sIGRhdGFzZXRMZWdpc2xhdHVyZTogZGF0YXNldC5sZWdpc2xhdHVyZSB9XG5cbiAgICAgIGl0ZW1Kc29uID0gbnVsbFxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24qIGl0ZXJMb2FkQXNzZW1ibGVlQWN0ZXVycyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIG9wdGlvbnMgPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBhY3RldXI6IEFjdGV1cjsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgZm9yIChjb25zdCB7XG4gICAgaXRlbTogYWN0ZXVyLFxuICAgIGRhdGFzZXRMZWdpc2xhdHVyZSxcbiAgfSBvZiBpdGVyTG9hZEFzc2VtYmxlZUl0ZW1zPEFjdGV1cj4oXG4gICAgZGF0YURpcixcbiAgICBsZWdpc2xhdHVyZSxcbiAgICBkYXRhc2V0cy5hY3RldXJzRXRPcmdhbmVzLFxuICAgIEFjdGV1cnNFdE9yZ2FuZXNDb252ZXJ0LnRvQWN0ZXVyLFxuICAgIFtcImFjdGV1cnNcIl0sXG4gICAgXCJqc29uXCIsXG4gICAgb3B0aW9ucyxcbiAgKSkge1xuICAgIHlpZWxkIHsgYWN0ZXVyLCBkYXRhc2V0TGVnaXNsYXR1cmUgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVPcmdhbmVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgb3B0aW9ucyA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IG9yZ2FuZTogT3JnYW5lOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBmb3IgKGNvbnN0IHtcbiAgICBpdGVtOiBvcmdhbmUsXG4gICAgZGF0YXNldExlZ2lzbGF0dXJlLFxuICB9IG9mIGl0ZXJMb2FkQXNzZW1ibGVlSXRlbXM8T3JnYW5lPihcbiAgICBkYXRhRGlyLFxuICAgIGxlZ2lzbGF0dXJlLFxuICAgIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMsXG4gICAgQWN0ZXVyc0V0T3JnYW5lc0NvbnZlcnQudG9PcmdhbmUsXG4gICAgW1wib3JnYW5lc1wiXSxcbiAgICBcImpzb25cIixcbiAgICBvcHRpb25zLFxuICApKSB7XG4gICAgeWllbGQgeyBvcmdhbmUsIGRhdGFzZXRMZWdpc2xhdHVyZSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZUFtZW5kZW1lbnRzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgb3B0aW9ucyA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGFtZW5kZW1lbnQ6IEFtZW5kZW1lbnQ7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGZvciAoY29uc3Qge1xuICAgIGl0ZW06IGFtZW5kZW1lbnQsXG4gICAgZGF0YXNldExlZ2lzbGF0dXJlLFxuICB9IG9mIGl0ZXJMb2FkQXNzZW1ibGVlSXRlbXM8QW1lbmRlbWVudD4oXG4gICAgZGF0YURpcixcbiAgICBsZWdpc2xhdHVyZSxcbiAgICBkYXRhc2V0cy5hbWVuZGVtZW50cyxcbiAgICBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50LFxuICAgIFtdLFxuICAgIFwianNvblwiLFxuICAgIG9wdGlvbnMsXG4gICkpIHtcbiAgICB5aWVsZCB7IGFtZW5kZW1lbnQsIGRhdGFzZXRMZWdpc2xhdHVyZSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZURvY3VtZW50cyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIG9wdGlvbnMgPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBkb2N1bWVudDogRG9jdW1lbnQ7IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGZvciAoY29uc3Qge1xuICAgIGl0ZW06IGRvY3VtZW50LFxuICAgIGRhdGFzZXRMZWdpc2xhdHVyZSxcbiAgfSBvZiBpdGVyTG9hZEFzc2VtYmxlZUl0ZW1zPERvY3VtZW50PihcbiAgICBkYXRhRGlyLFxuICAgIGxlZ2lzbGF0dXJlLFxuICAgIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMsXG4gICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb2N1bWVudCxcbiAgICBbXCJkb2N1bWVudHNcIl0sXG4gICAgXCJqc29uXCIsXG4gICAgb3B0aW9ucyxcbiAgKSkge1xuICAgIHlpZWxkIHsgZG9jdW1lbnQsIGRhdGFzZXRMZWdpc2xhdHVyZSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZURvc3NpZXJzUGFybGVtZW50YWlyZXMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICBvcHRpb25zID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHtcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgICBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlXG4gIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBmb3IgKGNvbnN0IHtcbiAgICBpdGVtOiBkb3NzaWVyUGFybGVtZW50YWlyZSxcbiAgICBkYXRhc2V0TGVnaXNsYXR1cmUsXG4gIH0gb2YgaXRlckxvYWRBc3NlbWJsZWVJdGVtczxEb3NzaWVyUGFybGVtZW50YWlyZT4oXG4gICAgZGF0YURpcixcbiAgICBsZWdpc2xhdHVyZSxcbiAgICBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzLFxuICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llclBhcmxlbWVudGFpcmUsXG4gICAgW1wiZG9zc2llcnNcIl0sXG4gICAgXCJqc29uXCIsXG4gICAgb3B0aW9ucyxcbiAgKSkge1xuICAgIHlpZWxkIHsgZG9zc2llclBhcmxlbWVudGFpcmUsIGRhdGFzZXRMZWdpc2xhdHVyZSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBpdGVyTG9hZEFzc2VtYmxlZVJldW5pb25zKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgb3B0aW9ucyA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IHJldW5pb246IFJldW5pb247IGRhdGFzZXRMZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUgfSxcbiAgdm9pZCxcbiAgdW5rbm93blxuPiB7XG4gIGZvciAoY29uc3Qge1xuICAgIGl0ZW06IHJldW5pb24sXG4gICAgZGF0YXNldExlZ2lzbGF0dXJlLFxuICB9IG9mIGl0ZXJMb2FkQXNzZW1ibGVlSXRlbXM8UmV1bmlvbj4oXG4gICAgZGF0YURpcixcbiAgICBsZWdpc2xhdHVyZSxcbiAgICBkYXRhc2V0cy5hZ2VuZGFzLFxuICAgIEFnZW5kYXNDb252ZXJ0LnRvUmV1bmlvbixcbiAgICBbXSxcbiAgICBcImpzb25cIixcbiAgICBvcHRpb25zLFxuICApKSB7XG4gICAgeWllbGQgeyByZXVuaW9uLCBkYXRhc2V0TGVnaXNsYXR1cmUgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVTY3J1dGlucyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIG9wdGlvbnMgPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyBzY3J1dGluOiBTY3J1dGluOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBmb3IgKGNvbnN0IHtcbiAgICBpdGVtOiBzY3J1dGluLFxuICAgIGRhdGFzZXRMZWdpc2xhdHVyZSxcbiAgfSBvZiBpdGVyTG9hZEFzc2VtYmxlZUl0ZW1zPFNjcnV0aW4+KFxuICAgIGRhdGFEaXIsXG4gICAgbGVnaXNsYXR1cmUsXG4gICAgZGF0YXNldHMuc2NydXRpbnMsXG4gICAgU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbixcbiAgICBbXSxcbiAgICBcImpzb25cIixcbiAgICBvcHRpb25zLFxuICApKSB7XG4gICAgeWllbGQgeyBzY3J1dGluLCBkYXRhc2V0TGVnaXNsYXR1cmUgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVRdWVzdGlvbnMoXG4gIGRhdGFEaXI6IHN0cmluZyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICBvcHRpb25zID0ge30sXG4pOiBHZW5lcmF0b3I8XG4gIHsgcXVlc3Rpb246IFF1ZXN0aW9uOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBmb3IgKGNvbnN0IHtcbiAgICBpdGVtOiBxdWVzdGlvbixcbiAgICBkYXRhc2V0TGVnaXNsYXR1cmUsXG4gIH0gb2YgaXRlckxvYWRBc3NlbWJsZWVJdGVtczxRdWVzdGlvbj4oXG4gICAgZGF0YURpcixcbiAgICBsZWdpc2xhdHVyZSxcbiAgICBkYXRhc2V0cy5xdWVzdGlvbnMsXG4gICAgUXVlc3Rpb25zQ29udmVydC50b1F1ZXN0aW9uLFxuICAgIFtdLFxuICAgIFwianNvblwiLFxuICAgIG9wdGlvbnMsXG4gICkpIHtcbiAgICB5aWVsZCB7IHF1ZXN0aW9uLCBkYXRhc2V0TGVnaXNsYXR1cmUgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVDb21wdGVzUmVuZHVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgb3B0aW9ucyA9IHt9LFxuKTogR2VuZXJhdG9yPFxuICB7IGNvbXB0ZVJlbmR1OiBDb21wdGVSZW5kdTsgZGF0YXNldExlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSB9LFxuICB2b2lkLFxuICB1bmtub3duXG4+IHtcbiAgZm9yIChjb25zdCB7XG4gICAgaXRlbTogY29tcHRlUmVuZHUsXG4gICAgZGF0YXNldExlZ2lzbGF0dXJlLFxuICB9IG9mIGl0ZXJMb2FkQXNzZW1ibGVlSXRlbXM8Q29tcHRlUmVuZHU+KFxuICAgIGRhdGFEaXIsXG4gICAgbGVnaXNsYXR1cmUsXG4gICAgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMsXG4gICAgQ29tcHRlc1JlbmR1c0NvbnZlcnQudG9Db21wdGVSZW5kdSxcbiAgICBbXSxcbiAgICBcInhtbFwiLFxuICAgIG9wdGlvbnMsXG4gICkpIHtcbiAgICB5aWVsZCB7IGNvbXB0ZVJlbmR1LCBkYXRhc2V0TGVnaXNsYXR1cmUgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogaXRlckxvYWRBc3NlbWJsZWVUZXh0ZUxvaShcbiAgZGF0YURpcjogc3RyaW5nLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIG9wdGlvbnMgPSB7fSxcbik6IEdlbmVyYXRvcjxcbiAgeyB0ZXh0ZUxvaTogVGV4dGVzTG9pOyBkYXRhc2V0TGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlIH0sXG4gIHZvaWQsXG4gIHVua25vd25cbj4ge1xuICBmb3IgKGNvbnN0IHtcbiAgICBpdGVtOiB0ZXh0ZUxvaSxcbiAgICBkYXRhc2V0TGVnaXNsYXR1cmUsXG4gIH0gb2YgaXRlckxvYWRBc3NlbWJsZWVJdGVtczxUZXh0ZXNMb2k+KFxuICAgIGRhdGFEaXIsXG4gICAgbGVnaXNsYXR1cmUsXG4gICAgZGF0YXNldHMudGV4dGVzTG9pLFxuICAgIFRleHRlc0xvaUNvbnZlcnQudG9UZXh0ZXNMb2ksXG4gICAgW10sXG4gICAgXCJqc29uXCIsXG4gICAgb3B0aW9ucyxcbiAgKSkge1xuICAgIHlpZWxkIHsgdGV4dGVMb2ksIGRhdGFzZXRMZWdpc2xhdHVyZSB9XG4gIH1cbn1cblxuLy8vIExvYWQgZGF0YSBmcm9tIHNwbGl0IGZpbGVzLlxuLy8vIERlcHJlY2F0ZWQ6IFVzZSBpdGVyTG9hZC4uLiBpdGVyYXRvcnMgaW5zdGVhZC5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQXNzZW1ibGVlRGF0YShcbiAgZGF0YURpcjogc3RyaW5nLFxuICBlbmFibGVkRGF0YXNldHM6IEVuYWJsZWREYXRhc2V0cyxcbiAgbGVnaXNsYXR1cmU6IExlZ2lzbGF0dXJlLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IERhdGEge1xuICBjb25zdCBhY3RldXJCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBBY3RldXIgfSA9IHt9XG4gIGNvbnN0IG9yZ2FuZUJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IE9yZ2FuZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BY3RldXJzRXRPcmdhbmVzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBhY3RldXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJhY3RldXJzXCJdKSkge1xuICAgICAgICBjb25zdCBhY3RldXJGaWxlbmFtZSA9IGFjdGV1clNwbGl0UGF0aFthY3RldXJTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFhY3RldXJGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhY3RldXJGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5hY3RldXJTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2FjdGV1ckZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0ZXVySnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGFjdGV1ckZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBhY3RldXIgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cihhY3RldXJKc29uKVxuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAoYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID0gYWN0ZXVyXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBvcmdhbmVTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJvcmdhbmVzXCJdKSkge1xuICAgICAgICBjb25zdCBvcmdhbmVGaWxlbmFtZSA9IG9yZ2FuZVNwbGl0UGF0aFtvcmdhbmVTcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFvcmdhbmVGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcmdhbmVGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5vcmdhbmVTcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke29yZ2FuZUZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgb3JnYW5lSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKG9yZ2FuZUZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBvcmdhbmUgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b09yZ2FuZShvcmdhbmVKc29uKVxuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcIm9yZ2FuZVwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAob3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID0gb3JnYW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEb3NzaWVyVWlkOiB7IFtkb3NzaWVyVWlkOiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgZGF0YXNldERpciA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWVcIiksXG4gICAgICApXG4gICAgICBmb3IgKGNvbnN0IHJldW5pb25TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCByZXVuaW9uRmlsZW5hbWUgPSByZXVuaW9uU3BsaXRQYXRoW3JldW5pb25TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFyZXVuaW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmV1bmlvbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnJldW5pb25TcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3JldW5pb25GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJldW5pb25Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMocmV1bmlvbkZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCByZXVuaW9uID0gQWdlbmRhc0NvbnZlcnQudG9SZXVuaW9uKHJldW5pb25Kc29uKVxuICAgICAgICBpZiAocmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV1bmlvbkJ5VWlkW3JldW5pb24udWlkXSA9IHJldW5pb25cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRheSA9IHJldW5pb24udGltZXN0YW1wRGVidXQudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF1cbiAgICAgICAgbGV0IHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV1cbiAgICAgICAgaWYgKHJldW5pb25zQXREYXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25zQXREYXkgPSByZXVuaW9uc0J5RGF5W2RheV0gPSBbXVxuICAgICAgICB9XG4gICAgICAgIHJldW5pb25zQXREYXkucHVzaChyZXVuaW9uKVxuXG4gICAgICAgIGNvbnN0IG9kaiA9IHJldW5pb24ub2RqXG4gICAgICAgIGlmIChvZGogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcG9pbnRPZGogb2Ygb2RqLnBvaW50c09kaiB8fCBbXSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBkb3NzaWVyTGVnaXNsYXRpZlJlZiBvZiBwb2ludE9kai5kb3NzaWVyc0xlZ2lzbGF0aWZzUmVmcyB8fFxuICAgICAgICAgICAgICBbXSkge1xuICAgICAgICAgICAgICBsZXQgcmV1bmlvbnNBdERvc3NpZXJVaWQgPVxuICAgICAgICAgICAgICAgIHJldW5pb25zQnlEb3NzaWVyVWlkW2Rvc3NpZXJMZWdpc2xhdGlmUmVmXVxuICAgICAgICAgICAgICBpZiAocmV1bmlvbnNBdERvc3NpZXJVaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkID0gcmV1bmlvbnNCeURvc3NpZXJVaWRbXG4gICAgICAgICAgICAgICAgICBkb3NzaWVyTGVnaXNsYXRpZlJlZlxuICAgICAgICAgICAgICAgIF0gPSBbXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldW5pb25zQXREb3NzaWVyVWlkLnB1c2gocmV1bmlvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBhbWVuZGVtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQW1lbmRlbWVudCB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5BbWVuZGVtZW50cykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hbWVuZGVtZW50cykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnRTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZW5hbWUgPVxuICAgICAgICAgIGFtZW5kZW1lbnRTcGxpdFBhdGhbYW1lbmRlbWVudFNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWFtZW5kZW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbWVuZGVtZW50RmlsZVBhdGggPSBwYXRoLmpvaW4oZGF0YXNldERpciwgLi4uYW1lbmRlbWVudFNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7YW1lbmRlbWVudEZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW1lbmRlbWVudEpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhhbWVuZGVtZW50RmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IGFtZW5kZW1lbnQgPSBBbWVuZGVtZW50c0NvbnZlcnQudG9BbWVuZGVtZW50KGFtZW5kZW1lbnRKc29uKVxuICAgICAgICBpZiAoYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9IGFtZW5kZW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGRvY3VtZW50QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9jdW1lbnQgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pbjoge1xuICAgIFt1aWQ6IHN0cmluZ106IERvc3NpZXJQYXJsZW1lbnRhaXJlXG4gIH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZDogeyBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZSB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5Eb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzLmRvc3NpZXJzTGVnaXNsYXRpZnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBkb2N1bWVudFNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIsIFtcImRvY3VtZW50c1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9jdW1lbnRGaWxlbmFtZSA9IGRvY3VtZW50U3BsaXRQYXRoW2RvY3VtZW50U3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9jdW1lbnRGaWxlbmFtZS5lbmRzV2l0aChcIi5qc29uXCIpKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb2N1bWVudEZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLmRvY3VtZW50U3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb2N1bWVudEZpbGVQYXRofeKApmApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZG9jdW1lbnRKc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoZG9jdW1lbnRGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9jdW1lbnQgPSBEb3NzaWVyc0xlZ2lzbGF0aWZzQ29udmVydC50b0RvY3VtZW50KGRvY3VtZW50SnNvbilcbiAgICAgICAgaWYgKGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZG9jdW1lbnRCeVVpZFtkb2N1bWVudC51aWRdID0gZG9jdW1lbnRcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGRvc3NpZXJTcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyLCBbXCJkb3NzaWVyc1wiXSkpIHtcbiAgICAgICAgY29uc3QgZG9zc2llckZpbGVuYW1lID0gZG9zc2llclNwbGl0UGF0aFtkb3NzaWVyU3BsaXRQYXRoLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmICghZG9zc2llckZpbGVuYW1lLmVuZHNXaXRoKFwiLmpzb25cIikpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvc3NpZXJGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5kb3NzaWVyU3BsaXRQYXRoKVxuICAgICAgICBpZiAobG9nKSB7XG4gICAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtkb3NzaWVyRmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3NzaWVySnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGRvc3NpZXJGaWxlUGF0aCwge1xuICAgICAgICAgIGVuY29kaW5nOiBcInV0ZjhcIixcbiAgICAgICAgfSlcbiAgICAgICAgY29uc3QgZG9zc2llciA9XG4gICAgICAgICAgRG9zc2llcnNMZWdpc2xhdGlmc0NvbnZlcnQudG9Eb3NzaWVyUGFybGVtZW50YWlyZShkb3NzaWVySnNvbilcbiAgICAgICAgY29uc3QgdGl0cmVEb3NzaWVyID0gZG9zc2llci50aXRyZURvc3NpZXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci5zZW5hdENoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIudGl0cmVDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbGV0IHBob3RvQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuUGhvdG9zKSB7XG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGBwaG90b3NfZGVwdXRlc18ke1xuICAgICAgICAgIC8vIFRPRE86IEhhbmRsZSBMZWdpc2xhdHVyZS5BbGwuXG4gICAgICAgICAgbGVnaXNsYXR1cmUgPT09IExlZ2lzbGF0dXJlLkFsbCA/IExlZ2lzbGF0dXJlLkRpeFNlcHQgOiBsZWdpc2xhdHVyZVxuICAgICAgICB9YCxcbiAgICAgICAgXCJkZXB1dGVzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB7XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgICAgIFwic2VuYXRldXJzLmpzb25cIixcbiAgICAgIClcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGpzb25GaWxlUGF0aCkpIHtcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgICAgT2JqZWN0LmFzc2lnbihwaG90b0J5VWlkLCBKU09OLnBhcnNlKGpzb24pKVxuICAgICAgfSBlbHNlIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYElnbm9yaW5nIG1pc3NpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBzY3J1dGluQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogU2NydXRpbiB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5TY3J1dGlucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5zY3J1dGlucykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGFzZXREaXIgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llXCIpLFxuICAgICAgKVxuXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW5TcGxpdFBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBzY3J1dGluRmlsZW5hbWUgPSBzY3J1dGluU3BsaXRQYXRoW3NjcnV0aW5TcGxpdFBhdGgubGVuZ3RoIC0gMV1cbiAgICAgICAgaWYgKCFzY3J1dGluRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2NydXRpbkZpbGVQYXRoID0gcGF0aC5qb2luKGRhdGFzZXREaXIsIC4uLnNjcnV0aW5TcGxpdFBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke3NjcnV0aW5GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNjcnV0aW5Kc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoc2NydXRpbkZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBzY3J1dGluID0gU2NydXRpbnNDb252ZXJ0LnRvU2NydXRpbihzY3J1dGluSnNvbilcbiAgICAgICAgaWYgKHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPSBzY3J1dGluXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBxdWVzdGlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFF1ZXN0aW9uIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlF1ZXN0aW9ucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBxdWVzdGlvblNwbGl0UGF0aCBvZiB3YWxrRGlyKGRhdGFzZXREaXIpKSB7XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uRmlsZW5hbWUgPSBxdWVzdGlvblNwbGl0UGF0aFtxdWVzdGlvblNwbGl0UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIXF1ZXN0aW9uRmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcXVlc3Rpb25GaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5xdWVzdGlvblNwbGl0UGF0aClcbiAgICAgICAgaWYgKGxvZykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7cXVlc3Rpb25GaWxlUGF0aH3igKZgKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uSnNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKHF1ZXN0aW9uRmlsZVBhdGgsIHtcbiAgICAgICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgICAgIH0pXG4gICAgICAgIGNvbnN0IHF1ZXN0aW9uID0gUXVlc3Rpb25zQ29udmVydC50b1F1ZXN0aW9uKHF1ZXN0aW9uSnNvbilcbiAgICAgICAgaWYgKHF1ZXN0aW9uQnlVaWRbcXVlc3Rpb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcXVlc3Rpb25CeVVpZFtxdWVzdGlvbi51aWRdID0gcXVlc3Rpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbXB0ZVJlbmR1QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQ29tcHRlUmVuZHUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQ29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBkYXRhc2V0RGlyID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZVwiKSxcbiAgICAgIClcblxuICAgICAgZm9yIChjb25zdCBjb21wdGVSZW5kdVBhdGggb2Ygd2Fsa0RpcihkYXRhc2V0RGlyKSkge1xuICAgICAgICBjb25zdCBjb21wdGVSZW5kdUZpbGVuYW1lID0gY29tcHRlUmVuZHVQYXRoW2NvbXB0ZVJlbmR1UGF0aC5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoIWNvbXB0ZVJlbmR1RmlsZW5hbWUuZW5kc1dpdGgoXCIuanNvblwiKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHRlUmVuZHVGaWxlUGF0aCA9IHBhdGguam9pbihkYXRhc2V0RGlyLCAuLi5jb21wdGVSZW5kdVBhdGgpXG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2NvbXB0ZVJlbmR1RmlsZVBhdGh94oCmYClcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wdGVSZW5kdUpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhjb21wdGVSZW5kdUZpbGVQYXRoLCB7XG4gICAgICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgICAgICB9KVxuICAgICAgICBjb25zdCBjb21wdGVSZW5kdSA9IENvbXB0ZXNSZW5kdXNDb252ZXJ0LnRvQ29tcHRlUmVuZHUoY29tcHRlUmVuZHVKc29uKVxuICAgICAgICBpZiAoY29tcHRlUmVuZHVCeVVpZFtjb21wdGVSZW5kdS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb21wdGVSZW5kdUJ5VWlkW2NvbXB0ZVJlbmR1LnVpZF0gPSBjb21wdGVSZW5kdVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gICAgcXVlc3Rpb25CeVVpZCxcbiAgICBjb21wdGVSZW5kdUJ5VWlkLFxuICB9XG59XG5cbi8vLyBMb2FkIGRhdGEgZnJvbSBiaWcgbW9ub2x5dGljIGZpbGVzLlxuLy8vIERlcHJlY2F0ZWQ6IEFzc2VtYmzDqWUgbmF0aW9uYWxlIG9wZW4gZGF0YSBubyBtb3JlIHVzZXMgbW9ub2x5dGljIGZpbGVzLlxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVEYXRhRnJvbUJpZ0ZpbGVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGVuYWJsZWREYXRhc2V0czogRW5hYmxlZERhdGFzZXRzLFxuICBsZWdpc2xhdHVyZTogTGVnaXNsYXR1cmUsXG4gIHsgbG9nID0gZmFsc2UgfSA9IHt9LFxuKTogRGF0YSB7XG4gIGNvbnN0IGFjdGV1ckJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFjdGV1ciB9ID0ge31cbiAgY29uc3Qgb3JnYW5lQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogT3JnYW5lIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLkFjdGV1cnNFdE9yZ2FuZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYWN0ZXVyc0V0T3JnYW5lcykge1xuICAgICAgaWYgKGRhdGFzZXQuaWdub3JlRm9yV2ViKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBpZiAoXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgZGF0YXNldC5sZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGxlZ2lzbGF0dXJlICE9PSBkYXRhc2V0LmxlZ2lzbGF0dXJlXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBkYXRhc2V0LmZpbGVuYW1lLnJlcGxhY2UoL1xcLmpzb24kLywgXCJfbmV0dG95ZS5qc29uXCIpLFxuICAgICAgKVxuICAgICAgaWYgKGxvZykge1xuICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgfVxuICAgICAgY29uc3QganNvbjogc3RyaW5nID0gZnMucmVhZEZpbGVTeW5jKGpzb25GaWxlUGF0aCwgeyBlbmNvZGluZzogXCJ1dGY4XCIgfSlcbiAgICAgIGNvbnN0IGFjdGV1cnNFdE9yZ2FuZXMgPSBBY3RldXJzRXRPcmdhbmVzQ29udmVydC50b0FjdGV1cnNFdE9yZ2FuZXMoanNvbilcbiAgICAgIGZvciAoY29uc3QgYWN0ZXVyIG9mIGFjdGV1cnNFdE9yZ2FuZXMuYWN0ZXVycykge1xuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcImFjdGV1clwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAoYWN0ZXVyQnlVaWRbYWN0ZXVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGFjdGV1ckJ5VWlkW2FjdGV1ci51aWRdID0gYWN0ZXVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3Qgb3JnYW5lIG9mIGFjdGV1cnNFdE9yZ2FuZXMub3JnYW5lcykge1xuICAgICAgICAvLyBLZWVwIHRoZSBmaXJzdCBleGlzdGluZyBcIm9yZ2FuZVwiLCBiZWNhdXNlIHRoZSBmaXJzdCB3cmFwcGVyIGlzIHRoZSBtb3N0IGNvbXBsZXRlLlxuICAgICAgICBpZiAob3JnYW5lQnlVaWRbb3JnYW5lLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIG9yZ2FuZUJ5VWlkW29yZ2FuZS51aWRdID0gb3JnYW5lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCByZXVuaW9uQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogUmV1bmlvbiB9ID0ge31cbiAgY29uc3QgcmV1bmlvbnNCeURheTogeyBbZGF5OiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGNvbnN0IHJldW5pb25zQnlEb3NzaWVyVWlkOiB7IFtkb3NzaWVyVWlkOiBzdHJpbmddOiBSZXVuaW9uW10gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQWdlbmRhcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5hZ2VuZGFzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgYWdlbmRhcyA9IEFnZW5kYXNDb252ZXJ0LnRvQWdlbmRhcyhqc29uKVxuICAgICAgZm9yIChjb25zdCByZXVuaW9uIG9mIGFnZW5kYXMucmV1bmlvbnMpIHtcbiAgICAgICAgaWYgKHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldW5pb25CeVVpZFtyZXVuaW9uLnVpZF0gPSByZXVuaW9uXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXkgPSByZXVuaW9uLnRpbWVzdGFtcERlYnV0LnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdXG4gICAgICAgIGxldCByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldXG4gICAgICAgIGlmIChyZXVuaW9uc0F0RGF5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXVuaW9uc0F0RGF5ID0gcmV1bmlvbnNCeURheVtkYXldID0gW11cbiAgICAgICAgfVxuICAgICAgICByZXVuaW9uc0F0RGF5LnB1c2gocmV1bmlvbilcblxuICAgICAgICBjb25zdCBvZGogPSByZXVuaW9uLm9kalxuICAgICAgICBpZiAob2RqICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHBvaW50T2RqIG9mIG9kai5wb2ludHNPZGogfHwgW10pIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZG9zc2llckxlZ2lzbGF0aWZSZWYgb2YgcG9pbnRPZGouZG9zc2llcnNMZWdpc2xhdGlmc1JlZnMgfHxcbiAgICAgICAgICAgICAgW10pIHtcbiAgICAgICAgICAgICAgbGV0IHJldW5pb25zQXREb3NzaWVyVWlkID1cbiAgICAgICAgICAgICAgICByZXVuaW9uc0J5RG9zc2llclVpZFtkb3NzaWVyTGVnaXNsYXRpZlJlZl1cbiAgICAgICAgICAgICAgaWYgKHJldW5pb25zQXREb3NzaWVyVWlkID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZCA9IHJldW5pb25zQnlEb3NzaWVyVWlkW1xuICAgICAgICAgICAgICAgICAgZG9zc2llckxlZ2lzbGF0aWZSZWZcbiAgICAgICAgICAgICAgICBdID0gW11cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXVuaW9uc0F0RG9zc2llclVpZC5wdXNoKHJldW5pb24pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgYW1lbmRlbWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IEFtZW5kZW1lbnQgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQW1lbmRlbWVudHMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuYW1lbmRlbWVudHMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBhbWVuZGVtZW50cyA9IEFtZW5kZW1lbnRzQ29udmVydC50b0FtZW5kZW1lbnRzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHRleHRlTGVnaXNsYXRpZiBvZiBhbWVuZGVtZW50cy50ZXh0ZXNMZWdpc2xhdGlmcykge1xuICAgICAgICBmb3IgKGNvbnN0IGFtZW5kZW1lbnQgb2YgdGV4dGVMZWdpc2xhdGlmLmFtZW5kZW1lbnRzKSB7XG4gICAgICAgICAgaWYgKGFtZW5kZW1lbnRCeVVpZFthbWVuZGVtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYW1lbmRlbWVudEJ5VWlkW2FtZW5kZW1lbnQudWlkXSA9IGFtZW5kZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBkb2N1bWVudEJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IERvY3VtZW50IH0gPSB7fVxuICBjb25zdCBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW46IHtcbiAgICBbdWlkOiBzdHJpbmddOiBEb3NzaWVyUGFybGVtZW50YWlyZVxuICB9ID0ge31cbiAgY29uc3QgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluOiB7XG4gICAgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmVcbiAgfSA9IHt9XG4gIGNvbnN0IGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogRG9zc2llclBhcmxlbWVudGFpcmUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuRG9zc2llcnNMZWdpc2xhdGlmcykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5kb3NzaWVyc0xlZ2lzbGF0aWZzKSB7XG4gICAgICBpZiAoZGF0YXNldC5pZ25vcmVGb3JXZWIpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBkYXRhc2V0LmxlZ2lzbGF0dXJlICE9PSBMZWdpc2xhdHVyZS5BbGwgJiZcbiAgICAgICAgbGVnaXNsYXR1cmUgIT09IGRhdGFzZXQubGVnaXNsYXR1cmVcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIGRhdGFzZXQuZmlsZW5hbWUucmVwbGFjZSgvXFwuanNvbiQvLCBcIl9uZXR0b3llLmpzb25cIiksXG4gICAgICApXG4gICAgICBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBMb2FkaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uOiBzdHJpbmcgPSBmcy5yZWFkRmlsZVN5bmMoanNvbkZpbGVQYXRoLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KVxuICAgICAgY29uc3QgZG9zc2llcnNMZWdpc2xhdGlmcyA9XG4gICAgICAgIERvc3NpZXJzTGVnaXNsYXRpZnNDb252ZXJ0LnRvRG9zc2llcnNMZWdpc2xhdGlmcyhqc29uKVxuICAgICAgZm9yIChjb25zdCBkb2N1bWVudCBvZiBkb3NzaWVyc0xlZ2lzbGF0aWZzLnRleHRlc0xlZ2lzbGF0aWZzKSB7XG4gICAgICAgIGlmIChkb2N1bWVudEJ5VWlkW2RvY3VtZW50LnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvY3VtZW50QnlVaWRbZG9jdW1lbnQudWlkXSA9IGRvY3VtZW50XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgZG9zc2llciBvZiBkb3NzaWVyc0xlZ2lzbGF0aWZzLmRvc3NpZXJzUGFybGVtZW50YWlyZXMpIHtcbiAgICAgICAgY29uc3QgdGl0cmVEb3NzaWVyID0gZG9zc2llci50aXRyZURvc3NpZXJcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRpdHJlRG9zc2llci5zZW5hdENoZW1pbiAmJlxuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID09PVxuICAgICAgICAgICAgdW5kZWZpbmVkXG4gICAgICAgICkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlTZW5hdENoZW1pblt0aXRyZURvc3NpZXIuc2VuYXRDaGVtaW5dID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aXRyZURvc3NpZXIudGl0cmVDaGVtaW4gJiZcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9PT1cbiAgICAgICAgICAgIHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5VGl0cmVDaGVtaW5bdGl0cmVEb3NzaWVyLnRpdHJlQ2hlbWluXSA9IGRvc3NpZXJcbiAgICAgICAgfVxuICAgICAgICBpZiAoZG9zc2llclBhcmxlbWVudGFpcmVCeVVpZFtkb3NzaWVyLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWRbZG9zc2llci51aWRdID0gZG9zc2llclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgcGhvdG9CeVVpZDogeyBbdWlkOiBzdHJpbmddOiBQaG90byB9ID0ge31cbiAgaWYgKGVuYWJsZWREYXRhc2V0cyAmIEVuYWJsZWREYXRhc2V0cy5QaG90b3MpIHtcbiAgICBjb25zdCBwaG90b0J5VWlkID0ge31cblxuICAgIHtcbiAgICAgIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgICAgICBkYXRhRGlyLFxuICAgICAgICBgcGhvdG9zX2RlcHV0ZXNfJHtcbiAgICAgICAgICAvLyBUT0RPOiBIYW5kbGUgTGVnaXNsYXR1cmUuQWxsLlxuICAgICAgICAgIGxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgPyBMZWdpc2xhdHVyZS5EaXhTZXB0IDogbGVnaXNsYXR1cmVcbiAgICAgICAgfWAsXG4gICAgICAgIFwiZGVwdXRlcy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuXG4gICAge1xuICAgICAgY29uc3QganNvbkZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4oXG4gICAgICAgIGRhdGFEaXIsXG4gICAgICAgIFwicGhvdG9zX3NlbmF0ZXVyc1wiLFxuICAgICAgICBcInNlbmF0ZXVycy5qc29uXCIsXG4gICAgICApXG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhqc29uRmlsZVBhdGgpKSB7XG4gICAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICAgIE9iamVjdC5hc3NpZ24ocGhvdG9CeVVpZCwgSlNPTi5wYXJzZShqc29uKSlcbiAgICAgIH0gZWxzZSBpZiAobG9nKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBJZ25vcmluZyBtaXNzaW5nIGZpbGU6ICR7anNvbkZpbGVQYXRofWApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc2NydXRpbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFNjcnV0aW4gfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuU2NydXRpbnMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuc2NydXRpbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBzY3J1dGlucyA9IFNjcnV0aW5zQ29udmVydC50b1NjcnV0aW5zKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHNjcnV0aW4gb2Ygc2NydXRpbnMuc2NydXRpbnMpIHtcbiAgICAgICAgaWYgKHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcnV0aW5CeVVpZFtzY3J1dGluLnVpZF0gPSBzY3J1dGluXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBxdWVzdGlvbkJ5VWlkOiB7IFt1aWQ6IHN0cmluZ106IFF1ZXN0aW9uIH0gPSB7fVxuICBpZiAoZW5hYmxlZERhdGFzZXRzICYgRW5hYmxlZERhdGFzZXRzLlF1ZXN0aW9ucykge1xuICAgIGZvciAoY29uc3QgZGF0YXNldCBvZiBkYXRhc2V0cy5xdWVzdGlvbnMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBxdWVzdGlvbnMgPSBRdWVzdGlvbnNDb252ZXJ0LnRvUXVlc3Rpb25zKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IHF1ZXN0aW9uIG9mIHF1ZXN0aW9ucy5xdWVzdGlvbnMpIHtcbiAgICAgICAgaWYgKHF1ZXN0aW9uQnlVaWRbcXVlc3Rpb24udWlkXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcXVlc3Rpb25CeVVpZFtxdWVzdGlvbi51aWRdID0gcXVlc3Rpb25cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNvbXB0ZVJlbmR1QnlVaWQ6IHsgW3VpZDogc3RyaW5nXTogQ29tcHRlUmVuZHUgfSA9IHt9XG4gIGlmIChlbmFibGVkRGF0YXNldHMgJiBFbmFibGVkRGF0YXNldHMuQ29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMuY29tcHRlc1JlbmR1c1NlYW5jZXMpIHtcbiAgICAgIGlmIChkYXRhc2V0Lmlnbm9yZUZvcldlYikge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgaWYgKFxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gTGVnaXNsYXR1cmUuQWxsICYmXG4gICAgICAgIGRhdGFzZXQubGVnaXNsYXR1cmUgIT09IExlZ2lzbGF0dXJlLkFsbCAmJlxuICAgICAgICBsZWdpc2xhdHVyZSAhPT0gZGF0YXNldC5sZWdpc2xhdHVyZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICAgICAgZGF0YURpcixcbiAgICAgICAgZGF0YXNldC5maWxlbmFtZS5yZXBsYWNlKC9cXC5qc29uJC8sIFwiX25ldHRveWUuanNvblwiKSxcbiAgICAgIClcbiAgICAgIGlmIChsb2cpIHtcbiAgICAgICAgY29uc29sZS5sb2coYExvYWRpbmcgZmlsZTogJHtqc29uRmlsZVBhdGh9YClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gICAgICBjb25zdCBjb21wdGVzUmVuZHVzID0gQ29tcHRlc1JlbmR1c0NvbnZlcnQudG9Db21wdGVzUmVuZHVzKGpzb24pXG4gICAgICBmb3IgKGNvbnN0IGNvbXB0ZVJlbmR1IG9mIGNvbXB0ZXNSZW5kdXMuY29tcHRlc1JlbmR1cykge1xuICAgICAgICBpZiAoY29tcHRlUmVuZHVCeVVpZFtjb21wdGVSZW5kdS51aWRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBjb21wdGVSZW5kdUJ5VWlkW2NvbXB0ZVJlbmR1LnVpZF0gPSBjb21wdGVSZW5kdVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhY3RldXJCeVVpZCxcbiAgICBhbWVuZGVtZW50QnlVaWQsXG4gICAgZG9jdW1lbnRCeVVpZCxcbiAgICBkb3NzaWVyUGFybGVtZW50YWlyZUJ5U2VuYXRDaGVtaW4sXG4gICAgZG9zc2llclBhcmxlbWVudGFpcmVCeVRpdHJlQ2hlbWluLFxuICAgIGRvc3NpZXJQYXJsZW1lbnRhaXJlQnlVaWQsXG4gICAgb3JnYW5lQnlVaWQsXG4gICAgcGhvdG9CeVVpZCxcbiAgICByZXVuaW9uQnlVaWQsXG4gICAgcmV1bmlvbnNCeURheSxcbiAgICByZXVuaW9uc0J5RG9zc2llclVpZCxcbiAgICBzY3J1dGluQnlVaWQsXG4gICAgcXVlc3Rpb25CeVVpZCxcbiAgICBjb21wdGVSZW5kdUJ5VWlkLFxuICB9XG59XG5cbi8qKlxuICogUmVhZCBpbmZvcyBvZiBhIGRvY3VtZW50IG9yIGEgZGl2aXNpb24gb2YgYSBkb2N1bWVudCBmcm9tIGZpbGUgc3lzdGVtXG4gKlxuICogQHBhcmFtIGRhdGFEaXJcbiAqIEBwYXJhbSB1aWQgVUlEIG9mIGEgZG9jdW1lbnQgb3IgYSBkaXZpc2lvblxuICogQHBhcmFtIGZvcm1hdHMgcmVxdWVzdGVkIGZvcm1hdHMgb2YgdGhlIGRvY3VtZW50IGluIGRlY3JlYXNpbmcgcHJlZmVyZW5jZSBvcmRlclxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZURvY3VtZW50RmlsZShcbiAgZGF0YURpcjogc3RyaW5nLFxuICB1aWQ6IHN0cmluZyxcbiAgZm9ybWF0czogRG9jdW1lbnRVcmxGb3JtYXRbXSxcbik6XG4gIHwge1xuICAgICAgZm9ybWF0OiBEb2N1bWVudFVybEZvcm1hdFxuICAgICAgcGF0aDogc3RyaW5nXG4gICAgICB1cmw6IHN0cmluZ1xuICAgIH1cbiAgfCB1bmRlZmluZWQge1xuICBjb25zdCBkb2N1bWVudHNEaXIgPSBwYXRoLmpvaW4oZGF0YURpciwgXCJEb2N1bWVudHNcIilcbiAgY29uc3QgZG9jdW1lbnREaXIgPSBwYXRoRnJvbURvY3VtZW50VWlkKGRvY3VtZW50c0RpciwgdWlkKVxuICBjb25zdCBpbmRleFBhdGggPSBwYXRoLmpvaW4oZG9jdW1lbnREaXIsIFwiaW5kZXguanNvblwiKVxuICBpZiAoIWZzLnBhdGhFeGlzdHNTeW5jKGluZGV4UGF0aCkpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH1cbiAgY29uc3QgaW5kZXggPSBmcy5yZWFkSnNvblN5bmMoaW5kZXhQYXRoKSBhcyBEb2N1bWVudEZpbGVzSW5kZXhcbiAgZm9yIChjb25zdCBmb3JtYXQgb2YgZm9ybWF0cykge1xuICAgIGZvciAoY29uc3QgeyBmaWxlbmFtZSwgdXJsIH0gb2YgaW5kZXhbZm9ybWF0XSA/PyBbXSkge1xuICAgICAgaWYgKGZpbGVuYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IGZvcm1hdCwgcGF0aDogcGF0aC5qb2luKGRvY3VtZW50RGlyLCBmaWxlbmFtZSksIHVybCB9XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxvYWRBc3NlbWJsZWVQaG90b3NEZXB1dGVzKFxuICBkYXRhRGlyOiBzdHJpbmcsXG4gIGxlZ2lzbGF0dXJlOiBMZWdpc2xhdHVyZSxcbiAgeyBsb2cgPSBmYWxzZSB9ID0ge30sXG4pOiB7IFt1aWQ6IHN0cmluZ106IFBob3RvIH0ge1xuICBjb25zdCBqc29uRmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihcbiAgICBkYXRhRGlyLFxuICAgIGBwaG90b3NfZGVwdXRlc18ke1xuICAgICAgLy8gVE9ETzogSGFuZGxlIExlZ2lzbGF0dXJlLkFsbC5cbiAgICAgIGxlZ2lzbGF0dXJlID09PSBMZWdpc2xhdHVyZS5BbGwgPyBMZWdpc2xhdHVyZS5EaXhTZXB0IDogbGVnaXNsYXR1cmVcbiAgICB9YCxcbiAgICBcImRlcHV0ZXMuanNvblwiLFxuICApXG4gIGlmIChsb2cpIHtcbiAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICB9XG4gIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gIHJldHVybiBKU09OLnBhcnNlKGpzb24pIGFzIHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbG9hZEFzc2VtYmxlZVBob3Rvc1NlbmF0ZXVycyhcbiAgZGF0YURpcjogc3RyaW5nLFxuICB7IGxvZyA9IGZhbHNlIH0gPSB7fSxcbik6IHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfSB7XG4gIGNvbnN0IGpzb25GaWxlUGF0aDogc3RyaW5nID0gcGF0aC5qb2luKFxuICAgIGRhdGFEaXIsXG4gICAgXCJwaG90b3Nfc2VuYXRldXJzXCIsXG4gICAgXCJzZW5hdGV1cnMuanNvblwiLFxuICApXG4gIGlmIChsb2cpIHtcbiAgICBjb25zb2xlLmxvZyhgTG9hZGluZyBmaWxlOiAke2pzb25GaWxlUGF0aH1gKVxuICB9XG4gIGNvbnN0IGpzb246IHN0cmluZyA9IGZzLnJlYWRGaWxlU3luYyhqc29uRmlsZVBhdGgsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pXG4gIHJldHVybiBKU09OLnBhcnNlKGpzb24pIGFzIHsgW3VpZDogc3RyaW5nXTogUGhvdG8gfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21Eb2N1bWVudFVpZChkb2N1bWVudHNEaXI6IHN0cmluZywgdWlkOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IHVpZC5tYXRjaChkb2N1bWVudFVpZFJlZ2V4KVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIGRvY3VtZW50IFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCBncm91cHMgPSBtYXRjaCEuZ3JvdXBzIGFzIHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cbiAgY29uc3QgZG9jdW1lbnRUeXBlID0gcGF0aC5qb2luKFxuICAgIGRvY3VtZW50c0RpcixcbiAgICBncm91cHMuZG9jdW1lbnRUeXBlID8/IGdyb3Vwcy5kb2N1bWVudFR5cGUyLFxuICApXG4gIGNvbnN0IGNoYW1icmVEaXIgPSBwYXRoLmpvaW4oZG9jdW1lbnRUeXBlLCBncm91cHMuY2hhbWJyZSA/PyBncm91cHMuY2hhbWJyZTIpXG4gIGNvbnN0IHJlcHVibGlxdWVEaXIgPSBwYXRoLmpvaW4oXG4gICAgY2hhbWJyZURpcixcbiAgICBncm91cHMucmVwdWJsaXF1ZSA/PyBncm91cHMucmVwdWJsaXF1ZTIsXG4gIClcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4oXG4gICAgcmVwdWJsaXF1ZURpcixcbiAgICBncm91cHMubGVnaXNsYXR1cmUgPz8gZ3JvdXBzLmxlZ2lzbGF0dXJlMixcbiAgKVxuICBjb25zdCBldGF0ID0gZ3JvdXBzLmV0YXRcbiAgaWYgKGV0YXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGZzLmVuc3VyZURpclN5bmMobGVnaXNsYXR1cmVEaXIpXG4gICAgcmV0dXJuIHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgdWlkKVxuICB9XG4gIGNvbnN0IGV0YXREaXIgPSBwYXRoLmpvaW4obGVnaXNsYXR1cmVEaXIsIGV0YXQpXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMFwiICsgKGdyb3Vwcy5udW1lcm8gPz8gZ3JvdXBzLm51bWVybzIpXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHJpbmcobnVtZXJvLmxlbmd0aCAtIDYpXG4gIGNvbnN0IG51bWVyb01pbGxpZXJzRGlyID0gcGF0aC5qb2luKGV0YXREaXIsIG51bWVyby5zdWJzdHJpbmcoMCwgMykpXG4gIGZzLmVuc3VyZURpclN5bmMobnVtZXJvTWlsbGllcnNEaXIpXG4gIHJldHVybiBwYXRoLmpvaW4obnVtZXJvTWlsbGllcnNEaXIsIHVpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tRG9zc2llclBhcmxlbWVudGFpcmVVaWQoXG4gIGRvc3NpZXJzRGlyOiBzdHJpbmcsXG4gIHVpZDogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGhGcm9tVWlkKGRvc3NpZXJzRGlyLCB1aWQsIGRvc3NpZXJVaWRSZWdleClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tUmV1bmlvblVpZChyZXVuaW9uc0Rpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG1hdGNoID0gcmV1bmlvblVpZFJlZ2V4LmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIHJldW5pb24gVUlEOiAke3VpZH1gLFxuICApXG4gIGNvbnN0IGNoYW1icmVEaXIgPSBwYXRoLmpvaW4ocmV1bmlvbnNEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgcmVwdWJsaXF1ZURpciA9IHBhdGguam9pbihjaGFtYnJlRGlyLCBtYXRjaCFbMl0pXG4gIGNvbnN0IGxlZ2lzbGF0dXJlRGlyID0gcGF0aC5qb2luKHJlcHVibGlxdWVEaXIsIG1hdGNoIVszXSlcbiAgY29uc3Qgc2Vzc2lvbkRpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbWF0Y2ghWzRdKVxuICBjb25zdCBpZERpciA9IHBhdGguam9pbihzZXNzaW9uRGlyLCBtYXRjaCFbNV0pXG4gIGxldCBudW1lcm8gPSBcIjAwMDAwMDAwMFwiICsgbWF0Y2ghWzZdXG4gIG51bWVybyA9IG51bWVyby5zdWJzdHJpbmcobnVtZXJvLmxlbmd0aCAtIDkpXG4gIGNvbnN0IG51bWVyb01pbGxpb25zRGlyID0gcGF0aC5qb2luKGlkRGlyLCBudW1lcm8uc3Vic3RyaW5nKDAsIDMpKVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihudW1lcm9NaWxsaW9uc0RpciwgbnVtZXJvLnN1YnN0cmluZygzLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21TY3J1dGluVWlkKHNjcnV0aW5zRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBzY3J1dGluVWlkUmVnZXguZXhlYyh1aWQpXG4gIGFzc2VydC5ub3RTdHJpY3RFcXVhbChcbiAgICBtYXRjaCxcbiAgICBudWxsLFxuICAgIGBVbmV4cGVjdGVkIHN0cnVjdHVyZSBmb3Igc2NydXRpbiBVSUQ6ICR7dWlkfWAsXG4gIClcbiAgY29uc3QgY2hhbWJyZURpciA9IHBhdGguam9pbihzY3J1dGluc0RpciwgbWF0Y2ghWzFdKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGNoYW1icmVEaXIsIG1hdGNoIVsyXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzNdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVs0XVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyaW5nKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cmluZygwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aEZyb21RdWVzdGlvblVpZChkYXRhRGlyOiBzdHJpbmcsIHVpZDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHBhdGhGcm9tVWlkKGRhdGFEaXIsIHVpZCwgcXVlc3Rpb25VaWRSZWdleClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhdGhGcm9tQ29tcHRlUmVuZHVVaWQoZGF0YURpcjogc3RyaW5nLCB1aWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBwYXRoRnJvbVVpZChkYXRhRGlyLCB1aWQsIGNvbXB0ZVJlbmR1VWlkUmVnZXgpXG59XG5cbi8vIEdldCBzdGFuZGFyZCBwYXRoIGZvciBvYmplY3Qgd2l0aCB1aWQgOiByZXB1YmxpcXVlID4gbGVnaXNsYXR1cmUgPiBncm91cCBvYmplY3RzIGJ5IHRob3VzYW5kc1xuZnVuY3Rpb24gcGF0aEZyb21VaWQoZGF0YURpcjogc3RyaW5nLCB1aWQ6IHN0cmluZywgZGF0YVJlZ2V4cDogUmVnRXhwKTogc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSBkYXRhUmVnZXhwLmV4ZWModWlkKVxuICBhc3NlcnQubm90U3RyaWN0RXF1YWwoXG4gICAgbWF0Y2gsXG4gICAgbnVsbCxcbiAgICBgVW5leHBlY3RlZCBzdHJ1Y3R1cmUgZm9yIG9iamVjdCB3aXRoIFVJRDogJHt1aWR9YCxcbiAgKVxuICBjb25zdCByZXB1YmxpcXVlRGlyID0gcGF0aC5qb2luKGRhdGFEaXIsIG1hdGNoIVsxXSlcbiAgY29uc3QgbGVnaXNsYXR1cmVEaXIgPSBwYXRoLmpvaW4ocmVwdWJsaXF1ZURpciwgbWF0Y2ghWzJdKVxuICBsZXQgbnVtZXJvID0gXCIwMDAwMDBcIiArIG1hdGNoIVszXVxuICBudW1lcm8gPSBudW1lcm8uc3Vic3RyaW5nKG51bWVyby5sZW5ndGggLSA2KVxuICBjb25zdCBudW1lcm9NaWxsaWVyc0RpciA9IHBhdGguam9pbihsZWdpc2xhdHVyZURpciwgbnVtZXJvLnN1YnN0cmluZygwLCAzKSlcbiAgZnMuZW5zdXJlRGlyU3luYyhudW1lcm9NaWxsaWVyc0RpcilcbiAgcmV0dXJuIHBhdGguam9pbihudW1lcm9NaWxsaWVyc0RpciwgdWlkKVxufVxuIl0sIm1hcHBpbmdzIjoiQUFBQTs7QUFFQSxPQUFPQSxNQUFNLE1BQU0sUUFBUTtBQUMzQixPQUFPQyxFQUFFLE1BQU0sVUFBVTtBQUN6QixPQUFPQyxJQUFJLE1BQU0sTUFBTTtBQUFBLFNBRWRDLGVBQWU7QUFBQSxTQUNmQyxRQUFRLEVBQUVELGVBQWU7QUFBQSxTQUV6QkUsT0FBTztBQUFBLFNBQ1BBLE9BQU87QUFBQSxTQUdkQyxPQUFPLElBQUlDLHVCQUF1QjtBQUFBLFNBSTNCRCxPQUFPLElBQUlFLGNBQWM7QUFBQSxTQUNiRixPQUFPLElBQUlHLGtCQUFrQjtBQUFBLFNBRWhESCxPQUFPLElBQUlJLDBCQUEwQjtBQUFBLFNBSTlCQyxXQUFXO0FBQUEsU0FDWEwsT0FBTyxJQUFJTSxlQUFlO0FBQUEsU0FDMUJOLE9BQU8sSUFBSU8sZ0JBQWdCO0FB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
package/lib/logger.js CHANGED
@@ -32,4 +32,4 @@ function runLogFun(printFunction) {
32
32
  if (silent) return;
33
33
  printFunction;
34
34
  }
35
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZWxpbWl0ZXIiLCJzaWxlbnQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJjb25zb2xlIiwiaW5mbyIsInJ1bkxvZ0Z1biIsInByaW50RnVuY3Rpb24iLCJfcmVmIl0sInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByaW50cyBhIGRlbGltaXRlciB0byB0aGUgY29uc29sZSBpZiB0aGUgYHNpbGVudGAgcGFyYW1ldGVyIGlzIGZhbHN5LlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2lsZW50IC0gSWYgdHJ1ZSwgdGhlIGRlbGltaXRlciB3aWxsIG5vdCBiZSBwcmludGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdGVyKHNpbGVudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIGlmIChzaWxlbnQpIHJldHVyblxuICBjb25zb2xlLmluZm8oXCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uXCIpXG59XG5cbi8qKlxuICogUHJpbnRzIHRoZSBnaXZlbiBmdW5jdGlvbiBpZiB0aGUgYHNpbGVudGAgZmxhZyBpcyBub3Qgc2V0IHRvIGB0cnVlYC5cbiAqXG4gKiBAcGFyYW0ge3ZvaWR9IHByaW50RnVuY3Rpb24gLSBUaGUgZnVuY3Rpb24gdG8gYmUgcHJpbnRlZC5cbiAqIEBwYXJhbSB7eyBzaWxlbnQ6IGJvb2xlYW4gfX0gW29wdGlvbnNdIC0gQW4gb3B0aW9uYWwgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGBzaWxlbnRgIGZsYWcuXG4gKiBAcmV0dXJuIHt2b2lkfSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhbnl0aGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkxvZ0Z1bihcbiAgcHJpbnRGdW5jdGlvbjogdm9pZCxcbiAgeyBzaWxlbnQgfTogeyBzaWxlbnQ6IGJvb2xlYW4gfSA9IHsgc2lsZW50OiBmYWxzZSB9LFxuKSB7XG4gIGlmIChzaWxlbnQpIHJldHVyblxuICBwcmludEZ1bmN0aW9uXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNBLFNBQVNBLENBQUEsRUFBMEI7RUFBQSxJQUF6QkMsTUFBZSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxLQUFLO0VBQy9DLElBQUlELE1BQU0sRUFBRTtFQUNaSSxPQUFPLENBQUNDLElBQUksQ0FBQywyQkFBMkIsQ0FBQztBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLFNBQVNBLENBQ3ZCQyxhQUFtQixFQUVuQjtFQUFBLElBQUFDLElBQUEsR0FBQVAsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BRGtDO01BQUVELE1BQU0sRUFBRTtJQUFNLENBQUM7SUFBakRBLE1BQU0sR0FBQVEsSUFBQSxDQUFOUixNQUFNO0VBRVIsSUFBSUEsTUFBTSxFQUFFO0VBQ1pPLGFBQWE7QUFDZiIsImlnbm9yZUxpc3QiOltdfQ==
35
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZWxpbWl0ZXIiLCJzaWxlbnQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJjb25zb2xlIiwiaW5mbyIsInJ1bkxvZ0Z1biIsInByaW50RnVuY3Rpb24iLCJfcmVmIl0sInNvdXJjZXMiOlsiLi4vc3JjL2xvZ2dlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFByaW50cyBhIGRlbGltaXRlciB0byB0aGUgY29uc29sZSBpZiB0aGUgYHNpbGVudGAgcGFyYW1ldGVyIGlzIGZhbHN5LlxuICpcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gc2lsZW50IC0gSWYgdHJ1ZSwgdGhlIGRlbGltaXRlciB3aWxsIG5vdCBiZSBwcmludGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdGVyKHNpbGVudDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gIGlmIChzaWxlbnQpIHJldHVyblxuICBjb25zb2xlLmluZm8oXCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0uXCIpXG59XG5cbi8qKlxuICogUHJpbnRzIHRoZSBnaXZlbiBmdW5jdGlvbiBpZiB0aGUgYHNpbGVudGAgZmxhZyBpcyBub3Qgc2V0IHRvIGB0cnVlYC5cbiAqXG4gKiBAcGFyYW0ge3ZvaWR9IHByaW50RnVuY3Rpb24gLSBUaGUgZnVuY3Rpb24gdG8gYmUgcHJpbnRlZC5cbiAqIEBwYXJhbSB7eyBzaWxlbnQ6IGJvb2xlYW4gfX0gW29wdGlvbnNdIC0gQW4gb3B0aW9uYWwgb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGBzaWxlbnRgIGZsYWcuXG4gKiBAcmV0dXJuIHt2b2lkfSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHJldHVybiBhbnl0aGluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bkxvZ0Z1bihcbiAgcHJpbnRGdW5jdGlvbjogdm9pZCxcbiAgeyBzaWxlbnQgfTogeyBzaWxlbnQ6IGJvb2xlYW4gfSA9IHsgc2lsZW50OiBmYWxzZSB9LFxuKSB7XG4gIGlmIChzaWxlbnQpIHJldHVyblxuICBwcmludEZ1bmN0aW9uXG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNBLFNBQVNBLENBQUEsRUFBMEI7RUFBQSxJQUF6QkMsTUFBZSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBRyxLQUFLO0VBQy9DLElBQUlELE1BQU0sRUFBRTtFQUNaSSxPQUFPLENBQUNDLElBQUksQ0FBQywyQkFBMkIsQ0FBQztBQUMzQzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNPLFNBQVNDLFNBQVNBLENBQ3ZCQyxhQUFtQixFQUVuQjtFQUFBLElBQUFDLElBQUEsR0FBQVAsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQUUsU0FBQSxHQUFBRixTQUFBLE1BRGtDO01BQUVELE1BQU0sRUFBRTtJQUFNLENBQUM7SUFBakRBLE1BQU0sR0FBQVEsSUFBQSxDQUFOUixNQUFNO0VBRVIsSUFBSUEsTUFBTSxFQUFFO0VBQ1pPLGFBQWE7QUFDZiJ9
package/lib/logger.mjs CHANGED
@@ -23,4 +23,4 @@ export function runLogFun(printFunction, {
23
23
  if (silent) return;
24
24
  printFunction;
25
25
  }
26
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZWxpbWl0ZXIiLCJzaWxlbnQiLCJjb25zb2xlIiwiaW5mbyIsInJ1bkxvZ0Z1biIsInByaW50RnVuY3Rpb24iXSwic291cmNlcyI6WyIuLi9zcmMvbG9nZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJpbnRzIGEgZGVsaW1pdGVyIHRvIHRoZSBjb25zb2xlIGlmIHRoZSBgc2lsZW50YCBwYXJhbWV0ZXIgaXMgZmFsc3kuXG4gKlxuICogQHBhcmFtIHtib29sZWFufSBzaWxlbnQgLSBJZiB0cnVlLCB0aGUgZGVsaW1pdGVyIHdpbGwgbm90IGJlIHByaW50ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ZXIoc2lsZW50OiBib29sZWFuID0gZmFsc2UpIHtcbiAgaWYgKHNpbGVudCkgcmV0dXJuXG4gIGNvbnNvbGUuaW5mbyhcIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS5cIilcbn1cblxuLyoqXG4gKiBQcmludHMgdGhlIGdpdmVuIGZ1bmN0aW9uIGlmIHRoZSBgc2lsZW50YCBmbGFnIGlzIG5vdCBzZXQgdG8gYHRydWVgLlxuICpcbiAqIEBwYXJhbSB7dm9pZH0gcHJpbnRGdW5jdGlvbiAtIFRoZSBmdW5jdGlvbiB0byBiZSBwcmludGVkLlxuICogQHBhcmFtIHt7IHNpbGVudDogYm9vbGVhbiB9fSBbb3B0aW9uc10gLSBBbiBvcHRpb25hbCBvYmplY3QgY29udGFpbmluZyB0aGUgYHNpbGVudGAgZmxhZy5cbiAqIEByZXR1cm4ge3ZvaWR9IFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuTG9nRnVuKFxuICBwcmludEZ1bmN0aW9uOiB2b2lkLFxuICB7IHNpbGVudCB9OiB7IHNpbGVudDogYm9vbGVhbiB9ID0geyBzaWxlbnQ6IGZhbHNlIH0sXG4pIHtcbiAgaWYgKHNpbGVudCkgcmV0dXJuXG4gIHByaW50RnVuY3Rpb25cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0EsU0FBU0EsQ0FBQ0MsTUFBZSxHQUFHLEtBQUssRUFBRTtFQUNqRCxJQUFJQSxNQUFNLEVBQUU7RUFDWkMsT0FBTyxDQUFDQyxJQUFJLENBQUMsMkJBQTJCLENBQUM7QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNDLFNBQVNBLENBQ3ZCQyxhQUFtQixFQUNuQjtFQUFFSjtBQUE0QixDQUFDLEdBQUc7RUFBRUEsTUFBTSxFQUFFO0FBQU0sQ0FBQyxFQUNuRDtFQUNBLElBQUlBLE1BQU0sRUFBRTtFQUNaSSxhQUFhO0FBQ2YiLCJpZ25vcmVMaXN0IjpbXX0=
26
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJkZWxpbWl0ZXIiLCJzaWxlbnQiLCJjb25zb2xlIiwiaW5mbyIsInJ1bkxvZ0Z1biIsInByaW50RnVuY3Rpb24iXSwic291cmNlcyI6WyIuLi9zcmMvbG9nZ2VyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUHJpbnRzIGEgZGVsaW1pdGVyIHRvIHRoZSBjb25zb2xlIGlmIHRoZSBgc2lsZW50YCBwYXJhbWV0ZXIgaXMgZmFsc3kuXG4gKlxuICogQHBhcmFtIHtib29sZWFufSBzaWxlbnQgLSBJZiB0cnVlLCB0aGUgZGVsaW1pdGVyIHdpbGwgbm90IGJlIHByaW50ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ZXIoc2lsZW50OiBib29sZWFuID0gZmFsc2UpIHtcbiAgaWYgKHNpbGVudCkgcmV0dXJuXG4gIGNvbnNvbGUuaW5mbyhcIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS5cIilcbn1cblxuLyoqXG4gKiBQcmludHMgdGhlIGdpdmVuIGZ1bmN0aW9uIGlmIHRoZSBgc2lsZW50YCBmbGFnIGlzIG5vdCBzZXQgdG8gYHRydWVgLlxuICpcbiAqIEBwYXJhbSB7dm9pZH0gcHJpbnRGdW5jdGlvbiAtIFRoZSBmdW5jdGlvbiB0byBiZSBwcmludGVkLlxuICogQHBhcmFtIHt7IHNpbGVudDogYm9vbGVhbiB9fSBbb3B0aW9uc10gLSBBbiBvcHRpb25hbCBvYmplY3QgY29udGFpbmluZyB0aGUgYHNpbGVudGAgZmxhZy5cbiAqIEByZXR1cm4ge3ZvaWR9IFRoaXMgZnVuY3Rpb24gZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVuTG9nRnVuKFxuICBwcmludEZ1bmN0aW9uOiB2b2lkLFxuICB7IHNpbGVudCB9OiB7IHNpbGVudDogYm9vbGVhbiB9ID0geyBzaWxlbnQ6IGZhbHNlIH0sXG4pIHtcbiAgaWYgKHNpbGVudCkgcmV0dXJuXG4gIHByaW50RnVuY3Rpb25cbn1cbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU8sU0FBU0EsU0FBU0EsQ0FBQ0MsTUFBZSxHQUFHLEtBQUssRUFBRTtFQUNqRCxJQUFJQSxNQUFNLEVBQUU7RUFDWkMsT0FBTyxDQUFDQyxJQUFJLENBQUMsMkJBQTJCLENBQUM7QUFDM0M7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPLFNBQVNDLFNBQVNBLENBQ3ZCQyxhQUFtQixFQUNuQjtFQUFFSjtBQUE0QixDQUFDLEdBQUc7RUFBRUEsTUFBTSxFQUFFO0FBQU0sQ0FBQyxFQUNuRDtFQUNBLElBQUlBLE1BQU0sRUFBRTtFQUNaSSxhQUFhO0FBQ2YifQ==
package/lib/organes.js CHANGED
@@ -19,4 +19,4 @@ function shortNameFromOrgane(organe) {
19
19
  return organe.libelleAbrege;
20
20
  }
21
21
  }
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWN0ZXVyc19ldF9vcmdhbmVzIiwicmVxdWlyZSIsInNob3J0TmFtZUZyb21PcmdhbmUiLCJvcmdhbmUiLCJ1bmRlZmluZWQiLCJjb2RlVHlwZSIsIkNvZGVUeXBlT3JnYW5lIiwiQ21wIiwiR291dmVybmVtZW50IiwibGliZWxsZSIsImxpYmVsbGVBYnJlZ2UiXSwic291cmNlcyI6WyIuLi9zcmMvb3JnYW5lcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2RlVHlwZU9yZ2FuZSwgT3JnYW5lIH0gZnJvbSBcIi4vdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIHNob3J0TmFtZUZyb21PcmdhbmUob3JnYW5lOiBPcmdhbmUgfCB1bmRlZmluZWQgfCBudWxsKTogc3RyaW5nIHtcbiAgaWYgKG9yZ2FuZSA9PT0gbnVsbCB8fCBvcmdhbmUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBcIk9yZ2FuZSBpbmNvbm51XCJcbiAgfVxuICBzd2l0Y2ggKG9yZ2FuZS5jb2RlVHlwZSkge1xuICAgIGNhc2UgQ29kZVR5cGVPcmdhbmUuQ21wOlxuICAgICAgcmV0dXJuIFwiQ29tbWlzc2lvbiBtaXh0ZSBwYXJpdGFpcmVcIlxuICAgIGNhc2UgQ29kZVR5cGVPcmdhbmUuR291dmVybmVtZW50OlxuICAgICAgcmV0dXJuIG9yZ2FuZS5saWJlbGxlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBvcmdhbmUubGliZWxsZUFicmVnZVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxtQkFBQSxHQUFBQyxPQUFBO0FBRU8sU0FBU0MsbUJBQW1CQSxDQUFDQyxNQUFpQyxFQUFVO0VBQzdFLElBQUlBLE1BQU0sS0FBSyxJQUFJLElBQUlBLE1BQU0sS0FBS0MsU0FBUyxFQUFFO0lBQzNDLE9BQU8sZ0JBQWdCO0VBQ3pCO0VBQ0EsUUFBUUQsTUFBTSxDQUFDRSxRQUFRO0lBQ3JCLEtBQUtDLGtDQUFjLENBQUNDLEdBQUc7TUFDckIsT0FBTyw0QkFBNEI7SUFDckMsS0FBS0Qsa0NBQWMsQ0FBQ0UsWUFBWTtNQUM5QixPQUFPTCxNQUFNLENBQUNNLE9BQU87SUFDdkI7TUFDRSxPQUFPTixNQUFNLENBQUNPLGFBQWE7RUFDL0I7QUFDRiIsImlnbm9yZUxpc3QiOltdfQ==
22
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfYWN0ZXVyc19ldF9vcmdhbmVzIiwicmVxdWlyZSIsInNob3J0TmFtZUZyb21PcmdhbmUiLCJvcmdhbmUiLCJ1bmRlZmluZWQiLCJjb2RlVHlwZSIsIkNvZGVUeXBlT3JnYW5lIiwiQ21wIiwiR291dmVybmVtZW50IiwibGliZWxsZSIsImxpYmVsbGVBYnJlZ2UiXSwic291cmNlcyI6WyIuLi9zcmMvb3JnYW5lcy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb2RlVHlwZU9yZ2FuZSwgT3JnYW5lIH0gZnJvbSBcIi4vdHlwZXMvYWN0ZXVyc19ldF9vcmdhbmVzXCJcblxuZXhwb3J0IGZ1bmN0aW9uIHNob3J0TmFtZUZyb21PcmdhbmUob3JnYW5lOiBPcmdhbmUgfCB1bmRlZmluZWQgfCBudWxsKTogc3RyaW5nIHtcbiAgaWYgKG9yZ2FuZSA9PT0gbnVsbCB8fCBvcmdhbmUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBcIk9yZ2FuZSBpbmNvbm51XCJcbiAgfVxuICBzd2l0Y2ggKG9yZ2FuZS5jb2RlVHlwZSkge1xuICAgIGNhc2UgQ29kZVR5cGVPcmdhbmUuQ21wOlxuICAgICAgcmV0dXJuIFwiQ29tbWlzc2lvbiBtaXh0ZSBwYXJpdGFpcmVcIlxuICAgIGNhc2UgQ29kZVR5cGVPcmdhbmUuR291dmVybmVtZW50OlxuICAgICAgcmV0dXJuIG9yZ2FuZS5saWJlbGxlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBvcmdhbmUubGliZWxsZUFicmVnZVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxJQUFBQSxtQkFBQSxHQUFBQyxPQUFBO0FBRU8sU0FBU0MsbUJBQW1CQSxDQUFDQyxNQUFpQyxFQUFVO0VBQzdFLElBQUlBLE1BQU0sS0FBSyxJQUFJLElBQUlBLE1BQU0sS0FBS0MsU0FBUyxFQUFFO0lBQzNDLE9BQU8sZ0JBQWdCO0VBQ3pCO0VBQ0EsUUFBUUQsTUFBTSxDQUFDRSxRQUFRO0lBQ3JCLEtBQUtDLGtDQUFjLENBQUNDLEdBQUc7TUFDckIsT0FBTyw0QkFBNEI7SUFDckMsS0FBS0Qsa0NBQWMsQ0FBQ0UsWUFBWTtNQUM5QixPQUFPTCxNQUFNLENBQUNNLE9BQU87SUFDdkI7TUFDRSxPQUFPTixNQUFNLENBQUNPLGFBQWE7RUFDL0I7QUFDRiJ9
package/lib/organes.mjs CHANGED
@@ -12,4 +12,4 @@ export function shortNameFromOrgane(organe) {
12
12
  return organe.libelleAbrege;
13
13
  }
14
14
  }
15
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2RlVHlwZU9yZ2FuZSIsInNob3J0TmFtZUZyb21PcmdhbmUiLCJvcmdhbmUiLCJ1bmRlZmluZWQiLCJjb2RlVHlwZSIsIkNtcCIsIkdvdXZlcm5lbWVudCIsImxpYmVsbGUiLCJsaWJlbGxlQWJyZWdlIl0sInNvdXJjZXMiOlsiLi4vc3JjL29yZ2FuZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29kZVR5cGVPcmdhbmUsIE9yZ2FuZSB9IGZyb20gXCIuL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBzaG9ydE5hbWVGcm9tT3JnYW5lKG9yZ2FuZTogT3JnYW5lIHwgdW5kZWZpbmVkIHwgbnVsbCk6IHN0cmluZyB7XG4gIGlmIChvcmdhbmUgPT09IG51bGwgfHwgb3JnYW5lID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gXCJPcmdhbmUgaW5jb25udVwiXG4gIH1cbiAgc3dpdGNoIChvcmdhbmUuY29kZVR5cGUpIHtcbiAgICBjYXNlIENvZGVUeXBlT3JnYW5lLkNtcDpcbiAgICAgIHJldHVybiBcIkNvbW1pc3Npb24gbWl4dGUgcGFyaXRhaXJlXCJcbiAgICBjYXNlIENvZGVUeXBlT3JnYW5lLkdvdXZlcm5lbWVudDpcbiAgICAgIHJldHVybiBvcmdhbmUubGliZWxsZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gb3JnYW5lLmxpYmVsbGVBYnJlZ2VcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiU0FBU0EsY0FBYztBQUV2QixPQUFPLFNBQVNDLG1CQUFtQkEsQ0FBQ0MsTUFBaUMsRUFBVTtFQUM3RSxJQUFJQSxNQUFNLEtBQUssSUFBSSxJQUFJQSxNQUFNLEtBQUtDLFNBQVMsRUFBRTtJQUMzQyxPQUFPLGdCQUFnQjtFQUN6QjtFQUNBLFFBQVFELE1BQU0sQ0FBQ0UsUUFBUTtJQUNyQixLQUFLSixjQUFjLENBQUNLLEdBQUc7TUFDckIsT0FBTyw0QkFBNEI7SUFDckMsS0FBS0wsY0FBYyxDQUFDTSxZQUFZO01BQzlCLE9BQU9KLE1BQU0sQ0FBQ0ssT0FBTztJQUN2QjtNQUNFLE9BQU9MLE1BQU0sQ0FBQ00sYUFBYTtFQUMvQjtBQUNGIiwiaWdub3JlTGlzdCI6W119
15
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJDb2RlVHlwZU9yZ2FuZSIsInNob3J0TmFtZUZyb21PcmdhbmUiLCJvcmdhbmUiLCJ1bmRlZmluZWQiLCJjb2RlVHlwZSIsIkNtcCIsIkdvdXZlcm5lbWVudCIsImxpYmVsbGUiLCJsaWJlbGxlQWJyZWdlIl0sInNvdXJjZXMiOlsiLi4vc3JjL29yZ2FuZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29kZVR5cGVPcmdhbmUsIE9yZ2FuZSB9IGZyb20gXCIuL3R5cGVzL2FjdGV1cnNfZXRfb3JnYW5lc1wiXG5cbmV4cG9ydCBmdW5jdGlvbiBzaG9ydE5hbWVGcm9tT3JnYW5lKG9yZ2FuZTogT3JnYW5lIHwgdW5kZWZpbmVkIHwgbnVsbCk6IHN0cmluZyB7XG4gIGlmIChvcmdhbmUgPT09IG51bGwgfHwgb3JnYW5lID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gXCJPcmdhbmUgaW5jb25udVwiXG4gIH1cbiAgc3dpdGNoIChvcmdhbmUuY29kZVR5cGUpIHtcbiAgICBjYXNlIENvZGVUeXBlT3JnYW5lLkNtcDpcbiAgICAgIHJldHVybiBcIkNvbW1pc3Npb24gbWl4dGUgcGFyaXRhaXJlXCJcbiAgICBjYXNlIENvZGVUeXBlT3JnYW5lLkdvdXZlcm5lbWVudDpcbiAgICAgIHJldHVybiBvcmdhbmUubGliZWxsZVxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gb3JnYW5lLmxpYmVsbGVBYnJlZ2VcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiU0FBU0EsY0FBYztBQUV2QixPQUFPLFNBQVNDLG1CQUFtQkEsQ0FBQ0MsTUFBaUMsRUFBVTtFQUM3RSxJQUFJQSxNQUFNLEtBQUssSUFBSSxJQUFJQSxNQUFNLEtBQUtDLFNBQVMsRUFBRTtJQUMzQyxPQUFPLGdCQUFnQjtFQUN6QjtFQUNBLFFBQVFELE1BQU0sQ0FBQ0UsUUFBUTtJQUNyQixLQUFLSixjQUFjLENBQUNLLEdBQUc7TUFDckIsT0FBTyw0QkFBNEI7SUFDckMsS0FBS0wsY0FBYyxDQUFDTSxZQUFZO01BQzlCLE9BQU9KLE1BQU0sQ0FBQ0ssT0FBTztJQUN2QjtNQUNFLE9BQU9MLE1BQU0sQ0FBQ00sYUFBYTtFQUMvQjtBQUNGIn0=