@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
@@ -7,6 +7,7 @@ import { Site } from "../../classes/site";
7
7
  import { DnRangeType, EndUser, } from "../../interfaces/user-creation-wizard.interfaces";
8
8
  import { buildSavableEndUser } from "../../utils/build-savable-end-user";
9
9
  import { applyDefaultDevicePrefixIfMissing } from "../../utils/device-default-prefix";
10
+ import { deviceNameHasDynamicTokens } from "../../utils/device-name-dynamic-tokens";
10
11
  import { parseDeviceNameRegexBody } from "../../utils/parse-device-name-rule";
11
12
  import * as i0 from "@angular/core";
12
13
  export class UserCreationWizardService {
@@ -161,7 +162,7 @@ export class UserCreationWizardService {
161
162
  // .filter(line => line.number.trim().length > 0);
162
163
  this.devices.forEach(device => {
163
164
  this.initDeviceWithSiteInfo(device);
164
- applyDefaultDevicePrefixIfMissing(device);
165
+ // applyDefaultDevicePrefixIfMissing(device);
165
166
  });
166
167
  this.deviceProfiles.forEach(device => this.initDeviceWithSiteInfo(device));
167
168
  this.lines.forEach(line => this.initLineWithSiteInfo(line));
@@ -232,12 +233,12 @@ export class UserCreationWizardService {
232
233
  if (this.templateLinesSnapshot) {
233
234
  this.lines = JSON.parse(JSON.stringify(this.templateLinesSnapshot));
234
235
  }
235
- this.devices.forEach(device => {
236
- device.name = '';
237
- });
238
- this.deviceProfiles.forEach(profile => {
239
- profile.name = '';
240
- });
236
+ // this.devices.forEach(device => {
237
+ // device.name = '';
238
+ // });
239
+ // this.deviceProfiles.forEach(profile => {
240
+ // profile.name = '';
241
+ // });
241
242
  if (this.endUser) {
242
243
  this.endUser.userid = '';
243
244
  this.endUser.firstName = '';
@@ -389,6 +390,7 @@ export class UserCreationWizardService {
389
390
  device.deviceDefaults = defaults;
390
391
  device.nameValidationRegex = nameValidationRegex;
391
392
  device.nameValidationCaption = defaults.deviceNameExplained;
393
+ applyDefaultDevicePrefixIfMissing(device, defaults);
392
394
  });
393
395
  }
394
396
  getDeviceNamePrefix(deviceIndex, isProfile = false) {
@@ -637,7 +639,9 @@ export class UserCreationWizardService {
637
639
  }
638
640
  initDeviceWithSiteInfo(device) {
639
641
  device.newName = device.name;
640
- device.name = '';
642
+ if (!deviceNameHasDynamicTokens(device.name)) {
643
+ device.name = '';
644
+ }
641
645
  if (!device['enabledExtensionMobility']) {
642
646
  device.enabledExtensionMobility = this.siteDefaults?.enableEm ?? false;
643
647
  }
@@ -793,4 +797,4 @@ UserCreationWizardService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.
793
797
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserCreationWizardService, decorators: [{
794
798
  type: Injectable
795
799
  }], ctorParameters: function () { return []; } });
796
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jcmVhdGlvbi13aXphcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWNyZWF0aW9uL3NyYy93aWRnZXRzL3VzZXItY3JlYXRpb24td2l6YXJkL3VzZXItY3JlYXRpb24td2l6YXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFJekYsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRixPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUM7QUFDekIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxJQUFJLEVBQXdDLE1BQU0sb0JBQW9CLENBQUM7QUFDaEYsT0FBTyxFQW9CSCxXQUFXLEVBRVgsT0FBTyxHQUNWLE1BQU0sa0RBQWtELENBQUM7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBRzlFLE1BQU0sT0FBTyx5QkFBeUI7SUFjbEMsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFzQ0QsSUFBSSx1QkFBdUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsSUFB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SSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFFLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNqRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsS0FBSyxHQUFHLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNyRDtRQUNELElBQUksU0FBUyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDM0MsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFFLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNoRCxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsS0FBSyxHQUFHLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztTQUNyRDtRQUNELElBQUksU0FBUyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEMsSUFBSSxTQUFTLEtBQUssQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDekMsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsR0FB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QUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDO1NBQzlGLENBQ0osQ0FBQztJQUNOLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxNQUFjLEVBQUUsTUFBdUI7UUFDcEUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLE1BQU0sQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0QsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNWLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFDRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3JDLElBQUksTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLENBQUMsRUFBRTtZQUNuRSxPQUFPLEdBQUcsTUFBTSxHQUFHLE9BQU8sRUFBRSxDQUFDO1NBQ2hDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDbkIsQ0FBQztJQUVNLFdBQVc7UUFDZCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUN4QyxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMvQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEYsQ0FBQzs7dUhBMzRCUSx5QkFBeUI7MkhBQXpCLHlCQUF5Qjs0RkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgVXNlckNyZWF0aW9uQXBpU2VydmljZSB9IGZyb20gXCIuLi8uLi9zaGFyZWQvc2VydmljZXMvdXNlci1jcmVhdGlvbi1hcGkuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBBUEkgfSBmcm9tIFwiLi4vLi4vYXBwLmNvbnN0YW50c1wiO1xyXG4vLyBpbXBvcnQgeyBBdmFpbGFibGVQaG9uZU51bWJlclJhbmdlSW50ZXJmYWNlLCBBdmFpbGFibGVSYW5nZUludGVyZmFjZSwgRG5SYW5nZVR5cGUsIExpbmVJbnRlcmZhY2UgfSBmcm9tIFwicHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXJzLWxpc3Qvc3JjL2NsYXNzZXMvbGluZVwiO1xyXG5pbXBvcnQgeyBBUElTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NoYXJlZC9hcGkvYXBpLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZm9ya0pvaW4sIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IEJpZyBmcm9tIFwiYmlnLmpzXCI7XHJcbmltcG9ydCB7IFNpdGVEZWZhdWx0cyB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL3NpdGVcIjtcclxuaW1wb3J0IHsgU2l0ZSwgU2l0ZUludGVyZmFjZSwgU2l0ZVRlbXBsYXRlSW50ZXJmYWNlIH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvc2l0ZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgRGV2aWNlRW50cnksXHJcbiAgICBFbmRVc2VySW50ZXJmYWNlLFxyXG4gICAgTGluZU9wdGlvbixcclxuICAgIE92ZXJ2aWV3RGV2aWNlUm93LFxyXG4gICAgT3ZlcnZpZXdMaW5lUm93LFxyXG4gICAgT3ZlcnZpZXdVc2VyUm93LFxyXG4gICAgU2VsZWN0ZWRMaW5lUm93LFxyXG4gICAgVGVtcGxhdGVEZXZpY2VMaWtlLFxyXG4gICAgVGVtcGxhdGVFbmRVc2VyTGlrZSxcclxuICAgIFRlbXBsYXRlTGluZUxpa2UsXHJcbiAgICBVc2VyQ3JlYXRpb25UeXBlLFxyXG4gICAgVXNlckRldGFpbHNGb3JtLFxyXG4gICAgVXNlckRldGFpbHNGb3JtVmFsdWUsXHJcbiAgICBVc2VyVGVtcGxhdGVJbnRlcmZhY2UsXHJcbiAgICBMaW5lSW50ZXJmYWNlLFxyXG4gICAgRGV2aWNlSW50ZXJmYWNlLFxyXG4gICAgRGV2aWNlRGVmYXVsdHNJbnRlcmZhY2UsXHJcbiAgICBBdmFpbGFibGVQaG9uZU51bWJlclJhbmdlSW50ZXJmYWNlLFxyXG4gICAgQXZhaWxhYmxlUmFuZ2VJbnRlcmZhY2UsXHJcbiAgICBEblJhbmdlVHlwZSxcclxuICAgIExpc3RVc2VySW50ZXJmYWNlLFxyXG4gICAgRW5kVXNlcixcclxufSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy91c2VyLWNyZWF0aW9uLXdpemFyZC5pbnRlcmZhY2VzXCI7XHJcbmltcG9ydCB7IGJ1aWxkU2F2YWJsZUVuZFVzZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvYnVpbGQtc2F2YWJsZS1lbmQtdXNlclwiO1xyXG5pbXBvcnQgeyBhcHBseURlZmF1bHREZXZpY2VQcmVmaXhJZk1pc3NpbmcgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZGV2aWNlLWRlZmF1bHQtcHJlZml4XCI7XHJcbmltcG9ydCB7IHBhcnNlRGV2aWNlTmFtZVJlZ2V4Qm9keSB9IGZyb20gXCIuLi8uLi91dGlscy9wYXJzZS1kZXZpY2UtbmFtZS1ydWxlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBVc2VyQ3JlYXRpb25XaXphcmRTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdXNlckNyZWF0aW9uQXBpU2VydmljZSA9IGluamVjdChVc2VyQ3JlYXRpb25BcGlTZXJ2aWNlKTtcclxuXHJcbiAgICByZWFkb25seSBsZGFwVGFibGVDb2x1bW5zOiBzdHJpbmdbXSA9IFsndXNlcklkJywgJ2ZpcnN0TmFtZScsICdsYXN0TmFtZScsICdlbWFpbCcsICdhZGQnXTtcclxuICAgIHJlYWRvbmx5IHVzZXJDcmVhdGlvblR5cGVzOiBVc2VyQ3JlYXRpb25UeXBlW10gPSBbJ0NVQ00nLCAnTVQnXTtcclxuXHJcbiAgICBwcml2YXRlIHRlbXBsYXRlOiBVc2VyVGVtcGxhdGVJbnRlcmZhY2UgfCBudWxsID0gbnVsbDtcclxuICAgIHB1YmxpYyBlbmRVc2VyOiBFbmRVc2VySW50ZXJmYWNlIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwdWJsaWMgbGluZXM6IExpbmVJbnRlcmZhY2VbXSA9IFtdO1xyXG4gICAgcHVibGljIGRldmljZXM6IERldmljZUludGVyZmFjZVtdID0gW107XHJcbiAgICBwdWJsaWMgZGV2aWNlUHJvZmlsZXM6IERldmljZUludGVyZmFjZVtdID0gW107XHJcbiAgICBwcml2YXRlIHRlbXBsYXRlTGluZXNTbmFwc2hvdDogTGluZUludGVyZmFjZVtdIHwgbnVsbCA9IG51bGw7XHJcbiAgICBwcml2YXRlIF9jdXJyZW50U2l0ZTogU2l0ZSB8IG51bGwgPSBudWxsO1xyXG5cclxuICAgIGdldCBjdXJyZW50U2l0ZSgpOiBTaXRlIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTaXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHNpdGVPcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgdGVtcGxhdGVPcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgbGluZU9wdGlvbnM6IExpbmVPcHRpb25bXSA9IFtdO1xyXG4gICAgcm91dGVQYXJ0aXRpb25PcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZGV2aWNlUm93czogbnVtYmVyW10gPSBbXTtcclxuICAgIGxkYXBVc2VyczogTGlzdFVzZXJJbnRlcmZhY2VbXSA9IFtdO1xyXG4gICAgb3ZlcnZpZXdVc2VyczogT3ZlcnZpZXdVc2VyUm93W10gPSBbXTtcclxuICAgIG92ZXJ2aWV3TGluZXM6IE92ZXJ2aWV3TGluZVJvd1tdID0gW107XHJcbiAgICBvdmVydmlld0RldmljZXM6IE92ZXJ2aWV3RGV2aWNlUm93W10gPSBbXTtcclxuICAgIG92ZXJ2aWV3RGV2aWNlUHJvZmlsZXM6IE92ZXJ2aWV3RGV2aWNlUm93W10gPSBbXTtcclxuICAgIHVzZXJEZXRhaWxzRm9ybVZhbHVlOiBVc2VyRGV0YWlsc0Zvcm1WYWx1ZSB8IG51bGwgPSBudWxsO1xyXG4gICAgdXNlckRldGFpbHNGb3JtOiBVc2VyRGV0YWlsc0Zvcm0gPSB7XHJcbiAgICAgICAgdXNlcklkOiAnJyxcclxuICAgICAgICBmaXJzdE5hbWU6ICcnLFxyXG4gICAgICAgIGxhc3ROYW1lOiAnJyxcclxuICAgICAgICBlbWFpbDogJycsXHJcbiAgICB9O1xyXG4gICAgbGluZVNlbGVjdGlvbnM6IFNlbGVjdGVkTGluZVJvd1tdID0gW107XHJcbiAgICBkZXZpY2VFbnRyaWVzOiBEZXZpY2VFbnRyeVtdID0gW107XHJcbiAgICBhdmFpbGFibGVOdW1iZXJzOiBzdHJpbmdbXSA9IFtdO1xyXG4gICAgZGV2aWNlVHlwZXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBzaXRlRGVmYXVsdHM6IFNpdGVEZWZhdWx0cyB8IG51bGwgPSBudWxsO1xyXG4gICAgb3JpZ2luYWxTaXRlRGVmYXVsdHM6IFNpdGVEZWZhdWx0cyB8IG51bGwgPSBudWxsO1xyXG4gICAgdGVtcGxhdGVMaW5lczogVGVtcGxhdGVMaW5lTGlrZVtdID0gW107XHJcbiAgICB0ZW1wbGF0ZURldmljZXM6IFRlbXBsYXRlRGV2aWNlTGlrZVtdID0gW107XHJcbiAgICB0ZW1wbGF0ZVVzZXJEZXRhaWxzOiBUZW1wbGF0ZUVuZFVzZXJMaWtlID0ge307XHJcblxyXG4gICAgc2VsZWN0ZWRTaXRlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAgIHNlbGVjdGVkVGVtcGxhdGVOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuICAgIHNlbGVjdGVkVGVtcGxhdGVJZDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgICBzZWxlY3RlZFVzZXJDcmVhdGlvblR5cGU6IFVzZXJDcmVhdGlvblR5cGUgPSAnQ1VDTSc7XHJcbiAgICBhdmFpbGFibGVEaWRQYXR0ZXJuc01hcHBlZFRvRG46IGFueSA9IHt9O1xyXG5cclxuICAgIHByaXZhdGUgcmVhZG9ubHkgZGV2aWNlRGVmYXVsdHNMb2FkZWRTdWJqZWN0ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcclxuICAgIHJlYWRvbmx5IGRldmljZURlZmF1bHRzTG9hZGVkJCA9IHRoaXMuZGV2aWNlRGVmYXVsdHNMb2FkZWRTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG5cclxuICAgIGdldCBmaXJzdExpbmVSb3V0ZVBhcnRpdGlvbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxpbmVzWzBdPy5kaXJlY3RvcnlOdW1iZXI/LnJvdXRlUGFydGl0aW9uTmFtZSA/PyAnJztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgc2l0ZURlZmF1bHRSb3V0ZVBhcnRpdGlvbigpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNpdGVEZWZhdWx0cz8ucm91dGVQYXJ0aXRpb24gfHwgJyc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IHJvdXRlUGFydGl0aW9uTmFtZXNMaXN0KCk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zaXRlRGVmYXVsdHMgPyB0aGlzLnNpdGVEZWZhdWx0cy5yb3V0ZVBhcnRpdGlvbkZpbHRlciA6IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdGVkTGRhcFVzZXI6IExpc3RVc2VySW50ZXJmYWNlIHwgbnVsbCA9IG51bGw7XHJcbiAgICBsZGFwVXNlcnNUb3RhbCA9IDA7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgLy8gdGhpcy5sb2FkUGxhY2Vob2xkZXJEYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGlzTGRhcEludGVncmF0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuICEhdGhpcy5lbmRVc2VyPy5sZGFwSW50ZWdyYXRlZDtcclxuICAgIH1cclxuXHJcbiAgICBzZWxlY3RMZGFwVXNlcih1c2VyOiBMaXN0VXNlckludGVyZmFjZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMZGFwVXNlciA9IHVzZXI7XHJcbiAgICAgICAgaWYgKHRoaXMuZW5kVXNlcikge1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIubGRhcEludGVncmF0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIudXNlcmlkID0gdXNlci51c2VyaWQ7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci5maXJzdE5hbWUgPSB1c2VyLmZpcnN0TmFtZSA/PyAnJztcclxuICAgICAgICAgICAgdGhpcy5lbmRVc2VyLmxhc3ROYW1lID0gdXNlci5sYXN0TmFtZSA/PyAnJztcclxuICAgICAgICAgICAgdGhpcy5lbmRVc2VyLmVtYWlsID0gdXNlci5lbWFpbCA/PyAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0gPSB7XHJcbiAgICAgICAgICAgIHVzZXJJZDogdXNlci51c2VyaWQsXHJcbiAgICAgICAgICAgIGZpcnN0TmFtZTogdXNlci5maXJzdE5hbWUgPz8gJycsXHJcbiAgICAgICAgICAgIGxhc3ROYW1lOiB1c2VyLmxhc3ROYW1lID8/ICcnLFxyXG4gICAgICAgICAgICBlbWFpbDogdXNlci5lbWFpbCA/PyAnJyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3VXNlcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckxkYXBVc2VyU2VsZWN0aW9uKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMZGFwVXNlciA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuZW5kVXNlcikge1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIubGRhcEludGVncmF0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5lbmRVc2VyLnVzZXJpZCA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIuZmlyc3ROYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci5sYXN0TmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIuZW1haWwgPSAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0gPSB7XHJcbiAgICAgICAgICAgIHVzZXJJZDogJycsXHJcbiAgICAgICAgICAgIGZpcnN0TmFtZTogJycsXHJcbiAgICAgICAgICAgIGxhc3ROYW1lOiAnJyxcclxuICAgICAgICAgICAgZW1haWw6ICcnLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdVc2VycygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTGRhcFVzZXJSb3dTZWxlY3RlZChyb3c6IExpc3RVc2VySW50ZXJmYWNlKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRMZGFwVXNlcj8udXNlcmlkID09PSByb3cudXNlcmlkO1xyXG4gICAgfVxyXG5cclxuICAgIHNldExkYXBVc2Vyc1Jlc3VsdCh1c2VyczogTGlzdFVzZXJJbnRlcmZhY2VbXSwgdG90YWw6IG51bWJlcik6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubGRhcFVzZXJzID0gdXNlcnM7XHJcbiAgICAgICAgdGhpcy5sZGFwVXNlcnNUb3RhbCA9IHRvdGFsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRTZWxlY3RlZFNpdGUoc2l0ZTogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRTaXRlID0gc2l0ZSB8fCBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFNlbGVjdGVkVGVtcGxhdGUodGVtcGxhdGU/OiBVc2VyVGVtcGxhdGVJbnRlcmZhY2UgfCB1bmRlZmluZWQpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGVtcGxhdGVOYW1lID0gdGVtcGxhdGU/Lm5hbWUgfHwgbnVsbDtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVGVtcGxhdGVJZCA9IHRlbXBsYXRlPy5pZCB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3VXNlcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0Q3VycmVudFNpdGUoc2l0ZTogU2l0ZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTaXRlID0gc2l0ZTtcclxuICAgIH1cclxuXHJcbiAgICByZXNldFRlbXBsYXRlRHJpdmVuRGF0YSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmxpbmVPcHRpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5yb3V0ZVBhcnRpdGlvbk9wdGlvbnMgPSBbXTtcclxuICAgICAgICB0aGlzLmxpbmVTZWxlY3Rpb25zID0gW107XHJcbiAgICAgICAgdGhpcy5kZXZpY2VFbnRyaWVzID0gW107XHJcbiAgICAgICAgdGhpcy5kZXZpY2VSb3dzID0gW107XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdMaW5lcygpO1xyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3RGV2aWNlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGFwcGx5VGVtcGxhdGVUb2tlblBheWxvYWQocGF5bG9hZDogVXNlclRlbXBsYXRlSW50ZXJmYWNlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IHRoaXMuZXh0cmFjdFRlbXBsYXRlRnJvbVRva2VuUGF5bG9hZChwYXlsb2FkKTtcclxuICAgICAgICB0aGlzLmVuZFVzZXIgPSBuZXcgRW5kVXNlcih0aGlzLnRlbXBsYXRlPy5lbmRVc2VyKTtcclxuICAgICAgICB0aGlzLmxpbmVzID0gdGhpcy5lbmRVc2VyICYmIEFycmF5LmlzQXJyYXkodGhpcy5lbmRVc2VyLmxpbmVzKSA/IHRoaXMuZW5kVXNlci5saW5lcyA6IFtdO1xyXG4gICAgICAgIHRoaXMuZGV2aWNlcyA9IHRoaXMuZW5kVXNlciAmJiBBcnJheS5pc0FycmF5KHRoaXMuZW5kVXNlci5kZXZpY2VzKSA/IHRoaXMuZW5kVXNlci5kZXZpY2VzIDogW107XHJcbiAgICAgICAgdGhpcy5kZXZpY2VQcm9maWxlcyA9IHRoaXMuZW5kVXNlciAmJiBBcnJheS5pc0FycmF5KHRoaXMuZW5kVXNlci5kZXZpY2VQcm9maWxlcykgPyB0aGlzLmVuZFVzZXIuZGV2aWNlUHJvZmlsZXMgOiBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5pbml0VGVtcGxhdGVEbnNOYW1lc0ZvckxpbmVzKCk7XHJcblxyXG4gICAgICAgIC8vIHRoaXMudXNlckRldGFpbHNGb3JtID0ge1xyXG4gICAgICAgIC8vICAgICB1c2VySWQ6IHRoaXMudmFsdWVUb1N0cmluZyh0aGlzLmVuZFVzZXI/LnVzZXJpZCA/PyAnJyksXHJcbiAgICAgICAgLy8gICAgIGZpcnN0TmFtZTogdGhpcy52YWx1ZVRvU3RyaW5nKHRoaXMuZW5kVXNlcj8uZmlyc3ROYW1lID8/ICcnKSxcclxuICAgICAgICAvLyAgICAgbGFzdE5hbWU6IHRoaXMudmFsdWVUb1N0cmluZyh0aGlzLmVuZFVzZXI/Lmxhc3ROYW1lID8/ICcnKSxcclxuICAgICAgICAvLyAgICAgZW1haWw6IHRoaXMudmFsdWVUb1N0cmluZyh0aGlzLmVuZFVzZXI/LmVtYWlsID8/ICcnKVxyXG4gICAgICAgIC8vIH07XHJcblxyXG4gICAgICAgIC8vIGNvbnN0IG1hcHBlZExpbmVPcHRpb25zOiBMaW5lT3B0aW9uW10gPSBsaW5lc0Zyb21UZW1wbGF0ZVxyXG4gICAgICAgIC8vICAgICAubWFwKGxpbmUgPT4gKHtcclxuICAgICAgICAvLyAgICAgICAgIG51bWJlcjogdGhpcy52YWx1ZVRvU3RyaW5nKGxpbmU/LmRpcmVjdG9yeU51bWJlcj8uZGlyZWN0b3J5TnVtYmVyKSxcclxuICAgICAgICAvLyAgICAgICAgIGRpZDogdGhpcy52YWx1ZVRvU3RyaW5nKGxpbmU/LmRpZFBhdHRlcm5zPy5bMF0/LnBhdHRlcm4gfHwgbGluZT8uZGlyZWN0b3J5TnVtYmVyPy5kaXJlY3RvcnlOdW1iZXIpLFxyXG4gICAgICAgIC8vICAgICAgICAgY3NzOiB0aGlzLnZhbHVlVG9TdHJpbmcoXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgdHlwZW9mIGxpbmU/LmNhbGxpbmdTZWFyY2hTcGFjZSA9PT0gJ3N0cmluZydcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgPyBsaW5lLmNhbGxpbmdTZWFyY2hTcGFjZVxyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICA6IGxpbmU/LmNhbGxpbmdTZWFyY2hTcGFjZT8ubmFtZVxyXG4gICAgICAgIC8vICAgICAgICAgKSxcclxuICAgICAgICAvLyAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLnZhbHVlVG9TdHJpbmcobGluZT8uZGVzY3JpcHRpb24pXHJcbiAgICAgICAgLy8gICAgIH0pKVxyXG4gICAgICAgIC8vICAgICAuZmlsdGVyKGxpbmUgPT4gbGluZS5udW1iZXIudHJpbSgpLmxlbmd0aCA+IDApO1xyXG5cclxuICAgICAgICB0aGlzLmRldmljZXMuZm9yRWFjaChkZXZpY2UgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmluaXREZXZpY2VXaXRoU2l0ZUluZm8oZGV2aWNlKTtcclxuICAgICAgICAgICAgYXBwbHlEZWZhdWx0RGV2aWNlUHJlZml4SWZNaXNzaW5nKGRldmljZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5kZXZpY2VQcm9maWxlcy5mb3JFYWNoKGRldmljZSA9PiB0aGlzLmluaXREZXZpY2VXaXRoU2l0ZUluZm8oZGV2aWNlKSk7XHJcbiAgICAgICAgdGhpcy5saW5lcy5mb3JFYWNoKGxpbmUgPT4gdGhpcy5pbml0TGluZVdpdGhTaXRlSW5mbyhsaW5lKSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FwdHVyZVRlbXBsYXRlTGluZXNTbmFwc2hvdCgpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFNpdGUpIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkRGV2aWNlRGVmYXVsdHNGb3JEZXZpY2VzKHRoaXMuc2VsZWN0ZWRTaXRlKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGlmIChtYXBwZWRMaW5lT3B0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAvLyAgICAgdGhpcy5saW5lT3B0aW9ucyA9IHRoaXMudW5pcXVlQnlOdW1iZXIobWFwcGVkTGluZU9wdGlvbnMpO1xyXG4gICAgICAgIC8vICAgICB0aGlzLmxpbmVTZWxlY3Rpb25zID0gdGhpcy5saW5lT3B0aW9ucy5tYXAobGluZSA9PiAoe1xyXG4gICAgICAgIC8vICAgICAgICAgbGluZU51bWJlcjogbGluZS5udW1iZXIsXHJcbiAgICAgICAgLy8gICAgICAgICByb3V0ZVBhcnRpdGlvbk5hbWU6IGxpbmVzRnJvbVRlbXBsYXRlLmZpbmQoXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgc291cmNlID0+IChzb3VyY2U/LmRpcmVjdG9yeU51bWJlcj8uZGlyZWN0b3J5TnVtYmVyIHx8ICcnKSA9PT0gbGluZS5udW1iZXJcclxuICAgICAgICAvLyAgICAgICAgICk/LmRpcmVjdG9yeU51bWJlcj8ucm91dGVQYXJ0aXRpb25OYW1lIHx8IG51bGxcclxuICAgICAgICAvLyAgICAgfSkpO1xyXG4gICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gICAgIGNvbnN0IGxpbmVBc3NvY2lhdGlvbnMgPSBkZXZpY2VzRnJvbVRlbXBsYXRlLmZsYXRNYXAoZGV2aWNlID0+IGRldmljZS5saW5lQXNzb2NpYXRpb25zIHx8IFtdKTtcclxuICAgICAgICAvLyAgICAgY29uc3QgYXNzb2NpYXRlZExpbmVPcHRpb25zOiBMaW5lT3B0aW9uW10gPSBsaW5lQXNzb2NpYXRpb25zXHJcbiAgICAgICAgLy8gICAgICAgICAubWFwKGFzc29jaWF0aW9uID0+IHtcclxuICAgICAgICAvLyAgICAgICAgICAgICBjb25zdCBudW1iZXIgPSBhc3NvY2lhdGlvbj8uZGlyZWN0b3J5TnVtYmVyPy5kaXJlY3RvcnlOdW1iZXIgfHwgJyc7XHJcbiAgICAgICAgLy8gICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgbnVtYmVyLFxyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBkaWQ6IG51bWJlcixcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgY3NzOiAnJyxcclxuICAgICAgICAvLyAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICcnXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgfTtcclxuICAgICAgICAvLyAgICAgICAgIH0pXHJcbiAgICAgICAgLy8gICAgICAgICAuZmlsdGVyKGxpbmUgPT4gbGluZS5udW1iZXIudHJpbSgpLmxlbmd0aCA+IDApO1xyXG5cclxuICAgICAgICAvLyAgICAgdGhpcy5saW5lT3B0aW9ucyA9IHRoaXMudW5pcXVlQnlOdW1iZXIoYXNzb2NpYXRlZExpbmVPcHRpb25zKTtcclxuICAgICAgICAvLyAgICAgdGhpcy5saW5lU2VsZWN0aW9ucyA9IHRoaXMubGluZU9wdGlvbnMubWFwKGxpbmUgPT4gKHtcclxuICAgICAgICAvLyAgICAgICAgIGxpbmVOdW1iZXI6IGxpbmUubnVtYmVyLFxyXG4gICAgICAgIC8vICAgICAgICAgcm91dGVQYXJ0aXRpb25OYW1lOiBsaW5lQXNzb2NpYXRpb25zLmZpbmQoXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgc291cmNlID0+IChzb3VyY2U/LmRpcmVjdG9yeU51bWJlcj8uZGlyZWN0b3J5TnVtYmVyIHx8ICcnKSA9PT0gbGluZS5udW1iZXJcclxuICAgICAgICAvLyAgICAgICAgICk/LmRpcmVjdG9yeU51bWJlcj8ucm91dGVQYXJ0aXRpb25OYW1lIHx8IG51bGxcclxuICAgICAgICAvLyAgICAgfSkpO1xyXG5cclxuICAgICAgICAvLyAgICAgdGhpcy50ZW1wbGF0ZUxpbmVzLmZvckVhY2goKGxpbmU6IGFueSkgPT4gdGhpcy5pbml0TGluZVdpdGhTaXRlSW5mbyhsaW5lKSk7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuaW5pdFRlbXBsYXRlRG5zTmFtZXNGb3JMaW5lcyh0aGlzLnRlbXBsYXRlTGluZXMpO1xyXG4gICAgICAgIC8vIH1cclxuXHJcbiAgICAgICAgLy8gY29uc3Qgcm91dGVQYXJ0aXRpb25zID0gdGhpcy5saW5lU2VsZWN0aW9uc1xyXG4gICAgICAgIC8vICAgICAubWFwKGxpbmUgPT4gbGluZS5yb3V0ZVBhcnRpdGlvbk5hbWUpXHJcbiAgICAgICAgLy8gICAgIC5maWx0ZXIoKHZhbHVlKTogdmFsdWUgaXMgc3RyaW5nID0+ICEhdmFsdWUgJiYgdmFsdWUudHJpbSgpLmxlbmd0aCA+IDApO1xyXG4gICAgICAgIC8vIHRoaXMucm91dGVQYXJ0aXRpb25PcHRpb25zID0gdGhpcy51bmlxdWVTdHJpbmdzKHJvdXRlUGFydGl0aW9ucyk7XHJcblxyXG4gICAgICAgIC8vIHRoaXMuZGV2aWNlRW50cmllcyA9IGRldmljZXNGcm9tVGVtcGxhdGUubWFwKGRldmljZSA9PiAoe1xyXG4gICAgICAgIC8vICAgICBkZXZpY2VUeXBlOiB0aGlzLnZhbHVlVG9TdHJpbmcoZGV2aWNlLmRldmljZVR5cGUpLFxyXG4gICAgICAgIC8vICAgICBwcm90b2NvbDogdGhpcy52YWx1ZVRvU3RyaW5nKGRldmljZS5wcm90b2NvbCksXHJcbiAgICAgICAgLy8gICAgIGJ1dHRvblRlbXBsYXRlOiB0aGlzLnZhbHVlVG9TdHJpbmcoZGV2aWNlLmJ1dHRvblRlbXBsYXRlKSxcclxuICAgICAgICAvLyAgICAgbmFtZTogdGhpcy52YWx1ZVRvU3RyaW5nKGRldmljZS5uYW1lKVxyXG4gICAgICAgIC8vIH0pKTtcclxuICAgICAgICAvLyB0aGlzLmRldmljZVJvd3MgPSB0aGlzLmRldmljZUVudHJpZXMubWFwKChfLCBpbmRleCkgPT4gaW5kZXggKyAxKTtcclxuXHJcbiAgICAgICAgLy8gdGhpcy5yZWJ1aWxkT3ZlcnZpZXdVc2VycygpO1xyXG4gICAgICAgIC8vIHRoaXMucmVidWlsZE92ZXJ2aWV3TGluZXMoKTtcclxuICAgICAgICAvLyB0aGlzLnJlYnVpbGRPdmVydmlld0RldmljZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRTZWxlY3RlZFVzZXJDcmVhdGlvblR5cGUodHlwZTogVXNlckNyZWF0aW9uVHlwZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRVc2VyQ3JlYXRpb25UeXBlID0gdHlwZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcmVzZXRVc2VyRGV0YWlsc1N0ZXBTdGF0ZSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybVZhbHVlID0gbnVsbDtcclxuICAgICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybSA9IHtcclxuICAgICAgICAgICAgdXNlcklkOiAnJyxcclxuICAgICAgICAgICAgZmlyc3ROYW1lOiAnJyxcclxuICAgICAgICAgICAgbGFzdE5hbWU6ICcnLFxyXG4gICAgICAgICAgICBlbWFpbDogJycsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTGRhcFVzZXIgPSBudWxsO1xyXG4gICAgICAgIHRoaXMubGRhcFVzZXJzID0gW107XHJcbiAgICAgICAgdGhpcy5sZGFwVXNlcnNUb3RhbCA9IDA7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnRlbXBsYXRlTGluZXNTbmFwc2hvdCkge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVzID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnRlbXBsYXRlTGluZXNTbmFwc2hvdCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kZXZpY2VzLmZvckVhY2goZGV2aWNlID0+IHtcclxuICAgICAgICAgICAgZGV2aWNlLm5hbWUgPSAnJztcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmRldmljZVByb2ZpbGVzLmZvckVhY2gocHJvZmlsZSA9PiB7XHJcbiAgICAgICAgICAgIHByb2ZpbGUubmFtZSA9ICcnO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5lbmRVc2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci51c2VyaWQgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5lbmRVc2VyLmZpcnN0TmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIubGFzdE5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5lbmRVc2VyLmVtYWlsID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci5sZGFwSW50ZWdyYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIubGluZXMgPSB0aGlzLmxpbmVzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vdmVydmlld1VzZXJzID0gW107XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdMaW5lcygpO1xyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3RGV2aWNlcygpO1xyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3RGV2aWNlUHJvZmlsZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhcHR1cmVUZW1wbGF0ZUxpbmVzU25hcHNob3QoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZUxpbmVzU25hcHNob3QgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMubGluZXMpKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRVc2VyRGV0YWlsc0ZpZWxkKGZpZWxkOiBrZXlvZiBVc2VyRGV0YWlsc0Zvcm0sIHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybSA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy51c2VyRGV0YWlsc0Zvcm0sXHJcbiAgICAgICAgICAgIFtmaWVsZF06IHZhbHVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnJlYnVpbGRPdmVydmlld1VzZXJzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXBwbHlVc2VyRGV0YWlsc0Zvcm1WYWx1ZShmb3JtVmFsdWU6IFVzZXJEZXRhaWxzRm9ybVZhbHVlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy51c2VyRGV0YWlsc0Zvcm1WYWx1ZSA9IGZvcm1WYWx1ZTtcclxuICAgICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybSA9IHtcclxuICAgICAgICAgICAgdXNlcklkOiBmb3JtVmFsdWUudXNlcklkIHx8ICcnLFxyXG4gICAgICAgICAgICBmaXJzdE5hbWU6IGZvcm1WYWx1ZS5maXJzdE5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgIGxhc3ROYW1lOiBmb3JtVmFsdWUubGFzdE5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgIGVtYWlsOiBmb3JtVmFsdWUuZW1haWwgfHwgJycsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgZm9ybVZhbHVlLmxpbmVzPy5mb3JFYWNoKChsaW5lVmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmUgPSB0aGlzLmxpbmVzW2luZGV4XTtcclxuICAgICAgICAgICAgaWYgKCFsaW5lPy5kaXJlY3RvcnlOdW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsaW5lLmRpcmVjdG9yeU51bWJlci5kaXJlY3RvcnlOdW1iZXIgPSBsaW5lVmFsdWUubnVtYmVyIHx8ICcnO1xyXG4gICAgICAgICAgICBsaW5lLmRpcmVjdG9yeU51bWJlci5yb3V0ZVBhcnRpdGlvbk5hbWUgPSBsaW5lVmFsdWUucm91dGVQYXJ0aXRpb24gfHwgJyc7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGZvcm1WYWx1ZS5kZXZpY2VzPy5mb3JFYWNoKChkZXZpY2VWYWx1ZSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZGV2aWNlID0gdGhpcy5kZXZpY2VzW2luZGV4XTtcclxuICAgICAgICAgICAgaWYgKCFkZXZpY2UpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkZXZpY2UubmFtZSA9IGRldmljZVZhbHVlLm5hbWUgfHwgJyc7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGZvcm1WYWx1ZS5kZXZpY2VQcm9maWxlcz8uZm9yRWFjaCgocHJvZmlsZVZhbHVlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9maWxlID0gdGhpcy5kZXZpY2VQcm9maWxlc1tpbmRleF07XHJcbiAgICAgICAgICAgIGlmICghcHJvZmlsZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHByb2ZpbGUubmFtZSA9IHByb2ZpbGVWYWx1ZS5uYW1lIHx8ICcnO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5lbmRVc2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci51c2VyaWQgPSBmb3JtVmFsdWUudXNlcklkIHx8ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIuZmlyc3ROYW1lID0gZm9ybVZhbHVlLmZpcnN0TmFtZSB8fCAnJztcclxuICAgICAgICAgICAgdGhpcy5lbmRVc2VyLmxhc3ROYW1lID0gZm9ybVZhbHVlLmxhc3ROYW1lIHx8ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIuZW1haWwgPSBmb3JtVmFsdWUuZW1haWwgfHwgJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlYnVpbGRPdmVydmlld1VzZXJzKCk7XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdMaW5lcygpO1xyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3RGV2aWNlcygpO1xyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3RGV2aWNlUHJvZmlsZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRMaW5lU2VsZWN0aW9uKGluZGV4OiBudW1iZXIsIGxpbmVOdW1iZXI6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMubGluZVNlbGVjdGlvbnNbaW5kZXhdKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5saW5lU2VsZWN0aW9uc1tpbmRleF0gPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMubGluZVNlbGVjdGlvbnNbaW5kZXhdLFxyXG4gICAgICAgICAgICBsaW5lTnVtYmVyXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnJlYnVpbGRPdmVydmlld0xpbmVzKCk7XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdEZXZpY2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Um91dGVQYXJ0aXRpb25TZWxlY3Rpb24oaW5kZXg6IG51bWJlciwgcm91dGVQYXJ0aXRpb25OYW1lOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxpbmVTZWxlY3Rpb25zW2luZGV4XSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubGluZVNlbGVjdGlvbnNbaW5kZXhdID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLmxpbmVTZWxlY3Rpb25zW2luZGV4XSxcclxuICAgICAgICAgICAgcm91dGVQYXJ0aXRpb25OYW1lXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnJlYnVpbGRPdmVydmlld0xpbmVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RGV2aWNlTmFtZShpbmRleDogbnVtYmVyLCBuYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGV2aWNlRW50cmllc1tpbmRleF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkZXZpY2VUeXBlID0gdGhpcy5kZXZpY2VFbnRyaWVzW2luZGV4XS5kZXZpY2VUeXBlIHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gZGV2aWNlVHlwZS5pbmNsdWRlcygnODg1MScpXHJcbiAgICAgICAgICAgID8gbmFtZS5yZXBsYWNlKC9eU0VQXFxzKi9pLCAnJylcclxuICAgICAgICAgICAgOiBuYW1lO1xyXG4gICAgICAgIHRoaXMuZGV2aWNlRW50cmllc1tpbmRleF0gPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuZGV2aWNlRW50cmllc1tpbmRleF0sXHJcbiAgICAgICAgICAgIG5hbWU6IG5vcm1hbGl6ZWROYW1lXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnJlYnVpbGRPdmVydmlld0RldmljZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREZXZpY2VEaXNwbGF5TmFtZShpbmRleDogbnVtYmVyKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuZGV2aWNlRW50cmllc1tpbmRleF07XHJcbiAgICAgICAgaWYgKCFlbnRyeSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZW50cnkuZGV2aWNlVHlwZT8uaW5jbHVkZXMoJzg4NTEnKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYFNFUCAke2VudHJ5Lm5hbWUgfHwgJyd9YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChpbmRleCA9PT0gMSkge1xyXG4gICAgICAgICAgICBjb25zdCBsaW5lTnVtYmVyID0gdGhpcy5saW5lU2VsZWN0aW9uc1swXT8ubGluZU51bWJlcjtcclxuICAgICAgICAgICAgcmV0dXJuIGxpbmVOdW1iZXIgPyBgQ1NGJHtsaW5lTnVtYmVyfWAgOiAnQ1NGW0ROXSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZW50cnkubmFtZSB8fCAnJztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0U2l0ZUFsbERhdGEoc2l0ZUlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJDcmVhdGlvbkFwaVNlcnZpY2UuZ2V0U2l0ZUFsbERhdGEoc2l0ZUlkKS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzICYmIHJlc1swXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpdGUgPSBuZXcgU2l0ZShyZXNbMF0gYXMgU2l0ZUludGVyZmFjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFNpdGUgPSBzaXRlLmlkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlcyAmJiByZXNbMV0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNpdGVEZWZhdWx0cyA9IG5ldyBTaXRlRGVmYXVsdHMocmVzWzFdLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vcmlnaW5hbFNpdGVEZWZhdWx0cyA9IG5ldyBTaXRlRGVmYXVsdHMocmVzWzFdLCBmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZVBhcnRpdGlvbk9wdGlvbnMgPSBbLi4udGhpcy5yb3V0ZVBhcnRpdGlvbk5hbWVzTGlzdF07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzICYmIHJlc1syXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV2aWNlVHlwZXMgPSByZXNbMl0gYXMgc3RyaW5nW107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBzd2l0Y2hNYXAocmVzID0+XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWREZXZpY2VEZWZhdWx0c0ZvckRldmljZXMoc2l0ZUlkKS5waXBlKG1hcCgoKSA9PiByZXMpKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbG9hZERldmljZURlZmF1bHRzRm9yRGV2aWNlcyhzaXRlSWQ6IG51bWJlcik6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIGNvbnN0IGRldmljZVR5cGVzID0gdGhpcy5nZXRVbmlxdWVEZXZpY2VUeXBlcygpO1xyXG4gICAgICAgIGlmICghZGV2aWNlVHlwZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgcmVxdWVzdHMgPSBkZXZpY2VUeXBlcy5tYXAoZGV2aWNlVHlwZSA9PlxyXG4gICAgICAgICAgICB0aGlzLnVzZXJDcmVhdGlvbkFwaVNlcnZpY2UuZ2V0RGV2aWNlRGVmYXVsdHMoU3RyaW5nKHNpdGVJZCksIGRldmljZVR5cGUpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICB0YXAoZGVmYXVsdHMgPT4gdGhpcy5hcHBseURldmljZURlZmF1bHRzVG9UeXBlKGRldmljZVR5cGUsIGRlZmF1bHRzKSksXHJcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKG51bGwpKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGZvcmtKb2luKHJlcXVlc3RzKS5waXBlKFxyXG4gICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5kZXZpY2VEZWZhdWx0c0xvYWRlZFN1YmplY3QubmV4dCgpKSxcclxuICAgICAgICAgICAgbWFwKCgpID0+IHVuZGVmaW5lZClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0VW5pcXVlRGV2aWNlVHlwZXMoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIGNvbnN0IHR5cGVzID0gW1xyXG4gICAgICAgICAgICAuLi50aGlzLmRldmljZXMubWFwKGRldmljZSA9PiBkZXZpY2UuZGV2aWNlVHlwZSksXHJcbiAgICAgICAgICAgIC4uLnRoaXMuZGV2aWNlUHJvZmlsZXMubWFwKHByb2ZpbGUgPT4gcHJvZmlsZS5kZXZpY2VUeXBlKSxcclxuICAgICAgICBdLmZpbHRlcigodHlwZSk6IHR5cGUgaXMgc3RyaW5nID0+ICEhdHlwZSAmJiB0eXBlLnRyaW0oKS5sZW5ndGggPiAwKTtcclxuICAgICAgICByZXR1cm4gWy4uLm5ldyBTZXQodHlwZXMpXTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFwcGx5RGV2aWNlRGVmYXVsdHNUb1R5cGUoZGV2aWNlVHlwZTogc3RyaW5nLCBkZWZhdWx0czogRGV2aWNlRGVmYXVsdHNJbnRlcmZhY2UpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBuYW1lVmFsaWRhdGlvblJlZ2V4ID0gcGFyc2VEZXZpY2VOYW1lUmVnZXhCb2R5KGRlZmF1bHRzLmRldmljZU5hbWVSZWdleCk7XHJcbiAgICAgICAgY29uc3QgdGFyZ2V0cyA9IFsuLi50aGlzLmRldmljZXMsIC4uLnRoaXMuZGV2aWNlUHJvZmlsZXNdLmZpbHRlcihcclxuICAgICAgICAgICAgZGV2aWNlID0+IGRldmljZS5kZXZpY2VUeXBlID09PSBkZXZpY2VUeXBlXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGFyZ2V0cy5mb3JFYWNoKGRldmljZSA9PiB7XHJcbiAgICAgICAgICAgIGRldmljZS5kZXZpY2VEZWZhdWx0cyA9IGRlZmF1bHRzO1xyXG4gICAgICAgICAgICBkZXZpY2UubmFtZVZhbGlkYXRpb25SZWdleCA9IG5hbWVWYWxpZGF0aW9uUmVnZXg7XHJcbiAgICAgICAgICAgIGRldmljZS5uYW1lVmFsaWRhdGlvbkNhcHRpb24gPSBkZWZhdWx0cy5kZXZpY2VOYW1lRXhwbGFpbmVkO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERldmljZU5hbWVQcmVmaXgoZGV2aWNlSW5kZXg6IG51bWJlciwgaXNQcm9maWxlID0gZmFsc2UpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBjb25zdCBkZXZpY2UgPSBpc1Byb2ZpbGUgPyB0aGlzLmRldmljZVByb2ZpbGVzW2RldmljZUluZGV4XSA6IHRoaXMuZGV2aWNlc1tkZXZpY2VJbmRleF07XHJcbiAgICAgICAgY29uc3QgcHJlZml4ID0gZGV2aWNlPy5wcmVmaXg/LnRyaW0oKTtcclxuICAgICAgICByZXR1cm4gcHJlZml4IHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGV2aWNlTmFtZVZhbGlkYXRpb25DYXB0aW9uKGRldmljZUluZGV4OiBudW1iZXIsIGlzUHJvZmlsZSA9IGZhbHNlKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBkZXZpY2UgPSBpc1Byb2ZpbGUgPyB0aGlzLmRldmljZVByb2ZpbGVzW2RldmljZUluZGV4XSA6IHRoaXMuZGV2aWNlc1tkZXZpY2VJbmRleF07XHJcbiAgICAgICAgcmV0dXJuIGRldmljZT8ubmFtZVZhbGlkYXRpb25DYXB0aW9uIHx8IGRldmljZT8uZGV2aWNlRGVmYXVsdHM/LmRldmljZU5hbWVFeHBsYWluZWQgfHwgJyc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGV2aWNlTmFtZVZhbGlkYXRpb25PcHRpb25zKGRldmljZUluZGV4OiBudW1iZXIsIGlzUHJvZmlsZSA9IGZhbHNlKToge1xyXG4gICAgICAgIHJlZ2V4OiBzdHJpbmc7XHJcbiAgICAgICAgY2FwdGlvbjogc3RyaW5nO1xyXG4gICAgfSB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGRldmljZSA9IGlzUHJvZmlsZSA/IHRoaXMuZGV2aWNlUHJvZmlsZXNbZGV2aWNlSW5kZXhdIDogdGhpcy5kZXZpY2VzW2RldmljZUluZGV4XTtcclxuICAgICAgICBjb25zdCByZWdleCA9XHJcbiAgICAgICAgICAgIGRldmljZT8ubmFtZVZhbGlkYXRpb25SZWdleD8udHJpbSgpIHx8XHJcbiAgICAgICAgICAgIHBhcnNlRGV2aWNlTmFtZVJlZ2V4Qm9keShkZXZpY2U/LmRldmljZURlZmF1bHRzPy5kZXZpY2VOYW1lUmVnZXgpO1xyXG4gICAgICAgIGlmICghcmVnZXgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHJlZ2V4LFxyXG4gICAgICAgICAgICBjYXB0aW9uOiB0aGlzLmdldERldmljZU5hbWVWYWxpZGF0aW9uQ2FwdGlvbihkZXZpY2VJbmRleCwgaXNQcm9maWxlKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROdW1iZXJSYW5nZShzaXRlSWQ6IHN0cmluZywgcm91dGVQYXJ0aXRpb246IHN0cmluZyk6IE9ic2VydmFibGU8QXZhaWxhYmxlUmFuZ2VJbnRlcmZhY2U+IHtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZURpZFBhdHRlcm5zTWFwcGVkVG9EbiA9IHt9O1xyXG4gICAgICAgIGNvbnN0IHBhZ2VTaXplID0gOTk5OTtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7ZG50eXBlOiBEblJhbmdlVHlwZS5leHRlbnNpb24sIHJvdXRlcGFydGl0aW9uOiByb3V0ZVBhcnRpdGlvbiwgc2l6ZTogcGFnZVNpemUsIHBhZ2U6IDB9O1xyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlTnVtYmVycyA9IFtdO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJDcmVhdGlvbkFwaVNlcnZpY2UuZ2V0QXZhaWxhYmxlRG5JblJhbmdlcyhzaXRlSWQsIHBhcmFtcylcclxuICAgICAgICAucGlwZShtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJlcy5hdmFpbGFibGVOdW1iZXJMaXN0LmZvckVhY2goKGF2YWlsYWJsZU51bWJlcjogQXZhaWxhYmxlUGhvbmVOdW1iZXJSYW5nZUludGVyZmFjZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBdmFpbGFibGVEaWRNYXBwZWRUb0RuKGF2YWlsYWJsZU51bWJlcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF2YWlsYWJsZU51bWJlcnMgPSBbLi4udGhpcy5hdmFpbGFibGVOdW1iZXJzLCAuLi50aGlzLmdldFVud3JhcE51bWJlclJhbmdlKGF2YWlsYWJsZU51bWJlcildO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgICAgLy8gLnBpcGUodGhpcy5oYW5kbGVFcnJvcih0cnVlLCBmYWxzZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVidWlsZE92ZXJ2aWV3VXNlcnMoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdXNlclRlbXBsYXRlID0gdGhpcy5zZWxlY3RlZFRlbXBsYXRlTmFtZSB8fCAnJztcclxuICAgICAgICBjb25zdCBoYXNVc2VyRGF0YSA9IE9iamVjdC52YWx1ZXModGhpcy51c2VyRGV0YWlsc0Zvcm0pLnNvbWUodmFsdWUgPT4gdmFsdWUudHJpbSgpLmxlbmd0aCA+IDApO1xyXG4gICAgICAgIHRoaXMub3ZlcnZpZXdVc2VycyA9IGhhc1VzZXJEYXRhXHJcbiAgICAgICAgICAgID8gW3tcclxuICAgICAgICAgICAgICAgIHVzZXJJZDogdGhpcy51c2VyRGV0YWlsc0Zvcm0udXNlcklkLFxyXG4gICAgICAgICAgICAgICAgZmlyc3ROYW1lOiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5maXJzdE5hbWUsXHJcbiAgICAgICAgICAgICAgICBsYXN0TmFtZTogdGhpcy51c2VyRGV0YWlsc0Zvcm0ubGFzdE5hbWUsXHJcbiAgICAgICAgICAgICAgICBlbWFpbDogdGhpcy51c2VyRGV0YWlsc0Zvcm0uZW1haWwsXHJcbiAgICAgICAgICAgICAgICB1c2VyVGVtcGxhdGVcclxuICAgICAgICAgICAgfV1cclxuICAgICAgICAgICAgOiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlYnVpbGRPdmVydmlld0xpbmVzKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGZvcm1MaW5lcyA9IHRoaXMudXNlckRldGFpbHNGb3JtVmFsdWU/LmxpbmVzO1xyXG4gICAgICAgIGlmIChmb3JtTGluZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJ2aWV3TGluZXMgPSBmb3JtTGluZXNcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIobGluZSA9PiAhIWxpbmU/Lm51bWJlcj8udHJpbSgpKVxyXG4gICAgICAgICAgICAgICAgLm1hcCgobGluZVZhbHVlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlTGluZSA9IHRoaXMubGluZXNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNzcyA9IHRoaXMudmFsdWVUb1N0cmluZyh0ZW1wbGF0ZUxpbmU/LmNhbGxpbmdTZWFyY2hTcGFjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyOiBsaW5lVmFsdWUubnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaWQ6IGxpbmVWYWx1ZS5saW5lTnVtYmVyIHx8IGxpbmVWYWx1ZS5udW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlUGFydGl0aW9uTmFtZTogbGluZVZhbHVlLnJvdXRlUGFydGl0aW9uIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLnZhbHVlVG9TdHJpbmcodGVtcGxhdGVMaW5lPy5kZXNjcmlwdGlvbiksXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm92ZXJ2aWV3TGluZXMgPSB0aGlzLmxpbmVTZWxlY3Rpb25zXHJcbiAgICAgICAgICAgIC5tYXAoc2VsZWN0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghc2VsZWN0aW9uPy5saW5lTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZExpbmUgPSB0aGlzLmxpbmVPcHRpb25zLmZpbmQobGluZSA9PiBsaW5lLm51bWJlciA9PT0gc2VsZWN0aW9uLmxpbmVOdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RlZExpbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyOiBzZWxlY3RlZExpbmUubnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpZDogc2VsZWN0ZWRMaW5lLmRpZCxcclxuICAgICAgICAgICAgICAgICAgICByb3V0ZVBhcnRpdGlvbk5hbWU6IHNlbGVjdGlvbi5yb3V0ZVBhcnRpdGlvbk5hbWUgfHwgdGhpcy5yb3V0ZVBhcnRpdGlvbk9wdGlvbnNbMF0gfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgY3NzOiBzZWxlY3RlZExpbmUuY3NzLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzZWxlY3RlZExpbmUuZGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGxpbmUpOiBsaW5lIGlzIE92ZXJ2aWV3TGluZVJvdyA9PiAhIWxpbmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVidWlsZE92ZXJ2aWV3RGV2aWNlcygpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZExpbmVOdW1iZXJzID0gdGhpcy5vdmVydmlld0xpbmVzLm1hcChsaW5lID0+IGxpbmUubnVtYmVyKS5qb2luKCcsICcpO1xyXG4gICAgICAgIGNvbnN0IGZvcm1EZXZpY2VzID0gdGhpcy51c2VyRGV0YWlsc0Zvcm1WYWx1ZT8uZGV2aWNlcztcclxuICAgICAgICBpZiAoZm9ybURldmljZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJ2aWV3RGV2aWNlcyA9IGZvcm1EZXZpY2VzXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGRldmljZSA9PiAhIWRldmljZS5kZXZpY2VUeXBlPy50cmltKCkgfHwgISFkZXZpY2UubmFtZT8udHJpbSgpKVxyXG4gICAgICAgICAgICAgICAgLm1hcChkZXZpY2UgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBkZXZpY2UubmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICBkZXZpY2VUeXBlOiBkZXZpY2UuZGV2aWNlVHlwZSB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICBsaW5lczogc2VsZWN0ZWRMaW5lTnVtYmVycyxcclxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7ZGV2aWNlLnByb3RvY29sIHx8ICcnfSAvICR7ZGV2aWNlLmJ1dHRvblRlbXBsYXRlIHx8ICcnfWAudHJpbSgpLFxyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm92ZXJ2aWV3RGV2aWNlcyA9IHRoaXMuZGV2aWNlRW50cmllc1xyXG4gICAgICAgICAgICAubWFwKChkZXZpY2UsIGluZGV4KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgZGV2aWNlLFxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuZ2V0RGV2aWNlRGlzcGxheU5hbWUoaW5kZXgpXHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh7IGRldmljZSwgZGlzcGxheU5hbWUgfSkgPT4gZGlzcGxheU5hbWUudHJpbSgpLmxlbmd0aCA+IDAgfHwgZGV2aWNlLmRldmljZVR5cGUudHJpbSgpLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIC5tYXAoKHsgZGV2aWNlLCBkaXNwbGF5TmFtZSB9KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogZGlzcGxheU5hbWUsXHJcbiAgICAgICAgICAgICAgICBkZXZpY2VUeXBlOiBkZXZpY2UuZGV2aWNlVHlwZSxcclxuICAgICAgICAgICAgICAgIGxpbmVzOiBzZWxlY3RlZExpbmVOdW1iZXJzLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke2RldmljZS5wcm90b2NvbH0gLyAke2RldmljZS5idXR0b25UZW1wbGF0ZX1gXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlYnVpbGRPdmVydmlld0RldmljZVByb2ZpbGVzKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTGluZU51bWJlcnMgPSB0aGlzLm92ZXJ2aWV3TGluZXMubWFwKGxpbmUgPT4gbGluZS5udW1iZXIpLmpvaW4oJywgJyk7XHJcbiAgICAgICAgY29uc3QgZm9ybVByb2ZpbGVzID0gdGhpcy51c2VyRGV0YWlsc0Zvcm1WYWx1ZT8uZGV2aWNlUHJvZmlsZXM7XHJcbiAgICAgICAgaWYgKCFmb3JtUHJvZmlsZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJ2aWV3RGV2aWNlUHJvZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vdmVydmlld0RldmljZVByb2ZpbGVzID0gZm9ybVByb2ZpbGVzXHJcbiAgICAgICAgICAgIC5maWx0ZXIocHJvZmlsZSA9PiAhIXByb2ZpbGUuZGV2aWNlVHlwZT8udHJpbSgpIHx8ICEhcHJvZmlsZS5uYW1lPy50cmltKCkpXHJcbiAgICAgICAgICAgIC5tYXAocHJvZmlsZSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogcHJvZmlsZS5uYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgZGV2aWNlVHlwZTogcHJvZmlsZS5kZXZpY2VUeXBlIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgbGluZXM6IHNlbGVjdGVkTGluZU51bWJlcnMsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7cHJvZmlsZS5wcm90b2NvbCB8fCAnJ30gLyAke3Byb2ZpbGUuYnV0dG9uVGVtcGxhdGUgfHwgJyd9YC50cmltKCksXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGV4dHJhY3RUZW1wbGF0ZUZyb21Ub2tlblBheWxvYWQocGF5bG9hZDogYW55KTogYW55IHtcclxuICAgICAgICBpZiAoIXBheWxvYWQgfHwgdHlwZW9mIHBheWxvYWQgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZFswXSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmaXJzdEtleSA9IE9iamVjdC5rZXlzKHBheWxvYWQpWzBdO1xyXG4gICAgICAgIHJldHVybiBmaXJzdEtleSA/IHBheWxvYWRbZmlyc3RLZXldIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVuaXF1ZUJ5TnVtYmVyKGxpbmVzOiBMaW5lT3B0aW9uW10pOiBMaW5lT3B0aW9uW10ge1xyXG4gICAgICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuICAgICAgICByZXR1cm4gbGluZXMuZmlsdGVyKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2Vlbi5oYXMobGluZS5udW1iZXIpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2Vlbi5hZGQobGluZS5udW1iZXIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVuaXF1ZVN0cmluZ3MoaXRlbXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoaXRlbXMpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHZhbHVlVG9TdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFVud3JhcE51bWJlclJhbmdlKGF2YWlsYWJsZU51bWJlcjogYW55KTogc3RyaW5nW10ge1xyXG4gICAgICAgIGxldCB1bndyYXBOdW1iZXJSYW5nZSA9IHRoaXMudW53cmFwTnVtYmVyUmFuZ2UoYXZhaWxhYmxlTnVtYmVyLnBob25lTnVtYmVyUmFuZ2UuZnJvbSwgYXZhaWxhYmxlTnVtYmVyLnBob25lTnVtYmVyUmFuZ2UudG8pXHJcbiAgICAgICAgICAgIC5tYXAoKHVud3JhcHBlZE51bWJlcjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRuID0gYXZhaWxhYmxlTnVtYmVyLnBob25lTnVtYmVyUmFuZ2UucHJlZml4ICsgdW53cmFwcGVkTnVtYmVyO1xyXG4gICAgICAgICAgICBsZXQgc3RyID0gZG47XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmF2YWlsYWJsZURpZFBhdHRlcm5zTWFwcGVkVG9Ebltkbl0gJiYgdGhpcy5hdmFpbGFibGVEaWRQYXR0ZXJuc01hcHBlZFRvRG5bZG5dLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmF2YWlsYWJsZURpZFBhdHRlcm5zTWFwcGVkVG9Ebltkbl1bMF1bJ21hcHBlZERpZHMnXSAmJiB0aGlzLmF2YWlsYWJsZURpZFBhdHRlcm5zTWFwcGVkVG9Ebltkbl1bMF1bJ21hcHBlZERpZHMnXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdHIgKz0gJyAgICAgICAgRElEOiAgJyArICh0aGlzLmF2YWlsYWJsZURpZFBhdHRlcm5zTWFwcGVkVG9Ebltkbl1bMF1bJ21hcHBlZERpZHMnXS5sZW5ndGggPiAxID8gJ211bHRpcGxlJyA6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVEaWRQYXR0ZXJuc01hcHBlZFRvRG5bZG5dWzBdWydtYXBwZWREaWRzJ11bMF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXZhaWxhYmxlRGlkUGF0dGVybnNNYXBwZWRUb0RuW2RuXVswXVsndm0nXSkge1xyXG4gICAgICAgICAgICAgICAgc3RyICs9ICcgICAgICAgIEluIFVzZSAtIFZNJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB1bndyYXBOdW1iZXJSYW5nZSA9IHVud3JhcE51bWJlclJhbmdlLmZpbHRlcigodW53cmFwcGVkTnVtYmVyOiBzdHJpbmcpID0+ICFhdmFpbGFibGVOdW1iZXIudXNlZE51bWJlcnMuaW5jbHVkZXModW53cmFwcGVkTnVtYmVyKSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHVud3JhcE51bWJlclJhbmdlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdW53cmFwTnVtYmVyUmFuZ2Uoc3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgY29uc3QgcmVnRXhwID0gLyheMCspLztcclxuICAgICAgICBsZXQgbGVhZGluZ1plcm9zID0gJyc7XHJcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHN0YXJ0Lm1hdGNoKHJlZ0V4cCk7XHJcbiAgICAgICAgaWYgKG1hdGNoZXMpIHtcclxuICAgICAgICAgICAgbGVhZGluZ1plcm9zID0gbWF0Y2hlc1sxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3RhcnROdW1lcmljID0gbmV3IEJpZyhzdGFydCk7XHJcbiAgICAgICAgY29uc3QgZW5kTnVtZXJpYyA9IG5ldyBCaWcoZW5kKTtcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOiBOdW1iZXIoZW5kTnVtZXJpYy5taW51cyhzdGFydE51bWVyaWMpLnBsdXMobmV3IEJpZygxKSkudG9GaXhlZCgwKSl9LCAodiwgazogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IFN0cmluZyhzdGFydE51bWVyaWMucGx1cyhuZXcgQmlnKGsudG9TdHJpbmcoKSkpLnRvRml4ZWQoMCkpO1xyXG4gICAgICAgICAgICBpZiAoKGxlYWRpbmdaZXJvcyArIG51bWJlcikubGVuZ3RoID4gc3RhcnQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGxlYWRpbmdaZXJvcyA9IGxlYWRpbmdaZXJvcy5zdWJzdHIoMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGxlYWRpbmdaZXJvcyArIG51bWJlcjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0QXZhaWxhYmxlRGlkTWFwcGVkVG9EbihhdmFpbGFibGVOdW1iZXI6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChhdmFpbGFibGVOdW1iZXIudW5Vc2VkTnVtYmVyc1dpdGhEaWRzICYmIGF2YWlsYWJsZU51bWJlci51blVzZWROdW1iZXJzV2l0aERpZHMubGVuZ3RoKSB7XHJcblxyXG4gICAgICAgICAgICBhdmFpbGFibGVOdW1iZXIudW5Vc2VkTnVtYmVyc1dpdGhEaWRzLmZvckVhY2goKG51bWJlcldpdGhEaWRzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZG4gPSBudW1iZXJXaXRoRGlkc1sndW5Vc2VkTnVtYmVyJ107XHJcbiAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlRGlkUGF0dGVybnNNYXBwZWRUb0RuW2RuXSA9IFt7fV07XHJcbiAgICAgICAgICAgIGlmIChudW1iZXJXaXRoRGlkc1sndHJhbnNsYXRpb25QYXR0ZXJuTGlzdCddICYmIG51bWJlcldpdGhEaWRzWyd0cmFuc2xhdGlvblBhdHRlcm5MaXN0J10ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVEaWRQYXR0ZXJuc01hcHBlZFRvRG5bZG5dID0gbnVtYmVyV2l0aERpZHNbJ3RyYW5zbGF0aW9uUGF0dGVybkxpc3QnXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlRGlkUGF0dGVybnNNYXBwZWRUb0RuW2RuXVswXVsnbWFwcGVkRGlkcyddID0gW3t9XTtcclxuICAgICAgICAgICAgICAgIGlmIChudW1iZXJXaXRoRGlkc1snbWFwcGVkRGlkcyddICYmIG51bWJlcldpdGhEaWRzWydtYXBwZWREaWRzJ10ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVEaWRQYXR0ZXJuc01hcHBlZFRvRG5bZG5dWzBdWydtYXBwZWREaWRzJ10gPSBudW1iZXJXaXRoRGlkc1snbWFwcGVkRGlkcyddO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlRGlkUGF0dGVybnNNYXBwZWRUb0RuW2RuXVswXVsndm0nXSA9IG51bWJlcldpdGhEaWRzWyd2bSddO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVE9ETzogcmVwbGFjZSBwbGFjZWhvbGRlcnMgd2l0aCByZWFsIEFQSSBpbnRlZ3JhdGlvbi5cclxuICAgIGxvYWREYXRhRnJvbUFwaSgpOiB2b2lkIHtcclxuICAgICAgICAvLyB0aGlzLmFwaS5nZXRXaXphcmRCb290c3RyYXBEYXRhKCkuc3Vic2NyaWJlKC4uLilcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRMaW5lV2l0aFNpdGVJbmZvKGxpbmU6IExpbmVJbnRlcmZhY2UpIHtcclxuICAgICAgICBsaW5lLmRpcmVjdG9yeU51bWJlci5yb3V0ZVBhcnRpdGlvbk5hbWUgPSB0aGlzLnNpdGVEZWZhdWx0cz8ucm91dGVQYXJ0aXRpb24gfHwgJyc7XHJcbiAgICBcclxuICAgICAgICBsZXQgY2FsbGluZ1NlYXJjaFNwYWNlVmFsID0gdGhpcy5zaXRlRGVmYXVsdHM/LmxpbmVDc3MgfHwgJyc7XHJcbiAgICAgICAgbGluZS5jYWxsaW5nU2VhcmNoU3BhY2UgPSBjYWxsaW5nU2VhcmNoU3BhY2VWYWw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcHJpdmF0ZSBpbml0VGVtcGxhdGVEbnNOYW1lc0ZvckxpbmVzKHVzZXJMaW5lczogVGVtcGxhdGVMaW5lTGlrZVtdKTogdm9pZCB7XHJcbiAgICAvLyAgICAgY29uc3Qgcm91dGVQYXJ0aXRpb24gPSB0aGlzLnNpdGVEZWZhdWx0cz8ucm91dGVQYXJ0aXRpb24gfHwgJyc7XHJcbiAgICAvLyAgICAgaWYgKHVzZXJMaW5lcyAmJiB1c2VyTGluZXMubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICAgICAgICB1c2VyTGluZXMuZm9yRWFjaCgobGluZSwgaW5kZXgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgIGxpbmUgJiYgbGluZS5kaXJlY3RvcnlOdW1iZXIgJiYgKGxpbmUuZGlyZWN0b3J5TnVtYmVyLnRlbXBsYXRlRGlyZWN0b3J5TnVtYmVyID0gbGluZS5kaXJlY3RvcnlOdW1iZXIuZGlyZWN0b3J5TnVtYmVyKTtcclxuICAgIC8vICAgICAgICAgICAgIGxpbmUgJiYgbGluZS5kaXJlY3RvcnlOdW1iZXIgJiYgKGxpbmUuZGlyZWN0b3J5TnVtYmVyLmRpcmVjdG9yeU51bWJlciA9ICcnKTtcclxuICAgIC8vICAgICAgICAgICAgIHJldHVybiBsaW5lO1xyXG4gICAgLy8gICAgICAgICB9KTtcclxuXHJcbiAgICAvLyAgICAgICAgIC8vIGNvbnN0IHJvdXRlUGFydGl0aW9uID0gdGhpcy5zaXRlRGVmYXVsdHM/LnJvdXRlUGFydGl0aW9uIHx8ICcnO1xyXG4gICAgLy8gICAgICAgICAvLyBpZiAobGluZS5saW5lQXNzb2NpYXRpb25zICYmIGxpbmUubGluZUFzc29jaWF0aW9ucy5sZW5ndGgpIHtcclxuICAgIC8vICAgICAgICAgLy8gdGhpcy5zZXRMaW5lQXNzb2NpYXRpb25zRm9yRGV2aWNlKGxpbmUsIHJvdXRlUGFydGl0aW9uKTtcclxuICAgIC8vICAgICAgICAgLy8gfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICB0aGlzLnRlbXBsYXRlRGV2aWNlcy5mb3JFYWNoKGRldmljZSA9PiB7XHJcbiAgICAvLyAgICAgICAgIGlmIChkZXZpY2UubGluZUFzc29jaWF0aW9ucyAmJiBkZXZpY2UubGluZUFzc29jaWF0aW9ucy5sZW5ndGgpIHtcclxuICAgIC8vICAgICAgICAgICAgIHRoaXMuc2V0TGluZUFzc29jaWF0aW9uc0ZvckRldmljZShkZXZpY2UsIHJvdXRlUGFydGl0aW9uKTtcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgLy8gfVxyXG4gICAgXHJcbiAgICBcclxuICAgIHByaXZhdGUgc2V0TGluZUFzc29jaWF0aW9uc0ZvckRldmljZShkZXZpY2U6IFRlbXBsYXRlRGV2aWNlTGlrZSwgcm91dGVQYXJ0aXRpb246IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGxpbmVBc3NvY2lhdGlvbnMgPSBkZXZpY2UubGluZUFzc29jaWF0aW9ucyB8fCBbXTtcclxuICAgICAgICBpZihsaW5lQXNzb2NpYXRpb25zICYmIGxpbmVBc3NvY2lhdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGxpbmVBc3NvY2lhdGlvbnMuZm9yRWFjaChsaW5lQXNzb2NpYXRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgbGluZUFzc29jaWF0aW9uICYmIGxpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXIgJiYgKGxpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXIudGVtcGxhdGVEaXJlY3RvcnlOdW1iZXIgPSBsaW5lQXNzb2NpYXRpb24uZGlyZWN0b3J5TnVtYmVyLmRpcmVjdG9yeU51bWJlciB8fCAnJyk7XHJcbiAgICAgICAgICAgICAgICBsaW5lQXNzb2NpYXRpb24gJiYgbGluZUFzc29jaWF0aW9uLmRpcmVjdG9yeU51bWJlciAmJiAobGluZUFzc29jaWF0aW9uLmRpcmVjdG9yeU51bWJlci5yb3V0ZVBhcnRpdGlvbk5hbWUgPSByb3V0ZVBhcnRpdGlvbik7XHJcbiAgICAgICAgICAgICAgICBsaW5lQXNzb2NpYXRpb24gJiYgbGluZUFzc29jaWF0aW9uLmxvZ01pc3NlZENhbGwgJiYgKGxpbmVBc3NvY2lhdGlvbi5sb2dNaXNzZWRDYWxsID0gbGluZUFzc29jaWF0aW9uLmxvZ01pc3NlZENhbGwgfHwgJ2ZhbHNlJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXREZXZpY2VXaXRoU2l0ZUluZm8oZGV2aWNlOiBEZXZpY2VJbnRlcmZhY2UpIHtcclxuICAgICAgICBkZXZpY2UubmV3TmFtZSA9IGRldmljZS5uYW1lO1xyXG4gICAgICAgIGRldmljZS5uYW1lID0gJyc7XHJcbiAgICAgICAgaWYgKCFkZXZpY2VbJ2VuYWJsZWRFeHRlbnNpb25Nb2JpbGl0eSddKSB7XHJcbiAgICAgICAgZGV2aWNlLmVuYWJsZWRFeHRlbnNpb25Nb2JpbGl0eSA9IHRoaXMuc2l0ZURlZmF1bHRzPy5lbmFibGVFbSA/PyBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRldmljZVsnZW5hYmxlZEV4dGVuc2lvbk1vYmlsaXR5J10udG9TdHJpbmcoKSA9PT0gJ1llcycpIHtcclxuICAgICAgICBkZXZpY2UuZW5hYmxlZEV4dGVuc2lvbk1vYmlsaXR5ID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRldmljZVsnZW5hYmxlZEV4dGVuc2lvbk1vYmlsaXR5J10udG9TdHJpbmcoKSA9PT0gJ05vJykge1xyXG4gICAgICAgIGRldmljZS5lbmFibGVkRXh0ZW5zaW9uTW9iaWxpdHkgPSBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChkZXZpY2UubG9jYXRpb24pIHtcclxuICAgICAgICAgICAgY29uc3QgcmVwbGFjZWRWYWx1ZSA9IHRoaXMucmVwbGFjZUR5bmFtaWNWYWx1ZVNpdGVJbmZvKGRldmljZS5sb2NhdGlvbiwgdGhpcy5jdXJyZW50U2l0ZT8uc2hvcnROYW1lID8/ICcnKSA/PyBudWxsO1xyXG4gICAgICAgICAgICBkZXZpY2UubG9jYXRpb24gPSByZXBsYWNlZFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGV2aWNlLmxvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VkVmFsdWUgPSB0aGlzLnJlcGxhY2VEeW5hbWljVmFsdWVTaXRlSW5mbyhkZXZpY2UuZGV2aWNlUG9vbE5hbWUsIHRoaXMuY3VycmVudFNpdGU/LnNob3J0TmFtZSA/PyAnJykgPz8gbnVsbDtcclxuICAgICAgICAgICAgZGV2aWNlLmRldmljZVBvb2xOYW1lID0gcmVwbGFjZWRWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRldmljZS5sb2NhdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCByZXBsYWNlZFZhbHVlID0gdGhpcy5yZXBsYWNlRHluYW1pY1ZhbHVlU2l0ZUluZm8oZGV2aWNlLmNhbGxpbmdTZWFyY2hTcGFjZU5hbWUsIHRoaXMuY3VycmVudFNpdGU/LnNob3J0TmFtZSA/PyAnJykgPz8gbnVsbDtcclxuICAgICAgICAgICAgZGV2aWNlLmNhbGxpbmdTZWFyY2hTcGFjZU5hbWUgPSByZXBsYWNlZFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGV2aWNlLmV4dHJhT3B0aW9ucykge1xyXG4gICAgICAgICAgICBjb25zdCByZXBsYWNlZFZhbHVlID0gdGhpcy5yZXBsYWNlRHluYW1pY1ZhbHVlU2l0ZUluZm8oZGV2aWNlLmV4dHJhT3B0aW9ucy5hYXJDc3MsIHRoaXMuY3VycmVudFNpdGU/LnNob3J0TmFtZSA/PyAnJykgPz8gbnVsbDtcclxuICAgICAgICAgICAgZGV2aWNlLmV4dHJhT3B0aW9ucy5hYXJDc3MgPSByZXBsYWNlZFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWRldmljZS5kZXNjcmlwdGlvbiAmJiB0aGlzLnNpdGVEZWZhdWx0cykge1xyXG4gICAgICAgICAgICBkZXZpY2UuZGVzY3JpcHRpb24gPSB0aGlzLnNpdGVEZWZhdWx0cy5kZXZpY2VEZXNjcmlwdGlvbjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXBsYWNlRHluYW1pY1ZhbHVlU2l0ZUluZm8oZmllbGRWYWx1ZTogYW55LCBzaXRlU2hvcnROYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBpZiAoZmllbGRWYWx1ZSkge1xyXG4gICAgICAgIGZpZWxkVmFsdWUgPSB0aGlzLnJlcGxhY2VEeW5hbWljVmFsdWVGb3JtYXQoZmllbGRWYWx1ZSk7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zVG9SZXBsYWNlcyA9IHsgJ1NpdGVTaG9ydE5hbWUnOiBzaXRlU2hvcnROYW1lIH07XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubXV0bGlTdHJpbmdSZXBsYWNlKHBhcmFtc1RvUmVwbGFjZXMsIGZpZWxkVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlcGxhY2VEeW5hbWljVmFsdWVGb3JtYXQoc3RyOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKC9cXFtGTlxcXS9pZywgJ1tGTl0nKS5yZXBsYWNlKC9cXFtMTlxcXS9pZywgJ1tMTl0nKS5yZXBsYWNlKC9cXFtJRFxcXS9pZywgJ1tVc2VySWRdJylcclxuICAgICAgICAucmVwbGFjZSgvXFxbVXNlcklkXFxdL2lnLCAnW1VzZXJJZF0nKS5yZXBsYWNlKC88TWF0Y2ggVXNlciBJRD4vaWcsICdbVXNlcklkXScpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xcW0VtYWlsXFxdL2lnLCAnW0VtYWlsXScpLnJlcGxhY2UoL1xcW0ROXFwoL2lnLCAnW0ROKCcpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xcW1NpdGVTaG9ydE5hbWVcXF0vaWcsICdbU2l0ZVNob3J0TmFtZV0nKS5yZXBsYWNlKC9cXCRcXChTaXRlU2hvcnROYW1lXFwpL2lnLCAnW1NpdGVTaG9ydE5hbWVdJylcclxuICAgICAgICAucmVwbGFjZSgvXFwkXFx7U2l0ZVNob3J0TmFtZVxcfS9pZywgJ1tTaXRlU2hvcnROYW1lXScpLnJlcGxhY2UoL3tTaXRlU2hvcnROYW1lfS9pZywgJ1tTaXRlU2hvcnROYW1lXScpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xcW0ZOXFwoL2lnLCAnW0ZOKCcpLnJlcGxhY2UoL1xcW0xOXFwoL2lnLCAnW0xOKCcpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xcW0lEXFwoL2lnLCAnW0lEKCcpO1xyXG4gICAgICAgIHJldHVybiBzdHI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG11dGxpU3RyaW5nUmVwbGFjZShvYmplY3Q6IGFueSwgaW5wdXQ6IHN0cmluZywgZGlyZWN0b3J5TnVtYmVyPzogc3RyaW5nLCB1c2VyPzogYW55KTogc3RyaW5nIHtcclxuICAgICAgICB2YXIgdmFsID0gaW5wdXQ7XHJcblxyXG4gICAgICAgIGlmICh2YWwuaW5jbHVkZXMoJ1tETl0nKSAmJiBkaXJlY3RvcnlOdW1iZXIgJiYgIWRpcmVjdG9yeU51bWJlci5pbmNsdWRlcygnTGluZScpKSB7XHJcbiAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCdbRE5dJywgZGlyZWN0b3J5TnVtYmVyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpbmRleE9mRE4gPSB2YWwuaW5kZXhPZignW0ROKCcpO1xyXG4gICAgICAgIGlmIChpbmRleE9mRE4gIT09IC0xICYmIGRpcmVjdG9yeU51bWJlcikge1xyXG4gICAgICAgICAgICB2YXIgZGlnaXQgPSB2YWwuc3Vic3RyaW5nKGluZGV4T2ZETiArIDQsIHZhbC5pbmRleE9mKCcpJywgaW5kZXhPZkROICsgNCkpO1xyXG4gICAgICAgICAgICB2YXIgZGlnaXRDb3VudCA9IE51bWJlcihkaWdpdCkgfHwgMDtcclxuICAgICAgICAgICAgdmFyIGRuRGlnaXQgPSAoZGlnaXRDb3VudCA+IHZhbC5sZW5ndGgpID8gZGlyZWN0b3J5TnVtYmVyIDogZGlyZWN0b3J5TnVtYmVyLnN1YnN0cmluZyhkaXJlY3RvcnlOdW1iZXIubGVuZ3RoIC0gZGlnaXRDb3VudCwgZGlyZWN0b3J5TnVtYmVyLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCdbRE4oJyArIGRpZ2l0ICsgJyldJywgZG5EaWdpdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW5kZXhPZkZOID0gdmFsLmluZGV4T2YoJ1tGTignKTtcclxuICAgICAgICBpZiAoaW5kZXhPZkZOICE9PSAtMSAmJiB1c2VyICYmIHVzZXIuZmlyc3ROYW1lKSB7XHJcbiAgICAgICAgICAgIHZhciBkaWdpdCA9IHZhbC5zdWJzdHJpbmcoaW5kZXhPZkZOICsgNCwgdmFsLmluZGV4T2YoJyknLCBpbmRleE9mRk4gKyA0KSk7XHJcbiAgICAgICAgICAgIHZhciBmbkRpZ2l0ID0gdXNlci5maXJzdE5hbWUuc3Vic3RyaW5nKDAsIGRpZ2l0KTtcclxuICAgICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoJ1tGTignICsgZGlnaXQgKyAnKV0nLCBmbkRpZ2l0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGluZGV4T2ZMTiA9IHZhbC5pbmRleE9mKCdbTE4oJyk7XHJcbiAgICAgICAgaWYgKGluZGV4T2ZMTiAhPT0gLTEgJiYgdXNlciAmJiB1c2VyLmxhc3ROYW1lKSB7XHJcbiAgICAgICAgICAgIHZhciBkaWdpdCA9IHZhbC5zdWJzdHJpbmcoaW5kZXhPZkxOICsgNCwgdmFsLmluZGV4T2YoJyknLCBpbmRleE9mTE4gKyA0KSk7XHJcbiAgICAgICAgICAgIHZhciBsbkRpZ2l0ID0gdXNlci5sYXN0TmFtZS5zdWJzdHJpbmcoMCwgZGlnaXQpO1xyXG4gICAgICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSgnW0xOKCcgKyBkaWdpdCArICcpXScsIGxuRGlnaXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaW5kZXhPZklEID0gdmFsLmluZGV4T2YoJ1tJRCgnKTtcclxuICAgICAgICBpZiAoaW5kZXhPZklEICE9PSAtMSAmJiB1c2VyICYmIHVzZXIudXNlcmlkKSB7XHJcbiAgICAgICAgICAgIHZhciBkaWdpdCA9IHZhbC5zdWJzdHJpbmcoaW5kZXhPZklEICsgNCwgdmFsLmluZGV4T2YoJyknLCBpbmRleE9mSUQgKyA0KSk7XHJcbiAgICAgICAgICAgIHZhciBpZERpZ2l0ID0gdXNlci51c2VyaWQuc3Vic3RyaW5nKDAsIGRpZ2l0KTtcclxuICAgICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoJ1tJRCgnICsgZGlnaXQgKyAnKV0nLCBpZERpZ2l0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMob2JqZWN0KTtcclxuICAgICAgICBlbnRyaWVzLmZvckVhY2goKHBhcmEpID0+IHtcclxuICAgICAgICAgICAgdmFyIGZpbmQgPSAnWycgKyBwYXJhWzBdICsgJ10nO1xyXG4gICAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBwYXJhWzFdICE9IG51bGwgPyBTdHJpbmcocGFyYVsxXSkgOiAnJztcclxuICAgICAgICAgICAgdmFsID0gdmFsLnNwbGl0KGZpbmQpLmpvaW4ocmVwbGFjZW1lbnQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0VGVtcGxhdGVEbnNOYW1lc0ZvckxpbmVzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmxpbmVzICYmIHRoaXMubGluZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVzLmZvckVhY2goKGxpbmUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsaW5lLmRpcmVjdG9yeU51bWJlci50ZW1wbGF0ZURpcmVjdG9yeU51bWJlciA9IGxpbmUuZGlyZWN0b3J5TnVtYmVyLmRpcmVjdG9yeU51bWJlcjtcclxuICAgICAgICAgICAgICAgIGxpbmUuZGlyZWN0b3J5TnVtYmVyLmRpcmVjdG9yeU51bWJlciA9ICcnO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmU7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgcm91dGVQYXJ0aXRpb24gPSB0aGlzLnNpdGVEZWZhdWx0cz8ucm91dGVQYXJ0aXRpb24gfHwgJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZGV2aWNlcy5mb3JFYWNoKGRldmljZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMgJiYgZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldExpbmVBc3NvY2lhdGlvbnNGb3JEZXZpY2UoZGV2aWNlLCByb3V0ZVBhcnRpdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmRldmljZVByb2ZpbGVzLmZvckVhY2goZGV2aWNlUHJvZmlsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGV2aWNlUHJvZmlsZS5saW5lQXNzb2NpYXRpb25zICYmIGRldmljZVByb2ZpbGUubGluZUFzc29jaWF0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGluZUFzc29jaWF0aW9uc0ZvckRldmljZShkZXZpY2VQcm9maWxlLCByb3V0ZVBhcnRpdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZW5kVXNlcj8uc2luZ2xlTnVtYmVyUmVhY2ggJiYgdGhpcy5lbmRVc2VyLnNpbmdsZU51bWJlclJlYWNoLmFzc29jaWF0ZWRMaW5lcyAmJiB0aGlzLmVuZFVzZXIuc2luZ2xlTnVtYmVyUmVhY2guYXNzb2NpYXRlZExpbmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZW5kVXNlci5zaW5nbGVOdW1iZXJSZWFjaC5hc3NvY2lhdGVkTGluZXMgJiYgdGhpcy5lbmRVc2VyLnNpbmdsZU51bWJlclJlYWNoLmFzc29jaWF0ZWRMaW5lcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZFVzZXIuc2luZ2xlTnVtYmVyUmVhY2guYXNzb2NpYXRlZExpbmVzLm1hcChsaW5lQXNzb2NpYXRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lQXNzb2NpYXRpb24uZGlyZWN0b3J5TnVtYmVyLnRlbXBsYXRlRGlyZWN0b3J5TnVtYmVyID0gbGluZUFzc29jaWF0aW9uLmRpcmVjdG9yeU51bWJlci5kaXJlY3RvcnlOdW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXIucm91dGVQYXJ0aXRpb25OYW1lID0gcm91dGVQYXJ0aXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lbmRVc2VyLnNpbmdsZU51bWJlclJlYWNoLnJlbW90ZURlc3RpbmF0aW9ucyAmJiB0aGlzLmVuZFVzZXIuc2luZ2xlTnVtYmVyUmVhY2gucmVtb3RlRGVzdGluYXRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kVXNlci5zaW5nbGVOdW1iZXJSZWFjaC5yZW1vdGVEZXN0aW5hdGlvbnMuZm9yRWFjaChyZW1vdGVEZXN0aW5hdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdGVEZXN0aW5hdGlvbi5saW5lQXNzb2NpYXRpb25zICYmIHJlbW90ZURlc3RpbmF0aW9uLmxpbmVBc3NvY2lhdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVEZXN0aW5hdGlvbi5saW5lQXNzb2NpYXRpb25zLm1hcChsaW5lQXNzb2NpYXRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXIudGVtcGxhdGVEaXJlY3RvcnlOdW1iZXIgPSBsaW5lQXNzb2NpYXRpb24uZGlyZWN0b3J5TnVtYmVyLmRpcmVjdG9yeU51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lQXNzb2NpYXRpb24uZGlyZWN0b3J5TnVtYmVyLnJvdXRlUGFydGl0aW9uTmFtZSA9IHJvdXRlUGFydGl0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBidWlsZFNhdmFibGVFbmRVc2VyKCk6IEVuZFVzZXJJbnRlcmZhY2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5lbmRVc2VyKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdGVtcGxhdGUgdXNlciBsb2FkZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkU2F2YWJsZUVuZFVzZXIoXHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlcixcclxuICAgICAgICAgICAgdGhpcy5saW5lcyxcclxuICAgICAgICAgICAgdGhpcy5kZXZpY2VzLFxyXG4gICAgICAgICAgICB0aGlzLmRldmljZVByb2ZpbGVzLFxyXG4gICAgICAgICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZURldmljZU5hbWU6IChpbmRleCwgZGV2aWNlKSA9PiB0aGlzLnJlc29sdmVEZXZpY2VOYW1lRm9yU2F2ZShpbmRleCwgZGV2aWNlKSxcclxuICAgICAgICAgICAgICAgIHJlc29sdmVEZXZpY2VQcm9maWxlTmFtZTogKGluZGV4LCBwcm9maWxlKSA9PiB0aGlzLnJlc29sdmVEZXZpY2VOYW1lRm9yU2F2ZShpbmRleCwgcHJvZmlsZSksXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVzb2x2ZURldmljZU5hbWVGb3JTYXZlKF9pbmRleDogbnVtYmVyLCBkZXZpY2U6IERldmljZUludGVyZmFjZSk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgcmF3TmFtZSA9IChkZXZpY2UubmFtZSB8fCBkZXZpY2UubmV3TmFtZSB8fCAnJykudHJpbSgpO1xyXG4gICAgICAgIGlmICghcmF3TmFtZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGRldmljZS5wcmVmaXg/LnRyaW0oKTtcclxuICAgICAgICBpZiAocHJlZml4ICYmICFyYXdOYW1lLnRvVXBwZXJDYXNlKCkuc3RhcnRzV2l0aChwcmVmaXgudG9VcHBlckNhc2UoKSkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGAke3ByZWZpeH0ke3Jhd05hbWV9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJhd05hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmVOZXdVc2VyKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgY29uc3QgdXNlciA9IHRoaXMuYnVpbGRTYXZhYmxlRW5kVXNlcigpO1xyXG4gICAgICAgIGNvbnN0IHNpdGVJZCA9IFN0cmluZyh0aGlzLnNlbGVjdGVkU2l0ZSA/PyAnJyk7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVJZCA9IFN0cmluZyh0aGlzLnNlbGVjdGVkVGVtcGxhdGVJZCA/PyAnJyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlckNyZWF0aW9uQXBpU2VydmljZS5zYXZlVGVtcGxhdGVVc2VyKHVzZXIsIHRlbXBsYXRlSWQsIHNpdGVJZCk7XHJcbiAgICB9XHJcbn0iXX0=
800
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jcmVhdGlvbi13aXphcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWNyZWF0aW9uL3NyYy93aWRnZXRzL3VzZXItY3JlYXRpb24td2l6YXJkL3VzZXItY3JlYXRpb24td2l6YXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFJekYsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRixPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUM7QUFDekIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxJQUFJLEVBQXdDLE1BQU0sb0JBQW9CLENBQUM7QUFDaEYsT0FBTyxFQW9CSCxXQUFXLEVBRVgsT0FBTyxHQUNWLE1BQU0sa0RBQWtELENBQUM7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBRzlFLE1BQU0sT0FBTyx5QkFBeUI7SUFjbEMsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFzQ0QsSUFBSSx1QkFBdUI7UUFDdkIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsRUFBRSxrQkFBa0IsSUFBSSxFQUFFLENBQUM7SUFDcEUsQ0FBQztJQUVELElBQUkseUJBQXlCO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxjQUFjLElBQUksRUFBRSxDQUFDO0lBQ25ELENBQUM7SUFFRCxJQUFJLHVCQUF1QjtRQUN2QixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUMzRSxDQUFDO0lBS0Q7UUFwRWlCLDJCQUFzQixHQUFHLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRWhFLHFCQUFnQixHQUFhLENBQUMsUUFBUSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pGLHNCQUFpQixHQUF1QixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUV4RCxhQUFRLEdBQWlDLElBQUksQ0FBQztRQUMvQyxZQUFPLEdBQTRCLElBQUksQ0FBQztRQUN4QyxVQUFLLEdBQW9CLEVBQUUsQ0FBQztRQUM1QixZQUFPLEdBQXNCLEVBQUUsQ0FBQztRQUNoQyxtQkFBYyxHQUFzQixFQUFFLENBQUM7UUFDdEMsMEJBQXFCLEdBQTJCLElBQUksQ0FBQztRQUNyRCxpQkFBWSxHQUFnQixJQUFJLENBQUM7UUFNekMsZ0JBQVcsR0FBYSxFQUFFLENBQUM7UUFDM0Isb0JBQWUsR0FBYSxFQUFFLENBQUM7UUFDL0IsZ0JBQVcsR0FBaUIsRUFBRSxDQUFDO1FBQy9CLDBCQUFxQixHQUFhLEVBQUUsQ0FBQztRQUNyQyxlQUFVLEdBQWEsRUFBRSxDQUFDO1FBQzFCLGNBQVMsR0FBd0IsRUFBRSxDQUFDO1FBQ3BDLGtCQUFhLEdBQXNCLEVBQUUsQ0FBQztRQUN0QyxrQkFBYSxHQUFzQixFQUFFLENBQUM7UUFDdEMsb0JBQWUsR0FBd0IsRUFBRSxDQUFDO1FBQzFDLDJCQUFzQixHQUF3QixFQUFFLENBQUM7UUFDakQseUJBQW9CLEdBQWdDLElBQUksQ0FBQztRQUN6RCxvQkFBZSxHQUFvQjtZQUMvQixNQUFNLEVBQUUsRUFBRTtZQUNWLFNBQVMsRUFBRSxFQUFFO1lBQ2IsUUFBUSxFQUFFLEVBQUU7WUFDWixLQUFLLEVBQUUsRUFBRTtTQUNaLENBQUM7UUFDRixtQkFBYyxHQUFzQixFQUFFLENBQUM7UUFDdkMsa0JBQWEsR0FBa0IsRUFBRSxDQUFDO1FBQ2xDLHFCQUFnQixHQUFhLEVBQUUsQ0FBQztRQUNoQyxnQkFBVyxHQUFhLEVBQUUsQ0FBQztRQUMzQixpQkFBWSxHQUF3QixJQUFJLENBQUM7UUFDekMseUJBQW9CLEdBQXdCLElBQUksQ0FBQztRQUNqRCxrQkFBYSxHQUF1QixFQUFFLENBQUM7UUFDdkMsb0JBQWUsR0FBeUIsRUFBRSxDQUFDO1FBQzNDLHdCQUFtQixHQUF3QixFQUFFLENBQUM7UUFFOUMsaUJBQVksR0FBa0IsSUFBSSxDQUFDO1FBQ25DLHlCQUFvQixHQUFrQixJQUFJLENBQUM7UUFDM0MsdUJBQWtCLEdBQWtCLElBQUksQ0FBQztRQUN6Qyw2QkFBd0IsR0FBcUIsTUFBTSxDQUFDO1FBQ3BELG1DQUE4QixHQUFRLEVBQUUsQ0FBQztRQUV4QixnQ0FBMkIsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1FBQzFELDBCQUFxQixHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQWNqRixxQkFBZ0IsR0FBNkIsSUFBSSxDQUFDO1FBQ2xELG1CQUFjLEdBQUcsQ0FBQyxDQUFDO1FBR2YsOEJBQThCO0lBQ2xDLENBQUM7SUFFRCxJQUFJLGdCQUFnQjtRQUNoQixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsY0FBYyxDQUFDLElBQXVCO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1lBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7WUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDNUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7U0FDekM7UUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHO1lBQ25CLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTTtZQUNuQixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsSUFBSSxFQUFFO1lBQy9CLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUSxJQUFJLEVBQUU7WUFDN0IsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRTtTQUMxQixDQUFDO1FBQ0YsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELHNCQUFzQjtRQUNsQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztZQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUM7U0FDM0I7UUFDRCxJQUFJLENBQUMsZUFBZSxHQUFHO1lBQ25CLE1BQU0sRUFBRSxFQUFFO1lBQ1YsU0FBUyxFQUFFLEVBQUU7WUFDYixRQUFRLEVBQUUsRUFBRTtZQUNaLEtBQUssRUFBRSxFQUFFO1NBQ1osQ0FBQztRQUNGLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxHQUFzQjtRQUN4QyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLEtBQUssR0FBRyxDQUFDLE1BQU0sQ0FBQztJQUN4RCxDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBMEIsRUFBRSxLQUFhO1FBQ3hELElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLENBQUM7SUFFTSxlQUFlLENBQUMsSUFBbUI7UUFDdEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLElBQUksSUFBSSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxRQUE0QztRQUM1RCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsUUFBUSxFQUFFLElBQUksSUFBSSxJQUFJLENBQUM7UUFDbkQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLFFBQVEsRUFBRSxFQUFFLElBQUksSUFBSSxDQUFDO1FBQy9DLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTSxjQUFjLENBQUMsSUFBVTtRQUM1QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztJQUM3QixDQUFDO0lBRUQsdUJBQXVCO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFDaEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELHlCQUF5QixDQUFDLE9BQThCO1FBQ3BELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLCtCQUErQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3pGLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDL0YsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVwSCxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUVwQywyQkFBMkI7UUFDM0IsOERBQThEO1FBQzlELG9FQUFvRTtRQUNwRSxrRUFBa0U7UUFDbEUsMkRBQTJEO1FBQzNELEtBQUs7UUFFTCw0REFBNEQ7UUFDNUQsc0JBQXNCO1FBQ3RCLDhFQUE4RTtRQUM5RSw4R0FBOEc7UUFDOUcsbUNBQW1DO1FBQ25DLDJEQUEyRDtRQUMzRCw0Q0FBNEM7UUFDNUMsbURBQW1EO1FBQ25ELGFBQWE7UUFDYiw2REFBNkQ7UUFDN0QsVUFBVTtRQUNWLHNEQUFzRDtRQUV0RCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDcEMsNkNBQTZDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUMzRSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRTVELElBQUksQ0FBQyw0QkFBNEIsRUFBRSxDQUFDO1FBRXBDLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNuQixJQUFJLENBQUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDO1NBQ3BFO1FBRUQsa0NBQWtDO1FBQ2xDLGlFQUFpRTtRQUNqRSw0REFBNEQ7UUFDNUQsbUNBQW1DO1FBQ25DLHNEQUFzRDtRQUN0RCx5RkFBeUY7UUFDekYseURBQXlEO1FBQ3pELFdBQVc7UUFDWCxXQUFXO1FBQ1gscUdBQXFHO1FBQ3JHLG1FQUFtRTtRQUNuRSxnQ0FBZ0M7UUFDaEMsa0ZBQWtGO1FBQ2xGLHVCQUF1QjtRQUN2QiwwQkFBMEI7UUFDMUIsK0JBQStCO1FBQy9CLDJCQUEyQjtRQUMzQixrQ0FBa0M7UUFDbEMsaUJBQWlCO1FBQ2pCLGFBQWE7UUFDYiwwREFBMEQ7UUFFMUQscUVBQXFFO1FBQ3JFLDREQUE0RDtRQUM1RCxtQ0FBbUM7UUFDbkMscURBQXFEO1FBQ3JELHlGQUF5RjtRQUN6Rix5REFBeUQ7UUFDekQsV0FBVztRQUVYLGtGQUFrRjtRQUNsRiw2REFBNkQ7UUFDN0QsSUFBSTtRQUVKLDhDQUE4QztRQUM5Qyw0Q0FBNEM7UUFDNUMsK0VBQStFO1FBQy9FLG9FQUFvRTtRQUVwRSw0REFBNEQ7UUFDNUQseURBQXlEO1FBQ3pELHFEQUFxRDtRQUNyRCxpRUFBaUU7UUFDakUsNENBQTRDO1FBQzVDLE9BQU87UUFDUCxxRUFBcUU7UUFFckUsK0JBQStCO1FBQy9CLCtCQUErQjtRQUMvQixpQ0FBaUM7SUFDckMsQ0FBQztJQUVELDJCQUEyQixDQUFDLElBQXNCO1FBQzlDLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7SUFDekMsQ0FBQztJQUVNLHlCQUF5QjtRQUM1QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxlQUFlLEdBQUc7WUFDbkIsTUFBTSxFQUFFLEVBQUU7WUFDVixTQUFTLEVBQUUsRUFBRTtZQUNiLFFBQVEsRUFBRSxFQUFFO1lBQ1osS0FBSyxFQUFFLEVBQUU7U0FDWixDQUFDO1FBQ0YsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUM3QixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsY0FBYyxHQUFHLENBQUMsQ0FBQztRQUV4QixJQUFJLElBQUksQ0FBQyxxQkFBcUIsRUFBRTtZQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsbUNBQW1DO1FBQ25DLHdCQUF3QjtRQUN4QixNQUFNO1FBQ04sMkNBQTJDO1FBQzNDLHlCQUF5QjtRQUN6QixNQUFNO1FBRU4sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztZQUNwQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1NBQ25DO1FBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVPLDRCQUE0QjtRQUNoQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxtQkFBbUIsQ0FBQyxLQUE0QixFQUFFLEtBQWE7UUFDM0QsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNuQixHQUFHLElBQUksQ0FBQyxlQUFlO1lBQ3ZCLENBQUMsS0FBSyxDQUFDLEVBQUUsS0FBSztTQUNqQixDQUFDO1FBQ0YsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVELHlCQUF5QixDQUFDLFNBQStCO1FBQ3JELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxTQUFTLENBQUM7UUFDdEMsSUFBSSxDQUFDLGVBQWUsR0FBRztZQUNuQixNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sSUFBSSxFQUFFO1lBQzlCLFNBQVMsRUFBRSxTQUFTLENBQUMsU0FBUyxJQUFJLEVBQUU7WUFDcEMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxRQUFRLElBQUksRUFBRTtZQUNsQyxLQUFLLEVBQUUsU0FBUyxDQUFDLEtBQUssSUFBSSxFQUFFO1NBQy9CLENBQUM7UUFFRixTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUMxQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO2dCQUN4QixPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLGVBQWUsR0FBRyxTQUFTLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztZQUM5RCxJQUFJLENBQUMsZUFBZSxDQUFDLGtCQUFrQixHQUFHLFNBQVMsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDO1FBQzdFLENBQUMsQ0FBQyxDQUFDO1FBRUgsU0FBUyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDOUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQyxJQUFJLENBQUMsTUFBTSxFQUFFO2dCQUNULE9BQU87YUFDVjtZQUNELE1BQU0sQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7UUFDekMsQ0FBQyxDQUFDLENBQUM7UUFFSCxTQUFTLENBQUMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUN0RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ1YsT0FBTzthQUNWO1lBQ0QsT0FBTyxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztRQUVILElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNkLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1lBQzdDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxTQUFTLElBQUksRUFBRSxDQUFDO1lBQ25ELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1lBQ2pELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1NBQzlDO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDNUIsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLDZCQUE2QixFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQWEsRUFBRSxVQUF5QjtRQUNyRCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHO1lBQ3pCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7WUFDN0IsVUFBVTtTQUNiLENBQUM7UUFDRixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBRUQsMEJBQTBCLENBQUMsS0FBYSxFQUFFLGtCQUFpQztRQUN2RSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUM3QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHO1lBQ3pCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUM7WUFDN0Isa0JBQWtCO1NBQ3JCLENBQUM7UUFDRixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBRUQsYUFBYSxDQUFDLEtBQWEsRUFBRSxJQUFZO1FBQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzVCLE9BQU87U0FDVjtRQUNELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQztRQUM5RCxNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztZQUM5QyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQzlCLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDWCxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHO1lBQ3hCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUM7WUFDNUIsSUFBSSxFQUFFLGNBQWM7U0FDdkIsQ0FBQztRQUNGLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ2xDLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxLQUFhO1FBQzlCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNSLE9BQU8sRUFBRSxDQUFDO1NBQ2I7UUFFRCxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3BDLE9BQU8sT0FBTyxLQUFLLENBQUMsSUFBSSxJQUFJLEVBQUUsRUFBRSxDQUFDO1NBQ3BDO1FBRUQsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFO1lBQ2IsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUM7WUFDdEQsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLE1BQU0sVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztTQUN0RDtRQUVELE9BQU8sS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVNLGNBQWMsQ0FBQyxNQUFjO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQzFELEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ2IsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNmLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQWtCLENBQUMsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO2FBQy9CO1lBQ0QsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNmLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNwRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO2FBQ2xFO1lBQ0QsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNmLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBYSxDQUFDO2FBQ3pDO1FBQ0wsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQ1osSUFBSSxDQUFDLDRCQUE0QixDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDakUsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVNLDRCQUE0QixDQUFDLE1BQWM7UUFDOUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDaEQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUU7WUFDckIsT0FBTyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDeEI7UUFFRCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQzFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUMxRSxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQ3JFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDN0IsQ0FDSixDQUFDO1FBRUYsT0FBTyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUMxQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLElBQUksRUFBRSxDQUFDLEVBQ2xELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FDdkIsQ0FBQztJQUNOLENBQUM7SUFFTyxvQkFBb0I7UUFDeEIsTUFBTSxLQUFLLEdBQUc7WUFDVixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQztZQUNoRCxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztTQUM1RCxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBa0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNyRSxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFFTyx5QkFBeUIsQ0FBQyxVQUFrQixFQUFFLFFBQWlDO1FBQ25GLE1BQU0sbUJBQW1CLEdBQUcsd0JBQXdCLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQy9FLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLE1BQU0sQ0FDNUQsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxLQUFLLFVBQVUsQ0FDN0MsQ0FBQztRQUVGLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDckIsTUFBTSxDQUFDLGNBQWMsR0FBRyxRQUFRLENBQUM7WUFDakMsTUFBTSxDQUFDLG1CQUFtQixHQUFHLG1CQUFtQixDQUFDO1lBQ2pELE1BQU0sQ0FBQyxxQkFBcUIsR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUM7WUFDNUQsaUNBQWlDLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3hELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELG1CQUFtQixDQUFDLFdBQW1CLEVBQUUsU0FBUyxHQUFHLEtBQUs7UUFDdEQsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hGLE1BQU0sTUFBTSxHQUFHLE1BQU0sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDdEMsT0FBTyxNQUFNLElBQUksSUFBSSxDQUFDO0lBQzFCLENBQUM7SUFFRCw4QkFBOEIsQ0FBQyxXQUFtQixFQUFFLFNBQVMsR0FBRyxLQUFLO1FBQ2pFLE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RixPQUFPLE1BQU0sRUFBRSxxQkFBcUIsSUFBSSxNQUFNLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixJQUFJLEVBQUUsQ0FBQztJQUM5RixDQUFDO0lBRUQsOEJBQThCLENBQUMsV0FBbUIsRUFBRSxTQUFTLEdBQUcsS0FBSztRQUlqRSxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDeEYsTUFBTSxLQUFLLEdBQ1AsTUFBTSxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRTtZQUNuQyx3QkFBd0IsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDUixPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsT0FBTztZQUNILEtBQUs7WUFDTCxPQUFPLEVBQUUsSUFBSSxDQUFDLDhCQUE4QixDQUFDLFdBQVcsRUFBRSxTQUFTLENBQUM7U0FDdkUsQ0FBQztJQUNOLENBQUM7SUFFTSxjQUFjLENBQUMsTUFBYyxFQUFFLGNBQXNCO1FBQ3hELElBQUksQ0FBQyw4QkFBOEIsR0FBRyxFQUFFLENBQUM7UUFDekMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLEVBQUMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxTQUFTLEVBQUUsY0FBYyxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUMsQ0FBQztRQUN4RyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUM7YUFDeEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQVEsRUFBRSxFQUFFO1lBQ25CLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQyxlQUFtRCxFQUFFLEVBQUU7Z0JBQ3BGLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztZQUN0RyxDQUFDLENBQUMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNMLENBQUE7UUFDRCx3Q0FBd0M7SUFDNUMsQ0FBQztJQUVPLG9CQUFvQjtRQUN4QixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLElBQUksRUFBRSxDQUFDO1FBQ3JELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0YsSUFBSSxDQUFDLGFBQWEsR0FBRyxXQUFXO1lBQzVCLENBQUMsQ0FBQyxDQUFDO29CQUNDLE1BQU0sRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU07b0JBQ25DLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFNBQVM7b0JBQ3pDLFFBQVEsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVE7b0JBQ3ZDLEtBQUssRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUs7b0JBQ2pDLFlBQVk7aUJBQ2YsQ0FBQztZQUNGLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDYixDQUFDO0lBRU8sb0JBQW9CO1FBQ3hCLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxLQUFLLENBQUM7UUFDbkQsSUFBSSxTQUFTLEVBQUUsTUFBTSxFQUFFO1lBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUztpQkFDekIsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7aUJBQ3RDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRTtnQkFDdEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztnQkFDakUsT0FBTztvQkFDSCxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU07b0JBQ3hCLEdBQUcsRUFBRSxTQUFTLENBQUMsVUFBVSxJQUFJLFNBQVMsQ0FBQyxNQUFNO29CQUM3QyxrQkFBa0IsRUFBRSxTQUFTLENBQUMsY0FBYyxJQUFJLEVBQUU7b0JBQ2xELEdBQUc7b0JBQ0gsV0FBVyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUFFLFdBQVcsQ0FBQztpQkFDN0QsQ0FBQztZQUNOLENBQUMsQ0FBQyxDQUFDO1lBQ1AsT0FBTztTQUNWO1FBRUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsY0FBYzthQUNuQyxHQUFHLENBQUMsU0FBUyxDQUFDLEVBQUU7WUFDYixJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsRUFBRTtnQkFDeEIsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUNELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDekYsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDZixPQUFPLElBQUksQ0FBQzthQUNmO1lBQ0QsT0FBTztnQkFDSCxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU07Z0JBQzNCLEdBQUcsRUFBRSxZQUFZLENBQUMsR0FBRztnQkFDckIsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUN2RixHQUFHLEVBQUUsWUFBWSxDQUFDLEdBQUc7Z0JBQ3JCLFdBQVcsRUFBRSxZQUFZLENBQUMsV0FBVzthQUN4QyxDQUFDO1FBQ04sQ0FBQyxDQUFDO2FBQ0QsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUEyQixFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFTyxzQkFBc0I7UUFDMUIsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbkYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQztRQUN2RCxJQUFJLFdBQVcsRUFBRSxNQUFNLEVBQUU7WUFDckIsSUFBSSxDQUFDLGVBQWUsR0FBRyxXQUFXO2lCQUM3QixNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQztpQkFDdEUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDWixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksSUFBSSxFQUFFO2dCQUN2QixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVUsSUFBSSxFQUFFO2dCQUNuQyxLQUFLLEVBQUUsbUJBQW1CO2dCQUMxQixXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxJQUFJLEVBQUUsTUFBTSxNQUFNLENBQUMsY0FBYyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksRUFBRTthQUNsRixDQUFDLENBQUMsQ0FBQztZQUNSLE9BQU87U0FDVjtRQUVELElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGFBQWE7YUFDcEMsR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztZQUNyQixNQUFNO1lBQ04sV0FBVyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUM7U0FDaEQsQ0FBQyxDQUFDO2FBQ0YsTUFBTSxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQzthQUN6RyxHQUFHLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUMvQixJQUFJLEVBQUUsV0FBVztZQUNqQixVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDN0IsS0FBSyxFQUFFLG1CQUFtQjtZQUMxQixXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUMsUUFBUSxNQUFNLE1BQU0sQ0FBQyxjQUFjLEVBQUU7U0FDL0QsQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDO0lBRU8sNkJBQTZCO1FBQ2pDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25GLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxjQUFjLENBQUM7UUFDL0QsSUFBSSxDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUU7WUFDdkIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLEVBQUUsQ0FBQztZQUNqQyxPQUFPO1NBQ1Y7UUFFRCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsWUFBWTthQUNyQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUN6RSxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ2IsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksRUFBRTtZQUN4QixVQUFVLEVBQUUsT0FBTyxDQUFDLFVBQVUsSUFBSSxFQUFFO1lBQ3BDLEtBQUssRUFBRSxtQkFBbUI7WUFDMUIsV0FBVyxFQUFFLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxFQUFFLE1BQU0sT0FBTyxDQUFDLGNBQWMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUU7U0FDcEYsQ0FBQyxDQUFDLENBQUM7SUFDWixDQUFDO0lBRU8sK0JBQStCLENBQUMsT0FBWTtRQUNoRCxJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU8sT0FBTyxLQUFLLFFBQVEsRUFBRTtZQUN6QyxPQUFPLElBQUksQ0FBQztTQUNmO1FBQ0QsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ3hCLE9BQU8sT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQztTQUM3QjtRQUNELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDekMsT0FBTyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQy9DLENBQUM7SUFFTyxjQUFjLENBQUMsS0FBbUI7UUFDdEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztRQUMvQixPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdkIsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDdkIsT0FBTyxLQUFLLENBQUM7YUFDaEI7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUN0QixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBZTtRQUNqQyxPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRU8sYUFBYSxDQUFDLEtBQWM7UUFDaEMsT0FBTyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ2xELENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxlQUFvQjtRQUM3QyxJQUFJLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLENBQUM7YUFDckgsR0FBRyxDQUFDLENBQUMsZUFBdUIsRUFBRSxFQUFFO1lBQ2pDLE1BQU0sRUFBRSxHQUFHLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDO1lBQ3JFLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksSUFBSSxDQUFDLDhCQUE4QixDQUFDLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUMvRixJQUFJLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQkFDckksR0FBRyxJQUFJLGdCQUFnQixHQUFHLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUN6RyxJQUFJLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQkFDaEU7Z0JBQ0QsSUFBSSxJQUFJLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3RELEdBQUcsSUFBSSxxQkFBcUIsQ0FBQztpQkFDNUI7YUFDSjtZQUNELE9BQU8sR0FBRyxDQUFDO1FBQ1gsQ0FBQyxDQUFDLENBQUM7UUFDUCxpQkFBaUIsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxlQUF1QixFQUFFLEVBQUUsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFFbEksT0FBTyxpQkFBaUIsQ0FBQztJQUM3QixDQUFDO0lBRU8saUJBQWlCLENBQUMsS0FBYSxFQUFFLEdBQVc7UUFDaEQsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN0QixNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksT0FBTyxFQUFFO1lBQ1QsWUFBWSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUM3QjtRQUNELE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sVUFBVSxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQVMsRUFBRSxFQUFFO1lBQzdHLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0UsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUMsQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFDbkQsWUFBWSxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckM7WUFDRCxPQUFPLFlBQVksR0FBRyxNQUFNLENBQUM7UUFDakMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0seUJBQXlCLENBQUMsZUFBb0I7UUFDakQsSUFBSSxlQUFlLENBQUMscUJBQXFCLElBQUksZUFBZSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRTtZQUV2RixlQUFlLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsY0FBbUIsRUFBRSxFQUFFO2dCQUN0RSxNQUFNLEVBQUUsR0FBRyxjQUFjLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMvQyxJQUFJLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLGNBQWMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7b0JBQ2pHLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLENBQUMsR0FBRyxjQUFjLENBQUMsd0JBQXdCLENBQUMsQ0FBQztvQkFDbkYsSUFBSSxDQUFDLDhCQUE4QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQ2hFLElBQUksY0FBYyxDQUFDLFlBQVksQ0FBQyxJQUFJLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO3dCQUM3RSxJQUFJLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQyxDQUFDO3FCQUN2RjtpQkFDSjtnQkFDRCxJQUFJLENBQUMsOEJBQThCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3hFLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRUQsd0RBQXdEO0lBQ3hELGVBQWU7UUFDWCxtREFBbUQ7SUFDdkQsQ0FBQztJQUVPLG9CQUFvQixDQUFDLElBQW1CO1FBQzVDLElBQUksQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxjQUFjLElBQUksRUFBRSxDQUFDO1FBRWxGLElBQUkscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO1FBQzdELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxxQkFBcUIsQ0FBQztJQUNwRCxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLHNFQUFzRTtJQUN0RSwrQ0FBK0M7SUFDL0MsK0NBQStDO0lBQy9DLHFJQUFxSTtJQUNySSwyRkFBMkY7SUFDM0YsMkJBQTJCO0lBQzNCLGNBQWM7SUFFZCw2RUFBNkU7SUFDN0UsMEVBQTBFO0lBQzFFLHNFQUFzRTtJQUN0RSxlQUFlO0lBQ2YsUUFBUTtJQUNSLCtDQUErQztJQUMvQywyRUFBMkU7SUFDM0UseUVBQXlFO0lBQ3pFLFlBQVk7SUFDWixVQUFVO0lBQ1YsSUFBSTtJQUdJLDRCQUE0QixDQUFDLE1BQTBCLEVBQUUsY0FBc0I7UUFDbkYsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDO1FBQ3ZELElBQUcsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsTUFBTSxFQUFFO1lBQzVDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRTtnQkFDdkMsZUFBZSxJQUFJLGVBQWUsQ0FBQyxlQUFlLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxDQUFDLHVCQUF1QixHQUFHLGVBQWUsQ0FBQyxlQUFlLENBQUMsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2dCQUN4SyxlQUFlLElBQUksZUFBZSxDQUFDLGVBQWUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxlQUFlLENBQUMsa0JBQWtCLEdBQUcsY0FBYyxDQUFDLENBQUM7Z0JBQzVILGVBQWUsSUFBSSxlQUFlLENBQUMsYUFBYSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsR0FBRyxlQUFlLENBQUMsYUFBYSxJQUFJLE9BQU8sQ0FBQyxDQUFDO1lBQ25JLENBQUMsQ0FBQyxDQUFDO1NBQ047SUFDTCxDQUFDO0lBRU8sc0JBQXNCLENBQUMsTUFBdUI7UUFDbEQsTUFBTSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDO1FBQzdCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUMsTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7U0FDcEI7UUFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLDBCQUEwQixDQUFDLEVBQUU7WUFDekMsTUFBTSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsUUFBUSxJQUFJLEtBQUssQ0FBQztTQUN0RTthQUFNLElBQUksTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUMsUUFBUSxFQUFFLEtBQUssS0FBSyxFQUFFO1lBQ3BFLE1BQU0sQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7U0FDdEM7YUFBTSxJQUFJLE1BQU0sQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNuRSxNQUFNLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO1NBQ3ZDO1FBRUQsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFO1lBQ2pCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsU0FBUyxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQztZQUNuSCxNQUFNLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQztTQUNuQztRQUNELElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtZQUNqQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUM7WUFDekgsTUFBTSxDQUFDLGNBQWMsR0FBRyxhQUFhLENBQUM7U0FDekM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDakIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLE1BQU0sQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUM7WUFDakksTUFBTSxDQUFDLHNCQUFzQixHQUFHLGFBQWEsQ0FBQztTQUNqRDtRQUNELElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtZQUNyQixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsMkJBQTJCLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxTQUFTLElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDO1lBQzlILE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLGFBQWEsQ0FBQztTQUM5QztRQUNELElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDMUMsTUFBTSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGlCQUFpQixDQUFDO1NBQzVEO0lBQ0wsQ0FBQztJQUVPLDJCQUEyQixDQUFDLFVBQWUsRUFBRSxhQUFxQjtRQUN0RSxJQUFJLFVBQVUsRUFBRTtZQUNoQixVQUFVLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hELE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFFLENBQUM7WUFDNUQsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDNUQ7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU8seUJBQXlCLENBQUMsR0FBUTtRQUN0QyxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLFVBQVUsQ0FBQzthQUNoRyxPQUFPLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxVQUFVLENBQUM7YUFDNUUsT0FBTyxDQUFDLGFBQWEsRUFBRSxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQzthQUM3RCxPQUFPLENBQUMscUJBQXFCLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUUsaUJBQWlCLENBQUM7YUFDckcsT0FBTyxDQUFDLHVCQUF1QixFQUFFLGlCQUFpQixDQUFDLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFLGlCQUFpQixDQUFDO2FBQ25HLE9BQU8sQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUM7YUFDdkQsT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUM3QixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxNQUFXLEVBQUUsS0FBYSxFQUFFLGVBQXdCLEVBQUUsSUFBVTtRQUN0RixJQUFJLEdBQUcsR0FBRyxLQUFLLENBQUM7UUFFaEIsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLGVBQWUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDOUUsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1NBQzlDO1FBRUQsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsSUFBSSxlQUFlLEVBQUU7WUFDckMsSUFBSSxLQUFLLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzFFLElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsSUFBSSxPQUFPLEdBQUcsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxVQUFVLEVBQUUsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25KLEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3JEO1FBRUQsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUM1QyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUUsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2pELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3JEO1FBQ0QsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUMzQyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDMUUsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2hELEdBQUcsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1NBQ3JEO1FBQ0QsSUFBSSxTQUFTLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQyxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUN6QyxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQyxDQUFD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QUF3QixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUM7U0FDOUYsQ0FDSixDQUFDO0lBQ04sQ0FBQztJQUVPLHdCQUF3QixDQUFDLE1BQWMsRUFBRSxNQUF1QjtRQUNwRSxNQUFNLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTSxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3RCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1YsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUNELE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDckMsSUFBSSxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQyxFQUFFO1lBQ25FLE9BQU8sR0FBRyxNQUFNLEdBQUcsT0FBTyxFQUFFLENBQUM7U0FDaEM7UUFDRCxPQUFPLE9BQU8sQ0FBQztJQUNuQixDQUFDO0lBRU0sV0FBVztRQUNkLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekQsT0FBTyxJQUFJLENBQUMsc0JBQXNCLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUNsRixDQUFDOzt1SEE5NEJRLHlCQUF5QjsySEFBekIseUJBQXlCOzRGQUF6Qix5QkFBeUI7a0JBRHJDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBVc2VyQ3JlYXRpb25BcGlTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NoYXJlZC9zZXJ2aWNlcy91c2VyLWNyZWF0aW9uLWFwaS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEFQSSB9IGZyb20gXCIuLi8uLi9hcHAuY29uc3RhbnRzXCI7XHJcbi8vIGltcG9ydCB7IEF2YWlsYWJsZVBob25lTnVtYmVyUmFuZ2VJbnRlcmZhY2UsIEF2YWlsYWJsZVJhbmdlSW50ZXJmYWNlLCBEblJhbmdlVHlwZSwgTGluZUludGVyZmFjZSB9IGZyb20gXCJwcm9qZWN0cy90dWtpL3dpZGdldHMvdXNlcnMtbGlzdC9zcmMvY2xhc3Nlcy9saW5lXCI7XHJcbmltcG9ydCB7IEFQSVNlcnZpY2UgfSBmcm9tIFwiLi4vLi4vc2hhcmVkL2FwaS9hcGkuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmb3JrSm9pbiwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgQmlnIGZyb20gXCJiaWcuanNcIjtcclxuaW1wb3J0IHsgU2l0ZURlZmF1bHRzIH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvc2l0ZVwiO1xyXG5pbXBvcnQgeyBTaXRlLCBTaXRlSW50ZXJmYWNlLCBTaXRlVGVtcGxhdGVJbnRlcmZhY2UgfSBmcm9tIFwiLi4vLi4vY2xhc3Nlcy9zaXRlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBEZXZpY2VFbnRyeSxcclxuICAgIEVuZFVzZXJJbnRlcmZhY2UsXHJcbiAgICBMaW5lT3B0aW9uLFxyXG4gICAgT3ZlcnZpZXdEZXZpY2VSb3csXHJcbiAgICBPdmVydmlld0xpbmVSb3csXHJcbiAgICBPdmVydmlld1VzZXJSb3csXHJcbiAgICBTZWxlY3RlZExpbmVSb3csXHJcbiAgICBUZW1wbGF0ZURldmljZUxpa2UsXHJcbiAgICBUZW1wbGF0ZUVuZFVzZXJMaWtlLFxyXG4gICAgVGVtcGxhdGVMaW5lTGlrZSxcclxuICAgIFVzZXJDcmVhdGlvblR5cGUsXHJcbiAgICBVc2VyRGV0YWlsc0Zvcm0sXHJcbiAgICBVc2VyRGV0YWlsc0Zvcm1WYWx1ZSxcclxuICAgIFVzZXJUZW1wbGF0ZUludGVyZmFjZSxcclxuICAgIExpbmVJbnRlcmZhY2UsXHJcbiAgICBEZXZpY2VJbnRlcmZhY2UsXHJcbiAgICBEZXZpY2VEZWZhdWx0c0ludGVyZmFjZSxcclxuICAgIEF2YWlsYWJsZVBob25lTnVtYmVyUmFuZ2VJbnRlcmZhY2UsXHJcbiAgICBBdmFpbGFibGVSYW5nZUludGVyZmFjZSxcclxuICAgIERuUmFuZ2VUeXBlLFxyXG4gICAgTGlzdFVzZXJJbnRlcmZhY2UsXHJcbiAgICBFbmRVc2VyLFxyXG59IGZyb20gXCIuLi8uLi9pbnRlcmZhY2VzL3VzZXItY3JlYXRpb24td2l6YXJkLmludGVyZmFjZXNcIjtcclxuaW1wb3J0IHsgYnVpbGRTYXZhYmxlRW5kVXNlciB9IGZyb20gXCIuLi8uLi91dGlscy9idWlsZC1zYXZhYmxlLWVuZC11c2VyXCI7XHJcbmltcG9ydCB7IGFwcGx5RGVmYXVsdERldmljZVByZWZpeElmTWlzc2luZyB9IGZyb20gXCIuLi8uLi91dGlscy9kZXZpY2UtZGVmYXVsdC1wcmVmaXhcIjtcclxuaW1wb3J0IHsgZGV2aWNlTmFtZUhhc0R5bmFtaWNUb2tlbnMgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZGV2aWNlLW5hbWUtZHluYW1pYy10b2tlbnNcIjtcclxuaW1wb3J0IHsgcGFyc2VEZXZpY2VOYW1lUmVnZXhCb2R5IH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhcnNlLWRldmljZS1uYW1lLXJ1bGVcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFVzZXJDcmVhdGlvbldpemFyZFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyQ3JlYXRpb25BcGlTZXJ2aWNlID0gaW5qZWN0KFVzZXJDcmVhdGlvbkFwaVNlcnZpY2UpO1xyXG5cclxuICAgIHJlYWRvbmx5IGxkYXBUYWJsZUNvbHVtbnM6IHN0cmluZ1tdID0gWyd1c2VySWQnLCAnZmlyc3ROYW1lJywgJ2xhc3ROYW1lJywgJ2VtYWlsJywgJ2FkZCddO1xyXG4gICAgcmVhZG9ubHkgdXNlckNyZWF0aW9uVHlwZXM6IFVzZXJDcmVhdGlvblR5cGVbXSA9IFsnQ1VDTScsICdNVCddO1xyXG5cclxuICAgIHByaXZhdGUgdGVtcGxhdGU6IFVzZXJUZW1wbGF0ZUludGVyZmFjZSB8IG51bGwgPSBudWxsO1xyXG4gICAgcHVibGljIGVuZFVzZXI6IEVuZFVzZXJJbnRlcmZhY2UgfCBudWxsID0gbnVsbDtcclxuICAgIHB1YmxpYyBsaW5lczogTGluZUludGVyZmFjZVtdID0gW107XHJcbiAgICBwdWJsaWMgZGV2aWNlczogRGV2aWNlSW50ZXJmYWNlW10gPSBbXTtcclxuICAgIHB1YmxpYyBkZXZpY2VQcm9maWxlczogRGV2aWNlSW50ZXJmYWNlW10gPSBbXTtcclxuICAgIHByaXZhdGUgdGVtcGxhdGVMaW5lc1NuYXBzaG90OiBMaW5lSW50ZXJmYWNlW10gfCBudWxsID0gbnVsbDtcclxuICAgIHByaXZhdGUgX2N1cnJlbnRTaXRlOiBTaXRlIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgZ2V0IGN1cnJlbnRTaXRlKCk6IFNpdGUgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFNpdGU7XHJcbiAgICB9XHJcblxyXG4gICAgc2l0ZU9wdGlvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICB0ZW1wbGF0ZU9wdGlvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICBsaW5lT3B0aW9uczogTGluZU9wdGlvbltdID0gW107XHJcbiAgICByb3V0ZVBhcnRpdGlvbk9wdGlvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICBkZXZpY2VSb3dzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgbGRhcFVzZXJzOiBMaXN0VXNlckludGVyZmFjZVtdID0gW107XHJcbiAgICBvdmVydmlld1VzZXJzOiBPdmVydmlld1VzZXJSb3dbXSA9IFtdO1xyXG4gICAgb3ZlcnZpZXdMaW5lczogT3ZlcnZpZXdMaW5lUm93W10gPSBbXTtcclxuICAgIG92ZXJ2aWV3RGV2aWNlczogT3ZlcnZpZXdEZXZpY2VSb3dbXSA9IFtdO1xyXG4gICAgb3ZlcnZpZXdEZXZpY2VQcm9maWxlczogT3ZlcnZpZXdEZXZpY2VSb3dbXSA9IFtdO1xyXG4gICAgdXNlckRldGFpbHNGb3JtVmFsdWU6IFVzZXJEZXRhaWxzRm9ybVZhbHVlIHwgbnVsbCA9IG51bGw7XHJcbiAgICB1c2VyRGV0YWlsc0Zvcm06IFVzZXJEZXRhaWxzRm9ybSA9IHtcclxuICAgICAgICB1c2VySWQ6ICcnLFxyXG4gICAgICAgIGZpcnN0TmFtZTogJycsXHJcbiAgICAgICAgbGFzdE5hbWU6ICcnLFxyXG4gICAgICAgIGVtYWlsOiAnJyxcclxuICAgIH07XHJcbiAgICBsaW5lU2VsZWN0aW9uczogU2VsZWN0ZWRMaW5lUm93W10gPSBbXTtcclxuICAgIGRldmljZUVudHJpZXM6IERldmljZUVudHJ5W10gPSBbXTtcclxuICAgIGF2YWlsYWJsZU51bWJlcnM6IHN0cmluZ1tdID0gW107XHJcbiAgICBkZXZpY2VUeXBlczogc3RyaW5nW10gPSBbXTtcclxuICAgIHNpdGVEZWZhdWx0czogU2l0ZURlZmF1bHRzIHwgbnVsbCA9IG51bGw7XHJcbiAgICBvcmlnaW5hbFNpdGVEZWZhdWx0czogU2l0ZURlZmF1bHRzIHwgbnVsbCA9IG51bGw7XHJcbiAgICB0ZW1wbGF0ZUxpbmVzOiBUZW1wbGF0ZUxpbmVMaWtlW10gPSBbXTtcclxuICAgIHRlbXBsYXRlRGV2aWNlczogVGVtcGxhdGVEZXZpY2VMaWtlW10gPSBbXTtcclxuICAgIHRlbXBsYXRlVXNlckRldGFpbHM6IFRlbXBsYXRlRW5kVXNlckxpa2UgPSB7fTtcclxuXHJcbiAgICBzZWxlY3RlZFNpdGU6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gICAgc2VsZWN0ZWRUZW1wbGF0ZU5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgc2VsZWN0ZWRUZW1wbGF0ZUlkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAgIHNlbGVjdGVkVXNlckNyZWF0aW9uVHlwZTogVXNlckNyZWF0aW9uVHlwZSA9ICdDVUNNJztcclxuICAgIGF2YWlsYWJsZURpZFBhdHRlcm5zTWFwcGVkVG9EbjogYW55ID0ge307XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXZpY2VEZWZhdWx0c0xvYWRlZFN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcmVhZG9ubHkgZGV2aWNlRGVmYXVsdHNMb2FkZWQkID0gdGhpcy5kZXZpY2VEZWZhdWx0c0xvYWRlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgZ2V0IGZpcnN0TGluZVJvdXRlUGFydGl0aW9uKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGluZXNbMF0/LmRpcmVjdG9yeU51bWJlcj8ucm91dGVQYXJ0aXRpb25OYW1lID8/ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzaXRlRGVmYXVsdFJvdXRlUGFydGl0aW9uKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZURlZmF1bHRzPy5yb3V0ZVBhcnRpdGlvbiB8fCAnJztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcm91dGVQYXJ0aXRpb25OYW1lc0xpc3QoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNpdGVEZWZhdWx0cyA/IHRoaXMuc2l0ZURlZmF1bHRzLnJvdXRlUGFydGl0aW9uRmlsdGVyIDogW107XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWRMZGFwVXNlcjogTGlzdFVzZXJJbnRlcmZhY2UgfCBudWxsID0gbnVsbDtcclxuICAgIGxkYXBVc2Vyc1RvdGFsID0gMDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICAvLyB0aGlzLmxvYWRQbGFjZWhvbGRlckRhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNMZGFwSW50ZWdyYXRlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLmVuZFVzZXI/LmxkYXBJbnRlZ3JhdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdExkYXBVc2VyKHVzZXI6IExpc3RVc2VySW50ZXJmYWNlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZExkYXBVc2VyID0gdXNlcjtcclxuICAgICAgICBpZiAodGhpcy5lbmRVc2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci5sZGFwSW50ZWdyYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci51c2VyaWQgPSB1c2VyLnVzZXJpZDtcclxuICAgICAgICAgICAgdGhpcy5lbmRVc2VyLmZpcnN0TmFtZSA9IHVzZXIuZmlyc3ROYW1lID8/ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIubGFzdE5hbWUgPSB1c2VyLmxhc3ROYW1lID8/ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIuZW1haWwgPSB1c2VyLmVtYWlsID8/ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybSA9IHtcclxuICAgICAgICAgICAgdXNlcklkOiB1c2VyLnVzZXJpZCxcclxuICAgICAgICAgICAgZmlyc3ROYW1lOiB1c2VyLmZpcnN0TmFtZSA/PyAnJyxcclxuICAgICAgICAgICAgbGFzdE5hbWU6IHVzZXIubGFzdE5hbWUgPz8gJycsXHJcbiAgICAgICAgICAgIGVtYWlsOiB1c2VyLmVtYWlsID8/ICcnLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdVc2VycygpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyTGRhcFVzZXJTZWxlY3Rpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZExkYXBVc2VyID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5lbmRVc2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci5sZGFwSW50ZWdyYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIudXNlcmlkID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci5maXJzdE5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5lbmRVc2VyLmxhc3ROYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci5lbWFpbCA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybSA9IHtcclxuICAgICAgICAgICAgdXNlcklkOiAnJyxcclxuICAgICAgICAgICAgZmlyc3ROYW1lOiAnJyxcclxuICAgICAgICAgICAgbGFzdE5hbWU6ICcnLFxyXG4gICAgICAgICAgICBlbWFpbDogJycsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnJlYnVpbGRPdmVydmlld1VzZXJzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNMZGFwVXNlclJvd1NlbGVjdGVkKHJvdzogTGlzdFVzZXJJbnRlcmZhY2UpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZExkYXBVc2VyPy51c2VyaWQgPT09IHJvdy51c2VyaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TGRhcFVzZXJzUmVzdWx0KHVzZXJzOiBMaXN0VXNlckludGVyZmFjZVtdLCB0b3RhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5sZGFwVXNlcnMgPSB1c2VycztcclxuICAgICAgICB0aGlzLmxkYXBVc2Vyc1RvdGFsID0gdG90YWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFNlbGVjdGVkU2l0ZShzaXRlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNpdGUgPSBzaXRlIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U2VsZWN0ZWRUZW1wbGF0ZSh0ZW1wbGF0ZT86IFVzZXJUZW1wbGF0ZUludGVyZmFjZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZU5hbWUgPSB0ZW1wbGF0ZT8ubmFtZSB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZUlkID0gdGVtcGxhdGU/LmlkIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdVc2VycygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRDdXJyZW50U2l0ZShzaXRlOiBTaXRlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fY3VycmVudFNpdGUgPSBzaXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0VGVtcGxhdGVEcml2ZW5EYXRhKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubGluZU9wdGlvbnMgPSBbXTtcclxuICAgICAgICB0aGlzLnJvdXRlUGFydGl0aW9uT3B0aW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMubGluZVNlbGVjdGlvbnMgPSBbXTtcclxuICAgICAgICB0aGlzLmRldmljZUVudHJpZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmRldmljZVJvd3MgPSBbXTtcclxuICAgICAgICB0aGlzLnJlYnVpbGRPdmVydmlld0xpbmVzKCk7XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdEZXZpY2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXBwbHlUZW1wbGF0ZVRva2VuUGF5bG9hZChwYXlsb2FkOiBVc2VyVGVtcGxhdGVJbnRlcmZhY2UpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlID0gdGhpcy5leHRyYWN0VGVtcGxhdGVGcm9tVG9rZW5QYXlsb2FkKHBheWxvYWQpO1xyXG4gICAgICAgIHRoaXMuZW5kVXNlciA9IG5ldyBFbmRVc2VyKHRoaXMudGVtcGxhdGU/LmVuZFVzZXIpO1xyXG4gICAgICAgIHRoaXMubGluZXMgPSB0aGlzLmVuZFVzZXIgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmVuZFVzZXIubGluZXMpID8gdGhpcy5lbmRVc2VyLmxpbmVzIDogW107XHJcbiAgICAgICAgdGhpcy5kZXZpY2VzID0gdGhpcy5lbmRVc2VyICYmIEFycmF5LmlzQXJyYXkodGhpcy5lbmRVc2VyLmRldmljZXMpID8gdGhpcy5lbmRVc2VyLmRldmljZXMgOiBbXTtcclxuICAgICAgICB0aGlzLmRldmljZVByb2ZpbGVzID0gdGhpcy5lbmRVc2VyICYmIEFycmF5LmlzQXJyYXkodGhpcy5lbmRVc2VyLmRldmljZVByb2ZpbGVzKSA/IHRoaXMuZW5kVXNlci5kZXZpY2VQcm9maWxlcyA6IFtdO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRUZW1wbGF0ZURuc05hbWVzRm9yTGluZXMoKTtcclxuXHJcbiAgICAgICAgLy8gdGhpcy51c2VyRGV0YWlsc0Zvcm0gPSB7XHJcbiAgICAgICAgLy8gICAgIHVzZXJJZDogdGhpcy52YWx1ZVRvU3RyaW5nKHRoaXMuZW5kVXNlcj8udXNlcmlkID8/ICcnKSxcclxuICAgICAgICAvLyAgICAgZmlyc3ROYW1lOiB0aGlzLnZhbHVlVG9TdHJpbmcodGhpcy5lbmRVc2VyPy5maXJzdE5hbWUgPz8gJycpLFxyXG4gICAgICAgIC8vICAgICBsYXN0TmFtZTogdGhpcy52YWx1ZVRvU3RyaW5nKHRoaXMuZW5kVXNlcj8ubGFzdE5hbWUgPz8gJycpLFxyXG4gICAgICAgIC8vICAgICBlbWFpbDogdGhpcy52YWx1ZVRvU3RyaW5nKHRoaXMuZW5kVXNlcj8uZW1haWwgPz8gJycpXHJcbiAgICAgICAgLy8gfTtcclxuXHJcbiAgICAgICAgLy8gY29uc3QgbWFwcGVkTGluZU9wdGlvbnM6IExpbmVPcHRpb25bXSA9IGxpbmVzRnJvbVRlbXBsYXRlXHJcbiAgICAgICAgLy8gICAgIC5tYXAobGluZSA9PiAoe1xyXG4gICAgICAgIC8vICAgICAgICAgbnVtYmVyOiB0aGlzLnZhbHVlVG9TdHJpbmcobGluZT8uZGlyZWN0b3J5TnVtYmVyPy5kaXJlY3RvcnlOdW1iZXIpLFxyXG4gICAgICAgIC8vICAgICAgICAgZGlkOiB0aGlzLnZhbHVlVG9TdHJpbmcobGluZT8uZGlkUGF0dGVybnM/LlswXT8ucGF0dGVybiB8fCBsaW5lPy5kaXJlY3RvcnlOdW1iZXI/LmRpcmVjdG9yeU51bWJlciksXHJcbiAgICAgICAgLy8gICAgICAgICBjc3M6IHRoaXMudmFsdWVUb1N0cmluZyhcclxuICAgICAgICAvLyAgICAgICAgICAgICB0eXBlb2YgbGluZT8uY2FsbGluZ1NlYXJjaFNwYWNlID09PSAnc3RyaW5nJ1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICA/IGxpbmUuY2FsbGluZ1NlYXJjaFNwYWNlXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIDogbGluZT8uY2FsbGluZ1NlYXJjaFNwYWNlPy5uYW1lXHJcbiAgICAgICAgLy8gICAgICAgICApLFxyXG4gICAgICAgIC8vICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMudmFsdWVUb1N0cmluZyhsaW5lPy5kZXNjcmlwdGlvbilcclxuICAgICAgICAvLyAgICAgfSkpXHJcbiAgICAgICAgLy8gICAgIC5maWx0ZXIobGluZSA9PiBsaW5lLm51bWJlci50cmltKCkubGVuZ3RoID4gMCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGV2aWNlcy5mb3JFYWNoKGRldmljZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdERldmljZVdpdGhTaXRlSW5mbyhkZXZpY2UpO1xyXG4gICAgICAgICAgICAvLyBhcHBseURlZmF1bHREZXZpY2VQcmVmaXhJZk1pc3NpbmcoZGV2aWNlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmRldmljZVByb2ZpbGVzLmZvckVhY2goZGV2aWNlID0+IHRoaXMuaW5pdERldmljZVdpdGhTaXRlSW5mbyhkZXZpY2UpKTtcclxuICAgICAgICB0aGlzLmxpbmVzLmZvckVhY2gobGluZSA9PiB0aGlzLmluaXRMaW5lV2l0aFNpdGVJbmZvKGxpbmUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYXB0dXJlVGVtcGxhdGVMaW5lc1NuYXBzaG90KCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2l0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWREZXZpY2VEZWZhdWx0c0ZvckRldmljZXModGhpcy5zZWxlY3RlZFNpdGUpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaWYgKG1hcHBlZExpbmVPcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgIC8vICAgICB0aGlzLmxpbmVPcHRpb25zID0gdGhpcy51bmlxdWVCeU51bWJlcihtYXBwZWRMaW5lT3B0aW9ucyk7XHJcbiAgICAgICAgLy8gICAgIHRoaXMubGluZVNlbGVjdGlvbnMgPSB0aGlzLmxpbmVPcHRpb25zLm1hcChsaW5lID0+ICh7XHJcbiAgICAgICAgLy8gICAgICAgICBsaW5lTnVtYmVyOiBsaW5lLm51bWJlcixcclxuICAgICAgICAvLyAgICAgICAgIHJvdXRlUGFydGl0aW9uTmFtZTogbGluZXNGcm9tVGVtcGxhdGUuZmluZChcclxuICAgICAgICAvLyAgICAgICAgICAgICBzb3VyY2UgPT4gKHNvdXJjZT8uZGlyZWN0b3J5TnVtYmVyPy5kaXJlY3RvcnlOdW1iZXIgfHwgJycpID09PSBsaW5lLm51bWJlclxyXG4gICAgICAgIC8vICAgICAgICAgKT8uZGlyZWN0b3J5TnVtYmVyPy5yb3V0ZVBhcnRpdGlvbk5hbWUgfHwgbnVsbFxyXG4gICAgICAgIC8vICAgICB9KSk7XHJcbiAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgY29uc3QgbGluZUFzc29jaWF0aW9ucyA9IGRldmljZXNGcm9tVGVtcGxhdGUuZmxhdE1hcChkZXZpY2UgPT4gZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMgfHwgW10pO1xyXG4gICAgICAgIC8vICAgICBjb25zdCBhc3NvY2lhdGVkTGluZU9wdGlvbnM6IExpbmVPcHRpb25bXSA9IGxpbmVBc3NvY2lhdGlvbnNcclxuICAgICAgICAvLyAgICAgICAgIC5tYXAoYXNzb2NpYXRpb24gPT4ge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IGFzc29jaWF0aW9uPy5kaXJlY3RvcnlOdW1iZXI/LmRpcmVjdG9yeU51bWJlciB8fCAnJztcclxuICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBudW1iZXIsXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIGRpZDogbnVtYmVyLFxyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBjc3M6ICcnLFxyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJydcclxuICAgICAgICAvLyAgICAgICAgICAgICB9O1xyXG4gICAgICAgIC8vICAgICAgICAgfSlcclxuICAgICAgICAvLyAgICAgICAgIC5maWx0ZXIobGluZSA9PiBsaW5lLm51bWJlci50cmltKCkubGVuZ3RoID4gMCk7XHJcblxyXG4gICAgICAgIC8vICAgICB0aGlzLmxpbmVPcHRpb25zID0gdGhpcy51bmlxdWVCeU51bWJlcihhc3NvY2lhdGVkTGluZU9wdGlvbnMpO1xyXG4gICAgICAgIC8vICAgICB0aGlzLmxpbmVTZWxlY3Rpb25zID0gdGhpcy5saW5lT3B0aW9ucy5tYXAobGluZSA9PiAoe1xyXG4gICAgICAgIC8vICAgICAgICAgbGluZU51bWJlcjogbGluZS5udW1iZXIsXHJcbiAgICAgICAgLy8gICAgICAgICByb3V0ZVBhcnRpdGlvbk5hbWU6IGxpbmVBc3NvY2lhdGlvbnMuZmluZChcclxuICAgICAgICAvLyAgICAgICAgICAgICBzb3VyY2UgPT4gKHNvdXJjZT8uZGlyZWN0b3J5TnVtYmVyPy5kaXJlY3RvcnlOdW1iZXIgfHwgJycpID09PSBsaW5lLm51bWJlclxyXG4gICAgICAgIC8vICAgICAgICAgKT8uZGlyZWN0b3J5TnVtYmVyPy5yb3V0ZVBhcnRpdGlvbk5hbWUgfHwgbnVsbFxyXG4gICAgICAgIC8vICAgICB9KSk7XHJcblxyXG4gICAgICAgIC8vICAgICB0aGlzLnRlbXBsYXRlTGluZXMuZm9yRWFjaCgobGluZTogYW55KSA9PiB0aGlzLmluaXRMaW5lV2l0aFNpdGVJbmZvKGxpbmUpKTtcclxuICAgICAgICAvLyAgICAgdGhpcy5pbml0VGVtcGxhdGVEbnNOYW1lc0ZvckxpbmVzKHRoaXMudGVtcGxhdGVMaW5lcyk7XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAvLyBjb25zdCByb3V0ZVBhcnRpdGlvbnMgPSB0aGlzLmxpbmVTZWxlY3Rpb25zXHJcbiAgICAgICAgLy8gICAgIC5tYXAobGluZSA9PiBsaW5lLnJvdXRlUGFydGl0aW9uTmFtZSlcclxuICAgICAgICAvLyAgICAgLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gISF2YWx1ZSAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID4gMCk7XHJcbiAgICAgICAgLy8gdGhpcy5yb3V0ZVBhcnRpdGlvbk9wdGlvbnMgPSB0aGlzLnVuaXF1ZVN0cmluZ3Mocm91dGVQYXJ0aXRpb25zKTtcclxuXHJcbiAgICAgICAgLy8gdGhpcy5kZXZpY2VFbnRyaWVzID0gZGV2aWNlc0Zyb21UZW1wbGF0ZS5tYXAoZGV2aWNlID0+ICh7XHJcbiAgICAgICAgLy8gICAgIGRldmljZVR5cGU6IHRoaXMudmFsdWVUb1N0cmluZyhkZXZpY2UuZGV2aWNlVHlwZSksXHJcbiAgICAgICAgLy8gICAgIHByb3RvY29sOiB0aGlzLnZhbHVlVG9TdHJpbmcoZGV2aWNlLnByb3RvY29sKSxcclxuICAgICAgICAvLyAgICAgYnV0dG9uVGVtcGxhdGU6IHRoaXMudmFsdWVUb1N0cmluZyhkZXZpY2UuYnV0dG9uVGVtcGxhdGUpLFxyXG4gICAgICAgIC8vICAgICBuYW1lOiB0aGlzLnZhbHVlVG9TdHJpbmcoZGV2aWNlLm5hbWUpXHJcbiAgICAgICAgLy8gfSkpO1xyXG4gICAgICAgIC8vIHRoaXMuZGV2aWNlUm93cyA9IHRoaXMuZGV2aWNlRW50cmllcy5tYXAoKF8sIGluZGV4KSA9PiBpbmRleCArIDEpO1xyXG5cclxuICAgICAgICAvLyB0aGlzLnJlYnVpbGRPdmVydmlld1VzZXJzKCk7XHJcbiAgICAgICAgLy8gdGhpcy5yZWJ1aWxkT3ZlcnZpZXdMaW5lcygpO1xyXG4gICAgICAgIC8vIHRoaXMucmVidWlsZE92ZXJ2aWV3RGV2aWNlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFNlbGVjdGVkVXNlckNyZWF0aW9uVHlwZSh0eXBlOiBVc2VyQ3JlYXRpb25UeXBlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJDcmVhdGlvblR5cGUgPSB0eXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldFVzZXJEZXRhaWxzU3RlcFN0YXRlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtVmFsdWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtID0ge1xyXG4gICAgICAgICAgICB1c2VySWQ6ICcnLFxyXG4gICAgICAgICAgICBmaXJzdE5hbWU6ICcnLFxyXG4gICAgICAgICAgICBsYXN0TmFtZTogJycsXHJcbiAgICAgICAgICAgIGVtYWlsOiAnJyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMZGFwVXNlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5sZGFwVXNlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLmxkYXBVc2Vyc1RvdGFsID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGVtcGxhdGVMaW5lc1NuYXBzaG90KSB7XHJcbiAgICAgICAgICAgIHRoaXMubGluZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMudGVtcGxhdGVMaW5lc1NuYXBzaG90KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aGlzLmRldmljZXMuZm9yRWFjaChkZXZpY2UgPT4ge1xyXG4gICAgICAgIC8vICAgICBkZXZpY2UubmFtZSA9ICcnO1xyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICAgIC8vIHRoaXMuZGV2aWNlUHJvZmlsZXMuZm9yRWFjaChwcm9maWxlID0+IHtcclxuICAgICAgICAvLyAgICAgcHJvZmlsZS5uYW1lID0gJyc7XHJcbiAgICAgICAgLy8gfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVuZFVzZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5lbmRVc2VyLnVzZXJpZCA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIuZmlyc3ROYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci5sYXN0TmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIuZW1haWwgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5lbmRVc2VyLmxkYXBJbnRlZ3JhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci5saW5lcyA9IHRoaXMubGluZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm92ZXJ2aWV3VXNlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLnJlYnVpbGRPdmVydmlld0xpbmVzKCk7XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdEZXZpY2VzKCk7XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdEZXZpY2VQcm9maWxlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FwdHVyZVRlbXBsYXRlTGluZXNTbmFwc2hvdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlTGluZXNTbmFwc2hvdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5saW5lcykpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFVzZXJEZXRhaWxzRmllbGQoZmllbGQ6IGtleW9mIFVzZXJEZXRhaWxzRm9ybSwgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLnVzZXJEZXRhaWxzRm9ybSxcclxuICAgICAgICAgICAgW2ZpZWxkXTogdmFsdWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3VXNlcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBhcHBseVVzZXJEZXRhaWxzRm9ybVZhbHVlKGZvcm1WYWx1ZTogVXNlckRldGFpbHNGb3JtVmFsdWUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybVZhbHVlID0gZm9ybVZhbHVlO1xyXG4gICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtID0ge1xyXG4gICAgICAgICAgICB1c2VySWQ6IGZvcm1WYWx1ZS51c2VySWQgfHwgJycsXHJcbiAgICAgICAgICAgIGZpcnN0TmFtZTogZm9ybVZhbHVlLmZpcnN0TmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgbGFzdE5hbWU6IGZvcm1WYWx1ZS5sYXN0TmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgZW1haWw6IGZvcm1WYWx1ZS5lbWFpbCB8fCAnJyxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBmb3JtVmFsdWUubGluZXM/LmZvckVhY2goKGxpbmVWYWx1ZSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbGluZSA9IHRoaXMubGluZXNbaW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoIWxpbmU/LmRpcmVjdG9yeU51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxpbmUuZGlyZWN0b3J5TnVtYmVyLmRpcmVjdG9yeU51bWJlciA9IGxpbmVWYWx1ZS5udW1iZXIgfHwgJyc7XHJcbiAgICAgICAgICAgIGxpbmUuZGlyZWN0b3J5TnVtYmVyLnJvdXRlUGFydGl0aW9uTmFtZSA9IGxpbmVWYWx1ZS5yb3V0ZVBhcnRpdGlvbiB8fCAnJztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZm9ybVZhbHVlLmRldmljZXM/LmZvckVhY2goKGRldmljZVZhbHVlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBkZXZpY2UgPSB0aGlzLmRldmljZXNbaW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoIWRldmljZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRldmljZS5uYW1lID0gZGV2aWNlVmFsdWUubmFtZSB8fCAnJztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZm9ybVZhbHVlLmRldmljZVByb2ZpbGVzPy5mb3JFYWNoKChwcm9maWxlVmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb2ZpbGUgPSB0aGlzLmRldmljZVByb2ZpbGVzW2luZGV4XTtcclxuICAgICAgICAgICAgaWYgKCFwcm9maWxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJvZmlsZS5uYW1lID0gcHJvZmlsZVZhbHVlLm5hbWUgfHwgJyc7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVuZFVzZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5lbmRVc2VyLnVzZXJpZCA9IGZvcm1WYWx1ZS51c2VySWQgfHwgJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci5maXJzdE5hbWUgPSBmb3JtVmFsdWUuZmlyc3ROYW1lIHx8ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIubGFzdE5hbWUgPSBmb3JtVmFsdWUubGFzdE5hbWUgfHwgJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci5lbWFpbCA9IGZvcm1WYWx1ZS5lbWFpbCB8fCAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3VXNlcnMoKTtcclxuICAgICAgICB0aGlzLnJlYnVpbGRPdmVydmlld0xpbmVzKCk7XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdEZXZpY2VzKCk7XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdEZXZpY2VQcm9maWxlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldExpbmVTZWxlY3Rpb24oaW5kZXg6IG51bWJlciwgbGluZU51bWJlcjogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5saW5lU2VsZWN0aW9uc1tpbmRleF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxpbmVTZWxlY3Rpb25zW2luZGV4XSA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5saW5lU2VsZWN0aW9uc1tpbmRleF0sXHJcbiAgICAgICAgICAgIGxpbmVOdW1iZXJcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3TGluZXMoKTtcclxuICAgICAgICB0aGlzLnJlYnVpbGRPdmVydmlld0RldmljZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRSb3V0ZVBhcnRpdGlvblNlbGVjdGlvbihpbmRleDogbnVtYmVyLCByb3V0ZVBhcnRpdGlvbk5hbWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMubGluZVNlbGVjdGlvbnNbaW5kZXhdKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5saW5lU2VsZWN0aW9uc1tpbmRleF0gPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMubGluZVNlbGVjdGlvbnNbaW5kZXhdLFxyXG4gICAgICAgICAgICByb3V0ZVBhcnRpdGlvbk5hbWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3TGluZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXREZXZpY2VOYW1lKGluZGV4OiBudW1iZXIsIG5hbWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5kZXZpY2VFbnRyaWVzW2luZGV4XSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRldmljZVR5cGUgPSB0aGlzLmRldmljZUVudHJpZXNbaW5kZXhdLmRldmljZVR5cGUgfHwgJyc7XHJcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZE5hbWUgPSBkZXZpY2VUeXBlLmluY2x1ZGVzKCc4ODUxJylcclxuICAgICAgICAgICAgPyBuYW1lLnJlcGxhY2UoL15TRVBcXHMqL2ksICcnKVxyXG4gICAgICAgICAgICA6IG5hbWU7XHJcbiAgICAgICAgdGhpcy5kZXZpY2VFbnRyaWVzW2luZGV4XSA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5kZXZpY2VFbnRyaWVzW2luZGV4XSxcclxuICAgICAgICAgICAgbmFtZTogbm9ybWFsaXplZE5hbWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3RGV2aWNlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERldmljZURpc3BsYXlOYW1lKGluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5kZXZpY2VFbnRyaWVzW2luZGV4XTtcclxuICAgICAgICBpZiAoIWVudHJ5KSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChlbnRyeS5kZXZpY2VUeXBlPy5pbmNsdWRlcygnODg1MScpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgU0VQICR7ZW50cnkubmFtZSB8fCAnJ31gO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGluZGV4ID09PSAxKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxpbmVOdW1iZXIgPSB0aGlzLmxpbmVTZWxlY3Rpb25zWzBdPy5saW5lTnVtYmVyO1xyXG4gICAgICAgICAgICByZXR1cm4gbGluZU51bWJlciA/IGBDU0Yke2xpbmVOdW1iZXJ9YCA6ICdDU0ZbRE5dJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBlbnRyeS5uYW1lIHx8ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTaXRlQWxsRGF0YShzaXRlSWQ6IG51bWJlcik6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudXNlckNyZWF0aW9uQXBpU2VydmljZS5nZXRTaXRlQWxsRGF0YShzaXRlSWQpLnBpcGUoXHJcbiAgICAgICAgICAgIHRhcCgocmVzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2l0ZSA9IG5ldyBTaXRlKHJlc1swXSBhcyBTaXRlSW50ZXJmYWNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkU2l0ZSA9IHNpdGUuaWQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzICYmIHJlc1sxXSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2l0ZURlZmF1bHRzID0gbmV3IFNpdGVEZWZhdWx0cyhyZXNbMV0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm9yaWdpbmFsU2l0ZURlZmF1bHRzID0gbmV3IFNpdGVEZWZhdWx0cyhyZXNbMV0sIGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlUGFydGl0aW9uT3B0aW9ucyA9IFsuLi50aGlzLnJvdXRlUGFydGl0aW9uTmFtZXNMaXN0XTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzWzJdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXZpY2VUeXBlcyA9IHJlc1syXSBhcyBzdHJpbmdbXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChyZXMgPT5cclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZERldmljZURlZmF1bHRzRm9yRGV2aWNlcyhzaXRlSWQpLnBpcGUobWFwKCgpID0+IHJlcykpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBsb2FkRGV2aWNlRGVmYXVsdHNGb3JEZXZpY2VzKHNpdGVJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICAgY29uc3QgZGV2aWNlVHlwZXMgPSB0aGlzLmdldFVuaXF1ZURldmljZVR5cGVzKCk7XHJcbiAgICAgICAgaWYgKCFkZXZpY2VUeXBlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCByZXF1ZXN0cyA9IGRldmljZVR5cGVzLm1hcChkZXZpY2VUeXBlID0+XHJcbiAgICAgICAgICAgIHRoaXMudXNlckNyZWF0aW9uQXBpU2VydmljZS5nZXREZXZpY2VEZWZhdWx0cyhTdHJpbmcoc2l0ZUlkKSwgZGV2aWNlVHlwZSkucGlwZShcclxuICAgICAgICAgICAgICAgIHRhcChkZWZhdWx0cyA9PiB0aGlzLmFwcGx5RGV2aWNlRGVmYXVsdHNUb1R5cGUoZGV2aWNlVHlwZSwgZGVmYXVsdHMpKSxcclxuICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YobnVsbCkpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gZm9ya0pvaW4ocmVxdWVzdHMpLnBpcGUoXHJcbiAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLmRldmljZURlZmF1bHRzTG9hZGVkU3ViamVjdC5uZXh0KCkpLFxyXG4gICAgICAgICAgICBtYXAoKCkgPT4gdW5kZWZpbmVkKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRVbmlxdWVEZXZpY2VUeXBlcygpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgY29uc3QgdHlwZXMgPSBbXHJcbiAgICAgICAgICAgIC4uLnRoaXMuZGV2aWNlcy5tYXAoZGV2aWNlID0+IGRldmljZS5kZXZpY2VUeXBlKSxcclxuICAgICAgICAgICAgLi4udGhpcy5kZXZpY2VQcm9maWxlcy5tYXAocHJvZmlsZSA9PiBwcm9maWxlLmRldmljZVR5cGUpLFxyXG4gICAgICAgIF0uZmlsdGVyKCh0eXBlKTogdHlwZSBpcyBzdHJpbmcgPT4gISF0eXBlICYmIHR5cGUudHJpbSgpLmxlbmd0aCA+IDApO1xyXG4gICAgICAgIHJldHVybiBbLi4ubmV3IFNldCh0eXBlcyldO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXBwbHlEZXZpY2VEZWZhdWx0c1RvVHlwZShkZXZpY2VUeXBlOiBzdHJpbmcsIGRlZmF1bHRzOiBEZXZpY2VEZWZhdWx0c0ludGVyZmFjZSk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IG5hbWVWYWxpZGF0aW9uUmVnZXggPSBwYXJzZURldmljZU5hbWVSZWdleEJvZHkoZGVmYXVsdHMuZGV2aWNlTmFtZVJlZ2V4KTtcclxuICAgICAgICBjb25zdCB0YXJnZXRzID0gWy4uLnRoaXMuZGV2aWNlcywgLi4udGhpcy5kZXZpY2VQcm9maWxlc10uZmlsdGVyKFxyXG4gICAgICAgICAgICBkZXZpY2UgPT4gZGV2aWNlLmRldmljZVR5cGUgPT09IGRldmljZVR5cGVcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0YXJnZXRzLmZvckVhY2goZGV2aWNlID0+IHtcclxuICAgICAgICAgICAgZGV2aWNlLmRldmljZURlZmF1bHRzID0gZGVmYXVsdHM7XHJcbiAgICAgICAgICAgIGRldmljZS5uYW1lVmFsaWRhdGlvblJlZ2V4ID0gbmFtZVZhbGlkYXRpb25SZWdleDtcclxuICAgICAgICAgICAgZGV2aWNlLm5hbWVWYWxpZGF0aW9uQ2FwdGlvbiA9IGRlZmF1bHRzLmRldmljZU5hbWVFeHBsYWluZWQ7XHJcbiAgICAgICAgICAgIGFwcGx5RGVmYXVsdERldmljZVByZWZpeElmTWlzc2luZyhkZXZpY2UsIGRlZmF1bHRzKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREZXZpY2VOYW1lUHJlZml4KGRldmljZUluZGV4OiBudW1iZXIsIGlzUHJvZmlsZSA9IGZhbHNlKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgY29uc3QgZGV2aWNlID0gaXNQcm9maWxlID8gdGhpcy5kZXZpY2VQcm9maWxlc1tkZXZpY2VJbmRleF0gOiB0aGlzLmRldmljZXNbZGV2aWNlSW5kZXhdO1xyXG4gICAgICAgIGNvbnN0IHByZWZpeCA9IGRldmljZT8ucHJlZml4Py50cmltKCk7XHJcbiAgICAgICAgcmV0dXJuIHByZWZpeCB8fCBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERldmljZU5hbWVWYWxpZGF0aW9uQ2FwdGlvbihkZXZpY2VJbmRleDogbnVtYmVyLCBpc1Byb2ZpbGUgPSBmYWxzZSk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgZGV2aWNlID0gaXNQcm9maWxlID8gdGhpcy5kZXZpY2VQcm9maWxlc1tkZXZpY2VJbmRleF0gOiB0aGlzLmRldmljZXNbZGV2aWNlSW5kZXhdO1xyXG4gICAgICAgIHJldHVybiBkZXZpY2U/Lm5hbWVWYWxpZGF0aW9uQ2FwdGlvbiB8fCBkZXZpY2U/LmRldmljZURlZmF1bHRzPy5kZXZpY2VOYW1lRXhwbGFpbmVkIHx8ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERldmljZU5hbWVWYWxpZGF0aW9uT3B0aW9ucyhkZXZpY2VJbmRleDogbnVtYmVyLCBpc1Byb2ZpbGUgPSBmYWxzZSk6IHtcclxuICAgICAgICByZWdleDogc3RyaW5nO1xyXG4gICAgICAgIGNhcHRpb246IHN0cmluZztcclxuICAgIH0gfCBudWxsIHtcclxuICAgICAgICBjb25zdCBkZXZpY2UgPSBpc1Byb2ZpbGUgPyB0aGlzLmRldmljZVByb2ZpbGVzW2RldmljZUluZGV4XSA6IHRoaXMuZGV2aWNlc1tkZXZpY2VJbmRleF07XHJcbiAgICAgICAgY29uc3QgcmVnZXggPVxyXG4gICAgICAgICAgICBkZXZpY2U/Lm5hbWVWYWxpZGF0aW9uUmVnZXg/LnRyaW0oKSB8fFxyXG4gICAgICAgICAgICBwYXJzZURldmljZU5hbWVSZWdleEJvZHkoZGV2aWNlPy5kZXZpY2VEZWZhdWx0cz8uZGV2aWNlTmFtZVJlZ2V4KTtcclxuICAgICAgICBpZiAoIXJlZ2V4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICByZWdleCxcclxuICAgICAgICAgICAgY2FwdGlvbjogdGhpcy5nZXREZXZpY2VOYW1lVmFsaWRhdGlvbkNhcHRpb24oZGV2aWNlSW5kZXgsIGlzUHJvZmlsZSksXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TnVtYmVyUmFuZ2Uoc2l0ZUlkOiBzdHJpbmcsIHJvdXRlUGFydGl0aW9uOiBzdHJpbmcpOiBPYnNlcnZhYmxlPEF2YWlsYWJsZVJhbmdlSW50ZXJmYWNlPiB7XHJcbiAgICAgICAgdGhpcy5hdmFpbGFibGVEaWRQYXR0ZXJuc01hcHBlZFRvRG4gPSB7fTtcclxuICAgICAgICBjb25zdCBwYWdlU2l6ZSA9IDk5OTk7XHJcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge2RudHlwZTogRG5SYW5nZVR5cGUuZXh0ZW5zaW9uLCByb3V0ZXBhcnRpdGlvbjogcm91dGVQYXJ0aXRpb24sIHNpemU6IHBhZ2VTaXplLCBwYWdlOiAwfTtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZU51bWJlcnMgPSBbXTtcclxuICAgICAgICByZXR1cm4gdGhpcy51c2VyQ3JlYXRpb25BcGlTZXJ2aWNlLmdldEF2YWlsYWJsZURuSW5SYW5nZXMoc2l0ZUlkLCBwYXJhbXMpXHJcbiAgICAgICAgLnBpcGUobWFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICByZXMuYXZhaWxhYmxlTnVtYmVyTGlzdC5mb3JFYWNoKChhdmFpbGFibGVOdW1iZXI6IEF2YWlsYWJsZVBob25lTnVtYmVyUmFuZ2VJbnRlcmZhY2UpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0QXZhaWxhYmxlRGlkTWFwcGVkVG9EbihhdmFpbGFibGVOdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVOdW1iZXJzID0gWy4uLnRoaXMuYXZhaWxhYmxlTnVtYmVycywgLi4udGhpcy5nZXRVbndyYXBOdW1iZXJSYW5nZShhdmFpbGFibGVOdW1iZXIpXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC8vIC5waXBlKHRoaXMuaGFuZGxlRXJyb3IodHJ1ZSwgZmFsc2UpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlYnVpbGRPdmVydmlld1VzZXJzKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHVzZXJUZW1wbGF0ZSA9IHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZU5hbWUgfHwgJyc7XHJcbiAgICAgICAgY29uc3QgaGFzVXNlckRhdGEgPSBPYmplY3QudmFsdWVzKHRoaXMudXNlckRldGFpbHNGb3JtKS5zb21lKHZhbHVlID0+IHZhbHVlLnRyaW0oKS5sZW5ndGggPiAwKTtcclxuICAgICAgICB0aGlzLm92ZXJ2aWV3VXNlcnMgPSBoYXNVc2VyRGF0YVxyXG4gICAgICAgICAgICA/IFt7XHJcbiAgICAgICAgICAgICAgICB1c2VySWQ6IHRoaXMudXNlckRldGFpbHNGb3JtLnVzZXJJZCxcclxuICAgICAgICAgICAgICAgIGZpcnN0TmFtZTogdGhpcy51c2VyRGV0YWlsc0Zvcm0uZmlyc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgbGFzdE5hbWU6IHRoaXMudXNlckRldGFpbHNGb3JtLmxhc3ROYW1lLFxyXG4gICAgICAgICAgICAgICAgZW1haWw6IHRoaXMudXNlckRldGFpbHNGb3JtLmVtYWlsLFxyXG4gICAgICAgICAgICAgICAgdXNlclRlbXBsYXRlXHJcbiAgICAgICAgICAgIH1dXHJcbiAgICAgICAgICAgIDogW107XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWJ1aWxkT3ZlcnZpZXdMaW5lcygpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBmb3JtTGluZXMgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybVZhbHVlPy5saW5lcztcclxuICAgICAgICBpZiAoZm9ybUxpbmVzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5vdmVydmlld0xpbmVzID0gZm9ybUxpbmVzXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGxpbmUgPT4gISFsaW5lPy5udW1iZXI/LnRyaW0oKSlcclxuICAgICAgICAgICAgICAgIC5tYXAoKGxpbmVWYWx1ZSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZUxpbmUgPSB0aGlzLmxpbmVzW2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjc3MgPSB0aGlzLnZhbHVlVG9TdHJpbmcodGVtcGxhdGVMaW5lPy5jYWxsaW5nU2VhcmNoU3BhY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlcjogbGluZVZhbHVlLm51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlkOiBsaW5lVmFsdWUubGluZU51bWJlciB8fCBsaW5lVmFsdWUubnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZVBhcnRpdGlvbk5hbWU6IGxpbmVWYWx1ZS5yb3V0ZVBhcnRpdGlvbiB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3NzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy52YWx1ZVRvU3RyaW5nKHRlbXBsYXRlTGluZT8uZGVzY3JpcHRpb24pLFxyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vdmVydmlld0xpbmVzID0gdGhpcy5saW5lU2VsZWN0aW9uc1xyXG4gICAgICAgICAgICAubWFwKHNlbGVjdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdGlvbj8ubGluZU51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRMaW5lID0gdGhpcy5saW5lT3B0aW9ucy5maW5kKGxpbmUgPT4gbGluZS5udW1iZXIgPT09IHNlbGVjdGlvbi5saW5lTnVtYmVyKTtcclxuICAgICAgICAgICAgICAgIGlmICghc2VsZWN0ZWRMaW5lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG51bWJlcjogc2VsZWN0ZWRMaW5lLm51bWJlcixcclxuICAgICAgICAgICAgICAgICAgICBkaWQ6IHNlbGVjdGVkTGluZS5kaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgcm91dGVQYXJ0aXRpb25OYW1lOiBzZWxlY3Rpb24ucm91dGVQYXJ0aXRpb25OYW1lIHx8IHRoaXMucm91dGVQYXJ0aXRpb25PcHRpb25zWzBdIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNzczogc2VsZWN0ZWRMaW5lLmNzcyxcclxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogc2VsZWN0ZWRMaW5lLmRlc2NyaXB0aW9uXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuZmlsdGVyKChsaW5lKTogbGluZSBpcyBPdmVydmlld0xpbmVSb3cgPT4gISFsaW5lKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlYnVpbGRPdmVydmlld0RldmljZXMoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRMaW5lTnVtYmVycyA9IHRoaXMub3ZlcnZpZXdMaW5lcy5tYXAobGluZSA9PiBsaW5lLm51bWJlcikuam9pbignLCAnKTtcclxuICAgICAgICBjb25zdCBmb3JtRGV2aWNlcyA9IHRoaXMudXNlckRldGFpbHNGb3JtVmFsdWU/LmRldmljZXM7XHJcbiAgICAgICAgaWYgKGZvcm1EZXZpY2VzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5vdmVydmlld0RldmljZXMgPSBmb3JtRGV2aWNlc1xyXG4gICAgICAgICAgICAgICAgLmZpbHRlcihkZXZpY2UgPT4gISFkZXZpY2UuZGV2aWNlVHlwZT8udHJpbSgpIHx8ICEhZGV2aWNlLm5hbWU/LnRyaW0oKSlcclxuICAgICAgICAgICAgICAgIC5tYXAoZGV2aWNlID0+ICh7XHJcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogZGV2aWNlLm5hbWUgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgZGV2aWNlVHlwZTogZGV2aWNlLmRldmljZVR5cGUgfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgbGluZXM6IHNlbGVjdGVkTGluZU51bWJlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke2RldmljZS5wcm90b2NvbCB8fCAnJ30gLyAke2RldmljZS5idXR0b25UZW1wbGF0ZSB8fCAnJ31gLnRyaW0oKSxcclxuICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vdmVydmlld0RldmljZXMgPSB0aGlzLmRldmljZUVudHJpZXNcclxuICAgICAgICAgICAgLm1hcCgoZGV2aWNlLCBpbmRleCkgPT4gKHtcclxuICAgICAgICAgICAgICAgIGRldmljZSxcclxuICAgICAgICAgICAgICAgIGRpc3BsYXlOYW1lOiB0aGlzLmdldERldmljZURpc3BsYXlOYW1lKGluZGV4KVxyXG4gICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgLmZpbHRlcigoeyBkZXZpY2UsIGRpc3BsYXlOYW1lIH0pID0+IGRpc3BsYXlOYW1lLnRyaW0oKS5sZW5ndGggPiAwIHx8IGRldmljZS5kZXZpY2VUeXBlLnRyaW0oKS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICAubWFwKCh7IGRldmljZSwgZGlzcGxheU5hbWUgfSkgPT4gKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IGRpc3BsYXlOYW1lLFxyXG4gICAgICAgICAgICAgICAgZGV2aWNlVHlwZTogZGV2aWNlLmRldmljZVR5cGUsXHJcbiAgICAgICAgICAgICAgICBsaW5lczogc2VsZWN0ZWRMaW5lTnVtYmVycyxcclxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgJHtkZXZpY2UucHJvdG9jb2x9IC8gJHtkZXZpY2UuYnV0dG9uVGVtcGxhdGV9YFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZWJ1aWxkT3ZlcnZpZXdEZXZpY2VQcm9maWxlcygpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZExpbmVOdW1iZXJzID0gdGhpcy5vdmVydmlld0xpbmVzLm1hcChsaW5lID0+IGxpbmUubnVtYmVyKS5qb2luKCcsICcpO1xyXG4gICAgICAgIGNvbnN0IGZvcm1Qcm9maWxlcyA9IHRoaXMudXNlckRldGFpbHNGb3JtVmFsdWU/LmRldmljZVByb2ZpbGVzO1xyXG4gICAgICAgIGlmICghZm9ybVByb2ZpbGVzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgdGhpcy5vdmVydmlld0RldmljZVByb2ZpbGVzID0gW107XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMub3ZlcnZpZXdEZXZpY2VQcm9maWxlcyA9IGZvcm1Qcm9maWxlc1xyXG4gICAgICAgICAgICAuZmlsdGVyKHByb2ZpbGUgPT4gISFwcm9maWxlLmRldmljZVR5cGU/LnRyaW0oKSB8fCAhIXByb2ZpbGUubmFtZT8udHJpbSgpKVxyXG4gICAgICAgICAgICAubWFwKHByb2ZpbGUgPT4gKHtcclxuICAgICAgICAgICAgICAgIG5hbWU6IHByb2ZpbGUubmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgICAgIGRldmljZVR5cGU6IHByb2ZpbGUuZGV2aWNlVHlwZSB8fCAnJyxcclxuICAgICAgICAgICAgICAgIGxpbmVzOiBzZWxlY3RlZExpbmVOdW1iZXJzLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke3Byb2ZpbGUucHJvdG9jb2wgfHwgJyd9IC8gJHtwcm9maWxlLmJ1dHRvblRlbXBsYXRlIHx8ICcnfWAudHJpbSgpLFxyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBleHRyYWN0VGVtcGxhdGVGcm9tVG9rZW5QYXlsb2FkKHBheWxvYWQ6IGFueSk6IGFueSB7XHJcbiAgICAgICAgaWYgKCFwYXlsb2FkIHx8IHR5cGVvZiBwYXlsb2FkICE9PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF5bG9hZCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBheWxvYWRbMF0gfHwgbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZmlyc3RLZXkgPSBPYmplY3Qua2V5cyhwYXlsb2FkKVswXTtcclxuICAgICAgICByZXR1cm4gZmlyc3RLZXkgPyBwYXlsb2FkW2ZpcnN0S2V5XSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1bmlxdWVCeU51bWJlcihsaW5lczogTGluZU9wdGlvbltdKTogTGluZU9wdGlvbltdIHtcclxuICAgICAgICBjb25zdCBzZWVuID0gbmV3IFNldDxzdHJpbmc+KCk7XHJcbiAgICAgICAgcmV0dXJuIGxpbmVzLmZpbHRlcihsaW5lID0+IHtcclxuICAgICAgICAgICAgaWYgKHNlZW4uaGFzKGxpbmUubnVtYmVyKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNlZW4uYWRkKGxpbmUubnVtYmVyKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB1bmlxdWVTdHJpbmdzKGl0ZW1zOiBzdHJpbmdbXSk6IHN0cmluZ1tdIHtcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGl0ZW1zKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB2YWx1ZVRvU3RyaW5nKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRVbndyYXBOdW1iZXJSYW5nZShhdmFpbGFibGVOdW1iZXI6IGFueSk6IHN0cmluZ1tdIHtcclxuICAgICAgICBsZXQgdW53cmFwTnVtYmVyUmFuZ2UgPSB0aGlzLnVud3JhcE51bWJlclJhbmdlKGF2YWlsYWJsZU51bWJlci5waG9uZU51bWJlclJhbmdlLmZyb20sIGF2YWlsYWJsZU51bWJlci5waG9uZU51bWJlclJhbmdlLnRvKVxyXG4gICAgICAgICAgICAubWFwKCh1bndyYXBwZWROdW1iZXI6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBkbiA9IGF2YWlsYWJsZU51bWJlci5waG9uZU51bWJlclJhbmdlLnByZWZpeCArIHVud3JhcHBlZE51bWJlcjtcclxuICAgICAgICAgICAgbGV0IHN0ciA9IGRuO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5hdmFpbGFibGVEaWRQYXR0ZXJuc01hcHBlZFRvRG5bZG5dICYmIHRoaXMuYXZhaWxhYmxlRGlkUGF0dGVybnNNYXBwZWRUb0RuW2RuXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5hdmFpbGFibGVEaWRQYXR0ZXJuc01hcHBlZFRvRG5bZG5dWzBdWydtYXBwZWREaWRzJ10gJiYgdGhpcy5hdmFpbGFibGVEaWRQYXR0ZXJuc01hcHBlZFRvRG5bZG5dWzBdWydtYXBwZWREaWRzJ10ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgc3RyICs9ICcgICAgICAgIERJRDogICcgKyAodGhpcy5hdmFpbGFibGVEaWRQYXR0ZXJuc01hcHBlZFRvRG5bZG5dWzBdWydtYXBwZWREaWRzJ10ubGVuZ3RoID4gMSA/ICdtdWx0aXBsZScgOlxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlRGlkUGF0dGVybnNNYXBwZWRUb0RuW2RuXVswXVsnbWFwcGVkRGlkcyddWzBdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmF2YWlsYWJsZURpZFBhdHRlcm5zTWFwcGVkVG9Ebltkbl1bMF1bJ3ZtJ10pIHtcclxuICAgICAgICAgICAgICAgIHN0ciArPSAnICAgICAgICBJbiBVc2UgLSBWTSc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgdW53cmFwTnVtYmVyUmFuZ2UgPSB1bndyYXBOdW1iZXJSYW5nZS5maWx0ZXIoKHVud3JhcHBlZE51bWJlcjogc3RyaW5nKSA9PiAhYXZhaWxhYmxlTnVtYmVyLnVzZWROdW1iZXJzLmluY2x1ZGVzKHVud3JhcHBlZE51bWJlcikpO1xyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiB1bndyYXBOdW1iZXJSYW5nZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVud3JhcE51bWJlclJhbmdlKHN0YXJ0OiBzdHJpbmcsIGVuZDogc3RyaW5nKTogc3RyaW5nW10ge1xyXG4gICAgICAgIGNvbnN0IHJlZ0V4cCA9IC8oXjArKS87XHJcbiAgICAgICAgbGV0IGxlYWRpbmdaZXJvcyA9ICcnO1xyXG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBzdGFydC5tYXRjaChyZWdFeHApO1xyXG4gICAgICAgIGlmIChtYXRjaGVzKSB7XHJcbiAgICAgICAgICAgIGxlYWRpbmdaZXJvcyA9IG1hdGNoZXNbMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHN0YXJ0TnVtZXJpYyA9IG5ldyBCaWcoc3RhcnQpO1xyXG4gICAgICAgIGNvbnN0IGVuZE51bWVyaWMgPSBuZXcgQmlnKGVuZCk7XHJcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20oe2xlbmd0aDogTnVtYmVyKGVuZE51bWVyaWMubWludXMoc3RhcnROdW1lcmljKS5wbHVzKG5ldyBCaWcoMSkpLnRvRml4ZWQoMCkpfSwgKHYsIGs6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBudW1iZXIgPSBTdHJpbmcoc3RhcnROdW1lcmljLnBsdXMobmV3IEJpZyhrLnRvU3RyaW5nKCkpKS50b0ZpeGVkKDApKTtcclxuICAgICAgICAgICAgaWYgKChsZWFkaW5nWmVyb3MgKyBudW1iZXIpLmxlbmd0aCA+IHN0YXJ0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZWFkaW5nWmVyb3MgPSBsZWFkaW5nWmVyb3Muc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBsZWFkaW5nWmVyb3MgKyBudW1iZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEF2YWlsYWJsZURpZE1hcHBlZFRvRG4oYXZhaWxhYmxlTnVtYmVyOiBhbnkpOiB2b2lkIHtcclxuICAgICAgICBpZiAoYXZhaWxhYmxlTnVtYmVyLnVuVXNlZE51bWJlcnNXaXRoRGlkcyAmJiBhdmFpbGFibGVOdW1iZXIudW5Vc2VkTnVtYmVyc1dpdGhEaWRzLmxlbmd0aCkge1xyXG5cclxuICAgICAgICAgICAgYXZhaWxhYmxlTnVtYmVyLnVuVXNlZE51bWJlcnNXaXRoRGlkcy5mb3JFYWNoKChudW1iZXJXaXRoRGlkczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRuID0gbnVtYmVyV2l0aERpZHNbJ3VuVXNlZE51bWJlciddO1xyXG4gICAgICAgICAgICB0aGlzLmF2YWlsYWJsZURpZFBhdHRlcm5zTWFwcGVkVG9Ebltkbl0gPSBbe31dO1xyXG4gICAgICAgICAgICBpZiAobnVtYmVyV2l0aERpZHNbJ3RyYW5zbGF0aW9uUGF0dGVybkxpc3QnXSAmJiBudW1iZXJXaXRoRGlkc1sndHJhbnNsYXRpb25QYXR0ZXJuTGlzdCddLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlRGlkUGF0dGVybnNNYXBwZWRUb0RuW2RuXSA9IG51bWJlcldpdGhEaWRzWyd0cmFuc2xhdGlvblBhdHRlcm5MaXN0J107XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF2YWlsYWJsZURpZFBhdHRlcm5zTWFwcGVkVG9Ebltkbl1bMF1bJ21hcHBlZERpZHMnXSA9IFt7fV07XHJcbiAgICAgICAgICAgICAgICBpZiAobnVtYmVyV2l0aERpZHNbJ21hcHBlZERpZHMnXSAmJiBudW1iZXJXaXRoRGlkc1snbWFwcGVkRGlkcyddLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlRGlkUGF0dGVybnNNYXBwZWRUb0RuW2RuXVswXVsnbWFwcGVkRGlkcyddID0gbnVtYmVyV2l0aERpZHNbJ21hcHBlZERpZHMnXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmF2YWlsYWJsZURpZFBhdHRlcm5zTWFwcGVkVG9Ebltkbl1bMF1bJ3ZtJ10gPSBudW1iZXJXaXRoRGlkc1sndm0nXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIFRPRE86IHJlcGxhY2UgcGxhY2Vob2xkZXJzIHdpdGggcmVhbCBBUEkgaW50ZWdyYXRpb24uXHJcbiAgICBsb2FkRGF0YUZyb21BcGkoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gdGhpcy5hcGkuZ2V0V2l6YXJkQm9vdHN0cmFwRGF0YSgpLnN1YnNjcmliZSguLi4pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0TGluZVdpdGhTaXRlSW5mbyhsaW5lOiBMaW5lSW50ZXJmYWNlKSB7XHJcbiAgICAgICAgbGluZS5kaXJlY3RvcnlOdW1iZXIucm91dGVQYXJ0aXRpb25OYW1lID0gdGhpcy5zaXRlRGVmYXVsdHM/LnJvdXRlUGFydGl0aW9uIHx8ICcnO1xyXG4gICAgXHJcbiAgICAgICAgbGV0IGNhbGxpbmdTZWFyY2hTcGFjZVZhbCA9IHRoaXMuc2l0ZURlZmF1bHRzPy5saW5lQ3NzIHx8ICcnO1xyXG4gICAgICAgIGxpbmUuY2FsbGluZ1NlYXJjaFNwYWNlID0gY2FsbGluZ1NlYXJjaFNwYWNlVmFsO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIHByaXZhdGUgaW5pdFRlbXBsYXRlRG5zTmFtZXNGb3JMaW5lcyh1c2VyTGluZXM6IFRlbXBsYXRlTGluZUxpa2VbXSk6IHZvaWQge1xyXG4gICAgLy8gICAgIGNvbnN0IHJvdXRlUGFydGl0aW9uID0gdGhpcy5zaXRlRGVmYXVsdHM/LnJvdXRlUGFydGl0aW9uIHx8ICcnO1xyXG4gICAgLy8gICAgIGlmICh1c2VyTGluZXMgJiYgdXNlckxpbmVzLmxlbmd0aCA+IDApIHtcclxuICAgIC8vICAgICAgICAgdXNlckxpbmVzLmZvckVhY2goKGxpbmUsIGluZGV4KSA9PiB7XHJcbiAgICAvLyAgICAgICAgICAgICBsaW5lICYmIGxpbmUuZGlyZWN0b3J5TnVtYmVyICYmIChsaW5lLmRpcmVjdG9yeU51bWJlci50ZW1wbGF0ZURpcmVjdG9yeU51bWJlciA9IGxpbmUuZGlyZWN0b3J5TnVtYmVyLmRpcmVjdG9yeU51bWJlcik7XHJcbiAgICAvLyAgICAgICAgICAgICBsaW5lICYmIGxpbmUuZGlyZWN0b3J5TnVtYmVyICYmIChsaW5lLmRpcmVjdG9yeU51bWJlci5kaXJlY3RvcnlOdW1iZXIgPSAnJyk7XHJcbiAgICAvLyAgICAgICAgICAgICByZXR1cm4gbGluZTtcclxuICAgIC8vICAgICAgICAgfSk7XHJcblxyXG4gICAgLy8gICAgICAgICAvLyBjb25zdCByb3V0ZVBhcnRpdGlvbiA9IHRoaXMuc2l0ZURlZmF1bHRzPy5yb3V0ZVBhcnRpdGlvbiB8fCAnJztcclxuICAgIC8vICAgICAgICAgLy8gaWYgKGxpbmUubGluZUFzc29jaWF0aW9ucyAmJiBsaW5lLmxpbmVBc3NvY2lhdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAvLyAgICAgICAgIC8vIHRoaXMuc2V0TGluZUFzc29jaWF0aW9uc0ZvckRldmljZShsaW5lLCByb3V0ZVBhcnRpdGlvbik7XHJcbiAgICAvLyAgICAgICAgIC8vIH1cclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgdGhpcy50ZW1wbGF0ZURldmljZXMuZm9yRWFjaChkZXZpY2UgPT4ge1xyXG4gICAgLy8gICAgICAgICBpZiAoZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMgJiYgZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAvLyAgICAgICAgICAgICB0aGlzLnNldExpbmVBc3NvY2lhdGlvbnNGb3JEZXZpY2UoZGV2aWNlLCByb3V0ZVBhcnRpdGlvbik7XHJcbiAgICAvLyAgICAgICAgIH1cclxuICAgIC8vICAgICB9KTtcclxuICAgIC8vIH1cclxuICAgIFxyXG4gICAgXHJcbiAgICBwcml2YXRlIHNldExpbmVBc3NvY2lhdGlvbnNGb3JEZXZpY2UoZGV2aWNlOiBUZW1wbGF0ZURldmljZUxpa2UsIHJvdXRlUGFydGl0aW9uOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBsaW5lQXNzb2NpYXRpb25zID0gZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMgfHwgW107XHJcbiAgICAgICAgaWYobGluZUFzc29jaWF0aW9ucyAmJiBsaW5lQXNzb2NpYXRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsaW5lQXNzb2NpYXRpb25zLmZvckVhY2gobGluZUFzc29jaWF0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgIGxpbmVBc3NvY2lhdGlvbiAmJiBsaW5lQXNzb2NpYXRpb24uZGlyZWN0b3J5TnVtYmVyICYmIChsaW5lQXNzb2NpYXRpb24uZGlyZWN0b3J5TnVtYmVyLnRlbXBsYXRlRGlyZWN0b3J5TnVtYmVyID0gbGluZUFzc29jaWF0aW9uLmRpcmVjdG9yeU51bWJlci5kaXJlY3RvcnlOdW1iZXIgfHwgJycpO1xyXG4gICAgICAgICAgICAgICAgbGluZUFzc29jaWF0aW9uICYmIGxpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXIgJiYgKGxpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXIucm91dGVQYXJ0aXRpb25OYW1lID0gcm91dGVQYXJ0aXRpb24pO1xyXG4gICAgICAgICAgICAgICAgbGluZUFzc29jaWF0aW9uICYmIGxpbmVBc3NvY2lhdGlvbi5sb2dNaXNzZWRDYWxsICYmIChsaW5lQXNzb2NpYXRpb24ubG9nTWlzc2VkQ2FsbCA9IGxpbmVBc3NvY2lhdGlvbi5sb2dNaXNzZWRDYWxsIHx8ICdmYWxzZScpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0RGV2aWNlV2l0aFNpdGVJbmZvKGRldmljZTogRGV2aWNlSW50ZXJmYWNlKSB7XHJcbiAgICAgICAgZGV2aWNlLm5ld05hbWUgPSBkZXZpY2UubmFtZTtcclxuICAgICAgICBpZiAoIWRldmljZU5hbWVIYXNEeW5hbWljVG9rZW5zKGRldmljZS5uYW1lKSkge1xyXG4gICAgICAgICAgICBkZXZpY2UubmFtZSA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWRldmljZVsnZW5hYmxlZEV4dGVuc2lvbk1vYmlsaXR5J10pIHtcclxuICAgICAgICBkZXZpY2UuZW5hYmxlZEV4dGVuc2lvbk1vYmlsaXR5ID0gdGhpcy5zaXRlRGVmYXVsdHM/LmVuYWJsZUVtID8/IGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGV2aWNlWydlbmFibGVkRXh0ZW5zaW9uTW9iaWxpdHknXS50b1N0cmluZygpID09PSAnWWVzJykge1xyXG4gICAgICAgIGRldmljZS5lbmFibGVkRXh0ZW5zaW9uTW9iaWxpdHkgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGV2aWNlWydlbmFibGVkRXh0ZW5zaW9uTW9iaWxpdHknXS50b1N0cmluZygpID09PSAnTm8nKSB7XHJcbiAgICAgICAgZGV2aWNlLmVuYWJsZWRFeHRlbnNpb25Nb2JpbGl0eSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGRldmljZS5sb2NhdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCByZXBsYWNlZFZhbHVlID0gdGhpcy5yZXBsYWNlRHluYW1pY1ZhbHVlU2l0ZUluZm8oZGV2aWNlLmxvY2F0aW9uLCB0aGlzLmN1cnJlbnRTaXRlPy5zaG9ydE5hbWUgPz8gJycpID8/IG51bGw7XHJcbiAgICAgICAgICAgIGRldmljZS5sb2NhdGlvbiA9IHJlcGxhY2VkVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkZXZpY2UubG9jYXRpb24pIHtcclxuICAgICAgICAgICAgY29uc3QgcmVwbGFjZWRWYWx1ZSA9IHRoaXMucmVwbGFjZUR5bmFtaWNWYWx1ZVNpdGVJbmZvKGRldmljZS5kZXZpY2VQb29sTmFtZSwgdGhpcy5jdXJyZW50U2l0ZT8uc2hvcnROYW1lID8/ICcnKSA/PyBudWxsO1xyXG4gICAgICAgICAgICBkZXZpY2UuZGV2aWNlUG9vbE5hbWUgPSByZXBsYWNlZFZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGV2aWNlLmxvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VkVmFsdWUgPSB0aGlzLnJlcGxhY2VEeW5hbWljVmFsdWVTaXRlSW5mbyhkZXZpY2UuY2FsbGluZ1NlYXJjaFNwYWNlTmFtZSwgdGhpcy5jdXJyZW50U2l0ZT8uc2hvcnROYW1lID8/ICcnKSA/PyBudWxsO1xyXG4gICAgICAgICAgICBkZXZpY2UuY2FsbGluZ1NlYXJjaFNwYWNlTmFtZSA9IHJlcGxhY2VkVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkZXZpY2UuZXh0cmFPcHRpb25zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VkVmFsdWUgPSB0aGlzLnJlcGxhY2VEeW5hbWljVmFsdWVTaXRlSW5mbyhkZXZpY2UuZXh0cmFPcHRpb25zLmFhckNzcywgdGhpcy5jdXJyZW50U2l0ZT8uc2hvcnROYW1lID8/ICcnKSA/PyBudWxsO1xyXG4gICAgICAgICAgICBkZXZpY2UuZXh0cmFPcHRpb25zLmFhckNzcyA9IHJlcGxhY2VkVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZGV2aWNlLmRlc2NyaXB0aW9uICYmIHRoaXMuc2l0ZURlZmF1bHRzKSB7XHJcbiAgICAgICAgICAgIGRldmljZS5kZXNjcmlwdGlvbiA9IHRoaXMuc2l0ZURlZmF1bHRzLmRldmljZURlc2NyaXB0aW9uO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlcGxhY2VEeW5hbWljVmFsdWVTaXRlSW5mbyhmaWVsZFZhbHVlOiBhbnksIHNpdGVTaG9ydE5hbWU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIGlmIChmaWVsZFZhbHVlKSB7XHJcbiAgICAgICAgZmllbGRWYWx1ZSA9IHRoaXMucmVwbGFjZUR5bmFtaWNWYWx1ZUZvcm1hdChmaWVsZFZhbHVlKTtcclxuICAgICAgICBjb25zdCBwYXJhbXNUb1JlcGxhY2VzID0geyAnU2l0ZVNob3J0TmFtZSc6IHNpdGVTaG9ydE5hbWUgfTtcclxuICAgICAgICByZXR1cm4gdGhpcy5tdXRsaVN0cmluZ1JlcGxhY2UocGFyYW1zVG9SZXBsYWNlcywgZmllbGRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVwbGFjZUR5bmFtaWNWYWx1ZUZvcm1hdChzdHI6IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoL1xcW0ZOXFxdL2lnLCAnW0ZOXScpLnJlcGxhY2UoL1xcW0xOXFxdL2lnLCAnW0xOXScpLnJlcGxhY2UoL1xcW0lEXFxdL2lnLCAnW1VzZXJJZF0nKVxyXG4gICAgICAgIC5yZXBsYWNlKC9cXFtVc2VySWRcXF0vaWcsICdbVXNlcklkXScpLnJlcGxhY2UoLzxNYXRjaCBVc2VyIElEPi9pZywgJ1tVc2VySWRdJylcclxuICAgICAgICAucmVwbGFjZSgvXFxbRW1haWxcXF0vaWcsICdbRW1haWxdJykucmVwbGFjZSgvXFxbRE5cXCgvaWcsICdbRE4oJylcclxuICAgICAgICAucmVwbGFjZSgvXFxbU2l0ZVNob3J0TmFtZVxcXS9pZywgJ1tTaXRlU2hvcnROYW1lXScpLnJlcGxhY2UoL1xcJFxcKFNpdGVTaG9ydE5hbWVcXCkvaWcsICdbU2l0ZVNob3J0TmFtZV0nKVxyXG4gICAgICAgIC5yZXBsYWNlKC9cXCRcXHtTaXRlU2hvcnROYW1lXFx9L2lnLCAnW1NpdGVTaG9ydE5hbWVdJykucmVwbGFjZSgve1NpdGVTaG9ydE5hbWV9L2lnLCAnW1NpdGVTaG9ydE5hbWVdJylcclxuICAgICAgICAucmVwbGFjZSgvXFxbRk5cXCgvaWcsICdbRk4oJykucmVwbGFjZSgvXFxbTE5cXCgvaWcsICdbTE4oJylcclxuICAgICAgICAucmVwbGFjZSgvXFxbSURcXCgvaWcsICdbSUQoJyk7XHJcbiAgICAgICAgcmV0dXJuIHN0cjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbXV0bGlTdHJpbmdSZXBsYWNlKG9iamVjdDogYW55LCBpbnB1dDogc3RyaW5nLCBkaXJlY3RvcnlOdW1iZXI/OiBzdHJpbmcsIHVzZXI/OiBhbnkpOiBzdHJpbmcge1xyXG4gICAgICAgIHZhciB2YWwgPSBpbnB1dDtcclxuXHJcbiAgICAgICAgaWYgKHZhbC5pbmNsdWRlcygnW0ROXScpICYmIGRpcmVjdG9yeU51bWJlciAmJiAhZGlyZWN0b3J5TnVtYmVyLmluY2x1ZGVzKCdMaW5lJykpIHtcclxuICAgICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoJ1tETl0nLCBkaXJlY3RvcnlOdW1iZXIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGluZGV4T2ZETiA9IHZhbC5pbmRleE9mKCdbRE4oJyk7XHJcbiAgICAgICAgaWYgKGluZGV4T2ZETiAhPT0gLTEgJiYgZGlyZWN0b3J5TnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHZhciBkaWdpdCA9IHZhbC5zdWJzdHJpbmcoaW5kZXhPZkROICsgNCwgdmFsLmluZGV4T2YoJyknLCBpbmRleE9mRE4gKyA0KSk7XHJcbiAgICAgICAgICAgIHZhciBkaWdpdENvdW50ID0gTnVtYmVyKGRpZ2l0KSB8fCAwO1xyXG4gICAgICAgICAgICB2YXIgZG5EaWdpdCA9IChkaWdpdENvdW50ID4gdmFsLmxlbmd0aCkgPyBkaXJlY3RvcnlOdW1iZXIgOiBkaXJlY3RvcnlOdW1iZXIuc3Vic3RyaW5nKGRpcmVjdG9yeU51bWJlci5sZW5ndGggLSBkaWdpdENvdW50LCBkaXJlY3RvcnlOdW1iZXIubGVuZ3RoKTtcclxuICAgICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoJ1tETignICsgZGlnaXQgKyAnKV0nLCBkbkRpZ2l0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpbmRleE9mRk4gPSB2YWwuaW5kZXhPZignW0ZOKCcpO1xyXG4gICAgICAgIGlmIChpbmRleE9mRk4gIT09IC0xICYmIHVzZXIgJiYgdXNlci5maXJzdE5hbWUpIHtcclxuICAgICAgICAgICAgdmFyIGRpZ2l0ID0gdmFsLnN1YnN0cmluZyhpbmRleE9mRk4gKyA0LCB2YWwuaW5kZXhPZignKScsIGluZGV4T2ZGTiArIDQpKTtcclxuICAgICAgICAgICAgdmFyIGZuRGlnaXQgPSB1c2VyLmZpcnN0TmFtZS5zdWJzdHJpbmcoMCwgZGlnaXQpO1xyXG4gICAgICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSgnW0ZOKCcgKyBkaWdpdCArICcpXScsIGZuRGlnaXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaW5kZXhPZkxOID0gdmFsLmluZGV4T2YoJ1tMTignKTtcclxuICAgICAgICBpZiAoaW5kZXhPZkxOICE9PSAtMSAmJiB1c2VyICYmIHVzZXIubGFzdE5hbWUpIHtcclxuICAgICAgICAgICAgdmFyIGRpZ2l0ID0gdmFsLnN1YnN0cmluZyhpbmRleE9mTE4gKyA0LCB2YWwuaW5kZXhPZignKScsIGluZGV4T2ZMTiArIDQpKTtcclxuICAgICAgICAgICAgdmFyIGxuRGlnaXQgPSB1c2VyLmxhc3ROYW1lLnN1YnN0cmluZygwLCBkaWdpdCk7XHJcbiAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCdbTE4oJyArIGRpZ2l0ICsgJyldJywgbG5EaWdpdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBpbmRleE9mSUQgPSB2YWwuaW5kZXhPZignW0lEKCcpO1xyXG4gICAgICAgIGlmIChpbmRleE9mSUQgIT09IC0xICYmIHVzZXIgJiYgdXNlci51c2VyaWQpIHtcclxuICAgICAgICAgICAgdmFyIGRpZ2l0ID0gdmFsLnN1YnN0cmluZyhpbmRleE9mSUQgKyA0LCB2YWwuaW5kZXhPZignKScsIGluZGV4T2ZJRCArIDQpKTtcclxuICAgICAgICAgICAgdmFyIGlkRGlnaXQgPSB1c2VyLnVzZXJpZC5zdWJzdHJpbmcoMCwgZGlnaXQpO1xyXG4gICAgICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSgnW0lEKCcgKyBkaWdpdCArICcpXScsIGlkRGlnaXQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdmFyIGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhvYmplY3QpO1xyXG4gICAgICAgIGVudHJpZXMuZm9yRWFjaCgocGFyYSkgPT4ge1xyXG4gICAgICAgICAgICB2YXIgZmluZCA9ICdbJyArIHBhcmFbMF0gKyAnXSc7XHJcbiAgICAgICAgICAgIHZhciByZXBsYWNlbWVudCA9IHBhcmFbMV0gIT0gbnVsbCA/IFN0cmluZyhwYXJhWzFdKSA6ICcnO1xyXG4gICAgICAgICAgICB2YWwgPSB2YWwuc3BsaXQoZmluZCkuam9pbihyZXBsYWNlbWVudCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRUZW1wbGF0ZURuc05hbWVzRm9yTGluZXMoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMubGluZXMgJiYgdGhpcy5saW5lcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGluZXMuZm9yRWFjaCgobGluZSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIGxpbmUuZGlyZWN0b3J5TnVtYmVyLnRlbXBsYXRlRGlyZWN0b3J5TnVtYmVyID0gbGluZS5kaXJlY3RvcnlOdW1iZXIuZGlyZWN0b3J5TnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgbGluZS5kaXJlY3RvcnlOdW1iZXIuZGlyZWN0b3J5TnVtYmVyID0gJyc7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbGluZTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCByb3V0ZVBhcnRpdGlvbiA9IHRoaXMuc2l0ZURlZmF1bHRzPy5yb3V0ZVBhcnRpdGlvbiB8fCAnJztcclxuICAgICAgICAgICAgdGhpcy5kZXZpY2VzLmZvckVhY2goZGV2aWNlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChkZXZpY2UubGluZUFzc29jaWF0aW9ucyAmJiBkZXZpY2UubGluZUFzc29jaWF0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGluZUFzc29jaWF0aW9uc0ZvckRldmljZShkZXZpY2UsIHJvdXRlUGFydGl0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZGV2aWNlUHJvZmlsZXMuZm9yRWFjaChkZXZpY2VQcm9maWxlID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChkZXZpY2VQcm9maWxlLmxpbmVBc3NvY2lhdGlvbnMgJiYgZGV2aWNlUHJvZmlsZS5saW5lQXNzb2NpYXRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRMaW5lQXNzb2NpYXRpb25zRm9yRGV2aWNlKGRldmljZVByb2ZpbGUsIHJvdXRlUGFydGl0aW9uKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5lbmRVc2VyPy5zaW5nbGVOdW1iZXJSZWFjaCAmJiB0aGlzLmVuZFVzZXIuc2luZ2xlTnVtYmVyUmVhY2guYXNzb2NpYXRlZExpbmVzICYmIHRoaXMuZW5kVXNlci5zaW5nbGVOdW1iZXJSZWFjaC5hc3NvY2lhdGVkTGluZXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lbmRVc2VyLnNpbmdsZU51bWJlclJlYWNoLmFzc29jaWF0ZWRMaW5lcyAmJiB0aGlzLmVuZFVzZXIuc2luZ2xlTnVtYmVyUmVhY2guYXNzb2NpYXRlZExpbmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kVXNlci5zaW5nbGVOdW1iZXJSZWFjaC5hc3NvY2lhdGVkTGluZXMubWFwKGxpbmVBc3NvY2lhdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXIudGVtcGxhdGVEaXJlY3RvcnlOdW1iZXIgPSBsaW5lQXNzb2NpYXRpb24uZGlyZWN0b3J5TnVtYmVyLmRpcmVjdG9yeU51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZUFzc29jaWF0aW9uLmRpcmVjdG9yeU51bWJlci5yb3V0ZVBhcnRpdGlvbk5hbWUgPSByb3V0ZVBhcnRpdGlvbjtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmVuZFVzZXIuc2luZ2xlTnVtYmVyUmVhY2gucmVtb3RlRGVzdGluYXRpb25zICYmIHRoaXMuZW5kVXNlci5zaW5nbGVOdW1iZXJSZWFjaC5yZW1vdGVEZXN0aW5hdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbmRVc2VyLnNpbmdsZU51bWJlclJlYWNoLnJlbW90ZURlc3RpbmF0aW9ucy5mb3JFYWNoKHJlbW90ZURlc3RpbmF0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbW90ZURlc3RpbmF0aW9uLmxpbmVBc3NvY2lhdGlvbnMgJiYgcmVtb3RlRGVzdGluYXRpb24ubGluZUFzc29jaWF0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZURlc3RpbmF0aW9uLmxpbmVBc3NvY2lhdGlvbnMubWFwKGxpbmVBc3NvY2lhdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZUFzc29jaWF0aW9uLmRpcmVjdG9yeU51bWJlci50ZW1wbGF0ZURpcmVjdG9yeU51bWJlciA9IGxpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXIuZGlyZWN0b3J5TnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXIucm91dGVQYXJ0aXRpb25OYW1lID0gcm91dGVQYXJ0aXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcblxyXG4gICAgcHVibGljIGJ1aWxkU2F2YWJsZUVuZFVzZXIoKTogRW5kVXNlckludGVyZmFjZSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmVuZFVzZXIpIHtcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyB0ZW1wbGF0ZSB1c2VyIGxvYWRlZCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYnVpbGRTYXZhYmxlRW5kVXNlcihcclxuICAgICAgICAgICAgdGhpcy5lbmRVc2VyLFxyXG4gICAgICAgICAgICB0aGlzLmxpbmVzLFxyXG4gICAgICAgICAgICB0aGlzLmRldmljZXMsXHJcbiAgICAgICAgICAgIHRoaXMuZGV2aWNlUHJvZmlsZXMsXHJcbiAgICAgICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtLFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlRGV2aWNlTmFtZTogKGluZGV4LCBkZXZpY2UpID0+IHRoaXMucmVzb2x2ZURldmljZU5hbWVGb3JTYXZlKGluZGV4LCBkZXZpY2UpLFxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZURldmljZVByb2ZpbGVOYW1lOiAoaW5kZXgsIHByb2ZpbGUpID0+IHRoaXMucmVzb2x2ZURldmljZU5hbWVGb3JTYXZlKGluZGV4LCBwcm9maWxlKSxcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXNvbHZlRGV2aWNlTmFtZUZvclNhdmUoX2luZGV4OiBudW1iZXIsIGRldmljZTogRGV2aWNlSW50ZXJmYWNlKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCByYXdOYW1lID0gKGRldmljZS5uYW1lIHx8IGRldmljZS5uZXdOYW1lIHx8ICcnKS50cmltKCk7XHJcbiAgICAgICAgaWYgKCFyYXdOYW1lKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcHJlZml4ID0gZGV2aWNlLnByZWZpeD8udHJpbSgpO1xyXG4gICAgICAgIGlmIChwcmVmaXggJiYgIXJhd05hbWUudG9VcHBlckNhc2UoKS5zdGFydHNXaXRoKHByZWZpeC50b1VwcGVyQ2FzZSgpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7cmF3TmFtZX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmF3TmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2F2ZU5ld1VzZXIoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICBjb25zdCB1c2VyID0gdGhpcy5idWlsZFNhdmFibGVFbmRVc2VyKCk7XHJcbiAgICAgICAgY29uc3Qgc2l0ZUlkID0gU3RyaW5nKHRoaXMuc2VsZWN0ZWRTaXRlID8/ICcnKTtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUlkID0gU3RyaW5nKHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZUlkID8/ICcnKTtcclxuICAgICAgICByZXR1cm4gdGhpcy51c2VyQ3JlYXRpb25BcGlTZXJ2aWNlLnNhdmVUZW1wbGF0ZVVzZXIodXNlciwgdGVtcGxhdGVJZCwgc2l0ZUlkKTtcclxuICAgIH1cclxufSJdfQ==
@@ -6,4 +6,4 @@ export * from "./src/services/device.service";
6
6
  export * from "./src/services/line.service";
7
7
  export * from "./src/user-device-manage.module";
8
8
  export * from "./src/device-manage-widget.component";
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWRldmljZS1tYW5hZ2UvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsc0NBQXNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9zcmMvc2VydmljZXMvYXBpLnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NyYy9zZXJ2aWNlcy9zaXRlLXNldHRpbmdzLnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NyYy9zZXJ2aWNlcy91c2VyLnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NyYy9zZXJ2aWNlcy91dGlscy5zZXJ2aWNlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zcmMvc2VydmljZXMvZGV2aWNlLnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NyYy9zZXJ2aWNlcy9saW5lLnNlcnZpY2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL3NyYy91c2VyLWRldmljZS1tYW5hZ2UubW9kdWxlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9zcmMvZGV2aWNlLW1hbmFnZS13aWRnZXQuY29tcG9uZW50XCI7XG4iXX0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWRldmljZS1tYW5hZ2UvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsc0NBQXNDLENBQUM7QUFDckQsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyw2QkFBNkIsQ0FBQztBQUM1QyxjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsc0NBQXNDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tIFwiLi9zcmMvc2VydmljZXMvYXBpLnNlcnZpY2VcIjtcclxuZXhwb3J0ICogZnJvbSBcIi4vc3JjL3NlcnZpY2VzL3NpdGUtc2V0dGluZ3Muc2VydmljZVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9zcmMvc2VydmljZXMvdXNlci5zZXJ2aWNlXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3NyYy9zZXJ2aWNlcy91dGlscy5zZXJ2aWNlXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3NyYy9zZXJ2aWNlcy9kZXZpY2Uuc2VydmljZVwiO1xyXG5leHBvcnQgKiBmcm9tIFwiLi9zcmMvc2VydmljZXMvbGluZS5zZXJ2aWNlXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3NyYy91c2VyLWRldmljZS1tYW5hZ2UubW9kdWxlXCI7XHJcbmV4cG9ydCAqIGZyb20gXCIuL3NyYy9kZXZpY2UtbWFuYWdlLXdpZGdldC5jb21wb25lbnRcIjtcclxuIl19
@@ -95,4 +95,4 @@ export const TOGGLE_TYPES = {
95
95
  TABS: 'TABS',
96
96
  ASSOCIATED_LINE_ONLY: 'ASSOCIATED_LINE_ONLY'
97
97
  };
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNvbnN0YW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWRldmljZS1tYW5hZ2Uvc3JjL2FwcC5jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHO0lBQ2pCLFVBQVUsRUFBRSw0Q0FBNEM7SUFDeEQsa0JBQWtCLEVBQUUsMENBQTBDO0lBQzlELGtCQUFrQixFQUFFLHdDQUF3QztJQUM1RCxVQUFVLEVBQUUsc0NBQXNDO0lBQ2xELGtCQUFrQixFQUFFLHdCQUF3QjtJQUM1QyxRQUFRLEVBQUUsMENBQTBDO0lBQ3BELFlBQVksRUFBRSw0Q0FBNEM7SUFDMUQsYUFBYSxFQUFFLDZDQUE2QztJQUM1RCxpQkFBaUIsRUFBRSxrREFBa0Q7SUFDckUsc0JBQXNCLEVBQUUsMkNBQTJDO0lBQ25FLFdBQVcsRUFBRSxnREFBZ0Q7SUFDN0QsaUJBQWlCLEVBQUUsMkVBQTJFO0lBQzlGLGlCQUFpQixFQUFFLDBDQUEwQztJQUM3RCxjQUFjLEVBQUUsaUVBQWlFO0lBQ2pGLHdCQUF3QixFQUFFLGlDQUFpQztJQUMzRCxrQkFBa0IsRUFBRSxnREFBZ0Q7SUFDcEUsb0JBQW9CLEVBQUUsd0RBQXdEO0lBQzlFLGlCQUFpQixFQUFFLGlEQUFpRDtJQUNwRSxhQUFhLEVBQUUsNkJBQTZCO0lBQzVDLFVBQVUsRUFBRSx1Q0FBdUM7SUFDbkQsNEJBQTRCLEVBQUUsK0RBQStEO0lBQzdGLG9DQUFvQyxFQUFFLCtEQUErRDtJQUNyRyxrQ0FBa0MsRUFBRSxtRkFBbUY7SUFDdkgsZ0NBQWdDLEVBQUUsMkRBQTJEO0lBQzdGLHVCQUF1QixFQUFFLG1EQUFtRDtJQUM1RSxnQkFBZ0IsRUFBRSwrREFBK0Q7SUFDakYsa0JBQWtCLEVBQUUsdUVBQXVFO0lBQzNGLHdCQUF3QixFQUFFLDRDQUE0QztDQUN2RSxDQUFDO0FBQ0Ys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RSxRQUFRLEVBQUUsVUFBVSxDQUFDO0lBQ3hGLFlBQVksRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQztJQUM5QyxjQUFjLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxvQkFBb0IsQ0FBQztJQUMzRCx1QkFBdUIsRUFBRSxDQUFDLDJCQUEyQixFQUFFLG9DQUFvQyxFQUFFLHFCQUFxQixDQUFDO0lBQ25ILFlBQVksRUFBRSxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxtQ0FBbUMsRUFBRSxjQUFjLENBQUM7SUFDbEcsa0JBQWtCLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDO0lBQzlELHFCQUFxQixFQUFFLENBQUMsc0JBQXNCLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBRTtJQUM3RixtQkFBbUIsRUFBRSxDQUFDLDBCQUEwQixFQUFFLGdCQUFnQixFQUFFLDZDQUE2QyxFQUFFLDZDQUE2QyxDQUFDO0lBQ2pLLFNBQVMsRUFBRSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsMEJBQTBCLENBQUM7SUFDOUQsWUFBWSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDckMsNEJBQTRCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO0NBQ3RFLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUc7SUFDMUIsSUFBSSxFQUFFLE1BQU07SUFDWixvQkFBb0IsRUFBRSxzQkFBc0I7Q0FDN0MsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBBUEkgPSB7XG4gIFVTRVJfVE9LRU46ICcvYXBpL3Byb3Zpc2lvbi86c2l0ZUlkL3VzZXJzLzp1c2VySWQvdG9rZW4nLFxuICBVUERBVEVfVVNFUl9GSUVMRFM6ICcvYXBpL3Byb3Zpc2lvbi86c2l0ZUlkL3VzZXJGaWVsZHMvOnRva2VuJyxcbiAgUEVSU0lTVF9VU0VSX0NBQ0hFOiAnL2FwaS9wcm92aXNpb24vOnNpdGVJZC9zYXZlVXNlci86dG9rZW4nLFxuICBVU0VSX0JZX0lEOiAnL2FwaS9wcm92aXNpb24vOnNpdGVJZC91c2Vycy86dXNlcklkJyxcbiAgUVVJQ0tfVVNFUlNfU0VBUkNIOiBcIi9hcGkvc2VhcmNoL3F1aWNrdXNlcnNcIixcbiAgTE9DQVRJT046IFwiL2FwaS9wcm92aXNpb24vb3B0aW9ucy86c2l0ZUlkL2xvY2F0aW9uc1wiLFxuICBVU0VSX0xPQ0FMRVM6IFwiL2FwaS9wcm92aXNpb24vb3B0aW9ucy86c2l0ZUlkL3VzZXJsb2NhbGVzXCIsXG4gIFVTRVJfUFJPRklMRVM6IFwiL2FwaS9wcm92aXNpb24vb3B0aW9ucy86c2l0ZUlkL3VzZXJwcm9maWxlc1wiLFxuICBSRUNPUkRJTkdfUFJPRklMRTogXCIvYXBpL3Byb3Zpc2lvbi9vcHRpb25zLzpzaXRlSWQvcmVjb3JkaW5ncHJvZmlsZXNcIixcbiAgQVZBSUxBQkxFX0ROX0lOX1JBTkdFUzogXCIvYXBpL3NpdGVzLzpzaXRlSWQvYXZhaWxhYmxlLWRuLWluLXJhbmdlc1wiLFxuICBERUxFVEVfTElORTogXCIvYXBpL3Byb3Zpc2lvbi86c2l0ZUlkL2RlbGV0ZUxpbmUvOnBraWQvOnRva2VuXCIsXG4gIERJU0FTU09DSUFURV9MSU5FOiBcIi9hcGkvcHJvdmlzaW9uLzpzaXRlSWQvOmRldmljZU5hbWUvZGVsZXRlTGluZUFzc29jaWF0aW9uLzpsaW5lUGtpZC86dG9rZW5cIixcbiAgQ0hFQ0tfREVMRVRFX0xJTkU6IFwiL2FwaS9wcm92aXNpb24vOnNpdGVJZC9jaGVja2xpbmVkZWxldGlvblwiLFxuICBBU1NPQ0lBVEVfTElORTogXCIvYXBpL3Byb3Zpc2lvbi86c2l0ZUlkLzpkZXZpY2VOYW1lL2NyZWF0ZUxpbmVBc3NvY2lhdGlvbi86dG9rZW5cIixcbiAgQ0hFQ0tfREVTVElOQVRJT05fTlVNQkVSOiBcIi9hcGkvcHJvdmlzaW9uLzpzaXRlSWQvY2hlY2stZG5cIixcbiAgVVBEQVRFX0xJTkVfRklFTERTOiBcIi9hcGkvcHJvdmlzaW9uLzpzaXRlSWQvbGluZUZpZWxkcy86cGtpZC86dG9rZW5cIixcbiAgVVBEQVRFX0RFVklDRV9GSUVMRFM6IFwiL2FwaS9wcm92aXNpb24vOnNpdGVJZC9kZXZpY2VGaWVsZHMvOmRldmljZU5hbWUvOnRva2VuXCIsXG4gIFNPRlRLRVlfVEVNUExBVEVTOiBcIi9hcGkvcHJvdmlzaW9uL29wdGlvbnMvOnNpdGVJZC9zb2Z0a2V5dGVtcGxhdGVzXCIsXG4gIFNJVEVfU0VUVElOR1M6IFwiL2FwaS9zaXRlcy86c2l0ZUlkL3NldHRpbmdzXCIsXG4gIExJTkVfU0xPVFM6IFwiL2FwaS9wcm92aXNpb24vOnNpdGVJZC9idXR0b250ZW1wbGF0ZVwiLFxuICBMRUFOX1VTRVJfQ09OVkVSU0FUSU9OX1NUQVJUOiBcIi9hcGkvcHJvdmlzaW9uLzpzaXRlSWQvbGVhblVzZXJzLzp1c2VySWQvbGVhblVzZXJEZXRhaWxzVG9rZW5cIixcbiAgTEVBTl9VU0VSX0RFVklDRVNfQ09OVkVSU0FUSU9OX1NUQVJUOiBcIi9hcGkvcHJvdmlzaW9uLzpzaXRlSWQvbGVhblVzZXJzLzp1c2VySWQvbGVhblVzZXJEZXZpY2VzVG9rZW5cIixcbiAgTEVBTl9VU0VSX0xJTkVTX0NPTlZFUlNBVElPTl9TVEFSVDogXCIvYXBpL3Byb3Zpc2lvbi86c2l0ZUlkL2xlYW5Vc2Vycy86dXNlcklkLzpsZWFuVXNlckRldmljZXNUb2tlbi9sZWFuVXNlckxpbmVzVG9rZW5cIixcbiAgTEVBTl9VU0VSX1NOUl9DT05WRVJTQVRJT05fU1RBUlQ6IFwiL2FwaS9wcm92aXNpb24vOnNpdGVJZC9sZWFuVXNlcnMvOnVzZXJJZC9sZWFuVXNlclNOUlRva2VuXCIsXG4gIERFVklDRV9MSU5FX01PTklUT1JfQ1NTOiBcIi9hcGkvcHJvdmlzaW9uL29wdGlvbnMvOnNpdGVJZC9jYWxsaW5nU2VhcmNoU3BhY2VcIixcbiAgV0VCRVhfVVNFUl9UT0tFTjogJy9hcGkvd2ViZXgvcHJvdmlzaW9uaW5nL2N1c3RvbWVycy86Y3VzdG9tZXJJZC9wZXJzb25zLzp1c2VySWQnLFxuICBXRUJFWF9VU0VSX0RFVklDRVM6IFwiL2FwaS93ZWJleC9wcm92aXNpb25pbmcvY3VzdG9tZXJzLzpjdXN0b21lcklkL3BlcnNvbnMvOnVzZXJJZC9kZXZpY2VzXCIsXG4gIFRSQU5TTEFUSU9OX1BBVFRFUk5fQ1VDTTogXCIvZGNwL2FwaS9zaXRlcy86Y3VjbUlkL3RyYW5zbGF0aW9uLXBhdHRlcm5cIixcbn07XG5leHBvcnQgY29uc3QgUkVHRVhfUEFUVEVSTiA9IHtcbiAgRU1BSUw6ICdeKChbXjw+KClcXFxcW1xcXFxdXFxcXFxcXFwuLDs6XFxcXHNAXCJdKyhcXFxcLltePD4oKVxcXFxbXFxcXF1cXFxcXFxcXC4sOzpcXFxcc0BcIl0rKSopfChcIi4rXCIpKScgK1xuICAgICdAW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2Mn1bYS16QS1aMC05XSknICtcbiAgICAnPyg/OlxcXFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2Mn1bYS16QS1aMC05XSk/KSokJ1xufTtcblxuZXhwb3J0IGNvbnN0IFBBR0lOQVRJT05fREVGQVVMVFMgPSB7XG4gIFNJWkU6IDEwLFxuICBJTkRFWDogMFxufVxuZXhwb3J0IGNvbnN0IFBBR0lOQVRJT05fU0laRV9PUFRJT05TID0gW1xuICAxMCxcbiAgNTAsXG4gIDEwMCxcbiAgNTAwXG5dO1xuZXhwb3J0IGNvbnN0IENVQ1NfVE9fSUdOT1JFID0gW1xuICAxODksXG4gIDE5NCxcbiAgMTkxLFxuICAxOTBcbl07XG5leHBvcnQgY29uc3QgQ1VDTVNfVE9fSUdOT1JFID0gW1xuICAyNDksXG4gIDI1NSxcbiAgMjUxLFxuICAyNTBcbl07XG5leHBvcnQgY29uc3QgUkVDT1JESU5HX01FRElBX1NPVVJDRSA9IFtcbiAgXCJHYXRld2F5IFByZWZlcnJlZFwiLFxuICBcIlBob25lIFByZWZlcnJlZFwiXG5dO1xuZXhwb3J0IGNvbnN0IFNUQVRJQ19PUFRJT05TID0ge1xuICBDQUxMX1BJQ0tVUF9HUk9VUF9BVURJT19TRVRUSU5HX1BIT05FX0FDVElWRTogWydVc2UgU3lzdGVtIERlZmF1bHQnLCAnRGlzYWJsZScsICdCZWVwIE9ubHknXSxcbiAgQ0FMTF9QSUNLVVBfR1JPVVBfQVVESU9fU0VUVElOR19QSE9ORV9JRExFOiBbJ1VzZSBTeXN0ZW0gRGVmYXVsdCcsICdEaXNhYmxlJywgJ1JpbmcgT25jZSddLFxuICBDT05GX0FDQ0VTU19NT0RFOiBbJ0ZpeGVkJywgJ1ZhcmlhYmxlJ10sXG4gIERFRkFVTFRfT05fT0ZGOiBbJ0RlZmF1bHQnLCAnT24nLCAnT2ZmJ10sXG4gIERFRkFVTFRfRU5fRElTOiBbJ0RlZmF1bHQnLCAnRW5hYmxlZCcsICdEaXNhYmxlZCddLFxuICBETkQ6IFsnVXNlIENvbW1vbiBQaG9uZSBQcm9maWxlIFNldHRpbmcnLCAnQ2FsbCBSZWplY3QnLCAnUmluZ2VyIE9mZiddLFxuICBETkRfSU5DT01JTkdfQ0FMTF9BTExFUlQ6IFsnRGlzYWJsZScsICdGbGFzaCBPbmx5JywgJ0JlZXAgT25seSddLFxuICBMQVRFTlRfQ0FQQUJJTElUWTogWydHYXRld2F5IENvbnRyb2xsZWQnLCAnTW9kZW0gUmVsYXknLCAnTW9kZW0gUGFzc3Rocm91Z2gnLCAnTW9kZW0gUmVsYXkgYW5kIFBhc3N0aHJvdWdoJywgJ05vbmUnXSxcbiAgTElORV9NT0RFOiBbJ1Nlc3Npb24gTGluZSBtb2RlJywgJ0VuaGFuY2VkIExpbmUgbW9kZSddLFxuICBBQ1RJT05BQkxFX0FMRVJUOiBbJ0Rpc2FibGVkJywgJ1Nob3cgZm9yIGFsbCBJbmNvbWluZyBDYWxsJywgJ1Nob3cgZm9yIEludmlzaWJsZSBJbmNvbWluZyBDYWxsJ10sXG4gIE1MUFBfUFJFRU1QVElPTjogWydEZWZhdWx0JywgJ0ZvcmNlZnVsJywgJ0Rpc2FibGVkJ10sXG4gIFBBQ0tFVF9DQVBUVVJFX01PREU6IFsnTm9uZScsICdCYXRjaCBQcm9jZXNzaW5nIE1vZGUnXSxcbiAgUklOR19WT0xVTUU6IFsnMC1TaWxlbnQnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnMTAnLCAnMTEnLCAnMTInLCAnMTMnLCAnMTQnLCAnMTUnXSxcbiAgUE9SVF9ESVJFQ1RJT046IFsnQm90aHdheXMnLCAnSW5ib3VuZCcsICdPdXRib3VuZCddLFxuICBSSU5HX1NFVFRJTkdfSURMRTogWydVc2UgU3lzdGVtIERlZmF1bHQnLCAnRGlzYWJsZScgLCAnRmxhc2ggT25seScgLCAnUmluZyBPbmNlJyAsICdSaW5nJ10sXG4gIFJJTkdfU0VUVElOR19BQ1RJVkU6IFsnVXNlIFN5c3RlbSBEZWZhdWx0JywgJ0Rpc2FibGUnICwgJ0ZsYXNoIE9ubHknICwgJ1JpbmcgT25jZScgLCAnUmluZycsICdCZWVwIE9ubHknXSxcbiAgU0VSVklDRV9QUk9WSVNJT05JTkc6IFsnRGVmYXVsdCcsICdJbnRlcm5hbCcsICdFeHRlcm5hbCBVUkwnLCAnQm90aCddLFxuICBTRVRUSU5HU19BQ0NFUzogWydFbmFibGVkJywgJ0Rpc2FibGVkJywgJ1Jlc3RyaWN0ZWQnXSxcbiAgVklTVUFMX01XSTogWydVc2UgU3lzdGVtIFBvbGljeScsICdMaWdodCBhbmQgUHJvbXB0JyAsICdQcm9tcHQgT25seScgLCAnTGlnaHQgT25seScgLCAnTm9uZSddLFxuICBXRUVLREFZUzogWydTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSddLFxuICBCVUlMRF9CUklER0U6IFsnTm9uZScsICdPbicsICdPZmYnLCAnRGVmYXVsdCddLFxuICBUUkFOU0ZFUl9UWVBFUzogWydSZWxlYXNlIHRvIFN3aXRjaCcsICdTdXBlcnZpc2UgVHJhbnNmZXInXSxcbiAgRVhURU5TSU9OX0lTX0JVU1lfVFlQRVM6IFsnU2VuZCBDYWxsZXJzIHRvIFZvaWNlbWFpbCcsICdQdXQgQ2FsbGVycyBvbiBIb2xkIFdpdGhvdXQgQXNraW5nJywgJ0FzayBDYWxsZXJzIHRvIEhvbGQnXSxcbiAgQ0FMTF9BQ1RJT05TOiBbJ0hhbmcgVXAnLCAnUmVzdGFydCBHcmVldGluZycsICdSb3V0ZSBGcm9tIE5leHQgQ2FsbCBSb3V0aW5nIFJ1bGUnLCAnVGFrZSBNZXNzYWdlJ10sXG4gIEFVVEhFTlRJQ0FUSU9OXzgwMjogWydVc2VyIGNvbnRyb2xsZWQnLCAnRGlzYWJsZWQnLCAnRW5hYmxlZCddLFxuICBDRVJUSUZJQ0FURV9PUEVSQVRJT046IFsnTm8gUGVuZGluZyBPcGVyYXRpb24nLCAnSW5zdGFsbC9VcGdyYWRlJywgJ0RlbGV0ZScsICdUcm91Ymxlc2hvb3QnIF0sXG4gIEFVVEhFTlRJQ0FUSU9OX01PREU6IFsnQnkgQXV0aGVudGljYXRpb24gU3RyaW5nJywgJ0J5IE51bGwgU3RyaW5nJywgJ0J5IEV4aXN0aW5nIENlcnRpZmljYXRlIChwcmVjZWRlbmNlIHRvIExTQyknLCAnQnkgRXhpc3RpbmcgQ2VydGlmaWNhdGUgKHByZWNlZGVuY2UgdG8gTUlDKSddLFxuICBLRVlfT1JERVI6IFsnUlNBIE9ubHknLCAnRUMgT25seScsICdFQyBQcmVmZXJyZWQsIFJTQSBCYWNrdXAnXSxcbiAgUlNBX0tFWV9TSVpFOiBbJzUxMicsICcxMDI0JywgJzIwNDgnXSxcbiAgUlNBX0tFWV9TSVpFX1NQRUNJRklDX0RFVklDRTogWyc1MTInLCAnMTAyNCcsICcyMDQ4JywgJzMwNzInLCAnNDA5NiddXG59O1xuXG5leHBvcnQgY29uc3QgVE9HR0xFX1RZUEVTID0ge1xuICBUQUJTOiAnVEFCUycsXG4gIEFTU09DSUFURURfTElORV9PTkxZOiAnQVNTT0NJQVRFRF9MSU5FX09OTFknXG59XG4iXX0=
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmNvbnN0YW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWRldmljZS1tYW5hZ2Uvc3JjL2FwcC5jb25zdGFudHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxDQUFDLE1BQU0sR0FBRyxHQUFHO0lBQ2pCLFVBQVUsRUFBRSw0Q0FBNEM7SUFDeEQsa0JBQWtCLEVBQUUsMENBQTBDO0lBQzlELGtCQUFrQixFQUFFLHdDQUF3QztJQUM1RCxVQUFVLEVBQUUsc0NBQXNDO0lBQ2xELGtCQUFrQixFQUFFLHdCQUF3QjtJQUM1QyxRQUFRLEVBQUUsMENBQTBDO0lBQ3BELFlBQVksRUFBRSw0Q0FBNEM7SUFDMUQsYUFBYSxFQUFFLDZDQUE2QztJQUM1RCxpQkFBaUIsRUFBRSxrREFBa0Q7SUFDckUsc0JBQXNCLEVBQUUsMkNBQTJDO0lBQ25FLFdBQVcsRUFBRSxnREFBZ0Q7SUFDN0QsaUJBQWlCLEVBQUUsMkVBQTJFO0lBQzlGLGlCQUFpQixFQUFFLDBDQUEwQztJQUM3RCxjQUFjLEVBQUUsaUVBQWlFO0lBQ2pGLHdCQUF3QixFQUFFLGlDQUFpQztJQUMzRCxrQkFBa0IsRUFBRSxnREFBZ0Q7SUFDcEUsb0JBQW9CLEVBQUUsd0RBQXdEO0lBQzlFLGlCQUFpQixFQUFFLGlEQUFpRDtJQUNwRSxhQUFhLEVBQUUsNkJBQTZCO0lBQzVDLFVBQVUsRUFBRSx1Q0FBdUM7SUFDbkQsNEJBQTRCLEVBQUUsK0RBQStEO0lBQzdGLG9DQUFvQyxFQUFFLCtEQUErRDtJQUNyRyxrQ0FBa0MsRUFBRSxtRkFBbUY7SUFDdkgsZ0NBQWdDLEVBQUUsMkRBQTJEO0lBQzdGLHVCQUF1QixFQUFFLG1EQUFtRDtJQUM1RSxnQkFBZ0IsRUFBRSwrREFBK0Q7SUFDakYsa0JBQWtCLEVBQUUsdUVBQXVFO0lBQzNGLHdCQUF3QixFQUFFLDRDQUE0QztDQUN2RSxDQUFDO0FBQ0Ys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RSxRQUFRLEVBQUUsVUFBVSxDQUFDO0lBQ3hGLFlBQVksRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQztJQUM5QyxjQUFjLEVBQUUsQ0FBQyxtQkFBbUIsRUFBRSxvQkFBb0IsQ0FBQztJQUMzRCx1QkFBdUIsRUFBRSxDQUFDLDJCQUEyQixFQUFFLG9DQUFvQyxFQUFFLHFCQUFxQixDQUFDO0lBQ25ILFlBQVksRUFBRSxDQUFDLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxtQ0FBbUMsRUFBRSxjQUFjLENBQUM7SUFDbEcsa0JBQWtCLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDO0lBQzlELHFCQUFxQixFQUFFLENBQUMsc0JBQXNCLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBRTtJQUM3RixtQkFBbUIsRUFBRSxDQUFDLDBCQUEwQixFQUFFLGdCQUFnQixFQUFFLDZDQUE2QyxFQUFFLDZDQUE2QyxDQUFDO0lBQ2pLLFNBQVMsRUFBRSxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsMEJBQTBCLENBQUM7SUFDOUQsWUFBWSxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUM7SUFDckMsNEJBQTRCLEVBQUUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO0NBQ3RFLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUc7SUFDMUIsSUFBSSxFQUFFLE1BQU07SUFDWixvQkFBb0IsRUFBRSxzQkFBc0I7Q0FDN0MsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBBUEkgPSB7XHJcbiAgVVNFUl9UT0tFTjogJy9hcGkvcHJvdmlzaW9uLzpzaXRlSWQvdXNlcnMvOnVzZXJJZC90b2tlbicsXHJcbiAgVVBEQVRFX1VTRVJfRklFTERTOiAnL2FwaS9wcm92aXNpb24vOnNpdGVJZC91c2VyRmllbGRzLzp0b2tlbicsXHJcbiAgUEVSU0lTVF9VU0VSX0NBQ0hFOiAnL2FwaS9wcm92aXNpb24vOnNpdGVJZC9zYXZlVXNlci86dG9rZW4nLFxyXG4gIFVTRVJfQllfSUQ6ICcvYXBpL3Byb3Zpc2lvbi86c2l0ZUlkL3VzZXJzLzp1c2VySWQnLFxyXG4gIFFVSUNLX1VTRVJTX1NFQVJDSDogXCIvYXBpL3NlYXJjaC9xdWlja3VzZXJzXCIsXHJcbiAgTE9DQVRJT046IFwiL2FwaS9wcm92aXNpb24vb3B0aW9ucy86c2l0ZUlkL2xvY2F0aW9uc1wiLFxyXG4gIFVTRVJfTE9DQUxFUzogXCIvYXBpL3Byb3Zpc2lvbi9vcHRpb25zLzpzaXRlSWQvdXNlcmxvY2FsZXNcIixcclxuICBVU0VSX1BST0ZJTEVTOiBcIi9hcGkvcHJvdmlzaW9uL29wdGlvbnMvOnNpdGVJZC91c2VycHJvZmlsZXNcIixcclxuICBSRUNPUkRJTkdfUFJPRklMRTogXCIvYXBpL3Byb3Zpc2lvbi9vcHRpb25zLzpzaXRlSWQvcmVjb3JkaW5ncHJvZmlsZXNcIixcclxuICBBVkFJTEFCTEVfRE5fSU5fUkFOR0VTOiBcIi9hcGkvc2l0ZXMvOnNpdGVJZC9hdmFpbGFibGUtZG4taW4tcmFuZ2VzXCIsXHJcbiAgREVMRVRFX0xJTkU6IFwiL2FwaS9wcm92aXNpb24vOnNpdGVJZC9kZWxldGVMaW5lLzpwa2lkLzp0b2tlblwiLFxyXG4gIERJU0FTU09DSUFURV9MSU5FOiBcIi9hcGkvcHJvdmlzaW9uLzpzaXRlSWQvOmRldmljZU5hbWUvZGVsZXRlTGluZUFzc29jaWF0aW9uLzpsaW5lUGtpZC86dG9rZW5cIixcclxuICBDSEVDS19ERUxFVEVfTElORTogXCIvYXBpL3Byb3Zpc2lvbi86c2l0ZUlkL2NoZWNrbGluZWRlbGV0aW9uXCIsXHJcbiAgQVNTT0NJQVRFX0xJTkU6IFwiL2FwaS9wcm92aXNpb24vOnNpdGVJZC86ZGV2aWNlTmFtZS9jcmVhdGVMaW5lQXNzb2NpYXRpb24vOnRva2VuXCIsXHJcbiAgQ0hFQ0tfREVTVElOQVRJT05fTlVNQkVSOiBcIi9hcGkvcHJvdmlzaW9uLzpzaXRlSWQvY2hlY2stZG5cIixcclxuICBVUERBVEVfTElORV9GSUVMRFM6IFwiL2FwaS9wcm92aXNpb24vOnNpdGVJZC9saW5lRmllbGRzLzpwa2lkLzp0b2tlblwiLFxyXG4gIFVQREFURV9ERVZJQ0VfRklFTERTOiBcIi9hcGkvcHJvdmlzaW9uLzpzaXRlSWQvZGV2aWNlRmllbGRzLzpkZXZpY2VOYW1lLzp0b2tlblwiLFxyXG4gIFNPRlRLRVlfVEVNUExBVEVTOiBcIi9hcGkvcHJvdmlzaW9uL29wdGlvbnMvOnNpdGVJZC9zb2Z0a2V5dGVtcGxhdGVzXCIsXHJcbiAgU0lURV9TRVRUSU5HUzogXCIvYXBpL3NpdGVzLzpzaXRlSWQvc2V0dGluZ3NcIixcclxuICBMSU5FX1NMT1RTOiBcIi9hcGkvcHJvdmlzaW9uLzpzaXRlSWQvYnV0dG9udGVtcGxhdGVcIixcclxuICBMRUFOX1VTRVJfQ09OVkVSU0FUSU9OX1NUQVJUOiBcIi9hcGkvcHJvdmlzaW9uLzpzaXRlSWQvbGVhblVzZXJzLzp1c2VySWQvbGVhblVzZXJEZXRhaWxzVG9rZW5cIixcclxuICBMRUFOX1VTRVJfREVWSUNFU19DT05WRVJTQVRJT05fU1RBUlQ6IFwiL2FwaS9wcm92aXNpb24vOnNpdGVJZC9sZWFuVXNlcnMvOnVzZXJJZC9sZWFuVXNlckRldmljZXNUb2tlblwiLFxyXG4gIExFQU5fVVNFUl9MSU5FU19DT05WRVJTQVRJT05fU1RBUlQ6IFwiL2FwaS9wcm92aXNpb24vOnNpdGVJZC9sZWFuVXNlcnMvOnVzZXJJZC86bGVhblVzZXJEZXZpY2VzVG9rZW4vbGVhblVzZXJMaW5lc1Rva2VuXCIsXHJcbiAgTEVBTl9VU0VSX1NOUl9DT05WRVJTQVRJT05fU1RBUlQ6IFwiL2FwaS9wcm92aXNpb24vOnNpdGVJZC9sZWFuVXNlcnMvOnVzZXJJZC9sZWFuVXNlclNOUlRva2VuXCIsXHJcbiAgREVWSUNFX0xJTkVfTU9OSVRPUl9DU1M6IFwiL2FwaS9wcm92aXNpb24vb3B0aW9ucy86c2l0ZUlkL2NhbGxpbmdTZWFyY2hTcGFjZVwiLFxyXG4gIFdFQkVYX1VTRVJfVE9LRU46ICcvYXBpL3dlYmV4L3Byb3Zpc2lvbmluZy9jdXN0b21lcnMvOmN1c3RvbWVySWQvcGVyc29ucy86dXNlcklkJyxcclxuICBXRUJFWF9VU0VSX0RFVklDRVM6IFwiL2FwaS93ZWJleC9wcm92aXNpb25pbmcvY3VzdG9tZXJzLzpjdXN0b21lcklkL3BlcnNvbnMvOnVzZXJJZC9kZXZpY2VzXCIsXHJcbiAgVFJBTlNMQVRJT05fUEFUVEVSTl9DVUNNOiBcIi9kY3AvYXBpL3NpdGVzLzpjdWNtSWQvdHJhbnNsYXRpb24tcGF0dGVyblwiLFxyXG59O1xyXG5leHBvcnQgY29uc3QgUkVHRVhfUEFUVEVSTiA9IHtcclxuICBFTUFJTDogJ14oKFtePD4oKVxcXFxbXFxcXF1cXFxcXFxcXC4sOzpcXFxcc0BcIl0rKFxcXFwuW148PigpXFxcXFtcXFxcXVxcXFxcXFxcLiw7OlxcXFxzQFwiXSspKil8KFwiLitcIikpJyArXHJcbiAgICAnQFthLXpBLVowLTldKD86W2EtekEtWjAtOS1dezAsNjJ9W2EtekEtWjAtOV0pJyArXHJcbiAgICAnPyg/OlxcXFwuW2EtekEtWjAtOV0oPzpbYS16QS1aMC05LV17MCw2Mn1bYS16QS1aMC05XSk/KSokJ1xyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFBBR0lOQVRJT05fREVGQVVMVFMgPSB7XHJcbiAgU0laRTogMTAsXHJcbiAgSU5ERVg6IDBcclxufVxyXG5leHBvcnQgY29uc3QgUEFHSU5BVElPTl9TSVpFX09QVElPTlMgPSBbXHJcbiAgMTAsXHJcbiAgNTAsXHJcbiAgMTAwLFxyXG4gIDUwMFxyXG5dO1xyXG5leHBvcnQgY29uc3QgQ1VDU19UT19JR05PUkUgPSBbXHJcbiAgMTg5LFxyXG4gIDE5NCxcclxuICAxOTEsXHJcbiAgMTkwXHJcbl07XHJcbmV4cG9ydCBjb25zdCBDVUNNU19UT19JR05PUkUgPSBbXHJcbiAgMjQ5LFxyXG4gIDI1NSxcclxuICAyNTEsXHJcbiAgMjUwXHJcbl07XHJcbmV4cG9ydCBjb25zdCBSRUNPUkRJTkdfTUVESUFfU09VUkNFID0gW1xyXG4gIFwiR2F0ZXdheSBQcmVmZXJyZWRcIixcclxuICBcIlBob25lIFByZWZlcnJlZFwiXHJcbl07XHJcbmV4cG9ydCBjb25zdCBTVEFUSUNfT1BUSU9OUyA9IHtcclxuICBDQUxMX1BJQ0tVUF9HUk9VUF9BVURJT19TRVRUSU5HX1BIT05FX0FDVElWRTogWydVc2UgU3lzdGVtIERlZmF1bHQnLCAnRGlzYWJsZScsICdCZWVwIE9ubHknXSxcclxuICBDQUxMX1BJQ0tVUF9HUk9VUF9BVURJT19TRVRUSU5HX1BIT05FX0lETEU6IFsnVXNlIFN5c3RlbSBEZWZhdWx0JywgJ0Rpc2FibGUnLCAnUmluZyBPbmNlJ10sXHJcbiAgQ09ORl9BQ0NFU1NfTU9ERTogWydGaXhlZCcsICdWYXJpYWJsZSddLFxyXG4gIERFRkFVTFRfT05fT0ZGOiBbJ0RlZmF1bHQnLCAnT24nLCAnT2ZmJ10sXHJcbiAgREVGQVVMVF9FTl9ESVM6IFsnRGVmYXVsdCcsICdFbmFibGVkJywgJ0Rpc2FibGVkJ10sXHJcbiAgRE5EOiBbJ1VzZSBDb21tb24gUGhvbmUgUHJvZmlsZSBTZXR0aW5nJywgJ0NhbGwgUmVqZWN0JywgJ1JpbmdlciBPZmYnXSxcclxuICBETkRfSU5DT01JTkdfQ0FMTF9BTExFUlQ6IFsnRGlzYWJsZScsICdGbGFzaCBPbmx5JywgJ0JlZXAgT25seSddLFxyXG4gIExBVEVOVF9DQVBBQklMSVRZOiBbJ0dhdGV3YXkgQ29udHJvbGxlZCcsICdNb2RlbSBSZWxheScsICdNb2RlbSBQYXNzdGhyb3VnaCcsICdNb2RlbSBSZWxheSBhbmQgUGFzc3Rocm91Z2gnLCAnTm9uZSddLFxyXG4gIExJTkVfTU9ERTogWydTZXNzaW9uIExpbmUgbW9kZScsICdFbmhhbmNlZCBMaW5lIG1vZGUnXSxcclxuICBBQ1RJT05BQkxFX0FMRVJUOiBbJ0Rpc2FibGVkJywgJ1Nob3cgZm9yIGFsbCBJbmNvbWluZyBDYWxsJywgJ1Nob3cgZm9yIEludmlzaWJsZSBJbmNvbWluZyBDYWxsJ10sXHJcbiAgTUxQUF9QUkVFTVBUSU9OOiBbJ0RlZmF1bHQnLCAnRm9yY2VmdWwnLCAnRGlzYWJsZWQnXSxcclxuICBQQUNLRVRfQ0FQVFVSRV9NT0RFOiBbJ05vbmUnLCAnQmF0Y2ggUHJvY2Vzc2luZyBNb2RlJ10sXHJcbiAgUklOR19WT0xVTUU6IFsnMC1TaWxlbnQnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnMTAnLCAnMTEnLCAnMTInLCAnMTMnLCAnMTQnLCAnMTUnXSxcclxuICBQT1JUX0RJUkVDVElPTjogWydCb3Rod2F5cycsICdJbmJvdW5kJywgJ091dGJvdW5kJ10sXHJcbiAgUklOR19TRVRUSU5HX0lETEU6IFsnVXNlIFN5c3RlbSBEZWZhdWx0JywgJ0Rpc2FibGUnICwgJ0ZsYXNoIE9ubHknICwgJ1JpbmcgT25jZScgLCAnUmluZyddLFxyXG4gIFJJTkdfU0VUVElOR19BQ1RJVkU6IFsnVXNlIFN5c3RlbSBEZWZhdWx0JywgJ0Rpc2FibGUnICwgJ0ZsYXNoIE9ubHknICwgJ1JpbmcgT25jZScgLCAnUmluZycsICdCZWVwIE9ubHknXSxcclxuICBTRVJWSUNFX1BST1ZJU0lPTklORzogWydEZWZhdWx0JywgJ0ludGVybmFsJywgJ0V4dGVybmFsIFVSTCcsICdCb3RoJ10sXHJcbiAgU0VUVElOR1NfQUNDRVM6IFsnRW5hYmxlZCcsICdEaXNhYmxlZCcsICdSZXN0cmljdGVkJ10sXHJcbiAgVklTVUFMX01XSTogWydVc2UgU3lzdGVtIFBvbGljeScsICdMaWdodCBhbmQgUHJvbXB0JyAsICdQcm9tcHQgT25seScgLCAnTGlnaHQgT25seScgLCAnTm9uZSddLFxyXG4gIFdFRUtEQVlTOiBbJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J10sXHJcbiAgQlVJTERfQlJJREdFOiBbJ05vbmUnLCAnT24nLCAnT2ZmJywgJ0RlZmF1bHQnXSxcclxuICBUUkFOU0ZFUl9UWVBFUzogWydSZWxlYXNlIHRvIFN3aXRjaCcsICdTdXBlcnZpc2UgVHJhbnNmZXInXSxcclxuICBFWFRFTlNJT05fSVNfQlVTWV9UWVBFUzogWydTZW5kIENhbGxlcnMgdG8gVm9pY2VtYWlsJywgJ1B1dCBDYWxsZXJzIG9uIEhvbGQgV2l0aG91dCBBc2tpbmcnLCAnQXNrIENhbGxlcnMgdG8gSG9sZCddLFxyXG4gIENBTExfQUNUSU9OUzogWydIYW5nIFVwJywgJ1Jlc3RhcnQgR3JlZXRpbmcnLCAnUm91dGUgRnJvbSBOZXh0IENhbGwgUm91dGluZyBSdWxlJywgJ1Rha2UgTWVzc2FnZSddLFxyXG4gIEFVVEhFTlRJQ0FUSU9OXzgwMjogWydVc2VyIGNvbnRyb2xsZWQnLCAnRGlzYWJsZWQnLCAnRW5hYmxlZCddLFxyXG4gIENFUlRJRklDQVRFX09QRVJBVElPTjogWydObyBQZW5kaW5nIE9wZXJhdGlvbicsICdJbnN0YWxsL1VwZ3JhZGUnLCAnRGVsZXRlJywgJ1Ryb3VibGVzaG9vdCcgXSxcclxuICBBVVRIRU5USUNBVElPTl9NT0RFOiBbJ0J5IEF1dGhlbnRpY2F0aW9uIFN0cmluZycsICdCeSBOdWxsIFN0cmluZycsICdCeSBFeGlzdGluZyBDZXJ0aWZpY2F0ZSAocHJlY2VkZW5jZSB0byBMU0MpJywgJ0J5IEV4aXN0aW5nIENlcnRpZmljYXRlIChwcmVjZWRlbmNlIHRvIE1JQyknXSxcclxuICBLRVlfT1JERVI6IFsnUlNBIE9ubHknLCAnRUMgT25seScsICdFQyBQcmVmZXJyZWQsIFJTQSBCYWNrdXAnXSxcclxuICBSU0FfS0VZX1NJWkU6IFsnNTEyJywgJzEwMjQnLCAnMjA0OCddLFxyXG4gIFJTQV9LRVlfU0laRV9TUEVDSUZJQ19ERVZJQ0U6IFsnNTEyJywgJzEwMjQnLCAnMjA0OCcsICczMDcyJywgJzQwOTYnXVxyXG59O1xyXG5cclxuZXhwb3J0IGNvbnN0IFRPR0dMRV9UWVBFUyA9IHtcclxuICBUQUJTOiAnVEFCUycsXHJcbiAgQVNTT0NJQVRFRF9MSU5FX09OTFk6ICdBU1NPQ0lBVEVEX0xJTkVfT05MWSdcclxufVxyXG4iXX0=