@tuki-io/tuki-widgets 0.0.219-dev.8 → 0.0.219-dev.9

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 (171) hide show
  1. package/README.md +24 -24
  2. package/esm2020/contact-center/cc-readiness/cc-readiness.module.mjs +1 -1
  3. package/esm2020/contact-center/cc-readiness/cc-readiness.service.mjs +1 -1
  4. package/esm2020/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.mjs +3 -3
  5. package/esm2020/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.mjs +3 -3
  6. package/esm2020/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.mjs +2 -2
  7. package/esm2020/di2mt/widgets/upgrade-overview/cards/pending-activation-users/pending-activation-users.component.mjs +17 -17
  8. package/esm2020/lib/widgets.component.mjs +9 -9
  9. package/esm2020/lib/widgets.module.mjs +1 -1
  10. package/esm2020/lib/widgets.service.mjs +1 -1
  11. package/esm2020/public-api.mjs +1 -1
  12. package/esm2020/user-creation/src/app.constants.mjs +1 -1
  13. package/esm2020/user-creation/src/classes/notification.mjs +1 -1
  14. package/esm2020/user-creation/src/classes/site.mjs +1 -1
  15. package/esm2020/user-creation/src/environments/environment.mjs +1 -1
  16. package/esm2020/user-creation/src/interfaces/user-creation-wizard.interfaces.mjs +1 -1
  17. package/esm2020/user-creation/src/shared/components/notification/notification.component.mjs +3 -3
  18. package/esm2020/user-creation/src/shared/pipes/truncate.pipe.mjs +1 -1
  19. package/esm2020/user-creation/src/shared/services/notification.service.mjs +1 -1
  20. package/esm2020/user-creation/src/shared/services/user-creation-api.service.mjs +1 -1
  21. package/esm2020/user-creation/src/shared/services/utils.mjs +1 -1
  22. package/esm2020/user-creation/src/utils/app-loader/app-loader.mjs +3 -3
  23. package/esm2020/user-creation/src/utils/build-savable-end-user.mjs +1 -1
  24. package/esm2020/user-creation/src/utils/device-default-prefix.mjs +19 -2
  25. package/esm2020/user-creation/src/utils/device-name-dynamic-tokens.mjs +4 -0
  26. package/esm2020/user-creation/src/utils/device-name-validation.mjs +1 -1
  27. package/esm2020/user-creation/src/utils/model.mjs +1 -1
  28. package/esm2020/user-creation/src/utils/parse-device-name-rule.mjs +6 -3
  29. package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.mjs +60 -13
  30. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +3 -3
  31. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.mjs +13 -9
  32. package/esm2020/user-device-manage/public-api.mjs +1 -1
  33. package/esm2020/user-device-manage/src/app.constants.mjs +1 -1
  34. package/esm2020/user-device-manage/src/classes/device.mjs +1 -1
  35. package/esm2020/user-device-manage/src/classes/deviceProfile.mjs +1 -1
  36. package/esm2020/user-device-manage/src/classes/line-association-interface.mjs +1 -1
  37. package/esm2020/user-device-manage/src/classes/line-association.mjs +1 -1
  38. package/esm2020/user-device-manage/src/classes/line-call-info-display.mjs +1 -1
  39. package/esm2020/user-device-manage/src/classes/line-directory.mjs +1 -1
  40. package/esm2020/user-device-manage/src/classes/line.mjs +1 -1
  41. package/esm2020/user-device-manage/src/classes/notification.mjs +1 -1
  42. package/esm2020/user-device-manage/src/classes/recording-options.mjs +1 -1
  43. package/esm2020/user-device-manage/src/classes/simplified-user.mjs +1 -1
  44. package/esm2020/user-device-manage/src/classes/site-defaults.mjs +1 -1
  45. package/esm2020/user-device-manage/src/classes/translation-pattern.mjs +1 -1
  46. package/esm2020/user-device-manage/src/classes/types.mjs +1 -1
  47. package/esm2020/user-device-manage/src/common-functions.mjs +1 -1
  48. package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +3 -3
  49. package/esm2020/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.mjs +3 -3
  50. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.mjs +3 -3
  51. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.mjs +3 -3
  52. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line.component.mjs +1 -1
  53. package/esm2020/user-device-manage/src/device-info/device-info.component.mjs +3 -3
  54. package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +2 -2
  55. package/esm2020/user-device-manage/src/environments/environment.mjs +1 -1
  56. package/esm2020/user-device-manage/src/interseptors/auth.interceptor.mjs +1 -1
  57. package/esm2020/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +3 -3
  58. package/esm2020/user-device-manage/src/material.module.mjs +1 -1
  59. package/esm2020/user-device-manage/src/notifications/notification.component.mjs +3 -3
  60. package/esm2020/user-device-manage/src/pipes/mac-address.pipe.mjs +1 -1
  61. package/esm2020/user-device-manage/src/services/api.service.mjs +1 -1
  62. package/esm2020/user-device-manage/src/services/device.service.mjs +1 -1
  63. package/esm2020/user-device-manage/src/services/dns.service.mjs +1 -1
  64. package/esm2020/user-device-manage/src/services/line.service.mjs +1 -1
  65. package/esm2020/user-device-manage/src/services/notification.service.mjs +1 -1
  66. package/esm2020/user-device-manage/src/services/removeKynFromIBM.service.mjs +1 -1
  67. package/esm2020/user-device-manage/src/services/site-settings.service.mjs +1 -1
  68. package/esm2020/user-device-manage/src/services/sorting-utils.service.mjs +1 -1
  69. package/esm2020/user-device-manage/src/services/user.service.mjs +1 -1
  70. package/esm2020/user-device-manage/src/services/utils.service.mjs +1 -1
  71. package/esm2020/user-device-manage/src/services/validation.service.mjs +1 -1
  72. package/esm2020/user-device-manage/src/shared/tk-page-section/page-section.component.mjs +1 -1
  73. package/esm2020/user-device-manage/src/utils/app-loader/app-loader.mjs +3 -3
  74. package/esm2020/user-manage/public-api.mjs +1 -1
  75. package/esm2020/user-manage/src/app.constants.mjs +1 -1
  76. package/esm2020/user-manage/src/classes/device.mjs +1 -1
  77. package/esm2020/user-manage/src/classes/line-association-interface.mjs +1 -1
  78. package/esm2020/user-manage/src/classes/line-association.mjs +1 -1
  79. package/esm2020/user-manage/src/classes/line-call-info-display.mjs +1 -1
  80. package/esm2020/user-manage/src/classes/line-directory.mjs +1 -1
  81. package/esm2020/user-manage/src/classes/line.mjs +1 -1
  82. package/esm2020/user-manage/src/classes/notification.mjs +1 -1
  83. package/esm2020/user-manage/src/classes/pagination.mjs +1 -1
  84. package/esm2020/user-manage/src/classes/recording-options.mjs +1 -1
  85. package/esm2020/user-manage/src/classes/simplified-user.mjs +1 -1
  86. package/esm2020/user-manage/src/classes/table-data.mjs +1 -1
  87. package/esm2020/user-manage/src/classes/translation-pattern.mjs +1 -1
  88. package/esm2020/user-manage/src/classes/user-list.mjs +1 -1
  89. package/esm2020/user-manage/src/common-functions.mjs +1 -1
  90. package/esm2020/user-manage/src/device-list/device-list.component.mjs +3 -3
  91. package/esm2020/user-manage/src/device-list/device-row/device-row.component.mjs +3 -3
  92. package/esm2020/user-manage/src/environments/environment.mjs +1 -1
  93. package/esm2020/user-manage/src/interseptors/auth.interceptor.mjs +1 -1
  94. package/esm2020/user-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +3 -3
  95. package/esm2020/user-manage/src/material.module.mjs +1 -1
  96. package/esm2020/user-manage/src/notifications/notification.component.mjs +3 -3
  97. package/esm2020/user-manage/src/removeKynFromIBM.service.mjs +1 -1
  98. package/esm2020/user-manage/src/services/api.service.mjs +1 -1
  99. package/esm2020/user-manage/src/services/dns.service.mjs +1 -1
  100. package/esm2020/user-manage/src/services/line.service.mjs +1 -1
  101. package/esm2020/user-manage/src/services/notification.service.mjs +1 -1
  102. package/esm2020/user-manage/src/services/removeKynFromIBM.service.mjs +1 -1
  103. package/esm2020/user-manage/src/services/site-settings.service.mjs +1 -1
  104. package/esm2020/user-manage/src/services/sorting-utils.service.mjs +1 -1
  105. package/esm2020/user-manage/src/services/user.service.mjs +1 -1
  106. package/esm2020/user-manage/src/services/utils.service.mjs +1 -1
  107. package/esm2020/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.mjs +3 -3
  108. package/esm2020/user-manage/src/user-info/user-info.component.mjs +3 -3
  109. package/esm2020/user-manage/src/user-manage-widget.component.mjs +2 -2
  110. package/esm2020/user-manage/src/user-manage.module.mjs +1 -1
  111. package/esm2020/user-manage/src/utils/app-loader/app-loader.mjs +3 -3
  112. package/esm2020/user-manage/src/utils/pagination/pagination.component.mjs +3 -3
  113. package/esm2020/users-list/public-api.mjs +1 -1
  114. package/esm2020/users-list/src/app.constants.mjs +1 -1
  115. package/esm2020/users-list/src/classes/app-location.mjs +1 -1
  116. package/esm2020/users-list/src/classes/device.mjs +1 -1
  117. package/esm2020/users-list/src/classes/line.mjs +1 -1
  118. package/esm2020/users-list/src/classes/move-user.mjs +1 -1
  119. package/esm2020/users-list/src/classes/notification.mjs +1 -1
  120. package/esm2020/users-list/src/classes/simlified-user.mjs +1 -1
  121. package/esm2020/users-list/src/classes/table-data.mjs +1 -1
  122. package/esm2020/users-list/src/classes/user-list.mjs +1 -1
  123. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.mjs +3 -3
  124. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.mjs +3 -3
  125. package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +3 -3
  126. package/esm2020/users-list/src/services/api-webex.service.mjs +1 -1
  127. package/esm2020/users-list/src/services/api.service.mjs +1 -1
  128. package/esm2020/users-list/src/services/dns.service.mjs +1 -1
  129. package/esm2020/users-list/src/services/events-communication.service.mjs +1 -1
  130. package/esm2020/users-list/src/services/notification.service.mjs +1 -1
  131. package/esm2020/users-list/src/services/removeKynFromIBM.service.mjs +1 -1
  132. package/esm2020/users-list/src/services/site-settings.service.mjs +1 -1
  133. package/esm2020/users-list/src/services/user.service.mjs +1 -1
  134. package/esm2020/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.mjs +3 -3
  135. package/esm2020/users-list/src/utils/app-loader/app-loader.mjs +3 -3
  136. package/esm2020/users-list/src/utils/common-functions.mjs +1 -1
  137. package/esm2020/users-list/src/utils/notifications/notification.component.mjs +3 -3
  138. package/esm2020/users-list/src/utils/utils.service.mjs +1 -1
  139. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +2 -2
  140. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  141. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +20 -20
  142. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  143. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +109 -33
  144. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  145. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +18 -18
  146. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  147. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +18 -18
  148. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  149. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +12 -12
  150. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  151. package/fesm2015/tuki-io-tuki-widgets.mjs +8 -8
  152. package/fesm2015/tuki-io-tuki-widgets.mjs.map +1 -1
  153. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs +2 -2
  154. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  155. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +20 -20
  156. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  157. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +102 -29
  158. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  159. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +18 -18
  160. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  161. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +18 -18
  162. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  163. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +12 -12
  164. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  165. package/fesm2020/tuki-io-tuki-widgets.mjs +8 -8
  166. package/fesm2020/tuki-io-tuki-widgets.mjs.map +1 -1
  167. package/package.json +1 -1
  168. package/user-creation/src/utils/device-default-prefix.d.ts +7 -2
  169. package/user-creation/src/utils/device-name-dynamic-tokens.d.ts +1 -0
  170. package/user-creation/src/utils/parse-device-name-rule.d.ts +1 -0
  171. package/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.d.ts +2 -0
@@ -363,4 +363,4 @@ UserService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version:
363
363
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserService, decorators: [{
364
364
  type: Injectable
365
365
  }], ctorParameters: function () { return [{ type: i1.APIService }, { type: i2.LineService }]; } });
366
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXItZGV2aWNlLW1hbmFnZS9zcmMvc2VydmljZXMvdXNlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUc5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFJL0MsTUFBTSxPQUFPLFdBQVc7SUFhdEIsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFJRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUlELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBSUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFJRCxJQUFJLFVB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LFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6RCxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ25ELHlFQUF5RTtnQkFDekUsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBQ2xDLE9BQU87YUFDUjtTQUNGO0lBQ0gsQ0FBQzs7eUdBOVpVLFdBQVc7NkdBQVgsV0FBVzs0RkFBWCxXQUFXO2tCQUR2QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBmb3JrSm9pbiwgb2YsIFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgQVBJIH0gZnJvbSAnLi4vYXBwLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBEZXZpY2VQcm9maWxlIH0gZnJvbSAnLi4vY2xhc3Nlcy9kZXZpY2VQcm9maWxlJztcbmltcG9ydCB7IERldmljZSB9IGZyb20gJy4vLi4vY2xhc3Nlcy9kZXZpY2UnO1xuaW1wb3J0IHsgTGluZUFzc29jaWF0aW9uIH0gZnJvbSAnLi8uLi9jbGFzc2VzL2xpbmUtYXNzb2NpYXRpb24nO1xuaW1wb3J0IHsgTGluZUFzc29jaWF0aW9uSW50ZXJmYWNlIH0gZnJvbSAnLi8uLi9jbGFzc2VzL2xpbmUtYXNzb2NpYXRpb24taW50ZXJmYWNlJztcbmltcG9ydCB7IFNpbXBsaWZpZWRVc2VyIH0gZnJvbSAnLi8uLi9jbGFzc2VzL3NpbXBsaWZpZWQtdXNlcic7XG5pbXBvcnQgeyBBUElTZXJ2aWNlIH0gZnJvbSAnLi9hcGkuc2VydmljZSc7XG5pbXBvcnQgeyBMaW5lU2VydmljZSB9IGZyb20gJy4vbGluZS5zZXJ2aWNlJztcbmltcG9ydCB7IFNvcnRpbmdVdGlsc1NlcnZpY2UgfSBmcm9tICcuL3NvcnRpbmctdXRpbHMuc2VydmljZSc7XG5pbXBvcnQgeyBVdGlsc1NlcnZpY2UgfSBmcm9tICcuL3V0aWxzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmFsaWRhdGlvblNlcnZpY2UgfSBmcm9tICcuL3ZhbGlkYXRpb24uc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBVc2VyU2VydmljZSBpbXBsZW1lbnRzIE9uSW5pdHtcbiAgc2l0ZUlkOiBudW1iZXIgPSAtMTtcbiAgdXNlcklkOiBzdHJpbmcgPSAnJztcbiAgdXNlcklkRXhpc3RQZW5kaW5nID0gZmFsc2U7XG4gIGhhc0V4aXN0ZWRVc2VySWQgPSBmYWxzZTtcbiAgdXNlciE6IFNpbXBsaWZpZWRVc2VyO1xuICBvcmlnaW5Vc2VyITogU2ltcGxpZmllZFVzZXI7XG4gIG9yaWdpbkRldmljZSE6IGFueTtcbiAgb25Vc2VyTGluZVNhdmVkJCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgb25GZXRjaFVzZXJUb2tlbiQgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG5cbiAgcHJpdmF0ZSBfdXNlclRva2VuOiBzdHJpbmcgPSAnJztcblxuICBnZXQgdXNlclRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLl91c2VyVG9rZW47XG4gIH1cblxuICBwcml2YXRlIF91c2VyTmFtZTogc3RyaW5nID0gJyc7XG5cbiAgZ2V0IHVzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZXJOYW1lO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXNlckxhc3ROYW1lOiBzdHJpbmcgPSAnJztcblxuICBnZXQgdXNlckxhc3ROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZXJMYXN0TmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgX2N1Y21JZDogc3RyaW5nID0gJyc7XG5cbiAgZ2V0IGN1Y21JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jdWNtSWQ7XG4gIH1cblxuICBwcml2YXRlIF91c2VyRGV2aWNlOiBEZXZpY2VQcm9maWxlIHwgdW5kZWZpbmVkO1xuXG4gIGdldCB1c2VyRGV2aWNlKCkge1xuICAgIHJldHVybiB0aGlzLl91c2VyRGV2aWNlO1xuICB9XG5cbiAgZ2V0IGxpbmVBc3NvY2lhdGlvbigpOiBMaW5lQXNzb2NpYXRpb25JbnRlcmZhY2UgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnVzZXJEZXZpY2UgJiYgdGhpcy51c2VyRGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMgJiYgdGhpcy51c2VyRGV2aWNlLmxpbmVBc3NvY2lhdGlvbnNbMF07XG4gIH1cblxuICBnZXQgb3JpZ2luTGluZUFzc29jaWF0aW9uKCk6IExpbmVBc3NvY2lhdGlvbiB8IExpbmVBc3NvY2lhdGlvbkludGVyZmFjZSB7XG4gICAgcmV0dXJuIHRoaXMub3JpZ2luRGV2aWNlICYmIEpTT04ucGFyc2UodGhpcy5vcmlnaW5EZXZpY2UpLmxpbmVBc3NvY2lhdGlvbnNbMF07XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwaVNlcnZpY2U6IEFQSVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsaW5lU2VydmljZTogTGluZVNlcnZpY2VcbiAgKSB7XG5cbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKHRoaXMuc2l0ZUlkKVxuICB9XG5cbiAgcmVzZXRMaW5lQXNzb2NpYXRpb24oZGV2aWNlSW5kZXg6IG51bWJlciwgbGluZUluZGV4OiBudW1iZXIsIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSk6IHZvaWQge1xuICAgIGNvbnN0IG9yaWdpbkxpbmUgPSB0aGlzLm9yaWdpblVzZXI/LmRldmljZXNbZGV2aWNlSW5kZXhdPy5saW5lQXNzb2NpYXRpb25zW2xpbmVJbmRleF07XG4gICAgaWYgKHRoaXMudXNlcj8uZGV2aWNlc1tkZXZpY2VJbmRleF0/LmxpbmVBc3NvY2lhdGlvbnNbbGluZUluZGV4XSAmJiBvcmlnaW5MaW5lKSB7XG4gICAgICB0aGlzLnVzZXIuZGV2aWNlc1tkZXZpY2VJbmRleF0ubGluZUFzc29jaWF0aW9uc1tsaW5lSW5kZXhdID0gbmV3IExpbmVBc3NvY2lhdGlvbihKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9yaWdpbkxpbmUuZ2V0RnVsbERhdGEoKSkpLCB2YWxpZGF0aW9uU2VydmljZSlcbiAgICB9XG4gIH1cblxuICByZXNldERldmljZShjdXJyZW50RGV2aWNlOiBEZXZpY2UsIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSk6IHZvaWQge1xuICAgIGNvbnN0IG9yaWdpbkRldmljZSA9IHRoaXMub3JpZ2luVXNlci5kZXZpY2VzLmZpbmQoZGV2aWNlID0+IGRldmljZS5uYW1lID09PSBjdXJyZW50RGV2aWNlLm5hbWUpO1xuICAgIGNvbnN0IGRldmljZUluZCA9IHRoaXMudXNlci5kZXZpY2VzLmZpbmRJbmRleChkZXZpY2UgPT4gZGV2aWNlLm5hbWUgPT09IGN1cnJlbnREZXZpY2UubmFtZSk7XG4gICAgaWYgKG9yaWdpbkRldmljZSAmJiBkZXZpY2VJbmQgPiAtMSkge1xuICAgICAgY29uc3QgbGluZUFzc29jaWF0aW9ucyA9IHRoaXMudXNlci5kZXZpY2VzW2RldmljZUluZF0ubGluZUFzc29jaWF0aW9ucztcbiAgICAgIHRoaXMudXNlci5kZXZpY2VzW2RldmljZUluZF0gPSBuZXcgRGV2aWNlKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3JpZ2luRGV2aWNlLmdldE5vTGluZXNGdWxsRGF0YSgpKSksIHZhbGlkYXRpb25TZXJ2aWNlKTtcbiAgICAgIHRoaXMudXNlci5kZXZpY2VzW2RldmljZUluZF0ubGluZUFzc29jaWF0aW9ucyA9IGxpbmVBc3NvY2lhdGlvbnM7XG4gICAgICBjb25zb2xlLmxvZygnZGV2aWNlIGFmdGVyIHJlc2V0ID0gJywgdGhpcy51c2VyLmRldmljZXNbZGV2aWNlSW5kXSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGZldGNoVXNlclRva2VuKHNpdGVJZDogbnVtYmVyLCB1c2VySWQ6IHN0cmluZywgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlLCBpc1NldE5ld1Rva2VuT25seT86IGJvb2xlYW4pOiBhbnkge1xuICAgIC8qaWYgKHRoaXMuc2l0ZUlkID09PSBzaXRlSWQgJiYgdGhpcy51c2VySWQgPT09IHVzZXJJZCAmJiB0aGlzLnVzZXIpIHtcbiAgICAgIHJldHVybiBvZih0aGlzLnVzZXIpO1xuICAgIH0qL1xuICAgIHRoaXMuc2l0ZUlkID0gc2l0ZUlkO1xuICAgIHRoaXMudXNlcklkID0gdXNlcklkO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZmV0Y2goQVBJLlVTRVJfVE9LRU4ucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyh0aGlzLnNpdGVJZCkpLnJlcGxhY2UoJzp1c2VySWQnLCBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KHVzZXJJZCkpKSlcbiAgICAgIC5waXBlKG1hcCgocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgdXNlciA9IHJlc3VsdCAmJiBPYmplY3QudmFsdWVzKHJlc3VsdClbMF07XG4gICAgICAgIGNvbnN0IHVzZXJUb2tlbiA9IHJlc3VsdCAmJiBPYmplY3Qua2V5cyhyZXN1bHQpWzBdO1xuICAgICAgICBpZiAodXNlcikge1xuICAgICAgICAgIGlmICghaXNTZXROZXdUb2tlbk9ubHkpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0U2ltcGxpZmllZFVzZXIodXNlciwgdmFsaWRhdGlvblNlcnZpY2UsIHVzZXJUb2tlbik7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJUb2tlbiA9IHVzZXJUb2tlbjtcbiAgICAgICAgICAgIC8vIHRoaXMub3JpZ2luVXNlci50b2tlbiA9IHVzZXIudG9rZW47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMub25GZXRjaFVzZXJUb2tlbiQubmV4dCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSkpXG4gICAgLy8gLnBpcGUodGhpcy5oYW5kbGVFcnJvcihmYWxzZSwgdHJ1ZSkpO1xuICB9XG5cbiAgcHVibGljIGZldGNoRElVc2VyRGV2aWNlKHNpdGVJZDogbnVtYmVyLCB1c2VySWQ6IHN0cmluZywgZGV2aWNlVHlwZTogc3RyaW5nKSB7XG4gICAgdGhpcy5zaXRlSWQgPSBzaXRlSWQ7XG4gICAgdGhpcy51c2VySWQgPSB1c2VySWQ7XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5mZXRjaChBUEkuVVNFUl9UT0tFTi5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHRoaXMuc2l0ZUlkKSkucmVwbGFjZSgnOnVzZXJJZCcsIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQodXNlcklkKSkpKVxuICAgICAgLnBpcGUobWFwKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCB1c2VyID0gcmVzdWx0ICYmIE9iamVjdC52YWx1ZXMocmVzdWx0KVswXTtcbiAgICAgICAgY29uc3QgdXNlclRva2VuID0gcmVzdWx0ICYmIE9iamVjdC5rZXlzKHJlc3VsdClbMF07XG5cbiAgICAgICAgaWYgKHVzZXIpIHtcbiAgICAgICAgICB0aGlzLl91c2VyVG9rZW4gPSB1c2VyVG9rZW47XG4gICAgICAgICAgdGhpcy5fdXNlck5hbWUgPSB1c2VyLmZpcnN0TmFtZTtcbiAgICAgICAgICB0aGlzLl91c2VyTGFzdE5hbWUgPSB1c2VyLmxhc3ROYW1lO1xuICAgICAgICAgIHRoaXMuX2N1Y21JZCA9IHVzZXIuY3VjbUlkO1xuICAgICAgICAgIGNvbnN0IGZvdW5kRGV2aWNlID0gdXNlci5kZXZpY2VzLmZpbmQoKGRldmljZTogYW55KSA9PiBkZXZpY2UuZGV2aWNlVHlwZSA9PT0gZGV2aWNlVHlwZSk7XG4gICAgICAgICAgaWYoZm91bmREZXZpY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX3VzZXJEZXZpY2UgPSBuZXcgRGV2aWNlUHJvZmlsZSh7XG4gICAgICAgICAgICAgIC4uLmZvdW5kRGV2aWNlLFxuICAgICAgICAgICAgICBtb2RlbDogZm91bmREZXZpY2U/LmRldmljZVR5cGUsXG4gICAgICAgICAgICAgIG1hY0FkZHJlc3M6IHRoaXMuZ2V0TWFjQWRkcmVzcyhmb3VuZERldmljZS5uYW1lKSxcbiAgICAgICAgICAgICAgbGluZXM6IGZvdW5kRGV2aWNlPy5saW5lQXNzb2NpYXRpb25zPy5tYXAoKGxpbmU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kTGluZSA9IHVzZXI/LmxpbmVzPy5maW5kKChsOiBhbnkpID0+IGwucGtpZCA9PT0gbGluZS5saW5lUGtpZCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGAke3RoaXMuX3VzZXJOYW1lfSAke3RoaXMuX3VzZXJMYXN0TmFtZX1gLFxuICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBsaW5lICYmIGxpbmUuZGlyZWN0b3J5TnVtYmVyICYmIGxpbmUuZGlyZWN0b3J5TnVtYmVyLnJvdXRlUGFydGl0aW9uTmFtZSAmJiBsaW5lLmRpcmVjdG9yeU51bWJlci5kaXJlY3RvcnlOdW1iZXIgfHwgJycsXG4gICAgICAgICAgICAgICAgICBudW1iZXI6IGZvdW5kTGluZSAhPT0gLTEgPyBmb3VuZExpbmUubWFwcGVkRGlkc1swXSA6ICcnLFxuICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGZvdW5kTGluZSAmJiBmb3VuZExpbmUuZGlkUGF0dGVybnMgJiYgZm91bmRMaW5lLmRpZFBhdHRlcm5zWzBdID8gZm91bmRMaW5lLmRpZFBhdHRlcm5zWzBdLmRlc2NyaXB0aW9uIDogJycsXG4gICAgICAgICAgICAgICAgICByb3V0ZVBhcnRpdGlvbk5hbWU6IGxpbmUgJiYgbGluZS5kaXJlY3RvcnlOdW1iZXIucm91dGVQYXJ0aXRpb25OYW1lIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgcGtpZDogbGluZSAmJiBsaW5lLmxpbmVQa2lkIHx8ICcnLFxuICAgICAgICAgICAgICAgICAgaW5kZXg6IGxpbmUgJiYgbGluZS5pbmRleCB8fCB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogbGluZSAmJiBsaW5lLnBvc2l0aW9uIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgIHRleHRMYWJlbDogbGluZSAmJiBsaW5lLnRleHRMYWJlbCB8fCAnJyxcbiAgICAgICAgICAgICAgICAgIGFsZXJ0aW5nTmFtZTogbGluZSAmJiBsaW5lLmFsZXJ0aW5nTmFtZSB8fCAnJyxcbiAgICAgICAgICAgICAgICAgIGNhbGxlck51bWJlcjogbGluZSAmJiBsaW5lLmNhbGxlck51bWJlciB8fCAnJ1xuICAgICAgICAgICAgICAgIH0gXG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICBzb2Z0d2FyZVZlcnNpb246IGZvdW5kRGV2aWNlPy5maXJtd2FyZVZlcnNpb25cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub3JpZ2luRGV2aWNlID0gdGhpcy5fdXNlckRldmljZSA/IEpTT04uc3RyaW5naWZ5KHRoaXMuX3VzZXJEZXZpY2UuZ2V0U2F2YWJsZURhdGEoKSkgOiAnJztcbiAgICAgICAgcmV0dXJuIHRoaXMuX3VzZXJEZXZpY2U7XG4gICAgICB9KSlcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWFjQWRkcmVzcyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1hY1JlZ2V4ID0gL15bQS1GYS1mMC05XXsxMn0kLztcbiAgICBsZXQgbWFjQWRkcmVzcztcblxuICAgIGlmIChuYW1lLmxlbmd0aCA9PT0gMTIgJiYgbWFjUmVnZXgudGVzdChuYW1lKSkge1xuICAgICAgbWFjQWRkcmVzcyA9IG5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPSBuYW1lLnNsaWNlKDMpO1xuICAgICAgbWFjQWRkcmVzcyA9IG1hY1JlZ2V4LnRlc3QodHJpbW1lZCkgPyB0cmltbWVkIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBtYWNBZGRyZXNzO1xuICB9XG5cbiAgcHVibGljIGZldGNoV2ViZXhVc2VyRGV2aWNlKGN1c3RvbWVySWQ6IHN0cmluZywgdXNlcklkOiBzdHJpbmcsIGRldmljZVR5cGU6IHN0cmluZykge1xuICAgIHJldHVybiBmb3JrSm9pbihbXG4gICAgICB0aGlzLmFwaVNlcnZpY2UuZmV0Y2goQVBJLldFQkVYX1VTRVJfVE9LRU4ucmVwbGFjZSgnOmN1c3RvbWVySWQnLCBjdXN0b21lcklkKS5yZXBsYWNlKCc6dXNlcklkJywgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudCh1c2VySWQpKSkpLFxuICAgICAgdGhpcy5hcGlTZXJ2aWNlLmZldGNoKEFQSS5XRUJFWF9VU0VSX0RFVklDRVMucmVwbGFjZSgnOmN1c3RvbWVySWQnLCBjdXN0b21lcklkKS5yZXBsYWNlKCc6dXNlcklkJywgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudCh1c2VySWQpKSkpXG4gICAgXSlcbiAgICAgIC5waXBlKG1hcCgocmVzdWx0czogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuX3VzZXJOYW1lID0gcmVzdWx0c1swXS5maXJzdE5hbWU7XG4gICAgICAgIHRoaXMuX3VzZXJMYXN0TmFtZSA9IHJlc3VsdHNbMF0ubGFzdE5hbWU7XG4gICAgICAgIGlmKHJlc3VsdHNbMV0pIHtcbiAgICAgICAgICBjb25zdCBmb3VuZERldmljZSA9IHJlc3VsdHNbMV0uZGV2aWNlcy5maW5kKChkZXZpY2U6IGFueSkgPT4gZGV2aWNlLm1vZGVsID09PSBkZXZpY2VUeXBlKTtcbiAgICAgICAgICB0aGlzLl91c2VyRGV2aWNlID0gbmV3IERldmljZVByb2ZpbGUoe1xuICAgICAgICAgICAgLi4uZm91bmREZXZpY2UsXG4gICAgICAgICAgICBtYWNBZGRyZXNzOiBmb3VuZERldmljZS5tYWMsXG4gICAgICAgICAgICBtYXhMaW5lQ291bnQ6IGZvdW5kRGV2aWNlPy5kZXZpY2VNZW1iZXJzPy5tYXhMaW5lQ291bnQsXG4gICAgICAgICAgICBsaW5lczogZm91bmREZXZpY2U/LmRldmljZU1lbWJlcnM/Lm1lbWJlcnM/Lm1hcCgobWVtYmVyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBgJHttZW1iZXIuZmlyc3ROYW1lfSAke21lbWJlci5sYXN0TmFtZX1gLFxuICAgICAgICAgICAgICAgIGV4dGVuc2lvbjogbWVtYmVyLmV4dGVuc2lvblxuICAgICAgICAgICAgICB9IFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyRGV2aWNlO1xuICAgICAgfSkpXG4gIH1cblxuICBwdWJsaWMgdXBkYXRlVXNlckZpZWxkcyhib2R5OiBhbnkpOiBhbnkge1xuICAgIGlmICghdGhpcy51c2VySWQgfHwgIXRoaXMuc2l0ZUlkIHx8ICF0aGlzLnVzZXI/LnRva2VuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UucG9zdChBUEkuVVBEQVRFX1VTRVJfRklFTERTLnJlcGxhY2UoJzpzaXRlSWQnLCBTdHJpbmcodGhpcy5zaXRlSWQpKS5yZXBsYWNlKCc6dG9rZW4nLCB0aGlzLnVzZXJUb2tlbiksIGJvZHkpXG4gICAgICAvLyAucGlwZSh0aGlzLmhhbmRsZUVycm9yKGZhbHNlLCB0cnVlKSk7XG4gIH1cblxuICBwdWJsaWMgZmV0Y2hVc2VyQnlJZChpZDogc3RyaW5nKSB7XG4gICAgdGhpcy51c2VySWRFeGlzdFBlbmRpbmcgPSB0cnVlO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZmV0Y2goQVBJLlVTRVJfQllfSUQucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyh0aGlzLnNpdGVJZCkpLnJlcGxhY2UoJzp1c2VySWQnLCBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGlkKSkpKVxuICAgICAgLnBpcGUobWFwKHJlc3VsdCA9PiB7XG4gICAgICAgIHRoaXMudXNlcklkRXhpc3RQZW5kaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgZmV0Y2hMZWFuVXNlckNvbnZlcnNhdGlvbkJ5SWQoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZmV0Y2goQVBJLkxFQU5fVVNFUl9DT05WRVJTQVRJT05fU1RBUlQucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyh0aGlzLnNpdGVJZCkpLnJlcGxhY2UoJzp1c2VySWQnLCBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGlkKSkpKTtcbiAgfVxuXG4gIHB1YmxpYyBmZXRjaExlYW5Vc2VyRGV2aWNlc0NvbnZlcnNhdGlvbkJ5SWQoaWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZmV0Y2goQVBJLkxFQU5fVVNFUl9ERVZJQ0VTX0NPTlZFUlNBVElPTl9TVEFSVC5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHRoaXMuc2l0ZUlkKSkucmVwbGFjZSgnOnVzZXJJZCcsIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoaWQpKSkpO1xuICB9XG4gIHB1YmxpYyBmZXRjaExlYW5Vc2VyTGluZXNDb252ZXJzYXRpb25CeUlkKGlkOiBzdHJpbmcsIGxlYW5Vc2VyRGV2aWNlc1Rva2VuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmZldGNoKEFQSS5MRUFOX1VTRVJfTElORVNfQ09OVkVSU0FUSU9OX1NUQVJULnJlcGxhY2UoJzpzaXRlSWQnLCBTdHJpbmcodGhpcy5zaXRlSWQpKVxuICAgICAgLnJlcGxhY2UoJzp1c2VySWQnLCBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGlkKSkpLnJlcGxhY2UoJzpsZWFuVXNlckRldmljZXNUb2tlbicsIGxlYW5Vc2VyRGV2aWNlc1Rva2VuKSk7XG4gIH1cbiAgcHVibGljIGZldGNoTGVhblVzZXJTTlJDb252ZXJzYXRpb25CeUlkKGlkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmZldGNoKEFQSS5MRUFOX1VTRVJfU05SX0NPTlZFUlNBVElPTl9TVEFSVC5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHRoaXMuc2l0ZUlkKSkucmVwbGFjZSgnOnVzZXJJZCcsIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoaWQpKSkpO1xuICB9XG5cbiAgcHVibGljIHBlcnNpc3RDYWNoZUNoYW5nZXMoKSB7XG4gICAgLypjb25zdCBwYXJhbXMgPSB7XG4gICAgICBleGNsdWRlRGV2aWNlRXh0cmFPcHRpb25zOiB0cnVlXG4gICAgfTsqL1xuICAgIHJldHVybiB0aGlzLnByb2Nlc3NVc2VyQ2hhbmdlc1RvQ2FjaGUoKVxuICAgICAgLnBpcGUobWFwKChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLnBvc3QoQVBJLlBFUlNJU1RfVVNFUl9DQUNIRS5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHRoaXMuc2l0ZUlkKSkucmVwbGFjZSgnOnRva2VuJywgdGhpcy51c2VyVG9rZW4pLCB7fSwge30pXG4gICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG5cbiAgICAgICAgICB9KVxuICAgICAgICAgIC8vIC5waXBlKG1hcCgodXNlcikgPT4ge1xuICAgICAgICAgIC8vICAgLy8gdGhpcy5zZXRVc2VyKHVzZXIsIGZhbHNlLCB0aGlzLnVzZXIudG9rZW4pO1xuICAgICAgICAgIC8vICAgdGhpcy51c2VyLmhhc01vZGlmaWVkQ2FjaGUgPSBmYWxzZTtcbiAgICAgICAgICAvLyB9KSlcbiAgICAgICAgICAvLyAucGlwZSh0aGlzLmhhbmRsZUVycm9yKHRydWUsIHRydWUpKTtcbiAgICAgIH0pKTtcbiAgfVxuXG4gIHB1YmxpYyBwcm9jZXNzVXNlckNoYW5nZXNUb0NhY2hlKCk6IGFueSB7XG4gICAgY29uc3QgY2FsbHMgPSBbXTtcbiAgICBjb25zdCBib2R5ID0gVXRpbHNTZXJ2aWNlLmRpZmYodGhpcy5vcmlnaW5Vc2VyLmdldFVzZXJEZXRhaWxzU2F2YWJsZURhdGEoKSwgdGhpcy51c2VyLmdldFVzZXJEZXRhaWxzU2F2YWJsZURhdGEoKSwgJ3VzZXInKTtcbiAgICBpZiAoYm9keT8ubGVuZ3RoKSB7XG4gICAgICBjYWxscy5wdXNoKHRoaXMudXBkYXRlVXNlckZpZWxkcyhib2R5KSk7XG4gICAgfVxuICAgIGlmICghY2FsbHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG9mKHRoaXMudXNlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvcmtKb2luKGNhbGxzKVxuICAgICAgLnBpcGUobWFwKChyZXNwb25zZXM6IGFueSkgPT4ge1xuICAgICAgICAvLyBBcGlVc2VyUmVzcG9uc2VcbiAgICAgICAgdGhpcy5oYW5kbGVTYXZlVXNlclJlc3BvbnNlKHJlc3BvbnNlcyk7XG4gICAgICB9KSlcbiAgICAvLyAucGlwZSh0aGlzLmhhbmRsZUVycm9yKGZhbHNlLCB0cnVlKSk7XG5cbiAgfVxuXG4gIHB1YmxpYyBzYXZlTmV3TGluZShsaW5lOiBhbnkpOiBhbnkge1xuICAgIHRoaXMuZGVsZXRlTGluZSh0aGlzLnNpdGVJZCwgbGluZS5wa2lkLCBlbmNvZGVVUklDb21wb25lbnQodGhpcy51c2VyVG9rZW4pKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIGNvbnN0IFVSTCA9IEFQSS5QRVJTSVNUX1VTRVJfQ0FDSEUucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyh0aGlzLnNpdGVJZCkpLnJlcGxhY2UoJzp0b2tlbicsIHRoaXMudXNlclRva2VuKTtcbiAgICAgICAgdGhpcy5hcGlTZXJ2aWNlLnBvc3QoVVJMLCB7fSwgKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ydW5OZXdMaW5lQ3JlYXRpb24obGluZSk7XG4gICAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBwZXJzaXN0VXNlckNhY2hlKCk6IGFueSB7XG4gICAgY29uc3QgVVJMID0gQVBJLlBFUlNJU1RfVVNFUl9DQUNIRS5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHRoaXMuc2l0ZUlkKSkucmVwbGFjZSgnOnRva2VuJywgdGhpcy51c2VyVG9rZW4pO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UucG9zdChVUkwsIHt9LCApO1xuICB9XG5cbiAgcHVibGljIHJ1bk5ld0xpbmVDcmVhdGlvbihsaW5lOiBhbnkpOiB2b2lkIHtcbiAgICAvLyBDUkVBVEUgTkVXIExJTkVcbiAgICBjb25zdCBuZXdMaW5lQm9keSA9IFNvcnRpbmdVdGlsc1NlcnZpY2UuZGlmZihcbiAgICAgIHRoaXMubGluZVNlcnZpY2UuZ2VuZXJhdGVMaW5lQXNzb2NpYXRpb25Gcm9tTGluZShudWxsKSxcbiAgICAgIHRoaXMubGluZVNlcnZpY2UuZ2VuZXJhdGVMaW5lQXNzb2NpYXRpb25Gcm9tTGluZShsaW5lKSxcbiAgICAgICdkZXZpY2UubGluZUFzc29jaWF0aW9ucycsIG51bGxcbiAgICApO1xuICAgIHRoaXMuYXNzb2NpYXRlTGluZVRvVXNlckRldmljZShcbiAgICAgIHRoaXMuc2l0ZUlkLFxuICAgICAgdGhpcy51c2VyRGV2aWNlICYmIHRoaXMudXNlckRldmljZS5uYW1lIHx8ICcnLFxuICAgICAgbmV3TGluZUJvZHksXG4gICAgICBudWxsLFxuICAgICAgdGhpcy5saW5lQXNzb2NpYXRpb24/LmNhbGxpbmdTZWFyY2hTcGFjZVxuICAgIClcbiAgICAucGlwZShzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgY29uc3QgVVJMID0gQVBJLlBFUlNJU1RfVVNFUl9DQUNIRS5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHRoaXMuc2l0ZUlkKSkucmVwbGFjZSgnOnRva2VuJywgdGhpcy51c2VyVG9rZW4pO1xuICAgICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5wb3N0KFVSTCwge30sICk7XG4gICAgfSkpXG4gICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlPy5jdXJyZW50VXBkYXRlZFVzZXIpIHtcbiAgICAgICAgY29uc3QgbGluZVBrSWQgPSByZXNwb25zZS5jdXJyZW50VXBkYXRlZFVzZXIuZGV2aWNlc1swXT8ubGluZUFzc29jaWF0aW9uc1swXT8ubGluZVBraWQgfHwgcmVzcG9uc2UuY3VycmVudFVwZGF0ZWRVc2VyLmRldmljZXNbMF0/LmxpbmVBc3NvY2lhdGlvbnNbMF0/LmxpbmVMb2NhbElkO1xuICAgICAgICBmb3JrSm9pbihbXG4gICAgICAgICAgdGhpcy51cGRhdGVMaW5lRmllbGRzKHRoaXMuc2l0ZUlkLCBsaW5lUGtJZCwgdGhpcy51c2VyVG9rZW4sIHRoaXMubGluZUFzc29jaWF0aW9uPy5hbGVydGluZ05hbWUpLFxuICAgICAgICAgIHRoaXMudXBkYXRlRGV2aWNlRmllbGRzKHRoaXMuc2l0ZUlkLCB0aGlzLnVzZXJEZXZpY2UgJiYgdGhpcy51c2VyRGV2aWNlLm5hbWUgfHwgJycsIHRoaXMudXNlclRva2VuKVxuICAgICAgICBdKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBvcmlnaW5hbERldmljZURhdGEgPSBKU09OLnBhcnNlKHRoaXMub3JpZ2luRGV2aWNlKTtcbiAgICAgICAgICBjb25zdCBvcmlnaW5hbERldmljZUxpbmUgPSBvcmlnaW5hbERldmljZURhdGEubGluZXMuZmluZCgob3JpZ0xpbmU6IGFueSkgPT4gb3JpZ0xpbmUucGtpZCA9PT0gbGluZS5wa2lkKTtcbiAgICAgICAgICBpZihvcmlnaW5hbERldmljZUxpbmUpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsRGV2aWNlRGF0YS5leHRlbnNpb24gPSBsaW5lLmV4dGVuc2lvbjtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luRGV2aWNlID0gSlNPTi5zdHJpbmdpZnkob3JpZ2luYWxEZXZpY2VEYXRhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5vblVzZXJMaW5lU2F2ZWQkLm5leHQodHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pXG4gICAgLy8gLS0tLS1cbiAgfVxuXG4gIHB1YmxpYyBkZWxldGVMaW5lKHNpdGVJZDogbnVtYmVyLCBwa2lkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmRlbGV0ZShBUEkuREVMRVRFX0xJTkUucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyhzaXRlSWQpKS5yZXBsYWNlKCc6cGtpZCcsIHBraWQpLnJlcGxhY2UoJzp0b2tlbicsIGVuY29kZVVSSUNvbXBvbmVudCh0b2tlbikpLCB7fSlcbiAgICAgIC8vIC5waXBlKHRoaXMuaGFuZGxlRXJyb3IodHJ1ZSwgZmFsc2UpKTtcbiAgfVxuXG4gIHB1YmxpYyBkaXNhc3NvY2lhdGVMaW5lKHNpdGVJZDogbnVtYmVyLCBsaW5lUGtpZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBkZXZpY2VOYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmRlbGV0ZShcbiAgICAgIEFQSS5ESVNBU1NPQ0lBVEVfTElORS5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHNpdGVJZCkpXG4gICAgICAgIC5yZXBsYWNlKCc6bGluZVBraWQnLCBsaW5lUGtpZClcbiAgICAgICAgLnJlcGxhY2UoJzpkZXZpY2VOYW1lJywgZGV2aWNlTmFtZSlcbiAgICAgICAgLnJlcGxhY2UoJzp0b2tlbicsIGVuY29kZVVSSUNvbXBvbmVudCh0b2tlbikpLCB7fSlcbiAgICAgIC8vIC5waXBlKHRoaXMuaGFuZGxlRXJyb3IodHJ1ZSwgZmFsc2UpKTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVMaW5lRmllbGRzKHNpdGVJZDogbnVtYmVyLCBwa2lkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGFsZXJ0aW5nTmFtZTogYW55KSB7XG4gICAgY29uc3QgYm9keSA9IFsnbGluZS5kZXNjcmlwdGlvbj0nLCBgbGluZS5hbGVydGluZ05hbWU9JHthbGVydGluZ05hbWV9YF07XG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5wb3N0KEFQSS5VUERBVEVfTElORV9GSUVMRFMucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyhzaXRlSWQpKS5yZXBsYWNlKCc6cGtpZCcsIGVuY29kZVVSSUNvbXBvbmVudChwa2lkKSkucmVwbGFjZSgnOnRva2VuJywgZW5jb2RlVVJJQ29tcG9uZW50KHRva2VuKSksIGJvZHkpXG4gICAgICAvLyAucGlwZSh0aGlzLmhhbmRsZUVycm9yKHRydWUsIGZhbHNlKSk7XG4gIH1cblxuICBwdWJsaWMgdXBkYXRlRGV2aWNlRmllbGRzKHNpdGVJZDogbnVtYmVyLCBkZXZpY2VOYW1lOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpIHtcbiAgICBjb25zdCBib2R5ID0gWydkZXZpY2UuYXNzb2NpYXRlZEROcy4wPW51bGwnXTtcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLnBvc3QoQVBJLlVQREFURV9ERVZJQ0VfRklFTERTLnJlcGxhY2UoJzpzaXRlSWQnLCBTdHJpbmcoc2l0ZUlkKSkucmVwbGFjZSgnOmRldmljZU5hbWUnLCBkZXZpY2VOYW1lKS5yZXBsYWNlKCc6dG9rZW4nLCBlbmNvZGVVUklDb21wb25lbnQodG9rZW4pKSwgYm9keSlcbiAgICAvLyAucGlwZSh0aGlzLmhhbmRsZUVycm9yKHRydWUsIGZhbHNlKSk7XG4gIH1cblxuICBwdWJsaWMgY2hlY2tEZXN0aW5hdGlvbk51bWJlcihzaXRlSWQ6IHN0cmluZywgZGlyZWN0b3J5TnVtYmVyOiBzdHJpbmcsIHJvdXRlUGFydGl0aW9uTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgZG50eXBlOiAnRVhURU5TSU9OJ1xuICAgIH07XG4gICAgY29uc3QgYm9keSA9IHtcbiAgICAgIGRpcmVjdG9yeU51bWJlcjogZGlyZWN0b3J5TnVtYmVyLFxuICAgICAgcm91dGVQYXJ0aXRpb25OYW1lOiByb3V0ZVBhcnRpdGlvbk5hbWVcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UucG9zdChBUEkuQ0hFQ0tfREVTVElOQVRJT05fTlVNQkVSLnJlcGxhY2UoJzpzaXRlSWQnLCBzaXRlSWQpLCBib2R5LCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGFzc29jaWF0ZUxpbmVUb1VzZXJEZXZpY2Uoc2l0ZUlkOiBudW1iZXIsIGRldmljZU5hbWU6IHN0cmluZywgYm9keTogYW55LCBwa2lkOiBhbnksIGNzczogYW55KSB7XG4gICAgbGV0IHBhcmFtcyA9IHt9O1xuICAgIGlmIChwa2lkKSB7XG4gICAgICBwYXJhbXMgPSB7bGluZVBraWQ6IHBraWR9O1xuICAgIH1cbiAgICBpZiAoY3NzKSB7XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBwYXJhbXNbJ2NzcyddID0gY3NzO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLnBvc3QoQVBJLkFTU09DSUFURV9MSU5FLnJlcGxhY2UoJzpzaXRlSWQnLCBTdHJpbmcoc2l0ZUlkKSkucmVwbGFjZSgnOmRldmljZU5hbWUnLCBkZXZpY2VOYW1lKVxuICAgICAgLnJlcGxhY2UoJzp0b2tlbicsIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLnVzZXJUb2tlbikpLCBib2R5LCBwYXJhbXMpXG4gICAgICAvLyAucGlwZSh0aGlzLmhhbmRsZUVycm9yKHRydWUsIHRydWUpKTtcbiAgfVxuXG4gIHB1YmxpYyBoYXNVbnNhdmVkQ2hhbmdlcygpIHtcbiAgICBpZiAodGhpcy5fdXNlckRldmljZSAmJiB0aGlzLm9yaWdpbkRldmljZSkge1xuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuX3VzZXJEZXZpY2UuZ2V0U2F2YWJsZURhdGEoKSkgJiYgdGhpcy5vcmlnaW5EZXZpY2U7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTaW1wbGlmaWVkVXNlcih1c2VyOiBhbnksIHZhbGlkYXRpb25TZXJ2aWNlOiBWYWxpZGF0aW9uU2VydmljZSwgdXNlclRva2VuPzogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy51c2VyID0gbmV3IFNpbXBsaWZpZWRVc2VyKHVzZXIsIHZhbGlkYXRpb25TZXJ2aWNlKTtcbiAgICBjb25zdCBjb3BpZWRVc2VyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh1c2VyKSk7XG4gICAgdGhpcy5vcmlnaW5Vc2VyID0gbmV3IFNpbXBsaWZpZWRVc2VyKGNvcGllZFVzZXIsIHZhbGlkYXRpb25TZXJ2aWNlKTtcbiAgICBpZiAoIXRoaXMudXNlclRva2VuICYmIHVzZXJUb2tlbikge1xuICAgICAgdGhpcy5fdXNlclRva2VuID0gdXNlclRva2VuO1xuICAgICAgLy8gdGhpcy5vcmlnaW5Vc2VyLnRva2VuID0gdXNlclRva2VuO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBlZGl0VHJhbnNsYXRpb25QYXR0ZXJuKFxuICAgICAgY3VjbUlkOiBzdHJpbmcsXG4gICAgICBvbGRwYXR0ZXJuOiBzdHJpbmcsXG4gICAgICBuZXdQYXR0ZXJuOiBzdHJpbmcsXG4gICAgICBleHRlbnNpb246IHN0cmluZyxcbiAgICAgIHJvdXRlUGFydGl0aW9uTmFtZTogc3RyaW5nLFxuICAgICAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICApIHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBvcmlnaW5hbHBhdHRlcm46IG9sZHBhdHRlcm4sXG4gICAgfTtcbiAgICBjb25zdCBVUkwgPSBBUEkuVFJBTlNMQVRJT05fUEFUVEVSTl9DVUNNLnJlcGxhY2UoJzpjdWNtSWQnLCBjdWNtSWQpO1xuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcbiAgICAgIC5wdXQoVVJMLCB7IGNhbGxlZFBhcnR5VHJhbnNmb3JtYXRpb25NYXNrOiBleHRlbnNpb24sIHBhdHRlcm46IG5ld1BhdHRlcm4sIHJvdXRlUGFydGl0aW9uTmFtZTogcm91dGVQYXJ0aXRpb25OYW1lLCBkZXNjcmlwdGlvbiB9LCBwYXJhbXMpO1xuICB9XG5cbiAgcHVibGljIGxpbmVVcGRhdGVkKGxpbmU6IGFueSwgaW5kZXg6IG51bWJlcikge1xuICAgIGNvbnN0IG9yaWdpbmFsTGluZSA9IEpTT04ucGFyc2UodGhpcy5vcmlnaW5EZXZpY2UpLmxpbmVzW2luZGV4XTtcbiAgICByZXR1cm4gb3JpZ2luYWxMaW5lLm51bWJlciAhPT0gbGluZS5udW1iZXIgfHwgb3JpZ2luYWxMaW5lLmV4dGVuc2lvbiAhPT0gbGluZS5leHRlbnNpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0T3JpZ2luYWxOdW1iZXIobGluZTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBmb3VuZExpbmUgPSBKU09OLnBhcnNlKHRoaXMub3JpZ2luRGV2aWNlKS5saW5lcy5maW5kKChvcmlnTGluZTogYW55KSA9PiBvcmlnTGluZS5leHRlbnNpb24gPT09IGxpbmUuZXh0ZW5zaW9uIHx8IG9yaWdMaW5lLm51bWJlciA9PT0gbGluZS5udW1iZXIpO1xuICAgIHJldHVybiBmb3VuZExpbmUubnVtYmVyIHx8ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVTYXZlVXNlclJlc3BvbnNlKHJlc3BvbnNlczogYW55KSB7XG4gICAgaWYgKCFyZXNwb25zZXM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGxldCBsZW4gPSByZXNwb25zZXMubGVuZ3RoLCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChyZXNwb25zZXNbaV0gJiYgcmVzcG9uc2VzW2ldLmN1cnJlbnRVcGRhdGVkVXNlcikge1xuICAgICAgICAvLyB0aGlzLnNldFVzZXIocmVzcG9uc2VzW2ldLmN1cnJlbnRVcGRhdGVkVXNlciwgZmFsc2UsIHRoaXMudXNlci50b2tlbik7XG4gICAgICAgIHRoaXMudXNlci5oYXNNb2RpZmllZENhY2hlID0gdHJ1ZTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIl19
366
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXItZGV2aWNlLW1hbmFnZS9zcmMvc2VydmljZXMvdXNlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDaEQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRWhFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUc5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFJL0MsTUFBTSxPQUFPLFdBQVc7SUFhdEIsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFJRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUlELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQztJQUM1QixDQUFDO0lBSUQsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RCLENBQUM7SUFJRCxJQUFJLFVB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LFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUN6RCxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ25ELHlFQUF5RTtnQkFDekUsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7Z0JBQ2xDLE9BQU87YUFDUjtTQUNGO0lBQ0gsQ0FBQzs7eUdBOVpVLFdBQVc7NkdBQVgsV0FBVzs0RkFBWCxXQUFXO2tCQUR2QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBvZiwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgQVBJIH0gZnJvbSAnLi4vYXBwLmNvbnN0YW50cyc7XHJcbmltcG9ydCB7IERldmljZVByb2ZpbGUgfSBmcm9tICcuLi9jbGFzc2VzL2RldmljZVByb2ZpbGUnO1xyXG5pbXBvcnQgeyBEZXZpY2UgfSBmcm9tICcuLy4uL2NsYXNzZXMvZGV2aWNlJztcclxuaW1wb3J0IHsgTGluZUFzc29jaWF0aW9uIH0gZnJvbSAnLi8uLi9jbGFzc2VzL2xpbmUtYXNzb2NpYXRpb24nO1xyXG5pbXBvcnQgeyBMaW5lQXNzb2NpYXRpb25JbnRlcmZhY2UgfSBmcm9tICcuLy4uL2NsYXNzZXMvbGluZS1hc3NvY2lhdGlvbi1pbnRlcmZhY2UnO1xyXG5pbXBvcnQgeyBTaW1wbGlmaWVkVXNlciB9IGZyb20gJy4vLi4vY2xhc3Nlcy9zaW1wbGlmaWVkLXVzZXInO1xyXG5pbXBvcnQgeyBBUElTZXJ2aWNlIH0gZnJvbSAnLi9hcGkuc2VydmljZSc7XHJcbmltcG9ydCB7IExpbmVTZXJ2aWNlIH0gZnJvbSAnLi9saW5lLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBTb3J0aW5nVXRpbHNTZXJ2aWNlIH0gZnJvbSAnLi9zb3J0aW5nLXV0aWxzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVdGlsc1NlcnZpY2UgfSBmcm9tICcuL3V0aWxzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWYWxpZGF0aW9uU2VydmljZSB9IGZyb20gJy4vdmFsaWRhdGlvbi5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFVzZXJTZXJ2aWNlIGltcGxlbWVudHMgT25Jbml0e1xyXG4gIHNpdGVJZDogbnVtYmVyID0gLTE7XHJcbiAgdXNlcklkOiBzdHJpbmcgPSAnJztcclxuICB1c2VySWRFeGlzdFBlbmRpbmcgPSBmYWxzZTtcclxuICBoYXNFeGlzdGVkVXNlcklkID0gZmFsc2U7XHJcbiAgdXNlciE6IFNpbXBsaWZpZWRVc2VyO1xyXG4gIG9yaWdpblVzZXIhOiBTaW1wbGlmaWVkVXNlcjtcclxuICBvcmlnaW5EZXZpY2UhOiBhbnk7XHJcbiAgb25Vc2VyTGluZVNhdmVkJCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICBvbkZldGNoVXNlclRva2VuJCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgcHJpdmF0ZSBfdXNlclRva2VuOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgZ2V0IHVzZXJUb2tlbigpIHtcclxuICAgIHJldHVybiB0aGlzLl91c2VyVG9rZW47XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91c2VyTmFtZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIGdldCB1c2VyTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3VzZXJOYW1lO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXNlckxhc3ROYW1lOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgZ2V0IHVzZXJMYXN0TmFtZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX3VzZXJMYXN0TmFtZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2N1Y21JZDogc3RyaW5nID0gJyc7XHJcblxyXG4gIGdldCBjdWNtSWQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jdWNtSWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91c2VyRGV2aWNlOiBEZXZpY2VQcm9maWxlIHwgdW5kZWZpbmVkO1xyXG5cclxuICBnZXQgdXNlckRldmljZSgpIHtcclxuICAgIHJldHVybiB0aGlzLl91c2VyRGV2aWNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxpbmVBc3NvY2lhdGlvbigpOiBMaW5lQXNzb2NpYXRpb25JbnRlcmZhY2UgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMudXNlckRldmljZSAmJiB0aGlzLnVzZXJEZXZpY2UubGluZUFzc29jaWF0aW9ucyAmJiB0aGlzLnVzZXJEZXZpY2UubGluZUFzc29jaWF0aW9uc1swXTtcclxuICB9XHJcblxyXG4gIGdldCBvcmlnaW5MaW5lQXNzb2NpYXRpb24oKTogTGluZUFzc29jaWF0aW9uIHwgTGluZUFzc29jaWF0aW9uSW50ZXJmYWNlIHtcclxuICAgIHJldHVybiB0aGlzLm9yaWdpbkRldmljZSAmJiBKU09OLnBhcnNlKHRoaXMub3JpZ2luRGV2aWNlKS5saW5lQXNzb2NpYXRpb25zWzBdO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGFwaVNlcnZpY2U6IEFQSVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGxpbmVTZXJ2aWNlOiBMaW5lU2VydmljZVxyXG4gICkge1xyXG5cclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2codGhpcy5zaXRlSWQpXHJcbiAgfVxyXG5cclxuICByZXNldExpbmVBc3NvY2lhdGlvbihkZXZpY2VJbmRleDogbnVtYmVyLCBsaW5lSW5kZXg6IG51bWJlciwgdmFsaWRhdGlvblNlcnZpY2U6IFZhbGlkYXRpb25TZXJ2aWNlKTogdm9pZCB7XHJcbiAgICBjb25zdCBvcmlnaW5MaW5lID0gdGhpcy5vcmlnaW5Vc2VyPy5kZXZpY2VzW2RldmljZUluZGV4XT8ubGluZUFzc29jaWF0aW9uc1tsaW5lSW5kZXhdO1xyXG4gICAgaWYgKHRoaXMudXNlcj8uZGV2aWNlc1tkZXZpY2VJbmRleF0/LmxpbmVBc3NvY2lhdGlvbnNbbGluZUluZGV4XSAmJiBvcmlnaW5MaW5lKSB7XHJcbiAgICAgIHRoaXMudXNlci5kZXZpY2VzW2RldmljZUluZGV4XS5saW5lQXNzb2NpYXRpb25zW2xpbmVJbmRleF0gPSBuZXcgTGluZUFzc29jaWF0aW9uKEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3JpZ2luTGluZS5nZXRGdWxsRGF0YSgpKSksIHZhbGlkYXRpb25TZXJ2aWNlKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVzZXREZXZpY2UoY3VycmVudERldmljZTogRGV2aWNlLCB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UpOiB2b2lkIHtcclxuICAgIGNvbnN0IG9yaWdpbkRldmljZSA9IHRoaXMub3JpZ2luVXNlci5kZXZpY2VzLmZpbmQoZGV2aWNlID0+IGRldmljZS5uYW1lID09PSBjdXJyZW50RGV2aWNlLm5hbWUpO1xyXG4gICAgY29uc3QgZGV2aWNlSW5kID0gdGhpcy51c2VyLmRldmljZXMuZmluZEluZGV4KGRldmljZSA9PiBkZXZpY2UubmFtZSA9PT0gY3VycmVudERldmljZS5uYW1lKTtcclxuICAgIGlmIChvcmlnaW5EZXZpY2UgJiYgZGV2aWNlSW5kID4gLTEpIHtcclxuICAgICAgY29uc3QgbGluZUFzc29jaWF0aW9ucyA9IHRoaXMudXNlci5kZXZpY2VzW2RldmljZUluZF0ubGluZUFzc29jaWF0aW9ucztcclxuICAgICAgdGhpcy51c2VyLmRldmljZXNbZGV2aWNlSW5kXSA9IG5ldyBEZXZpY2UoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcmlnaW5EZXZpY2UuZ2V0Tm9MaW5lc0Z1bGxEYXRhKCkpKSwgdmFsaWRhdGlvblNlcnZpY2UpO1xyXG4gICAgICB0aGlzLnVzZXIuZGV2aWNlc1tkZXZpY2VJbmRdLmxpbmVBc3NvY2lhdGlvbnMgPSBsaW5lQXNzb2NpYXRpb25zO1xyXG4gICAgICBjb25zb2xlLmxvZygnZGV2aWNlIGFmdGVyIHJlc2V0ID0gJywgdGhpcy51c2VyLmRldmljZXNbZGV2aWNlSW5kXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmV0Y2hVc2VyVG9rZW4oc2l0ZUlkOiBudW1iZXIsIHVzZXJJZDogc3RyaW5nLCB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsIGlzU2V0TmV3VG9rZW5Pbmx5PzogYm9vbGVhbik6IGFueSB7XHJcbiAgICAvKmlmICh0aGlzLnNpdGVJZCA9PT0gc2l0ZUlkICYmIHRoaXMudXNlcklkID09PSB1c2VySWQgJiYgdGhpcy51c2VyKSB7XHJcbiAgICAgIHJldHVybiBvZih0aGlzLnVzZXIpO1xyXG4gICAgfSovXHJcbiAgICB0aGlzLnNpdGVJZCA9IHNpdGVJZDtcclxuICAgIHRoaXMudXNlcklkID0gdXNlcklkO1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5mZXRjaChBUEkuVVNFUl9UT0tFTi5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHRoaXMuc2l0ZUlkKSkucmVwbGFjZSgnOnVzZXJJZCcsIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQodXNlcklkKSkpKVxyXG4gICAgICAucGlwZShtYXAoKHJlc3VsdDogYW55KSA9PiB7XHJcbiAgICAgICAgY29uc3QgdXNlciA9IHJlc3VsdCAmJiBPYmplY3QudmFsdWVzKHJlc3VsdClbMF07XHJcbiAgICAgICAgY29uc3QgdXNlclRva2VuID0gcmVzdWx0ICYmIE9iamVjdC5rZXlzKHJlc3VsdClbMF07XHJcbiAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgIGlmICghaXNTZXROZXdUb2tlbk9ubHkpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXRTaW1wbGlmaWVkVXNlcih1c2VyLCB2YWxpZGF0aW9uU2VydmljZSwgdXNlclRva2VuKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3VzZXJUb2tlbiA9IHVzZXJUb2tlbjtcclxuICAgICAgICAgICAgLy8gdGhpcy5vcmlnaW5Vc2VyLnRva2VuID0gdXNlci50b2tlbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMub25GZXRjaFVzZXJUb2tlbiQubmV4dCh0cnVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfSkpXHJcbiAgICAvLyAucGlwZSh0aGlzLmhhbmRsZUVycm9yKGZhbHNlLCB0cnVlKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmV0Y2hESVVzZXJEZXZpY2Uoc2l0ZUlkOiBudW1iZXIsIHVzZXJJZDogc3RyaW5nLCBkZXZpY2VUeXBlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2l0ZUlkID0gc2l0ZUlkO1xyXG4gICAgdGhpcy51c2VySWQgPSB1c2VySWQ7XHJcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmZldGNoKEFQSS5VU0VSX1RPS0VOLnJlcGxhY2UoJzpzaXRlSWQnLCBTdHJpbmcodGhpcy5zaXRlSWQpKS5yZXBsYWNlKCc6dXNlcklkJywgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudCh1c2VySWQpKSkpXHJcbiAgICAgIC5waXBlKG1hcCgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICBjb25zdCB1c2VyID0gcmVzdWx0ICYmIE9iamVjdC52YWx1ZXMocmVzdWx0KVswXTtcclxuICAgICAgICBjb25zdCB1c2VyVG9rZW4gPSByZXN1bHQgJiYgT2JqZWN0LmtleXMocmVzdWx0KVswXTtcclxuXHJcbiAgICAgICAgaWYgKHVzZXIpIHtcclxuICAgICAgICAgIHRoaXMuX3VzZXJUb2tlbiA9IHVzZXJUb2tlbjtcclxuICAgICAgICAgIHRoaXMuX3VzZXJOYW1lID0gdXNlci5maXJzdE5hbWU7XHJcbiAgICAgICAgICB0aGlzLl91c2VyTGFzdE5hbWUgPSB1c2VyLmxhc3ROYW1lO1xyXG4gICAgICAgICAgdGhpcy5fY3VjbUlkID0gdXNlci5jdWNtSWQ7XHJcbiAgICAgICAgICBjb25zdCBmb3VuZERldmljZSA9IHVzZXIuZGV2aWNlcy5maW5kKChkZXZpY2U6IGFueSkgPT4gZGV2aWNlLmRldmljZVR5cGUgPT09IGRldmljZVR5cGUpO1xyXG4gICAgICAgICAgaWYoZm91bmREZXZpY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5fdXNlckRldmljZSA9IG5ldyBEZXZpY2VQcm9maWxlKHtcclxuICAgICAgICAgICAgICAuLi5mb3VuZERldmljZSxcclxuICAgICAgICAgICAgICBtb2RlbDogZm91bmREZXZpY2U/LmRldmljZVR5cGUsXHJcbiAgICAgICAgICAgICAgbWFjQWRkcmVzczogdGhpcy5nZXRNYWNBZGRyZXNzKGZvdW5kRGV2aWNlLm5hbWUpLFxyXG4gICAgICAgICAgICAgIGxpbmVzOiBmb3VuZERldmljZT8ubGluZUFzc29jaWF0aW9ucz8ubWFwKChsaW5lOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGZvdW5kTGluZSA9IHVzZXI/LmxpbmVzPy5maW5kKChsOiBhbnkpID0+IGwucGtpZCA9PT0gbGluZS5saW5lUGtpZCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICBuYW1lOiBgJHt0aGlzLl91c2VyTmFtZX0gJHt0aGlzLl91c2VyTGFzdE5hbWV9YCxcclxuICAgICAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBsaW5lICYmIGxpbmUuZGlyZWN0b3J5TnVtYmVyICYmIGxpbmUuZGlyZWN0b3J5TnVtYmVyLnJvdXRlUGFydGl0aW9uTmFtZSAmJiBsaW5lLmRpcmVjdG9yeU51bWJlci5kaXJlY3RvcnlOdW1iZXIgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgIG51bWJlcjogZm91bmRMaW5lICE9PSAtMSA/IGZvdW5kTGluZS5tYXBwZWREaWRzWzBdIDogJycsXHJcbiAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmb3VuZExpbmUgJiYgZm91bmRMaW5lLmRpZFBhdHRlcm5zICYmIGZvdW5kTGluZS5kaWRQYXR0ZXJuc1swXSA/IGZvdW5kTGluZS5kaWRQYXR0ZXJuc1swXS5kZXNjcmlwdGlvbiA6ICcnLFxyXG4gICAgICAgICAgICAgICAgICByb3V0ZVBhcnRpdGlvbk5hbWU6IGxpbmUgJiYgbGluZS5kaXJlY3RvcnlOdW1iZXIucm91dGVQYXJ0aXRpb25OYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICBwa2lkOiBsaW5lICYmIGxpbmUubGluZVBraWQgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgIGluZGV4OiBsaW5lICYmIGxpbmUuaW5kZXggfHwgdW5kZWZpbmVkLFxyXG4gICAgICAgICAgICAgICAgICBwb3NpdGlvbjogbGluZSAmJiBsaW5lLnBvc2l0aW9uIHx8IHVuZGVmaW5lZCxcclxuICAgICAgICAgICAgICAgICAgdGV4dExhYmVsOiBsaW5lICYmIGxpbmUudGV4dExhYmVsIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICBhbGVydGluZ05hbWU6IGxpbmUgJiYgbGluZS5hbGVydGluZ05hbWUgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgIGNhbGxlck51bWJlcjogbGluZSAmJiBsaW5lLmNhbGxlck51bWJlciB8fCAnJ1xyXG4gICAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICBzb2Z0d2FyZVZlcnNpb246IGZvdW5kRGV2aWNlPy5maXJtd2FyZVZlcnNpb25cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vcmlnaW5EZXZpY2UgPSB0aGlzLl91c2VyRGV2aWNlID8gSlNPTi5zdHJpbmdpZnkodGhpcy5fdXNlckRldmljZS5nZXRTYXZhYmxlRGF0YSgpKSA6ICcnO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyRGV2aWNlO1xyXG4gICAgICB9KSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0TWFjQWRkcmVzcyhuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3QgbWFjUmVnZXggPSAvXltBLUZhLWYwLTldezEyfSQvO1xyXG4gICAgbGV0IG1hY0FkZHJlc3M7XHJcblxyXG4gICAgaWYgKG5hbWUubGVuZ3RoID09PSAxMiAmJiBtYWNSZWdleC50ZXN0KG5hbWUpKSB7XHJcbiAgICAgIG1hY0FkZHJlc3MgPSBuYW1lO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgdHJpbW1lZCA9IG5hbWUuc2xpY2UoMyk7XHJcbiAgICAgIG1hY0FkZHJlc3MgPSBtYWNSZWdleC50ZXN0KHRyaW1tZWQpID8gdHJpbW1lZCA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbWFjQWRkcmVzcztcclxuICB9XHJcblxyXG4gIHB1YmxpYyBmZXRjaFdlYmV4VXNlckRldmljZShjdXN0b21lcklkOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nLCBkZXZpY2VUeXBlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBmb3JrSm9pbihbXHJcbiAgICAgIHRoaXMuYXBpU2VydmljZS5mZXRjaChBUEkuV0VCRVhfVVNFUl9UT0tFTi5yZXBsYWNlKCc6Y3VzdG9tZXJJZCcsIGN1c3RvbWVySWQpLnJlcGxhY2UoJzp1c2VySWQnLCBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KHVzZXJJZCkpKSksXHJcbiAgICAgIHRoaXMuYXBpU2VydmljZS5mZXRjaChBUEkuV0VCRVhfVVNFUl9ERVZJQ0VTLnJlcGxhY2UoJzpjdXN0b21lcklkJywgY3VzdG9tZXJJZCkucmVwbGFjZSgnOnVzZXJJZCcsIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQodXNlcklkKSkpKVxyXG4gICAgXSlcclxuICAgICAgLnBpcGUobWFwKChyZXN1bHRzOiBhbnkpID0+IHtcclxuICAgICAgICB0aGlzLl91c2VyTmFtZSA9IHJlc3VsdHNbMF0uZmlyc3ROYW1lO1xyXG4gICAgICAgIHRoaXMuX3VzZXJMYXN0TmFtZSA9IHJlc3VsdHNbMF0ubGFzdE5hbWU7XHJcbiAgICAgICAgaWYocmVzdWx0c1sxXSkge1xyXG4gICAgICAgICAgY29uc3QgZm91bmREZXZpY2UgPSByZXN1bHRzWzFdLmRldmljZXMuZmluZCgoZGV2aWNlOiBhbnkpID0+IGRldmljZS5tb2RlbCA9PT0gZGV2aWNlVHlwZSk7XHJcbiAgICAgICAgICB0aGlzLl91c2VyRGV2aWNlID0gbmV3IERldmljZVByb2ZpbGUoe1xyXG4gICAgICAgICAgICAuLi5mb3VuZERldmljZSxcclxuICAgICAgICAgICAgbWFjQWRkcmVzczogZm91bmREZXZpY2UubWFjLFxyXG4gICAgICAgICAgICBtYXhMaW5lQ291bnQ6IGZvdW5kRGV2aWNlPy5kZXZpY2VNZW1iZXJzPy5tYXhMaW5lQ291bnQsXHJcbiAgICAgICAgICAgIGxpbmVzOiBmb3VuZERldmljZT8uZGV2aWNlTWVtYmVycz8ubWVtYmVycz8ubWFwKChtZW1iZXI6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBuYW1lOiBgJHttZW1iZXIuZmlyc3ROYW1lfSAke21lbWJlci5sYXN0TmFtZX1gLFxyXG4gICAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBtZW1iZXIuZXh0ZW5zaW9uXHJcbiAgICAgICAgICAgICAgfSBcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLl91c2VyRGV2aWNlO1xyXG4gICAgICB9KSlcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVVc2VyRmllbGRzKGJvZHk6IGFueSk6IGFueSB7XHJcbiAgICBpZiAoIXRoaXMudXNlcklkIHx8ICF0aGlzLnNpdGVJZCB8fCAhdGhpcy51c2VyPy50b2tlbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLnBvc3QoQVBJLlVQREFURV9VU0VSX0ZJRUxEUy5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHRoaXMuc2l0ZUlkKSkucmVwbGFjZSgnOnRva2VuJywgdGhpcy51c2VyVG9rZW4pLCBib2R5KVxyXG4gICAgICAvLyAucGlwZSh0aGlzLmhhbmRsZUVycm9yKGZhbHNlLCB0cnVlKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmV0Y2hVc2VyQnlJZChpZDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnVzZXJJZEV4aXN0UGVuZGluZyA9IHRydWU7XHJcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmZldGNoKEFQSS5VU0VSX0JZX0lELnJlcGxhY2UoJzpzaXRlSWQnLCBTdHJpbmcodGhpcy5zaXRlSWQpKS5yZXBsYWNlKCc6dXNlcklkJywgZW5jb2RlVVJJQ29tcG9uZW50KGVuY29kZVVSSUNvbXBvbmVudChpZCkpKSlcclxuICAgICAgLnBpcGUobWFwKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgdGhpcy51c2VySWRFeGlzdFBlbmRpbmcgPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICB9KSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZmV0Y2hMZWFuVXNlckNvbnZlcnNhdGlvbkJ5SWQoaWQ6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5mZXRjaChBUEkuTEVBTl9VU0VSX0NPTlZFUlNBVElPTl9TVEFSVC5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHRoaXMuc2l0ZUlkKSkucmVwbGFjZSgnOnVzZXJJZCcsIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoaWQpKSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGZldGNoTGVhblVzZXJEZXZpY2VzQ29udmVyc2F0aW9uQnlJZChpZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmZldGNoKEFQSS5MRUFOX1VTRVJfREVWSUNFU19DT05WRVJTQVRJT05fU1RBUlQucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyh0aGlzLnNpdGVJZCkpLnJlcGxhY2UoJzp1c2VySWQnLCBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGlkKSkpKTtcclxuICB9XHJcbiAgcHVibGljIGZldGNoTGVhblVzZXJMaW5lc0NvbnZlcnNhdGlvbkJ5SWQoaWQ6IHN0cmluZywgbGVhblVzZXJEZXZpY2VzVG9rZW46IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5mZXRjaChBUEkuTEVBTl9VU0VSX0xJTkVTX0NPTlZFUlNBVElPTl9TVEFSVC5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHRoaXMuc2l0ZUlkKSlcclxuICAgICAgLnJlcGxhY2UoJzp1c2VySWQnLCBlbmNvZGVVUklDb21wb25lbnQoZW5jb2RlVVJJQ29tcG9uZW50KGlkKSkpLnJlcGxhY2UoJzpsZWFuVXNlckRldmljZXNUb2tlbicsIGxlYW5Vc2VyRGV2aWNlc1Rva2VuKSk7XHJcbiAgfVxyXG4gIHB1YmxpYyBmZXRjaExlYW5Vc2VyU05SQ29udmVyc2F0aW9uQnlJZChpZDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLmZldGNoKEFQSS5MRUFOX1VTRVJfU05SX0NPTlZFUlNBVElPTl9TVEFSVC5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHRoaXMuc2l0ZUlkKSkucmVwbGFjZSgnOnVzZXJJZCcsIGVuY29kZVVSSUNvbXBvbmVudChlbmNvZGVVUklDb21wb25lbnQoaWQpKSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHBlcnNpc3RDYWNoZUNoYW5nZXMoKSB7XHJcbiAgICAvKmNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgZXhjbHVkZURldmljZUV4dHJhT3B0aW9uczogdHJ1ZVxyXG4gICAgfTsqL1xyXG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1VzZXJDaGFuZ2VzVG9DYWNoZSgpXHJcbiAgICAgIC5waXBlKG1hcCgocmVzdWx0OiBhbnkpID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLnBvc3QoQVBJLlBFUlNJU1RfVVNFUl9DQUNIRS5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHRoaXMuc2l0ZUlkKSkucmVwbGFjZSgnOnRva2VuJywgdGhpcy51c2VyVG9rZW4pLCB7fSwge30pXHJcbiAgICAgICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICAgLy8gLnBpcGUobWFwKCh1c2VyKSA9PiB7XHJcbiAgICAgICAgICAvLyAgIC8vIHRoaXMuc2V0VXNlcih1c2VyLCBmYWxzZSwgdGhpcy51c2VyLnRva2VuKTtcclxuICAgICAgICAgIC8vICAgdGhpcy51c2VyLmhhc01vZGlmaWVkQ2FjaGUgPSBmYWxzZTtcclxuICAgICAgICAgIC8vIH0pKVxyXG4gICAgICAgICAgLy8gLnBpcGUodGhpcy5oYW5kbGVFcnJvcih0cnVlLCB0cnVlKSk7XHJcbiAgICAgIH0pKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwcm9jZXNzVXNlckNoYW5nZXNUb0NhY2hlKCk6IGFueSB7XHJcbiAgICBjb25zdCBjYWxscyA9IFtdO1xyXG4gICAgY29uc3QgYm9keSA9IFV0aWxzU2VydmljZS5kaWZmKHRoaXMub3JpZ2luVXNlci5nZXRVc2VyRGV0YWlsc1NhdmFibGVEYXRhKCksIHRoaXMudXNlci5nZXRVc2VyRGV0YWlsc1NhdmFibGVEYXRhKCksICd1c2VyJyk7XHJcbiAgICBpZiAoYm9keT8ubGVuZ3RoKSB7XHJcbiAgICAgIGNhbGxzLnB1c2godGhpcy51cGRhdGVVc2VyRmllbGRzKGJvZHkpKTtcclxuICAgIH1cclxuICAgIGlmICghY2FsbHM/Lmxlbmd0aCkge1xyXG4gICAgICByZXR1cm4gb2YodGhpcy51c2VyKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZm9ya0pvaW4oY2FsbHMpXHJcbiAgICAgIC5waXBlKG1hcCgocmVzcG9uc2VzOiBhbnkpID0+IHtcclxuICAgICAgICAvLyBBcGlVc2VyUmVzcG9uc2VcclxuICAgICAgICB0aGlzLmhhbmRsZVNhdmVVc2VyUmVzcG9uc2UocmVzcG9uc2VzKTtcclxuICAgICAgfSkpXHJcbiAgICAvLyAucGlwZSh0aGlzLmhhbmRsZUVycm9yKGZhbHNlLCB0cnVlKSk7XHJcblxyXG4gIH1cclxuXHJcbiAgcHVibGljIHNhdmVOZXdMaW5lKGxpbmU6IGFueSk6IGFueSB7XHJcbiAgICB0aGlzLmRlbGV0ZUxpbmUodGhpcy5zaXRlSWQsIGxpbmUucGtpZCwgZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMudXNlclRva2VuKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgVVJMID0gQVBJLlBFUlNJU1RfVVNFUl9DQUNIRS5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHRoaXMuc2l0ZUlkKSkucmVwbGFjZSgnOnRva2VuJywgdGhpcy51c2VyVG9rZW4pO1xyXG4gICAgICAgIHRoaXMuYXBpU2VydmljZS5wb3N0KFVSTCwge30sIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJ1bk5ld0xpbmVDcmVhdGlvbihsaW5lKTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBwZXJzaXN0VXNlckNhY2hlKCk6IGFueSB7XHJcbiAgICBjb25zdCBVUkwgPSBBUEkuUEVSU0lTVF9VU0VSX0NBQ0hFLnJlcGxhY2UoJzpzaXRlSWQnLCBTdHJpbmcodGhpcy5zaXRlSWQpKS5yZXBsYWNlKCc6dG9rZW4nLCB0aGlzLnVzZXJUb2tlbik7XHJcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLnBvc3QoVVJMLCB7fSwgKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBydW5OZXdMaW5lQ3JlYXRpb24obGluZTogYW55KTogdm9pZCB7XHJcbiAgICAvLyBDUkVBVEUgTkVXIExJTkVcclxuICAgIGNvbnN0IG5ld0xpbmVCb2R5ID0gU29ydGluZ1V0aWxzU2VydmljZS5kaWZmKFxyXG4gICAgICB0aGlzLmxpbmVTZXJ2aWNlLmdlbmVyYXRlTGluZUFzc29jaWF0aW9uRnJvbUxpbmUobnVsbCksXHJcbiAgICAgIHRoaXMubGluZVNlcnZpY2UuZ2VuZXJhdGVMaW5lQXNzb2NpYXRpb25Gcm9tTGluZShsaW5lKSxcclxuICAgICAgJ2RldmljZS5saW5lQXNzb2NpYXRpb25zJywgbnVsbFxyXG4gICAgKTtcclxuICAgIHRoaXMuYXNzb2NpYXRlTGluZVRvVXNlckRldmljZShcclxuICAgICAgdGhpcy5zaXRlSWQsXHJcbiAgICAgIHRoaXMudXNlckRldmljZSAmJiB0aGlzLnVzZXJEZXZpY2UubmFtZSB8fCAnJyxcclxuICAgICAgbmV3TGluZUJvZHksXHJcbiAgICAgIG51bGwsXHJcbiAgICAgIHRoaXMubGluZUFzc29jaWF0aW9uPy5jYWxsaW5nU2VhcmNoU3BhY2VcclxuICAgIClcclxuICAgIC5waXBlKHN3aXRjaE1hcCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IFVSTCA9IEFQSS5QRVJTSVNUX1VTRVJfQ0FDSEUucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyh0aGlzLnNpdGVJZCkpLnJlcGxhY2UoJzp0b2tlbicsIHRoaXMudXNlclRva2VuKTtcclxuICAgICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5wb3N0KFVSTCwge30sICk7XHJcbiAgICB9KSlcclxuICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKHJlc3BvbnNlPy5jdXJyZW50VXBkYXRlZFVzZXIpIHtcclxuICAgICAgICBjb25zdCBsaW5lUGtJZCA9IHJlc3BvbnNlLmN1cnJlbnRVcGRhdGVkVXNlci5kZXZpY2VzWzBdPy5saW5lQXNzb2NpYXRpb25zWzBdPy5saW5lUGtpZCB8fCByZXNwb25zZS5jdXJyZW50VXBkYXRlZFVzZXIuZGV2aWNlc1swXT8ubGluZUFzc29jaWF0aW9uc1swXT8ubGluZUxvY2FsSWQ7XHJcbiAgICAgICAgZm9ya0pvaW4oW1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVMaW5lRmllbGRzKHRoaXMuc2l0ZUlkLCBsaW5lUGtJZCwgdGhpcy51c2VyVG9rZW4sIHRoaXMubGluZUFzc29jaWF0aW9uPy5hbGVydGluZ05hbWUpLFxyXG4gICAgICAgICAgdGhpcy51cGRhdGVEZXZpY2VGaWVsZHModGhpcy5zaXRlSWQsIHRoaXMudXNlckRldmljZSAmJiB0aGlzLnVzZXJEZXZpY2UubmFtZSB8fCAnJywgdGhpcy51c2VyVG9rZW4pXHJcbiAgICAgICAgXSkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBvcmlnaW5hbERldmljZURhdGEgPSBKU09OLnBhcnNlKHRoaXMub3JpZ2luRGV2aWNlKTtcclxuICAgICAgICAgIGNvbnN0IG9yaWdpbmFsRGV2aWNlTGluZSA9IG9yaWdpbmFsRGV2aWNlRGF0YS5saW5lcy5maW5kKChvcmlnTGluZTogYW55KSA9PiBvcmlnTGluZS5wa2lkID09PSBsaW5lLnBraWQpO1xyXG4gICAgICAgICAgaWYob3JpZ2luYWxEZXZpY2VMaW5lKSB7XHJcbiAgICAgICAgICAgIG9yaWdpbmFsRGV2aWNlRGF0YS5leHRlbnNpb24gPSBsaW5lLmV4dGVuc2lvbjtcclxuICAgICAgICAgICAgdGhpcy5vcmlnaW5EZXZpY2UgPSBKU09OLnN0cmluZ2lmeShvcmlnaW5hbERldmljZURhdGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5vblVzZXJMaW5lU2F2ZWQkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgICAvLyAtLS0tLVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGRlbGV0ZUxpbmUoc2l0ZUlkOiBudW1iZXIsIHBraWQ6IHN0cmluZywgdG9rZW46IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5kZWxldGUoQVBJLkRFTEVURV9MSU5FLnJlcGxhY2UoJzpzaXRlSWQnLCBTdHJpbmcoc2l0ZUlkKSkucmVwbGFjZSgnOnBraWQnLCBwa2lkKS5yZXBsYWNlKCc6dG9rZW4nLCBlbmNvZGVVUklDb21wb25lbnQodG9rZW4pKSwge30pXHJcbiAgICAgIC8vIC5waXBlKHRoaXMuaGFuZGxlRXJyb3IodHJ1ZSwgZmFsc2UpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBkaXNhc3NvY2lhdGVMaW5lKHNpdGVJZDogbnVtYmVyLCBsaW5lUGtpZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBkZXZpY2VOYW1lOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UuZGVsZXRlKFxyXG4gICAgICBBUEkuRElTQVNTT0NJQVRFX0xJTkUucmVwbGFjZSgnOnNpdGVJZCcsIFN0cmluZyhzaXRlSWQpKVxyXG4gICAgICAgIC5yZXBsYWNlKCc6bGluZVBraWQnLCBsaW5lUGtpZClcclxuICAgICAgICAucmVwbGFjZSgnOmRldmljZU5hbWUnLCBkZXZpY2VOYW1lKVxyXG4gICAgICAgIC5yZXBsYWNlKCc6dG9rZW4nLCBlbmNvZGVVUklDb21wb25lbnQodG9rZW4pKSwge30pXHJcbiAgICAgIC8vIC5waXBlKHRoaXMuaGFuZGxlRXJyb3IodHJ1ZSwgZmFsc2UpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVMaW5lRmllbGRzKHNpdGVJZDogbnVtYmVyLCBwa2lkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGFsZXJ0aW5nTmFtZTogYW55KSB7XHJcbiAgICBjb25zdCBib2R5ID0gWydsaW5lLmRlc2NyaXB0aW9uPScsIGBsaW5lLmFsZXJ0aW5nTmFtZT0ke2FsZXJ0aW5nTmFtZX1gXTtcclxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2UucG9zdChBUEkuVVBEQVRFX0xJTkVfRklFTERTLnJlcGxhY2UoJzpzaXRlSWQnLCBTdHJpbmcoc2l0ZUlkKSkucmVwbGFjZSgnOnBraWQnLCBlbmNvZGVVUklDb21wb25lbnQocGtpZCkpLnJlcGxhY2UoJzp0b2tlbicsIGVuY29kZVVSSUNvbXBvbmVudCh0b2tlbikpLCBib2R5KVxyXG4gICAgICAvLyAucGlwZSh0aGlzLmhhbmRsZUVycm9yKHRydWUsIGZhbHNlKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlRGV2aWNlRmllbGRzKHNpdGVJZDogbnVtYmVyLCBkZXZpY2VOYW1lOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGJvZHkgPSBbJ2RldmljZS5hc3NvY2lhdGVkRE5zLjA9bnVsbCddO1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5wb3N0KEFQSS5VUERBVEVfREVWSUNFX0ZJRUxEUy5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHNpdGVJZCkpLnJlcGxhY2UoJzpkZXZpY2VOYW1lJywgZGV2aWNlTmFtZSkucmVwbGFjZSgnOnRva2VuJywgZW5jb2RlVVJJQ29tcG9uZW50KHRva2VuKSksIGJvZHkpXHJcbiAgICAvLyAucGlwZSh0aGlzLmhhbmRsZUVycm9yKHRydWUsIGZhbHNlKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2hlY2tEZXN0aW5hdGlvbk51bWJlcihzaXRlSWQ6IHN0cmluZywgZGlyZWN0b3J5TnVtYmVyOiBzdHJpbmcsIHJvdXRlUGFydGl0aW9uTmFtZTogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgIGRudHlwZTogJ0VYVEVOU0lPTidcclxuICAgIH07XHJcbiAgICBjb25zdCBib2R5ID0ge1xyXG4gICAgICBkaXJlY3RvcnlOdW1iZXI6IGRpcmVjdG9yeU51bWJlcixcclxuICAgICAgcm91dGVQYXJ0aXRpb25OYW1lOiByb3V0ZVBhcnRpdGlvbk5hbWVcclxuICAgIH07XHJcbiAgICByZXR1cm4gdGhpcy5hcGlTZXJ2aWNlLnBvc3QoQVBJLkNIRUNLX0RFU1RJTkFUSU9OX05VTUJFUi5yZXBsYWNlKCc6c2l0ZUlkJywgc2l0ZUlkKSwgYm9keSwgcGFyYW1zKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBhc3NvY2lhdGVMaW5lVG9Vc2VyRGV2aWNlKHNpdGVJZDogbnVtYmVyLCBkZXZpY2VOYW1lOiBzdHJpbmcsIGJvZHk6IGFueSwgcGtpZDogYW55LCBjc3M6IGFueSkge1xyXG4gICAgbGV0IHBhcmFtcyA9IHt9O1xyXG4gICAgaWYgKHBraWQpIHtcclxuICAgICAgcGFyYW1zID0ge2xpbmVQa2lkOiBwa2lkfTtcclxuICAgIH1cclxuICAgIGlmIChjc3MpIHtcclxuICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICBwYXJhbXNbJ2NzcyddID0gY3NzO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuYXBpU2VydmljZS5wb3N0KEFQSS5BU1NPQ0lBVEVfTElORS5yZXBsYWNlKCc6c2l0ZUlkJywgU3RyaW5nKHNpdGVJZCkpLnJlcGxhY2UoJzpkZXZpY2VOYW1lJywgZGV2aWNlTmFtZSlcclxuICAgICAgLnJlcGxhY2UoJzp0b2tlbicsIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLnVzZXJUb2tlbikpLCBib2R5LCBwYXJhbXMpXHJcbiAgICAgIC8vIC5waXBlKHRoaXMuaGFuZGxlRXJyb3IodHJ1ZSwgdHJ1ZSkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhhc1Vuc2F2ZWRDaGFuZ2VzKCkge1xyXG4gICAgaWYgKHRoaXMuX3VzZXJEZXZpY2UgJiYgdGhpcy5vcmlnaW5EZXZpY2UpIHtcclxuICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuX3VzZXJEZXZpY2UuZ2V0U2F2YWJsZURhdGEoKSkgJiYgdGhpcy5vcmlnaW5EZXZpY2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0U2ltcGxpZmllZFVzZXIodXNlcjogYW55LCB2YWxpZGF0aW9uU2VydmljZTogVmFsaWRhdGlvblNlcnZpY2UsIHVzZXJUb2tlbj86IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy51c2VyID0gbmV3IFNpbXBsaWZpZWRVc2VyKHVzZXIsIHZhbGlkYXRpb25TZXJ2aWNlKTtcclxuICAgIGNvbnN0IGNvcGllZFVzZXIgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHVzZXIpKTtcclxuICAgIHRoaXMub3JpZ2luVXNlciA9IG5ldyBTaW1wbGlmaWVkVXNlcihjb3BpZWRVc2VyLCB2YWxpZGF0aW9uU2VydmljZSk7XHJcbiAgICBpZiAoIXRoaXMudXNlclRva2VuICYmIHVzZXJUb2tlbikge1xyXG4gICAgICB0aGlzLl91c2VyVG9rZW4gPSB1c2VyVG9rZW47XHJcbiAgICAgIC8vIHRoaXMub3JpZ2luVXNlci50b2tlbiA9IHVzZXJUb2tlbjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBlZGl0VHJhbnNsYXRpb25QYXR0ZXJuKFxyXG4gICAgICBjdWNtSWQ6IHN0cmluZyxcclxuICAgICAgb2xkcGF0dGVybjogc3RyaW5nLFxyXG4gICAgICBuZXdQYXR0ZXJuOiBzdHJpbmcsXHJcbiAgICAgIGV4dGVuc2lvbjogc3RyaW5nLFxyXG4gICAgICByb3V0ZVBhcnRpdGlvbk5hbWU6IHN0cmluZyxcclxuICAgICAgZGVzY3JpcHRpb246IHN0cmluZyxcclxuICAgICkge1xyXG4gICAgY29uc3QgcGFyYW1zID0ge1xyXG4gICAgICBvcmlnaW5hbHBhdHRlcm46IG9sZHBhdHRlcm4sXHJcbiAgICB9O1xyXG4gICAgY29uc3QgVVJMID0gQVBJLlRSQU5TTEFUSU9OX1BBVFRFUk5fQ1VDTS5yZXBsYWNlKCc6Y3VjbUlkJywgY3VjbUlkKTtcclxuICAgIHJldHVybiB0aGlzLmFwaVNlcnZpY2VcclxuICAgICAgLnB1dChVUkwsIHsgY2FsbGVkUGFydHlUcmFuc2Zvcm1hdGlvbk1hc2s6IGV4dGVuc2lvbiwgcGF0dGVybjogbmV3UGF0dGVybiwgcm91dGVQYXJ0aXRpb25OYW1lOiByb3V0ZVBhcnRpdGlvbk5hbWUsIGRlc2NyaXB0aW9uIH0sIHBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgbGluZVVwZGF0ZWQobGluZTogYW55LCBpbmRleDogbnVtYmVyKSB7XHJcbiAgICBjb25zdCBvcmlnaW5hbExpbmUgPSBKU09OLnBhcnNlKHRoaXMub3JpZ2luRGV2aWNlKS5saW5lc1tpbmRleF07XHJcbiAgICByZXR1cm4gb3JpZ2luYWxMaW5lLm51bWJlciAhPT0gbGluZS5udW1iZXIgfHwgb3JpZ2luYWxMaW5lLmV4dGVuc2lvbiAhPT0gbGluZS5leHRlbnNpb247XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0T3JpZ2luYWxOdW1iZXIobGluZTogYW55KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGZvdW5kTGluZSA9IEpTT04ucGFyc2UodGhpcy5vcmlnaW5EZXZpY2UpLmxpbmVzLmZpbmQoKG9yaWdMaW5lOiBhbnkpID0+IG9yaWdMaW5lLmV4dGVuc2lvbiA9PT0gbGluZS5leHRlbnNpb24gfHwgb3JpZ0xpbmUubnVtYmVyID09PSBsaW5lLm51bWJlcik7XHJcbiAgICByZXR1cm4gZm91bmRMaW5lLm51bWJlciB8fCAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlU2F2ZVVzZXJSZXNwb25zZShyZXNwb25zZXM6IGFueSkge1xyXG4gICAgaWYgKCFyZXNwb25zZXM/Lmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBsZW4gPSByZXNwb25zZXMubGVuZ3RoLCBpID0gbGVuIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgaWYgKHJlc3BvbnNlc1tpXSAmJiByZXNwb25zZXNbaV0uY3VycmVudFVwZGF0ZWRVc2VyKSB7XHJcbiAgICAgICAgLy8gdGhpcy5zZXRVc2VyKHJlc3BvbnNlc1tpXS5jdXJyZW50VXBkYXRlZFVzZXIsIGZhbHNlLCB0aGlzLnVzZXIudG9rZW4pO1xyXG4gICAgICAgIHRoaXMudXNlci5oYXNNb2RpZmllZENhY2hlID0gdHJ1ZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
@@ -84,4 +84,4 @@ UtilsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version
84
84
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UtilsService, decorators: [{
85
85
  type: Injectable
86
86
  }] });
87
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWRldmljZS1tYW5hZ2Uvc3JjL3NlcnZpY2VzL3V0aWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHM0MsTUFBTSxPQUFPLFlBQVk7SUFFdkIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFjLEVBQUUsS0FBYSxFQUFFLFVBQWdCLEVBQUUsS0FBYztRQUNsRixJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUNELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM3QixPQUFPLENBQ0wsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNsRSxDQUFDLFVBQVUsSUFBSSxVQUFVLEtBQUssTUFBTSxDQUFDLENBQ3hDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFBQSxDQUFDO0lBRUYsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEtBQVMsRUFBRSxNQUFjO1FBQ3RELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxL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QyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQzNILE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUM5RSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDekQ7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQVU7UUFDN0IsSUFBSSxLQUFLLEVBQUU7WUFDVCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsUUFBUSxPQUFPLEtBQUssRUFBRTtZQUNwQixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxLQUFLLENBQUM7WUFDZixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxFQUFFLENBQUM7WUFDWjtnQkFDRSxPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBUyxFQUFFLElBQVM7UUFDakMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsQ0FBQzs7MEdBbEZVLFlBQVk7OEdBQVosWUFBWTs0RkFBWixZQUFZO2tCQUR4QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVXRpbHNTZXJ2aWNlIHtcblxuICBzdGF0aWMgZmlsdGVyT3B0aW9ucyhvcHRpb25zOiBhbnlbXSwgcXVlcnk6IHN0cmluZywgc2hvd25WYWx1ZT86IGFueSwgZmllbGQ/OiBzdHJpbmcpICB7XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGlmICghcXVlcnkpIHtcbiAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbiAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGZpZWxkID8gU3RyaW5nKG9wdGlvbltmaWVsZF0pLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoU3RyaW5nKHF1ZXJ5KS50b0xvd2VyQ2FzZSgpKSA6XG4gICAgICAgICAgU3RyaW5nKG9wdGlvbikudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhTdHJpbmcocXVlcnkpLnRvTG93ZXJDYXNlKCkpIHx8XG4gICAgICAgICAgKHNob3duVmFsdWUgJiYgc2hvd25WYWx1ZSA9PT0gb3B0aW9uKVxuICAgICAgKTtcbiAgICB9KTtcbiAgfTtcblxuICBzdGF0aWMgc29ydFNvcnRBcnJheUJ5UHJvcGVydHkoYXJyYXk6IFtdLCBzb3J0Qnk6IHN0cmluZykge1xuICAgIGlmICghYXJyYXkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gYXJyYXkuc29ydCgoYSwgYikgPT4ge1xuICAgICAgaWYgKCFhW3NvcnRCeV0gJiYgIWJbc29ydEJ5XSkge1xuICAgICAgICByZXR1cm4gMDtcbiAgICAgIH1cbiAgICAgIGlmIChhW3NvcnRCeV0gJiYgIWJbc29ydEJ5XSkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIGlmICghYVtzb3J0QnldICYmIGJbc29ydEJ5XSkge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB9XG4gICAgICBjb25zdCBwb3NpdGlvbkEgPSBhW3NvcnRCeV07XG4gICAgICBjb25zdCBwb3NpdGlvbkIgPSBiW3NvcnRCeV07XG4gICAgICByZXR1cm4gKHBvc2l0aW9uQSA8IHBvc2l0aW9uQikgPyAtMSA6IChwb3NpdGlvbkEgPiBwb3NpdGlvbkIpID8gMSA6IDA7XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZGlmZihvcmlnT2JqZWN0OiBhbnksIHVwZGF0ZWRPYmo6IGFueSwgcGF0aDogc3RyaW5nLCBrZXlzVG9JZ25vcmU/OiBzdHJpbmdbXSkge1xuICAgIGxldCByZXN1bHQ6IGFueSA9IFtdO1xuICAgIGlmIChPYmplY3QuaXMob3JpZ09iamVjdCwgdXBkYXRlZE9iaikpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGlmICghdXBkYXRlZE9iaiB8fCB0eXBlb2YgdXBkYXRlZE9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB1cGRhdGVkT2JqO1xuICAgIH1cbiAgICBjb25zdCBjb25jYXQgPSBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLk9iamVjdC5rZXlzKG9yaWdPYmplY3QgfHwge30pLCAuLi5PYmplY3Qua2V5cyh1cGRhdGVkT2JqIHx8IHt9KV0pKTtcbiAgICBjb25zdCBmaWx0ZXIgPSBrZXlzVG9JZ25vcmUgPyBjb25jYXQuZmlsdGVyKGtleSA9PiAha2V5c1RvSWdub3JlLmluY2x1ZGVzKGtleSkpIDogY29uY2F0O1xuICAgIGZpbHRlclxuICAgICAgLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgaWYgKHR5cGVvZiB1cGRhdGVkT2JqW2tleV0gPT09ICdvYmplY3QnICYmIHR5cGVvZiBvcmlnT2JqZWN0W2tleV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgaWYgKFV0aWxzU2VydmljZS5kaWZmZXJzKHVwZGF0ZWRPYmpba2V5XSwgb3JpZ09iamVjdFtrZXldKSkge1xuICAgICAgICAgICAgY29uc3QgbmV3UGF0aCA9IGAke3BhdGh9JHtwYXRoID8gJy4nIDogJyd9JHtrZXl9YDtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IFV0aWxzU2VydmljZS5kaWZmKG9yaWdPYmplY3Rba2V5XSwgdXBkYXRlZE9ialtrZXldLCBuZXdQYXRoLCBrZXlzVG9JZ25vcmUpO1xuICAgICAgICAgICAgaWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IFsuLi5yZXN1bHQsIC4uLnZhbHVlc107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHVwZGF0ZWRPYmogJiYgIW9yaWdPYmplY3QgfHwgdXBkYXRlZE9ialtrZXldICE9PSBvcmlnT2JqZWN0W2tleV0gJiYgIU9iamVjdC5pcyhvcmlnT2JqZWN0W2tleV0sIHVwZGF0ZWRPYmpba2V5XSkpIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHVwZGF0ZWRPYmogPyBVdGlsc1NlcnZpY2UuZm9ybWF0SWZFbXB0eSh1cGRhdGVkT2JqW2tleV0pIDogbnVsbDtcbiAgICAgICAgICByZXN1bHQucHVzaChgJHtwYXRofSR7cGF0aCA/ICcuJyA6ICcnfSR7a2V5fT0ke3ZhbHVlfWApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgc3RhdGljIGZvcm1hdElmRW1wdHkodmFsdWU6IGFueSkge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cbiAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBkaWZmZXJzKG9iajE6IGFueSwgb2JqMjogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iajEpICE9PSBKU09OLnN0cmluZ2lmeShvYmoyKTtcbiAgfVxufVxuIl19
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWRldmljZS1tYW5hZ2Uvc3JjL3NlcnZpY2VzL3V0aWxzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHM0MsTUFBTSxPQUFPLFlBQVk7SUFFdkIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFjLEVBQUUsS0FBYSxFQUFFLFVBQWdCLEVBQUUsS0FBYztRQUNsRixJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osT0FBTyxFQUFFLENBQUM7U0FDWDtRQUNELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLE9BQU8sQ0FBQztTQUNoQjtRQUNELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM3QixPQUFPLENBQ0wsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pGLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNsRSxDQUFDLFVBQVUsSUFBSSxVQUFVLEtBQUssTUFBTSxDQUFDLENBQ3hDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFBQSxDQUFDO0lBRUYsTUFBTSxDQUFDLHVCQUF1QixDQUFDLEtBQVMsRUFBRSxNQUFjO1FBQ3RELElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDVixPQUFPLElBQUksQ0FBQztTQUNiO1FBQ0QsT0FBTyxL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QyxJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQzNILE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUM5RSxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsR0FBRyxJQUFJLEtBQUssRUFBRSxDQUFDLENBQUM7YUFDekQ7UUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQVU7UUFDN0IsSUFBSSxLQUFLLEVBQUU7WUFDVCxPQUFPLEtBQUssQ0FBQztTQUNkO1FBQ0QsUUFBUSxPQUFPLEtBQUssRUFBRTtZQUNwQixLQUFLLFNBQVM7Z0JBQ1osT0FBTyxLQUFLLENBQUM7WUFDZixLQUFLLFFBQVE7Z0JBQ1gsT0FBTyxFQUFFLENBQUM7WUFDWjtnQkFDRSxPQUFPLElBQUksQ0FBQztTQUNmO0lBQ0gsQ0FBQztJQUVELE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBUyxFQUFFLElBQVM7UUFDakMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsQ0FBQzs7MEdBbEZVLFlBQVk7OEdBQVosWUFBWTs0RkFBWixZQUFZO2tCQUR4QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgVXRpbHNTZXJ2aWNlIHtcclxuXHJcbiAgc3RhdGljIGZpbHRlck9wdGlvbnMob3B0aW9uczogYW55W10sIHF1ZXJ5OiBzdHJpbmcsIHNob3duVmFsdWU/OiBhbnksIGZpZWxkPzogc3RyaW5nKSAge1xyXG4gICAgaWYgKCFvcHRpb25zKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIGlmICghcXVlcnkpIHtcclxuICAgICAgcmV0dXJuIG9wdGlvbnM7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gb3B0aW9ucy5maWx0ZXIob3B0aW9uID0+IHtcclxuICAgICAgcmV0dXJuIChcclxuICAgICAgICBmaWVsZCA/IFN0cmluZyhvcHRpb25bZmllbGRdKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFN0cmluZyhxdWVyeSkudG9Mb3dlckNhc2UoKSkgOlxyXG4gICAgICAgICAgU3RyaW5nKG9wdGlvbikudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhTdHJpbmcocXVlcnkpLnRvTG93ZXJDYXNlKCkpIHx8XHJcbiAgICAgICAgICAoc2hvd25WYWx1ZSAmJiBzaG93blZhbHVlID09PSBvcHRpb24pXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9O1xyXG5cclxuICBzdGF0aWMgc29ydFNvcnRBcnJheUJ5UHJvcGVydHkoYXJyYXk6IFtdLCBzb3J0Qnk6IHN0cmluZykge1xyXG4gICAgaWYgKCFhcnJheSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJldHVybiBhcnJheS5zb3J0KChhLCBiKSA9PiB7XHJcbiAgICAgIGlmICghYVtzb3J0QnldICYmICFiW3NvcnRCeV0pIHtcclxuICAgICAgICByZXR1cm4gMDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoYVtzb3J0QnldICYmICFiW3NvcnRCeV0pIHtcclxuICAgICAgICByZXR1cm4gMTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWFbc29ydEJ5XSAmJiBiW3NvcnRCeV0pIHtcclxuICAgICAgICByZXR1cm4gLTE7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcG9zaXRpb25BID0gYVtzb3J0QnldO1xyXG4gICAgICBjb25zdCBwb3NpdGlvbkIgPSBiW3NvcnRCeV07XHJcbiAgICAgIHJldHVybiAocG9zaXRpb25BIDwgcG9zaXRpb25CKSA/IC0xIDogKHBvc2l0aW9uQSA+IHBvc2l0aW9uQikgPyAxIDogMDtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGRpZmYob3JpZ09iamVjdDogYW55LCB1cGRhdGVkT2JqOiBhbnksIHBhdGg6IHN0cmluZywga2V5c1RvSWdub3JlPzogc3RyaW5nW10pIHtcclxuICAgIGxldCByZXN1bHQ6IGFueSA9IFtdO1xyXG4gICAgaWYgKE9iamVjdC5pcyhvcmlnT2JqZWN0LCB1cGRhdGVkT2JqKSkge1xyXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG4gICAgaWYgKCF1cGRhdGVkT2JqIHx8IHR5cGVvZiB1cGRhdGVkT2JqICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICByZXR1cm4gdXBkYXRlZE9iajtcclxuICAgIH1cclxuICAgIGNvbnN0IGNvbmNhdCA9IEFycmF5LmZyb20obmV3IFNldChbLi4uT2JqZWN0LmtleXMob3JpZ09iamVjdCB8fCB7fSksIC4uLk9iamVjdC5rZXlzKHVwZGF0ZWRPYmogfHwge30pXSkpO1xyXG4gICAgY29uc3QgZmlsdGVyID0ga2V5c1RvSWdub3JlID8gY29uY2F0LmZpbHRlcihrZXkgPT4gIWtleXNUb0lnbm9yZS5pbmNsdWRlcyhrZXkpKSA6IGNvbmNhdDtcclxuICAgIGZpbHRlclxyXG4gICAgICAuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdXBkYXRlZE9ialtrZXldID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb3JpZ09iamVjdFtrZXldID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgaWYgKFV0aWxzU2VydmljZS5kaWZmZXJzKHVwZGF0ZWRPYmpba2V5XSwgb3JpZ09iamVjdFtrZXldKSkge1xyXG4gICAgICAgICAgICBjb25zdCBuZXdQYXRoID0gYCR7cGF0aH0ke3BhdGggPyAnLicgOiAnJ30ke2tleX1gO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSBVdGlsc1NlcnZpY2UuZGlmZihvcmlnT2JqZWN0W2tleV0sIHVwZGF0ZWRPYmpba2V5XSwgbmV3UGF0aCwga2V5c1RvSWdub3JlKTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlcyAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0ID0gWy4uLnJlc3VsdCwgLi4udmFsdWVzXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAodXBkYXRlZE9iaiAmJiAhb3JpZ09iamVjdCB8fCB1cGRhdGVkT2JqW2tleV0gIT09IG9yaWdPYmplY3Rba2V5XSAmJiAhT2JqZWN0LmlzKG9yaWdPYmplY3Rba2V5XSwgdXBkYXRlZE9ialtrZXldKSkge1xyXG4gICAgICAgICAgY29uc3QgdmFsdWUgPSB1cGRhdGVkT2JqID8gVXRpbHNTZXJ2aWNlLmZvcm1hdElmRW1wdHkodXBkYXRlZE9ialtrZXldKSA6IG51bGw7XHJcbiAgICAgICAgICByZXN1bHQucHVzaChgJHtwYXRofSR7cGF0aCA/ICcuJyA6ICcnfSR7a2V5fT0ke3ZhbHVlfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZvcm1hdElmRW1wdHkodmFsdWU6IGFueSkge1xyXG4gICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH1cclxuICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7XHJcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgICAgY2FzZSAnc3RyaW5nJzpcclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZGlmZmVycyhvYmoxOiBhbnksIG9iajI6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iajEpICE9PSBKU09OLnN0cmluZ2lmeShvYmoyKTtcclxuICB9XHJcbn1cclxuIl19
@@ -757,4 +757,4 @@ ValidationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", ve
757
757
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ValidationService, decorators: [{
758
758
  type: Injectable
759
759
  }], ctorParameters: function () { return [{ type: i1.SiteSettingsService }]; } });
760
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXItZGV2aWNlLW1hbmFnZS9zcmMvc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RyxPQUFPLEVBQVUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQUV6RCxNQUFNLGNBQWMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3QyxNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0FBR3JFLE1BQU0sT0FBTyxpQkFBaUI7SUFFNUIsWUFDVSxtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQTZIbEQsaUJBQVksR0FBRyxDQUFDLFNBQWlCLEVBQUUsRUFBRTtZQUNuQyxPQUFPLENBQUMsT0FBWSxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFO29CQUNwQixPQUFPLElBQUksQ0FBQztpQkFDYjtnQkFDRCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxlQUFlLENBQUMsS0FBSyxJQUFJLGVBQWUsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLEtBQUssRUFBRTtvQkFDcEUsT0FBTzt3QkFDTCxZQUFZLEVBQUUsSUFBSTtxQkFDbkIsQ0FB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SSxDQUFDLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFO29CQUN4RCxPQUFPLElBQUksQ0FBQztpQkFDYjthQUNGO1lBQ0QsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFtQkQsbUJBQW1CLENBQUMsSUFBUyxFQUFFLElBQVM7UUFDdEMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDbEMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxFQUFFO1lBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDekIsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzsrR0FqekJVLGlCQUFpQjttSEFBakIsaUJBQWlCOzRGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTaXRlU2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi9zaXRlLXNldHRpbmdzLnNlcnZpY2UnO1xuaW1wb3J0IHsgRGV2aWNlVHlwZXMsIE1haWxib3hRdW90YXNUeXBlLCBTcGVlZERpYWxUeXBlLCBWTU5vdGlmaWNhdGlvbnNUeXBlcyB9IGZyb20gJy4vLi4vY2xhc3Nlcy90eXBlcyc7XG5pbXBvcnQgeyBEZXZpY2UsIERldmljZUtpbmQgfSBmcm9tICcuLy4uL2NsYXNzZXMvZGV2aWNlJztcblxuY29uc3Qgc3BlZWREaWFsUmVnZXggPSBuZXcgUmVnRXhwKCdeW15cIl0qJCcpO1xuY29uc3QgQkxGUmVnZXggPSBuZXcgUmVnRXhwKCdeW15cIj48JiVdKiQnKTtcbmNvbnN0IHRpbWVSZWdleCA9IG5ldyBSZWdFeHAoJ14oWzAtMV1bMC05XXxbMl1bMC0zXSk6KFswLTVdWzAtOV0pJCcpO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVmFsaWRhdGlvblNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc2l0ZVNldHRpbmdzU2VydmljZTogU2l0ZVNldHRpbmdzU2VydmljZSxcbiAgKSB7XG4gIH1cblxuICBlMTY0TWFza0xhYmVsKGNvbnRyb2w6IGFueSkge1xuICAgIGNvbnN0IHJ1bGVUZXh0ID0gYF5bMC05KiMrWF17MCwyNH0kYDtcbiAgICBjb25zdCBydWxlID0gbmV3IFJlZ0V4cChydWxlVGV4dCwgJ2cnKTtcbiAgICBpZiAoY29udHJvbC52YWx1ZSAmJiBydWxlICYmICFydWxlLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7ZTE2NE1hc2tSdWxlOiB7cnVsZTogcnVsZVRleHR9fTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpbmRleChjb250cm9sOiBhbnkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KGNvbnRyb2wudmFsdWUpO1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBwYXR0ZXJuID0gJ15bKzAtOV0qJCc7XG4gICAgaWYgKHZhbHVlICYmICFOdW1iZXIuaXNJbnRlZ2VyKHZhbHVlKSB8fCB2YWx1ZSA8IDEgfHwgdmFsdWUgPiAxOTkpIHtcbiAgICAgIHJldHVybiB7aW5kZXhSdWxlOiB0cnVlfTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBkaXNwbGF5TGFiZWwoY29udHJvbDogYW55KSB7XG4gICAgY29uc3QgcnVsZVRleHQgPSBgXlteXCJcIlwiXCIlJjw+XXswLDMwfSRgO1xuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUmVnRXhwKHJ1bGVUZXh0LCAnZycpO1xuICAgIGlmIChydWxlICYmICFydWxlLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7bGFiZWxSdWxlOiB7cnVsZTogcnVsZVRleHQsIGNvdW50OiAzMH19O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG5cblxuICBkaXNwbGF5TGFiZWxBc2NpaShjb250cm9sOiBhbnkpIHtcbiAgICBjb25zdCBydWxlVGV4dCA9ICdeW2EtekEtWjAtOSAhIyRcXCcoKSorLC4vOjs9P0BcXFxcXl9gfX4tXXswLDMwfSQnO1xuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUmVnRXhwKHJ1bGVUZXh0LCAnZycpO1xuICAgIGlmIChydWxlICYmICFydWxlLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7bGFiZWxSdWxlOiB7cnVsZTogcnVsZVRleHQsIGNvdW50OiAzMH19O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJlcXVpcmVkRm9yU3BlZWREaWFsUG9zaXRpb24odHlwZTogc3RyaW5nKSB7XG5cbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgY29uc3QgcGFyZW50ID0gY29udHJvbC5wYXJlbnQ7XG4gICAgICBpZiAodHlwZSA9PT0gU3BlZWREaWFsVHlwZS5zbG90QmFzaWMgfHwgIXBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgICByZXR1cm4ge3JlcXVpcmVkOiB0cnVlfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuICBzcGVlZERpYWxEZXN0aW5hdGlvbigpIHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sIHx8ICFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtYmVyT3JIb3N0TmFtZUlQID0gJycgK1xuICAgICAgICAnXihbMC05XFxcXCojK1BwQ2NGZixdKykkJyArXG4gICAgICAgICd8JyArXG4gICAgICAgICdeKCcgK1xuICAgICAgICAnKFthLXpBLVowLTldKXsxLDQ3fUAnICtcbiAgICAgICAgJygnICtcbiAgICAgICAgJygoPzpbMC05XXsxLDN9XFxcXC4pezN9WzAtOV17MSwzfSknICtcbiAgICAgICAgJ3wnICtcbiAgICAgICAgJyhbYS16QS1aMC05XVthLXpBLVowLTlcXFxcLV17MSw2MX1bYS16QS1aMC05XVxcXFwuW2EtekEtWl17Mix9KScgK1xuICAgICAgICAnKScgK1xuICAgICAgICAnKSQnO1xuICAgICAgY29uc3QgcnVsZSA9IG5ldyBSZWdFeHAobnVtYmVyT3JIb3N0TmFtZUlQLCAnZycpO1xuICAgICAgaWYgKHJ1bGUgJiYgIXJ1bGUudGVzdChjb250cm9sLnZhbHVlKSkge1xuICAgICAgICByZXR1cm4ge3BhdHRlcm46IHRydWV9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICB9XG5cbiAgcmVxdWlyZWRGb3JTcGVlZERpYWxEZXN0aW5hdGlvbih0eXBlOiBzdHJpbmcpIHtcblxuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBjb250cm9sLnBhcmVudDtcbiAgICAgIGlmICgoIXBhcmVudCB8fCAhcGFyZW50LmdldCgnbGFiZWwnKSkgfHwgKHR5cGUgPT09IFNwZWVkRGlhbFR5cGUuc2xvdEJhc2ljICYmICFjb250cm9sLnZhbHVlICYmICFwYXJlbnQuZ2V0KCdsYWJlbCcpLnZhbHVlKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH1cblxuXG4gIGxhYmVsUGF0dGVybkRlcGVuZGluZ09uVHlwZShjb250cm9sOiBhbnkpIHtcbiAgICBjb25zdCBwYXJlbnQgPSBjb250cm9sPy5wYXJlbnQ7XG4gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC5nZXQoJ3R5cGUnKSB8fCAhY29udHJvbC52YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHR5cGUgPSBwYXJlbnQuZ2V0KCd0eXBlJykudmFsdWU7XG4gICAgaWYgKCF0eXBlICYmICFzcGVlZERpYWxSZWdleC50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge2xhYmVsUnVsZToge3dyb25nOiAnXCInfX07XG4gICAgfVxuICAgIGlmICh0eXBlICYmICFCTEZSZWdleC50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge2xhYmVsUnVsZToge3dyb25nOiAnXCI+PCYlJ319O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGxhYmVsUGF0dGVybkJMRihjb250cm9sOiBhbnkpIHtcbiAgICBpZiAoY29udHJvbC52YWx1ZSAmJiAhQkxGUmVnZXgudGVzdChjb250cm9sLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIHtsYWJlbFJ1bGU6IHt3cm9uZzogJ1wiPjwmJSd9fTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBsYWJlbFBhdHRlcm5TcGVlZERpYWwoY29udHJvbDogYW55KSB7XG4gICAgaWYgKGNvbnRyb2w/LnZhbHVlICYmICFzcGVlZERpYWxSZWdleC50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICByZXR1cm4ge2xhYmVsUnVsZToge3dyb25nOiAnXCInfX07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgbWF0Y2hDb250cm9sID0gKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbD8ucGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hpbmdDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBpZiAobWF0Y2hpbmdDb250cm9sLnZhbHVlICYmIG1hdGNoaW5nQ29udHJvbC52YWx1ZSAhPT0gY29udHJvbC52YWx1ZSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1hdGNoQ29udHJvbDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBtYXRjaExlbmd0aCA9IChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50IHx8ICFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hpbmdDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBpZiAoKCghY29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCcrJykgJiYgIW1hdGNoaW5nQ29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCcrJykpIHx8XG4gICAgICAgIChjb250cm9sLnZhbHVlLnN0YXJ0c1dpdGgoJysnKSAmJiBtYXRjaGluZ0NvbnRyb2wudmFsdWUuc3RhcnRzV2l0aCgnKycpKSkgJiZcbiAgICAgICAgKCghY29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCdcXFxcKycpICYmICFtYXRjaGluZ0NvbnRyb2wudmFsdWUuc3RhcnRzV2l0aCgnXFxcXCsnKSkgfHxcbiAgICAgICAgICAoY29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCdcXFxcKycpICYmIG1hdGNoaW5nQ29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCdcXFxcKycpKSkgJiZcbiAgICAgICAgbWF0Y2hpbmdDb250cm9sLnZhbHVlLmxlbmd0aCAhPT0gY29udHJvbC52YWx1ZS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtYXRjaExlbmd0aDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBkeW5hbWljTWF4TGVuZ3RoID0gKGxlbmd0aDE6IG51bWJlciwgbGVuZ3RoMjogbnVtYmVyKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbC5wYXJlbnQgfHwgIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXhMZW5ndGggPSBTdHJpbmcoY29udHJvbC52YWx1ZSkuaW5jbHVkZXMoJ1snKSA/IGxlbmd0aDEgOiBsZW5ndGgyO1xuICAgICAgaWYgKGNvbnRyb2wudmFsdWUubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF4TGVuZ3RoOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIGJpZ2dlclRoYW4gPSAoZmllbGROYW1lOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCB8fCAhY29udHJvbC52YWx1ZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUpO1xuICAgICAgaWYgKG1hdGNoaW5nQ29udHJvbC52YWx1ZS5sZW5ndGggPT09IGNvbnRyb2wudmFsdWUubGVuZ3RoICYmIG1hdGNoaW5nQ29udHJvbC52YWx1ZSAmJiBtYXRjaGluZ0NvbnRyb2wudmFsdWUgPiBjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYmlnZ2VyVGhhbjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICByZXF1aXJlZEJ5VHlwZSA9IChmaWVsZE5hbWU6IHN0cmluZywgdHlwZTogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgZmllbGROYW1lID09PSAncGhvbmVTeXN0ZW0nICYmICh0eXBlID09PSBWTU5vdGlmaWNhdGlvbnNUeXBlc1snUGhvbmUgRGV2aWNlJ10gfHwgdHlwZSA9PT0gVk1Ob3RpZmljYXRpb25zVHlwZXNbJ1BhZ2VyIERldmljZSddKSB8fFxuICAgICAgICBmaWVsZE5hbWUgPT09ICdodG1sVGVtcGxhdGUnICYmIHR5cGUgPT09IFZNTm90aWZpY2F0aW9uc1R5cGVzWydIVE1MIERldmljZSddXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBzbWFsbGVyVGhhblF1b3RhID0gKGZpZWxkTmFtZTogc3RyaW5nLCBxdW90YVR5cGU6IHN0cmluZywgc2Vjb25kUXVvdGFUeXBlOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUpO1xuICAgICAgY29uc3QgcXVvdGFUeXBlQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChxdW90YVR5cGUpO1xuICAgICAgY29uc3Qgc2Vjb25kUXVvdGFUeXBlQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChzZWNvbmRRdW90YVR5cGUpO1xuXG4gICAgICBpZiAocXVvdGFUeXBlQ29udHJvbCAmJiBzZWNvbmRRdW90YVR5cGVDb250cm9sICYmIHNlY29uZFF1b3RhVHlwZUNvbnRyb2wudmFsdWUgPT09IE1haWxib3hRdW90YXNUeXBlLnN5c3RlbSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cblxuICAgICAgaWYgKHF1b3RhVHlwZUNvbnRyb2wgJiYgcXVvdGFUeXBlQ29udHJvbC52YWx1ZSA9PT0gTWFpbGJveFF1b3Rhc1R5cGUuc3lzdGVtIHx8IG1hdGNoaW5nQ29udHJvbCAmJiBtYXRjaGluZ0NvbnRyb2wudmFsdWUgJiYgcGFyc2VJbnQobWF0Y2hpbmdDb250cm9sLnZhbHVlKSA8IHBhcnNlSW50KGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc21hbGxlclRoYW46IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgYmlnZ2VyVGhhblF1b3RhID0gKGZpZWxkTmFtZTogc3RyaW5nLCBxdW90YVR5cGU6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2w/LnBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUpO1xuICAgICAgY29uc3QgcXVvdGFUeXBlQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChxdW90YVR5cGUpO1xuXG4gICAgICBpZiAocXVvdGFUeXBlQ29udHJvbCAmJiBxdW90YVR5cGVDb250cm9sLnZhbHVlID09PSBNYWlsYm94UXVvdGFzVHlwZS5jdXN0b20gJiYgbWF0Y2hpbmdDb250cm9sLnZhbHVlICYmIHBhcnNlSW50KG1hdGNoaW5nQ29udHJvbC52YWx1ZSkgPiBwYXJzZUludChjb250cm9sLnZhbHVlKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGJpZ2dlclRoYW46IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgcmFuZ2VMaW1pdCA9IChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2w/LnBhcmVudCB8fCAhY29udHJvbC52YWx1ZSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUpO1xuICAgICAgaWYgKChjb250cm9sLnZhbHVlIC0gbWF0Y2hpbmdDb250cm9sLnZhbHVlKSA+IDUwMDAwKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmFuZ2VMaW1pdDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBjb21wYXJlcGF0dGVyblBhcnRzID0gKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbD8udmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXRjaGVzID0gY29udHJvbC52YWx1ZS5tYXRjaCgvXFxbKC4qPylcXF0vKTtcbiAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgIGNvbnN0IHN1Ym1hdGNoID0gbWF0Y2hlc1sxXTtcbiAgICAgICAgY29uc3Qgc3VibWF0Y2hzcGxpdDogbnVtYmVyW10gPSBzdWJtYXRjaC5zcGxpdCgnLScpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1Ym1hdGNoc3BsaXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBpZiAoc3VibWF0Y2hzcGxpdFtpXSA+PSBzdWJtYXRjaHNwbGl0W2kgKyAxXSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgY29tcGFyZXBhdHRlcm5QYXJ0czogdHJ1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgbWF0Y2hQcmVmaXggPSAoZmllbGROYW1lOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sPy5wYXJlbnQgfHwgIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXRjaGluZ0NvbnRyb2wgPSBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lKTtcbiAgICAgIGlmICgobWF0Y2hpbmdDb250cm9sLnZhbHVlLnN0YXJ0c1dpdGgoJysnKSB8fCBjb250cm9sLnZhbHVlLnN0YXJ0c1dpdGgoJysnKSB8fCBtYXRjaGluZ0NvbnRyb2wudmFsdWUuc3RhcnRzV2l0aCgnXFxcXCsnKSB8fCBjb250cm9sLnZhbHVlLnN0YXJ0c1dpdGgoJ1xcXFwrJykpICYmIChjb250cm9sLnZhbHVlLmNoYXJBdCgwKSAhPT0gbWF0Y2hpbmdDb250cm9sLnZhbHVlLmNoYXJBdCgwKSkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtYXRjaFByZWZpeDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBkZXZpY2VOYW1lVmFsaWRhdG9yID0gKGRldmljZTogRGV2aWNlKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBkZXZpY2UuZGV2aWNlS2luZCA9PT0gRGV2aWNlS2luZC5kZXZpY2VQcm9maWxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChkZXZpY2UuaXNDdGlSb3V0ZVBvaW50KSB7XG4gICAgICAgIGxldCBlcnIgPSAnJztcbiAgICAgICAgaWYgKCFjb250cm9sLnZhbHVlLm1hdGNoKC9eW2EtekEtWjAtOS1fLl0rJC8pKSB7XG4gICAgICAgICAgZXJyID0gJ3BhdHRlcm4nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250cm9sLnZhbHVlLnRyaW0oKS5sZW5ndGggPiAxNSkge1xuICAgICAgICAgIGVyciA9ICdtYXhMZW5ndGgnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcnIgPyB7bmFtZVJ1bGU6IGVycn0gOiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKGRldmljZS5kZXZpY2VEZWZhdWx0cyAmJiAhZGV2aWNlLmlzQ3RpUm91dGVQb2ludCkge1xuICAgICAgICBjb25zdCBydWxlVGV4dCA9IGRldmljZS5kZXZpY2VEZWZhdWx0cy5kZXZpY2VOYW1lUmVnZXg7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSBuZXcgUmVnRXhwKHJ1bGVUZXh0LCAnZycpO1xuICAgICAgICBjb25zdCBjYXB0aW9uID0gZGV2aWNlLmRldmljZURlZmF1bHRzPy5kZXZpY2VOYW1lRXhwbGFpbmVkO1xuICAgICAgICBjb25zdCBtYXRjaCA9IChjb250cm9sLnZhbHVlIHx8ICcnKS5tYXRjaChydWxlKSB8fCBbXTtcbiAgICAgICAgY29uc3QgZXhhY3RNYXRjaCA9IG1hdGNoICYmIGNvbnRyb2wudmFsdWUgPT09IG1hdGNoWzBdO1xuICAgICAgICBpZiAocnVsZSAmJiAhZXhhY3RNYXRjaCkge1xuICAgICAgICAgIHJldHVybiB7bmFtZVJ1bGU6IHtjYXB0aW9ufX07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgZGV2aWNlTmFtZVZhbHVlVmFsaWRhdG9yID0gKGRldmljZTogRGV2aWNlLCBkZXZpY2VOYW1lOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGRldmljZS5kZXZpY2VLaW5kID09PSBEZXZpY2VLaW5kLmRldmljZVByb2ZpbGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRldmljZS5uYW1lICYmIGRldmljZS5hbHJlYWR5VXNlZE5hbWUgJiYgZGV2aWNlLm5hbWUgPT09IGRldmljZS5hbHJlYWR5VXNlZE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHtuYW1lUnVsZTogJ2FscmVhZHlVc2VkTmFtZSd9O1xuICAgICAgfVxuICAgICAgaWYgKGRldmljZS5pc0N0aVJvdXRlUG9pbnQpIHtcbiAgICAgICAgbGV0IGVyciA9ICcnO1xuICAgICAgICBpZiAoIWRldmljZU5hbWUubWF0Y2goL15bYS16QS1aMC05LV8uXSskLykpIHtcbiAgICAgICAgICBlcnIgPSAncGF0dGVybic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRldmljZU5hbWUudHJpbSgpLmxlbmd0aCA+IDE1KSB7XG4gICAgICAgICAgZXJyID0gJ21heExlbmd0aCc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVyciA/IHtuYW1lUnVsZTogZXJyfSA6IG51bGw7XG4gICAgICB9XG4gICAgIGlmIChkZXZpY2UuZGV2aWNlRGVmYXVsdHMgJiYgIWRldmljZS5pc0N0aVJvdXRlUG9pbnQpIHtcbiAgICAgICBjb25zdCBydWxlVGV4dCA9IGRldmljZS5kZXZpY2VEZWZhdWx0cy5kZXZpY2VOYW1lUmVnZXg7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdEZXYgbmFtZSBydWxlIC0gJywgcnVsZVRleHQpO1xuICAgICAgICBjb25zdCBydWxlID0gbmV3IFJlZ0V4cChydWxlVGV4dCwgJ2cnKTtcbiAgICAgICAgbGV0IGNhcHRpb24gPSBkZXZpY2UuZGV2aWNlRGVmYXVsdHMuZGV2aWNlTmFtZUV4cGxhaW5lZDtcbiAgICAgICAgaWYgKCFjYXB0aW9uKSB7XG4gICAgICAgICAgY2FwdGlvbiA9IHJ1bGVUZXh0O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG1hdGNoID0gKGRldmljZU5hbWUgfHwgJycpLm1hdGNoKHJ1bGUpIHx8IFtdO1xuICAgICAgICBjb25zdCBleGFjdE1hdGNoID0gbWF0Y2ggJiYgZGV2aWNlTmFtZSA9PT0gbWF0Y2hbMF07XG4gICAgICAgIGlmIChydWxlICYmICFleGFjdE1hdGNoKSB7XG4gICAgICAgICAgcmV0dXJuIHtuYW1lUnVsZToge2NhcHRpb259fTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBkZXZpY2VEdXBsaWNhdGluZ05hbWVWYWxpZGF0b3IgPSAodXNlcjogYW55LCBwa2lkID86IHN0cmluZywgcHJlZml4Pzogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbC52YWx1ZSB8fCAhdXNlciB8fCAhdXNlci5kZXZpY2VzIHx8IHVzZXIuZGV2aWNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZGV2aWNlTmFtZSA9IHByZWZpeCA/IGAke3ByZWZpeH0ke2NvbnRyb2wudmFsdWV9YCA6IGNvbnRyb2wudmFsdWU7XG4gICAgICBjb25zdCBkZXZpY2VzV2l0aFRoZVNhbWVOYW1lID0gdXNlci5kZXZpY2VzLmZpbHRlcigoZGV2aWNlOiBEZXZpY2UpID0+IGRldmljZS5uYW1lID09PSBkZXZpY2VOYW1lKTtcbiAgICAgIGlmIChkZXZpY2VzV2l0aFRoZVNhbWVOYW1lLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaWYgKCFwa2lkKSB7ICAvLyBGb3IgbmV3IGRldmljZVxuICAgICAgICAgIHJldHVybiB7ZHVwbGljYXRlTmFtZVJ1bGU6IHRydWV9O1xuICAgICAgICB9IGVsc2UgaWYgKHBraWQgIT09IGRldmljZXNXaXRoVGhlU2FtZU5hbWVbMF0ucGtpZCkgeyAvLyBGb3IgdXBkYXRpbmcgZGV2aWNlLCBhdm9pZCB2YWxpZGF0aW5nIHdpdGggaXRzZWxmXG4gICAgICAgICAgcmV0dXJuIHtkdXBsaWNhdGVOYW1lUnVsZTogdHJ1ZX07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgY29uZGl0aW9uYWxSZXF1aXJlZCA9IChmaWVsZE5hbWU6IHN0cmluZywgcmVxdWlyZWRDb25kaXRpb25WYWx1ZXM6IGFueVtdKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudDEgPSBjb250cm9sLnBhcmVudDtcbiAgICAgIGlmICghcGFyZW50MSB8fCAhcGFyZW50MS5nZXQoZmllbGROYW1lKSB8fCAhcGFyZW50MS5nZXQoZmllbGROYW1lKS52YWx1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocmVxdWlyZWRDb25kaXRpb25WYWx1ZXMuaW5jbHVkZXMocGFyZW50MS5nZXQoZmllbGROYW1lKS52YWx1ZSkgJiYgIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBjb25kaXRpb25hbFJlcXVpcmVkRm9yR3JvdXBBZG1pbiA9IChmaWVsZE5hbWU6IHN0cmluZywgcmVxdWlyZWRDb25kaXRpb25WYWx1ZXM6IGFueVtdKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudDEgPSBjb250cm9sLnBhcmVudDtcbiAgICAgIGlmICghcGFyZW50MSB8fCAhcGFyZW50MS5nZXQoZmllbGROYW1lKSB8fCAhcGFyZW50MS5nZXQoZmllbGROYW1lKS52YWx1ZSB8fCAhcGFyZW50MS5nZXQoZmllbGROYW1lKS52YWx1ZS50eXBlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChyZXF1aXJlZENvbmRpdGlvblZhbHVlcy5pbmNsdWRlcyhwYXJlbnQxLmdldChmaWVsZE5hbWUpLnZhbHVlLnR5cGUpICYmICFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgY29uZGl0aW9uYWxTaXRlR3JvdXBDaGVja0Zvckdyb3VwQWRtaW4gPSAoZmllbGROYW1lOiBzdHJpbmcsIHJlcXVpcmVkQ29uZGl0aW9uVmFsdWVzOiBhbnlbXSkgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBjb25zdCBwYXJlbnQxID0gY29udHJvbC5wYXJlbnQ7XG4gICAgICBpZiAoIXBhcmVudDEgfHwgIXBhcmVudDEuZ2V0KGZpZWxkTmFtZSkgfHwgIXBhcmVudDEuZ2V0KGZpZWxkTmFtZSkudmFsdWUgfHwgIXBhcmVudDEuZ2V0KGZpZWxkTmFtZSkudmFsdWUudHlwZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAocGFyZW50MS5nZXQoZmllbGROYW1lKS52YWx1ZSAmJiByZXF1aXJlZENvbmRpdGlvblZhbHVlcy5pbmNsdWRlcyhwYXJlbnQxLmdldChmaWVsZE5hbWUpLnZhbHVlLnR5cGUpICYmXG4gICAgICAgIHBhcmVudDEuZ2V0KCdzaXRlR3JvdXAnKSAmJiBwYXJlbnQxLmdldCgnc2l0ZUdyb3VwJykudmFsdWUgJiZcbiAgICAgICAgcGFyZW50MS5nZXQoJ3NpdGVHcm91cCcpLnZhbHVlLnNpdGVHcm91cE1lbWJlcnMgJiYgcGFyZW50MS5nZXQoJ3NpdGVHcm91cCcpLnZhbHVlLnNpdGVHcm91cE1lbWJlcnMubGVuZ3RoIDwgMSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhhc1NpdGVHcm91cEVycm9yOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIHJlcXVpcmVkSWZGaWVsZElzRW1wdHlGb3JCTEYgPSAoZmllbGROYW1lOiBhbnkpID0+IHtcbiAgICBjb25zdCBEQVRFX1BBVFRFUk4gPSAnXigwWzEtOV18MVswMTJdKVstIFxcLy5dKDBbMS05XXxbMTJdWzAtOV18M1swMV0pWy0gXFwvLl0oMTl8MjApXFxkXFxkJCc7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRyb2wucGFyZW50O1xuICAgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC5nZXQoZmllbGROYW1lKSkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGlmICghcGFyZW50LmdldChmaWVsZE5hbWUpLnZhbHVlICYmICFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWRFaXRoZXI6IHRydWUsXG4gICAgICAgICAgcmVxdWlyZWRCTEZETjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuXG4gIHZhbGlkRGF0ZSA9IChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xuXG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRyb2wucGFyZW50O1xuICAgICAgY29uc3QgcnVsZVRleHQgPSAnXigwWzEtOV18MVswMTJdKVstIFxcLy5dKDBbMS05XXxbMTJdWzAtOV18M1swMV0pWy0gXFwvLl0oMTl8MjApXFxkXFxkJCc7XG4gICAgICBjb25zdCBydWxlID0gbmV3IFJlZ0V4cChydWxlVGV4dCwgJ2cnKTtcbiAgICAgIGNvbnN0IHZhbCA9IGNvbnRyb2wudmFsdWUgJiYgY29udHJvbC52YWx1ZS5nZXREYXRlKCk7XG4gICAgICBpZiAocnVsZSAmJiAhcnVsZS50ZXN0KHZhbCkpIHtcbiAgICAgICAgcmV0dXJuIHtwYXR0ZXJuOiB0cnVlfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cblxuICBtYXRjaE9wdGlvbiA9IChvcHRpb25UeXBlOiBzdHJpbmcsIGxpc3Q/OiBhbnksIGlzRnVsbExpc3Q/OiBib29sZWFuKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBjb250cm9sLnZhbHVlID09PSBEZXZpY2VUeXBlcy5DVElfUk9VVEVfUE9JTlQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBsZXQgb3B0aW9uTGlzdCA9IGxpc3QgfHwgdGhpcy5nZXRPcHRpb25zTGlzdChvcHRpb25UeXBlKTtcbiAgICAgIGlmIChvcHRpb25MaXN0ICYmIG9wdGlvbkxpc3QubGVuZ3RoKSB7XG4gICAgICAgIGlmICghaXNGdWxsTGlzdCAmJiBvcHRpb25UeXBlID09PSAnZGlyZWN0b3J5TnVtYmVycycpIHtcbiAgICAgICAgICBvcHRpb25MaXN0ID0gb3B0aW9uTGlzdC5tYXAoKHN0cjogc3RyaW5nKSA9PiBzdHIuaW5kZXhPZignICcpID4gLTEgPyBzdHIuc3Vic3RyaW5nKDAsIHN0ci5pbmRleE9mKCcgJykpIDogc3RyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdGlvbkxpc3QuaW5jbHVkZXMoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbWF0Y2hPcHRpb25zOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBjb25maWRlbnRpYWxBY2Nlc3NMZXZlbCA9IChjb25maWRlbnRpYWxBY2Nlc3NNb2RlOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnZhbHVlICYmICFjb25maWRlbnRpYWxBY2Nlc3NNb2RlKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgaWYgKCFjb250cm9sLnZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgbm9SZXN1bHRETiA9IChvcHRpb25UeXBlOiBzdHJpbmcsIGxpc3Q/OiBhbnkpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnZhbHVlIHx8IGxpc3QgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBpZiAobGlzdCAmJiBsaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG5vUmVzdWx0RE5zOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIG1hdGNoRXh0ZW5zaW9uT3B0aW9uID0gKG9wdGlvblR5cGU6IHN0cmluZywgb3B0aW9uTGlzdD86IGFueSkgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGNvbnRyb2wudmFsdWU7XG4gICAgICB9XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICBjb25zdCBuZXdMaXN0ID0gW107XG4gICAgICBpZiAob3B0aW9uTGlzdCAmJiBvcHRpb25MaXN0Lmxlbmd0aCkge1xuICAgICAgICBvcHRpb25MaXN0LmZvckVhY2goKGxpc3Q6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IG5ld09wdGlvbkxpc3QgPSB0aGlzLmdldE1hdGNoRXhpc3RpbmdWbUxpbmVWYWx1ZShsaXN0KTtcbiAgICAgICAgICBuZXdMaXN0LnB1c2gobmV3T3B0aW9uTGlzdCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmIChuZXdMaXN0ICYmICFuZXdMaXN0LmluY2x1ZGVzKGNvbnRyb2wudmFsdWUpKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG1hdGNoT3B0aW9uczogdHJ1ZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbkxpc3QgfHwgIW9wdGlvbkxpc3QubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF0Y2hPcHRpb25zOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIHB1YmxpYyBnZXRNYXRjaEV4aXN0aW5nVm1MaW5lVmFsdWUoZG5XaXRoVHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBpbmQgPSBkbldpdGhUeXBlLmluZGV4T2YoJ1R5cGU6Jyk7XG4gICAgbGV0IGRuID0gZG5XaXRoVHlwZTtcbiAgICBpZiAoaW5kID4gLTEpIHtcbiAgICAgIGRuID0gZG5XaXRoVHlwZS5zbGljZSgwLCBpbmQpO1xuICAgICAgZG4gPSBkbi50cmltKCk7XG4gICAgfVxuICAgIHJldHVybiBkbjtcbiAgfVxuXG4gIHJlcXVpcmVkRWl0aGVyRm9yVm1FeHRlbnNpb24gPSAoZmllbGROYW1lMTogc3RyaW5nLCBmaWVsZE5hbWUyOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG1hdGNoQ29udHJvbDEgPSBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lMSkudmFsdWU7XG4gICAgICBjb25zdCBtYXRjaENvbnRyb2wyID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZTIpLnZhbHVlO1xuICAgICAgaWYgKCFtYXRjaENvbnRyb2wxICYmICFtYXRjaENvbnRyb2wyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVxdWlyZWRFaXRoZXJGb3JWbUV4dGVuc2lvbjogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICByZXF1aXJlZEVpdGhlck9uZSA9IChmaWVsZE5hbWUxOiBzdHJpbmcsIGZpZWxkTmFtZTI6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hDb250cm9sMSA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUxKSAmJiBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lMSkudmFsdWU7XG4gICAgICBjb25zdCBtYXRjaENvbnRyb2wyID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZTIpICYmIGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUyKS52YWx1ZTtcbiAgICAgIGlmICghbWF0Y2hDb250cm9sMSAmJiAhbWF0Y2hDb250cm9sMikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlcXVpcmVkRWl0aGVyT25lOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIHJlcXVpcmVkQnlWYWx1ZSA9IChmaWVsZE5hbWU6IHN0cmluZywgcmVxdWVzdGVkRmllbGRWYWw6IGFueSkgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wgfHwgIWNvbnRyb2wucGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZmllbGRWYWwgPSBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lKSAmJiBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lKS52YWx1ZTtcbiAgICAgIGlmIChmaWVsZFZhbCAmJiBmaWVsZFZhbCA9PT0gcmVxdWVzdGVkRmllbGRWYWwgJiYgIWNvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICBPbmVFeHRlbnNpb25FbXB0eSA9IChmaWVsZE5hbWUxOiBzdHJpbmcsIGZpZWxkTmFtZTI6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hDb250cm9sMSA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUxKS52YWx1ZTtcbiAgICAgIGNvbnN0IG1hdGNoQ29udHJvbDIgPSBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lMikudmFsdWU7XG4gICAgICBpZiAobWF0Y2hDb250cm9sMSAmJiBtYXRjaENvbnRyb2wyKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgT25lRXh0ZW5zaW9uSXNFbXB0eTogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfTtcblxuICByZXF1aXJlZEJ5Q29uZGl0aW9uID0gKHJlcXVpcmVkQnk6IHN0cmluZywgZmllbGROYW1lOiBhbnkpID0+IHtcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHJlcXVpcmVkQnlDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KHJlcXVpcmVkQnkpLnZhbHVlO1xuICAgICAgY29uc3QgcmVxdWlyZWRDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZSkudmFsdWU7XG4gICAgICBpZiAocmVxdWlyZWRCeUNvbnRyb2wgJiYgIXJlcXVpcmVkQ29udHJvbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuICB9O1xuXG4gIHByaXZhdGUgZ2V0T3B0aW9uc0xpc3QodG9rZW46IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICBzd2l0Y2ggKHRva2VuKSB7XG4gICAgICBjYXNlICdjc3MnOlxuICAgICAgY2FzZSAncmVyb3V0ZUNzcyc6XG4gICAgICBjYXNlICdjYWxsaW5nU2VhcmNoU3BhY2UnOlxuICAgICAgICByZXR1cm4gdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLmNhbGxpbmdTZWFyY2hTcGFjZVR5cGVzO1xuICAgICAgY2FzZSAncmVyb3V0aW5nQ3NzJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5zaXRlRGVmYXVsdHMgJiYgdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLnNpdGVEZWZhdWx0cy5jc3NGaWx0ZXI7XG4gICAgICBjYXNlICdkZXZpY2VUeXBlJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5kZXZpY2VUeXBlcztcbiAgICAgIGNhc2UgJ3JvdXRlUGFydGl0aW9uJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5yb3V0ZVBhcnRpdGlvbk5hbWVzO1xuICAgICAgY2FzZSAncm91dGVQYXJ0aXRpb25GaWx0ZXJlZCc6XG4gICAgICAgIHJldHVybiB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2UuZmlsdGVyZWRSb3V0ZVBhcnRpdGlvbk5hbWVzO1xuICAgICAgY2FzZSAnZGV2aWNlUG9vbHMnOlxuICAgICAgICByZXR1cm4gdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLmRldmljZVBvb2xzO1xuICAgICAgY2FzZSAnYWxsUm91dGVQYXJ0aXRpb25zJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5hbGxSb3V0ZVBhcnRpdGlvbk5hbWVzO1xuICAgICAgY2FzZSAnZGlyZWN0b3J5TnVtYmVycyc6XG4gICAgICAgIHJldHVybiB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2UuZGlyZWN0b3J5TnVtYmVycztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBhdXRvY29tcGxldGVUeXBlKGNvbnRyb2w6IGFueSkge1xuICAgIGlmICghY29udHJvbC52YWx1ZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29udHJvbC52YWx1ZSAhPT0gJ29iamVjdCcgJiYgY29udHJvbC52YWx1ZSAhPT0gJycpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0cmluZ0VudGVyZWQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cblxuICBwYXNzd29yZChjb250cm9sOiBhbnkpIHtcbiAgICBjb25zdCBydWxlTnVtZXJpYyA9IG5ldyBSZWdFeHAoL1xcZCsvLCAnZycpO1xuICAgIGNvbnN0IHJ1bGVDYXBpdGFscyA9IG5ldyBSZWdFeHAoL1tBLVpdKy8sICdnJyk7XG4gICAgY29uc3QgcnVsZVNtYWxsID0gbmV3IFJlZ0V4cCgvW2Etel0rLywgJ2cnKTtcbiAgICBjb25zdCBydWxlU3BlY2lhbCA9IG5ldyBSZWdFeHAoL1shQCMkJSZcXC89XFw/X1xcLiw6O1xcLVxcXFwrXSsvLCAnZycpO1xuXG4gICAgY29uc3QgaGFzTnVtZXJpYyA9ICtydWxlTnVtZXJpYy50ZXN0KGNvbnRyb2wudmFsdWUpO1xuICAgIGNvbnN0IGhhc0NhcGl0YWxzID0gK3J1bGVDYXBpdGFscy50ZXN0KGNvbnRyb2wudmFsdWUpO1xuICAgIGNvbnN0IGhhc1NtYWxsID0gK3J1bGVTbWFsbC50ZXN0KGNvbnRyb2wudmFsdWUpO1xuICAgIGNvbnN0IGhhc1NwZWNpYWwgPSArcnVsZVNwZWNpYWwudGVzdChjb250cm9sLnZhbHVlKTtcblxuICAgIGlmIChoYXNOdW1lcmljICsgaGFzQ2FwaXRhbHMgKyBoYXNTbWFsbCArIGhhc1NwZWNpYWwgPCAzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3ZWFrUGFzc3dvcmQ6IHRydWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICB2ZXJpZnlBdXRvQW5zd2VyKGNvbnRyb2w6IGFueSkge1xuICAgIGlmICghY29udHJvbD8udmFsdWUgfHwgY29udHJvbC52YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBsZXQgYXV0b0Fuc3dlckVycm9yTGluZSA9IG51bGw7XG4gICAgaWYgKGNvbnRyb2wucGFyZW50ICYmIGNvbnRyb2wucGFyZW50LnBhcmVudCAmJiBjb250cm9sLnBhcmVudC5wYXJlbnQucGFyZW50ICYmIGNvbnRyb2wucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50KSB7XG4gICAgICBjb25zdCBjb250cm9sU05SID0gY29udHJvbC5wYXJlbnQ7XG4gICAgICBjb25zdCBjb250cm9sVXNlciA9IGNvbnRyb2wucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50O1xuICAgICAgY29uc3QgbGluZUFzc29jaWF0aW9ucyA9IGNvbnRyb2xTTlIuZ2V0KCdsaW5lQXNzb2NpYXRpb25zJyk7XG4gICAgICBjb25zdCBsaW5lcyA9IGNvbnRyb2xVc2VyLmdldCgnbGluZXMnKTtcbiAgICAgIGlmIChsaW5lcykge1xuICAgICAgICBsaW5lQXNzb2NpYXRpb25zLnZhbHVlLmZvckVhY2goKGxpbmVBc3NvY2lhdGlvbjogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgYXV0b0Fuc3dlckxpbmUgPSBsaW5lcy5jb250cm9scy5maW5kKChsaW5lOiBhbnkpID0+IGxpbmUuZ2V0KCdkaXJlY3RvcnlOdW1iZXInKS52YWx1ZS5kaXJlY3RvcnlOdW1iZXIgPT09IGxpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXIgJiYgbGluZS5nZXQoJ2RpcmVjdG9yeU51bWJlcicpLnZhbHVlLnJvdXRlUGFydGl0aW9uTmFtZSA9PT0gbGluZUFzc29jaWF0aW9uLnJvdXRlUGFydGl0aW9uTmFtZVxuICAgICAgICAgICAgJiYgbGluZS5nZXQoJ2F1dG9BbnN3ZXInKS52YWx1ZSAhPT0gJ0F1dG8gQW5zd2VyIE9mZicpO1xuICAgICAgICAgIGlmIChhdXRvQW5zd2VyTGluZSkge1xuICAgICAgICAgICAgYXV0b0Fuc3dlckVycm9yTGluZSA9IHtcbiAgICAgICAgICAgICAgYXV0b0Fuc3dlckVycm9yTGluZTogbGluZUFzc29jaWF0aW9uLmRpcmVjdG9yeU51bWJlclxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBhdXRvQW5zd2VyRXJyb3JMaW5lO1xuICB9XG5cbiAgdmVyaWZ5QmVnaW5FbmRUaW1lKGNvbnRyb2w6IGFueSkge1xuICAgIGNvbnN0IHBhcmVudCA9IGNvbnRyb2wucGFyZW50O1xuICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQuZ2V0KCdpc0FjdGl2ZScpIHx8ICFwYXJlbnQuZ2V0KCdhbGxEYXknKSB8fCAhcGFyZW50LmdldCgnZnJvbScpIHx8ICFwYXJlbnQuZ2V0KCd0bycpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAocGFyZW50LmdldCgnaXNBY3RpdmUnKS52YWx1ZSkge1xuICAgICAgaWYgKCFwYXJlbnQuZ2V0KCdhbGxEYXknKS52YWx1ZSkge1xuICAgICAgICBpZiAoIXBhcmVudC5nZXQoJ2Zyb20nKS52YWx1ZSB8fCBwYXJlbnQuZ2V0KCdmcm9tJykudmFsdWUgPT09ICdObyBPZmZpY2UgSG91cnMnXG4gICAgICAgICAgfHwgIXBhcmVudC5nZXQoJ3RvJykudmFsdWUgfHwgcGFyZW50LmdldCgndG8nKS52YWx1ZSA9PT0gJ05vIE9mZmljZSBIb3VycydcbiAgICAgICAgICB8fCBwYXJlbnQuZ2V0KCdmcm9tJykudmFsdWUgPiBwYXJlbnQuZ2V0KCd0bycpLnZhbHVlKSB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZyb21HcmVhdGVyVGhhblRvOiB0cnVlXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdGltZShjb250cm9sOiBhbnkpIHtcbiAgICBpZiAoY29udHJvbC52YWx1ZSAmJiAhdGltZVJlZ2V4LnRlc3QoY29udHJvbC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiB7dGltZUZvcm1hdDogdHJ1ZX07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cblxuICBwaW5NdWx0aUNoYXJhY3RlckNoZWNrID0gKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hpbmdDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBjb25zdCBydWxlTXVsdGlDaGFyYWN0ZXIgPSBuZXcgUmVnRXhwKCcoWzAtOV0pXFxcXDF7Mn0nKTtcbiAgICAgIGlmIChtYXRjaGluZ0NvbnRyb2wudmFsdWUpIHtcbiAgICAgICAgY29uc3QgaGFzTXVsdGlDaGFyYWN0ZXIgPSBydWxlTXVsdGlDaGFyYWN0ZXIudGVzdChtYXRjaGluZ0NvbnRyb2wudmFsdWUpO1xuICAgICAgICBpZiAoaGFzTXVsdGlDaGFyYWN0ZXIpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbXVsdGlDaGFyYWN0ZXI6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuICBwaW5Db25zZWN1dGl2ZU51bWJlckNoZWNrID0gKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF0Y2hpbmdDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZSk7XG4gICAgICBjb25zdCBzdHJUb0NoZWNrID0gbWF0Y2hpbmdDb250cm9sLnZhbHVlO1xuICAgICAgaWYgKHN0clRvQ2hlY2sgJiYgc3RyVG9DaGVjay5sZW5ndGggPiAxKSB7XG4gICAgICAgIGNvbnN0IHJlc0FzYyA9IHRoaXMucGluT3JkZXJDaGVjayhzdHJUb0NoZWNrKTtcbiAgICAgICAgaWYgKHJlc0FzYyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb25zZWN1dGl2ZU51bWJlcnM6IHRydWVcbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfTtcblxuXG4gIHBpbk9yZGVyQ2hlY2soc3RyOiBzdHJpbmcpOiBhbnkge1xuICAgIGlmIChzdHIpIHtcbiAgICAgIGNvbnN0IGFycl9udW0gPSAoJycgKyBzdHIpLnNwbGl0KCcnKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyX251bS5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgY29uc3QgbnVtMSA9IHBhcnNlSW50KGFycl9udW1baV0pO1xuICAgICAgICBjb25zdCBudW0yID0gcGFyc2VJbnQoYXJyX251bVtpICsgMV0pO1xuICAgICAgICBjb25zdCBudW0zID0gcGFyc2VJbnQoYXJyX251bVtpICsgMl0pO1xuICAgICAgICBpZiAoKG51bTIgLSBudW0xKSA9PT0gMSAmJiAobnVtMyAtIG51bTIgPT09IG51bTIgLSBudW0xKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cblxuICBwaW5NYWlsYm94RXh0ZW5zaW9uQ2hlY2sgPSAoZmllbGROYW1lOiBzdHJpbmcsIGV4dGVuc2lvbjogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcbiAgICAgIGlmICghY29udHJvbC5wYXJlbnQpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICBjb25zdCBtYXRjaGluZ0NvbnRyb2wgPSBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lKTtcbiAgICAgIGNvbnN0IHN0clRvQ2hlY2sgPSBtYXRjaGluZ0NvbnRyb2wudmFsdWU7XG4gICAgICBpZiAoc3RyVG9DaGVjayA9PT0gZXh0ZW5zaW9uIHx8IHN0clRvQ2hlY2suaW5jbHVkZXMoZXh0ZW5zaW9uKSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1haWxib3hFeHRlbnNpb246IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gIH07XG5cbiAgaXNJdGVtQWxyZWFkeUluTGlzdChpdGVtOiBhbnksIGxpc3Q6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICghaXRlbSB8fCAhbGlzdCB8fCAhbGlzdC5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBsaXN0SXRlbSBvZiBsaXN0KSB7XG4gICAgICBpZiAoaXRlbS5lcXVhbHMobGlzdEl0ZW0pKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiJdfQ==
760
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXItZGV2aWNlLW1hbmFnZS9zcmMvc2VydmljZXMvdmFsaWRhdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUN6RyxPQUFPLEVBQVUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQUV6RCxNQUFNLGNBQWMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM3QyxNQUFNLFFBQVEsR0FBRyxJQUFJLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUMzQyxNQUFNLFNBQVMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFDO0FBR3JFLE1BQU0sT0FBTyxpQkFBaUI7SUFFNUIsWUFDVSxtQkFBd0M7UUFBeEMsd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQTZIbEQsaUJBQVksR0FBRyxDQUFDLFNBQWlCLEVBQUUsRUFBRTtZQUNuQyxPQUFPLENBQUMsT0FBWSxFQUFFLEVBQUU7Z0JBQ3RCLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFO29CQUNwQixPQUFPLElBQUksQ0FBQztpQkFDYjtnQkFDRCxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxlQUFlLENBQUMsS0FBSyxJQUFJLGVBQWUsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLEtBQUssRUFBRTtvQkFDcEUsT0FBTzt3QkFDTCxZQUFZLEVBQUUsSUFBSTtxQkFDbkIsQ0FB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SSxDQUFDLElBQUksR0FBRyxJQUFJLEtBQUssSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFO29CQUN4RCxPQUFPLElBQUksQ0FBQztpQkFDYjthQUNGO1lBQ0QsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFtQkQsbUJBQW1CLENBQUMsSUFBUyxFQUFFLElBQVM7UUFDdEMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDbEMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUNELEtBQUssTUFBTSxRQUFRLElBQUksSUFBSSxFQUFFO1lBQzNCLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDekIsT0FBTyxJQUFJLENBQUM7YUFDYjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDOzsrR0FqekJVLGlCQUFpQjttSEFBakIsaUJBQWlCOzRGQUFqQixpQkFBaUI7a0JBRDdCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNpdGVTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuL3NpdGUtc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7IERldmljZVR5cGVzLCBNYWlsYm94UXVvdGFzVHlwZSwgU3BlZWREaWFsVHlwZSwgVk1Ob3RpZmljYXRpb25zVHlwZXMgfSBmcm9tICcuLy4uL2NsYXNzZXMvdHlwZXMnO1xyXG5pbXBvcnQgeyBEZXZpY2UsIERldmljZUtpbmQgfSBmcm9tICcuLy4uL2NsYXNzZXMvZGV2aWNlJztcclxuXHJcbmNvbnN0IHNwZWVkRGlhbFJlZ2V4ID0gbmV3IFJlZ0V4cCgnXlteXCJdKiQnKTtcclxuY29uc3QgQkxGUmVnZXggPSBuZXcgUmVnRXhwKCdeW15cIj48JiVdKiQnKTtcclxuY29uc3QgdGltZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXihbMC0xXVswLTldfFsyXVswLTNdKTooWzAtNV1bMC05XSkkJyk7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBWYWxpZGF0aW9uU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBzaXRlU2V0dGluZ3NTZXJ2aWNlOiBTaXRlU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgZTE2NE1hc2tMYWJlbChjb250cm9sOiBhbnkpIHtcclxuICAgIGNvbnN0IHJ1bGVUZXh0ID0gYF5bMC05KiMrWF17MCwyNH0kYDtcclxuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUmVnRXhwKHJ1bGVUZXh0LCAnZycpO1xyXG4gICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgcnVsZSAmJiAhcnVsZS50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB7ZTE2NE1hc2tSdWxlOiB7cnVsZTogcnVsZVRleHR9fTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgaW5kZXgoY29udHJvbDogYW55KSB7XHJcbiAgICBjb25zdCB2YWx1ZSA9IHBhcnNlSW50KGNvbnRyb2wudmFsdWUpO1xyXG4gICAgaWYgKCF2YWx1ZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IHBhdHRlcm4gPSAnXlsrMC05XSokJztcclxuICAgIGlmICh2YWx1ZSAmJiAhTnVtYmVyLmlzSW50ZWdlcih2YWx1ZSkgfHwgdmFsdWUgPCAxIHx8IHZhbHVlID4gMTk5KSB7XHJcbiAgICAgIHJldHVybiB7aW5kZXhSdWxlOiB0cnVlfTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZGlzcGxheUxhYmVsKGNvbnRyb2w6IGFueSkge1xyXG4gICAgY29uc3QgcnVsZVRleHQgPSBgXlteXCJcIlwiXCIlJjw+XXswLDMwfSRgO1xyXG4gICAgY29uc3QgcnVsZSA9IG5ldyBSZWdFeHAocnVsZVRleHQsICdnJyk7XHJcbiAgICBpZiAocnVsZSAmJiAhcnVsZS50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB7bGFiZWxSdWxlOiB7cnVsZTogcnVsZVRleHQsIGNvdW50OiAzMH19O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuXHJcblxyXG4gIGRpc3BsYXlMYWJlbEFzY2lpKGNvbnRyb2w6IGFueSkge1xyXG4gICAgY29uc3QgcnVsZVRleHQgPSAnXlthLXpBLVowLTkgISMkXFwnKCkqKywuLzo7PT9AXFxcXF5fYH1+LV17MCwzMH0kJztcclxuICAgIGNvbnN0IHJ1bGUgPSBuZXcgUmVnRXhwKHJ1bGVUZXh0LCAnZycpO1xyXG4gICAgaWYgKHJ1bGUgJiYgIXJ1bGUudGVzdChjb250cm9sLnZhbHVlKSkge1xyXG4gICAgICByZXR1cm4ge2xhYmVsUnVsZToge3J1bGU6IHJ1bGVUZXh0LCBjb3VudDogMzB9fTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgcmVxdWlyZWRGb3JTcGVlZERpYWxQb3NpdGlvbih0eXBlOiBzdHJpbmcpIHtcclxuXHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBwYXJlbnQgPSBjb250cm9sLnBhcmVudDtcclxuICAgICAgaWYgKHR5cGUgPT09IFNwZWVkRGlhbFR5cGUuc2xvdEJhc2ljIHx8ICFwYXJlbnQpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgICByZXR1cm4ge3JlcXVpcmVkOiB0cnVlfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBzcGVlZERpYWxEZXN0aW5hdGlvbigpIHtcclxuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghY29udHJvbCB8fCAhY29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG51bWJlck9ySG9zdE5hbWVJUCA9ICcnICtcclxuICAgICAgICAnXihbMC05XFxcXCojK1BwQ2NGZixdKykkJyArXHJcbiAgICAgICAgJ3wnICtcclxuICAgICAgICAnXignICtcclxuICAgICAgICAnKFthLXpBLVowLTldKXsxLDQ3fUAnICtcclxuICAgICAgICAnKCcgK1xyXG4gICAgICAgICcoKD86WzAtOV17MSwzfVxcXFwuKXszfVswLTldezEsM30pJyArXHJcbiAgICAgICAgJ3wnICtcclxuICAgICAgICAnKFthLXpBLVowLTldW2EtekEtWjAtOVxcXFwtXXsxLDYxfVthLXpBLVowLTldXFxcXC5bYS16QS1aXXsyLH0pJyArXHJcbiAgICAgICAgJyknICtcclxuICAgICAgICAnKSQnO1xyXG4gICAgICBjb25zdCBydWxlID0gbmV3IFJlZ0V4cChudW1iZXJPckhvc3ROYW1lSVAsICdnJyk7XHJcbiAgICAgIGlmIChydWxlICYmICFydWxlLnRlc3QoY29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4ge3BhdHRlcm46IHRydWV9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuXHJcbiAgfVxyXG5cclxuICByZXF1aXJlZEZvclNwZWVkRGlhbERlc3RpbmF0aW9uKHR5cGU6IHN0cmluZykge1xyXG5cclxuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHBhcmVudCA9IGNvbnRyb2wucGFyZW50O1xyXG4gICAgICBpZiAoKCFwYXJlbnQgfHwgIXBhcmVudC5nZXQoJ2xhYmVsJykpIHx8ICh0eXBlID09PSBTcGVlZERpYWxUeXBlLnNsb3RCYXNpYyAmJiAhY29udHJvbC52YWx1ZSAmJiAhcGFyZW50LmdldCgnbGFiZWwnKS52YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuXHJcbiAgbGFiZWxQYXR0ZXJuRGVwZW5kaW5nT25UeXBlKGNvbnRyb2w6IGFueSkge1xyXG4gICAgY29uc3QgcGFyZW50ID0gY29udHJvbD8ucGFyZW50O1xyXG4gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC5nZXQoJ3R5cGUnKSB8fCAhY29udHJvbC52YWx1ZSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIGNvbnN0IHR5cGUgPSBwYXJlbnQuZ2V0KCd0eXBlJykudmFsdWU7XHJcbiAgICBpZiAoIXR5cGUgJiYgIXNwZWVkRGlhbFJlZ2V4LnRlc3QoY29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHtsYWJlbFJ1bGU6IHt3cm9uZzogJ1wiJ319O1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGUgJiYgIUJMRlJlZ2V4LnRlc3QoY29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHtsYWJlbFJ1bGU6IHt3cm9uZzogJ1wiPjwmJSd9fTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgbGFiZWxQYXR0ZXJuQkxGKGNvbnRyb2w6IGFueSkge1xyXG4gICAgaWYgKGNvbnRyb2wudmFsdWUgJiYgIUJMRlJlZ2V4LnRlc3QoY29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgcmV0dXJuIHtsYWJlbFJ1bGU6IHt3cm9uZzogJ1wiPjwmJSd9fTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgbGFiZWxQYXR0ZXJuU3BlZWREaWFsKGNvbnRyb2w6IGFueSkge1xyXG4gICAgaWYgKGNvbnRyb2w/LnZhbHVlICYmICFzcGVlZERpYWxSZWdleC50ZXN0KGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgIHJldHVybiB7bGFiZWxSdWxlOiB7d3Jvbmc6ICdcIid9fTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgbWF0Y2hDb250cm9sID0gKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWNvbnRyb2w/LnBhcmVudCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUpO1xyXG4gICAgICBpZiAobWF0Y2hpbmdDb250cm9sLnZhbHVlICYmIG1hdGNoaW5nQ29udHJvbC52YWx1ZSAhPT0gY29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBtYXRjaENvbnRyb2w6IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICBtYXRjaExlbmd0aCA9IChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCB8fCAhY29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUpO1xyXG4gICAgICBpZiAoKCghY29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCcrJykgJiYgIW1hdGNoaW5nQ29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCcrJykpIHx8XHJcbiAgICAgICAgKGNvbnRyb2wudmFsdWUuc3RhcnRzV2l0aCgnKycpICYmIG1hdGNoaW5nQ29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCcrJykpKSAmJlxyXG4gICAgICAgICgoIWNvbnRyb2wudmFsdWUuc3RhcnRzV2l0aCgnXFxcXCsnKSAmJiAhbWF0Y2hpbmdDb250cm9sLnZhbHVlLnN0YXJ0c1dpdGgoJ1xcXFwrJykpIHx8XHJcbiAgICAgICAgICAoY29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCdcXFxcKycpICYmIG1hdGNoaW5nQ29udHJvbC52YWx1ZS5zdGFydHNXaXRoKCdcXFxcKycpKSkgJiZcclxuICAgICAgICBtYXRjaGluZ0NvbnRyb2wudmFsdWUubGVuZ3RoICE9PSBjb250cm9sLnZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBtYXRjaExlbmd0aDogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIGR5bmFtaWNNYXhMZW5ndGggPSAobGVuZ3RoMTogbnVtYmVyLCBsZW5ndGgyOiBudW1iZXIpID0+IHtcclxuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghY29udHJvbC5wYXJlbnQgfHwgIWNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBtYXhMZW5ndGggPSBTdHJpbmcoY29udHJvbC52YWx1ZSkuaW5jbHVkZXMoJ1snKSA/IGxlbmd0aDEgOiBsZW5ndGgyO1xyXG4gICAgICBpZiAoY29udHJvbC52YWx1ZS5sZW5ndGggPiBtYXhMZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbWF4TGVuZ3RoOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgYmlnZ2VyVGhhbiA9IChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCB8fCAhY29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUpO1xyXG4gICAgICBpZiAobWF0Y2hpbmdDb250cm9sLnZhbHVlLmxlbmd0aCA9PT0gY29udHJvbC52YWx1ZS5sZW5ndGggJiYgbWF0Y2hpbmdDb250cm9sLnZhbHVlICYmIG1hdGNoaW5nQ29udHJvbC52YWx1ZSA+IGNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgYmlnZ2VyVGhhbjogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIHJlcXVpcmVkQnlUeXBlID0gKGZpZWxkTmFtZTogc3RyaW5nLCB0eXBlOiBzdHJpbmcpID0+IHtcclxuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBmaWVsZE5hbWUgPT09ICdwaG9uZVN5c3RlbScgJiYgKHR5cGUgPT09IFZNTm90aWZpY2F0aW9uc1R5cGVzWydQaG9uZSBEZXZpY2UnXSB8fCB0eXBlID09PSBWTU5vdGlmaWNhdGlvbnNUeXBlc1snUGFnZXIgRGV2aWNlJ10pIHx8XHJcbiAgICAgICAgZmllbGROYW1lID09PSAnaHRtbFRlbXBsYXRlJyAmJiB0eXBlID09PSBWTU5vdGlmaWNhdGlvbnNUeXBlc1snSFRNTCBEZXZpY2UnXVxyXG4gICAgICApIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgcmVxdWlyZWQ6IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICBzbWFsbGVyVGhhblF1b3RhID0gKGZpZWxkTmFtZTogc3RyaW5nLCBxdW90YVR5cGU6IHN0cmluZywgc2Vjb25kUXVvdGFUeXBlOiBzdHJpbmcpID0+IHtcclxuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghY29udHJvbC5wYXJlbnQpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBtYXRjaGluZ0NvbnRyb2wgPSBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lKTtcclxuICAgICAgY29uc3QgcXVvdGFUeXBlQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChxdW90YVR5cGUpO1xyXG4gICAgICBjb25zdCBzZWNvbmRRdW90YVR5cGVDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KHNlY29uZFF1b3RhVHlwZSk7XHJcblxyXG4gICAgICBpZiAocXVvdGFUeXBlQ29udHJvbCAmJiBzZWNvbmRRdW90YVR5cGVDb250cm9sICYmIHNlY29uZFF1b3RhVHlwZUNvbnRyb2wudmFsdWUgPT09IE1haWxib3hRdW90YXNUeXBlLnN5c3RlbSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAocXVvdGFUeXBlQ29udHJvbCAmJiBxdW90YVR5cGVDb250cm9sLnZhbHVlID09PSBNYWlsYm94UXVvdGFzVHlwZS5zeXN0ZW0gfHwgbWF0Y2hpbmdDb250cm9sICYmIG1hdGNoaW5nQ29udHJvbC52YWx1ZSAmJiBwYXJzZUludChtYXRjaGluZ0NvbnRyb2wudmFsdWUpIDwgcGFyc2VJbnQoY29udHJvbC52YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgc21hbGxlclRoYW46IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICBiaWdnZXJUaGFuUXVvdGEgPSAoZmllbGROYW1lOiBzdHJpbmcsIHF1b3RhVHlwZTogc3RyaW5nKSA9PiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWNvbnRyb2w/LnBhcmVudCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUpO1xyXG4gICAgICBjb25zdCBxdW90YVR5cGVDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KHF1b3RhVHlwZSk7XHJcblxyXG4gICAgICBpZiAocXVvdGFUeXBlQ29udHJvbCAmJiBxdW90YVR5cGVDb250cm9sLnZhbHVlID09PSBNYWlsYm94UXVvdGFzVHlwZS5jdXN0b20gJiYgbWF0Y2hpbmdDb250cm9sLnZhbHVlICYmIHBhcnNlSW50KG1hdGNoaW5nQ29udHJvbC52YWx1ZSkgPiBwYXJzZUludChjb250cm9sLnZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBiaWdnZXJUaGFuOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgcmFuZ2VMaW1pdCA9IChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFjb250cm9sPy5wYXJlbnQgfHwgIWNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBtYXRjaGluZ0NvbnRyb2wgPSBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lKTtcclxuICAgICAgaWYgKChjb250cm9sLnZhbHVlIC0gbWF0Y2hpbmdDb250cm9sLnZhbHVlKSA+IDUwMDAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHJhbmdlTGltaXQ6IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICBjb21wYXJlcGF0dGVyblBhcnRzID0gKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWNvbnRyb2w/LnZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbWF0Y2hlcyA9IGNvbnRyb2wudmFsdWUubWF0Y2goL1xcWyguKj8pXFxdLyk7XHJcbiAgICAgIGlmIChtYXRjaGVzKSB7XHJcbiAgICAgICAgY29uc3Qgc3VibWF0Y2ggPSBtYXRjaGVzWzFdO1xyXG4gICAgICAgIGNvbnN0IHN1Ym1hdGNoc3BsaXQ6IG51bWJlcltdID0gc3VibWF0Y2guc3BsaXQoJy0nKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN1Ym1hdGNoc3BsaXQubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgIGlmIChzdWJtYXRjaHNwbGl0W2ldID49IHN1Ym1hdGNoc3BsaXRbaSArIDFdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgY29tcGFyZXBhdHRlcm5QYXJ0czogdHJ1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgbWF0Y2hQcmVmaXggPSAoZmllbGROYW1lOiBzdHJpbmcpID0+IHtcclxuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghY29udHJvbD8ucGFyZW50IHx8ICFjb250cm9sLnZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbWF0Y2hpbmdDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZSk7XHJcbiAgICAgIGlmICgobWF0Y2hpbmdDb250cm9sLnZhbHVlLnN0YXJ0c1dpdGgoJysnKSB8fCBjb250cm9sLnZhbHVlLnN0YXJ0c1dpdGgoJysnKSB8fCBtYXRjaGluZ0NvbnRyb2wudmFsdWUuc3RhcnRzV2l0aCgnXFxcXCsnKSB8fCBjb250cm9sLnZhbHVlLnN0YXJ0c1dpdGgoJ1xcXFwrJykpICYmIChjb250cm9sLnZhbHVlLmNoYXJBdCgwKSAhPT0gbWF0Y2hpbmdDb250cm9sLnZhbHVlLmNoYXJBdCgwKSkpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbWF0Y2hQcmVmaXg6IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICBkZXZpY2VOYW1lVmFsaWRhdG9yID0gKGRldmljZTogRGV2aWNlKSA9PiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgZGV2aWNlLmRldmljZUtpbmQgPT09IERldmljZUtpbmQuZGV2aWNlUHJvZmlsZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZGV2aWNlLmlzQ3RpUm91dGVQb2ludCkge1xyXG4gICAgICAgIGxldCBlcnIgPSAnJztcclxuICAgICAgICBpZiAoIWNvbnRyb2wudmFsdWUubWF0Y2goL15bYS16QS1aMC05LV8uXSskLykpIHtcclxuICAgICAgICAgIGVyciA9ICdwYXR0ZXJuJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbnRyb2wudmFsdWUudHJpbSgpLmxlbmd0aCA+IDE1KSB7XHJcbiAgICAgICAgICBlcnIgPSAnbWF4TGVuZ3RoJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVyciA/IHtuYW1lUnVsZTogZXJyfSA6IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGRldmljZS5kZXZpY2VEZWZhdWx0cyAmJiAhZGV2aWNlLmlzQ3RpUm91dGVQb2ludCkge1xyXG4gICAgICAgIGNvbnN0IHJ1bGVUZXh0ID0gZGV2aWNlLmRldmljZURlZmF1bHRzLmRldmljZU5hbWVSZWdleDtcclxuICAgICAgICBjb25zdCBydWxlID0gbmV3IFJlZ0V4cChydWxlVGV4dCwgJ2cnKTtcclxuICAgICAgICBjb25zdCBjYXB0aW9uID0gZGV2aWNlLmRldmljZURlZmF1bHRzPy5kZXZpY2VOYW1lRXhwbGFpbmVkO1xyXG4gICAgICAgIGNvbnN0IG1hdGNoID0gKGNvbnRyb2wudmFsdWUgfHwgJycpLm1hdGNoKHJ1bGUpIHx8IFtdO1xyXG4gICAgICAgIGNvbnN0IGV4YWN0TWF0Y2ggPSBtYXRjaCAmJiBjb250cm9sLnZhbHVlID09PSBtYXRjaFswXTtcclxuICAgICAgICBpZiAocnVsZSAmJiAhZXhhY3RNYXRjaCkge1xyXG4gICAgICAgICAgcmV0dXJuIHtuYW1lUnVsZToge2NhcHRpb259fTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIGRldmljZU5hbWVWYWx1ZVZhbGlkYXRvciA9IChkZXZpY2U6IERldmljZSwgZGV2aWNlTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgZGV2aWNlLmRldmljZUtpbmQgPT09IERldmljZUtpbmQuZGV2aWNlUHJvZmlsZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZGV2aWNlLm5hbWUgJiYgZGV2aWNlLmFscmVhZHlVc2VkTmFtZSAmJiBkZXZpY2UubmFtZSA9PT0gZGV2aWNlLmFscmVhZHlVc2VkTmFtZSkge1xyXG4gICAgICAgIHJldHVybiB7bmFtZVJ1bGU6ICdhbHJlYWR5VXNlZE5hbWUnfTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZGV2aWNlLmlzQ3RpUm91dGVQb2ludCkge1xyXG4gICAgICAgIGxldCBlcnIgPSAnJztcclxuICAgICAgICBpZiAoIWRldmljZU5hbWUubWF0Y2goL15bYS16QS1aMC05LV8uXSskLykpIHtcclxuICAgICAgICAgIGVyciA9ICdwYXR0ZXJuJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRldmljZU5hbWUudHJpbSgpLmxlbmd0aCA+IDE1KSB7XHJcbiAgICAgICAgICBlcnIgPSAnbWF4TGVuZ3RoJztcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGVyciA/IHtuYW1lUnVsZTogZXJyfSA6IG51bGw7XHJcbiAgICAgIH1cclxuICAgICBpZiAoZGV2aWNlLmRldmljZURlZmF1bHRzICYmICFkZXZpY2UuaXNDdGlSb3V0ZVBvaW50KSB7XHJcbiAgICAgICBjb25zdCBydWxlVGV4dCA9IGRldmljZS5kZXZpY2VEZWZhdWx0cy5kZXZpY2VOYW1lUmVnZXg7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ0RldiBuYW1lIHJ1bGUgLSAnLCBydWxlVGV4dCk7XHJcbiAgICAgICAgY29uc3QgcnVsZSA9IG5ldyBSZWdFeHAocnVsZVRleHQsICdnJyk7XHJcbiAgICAgICAgbGV0IGNhcHRpb24gPSBkZXZpY2UuZGV2aWNlRGVmYXVsdHMuZGV2aWNlTmFtZUV4cGxhaW5lZDtcclxuICAgICAgICBpZiAoIWNhcHRpb24pIHtcclxuICAgICAgICAgIGNhcHRpb24gPSBydWxlVGV4dDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbWF0Y2ggPSAoZGV2aWNlTmFtZSB8fCAnJykubWF0Y2gocnVsZSkgfHwgW107XHJcbiAgICAgICAgY29uc3QgZXhhY3RNYXRjaCA9IG1hdGNoICYmIGRldmljZU5hbWUgPT09IG1hdGNoWzBdO1xyXG4gICAgICAgIGlmIChydWxlICYmICFleGFjdE1hdGNoKSB7XHJcbiAgICAgICAgICByZXR1cm4ge25hbWVSdWxlOiB7Y2FwdGlvbn19O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgZGV2aWNlRHVwbGljYXRpbmdOYW1lVmFsaWRhdG9yID0gKHVzZXI6IGFueSwgcGtpZCA/OiBzdHJpbmcsIHByZWZpeD86IHN0cmluZykgPT4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFjb250cm9sLnZhbHVlIHx8ICF1c2VyIHx8ICF1c2VyLmRldmljZXMgfHwgdXNlci5kZXZpY2VzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBkZXZpY2VOYW1lID0gcHJlZml4ID8gYCR7cHJlZml4fSR7Y29udHJvbC52YWx1ZX1gIDogY29udHJvbC52YWx1ZTtcclxuICAgICAgY29uc3QgZGV2aWNlc1dpdGhUaGVTYW1lTmFtZSA9IHVzZXIuZGV2aWNlcy5maWx0ZXIoKGRldmljZTogRGV2aWNlKSA9PiBkZXZpY2UubmFtZSA9PT0gZGV2aWNlTmFtZSk7XHJcbiAgICAgIGlmIChkZXZpY2VzV2l0aFRoZVNhbWVOYW1lLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBpZiAoIXBraWQpIHsgIC8vIEZvciBuZXcgZGV2aWNlXHJcbiAgICAgICAgICByZXR1cm4ge2R1cGxpY2F0ZU5hbWVSdWxlOiB0cnVlfTtcclxuICAgICAgICB9IGVsc2UgaWYgKHBraWQgIT09IGRldmljZXNXaXRoVGhlU2FtZU5hbWVbMF0ucGtpZCkgeyAvLyBGb3IgdXBkYXRpbmcgZGV2aWNlLCBhdm9pZCB2YWxpZGF0aW5nIHdpdGggaXRzZWxmXHJcbiAgICAgICAgICByZXR1cm4ge2R1cGxpY2F0ZU5hbWVSdWxlOiB0cnVlfTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIGNvbmRpdGlvbmFsUmVxdWlyZWQgPSAoZmllbGROYW1lOiBzdHJpbmcsIHJlcXVpcmVkQ29uZGl0aW9uVmFsdWVzOiBhbnlbXSkgPT4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgcGFyZW50MSA9IGNvbnRyb2wucGFyZW50O1xyXG4gICAgICBpZiAoIXBhcmVudDEgfHwgIXBhcmVudDEuZ2V0KGZpZWxkTmFtZSkgfHwgIXBhcmVudDEuZ2V0KGZpZWxkTmFtZSkudmFsdWUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHJlcXVpcmVkQ29uZGl0aW9uVmFsdWVzLmluY2x1ZGVzKHBhcmVudDEuZ2V0KGZpZWxkTmFtZSkudmFsdWUpICYmICFjb250cm9sLnZhbHVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHJlcXVpcmVkOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgY29uZGl0aW9uYWxSZXF1aXJlZEZvckdyb3VwQWRtaW4gPSAoZmllbGROYW1lOiBzdHJpbmcsIHJlcXVpcmVkQ29uZGl0aW9uVmFsdWVzOiBhbnlbXSkgPT4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgcGFyZW50MSA9IGNvbnRyb2wucGFyZW50O1xyXG4gICAgICBpZiAoIXBhcmVudDEgfHwgIXBhcmVudDEuZ2V0KGZpZWxkTmFtZSkgfHwgIXBhcmVudDEuZ2V0KGZpZWxkTmFtZSkudmFsdWUgfHwgIXBhcmVudDEuZ2V0KGZpZWxkTmFtZSkudmFsdWUudHlwZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAocmVxdWlyZWRDb25kaXRpb25WYWx1ZXMuaW5jbHVkZXMocGFyZW50MS5nZXQoZmllbGROYW1lKS52YWx1ZS50eXBlKSAmJiAhY29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIGNvbmRpdGlvbmFsU2l0ZUdyb3VwQ2hlY2tGb3JHcm91cEFkbWluID0gKGZpZWxkTmFtZTogc3RyaW5nLCByZXF1aXJlZENvbmRpdGlvblZhbHVlczogYW55W10pID0+IHtcclxuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XHJcbiAgICAgIGNvbnN0IHBhcmVudDEgPSBjb250cm9sLnBhcmVudDtcclxuICAgICAgaWYgKCFwYXJlbnQxIHx8ICFwYXJlbnQxLmdldChmaWVsZE5hbWUpIHx8ICFwYXJlbnQxLmdldChmaWVsZE5hbWUpLnZhbHVlIHx8ICFwYXJlbnQxLmdldChmaWVsZE5hbWUpLnZhbHVlLnR5cGUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHBhcmVudDEuZ2V0KGZpZWxkTmFtZSkudmFsdWUgJiYgcmVxdWlyZWRDb25kaXRpb25WYWx1ZXMuaW5jbHVkZXMocGFyZW50MS5nZXQoZmllbGROYW1lKS52YWx1ZS50eXBlKSAmJlxyXG4gICAgICAgIHBhcmVudDEuZ2V0KCdzaXRlR3JvdXAnKSAmJiBwYXJlbnQxLmdldCgnc2l0ZUdyb3VwJykudmFsdWUgJiZcclxuICAgICAgICBwYXJlbnQxLmdldCgnc2l0ZUdyb3VwJykudmFsdWUuc2l0ZUdyb3VwTWVtYmVycyAmJiBwYXJlbnQxLmdldCgnc2l0ZUdyb3VwJykudmFsdWUuc2l0ZUdyb3VwTWVtYmVycy5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGhhc1NpdGVHcm91cEVycm9yOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgcmVxdWlyZWRJZkZpZWxkSXNFbXB0eUZvckJMRiA9IChmaWVsZE5hbWU6IGFueSkgPT4ge1xyXG4gICAgY29uc3QgREFURV9QQVRURVJOID0gJ14oMFsxLTldfDFbMDEyXSlbLSBcXC8uXSgwWzEtOV18WzEyXVswLTldfDNbMDFdKVstIFxcLy5dKDE5fDIwKVxcZFxcZCQnO1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgcGFyZW50ID0gY29udHJvbC5wYXJlbnQ7XHJcbiAgICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQuZ2V0KGZpZWxkTmFtZSkpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXBhcmVudC5nZXQoZmllbGROYW1lKS52YWx1ZSAmJiAhY29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICByZXF1aXJlZEVpdGhlcjogdHJ1ZSxcclxuICAgICAgICAgIHJlcXVpcmVkQkxGRE46IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuXHJcbiAgdmFsaWREYXRlID0gKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XHJcblxyXG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgcGFyZW50ID0gY29udHJvbC5wYXJlbnQ7XHJcbiAgICAgIGNvbnN0IHJ1bGVUZXh0ID0gJ14oMFsxLTldfDFbMDEyXSlbLSBcXC8uXSgwWzEtOV18WzEyXVswLTldfDNbMDFdKVstIFxcLy5dKDE5fDIwKVxcZFxcZCQnO1xyXG4gICAgICBjb25zdCBydWxlID0gbmV3IFJlZ0V4cChydWxlVGV4dCwgJ2cnKTtcclxuICAgICAgY29uc3QgdmFsID0gY29udHJvbC52YWx1ZSAmJiBjb250cm9sLnZhbHVlLmdldERhdGUoKTtcclxuICAgICAgaWYgKHJ1bGUgJiYgIXJ1bGUudGVzdCh2YWwpKSB7XHJcbiAgICAgICAgcmV0dXJuIHtwYXR0ZXJuOiB0cnVlfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcblxyXG4gIG1hdGNoT3B0aW9uID0gKG9wdGlvblR5cGU6IHN0cmluZywgbGlzdD86IGFueSwgaXNGdWxsTGlzdD86IGJvb2xlYW4pID0+IHtcclxuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghY29udHJvbC52YWx1ZSB8fCBjb250cm9sLnZhbHVlID09PSBEZXZpY2VUeXBlcy5DVElfUk9VVEVfUE9JTlQpIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgICBsZXQgb3B0aW9uTGlzdCA9IGxpc3QgfHwgdGhpcy5nZXRPcHRpb25zTGlzdChvcHRpb25UeXBlKTtcclxuICAgICAgaWYgKG9wdGlvbkxpc3QgJiYgb3B0aW9uTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICBpZiAoIWlzRnVsbExpc3QgJiYgb3B0aW9uVHlwZSA9PT0gJ2RpcmVjdG9yeU51bWJlcnMnKSB7XHJcbiAgICAgICAgICBvcHRpb25MaXN0ID0gb3B0aW9uTGlzdC5tYXAoKHN0cjogc3RyaW5nKSA9PiBzdHIuaW5kZXhPZignICcpID4gLTEgPyBzdHIuc3Vic3RyaW5nKDAsIHN0ci5pbmRleE9mKCcgJykpIDogc3RyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFvcHRpb25MaXN0LmluY2x1ZGVzKGNvbnRyb2wudmFsdWUpKSB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBtYXRjaE9wdGlvbnM6IHRydWVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICBjb25maWRlbnRpYWxBY2Nlc3NMZXZlbCA9IChjb25maWRlbnRpYWxBY2Nlc3NNb2RlOiBzdHJpbmcpID0+IHtcclxuICAgIHJldHVybiAoY29udHJvbDogYW55KSA9PiB7XHJcbiAgICAgIGlmICghY29udHJvbC52YWx1ZSAmJiAhY29uZmlkZW50aWFsQWNjZXNzTW9kZSkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghY29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIG5vUmVzdWx0RE4gPSAob3B0aW9uVHlwZTogc3RyaW5nLCBsaXN0PzogYW55KSA9PiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgbGlzdCA9PT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChsaXN0ICYmIGxpc3QubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG5vUmVzdWx0RE5zOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgbWF0Y2hFeHRlbnNpb25PcHRpb24gPSAob3B0aW9uVHlwZTogc3RyaW5nLCBvcHRpb25MaXN0PzogYW55KSA9PiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgICByZXR1cm4gY29udHJvbC52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgIGNvbnN0IG5ld0xpc3QgPSBbXTtcclxuICAgICAgaWYgKG9wdGlvbkxpc3QgJiYgb3B0aW9uTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICBvcHRpb25MaXN0LmZvckVhY2goKGxpc3Q6IGFueSkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgbmV3T3B0aW9uTGlzdCA9IHRoaXMuZ2V0TWF0Y2hFeGlzdGluZ1ZtTGluZVZhbHVlKGxpc3QpO1xyXG4gICAgICAgICAgbmV3TGlzdC5wdXNoKG5ld09wdGlvbkxpc3QpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICBpZiAobmV3TGlzdCAmJiAhbmV3TGlzdC5pbmNsdWRlcyhjb250cm9sLnZhbHVlKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgbWF0Y2hPcHRpb25zOiB0cnVlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIGlmICghb3B0aW9uTGlzdCB8fCAhb3B0aW9uTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgbWF0Y2hPcHRpb25zOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgcHVibGljIGdldE1hdGNoRXhpc3RpbmdWbUxpbmVWYWx1ZShkbldpdGhUeXBlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgaW5kID0gZG5XaXRoVHlwZS5pbmRleE9mKCdUeXBlOicpO1xyXG4gICAgbGV0IGRuID0gZG5XaXRoVHlwZTtcclxuICAgIGlmIChpbmQgPiAtMSkge1xyXG4gICAgICBkbiA9IGRuV2l0aFR5cGUuc2xpY2UoMCwgaW5kKTtcclxuICAgICAgZG4gPSBkbi50cmltKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZG47XHJcbiAgfVxyXG5cclxuICByZXF1aXJlZEVpdGhlckZvclZtRXh0ZW5zaW9uID0gKGZpZWxkTmFtZTE6IHN0cmluZywgZmllbGROYW1lMjogc3RyaW5nKSA9PiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbWF0Y2hDb250cm9sMSA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUxKS52YWx1ZTtcclxuICAgICAgY29uc3QgbWF0Y2hDb250cm9sMiA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUyKS52YWx1ZTtcclxuICAgICAgaWYgKCFtYXRjaENvbnRyb2wxICYmICFtYXRjaENvbnRyb2wyKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHJlcXVpcmVkRWl0aGVyRm9yVm1FeHRlbnNpb246IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICByZXF1aXJlZEVpdGhlck9uZSA9IChmaWVsZE5hbWUxOiBzdHJpbmcsIGZpZWxkTmFtZTI6IHN0cmluZykgPT4ge1xyXG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG1hdGNoQ29udHJvbDEgPSBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lMSkgJiYgY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZTEpLnZhbHVlO1xyXG4gICAgICBjb25zdCBtYXRjaENvbnRyb2wyID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZTIpICYmIGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUyKS52YWx1ZTtcclxuICAgICAgaWYgKCFtYXRjaENvbnRyb2wxICYmICFtYXRjaENvbnRyb2wyKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIHJlcXVpcmVkRWl0aGVyT25lOiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgcmVxdWlyZWRCeVZhbHVlID0gKGZpZWxkTmFtZTogc3RyaW5nLCByZXF1ZXN0ZWRGaWVsZFZhbDogYW55KSA9PiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWNvbnRyb2wgfHwgIWNvbnRyb2wucGFyZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZmllbGRWYWwgPSBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lKSAmJiBjb250cm9sLnBhcmVudC5nZXQoZmllbGROYW1lKS52YWx1ZTtcclxuICAgICAgaWYgKGZpZWxkVmFsICYmIGZpZWxkVmFsID09PSByZXF1ZXN0ZWRGaWVsZFZhbCAmJiAhY29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIE9uZUV4dGVuc2lvbkVtcHR5ID0gKGZpZWxkTmFtZTE6IHN0cmluZywgZmllbGROYW1lMjogc3RyaW5nKSA9PiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbWF0Y2hDb250cm9sMSA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUxKS52YWx1ZTtcclxuICAgICAgY29uc3QgbWF0Y2hDb250cm9sMiA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUyKS52YWx1ZTtcclxuICAgICAgaWYgKG1hdGNoQ29udHJvbDEgJiYgbWF0Y2hDb250cm9sMikge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICBPbmVFeHRlbnNpb25Jc0VtcHR5OiB0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgcmVxdWlyZWRCeUNvbmRpdGlvbiA9IChyZXF1aXJlZEJ5OiBzdHJpbmcsIGZpZWxkTmFtZTogYW55KSA9PiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgcmVxdWlyZWRCeUNvbnRyb2wgPSBjb250cm9sLnBhcmVudC5nZXQocmVxdWlyZWRCeSkudmFsdWU7XHJcbiAgICAgIGNvbnN0IHJlcXVpcmVkQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUpLnZhbHVlO1xyXG4gICAgICBpZiAocmVxdWlyZWRCeUNvbnRyb2wgJiYgIXJlcXVpcmVkQ29udHJvbCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICByZXF1aXJlZDogdHJ1ZVxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgZ2V0T3B0aW9uc0xpc3QodG9rZW46IHN0cmluZyk6IHN0cmluZ1tdIHtcclxuICAgIHN3aXRjaCAodG9rZW4pIHtcclxuICAgICAgY2FzZSAnY3NzJzpcclxuICAgICAgY2FzZSAncmVyb3V0ZUNzcyc6XHJcbiAgICAgIGNhc2UgJ2NhbGxpbmdTZWFyY2hTcGFjZSc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5jYWxsaW5nU2VhcmNoU3BhY2VUeXBlcztcclxuICAgICAgY2FzZSAncmVyb3V0aW5nQ3NzJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLnNpdGVEZWZhdWx0cyAmJiB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2Uuc2l0ZURlZmF1bHRzLmNzc0ZpbHRlcjtcclxuICAgICAgY2FzZSAnZGV2aWNlVHlwZSc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5kZXZpY2VUeXBlcztcclxuICAgICAgY2FzZSAncm91dGVQYXJ0aXRpb24nOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2Uucm91dGVQYXJ0aXRpb25OYW1lcztcclxuICAgICAgY2FzZSAncm91dGVQYXJ0aXRpb25GaWx0ZXJlZCc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5maWx0ZXJlZFJvdXRlUGFydGl0aW9uTmFtZXM7XHJcbiAgICAgIGNhc2UgJ2RldmljZVBvb2xzJzpcclxuICAgICAgICByZXR1cm4gdGhpcy5zaXRlU2V0dGluZ3NTZXJ2aWNlLmRldmljZVBvb2xzO1xyXG4gICAgICBjYXNlICdhbGxSb3V0ZVBhcnRpdGlvbnMnOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnNpdGVTZXR0aW5nc1NlcnZpY2UuYWxsUm91dGVQYXJ0aXRpb25OYW1lcztcclxuICAgICAgY2FzZSAnZGlyZWN0b3J5TnVtYmVycyc6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZVNldHRpbmdzU2VydmljZS5kaXJlY3RvcnlOdW1iZXJzO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGF1dG9jb21wbGV0ZVR5cGUoY29udHJvbDogYW55KSB7XHJcbiAgICBpZiAoIWNvbnRyb2wudmFsdWUpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIGNvbnRyb2wudmFsdWUgIT09ICdvYmplY3QnICYmIGNvbnRyb2wudmFsdWUgIT09ICcnKSB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgc3RyaW5nRW50ZXJlZDogdHJ1ZVxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuXHJcbiAgcGFzc3dvcmQoY29udHJvbDogYW55KSB7XHJcbiAgICBjb25zdCBydWxlTnVtZXJpYyA9IG5ldyBSZWdFeHAoL1xcZCsvLCAnZycpO1xyXG4gICAgY29uc3QgcnVsZUNhcGl0YWxzID0gbmV3IFJlZ0V4cCgvW0EtWl0rLywgJ2cnKTtcclxuICAgIGNvbnN0IHJ1bGVTbWFsbCA9IG5ldyBSZWdFeHAoL1thLXpdKy8sICdnJyk7XHJcbiAgICBjb25zdCBydWxlU3BlY2lhbCA9IG5ldyBSZWdFeHAoL1shQCMkJSZcXC89XFw/X1xcLiw6O1xcLVxcXFwrXSsvLCAnZycpO1xyXG5cclxuICAgIGNvbnN0IGhhc051bWVyaWMgPSArcnVsZU51bWVyaWMudGVzdChjb250cm9sLnZhbHVlKTtcclxuICAgIGNvbnN0IGhhc0NhcGl0YWxzID0gK3J1bGVDYXBpdGFscy50ZXN0KGNvbnRyb2wudmFsdWUpO1xyXG4gICAgY29uc3QgaGFzU21hbGwgPSArcnVsZVNtYWxsLnRlc3QoY29udHJvbC52YWx1ZSk7XHJcbiAgICBjb25zdCBoYXNTcGVjaWFsID0gK3J1bGVTcGVjaWFsLnRlc3QoY29udHJvbC52YWx1ZSk7XHJcblxyXG4gICAgaWYgKGhhc051bWVyaWMgKyBoYXNDYXBpdGFscyArIGhhc1NtYWxsICsgaGFzU3BlY2lhbCA8IDMpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB3ZWFrUGFzc3dvcmQ6IHRydWVcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIHZlcmlmeUF1dG9BbnN3ZXIoY29udHJvbDogYW55KSB7XHJcbiAgICBpZiAoIWNvbnRyb2w/LnZhbHVlIHx8IGNvbnRyb2wudmFsdWUubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgbGV0IGF1dG9BbnN3ZXJFcnJvckxpbmUgPSBudWxsO1xyXG4gICAgaWYgKGNvbnRyb2wucGFyZW50ICYmIGNvbnRyb2wucGFyZW50LnBhcmVudCAmJiBjb250cm9sLnBhcmVudC5wYXJlbnQucGFyZW50ICYmIGNvbnRyb2wucGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50KSB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2xTTlIgPSBjb250cm9sLnBhcmVudDtcclxuICAgICAgY29uc3QgY29udHJvbFVzZXIgPSBjb250cm9sLnBhcmVudC5wYXJlbnQucGFyZW50LnBhcmVudDtcclxuICAgICAgY29uc3QgbGluZUFzc29jaWF0aW9ucyA9IGNvbnRyb2xTTlIuZ2V0KCdsaW5lQXNzb2NpYXRpb25zJyk7XHJcbiAgICAgIGNvbnN0IGxpbmVzID0gY29udHJvbFVzZXIuZ2V0KCdsaW5lcycpO1xyXG4gICAgICBpZiAobGluZXMpIHtcclxuICAgICAgICBsaW5lQXNzb2NpYXRpb25zLnZhbHVlLmZvckVhY2goKGxpbmVBc3NvY2lhdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBhdXRvQW5zd2VyTGluZSA9IGxpbmVzLmNvbnRyb2xzLmZpbmQoKGxpbmU6IGFueSkgPT4gbGluZS5nZXQoJ2RpcmVjdG9yeU51bWJlcicpLnZhbHVlLmRpcmVjdG9yeU51bWJlciA9PT0gbGluZUFzc29jaWF0aW9uLmRpcmVjdG9yeU51bWJlciAmJiBsaW5lLmdldCgnZGlyZWN0b3J5TnVtYmVyJykudmFsdWUucm91dGVQYXJ0aXRpb25OYW1lID09PSBsaW5lQXNzb2NpYXRpb24ucm91dGVQYXJ0aXRpb25OYW1lXHJcbiAgICAgICAgICAgICYmIGxpbmUuZ2V0KCdhdXRvQW5zd2VyJykudmFsdWUgIT09ICdBdXRvIEFuc3dlciBPZmYnKTtcclxuICAgICAgICAgIGlmIChhdXRvQW5zd2VyTGluZSkge1xyXG4gICAgICAgICAgICBhdXRvQW5zd2VyRXJyb3JMaW5lID0ge1xyXG4gICAgICAgICAgICAgIGF1dG9BbnN3ZXJFcnJvckxpbmU6IGxpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXJcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBhdXRvQW5zd2VyRXJyb3JMaW5lO1xyXG4gIH1cclxuXHJcbiAgdmVyaWZ5QmVnaW5FbmRUaW1lKGNvbnRyb2w6IGFueSkge1xyXG4gICAgY29uc3QgcGFyZW50ID0gY29udHJvbC5wYXJlbnQ7XHJcbiAgICBpZiAoIXBhcmVudCB8fCAhcGFyZW50LmdldCgnaXNBY3RpdmUnKSB8fCAhcGFyZW50LmdldCgnYWxsRGF5JykgfHwgIXBhcmVudC5nZXQoJ2Zyb20nKSB8fCAhcGFyZW50LmdldCgndG8nKSkge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAocGFyZW50LmdldCgnaXNBY3RpdmUnKS52YWx1ZSkge1xyXG4gICAgICBpZiAoIXBhcmVudC5nZXQoJ2FsbERheScpLnZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCFwYXJlbnQuZ2V0KCdmcm9tJykudmFsdWUgfHwgcGFyZW50LmdldCgnZnJvbScpLnZhbHVlID09PSAnTm8gT2ZmaWNlIEhvdXJzJ1xyXG4gICAgICAgICAgfHwgIXBhcmVudC5nZXQoJ3RvJykudmFsdWUgfHwgcGFyZW50LmdldCgndG8nKS52YWx1ZSA9PT0gJ05vIE9mZmljZSBIb3VycydcclxuICAgICAgICAgIHx8IHBhcmVudC5nZXQoJ2Zyb20nKS52YWx1ZSA+IHBhcmVudC5nZXQoJ3RvJykudmFsdWUpIHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGZyb21HcmVhdGVyVGhhblRvOiB0cnVlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgdGltZShjb250cm9sOiBhbnkpIHtcclxuICAgIGlmIChjb250cm9sLnZhbHVlICYmICF0aW1lUmVnZXgudGVzdChjb250cm9sLnZhbHVlKSkge1xyXG4gICAgICByZXR1cm4ge3RpbWVGb3JtYXQ6IHRydWV9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuXHJcbiAgcGluTXVsdGlDaGFyYWN0ZXJDaGVjayA9IChmaWVsZE5hbWU6IHN0cmluZykgPT4ge1xyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgcmV0dXJuIChjb250cm9sOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFjb250cm9sLnBhcmVudCkge1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IG1hdGNoaW5nQ29udHJvbCA9IGNvbnRyb2wucGFyZW50LmdldChmaWVsZE5hbWUpO1xyXG4gICAgICBjb25zdCBydWxlTXVsdGlDaGFyYWN0ZXIgPSBuZXcgUmVnRXhwKCcoWzAtOV0pXFxcXDF7Mn0nKTtcclxuICAgICAgaWYgKG1hdGNoaW5nQ29udHJvbC52YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGhhc011bHRpQ2hhcmFjdGVyID0gcnVsZU11bHRpQ2hhcmFjdGVyLnRlc3QobWF0Y2hpbmdDb250cm9sLnZhbHVlKTtcclxuICAgICAgICBpZiAoaGFzTXVsdGlDaGFyYWN0ZXIpIHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIG11bHRpQ2hhcmFjdGVyOiB0cnVlXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICBwaW5Db25zZWN1dGl2ZU51bWJlckNoZWNrID0gKGZpZWxkTmFtZTogc3RyaW5nKSA9PiB7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbWF0Y2hpbmdDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZSk7XHJcbiAgICAgIGNvbnN0IHN0clRvQ2hlY2sgPSBtYXRjaGluZ0NvbnRyb2wudmFsdWU7XHJcbiAgICAgIGlmIChzdHJUb0NoZWNrICYmIHN0clRvQ2hlY2subGVuZ3RoID4gMSkge1xyXG4gICAgICAgIGNvbnN0IHJlc0FzYyA9IHRoaXMucGluT3JkZXJDaGVjayhzdHJUb0NoZWNrKTtcclxuICAgICAgICBpZiAocmVzQXNjID09PSB0cnVlKSB7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBjb25zZWN1dGl2ZU51bWJlcnM6IHRydWVcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG5cclxuICBwaW5PcmRlckNoZWNrKHN0cjogc3RyaW5nKTogYW55IHtcclxuICAgIGlmIChzdHIpIHtcclxuICAgICAgY29uc3QgYXJyX251bSA9ICgnJyArIHN0cikuc3BsaXQoJycpO1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFycl9udW0ubGVuZ3RoIC0gMjsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgbnVtMSA9IHBhcnNlSW50KGFycl9udW1baV0pO1xyXG4gICAgICAgIGNvbnN0IG51bTIgPSBwYXJzZUludChhcnJfbnVtW2kgKyAxXSk7XHJcbiAgICAgICAgY29uc3QgbnVtMyA9IHBhcnNlSW50KGFycl9udW1baSArIDJdKTtcclxuICAgICAgICBpZiAoKG51bTIgLSBudW0xKSA9PT0gMSAmJiAobnVtMyAtIG51bTIgPT09IG51bTIgLSBudW0xKSkge1xyXG4gICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG5cclxuICBwaW5NYWlsYm94RXh0ZW5zaW9uQ2hlY2sgPSAoZmllbGROYW1lOiBzdHJpbmcsIGV4dGVuc2lvbjogc3RyaW5nKSA9PiB7XHJcbiAgICByZXR1cm4gKGNvbnRyb2w6IGFueSkgPT4ge1xyXG4gICAgICBpZiAoIWNvbnRyb2wucGFyZW50KSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgbWF0Y2hpbmdDb250cm9sID0gY29udHJvbC5wYXJlbnQuZ2V0KGZpZWxkTmFtZSk7XHJcbiAgICAgIGNvbnN0IHN0clRvQ2hlY2sgPSBtYXRjaGluZ0NvbnRyb2wudmFsdWU7XHJcbiAgICAgIGlmIChzdHJUb0NoZWNrID09PSBleHRlbnNpb24gfHwgc3RyVG9DaGVjay5pbmNsdWRlcyhleHRlbnNpb24pKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG1haWxib3hFeHRlbnNpb246IHRydWVcclxuICAgICAgICB9O1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9O1xyXG5cclxuICBpc0l0ZW1BbHJlYWR5SW5MaXN0KGl0ZW06IGFueSwgbGlzdDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAoIWl0ZW0gfHwgIWxpc3QgfHwgIWxpc3QubGVuZ3RoKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3QgbGlzdEl0ZW0gb2YgbGlzdCkge1xyXG4gICAgICBpZiAoaXRlbS5lcXVhbHMobGlzdEl0ZW0pKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbn1cclxuIl19