@tuki-io/tuki-widgets 0.0.213 → 0.0.214
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.
- package/esm2020/user-creation/src/utils/device-default-prefix.mjs +19 -2
- package/esm2020/user-creation/src/utils/device-name-dynamic-tokens.mjs +18 -0
- package/esm2020/user-creation/src/utils/parse-device-name-rule.mjs +6 -3
- package/esm2020/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.mjs +65 -12
- package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.mjs +47 -11
- package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +151 -26
- package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +149 -24
- package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
- package/package.json +1 -1
- package/user-creation/src/utils/device-default-prefix.d.ts +7 -2
- package/user-creation/src/utils/device-name-dynamic-tokens.d.ts +5 -0
- package/user-creation/src/utils/parse-device-name-rule.d.ts +1 -0
- package/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.d.ts +3 -0
- package/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.d.ts +2 -0
package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.mjs
CHANGED
|
@@ -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, stripDeviceNamePrefix } 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
|
-
|
|
237
|
-
});
|
|
238
|
-
this.deviceProfiles.forEach(profile => {
|
|
239
|
-
|
|
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 = '';
|
|
@@ -302,6 +303,30 @@ export class UserCreationWizardService {
|
|
|
302
303
|
this.rebuildOverviewDevices();
|
|
303
304
|
this.rebuildOverviewDeviceProfiles();
|
|
304
305
|
}
|
|
306
|
+
/** Replaces [DN]/[FN]/[LN] placeholders in device names after a directory number is chosen. */
|
|
307
|
+
applyDirectoryNumberToDeviceNames(directoryNumber) {
|
|
308
|
+
const dn = directoryNumber?.trim();
|
|
309
|
+
if (!dn) {
|
|
310
|
+
return;
|
|
311
|
+
}
|
|
312
|
+
const user = {
|
|
313
|
+
firstName: this.userDetailsForm.firstName,
|
|
314
|
+
lastName: this.userDetailsForm.lastName,
|
|
315
|
+
userid: this.userDetailsForm.userId,
|
|
316
|
+
};
|
|
317
|
+
const resolveDeviceName = (device) => {
|
|
318
|
+
const template = (device.newName || '').trim();
|
|
319
|
+
if (!deviceNameHasDynamicTokens(template)) {
|
|
320
|
+
return;
|
|
321
|
+
}
|
|
322
|
+
const resolvedFull = this.mutliStringReplace({}, this.replaceDynamicValueFormat(template), dn, user);
|
|
323
|
+
device.name = stripDeviceNamePrefix(resolvedFull, device.prefix);
|
|
324
|
+
};
|
|
325
|
+
this.devices.forEach(resolveDeviceName);
|
|
326
|
+
this.deviceProfiles.forEach(resolveDeviceName);
|
|
327
|
+
this.rebuildOverviewDevices();
|
|
328
|
+
this.rebuildOverviewDeviceProfiles();
|
|
329
|
+
}
|
|
305
330
|
setLineSelection(index, lineNumber) {
|
|
306
331
|
if (!this.lineSelections[index]) {
|
|
307
332
|
return;
|
|
@@ -389,6 +414,7 @@ export class UserCreationWizardService {
|
|
|
389
414
|
device.deviceDefaults = defaults;
|
|
390
415
|
device.nameValidationRegex = nameValidationRegex;
|
|
391
416
|
device.nameValidationCaption = defaults.deviceNameExplained;
|
|
417
|
+
applyDefaultDevicePrefixIfMissing(device, defaults);
|
|
392
418
|
});
|
|
393
419
|
}
|
|
394
420
|
getDeviceNamePrefix(deviceIndex, isProfile = false) {
|
|
@@ -637,7 +663,9 @@ export class UserCreationWizardService {
|
|
|
637
663
|
}
|
|
638
664
|
initDeviceWithSiteInfo(device) {
|
|
639
665
|
device.newName = device.name;
|
|
640
|
-
device.name
|
|
666
|
+
if (!deviceNameHasDynamicTokens(device.name)) {
|
|
667
|
+
device.name = '';
|
|
668
|
+
}
|
|
641
669
|
if (!device['enabledExtensionMobility']) {
|
|
642
670
|
device.enabledExtensionMobility = this.siteDefaults?.enableEm ?? false;
|
|
643
671
|
}
|
|
@@ -688,7 +716,13 @@ export class UserCreationWizardService {
|
|
|
688
716
|
mutliStringReplace(object, input, directoryNumber, user) {
|
|
689
717
|
var val = input;
|
|
690
718
|
if (val.includes('[DN]') && directoryNumber && !directoryNumber.includes('Line')) {
|
|
691
|
-
val = val.replace(
|
|
719
|
+
val = val.replace(/\[DN\]/gi, directoryNumber);
|
|
720
|
+
}
|
|
721
|
+
if (user?.firstName) {
|
|
722
|
+
val = val.replace(/\[FN\]/gi, user.firstName);
|
|
723
|
+
}
|
|
724
|
+
if (user?.lastName) {
|
|
725
|
+
val = val.replace(/\[LN\]/gi, user.lastName);
|
|
692
726
|
}
|
|
693
727
|
var indexOfDN = val.indexOf('[DN(');
|
|
694
728
|
if (indexOfDN !== -1 && directoryNumber) {
|
|
@@ -771,7 +805,9 @@ export class UserCreationWizardService {
|
|
|
771
805
|
});
|
|
772
806
|
}
|
|
773
807
|
resolveDeviceNameForSave(_index, device) {
|
|
774
|
-
const
|
|
808
|
+
const template = (device.newName || '').trim();
|
|
809
|
+
const resolvedName = (device.name || '').trim();
|
|
810
|
+
const rawName = resolvedName || (deviceNameHasDynamicTokens(template) ? '' : template);
|
|
775
811
|
if (!rawName) {
|
|
776
812
|
return '';
|
|
777
813
|
}
|
|
@@ -793,4 +829,4 @@ UserCreationWizardService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.
|
|
|
793
829
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserCreationWizardService, decorators: [{
|
|
794
830
|
type: Injectable
|
|
795
831
|
}], 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=
|
|
832
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci1jcmVhdGlvbi13aXphcmQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1a2kvd2lkZ2V0cy91c2VyLWNyZWF0aW9uL3NyYy93aWRnZXRzL3VzZXItY3JlYXRpb24td2l6YXJkL3VzZXItY3JlYXRpb24td2l6YXJkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFJekYsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxRixPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUM7QUFDekIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxJQUFJLEVBQXdDLE1BQU0sb0JBQW9CLENBQUM7QUFDaEYsT0FBTyxFQW9CSCxXQUFXLEVBRVgsT0FBTyxHQUNWLE1BQU0sa0RBQWtELENBQUM7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDM0csT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sb0NBQW9DLENBQUM7O0FBRzlFLE1BQU0sT0FBTyx5QkFBeUI7SUFjbEMsSUFBSSxXQUFXO1FBQ1gsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0lBQzdCLENBQUM7SUFzQ0QsSUFBSSx1QkFBdUI7UUFDdkIsT0FB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T0FBTyxDQUFDLENBQUM7U0FDckQ7UUFFRCxJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQzVDLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDakQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDckQ7UUFDRCxJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksU0FBUyxLQUFLLENBQUMsQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzNDLElBQUksS0FBSyxHQUFHLEdBQUcsQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxRSxJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDaEQsR0FBRyxHQUFHLEdBQUcsQ0FBQyxPQUFPLENBQUMsTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDckQ7UUFDRCxJQUFJLFNBQVMsR0FBRyxHQUFHLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLElBQUksU0FB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QUFFLENBQUMsQ0FBQztRQUMvQyxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbEYsQ0FBQzs7dUhBejdCUSx5QkFBeUI7MkhBQXpCLHlCQUF5Qjs0RkFBekIseUJBQXlCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgVXNlckNyZWF0aW9uQXBpU2VydmljZSB9IGZyb20gXCIuLi8uLi9zaGFyZWQvc2VydmljZXMvdXNlci1jcmVhdGlvbi1hcGkuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBBUEkgfSBmcm9tIFwiLi4vLi4vYXBwLmNvbnN0YW50c1wiO1xyXG4vLyBpbXBvcnQgeyBBdmFpbGFibGVQaG9uZU51bWJlclJhbmdlSW50ZXJmYWNlLCBBdmFpbGFibGVSYW5nZUludGVyZmFjZSwgRG5SYW5nZVR5cGUsIExpbmVJbnRlcmZhY2UgfSBmcm9tIFwicHJvamVjdHMvdHVraS93aWRnZXRzL3VzZXJzLWxpc3Qvc3JjL2NsYXNzZXMvbGluZVwiO1xyXG5pbXBvcnQgeyBBUElTZXJ2aWNlIH0gZnJvbSBcIi4uLy4uL3NoYXJlZC9hcGkvYXBpLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZm9ya0pvaW4sIG1hcCwgT2JzZXJ2YWJsZSwgb2YsIFN1YmplY3QsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IEJpZyBmcm9tIFwiYmlnLmpzXCI7XHJcbmltcG9ydCB7IFNpdGVEZWZhdWx0cyB9IGZyb20gXCIuLi8uLi9jbGFzc2VzL3NpdGVcIjtcclxuaW1wb3J0IHsgU2l0ZSwgU2l0ZUludGVyZmFjZSwgU2l0ZVRlbXBsYXRlSW50ZXJmYWNlIH0gZnJvbSBcIi4uLy4uL2NsYXNzZXMvc2l0ZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgRGV2aWNlRW50cnksXHJcbiAgICBFbmRVc2VySW50ZXJmYWNlLFxyXG4gICAgTGluZU9wdGlvbixcclxuICAgIE92ZXJ2aWV3RGV2aWNlUm93LFxyXG4gICAgT3ZlcnZpZXdMaW5lUm93LFxyXG4gICAgT3ZlcnZpZXdVc2VyUm93LFxyXG4gICAgU2VsZWN0ZWRMaW5lUm93LFxyXG4gICAgVGVtcGxhdGVEZXZpY2VMaWtlLFxyXG4gICAgVGVtcGxhdGVFbmRVc2VyTGlrZSxcclxuICAgIFRlbXBsYXRlTGluZUxpa2UsXHJcbiAgICBVc2VyQ3JlYXRpb25UeXBlLFxyXG4gICAgVXNlckRldGFpbHNGb3JtLFxyXG4gICAgVXNlckRldGFpbHNGb3JtVmFsdWUsXHJcbiAgICBVc2VyVGVtcGxhdGVJbnRlcmZhY2UsXHJcbiAgICBMaW5lSW50ZXJmYWNlLFxyXG4gICAgRGV2aWNlSW50ZXJmYWNlLFxyXG4gICAgRGV2aWNlRGVmYXVsdHNJbnRlcmZhY2UsXHJcbiAgICBBdmFpbGFibGVQaG9uZU51bWJlclJhbmdlSW50ZXJmYWNlLFxyXG4gICAgQXZhaWxhYmxlUmFuZ2VJbnRlcmZhY2UsXHJcbiAgICBEblJhbmdlVHlwZSxcclxuICAgIExpc3RVc2VySW50ZXJmYWNlLFxyXG4gICAgRW5kVXNlcixcclxufSBmcm9tIFwiLi4vLi4vaW50ZXJmYWNlcy91c2VyLWNyZWF0aW9uLXdpemFyZC5pbnRlcmZhY2VzXCI7XHJcbmltcG9ydCB7IGJ1aWxkU2F2YWJsZUVuZFVzZXIgfSBmcm9tIFwiLi4vLi4vdXRpbHMvYnVpbGQtc2F2YWJsZS1lbmQtdXNlclwiO1xyXG5pbXBvcnQgeyBhcHBseURlZmF1bHREZXZpY2VQcmVmaXhJZk1pc3NpbmcgfSBmcm9tIFwiLi4vLi4vdXRpbHMvZGV2aWNlLWRlZmF1bHQtcHJlZml4XCI7XHJcbmltcG9ydCB7IGRldmljZU5hbWVIYXNEeW5hbWljVG9rZW5zLCBzdHJpcERldmljZU5hbWVQcmVmaXggfSBmcm9tIFwiLi4vLi4vdXRpbHMvZGV2aWNlLW5hbWUtZHluYW1pYy10b2tlbnNcIjtcclxuaW1wb3J0IHsgcGFyc2VEZXZpY2VOYW1lUmVnZXhCb2R5IH0gZnJvbSBcIi4uLy4uL3V0aWxzL3BhcnNlLWRldmljZS1uYW1lLXJ1bGVcIjtcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIFVzZXJDcmVhdGlvbldpemFyZFNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSByZWFkb25seSB1c2VyQ3JlYXRpb25BcGlTZXJ2aWNlID0gaW5qZWN0KFVzZXJDcmVhdGlvbkFwaVNlcnZpY2UpO1xyXG5cclxuICAgIHJlYWRvbmx5IGxkYXBUYWJsZUNvbHVtbnM6IHN0cmluZ1tdID0gWyd1c2VySWQnLCAnZmlyc3ROYW1lJywgJ2xhc3ROYW1lJywgJ2VtYWlsJywgJ2FkZCddO1xyXG4gICAgcmVhZG9ubHkgdXNlckNyZWF0aW9uVHlwZXM6IFVzZXJDcmVhdGlvblR5cGVbXSA9IFsnQ1VDTScsICdNVCddO1xyXG5cclxuICAgIHByaXZhdGUgdGVtcGxhdGU6IFVzZXJUZW1wbGF0ZUludGVyZmFjZSB8IG51bGwgPSBudWxsO1xyXG4gICAgcHVibGljIGVuZFVzZXI6IEVuZFVzZXJJbnRlcmZhY2UgfCBudWxsID0gbnVsbDtcclxuICAgIHB1YmxpYyBsaW5lczogTGluZUludGVyZmFjZVtdID0gW107XHJcbiAgICBwdWJsaWMgZGV2aWNlczogRGV2aWNlSW50ZXJmYWNlW10gPSBbXTtcclxuICAgIHB1YmxpYyBkZXZpY2VQcm9maWxlczogRGV2aWNlSW50ZXJmYWNlW10gPSBbXTtcclxuICAgIHByaXZhdGUgdGVtcGxhdGVMaW5lc1NuYXBzaG90OiBMaW5lSW50ZXJmYWNlW10gfCBudWxsID0gbnVsbDtcclxuICAgIHByaXZhdGUgX2N1cnJlbnRTaXRlOiBTaXRlIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gICAgZ2V0IGN1cnJlbnRTaXRlKCk6IFNpdGUgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFNpdGU7XHJcbiAgICB9XHJcblxyXG4gICAgc2l0ZU9wdGlvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICB0ZW1wbGF0ZU9wdGlvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICBsaW5lT3B0aW9uczogTGluZU9wdGlvbltdID0gW107XHJcbiAgICByb3V0ZVBhcnRpdGlvbk9wdGlvbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICBkZXZpY2VSb3dzOiBudW1iZXJbXSA9IFtdO1xyXG4gICAgbGRhcFVzZXJzOiBMaXN0VXNlckludGVyZmFjZVtdID0gW107XHJcbiAgICBvdmVydmlld1VzZXJzOiBPdmVydmlld1VzZXJSb3dbXSA9IFtdO1xyXG4gICAgb3ZlcnZpZXdMaW5lczogT3ZlcnZpZXdMaW5lUm93W10gPSBbXTtcclxuICAgIG92ZXJ2aWV3RGV2aWNlczogT3ZlcnZpZXdEZXZpY2VSb3dbXSA9IFtdO1xyXG4gICAgb3ZlcnZpZXdEZXZpY2VQcm9maWxlczogT3ZlcnZpZXdEZXZpY2VSb3dbXSA9IFtdO1xyXG4gICAgdXNlckRldGFpbHNGb3JtVmFsdWU6IFVzZXJEZXRhaWxzRm9ybVZhbHVlIHwgbnVsbCA9IG51bGw7XHJcbiAgICB1c2VyRGV0YWlsc0Zvcm06IFVzZXJEZXRhaWxzRm9ybSA9IHtcclxuICAgICAgICB1c2VySWQ6ICcnLFxyXG4gICAgICAgIGZpcnN0TmFtZTogJycsXHJcbiAgICAgICAgbGFzdE5hbWU6ICcnLFxyXG4gICAgICAgIGVtYWlsOiAnJyxcclxuICAgIH07XHJcbiAgICBsaW5lU2VsZWN0aW9uczogU2VsZWN0ZWRMaW5lUm93W10gPSBbXTtcclxuICAgIGRldmljZUVudHJpZXM6IERldmljZUVudHJ5W10gPSBbXTtcclxuICAgIGF2YWlsYWJsZU51bWJlcnM6IHN0cmluZ1tdID0gW107XHJcbiAgICBkZXZpY2VUeXBlczogc3RyaW5nW10gPSBbXTtcclxuICAgIHNpdGVEZWZhdWx0czogU2l0ZURlZmF1bHRzIHwgbnVsbCA9IG51bGw7XHJcbiAgICBvcmlnaW5hbFNpdGVEZWZhdWx0czogU2l0ZURlZmF1bHRzIHwgbnVsbCA9IG51bGw7XHJcbiAgICB0ZW1wbGF0ZUxpbmVzOiBUZW1wbGF0ZUxpbmVMaWtlW10gPSBbXTtcclxuICAgIHRlbXBsYXRlRGV2aWNlczogVGVtcGxhdGVEZXZpY2VMaWtlW10gPSBbXTtcclxuICAgIHRlbXBsYXRlVXNlckRldGFpbHM6IFRlbXBsYXRlRW5kVXNlckxpa2UgPSB7fTtcclxuXHJcbiAgICBzZWxlY3RlZFNpdGU6IG51bWJlciB8IG51bGwgPSBudWxsO1xyXG4gICAgc2VsZWN0ZWRUZW1wbGF0ZU5hbWU6IHN0cmluZyB8IG51bGwgPSBudWxsO1xyXG4gICAgc2VsZWN0ZWRUZW1wbGF0ZUlkOiBudW1iZXIgfCBudWxsID0gbnVsbDtcclxuICAgIHNlbGVjdGVkVXNlckNyZWF0aW9uVHlwZTogVXNlckNyZWF0aW9uVHlwZSA9ICdDVUNNJztcclxuICAgIGF2YWlsYWJsZURpZFBhdHRlcm5zTWFwcGVkVG9EbjogYW55ID0ge307XHJcblxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXZpY2VEZWZhdWx0c0xvYWRlZFN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gICAgcmVhZG9ubHkgZGV2aWNlRGVmYXVsdHNMb2FkZWQkID0gdGhpcy5kZXZpY2VEZWZhdWx0c0xvYWRlZFN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcblxyXG4gICAgZ2V0IGZpcnN0TGluZVJvdXRlUGFydGl0aW9uKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubGluZXNbMF0/LmRpcmVjdG9yeU51bWJlcj8ucm91dGVQYXJ0aXRpb25OYW1lID8/ICcnO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBzaXRlRGVmYXVsdFJvdXRlUGFydGl0aW9uKCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2l0ZURlZmF1bHRzPy5yb3V0ZVBhcnRpdGlvbiB8fCAnJztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgcm91dGVQYXJ0aXRpb25OYW1lc0xpc3QoKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNpdGVEZWZhdWx0cyA/IHRoaXMuc2l0ZURlZmF1bHRzLnJvdXRlUGFydGl0aW9uRmlsdGVyIDogW107XHJcbiAgICB9XHJcblxyXG4gICAgc2VsZWN0ZWRMZGFwVXNlcjogTGlzdFVzZXJJbnRlcmZhY2UgfCBudWxsID0gbnVsbDtcclxuICAgIGxkYXBVc2Vyc1RvdGFsID0gMDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICAvLyB0aGlzLmxvYWRQbGFjZWhvbGRlckRhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgaXNMZGFwSW50ZWdyYXRlZCgpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gISF0aGlzLmVuZFVzZXI/LmxkYXBJbnRlZ3JhdGVkO1xyXG4gICAgfVxyXG5cclxuICAgIHNlbGVjdExkYXBVc2VyKHVzZXI6IExpc3RVc2VySW50ZXJmYWNlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZExkYXBVc2VyID0gdXNlcjtcclxuICAgICAgICBpZiAodGhpcy5lbmRVc2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci5sZGFwSW50ZWdyYXRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci51c2VyaWQgPSB1c2VyLnVzZXJpZDtcclxuICAgICAgICAgICAgdGhpcy5lbmRVc2VyLmZpcnN0TmFtZSA9IHVzZXIuZmlyc3ROYW1lID8/ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIubGFzdE5hbWUgPSB1c2VyLmxhc3ROYW1lID8/ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIuZW1haWwgPSB1c2VyLmVtYWlsID8/ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybSA9IHtcclxuICAgICAgICAgICAgdXNlcklkOiB1c2VyLnVzZXJpZCxcclxuICAgICAgICAgICAgZmlyc3ROYW1lOiB1c2VyLmZpcnN0TmFtZSA/PyAnJyxcclxuICAgICAgICAgICAgbGFzdE5hbWU6IHVzZXIubGFzdE5hbWUgPz8gJycsXHJcbiAgICAgICAgICAgIGVtYWlsOiB1c2VyLmVtYWlsID8/ICcnLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdVc2VycygpO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyTGRhcFVzZXJTZWxlY3Rpb24oKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZExkYXBVc2VyID0gbnVsbDtcclxuICAgICAgICBpZiAodGhpcy5lbmRVc2VyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci5sZGFwSW50ZWdyYXRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIudXNlcmlkID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci5maXJzdE5hbWUgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5lbmRVc2VyLmxhc3ROYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci5lbWFpbCA9ICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybSA9IHtcclxuICAgICAgICAgICAgdXNlcklkOiAnJyxcclxuICAgICAgICAgICAgZmlyc3ROYW1lOiAnJyxcclxuICAgICAgICAgICAgbGFzdE5hbWU6ICcnLFxyXG4gICAgICAgICAgICBlbWFpbDogJycsXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnJlYnVpbGRPdmVydmlld1VzZXJzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNMZGFwVXNlclJvd1NlbGVjdGVkKHJvdzogTGlzdFVzZXJJbnRlcmZhY2UpOiBib29sZWFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZExkYXBVc2VyPy51c2VyaWQgPT09IHJvdy51c2VyaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TGRhcFVzZXJzUmVzdWx0KHVzZXJzOiBMaXN0VXNlckludGVyZmFjZVtdLCB0b3RhbDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5sZGFwVXNlcnMgPSB1c2VycztcclxuICAgICAgICB0aGlzLmxkYXBVc2Vyc1RvdGFsID0gdG90YWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldFNlbGVjdGVkU2l0ZShzaXRlOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFNpdGUgPSBzaXRlIHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0U2VsZWN0ZWRUZW1wbGF0ZSh0ZW1wbGF0ZT86IFVzZXJUZW1wbGF0ZUludGVyZmFjZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZU5hbWUgPSB0ZW1wbGF0ZT8ubmFtZSB8fCBudWxsO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRUZW1wbGF0ZUlkID0gdGVtcGxhdGU/LmlkIHx8IG51bGw7XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdVc2VycygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRDdXJyZW50U2l0ZShzaXRlOiBTaXRlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fY3VycmVudFNpdGUgPSBzaXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlc2V0VGVtcGxhdGVEcml2ZW5EYXRhKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMubGluZU9wdGlvbnMgPSBbXTtcclxuICAgICAgICB0aGlzLnJvdXRlUGFydGl0aW9uT3B0aW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMubGluZVNlbGVjdGlvbnMgPSBbXTtcclxuICAgICAgICB0aGlzLmRldmljZUVudHJpZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmRldmljZVJvd3MgPSBbXTtcclxuICAgICAgICB0aGlzLnJlYnVpbGRPdmVydmlld0xpbmVzKCk7XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdEZXZpY2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXBwbHlUZW1wbGF0ZVRva2VuUGF5bG9hZChwYXlsb2FkOiBVc2VyVGVtcGxhdGVJbnRlcmZhY2UpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlID0gdGhpcy5leHRyYWN0VGVtcGxhdGVGcm9tVG9rZW5QYXlsb2FkKHBheWxvYWQpO1xyXG4gICAgICAgIHRoaXMuZW5kVXNlciA9IG5ldyBFbmRVc2VyKHRoaXMudGVtcGxhdGU/LmVuZFVzZXIpO1xyXG4gICAgICAgIHRoaXMubGluZXMgPSB0aGlzLmVuZFVzZXIgJiYgQXJyYXkuaXNBcnJheSh0aGlzLmVuZFVzZXIubGluZXMpID8gdGhpcy5lbmRVc2VyLmxpbmVzIDogW107XHJcbiAgICAgICAgdGhpcy5kZXZpY2VzID0gdGhpcy5lbmRVc2VyICYmIEFycmF5LmlzQXJyYXkodGhpcy5lbmRVc2VyLmRldmljZXMpID8gdGhpcy5lbmRVc2VyLmRldmljZXMgOiBbXTtcclxuICAgICAgICB0aGlzLmRldmljZVByb2ZpbGVzID0gdGhpcy5lbmRVc2VyICYmIEFycmF5LmlzQXJyYXkodGhpcy5lbmRVc2VyLmRldmljZVByb2ZpbGVzKSA/IHRoaXMuZW5kVXNlci5kZXZpY2VQcm9maWxlcyA6IFtdO1xyXG5cclxuICAgICAgICB0aGlzLmluaXRUZW1wbGF0ZURuc05hbWVzRm9yTGluZXMoKTtcclxuXHJcbiAgICAgICAgLy8gdGhpcy51c2VyRGV0YWlsc0Zvcm0gPSB7XHJcbiAgICAgICAgLy8gICAgIHVzZXJJZDogdGhpcy52YWx1ZVRvU3RyaW5nKHRoaXMuZW5kVXNlcj8udXNlcmlkID8/ICcnKSxcclxuICAgICAgICAvLyAgICAgZmlyc3ROYW1lOiB0aGlzLnZhbHVlVG9TdHJpbmcodGhpcy5lbmRVc2VyPy5maXJzdE5hbWUgPz8gJycpLFxyXG4gICAgICAgIC8vICAgICBsYXN0TmFtZTogdGhpcy52YWx1ZVRvU3RyaW5nKHRoaXMuZW5kVXNlcj8ubGFzdE5hbWUgPz8gJycpLFxyXG4gICAgICAgIC8vICAgICBlbWFpbDogdGhpcy52YWx1ZVRvU3RyaW5nKHRoaXMuZW5kVXNlcj8uZW1haWwgPz8gJycpXHJcbiAgICAgICAgLy8gfTtcclxuXHJcbiAgICAgICAgLy8gY29uc3QgbWFwcGVkTGluZU9wdGlvbnM6IExpbmVPcHRpb25bXSA9IGxpbmVzRnJvbVRlbXBsYXRlXHJcbiAgICAgICAgLy8gICAgIC5tYXAobGluZSA9PiAoe1xyXG4gICAgICAgIC8vICAgICAgICAgbnVtYmVyOiB0aGlzLnZhbHVlVG9TdHJpbmcobGluZT8uZGlyZWN0b3J5TnVtYmVyPy5kaXJlY3RvcnlOdW1iZXIpLFxyXG4gICAgICAgIC8vICAgICAgICAgZGlkOiB0aGlzLnZhbHVlVG9TdHJpbmcobGluZT8uZGlkUGF0dGVybnM/LlswXT8ucGF0dGVybiB8fCBsaW5lPy5kaXJlY3RvcnlOdW1iZXI/LmRpcmVjdG9yeU51bWJlciksXHJcbiAgICAgICAgLy8gICAgICAgICBjc3M6IHRoaXMudmFsdWVUb1N0cmluZyhcclxuICAgICAgICAvLyAgICAgICAgICAgICB0eXBlb2YgbGluZT8uY2FsbGluZ1NlYXJjaFNwYWNlID09PSAnc3RyaW5nJ1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICA/IGxpbmUuY2FsbGluZ1NlYXJjaFNwYWNlXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIDogbGluZT8uY2FsbGluZ1NlYXJjaFNwYWNlPy5uYW1lXHJcbiAgICAgICAgLy8gICAgICAgICApLFxyXG4gICAgICAgIC8vICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMudmFsdWVUb1N0cmluZyhsaW5lPy5kZXNjcmlwdGlvbilcclxuICAgICAgICAvLyAgICAgfSkpXHJcbiAgICAgICAgLy8gICAgIC5maWx0ZXIobGluZSA9PiBsaW5lLm51bWJlci50cmltKCkubGVuZ3RoID4gMCk7XHJcblxyXG4gICAgICAgIHRoaXMuZGV2aWNlcy5mb3JFYWNoKGRldmljZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5pdERldmljZVdpdGhTaXRlSW5mbyhkZXZpY2UpO1xyXG4gICAgICAgICAgICAvLyBhcHBseURlZmF1bHREZXZpY2VQcmVmaXhJZk1pc3NpbmcoZGV2aWNlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmRldmljZVByb2ZpbGVzLmZvckVhY2goZGV2aWNlID0+IHRoaXMuaW5pdERldmljZVdpdGhTaXRlSW5mbyhkZXZpY2UpKTtcclxuICAgICAgICB0aGlzLmxpbmVzLmZvckVhY2gobGluZSA9PiB0aGlzLmluaXRMaW5lV2l0aFNpdGVJbmZvKGxpbmUpKTtcclxuXHJcbiAgICAgICAgdGhpcy5jYXB0dXJlVGVtcGxhdGVMaW5lc1NuYXBzaG90KCk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkU2l0ZSkge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWREZXZpY2VEZWZhdWx0c0ZvckRldmljZXModGhpcy5zZWxlY3RlZFNpdGUpLnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaWYgKG1hcHBlZExpbmVPcHRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgIC8vICAgICB0aGlzLmxpbmVPcHRpb25zID0gdGhpcy51bmlxdWVCeU51bWJlcihtYXBwZWRMaW5lT3B0aW9ucyk7XHJcbiAgICAgICAgLy8gICAgIHRoaXMubGluZVNlbGVjdGlvbnMgPSB0aGlzLmxpbmVPcHRpb25zLm1hcChsaW5lID0+ICh7XHJcbiAgICAgICAgLy8gICAgICAgICBsaW5lTnVtYmVyOiBsaW5lLm51bWJlcixcclxuICAgICAgICAvLyAgICAgICAgIHJvdXRlUGFydGl0aW9uTmFtZTogbGluZXNGcm9tVGVtcGxhdGUuZmluZChcclxuICAgICAgICAvLyAgICAgICAgICAgICBzb3VyY2UgPT4gKHNvdXJjZT8uZGlyZWN0b3J5TnVtYmVyPy5kaXJlY3RvcnlOdW1iZXIgfHwgJycpID09PSBsaW5lLm51bWJlclxyXG4gICAgICAgIC8vICAgICAgICAgKT8uZGlyZWN0b3J5TnVtYmVyPy5yb3V0ZVBhcnRpdGlvbk5hbWUgfHwgbnVsbFxyXG4gICAgICAgIC8vICAgICB9KSk7XHJcbiAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgY29uc3QgbGluZUFzc29jaWF0aW9ucyA9IGRldmljZXNGcm9tVGVtcGxhdGUuZmxhdE1hcChkZXZpY2UgPT4gZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMgfHwgW10pO1xyXG4gICAgICAgIC8vICAgICBjb25zdCBhc3NvY2lhdGVkTGluZU9wdGlvbnM6IExpbmVPcHRpb25bXSA9IGxpbmVBc3NvY2lhdGlvbnNcclxuICAgICAgICAvLyAgICAgICAgIC5tYXAoYXNzb2NpYXRpb24gPT4ge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IGFzc29jaWF0aW9uPy5kaXJlY3RvcnlOdW1iZXI/LmRpcmVjdG9yeU51bWJlciB8fCAnJztcclxuICAgICAgICAvLyAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBudW1iZXIsXHJcbiAgICAgICAgLy8gICAgICAgICAgICAgICAgIGRpZDogbnVtYmVyLFxyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBjc3M6ICcnLFxyXG4gICAgICAgIC8vICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJydcclxuICAgICAgICAvLyAgICAgICAgICAgICB9O1xyXG4gICAgICAgIC8vICAgICAgICAgfSlcclxuICAgICAgICAvLyAgICAgICAgIC5maWx0ZXIobGluZSA9PiBsaW5lLm51bWJlci50cmltKCkubGVuZ3RoID4gMCk7XHJcblxyXG4gICAgICAgIC8vICAgICB0aGlzLmxpbmVPcHRpb25zID0gdGhpcy51bmlxdWVCeU51bWJlcihhc3NvY2lhdGVkTGluZU9wdGlvbnMpO1xyXG4gICAgICAgIC8vICAgICB0aGlzLmxpbmVTZWxlY3Rpb25zID0gdGhpcy5saW5lT3B0aW9ucy5tYXAobGluZSA9PiAoe1xyXG4gICAgICAgIC8vICAgICAgICAgbGluZU51bWJlcjogbGluZS5udW1iZXIsXHJcbiAgICAgICAgLy8gICAgICAgICByb3V0ZVBhcnRpdGlvbk5hbWU6IGxpbmVBc3NvY2lhdGlvbnMuZmluZChcclxuICAgICAgICAvLyAgICAgICAgICAgICBzb3VyY2UgPT4gKHNvdXJjZT8uZGlyZWN0b3J5TnVtYmVyPy5kaXJlY3RvcnlOdW1iZXIgfHwgJycpID09PSBsaW5lLm51bWJlclxyXG4gICAgICAgIC8vICAgICAgICAgKT8uZGlyZWN0b3J5TnVtYmVyPy5yb3V0ZVBhcnRpdGlvbk5hbWUgfHwgbnVsbFxyXG4gICAgICAgIC8vICAgICB9KSk7XHJcblxyXG4gICAgICAgIC8vICAgICB0aGlzLnRlbXBsYXRlTGluZXMuZm9yRWFjaCgobGluZTogYW55KSA9PiB0aGlzLmluaXRMaW5lV2l0aFNpdGVJbmZvKGxpbmUpKTtcclxuICAgICAgICAvLyAgICAgdGhpcy5pbml0VGVtcGxhdGVEbnNOYW1lc0ZvckxpbmVzKHRoaXMudGVtcGxhdGVMaW5lcyk7XHJcbiAgICAgICAgLy8gfVxyXG5cclxuICAgICAgICAvLyBjb25zdCByb3V0ZVBhcnRpdGlvbnMgPSB0aGlzLmxpbmVTZWxlY3Rpb25zXHJcbiAgICAgICAgLy8gICAgIC5tYXAobGluZSA9PiBsaW5lLnJvdXRlUGFydGl0aW9uTmFtZSlcclxuICAgICAgICAvLyAgICAgLmZpbHRlcigodmFsdWUpOiB2YWx1ZSBpcyBzdHJpbmcgPT4gISF2YWx1ZSAmJiB2YWx1ZS50cmltKCkubGVuZ3RoID4gMCk7XHJcbiAgICAgICAgLy8gdGhpcy5yb3V0ZVBhcnRpdGlvbk9wdGlvbnMgPSB0aGlzLnVuaXF1ZVN0cmluZ3Mocm91dGVQYXJ0aXRpb25zKTtcclxuXHJcbiAgICAgICAgLy8gdGhpcy5kZXZpY2VFbnRyaWVzID0gZGV2aWNlc0Zyb21UZW1wbGF0ZS5tYXAoZGV2aWNlID0+ICh7XHJcbiAgICAgICAgLy8gICAgIGRldmljZVR5cGU6IHRoaXMudmFsdWVUb1N0cmluZyhkZXZpY2UuZGV2aWNlVHlwZSksXHJcbiAgICAgICAgLy8gICAgIHByb3RvY29sOiB0aGlzLnZhbHVlVG9TdHJpbmcoZGV2aWNlLnByb3RvY29sKSxcclxuICAgICAgICAvLyAgICAgYnV0dG9uVGVtcGxhdGU6IHRoaXMudmFsdWVUb1N0cmluZyhkZXZpY2UuYnV0dG9uVGVtcGxhdGUpLFxyXG4gICAgICAgIC8vICAgICBuYW1lOiB0aGlzLnZhbHVlVG9TdHJpbmcoZGV2aWNlLm5hbWUpXHJcbiAgICAgICAgLy8gfSkpO1xyXG4gICAgICAgIC8vIHRoaXMuZGV2aWNlUm93cyA9IHRoaXMuZGV2aWNlRW50cmllcy5tYXAoKF8sIGluZGV4KSA9PiBpbmRleCArIDEpO1xyXG5cclxuICAgICAgICAvLyB0aGlzLnJlYnVpbGRPdmVydmlld1VzZXJzKCk7XHJcbiAgICAgICAgLy8gdGhpcy5yZWJ1aWxkT3ZlcnZpZXdMaW5lcygpO1xyXG4gICAgICAgIC8vIHRoaXMucmVidWlsZE92ZXJ2aWV3RGV2aWNlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFNlbGVjdGVkVXNlckNyZWF0aW9uVHlwZSh0eXBlOiBVc2VyQ3JlYXRpb25UeXBlKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJDcmVhdGlvblR5cGUgPSB0eXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZXNldFVzZXJEZXRhaWxzU3RlcFN0YXRlKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtVmFsdWUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtID0ge1xyXG4gICAgICAgICAgICB1c2VySWQ6ICcnLFxyXG4gICAgICAgICAgICBmaXJzdE5hbWU6ICcnLFxyXG4gICAgICAgICAgICBsYXN0TmFtZTogJycsXHJcbiAgICAgICAgICAgIGVtYWlsOiAnJyxcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRMZGFwVXNlciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5sZGFwVXNlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLmxkYXBVc2Vyc1RvdGFsID0gMDtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMudGVtcGxhdGVMaW5lc1NuYXBzaG90KSB7XHJcbiAgICAgICAgICAgIHRoaXMubGluZXMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMudGVtcGxhdGVMaW5lc1NuYXBzaG90KSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aGlzLmRldmljZXMuZm9yRWFjaChkZXZpY2UgPT4ge1xyXG4gICAgICAgIC8vICAgICBkZXZpY2UubmFtZSA9ICcnO1xyXG4gICAgICAgIC8vIH0pO1xyXG4gICAgICAgIC8vIHRoaXMuZGV2aWNlUHJvZmlsZXMuZm9yRWFjaChwcm9maWxlID0+IHtcclxuICAgICAgICAvLyAgICAgcHJvZmlsZS5uYW1lID0gJyc7XHJcbiAgICAgICAgLy8gfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVuZFVzZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5lbmRVc2VyLnVzZXJpZCA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIuZmlyc3ROYW1lID0gJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci5sYXN0TmFtZSA9ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIuZW1haWwgPSAnJztcclxuICAgICAgICAgICAgdGhpcy5lbmRVc2VyLmxkYXBJbnRlZ3JhdGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci5saW5lcyA9IHRoaXMubGluZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm92ZXJ2aWV3VXNlcnMgPSBbXTtcclxuICAgICAgICB0aGlzLnJlYnVpbGRPdmVydmlld0xpbmVzKCk7XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdEZXZpY2VzKCk7XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdEZXZpY2VQcm9maWxlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FwdHVyZVRlbXBsYXRlTGluZXNTbmFwc2hvdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnRlbXBsYXRlTGluZXNTbmFwc2hvdCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5saW5lcykpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFVzZXJEZXRhaWxzRmllbGQoZmllbGQ6IGtleW9mIFVzZXJEZXRhaWxzRm9ybSwgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLnVzZXJEZXRhaWxzRm9ybSxcclxuICAgICAgICAgICAgW2ZpZWxkXTogdmFsdWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3VXNlcnMoKTtcclxuICAgIH1cclxuXHJcbiAgICBhcHBseVVzZXJEZXRhaWxzRm9ybVZhbHVlKGZvcm1WYWx1ZTogVXNlckRldGFpbHNGb3JtVmFsdWUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybVZhbHVlID0gZm9ybVZhbHVlO1xyXG4gICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtID0ge1xyXG4gICAgICAgICAgICB1c2VySWQ6IGZvcm1WYWx1ZS51c2VySWQgfHwgJycsXHJcbiAgICAgICAgICAgIGZpcnN0TmFtZTogZm9ybVZhbHVlLmZpcnN0TmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgbGFzdE5hbWU6IGZvcm1WYWx1ZS5sYXN0TmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgZW1haWw6IGZvcm1WYWx1ZS5lbWFpbCB8fCAnJyxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBmb3JtVmFsdWUubGluZXM/LmZvckVhY2goKGxpbmVWYWx1ZSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbGluZSA9IHRoaXMubGluZXNbaW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoIWxpbmU/LmRpcmVjdG9yeU51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxpbmUuZGlyZWN0b3J5TnVtYmVyLmRpcmVjdG9yeU51bWJlciA9IGxpbmVWYWx1ZS5udW1iZXIgfHwgJyc7XHJcbiAgICAgICAgICAgIGxpbmUuZGlyZWN0b3J5TnVtYmVyLnJvdXRlUGFydGl0aW9uTmFtZSA9IGxpbmVWYWx1ZS5yb3V0ZVBhcnRpdGlvbiB8fCAnJztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZm9ybVZhbHVlLmRldmljZXM/LmZvckVhY2goKGRldmljZVZhbHVlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBkZXZpY2UgPSB0aGlzLmRldmljZXNbaW5kZXhdO1xyXG4gICAgICAgICAgICBpZiAoIWRldmljZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRldmljZS5uYW1lID0gZGV2aWNlVmFsdWUubmFtZSB8fCAnJztcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZm9ybVZhbHVlLmRldmljZVByb2ZpbGVzPy5mb3JFYWNoKChwcm9maWxlVmFsdWUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb2ZpbGUgPSB0aGlzLmRldmljZVByb2ZpbGVzW2luZGV4XTtcclxuICAgICAgICAgICAgaWYgKCFwcm9maWxlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcHJvZmlsZS5uYW1lID0gcHJvZmlsZVZhbHVlLm5hbWUgfHwgJyc7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmVuZFVzZXIpIHtcclxuICAgICAgICAgICAgdGhpcy5lbmRVc2VyLnVzZXJpZCA9IGZvcm1WYWx1ZS51c2VySWQgfHwgJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci5maXJzdE5hbWUgPSBmb3JtVmFsdWUuZmlyc3ROYW1lIHx8ICcnO1xyXG4gICAgICAgICAgICB0aGlzLmVuZFVzZXIubGFzdE5hbWUgPSBmb3JtVmFsdWUubGFzdE5hbWUgfHwgJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlci5lbWFpbCA9IGZvcm1WYWx1ZS5lbWFpbCB8fCAnJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3VXNlcnMoKTtcclxuICAgICAgICB0aGlzLnJlYnVpbGRPdmVydmlld0xpbmVzKCk7XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdEZXZpY2VzKCk7XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdEZXZpY2VQcm9maWxlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBSZXBsYWNlcyBbRE5dL1tGTl0vW0xOXSBwbGFjZWhvbGRlcnMgaW4gZGV2aWNlIG5hbWVzIGFmdGVyIGEgZGlyZWN0b3J5IG51bWJlciBpcyBjaG9zZW4uICovXHJcbiAgICBhcHBseURpcmVjdG9yeU51bWJlclRvRGV2aWNlTmFtZXMoZGlyZWN0b3J5TnVtYmVyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBkbiA9IGRpcmVjdG9yeU51bWJlcj8udHJpbSgpO1xyXG4gICAgICAgIGlmICghZG4pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdXNlciA9IHtcclxuICAgICAgICAgICAgZmlyc3ROYW1lOiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5maXJzdE5hbWUsXHJcbiAgICAgICAgICAgIGxhc3ROYW1lOiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5sYXN0TmFtZSxcclxuICAgICAgICAgICAgdXNlcmlkOiB0aGlzLnVzZXJEZXRhaWxzRm9ybS51c2VySWQsXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzb2x2ZURldmljZU5hbWUgPSAoZGV2aWNlOiBEZXZpY2VJbnRlcmZhY2UpOiB2b2lkID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSAoZGV2aWNlLm5ld05hbWUgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICAgICAgaWYgKCFkZXZpY2VOYW1lSGFzRHluYW1pY1Rva2Vucyh0ZW1wbGF0ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcmVzb2x2ZWRGdWxsID0gdGhpcy5tdXRsaVN0cmluZ1JlcGxhY2UoXHJcbiAgICAgICAgICAgICAgICB7fSxcclxuICAgICAgICAgICAgICAgIHRoaXMucmVwbGFjZUR5bmFtaWNWYWx1ZUZvcm1hdCh0ZW1wbGF0ZSksXHJcbiAgICAgICAgICAgICAgICBkbixcclxuICAgICAgICAgICAgICAgIHVzZXJcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgZGV2aWNlLm5hbWUgPSBzdHJpcERldmljZU5hbWVQcmVmaXgocmVzb2x2ZWRGdWxsLCBkZXZpY2UucHJlZml4KTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmRldmljZXMuZm9yRWFjaChyZXNvbHZlRGV2aWNlTmFtZSk7XHJcbiAgICAgICAgdGhpcy5kZXZpY2VQcm9maWxlcy5mb3JFYWNoKHJlc29sdmVEZXZpY2VOYW1lKTtcclxuICAgICAgICB0aGlzLnJlYnVpbGRPdmVydmlld0RldmljZXMoKTtcclxuICAgICAgICB0aGlzLnJlYnVpbGRPdmVydmlld0RldmljZVByb2ZpbGVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0TGluZVNlbGVjdGlvbihpbmRleDogbnVtYmVyLCBsaW5lTnVtYmVyOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmxpbmVTZWxlY3Rpb25zW2luZGV4XSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubGluZVNlbGVjdGlvbnNbaW5kZXhdID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLmxpbmVTZWxlY3Rpb25zW2luZGV4XSxcclxuICAgICAgICAgICAgbGluZU51bWJlclxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdMaW5lcygpO1xyXG4gICAgICAgIHRoaXMucmVidWlsZE92ZXJ2aWV3RGV2aWNlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFJvdXRlUGFydGl0aW9uU2VsZWN0aW9uKGluZGV4OiBudW1iZXIsIHJvdXRlUGFydGl0aW9uTmFtZTogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xyXG4gICAgICAgIGlmICghdGhpcy5saW5lU2VsZWN0aW9uc1tpbmRleF0pIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxpbmVTZWxlY3Rpb25zW2luZGV4XSA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5saW5lU2VsZWN0aW9uc1tpbmRleF0sXHJcbiAgICAgICAgICAgIHJvdXRlUGFydGl0aW9uTmFtZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdMaW5lcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERldmljZU5hbWUoaW5kZXg6IG51bWJlciwgbmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRldmljZUVudHJpZXNbaW5kZXhdKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGV2aWNlVHlwZSA9IHRoaXMuZGV2aWNlRW50cmllc1tpbmRleF0uZGV2aWNlVHlwZSB8fCAnJztcclxuICAgICAgICBjb25zdCBub3JtYWxpemVkTmFtZSA9IGRldmljZVR5cGUuaW5jbHVkZXMoJzg4NTEnKVxyXG4gICAgICAgICAgICA/IG5hbWUucmVwbGFjZSgvXlNFUFxccyovaSwgJycpXHJcbiAgICAgICAgICAgIDogbmFtZTtcclxuICAgICAgICB0aGlzLmRldmljZUVudHJpZXNbaW5kZXhdID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLmRldmljZUVudHJpZXNbaW5kZXhdLFxyXG4gICAgICAgICAgICBuYW1lOiBub3JtYWxpemVkTmFtZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdGhpcy5yZWJ1aWxkT3ZlcnZpZXdEZXZpY2VzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGV2aWNlRGlzcGxheU5hbWUoaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmRldmljZUVudHJpZXNbaW5kZXhdO1xyXG4gICAgICAgIGlmICghZW50cnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGVudHJ5LmRldmljZVR5cGU/LmluY2x1ZGVzKCc4ODUxJykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGBTRVAgJHtlbnRyeS5uYW1lIHx8ICcnfWA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoaW5kZXggPT09IDEpIHtcclxuICAgICAgICAgICAgY29uc3QgbGluZU51bWJlciA9IHRoaXMubGluZVNlbGVjdGlvbnNbMF0/LmxpbmVOdW1iZXI7XHJcbiAgICAgICAgICAgIHJldHVybiBsaW5lTnVtYmVyID8gYENTRiR7bGluZU51bWJlcn1gIDogJ0NTRltETl0nO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGVudHJ5Lm5hbWUgfHwgJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNpdGVBbGxEYXRhKHNpdGVJZDogbnVtYmVyKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy51c2VyQ3JlYXRpb25BcGlTZXJ2aWNlLmdldFNpdGVBbGxEYXRhKHNpdGVJZCkucGlwZShcclxuICAgICAgICAgICAgdGFwKChyZXM6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlcyAmJiByZXNbMF0pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXRlID0gbmV3IFNpdGUocmVzWzBdIGFzIFNpdGVJbnRlcmZhY2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRTaXRlID0gc2l0ZS5pZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzWzFdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaXRlRGVmYXVsdHMgPSBuZXcgU2l0ZURlZmF1bHRzKHJlc1sxXSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMub3JpZ2luYWxTaXRlRGVmYXVsdHMgPSBuZXcgU2l0ZURlZmF1bHRzKHJlc1sxXSwgZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVQYXJ0aXRpb25PcHRpb25zID0gWy4uLnRoaXMucm91dGVQYXJ0aXRpb25OYW1lc0xpc3RdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHJlcyAmJiByZXNbMl0pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRldmljZVR5cGVzID0gcmVzWzJdIGFzIHN0cmluZ1tdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgc3dpdGNoTWFwKHJlcyA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5sb2FkRGV2aWNlRGVmYXVsdHNGb3JEZXZpY2VzKHNpdGVJZCkucGlwZShtYXAoKCkgPT4gcmVzKSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGxvYWREZXZpY2VEZWZhdWx0c0ZvckRldmljZXMoc2l0ZUlkOiBudW1iZXIpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcclxuICAgICAgICBjb25zdCBkZXZpY2VUeXBlcyA9IHRoaXMuZ2V0VW5pcXVlRGV2aWNlVHlwZXMoKTtcclxuICAgICAgICBpZiAoIWRldmljZVR5cGVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHJlcXVlc3RzID0gZGV2aWNlVHlwZXMubWFwKGRldmljZVR5cGUgPT5cclxuICAgICAgICAgICAgdGhpcy51c2VyQ3JlYXRpb25BcGlTZXJ2aWNlLmdldERldmljZURlZmF1bHRzKFN0cmluZyhzaXRlSWQpLCBkZXZpY2VUeXBlKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgdGFwKGRlZmF1bHRzID0+IHRoaXMuYXBwbHlEZXZpY2VEZWZhdWx0c1RvVHlwZShkZXZpY2VUeXBlLCBkZWZhdWx0cykpLFxyXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiBvZihudWxsKSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJldHVybiBmb3JrSm9pbihyZXF1ZXN0cykucGlwZShcclxuICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuZGV2aWNlRGVmYXVsdHNMb2FkZWRTdWJqZWN0Lm5leHQoKSksXHJcbiAgICAgICAgICAgIG1hcCgoKSA9PiB1bmRlZmluZWQpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFVuaXF1ZURldmljZVR5cGVzKCk6IHN0cmluZ1tdIHtcclxuICAgICAgICBjb25zdCB0eXBlcyA9IFtcclxuICAgICAgICAgICAgLi4udGhpcy5kZXZpY2VzLm1hcChkZXZpY2UgPT4gZGV2aWNlLmRldmljZVR5cGUpLFxyXG4gICAgICAgICAgICAuLi50aGlzLmRldmljZVByb2ZpbGVzLm1hcChwcm9maWxlID0+IHByb2ZpbGUuZGV2aWNlVHlwZSksXHJcbiAgICAgICAgXS5maWx0ZXIoKHR5cGUpOiB0eXBlIGlzIHN0cmluZyA9PiAhIXR5cGUgJiYgdHlwZS50cmltKCkubGVuZ3RoID4gMCk7XHJcbiAgICAgICAgcmV0dXJuIFsuLi5uZXcgU2V0KHR5cGVzKV07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhcHBseURldmljZURlZmF1bHRzVG9UeXBlKGRldmljZVR5cGU6IHN0cmluZywgZGVmYXVsdHM6IERldmljZURlZmF1bHRzSW50ZXJmYWNlKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgbmFtZVZhbGlkYXRpb25SZWdleCA9IHBhcnNlRGV2aWNlTmFtZVJlZ2V4Qm9keShkZWZhdWx0cy5kZXZpY2VOYW1lUmVnZXgpO1xyXG4gICAgICAgIGNvbnN0IHRhcmdldHMgPSBbLi4udGhpcy5kZXZpY2VzLCAuLi50aGlzLmRldmljZVByb2ZpbGVzXS5maWx0ZXIoXHJcbiAgICAgICAgICAgIGRldmljZSA9PiBkZXZpY2UuZGV2aWNlVHlwZSA9PT0gZGV2aWNlVHlwZVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHRhcmdldHMuZm9yRWFjaChkZXZpY2UgPT4ge1xyXG4gICAgICAgICAgICBkZXZpY2UuZGV2aWNlRGVmYXVsdHMgPSBkZWZhdWx0cztcclxuICAgICAgICAgICAgZGV2aWNlLm5hbWVWYWxpZGF0aW9uUmVnZXggPSBuYW1lVmFsaWRhdGlvblJlZ2V4O1xyXG4gICAgICAgICAgICBkZXZpY2UubmFtZVZhbGlkYXRpb25DYXB0aW9uID0gZGVmYXVsdHMuZGV2aWNlTmFtZUV4cGxhaW5lZDtcclxuICAgICAgICAgICAgYXBwbHlEZWZhdWx0RGV2aWNlUHJlZml4SWZNaXNzaW5nKGRldmljZSwgZGVmYXVsdHMpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERldmljZU5hbWVQcmVmaXgoZGV2aWNlSW5kZXg6IG51bWJlciwgaXNQcm9maWxlID0gZmFsc2UpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICBjb25zdCBkZXZpY2UgPSBpc1Byb2ZpbGUgPyB0aGlzLmRldmljZVByb2ZpbGVzW2RldmljZUluZGV4XSA6IHRoaXMuZGV2aWNlc1tkZXZpY2VJbmRleF07XHJcbiAgICAgICAgY29uc3QgcHJlZml4ID0gZGV2aWNlPy5wcmVmaXg/LnRyaW0oKTtcclxuICAgICAgICByZXR1cm4gcHJlZml4IHx8IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGV2aWNlTmFtZVZhbGlkYXRpb25DYXB0aW9uKGRldmljZUluZGV4OiBudW1iZXIsIGlzUHJvZmlsZSA9IGZhbHNlKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBkZXZpY2UgPSBpc1Byb2ZpbGUgPyB0aGlzLmRldmljZVByb2ZpbGVzW2RldmljZUluZGV4XSA6IHRoaXMuZGV2aWNlc1tkZXZpY2VJbmRleF07XHJcbiAgICAgICAgcmV0dXJuIGRldmljZT8ubmFtZVZhbGlkYXRpb25DYXB0aW9uIHx8IGRldmljZT8uZGV2aWNlRGVmYXVsdHM/LmRldmljZU5hbWVFeHBsYWluZWQgfHwgJyc7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGV2aWNlTmFtZVZhbGlkYXRpb25PcHRpb25zKGRldmljZUluZGV4OiBudW1iZXIsIGlzUHJvZmlsZSA9IGZhbHNlKToge1xyXG4gICAgICAgIHJlZ2V4OiBzdHJpbmc7XHJcbiAgICAgICAgY2FwdGlvbjogc3RyaW5nO1xyXG4gICAgfSB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGRldmljZSA9IGlzUHJvZmlsZSA/IHRoaXMuZGV2aWNlUHJvZmlsZXNbZGV2aWNlSW5kZXhdIDogdGhpcy5kZXZpY2VzW2RldmljZUluZGV4XTtcclxuICAgICAgICBjb25zdCByZWdleCA9XHJcbiAgICAgICAgICAgIGRldmljZT8ubmFtZVZhbGlkYXRpb25SZWdleD8udHJpbSgpIHx8XHJcbiAgICAgICAgICAgIHBhcnNlRGV2aWNlTmFtZVJlZ2V4Qm9keShkZXZpY2U/LmRldmljZURlZmF1bHRzPy5kZXZpY2VOYW1lUmVnZXgpO1xyXG4gICAgICAgIGlmICghcmVnZXgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHJlZ2V4LFxyXG4gICAgICAgICAgICBjYXB0aW9uOiB0aGlzLmdldERldmljZU5hbWVWYWxpZGF0aW9uQ2FwdGlvbihkZXZpY2VJbmRleCwgaXNQcm9maWxlKSxcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROdW1iZXJSYW5nZShzaXRlSWQ6IHN0cmluZywgcm91dGVQYXJ0aXRpb246IHN0cmluZyk6IE9ic2VydmFibGU8QXZhaWxhYmxlUmFuZ2VJbnRlcmZhY2U+IHtcclxuICAgICAgICB0aGlzLmF2YWlsYWJsZURpZFBhdHRlcm5zTWFwcGVkVG9EbiA9IHt9O1xyXG4gICAgICAgIGNvbnN0IHBhZ2VTaXplID0gOTk5OTtcclxuICAgICAgICBjb25zdCBwYXJhbXMgPSB7ZG50eXBlOiBEblJhbmdlVHlwZS5leHRlbnNpb24sIHJvdXRlcGFydGl0aW9uOiByb3V0ZVBhcnRpdGlvbiwgc2l6ZTogcGFnZVNpemUsIHBhZ2U6IDB9O1xyXG4gICAgICAgIHRoaXMuYXZhaWxhYmxlTnVtYmVycyA9IFtdO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJDcmVhdGlvbkFwaVNlcnZpY2UuZ2V0QXZhaWxhYmxlRG5JblJhbmdlcyhzaXRlSWQsIHBhcmFtcylcclxuICAgICAgICAucGlwZShtYXAoKHJlczogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHJlcy5hdmFpbGFibGVOdW1iZXJMaXN0LmZvckVhY2goKGF2YWlsYWJsZU51bWJlcjogQXZhaWxhYmxlUGhvbmVOdW1iZXJSYW5nZUludGVyZmFjZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRBdmFpbGFibGVEaWRNYXBwZWRUb0RuKGF2YWlsYWJsZU51bWJlcik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmF2YWlsYWJsZU51bWJlcnMgPSBbLi4udGhpcy5hdmFpbGFibGVOdW1iZXJzLCAuLi50aGlzLmdldFVud3JhcE51bWJlclJhbmdlKGF2YWlsYWJsZU51bWJlcildO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgICAgLy8gLnBpcGUodGhpcy5oYW5kbGVFcnJvcih0cnVlLCBmYWxzZSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVidWlsZE92ZXJ2aWV3VXNlcnMoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgdXNlclRlbXBsYXRlID0gdGhpcy5zZWxlY3RlZFRlbXBsYXRlTmFtZSB8fCAnJztcclxuICAgICAgICBjb25zdCBoYXNVc2VyRGF0YSA9IE9iamVjdC52YWx1ZXModGhpcy51c2VyRGV0YWlsc0Zvcm0pLnNvbWUodmFsdWUgPT4gdmFsdWUudHJpbSgpLmxlbmd0aCA+IDApO1xyXG4gICAgICAgIHRoaXMub3ZlcnZpZXdVc2VycyA9IGhhc1VzZXJEYXRhXHJcbiAgICAgICAgICAgID8gW3tcclxuICAgICAgICAgICAgICAgIHVzZXJJZDogdGhpcy51c2VyRGV0YWlsc0Zvcm0udXNlcklkLFxyXG4gICAgICAgICAgICAgICAgZmlyc3ROYW1lOiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5maXJzdE5hbWUsXHJcbiAgICAgICAgICAgICAgICBsYXN0TmFtZTogdGhpcy51c2VyRGV0YWlsc0Zvcm0ubGFzdE5hbWUsXHJcbiAgICAgICAgICAgICAgICBlbWFpbDogdGhpcy51c2VyRGV0YWlsc0Zvcm0uZW1haWwsXHJcbiAgICAgICAgICAgICAgICB1c2VyVGVtcGxhdGVcclxuICAgICAgICAgICAgfV1cclxuICAgICAgICAgICAgOiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlYnVpbGRPdmVydmlld0xpbmVzKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGZvcm1MaW5lcyA9IHRoaXMudXNlckRldGFpbHNGb3JtVmFsdWU/LmxpbmVzO1xyXG4gICAgICAgIGlmIChmb3JtTGluZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJ2aWV3TGluZXMgPSBmb3JtTGluZXNcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIobGluZSA9PiAhIWxpbmU/Lm51bWJlcj8udHJpbSgpKVxyXG4gICAgICAgICAgICAgICAgLm1hcCgobGluZVZhbHVlLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlTGluZSA9IHRoaXMubGluZXNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNzcyA9IHRoaXMudmFsdWVUb1N0cmluZyh0ZW1wbGF0ZUxpbmU/LmNhbGxpbmdTZWFyY2hTcGFjZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyOiBsaW5lVmFsdWUubnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkaWQ6IGxpbmVWYWx1ZS5saW5lTnVtYmVyIHx8IGxpbmVWYWx1ZS5udW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlUGFydGl0aW9uTmFtZTogbGluZVZhbHVlLnJvdXRlUGFydGl0aW9uIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjc3MsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLnZhbHVlVG9TdHJpbmcodGVtcGxhdGVMaW5lPy5kZXNjcmlwdGlvbiksXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm92ZXJ2aWV3TGluZXMgPSB0aGlzLmxpbmVTZWxlY3Rpb25zXHJcbiAgICAgICAgICAgIC5tYXAoc2VsZWN0aW9uID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghc2VsZWN0aW9uPy5saW5lTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZExpbmUgPSB0aGlzLmxpbmVPcHRpb25zLmZpbmQobGluZSA9PiBsaW5lLm51bWJlciA9PT0gc2VsZWN0aW9uLmxpbmVOdW1iZXIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzZWxlY3RlZExpbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyOiBzZWxlY3RlZExpbmUubnVtYmVyLFxyXG4gICAgICAgICAgICAgICAgICAgIGRpZDogc2VsZWN0ZWRMaW5lLmRpZCxcclxuICAgICAgICAgICAgICAgICAgICByb3V0ZVBhcnRpdGlvbk5hbWU6IHNlbGVjdGlvbi5yb3V0ZVBhcnRpdGlvbk5hbWUgfHwgdGhpcy5yb3V0ZVBhcnRpdGlvbk9wdGlvbnNbMF0gfHwgJycsXHJcbiAgICAgICAgICAgICAgICAgICAgY3NzOiBzZWxlY3RlZExpbmUuY3NzLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzZWxlY3RlZExpbmUuZGVzY3JpcHRpb25cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKGxpbmUpOiBsaW5lIGlzIE92ZXJ2aWV3TGluZVJvdyA9PiAhIWxpbmUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVidWlsZE92ZXJ2aWV3RGV2aWNlcygpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBzZWxlY3RlZExpbmVOdW1iZXJzID0gdGhpcy5vdmVydmlld0xpbmVzLm1hcChsaW5lID0+IGxpbmUubnVtYmVyKS5qb2luKCcsICcpO1xyXG4gICAgICAgIGNvbnN0IGZvcm1EZXZpY2VzID0gdGhpcy51c2VyRGV0YWlsc0Zvcm1WYWx1ZT8uZGV2aWNlcztcclxuICAgICAgICBpZiAoZm9ybURldmljZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJ2aWV3RGV2aWNlcyA9IGZvcm1EZXZpY2VzXHJcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGRldmljZSA9PiAhIWRldmljZS5kZXZpY2VUeXBlPy50cmltKCkgfHwgISFkZXZpY2UubmFtZT8udHJpbSgpKVxyXG4gICAgICAgICAgICAgICAgLm1hcChkZXZpY2UgPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBkZXZpY2UubmFtZSB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICBkZXZpY2VUeXBlOiBkZXZpY2UuZGV2aWNlVHlwZSB8fCAnJyxcclxuICAgICAgICAgICAgICAgICAgICBsaW5lczogc2VsZWN0ZWRMaW5lTnVtYmVycyxcclxuICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7ZGV2aWNlLnByb3RvY29sIHx8ICcnfSAvICR7ZGV2aWNlLmJ1dHRvblRlbXBsYXRlIHx8ICcnfWAudHJpbSgpLFxyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm92ZXJ2aWV3RGV2aWNlcyA9IHRoaXMuZGV2aWNlRW50cmllc1xyXG4gICAgICAgICAgICAubWFwKChkZXZpY2UsIGluZGV4KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgZGV2aWNlLFxyXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IHRoaXMuZ2V0RGV2aWNlRGlzcGxheU5hbWUoaW5kZXgpXHJcbiAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAuZmlsdGVyKCh7IGRldmljZSwgZGlzcGxheU5hbWUgfSkgPT4gZGlzcGxheU5hbWUudHJpbSgpLmxlbmd0aCA+IDAgfHwgZGV2aWNlLmRldmljZVR5cGUudHJpbSgpLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIC5tYXAoKHsgZGV2aWNlLCBkaXNwbGF5TmFtZSB9KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogZGlzcGxheU5hbWUsXHJcbiAgICAgICAgICAgICAgICBkZXZpY2VUeXBlOiBkZXZpY2UuZGV2aWNlVHlwZSxcclxuICAgICAgICAgICAgICAgIGxpbmVzOiBzZWxlY3RlZExpbmVOdW1iZXJzLFxyXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke2RldmljZS5wcm90b2NvbH0gLyAke2RldmljZS5idXR0b25UZW1wbGF0ZX1gXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHJlYnVpbGRPdmVydmlld0RldmljZVByb2ZpbGVzKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHNlbGVjdGVkTGluZU51bWJlcnMgPSB0aGlzLm92ZXJ2aWV3TGluZXMubWFwKGxpbmUgPT4gbGluZS5udW1iZXIpLmpvaW4oJywgJyk7XHJcbiAgICAgICAgY29uc3QgZm9ybVByb2ZpbGVzID0gdGhpcy51c2VyRGV0YWlsc0Zvcm1WYWx1ZT8uZGV2aWNlUHJvZmlsZXM7XHJcbiAgICAgICAgaWYgKCFmb3JtUHJvZmlsZXM/Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICB0aGlzLm92ZXJ2aWV3RGV2aWNlUHJvZmlsZXMgPSBbXTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vdmVydmlld0RldmljZVByb2ZpbGVzID0gZm9ybVByb2ZpbGVzXHJcbiAgICAgICAgICAgIC5maWx0ZXIocHJvZmlsZSA9PiAhIXByb2ZpbGUuZGV2aWNlVHlwZT8udHJpbSgpIHx8ICEhcHJvZmlsZS5uYW1lPy50cmltKCkpXHJcbiAgICAgICAgICAgIC5tYXAocHJvZmlsZSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgbmFtZTogcHJvZmlsZS5uYW1lIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgZGV2aWNlVHlwZTogcHJvZmlsZS5kZXZpY2VUeXBlIHx8ICcnLFxyXG4gICAgICAgICAgICAgICAgbGluZXM6IHNlbGVjdGVkTGluZU51bWJlcnMsXHJcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogYCR7cHJvZmlsZS5wcm90b2NvbCB8fCAnJ30gLyAke3Byb2ZpbGUuYnV0dG9uVGVtcGxhdGUgfHwgJyd9YC50cmltKCksXHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGV4dHJhY3RUZW1wbGF0ZUZyb21Ub2tlblBheWxvYWQocGF5bG9hZDogYW55KTogYW55IHtcclxuICAgICAgICBpZiAoIXBheWxvYWQgfHwgdHlwZW9mIHBheWxvYWQgIT09ICdvYmplY3QnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShwYXlsb2FkKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gcGF5bG9hZFswXSB8fCBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBmaXJzdEtleSA9IE9iamVjdC5rZXlzKHBheWxvYWQpWzBdO1xyXG4gICAgICAgIHJldHVybiBmaXJzdEtleSA/IHBheWxvYWRbZmlyc3RLZXldIDogbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVuaXF1ZUJ5TnVtYmVyKGxpbmVzOiBMaW5lT3B0aW9uW10pOiBMaW5lT3B0aW9uW10ge1xyXG4gICAgICAgIGNvbnN0IHNlZW4gPSBuZXcgU2V0PHN0cmluZz4oKTtcclxuICAgICAgICByZXR1cm4gbGluZXMuZmlsdGVyKGxpbmUgPT4ge1xyXG4gICAgICAgICAgICBpZiAoc2Vlbi5oYXMobGluZS5udW1iZXIpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc2Vlbi5hZGQobGluZS5udW1iZXIpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHVuaXF1ZVN0cmluZ3MoaXRlbXM6IHN0cmluZ1tdKTogc3RyaW5nW10ge1xyXG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoaXRlbXMpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHZhbHVlVG9TdHJpbmcodmFsdWU6IHVua25vd24pOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gdmFsdWUgOiAnJztcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFVud3JhcE51bWJlclJhbmdlKGF2YWlsYWJsZU51bWJlcjogYW55KTogc3RyaW5nW10ge1xyXG4gICAgICAgIGxldCB1bndyYXBOdW1iZXJSYW5nZSA9IHRoaXMudW53cmFwTnVtYmVyUmFuZ2UoYXZhaWxhYmxlTnVtYmVyLnBob25lTnVtYmVyUmFuZ2UuZnJvbSwgYXZhaWxhYmxlTnVtYmVyLnBob25lTnVtYmVyUmFuZ2UudG8pXHJcbiAgICAgICAgICAgIC5tYXAoKHVud3JhcHBlZE51bWJlcjogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGRuID0gYXZhaWxhYmxlTnVtYmVyLnBob25lTnVtYmVyUmFuZ2UucHJlZml4ICsgdW53cmFwcGVkTnVtYmVyO1xyXG4gICAgICAgICAgICBsZXQgc3RyID0gZG47XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmF2YWlsYWJsZURpZFBhdHRlcm5zTWFwcGVkVG9Ebltkbl0gJiYgdGhpcy5hdmFpbGFibGVEaWRQYXR0ZXJuc01hcHBlZFRvRG5bZG5dLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmF2YWlsYWJsZURpZFBhdHRlcm5zTWFwcGVkVG9Ebltkbl1bMF1bJ21hcHBlZERpZHMnXSAmJiB0aGlzLmF2YWlsYWJsZURpZFBhdHRlcm5zTWFwcGVkVG9Ebltkbl1bMF1bJ21hcHBlZERpZHMnXS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBzdHIgKz0gJyAgICAgICAgRElEOiAgJyArICh0aGlzLmF2YWlsYWJsZURpZFBhdHRlcm5zTWFwcGVkVG9Ebltkbl1bMF1bJ21hcHBlZERpZHMnXS5sZW5ndGggPiAxID8gJ211bHRpcGxlJyA6XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVEaWRQYXR0ZXJuc01hcHBlZFRvRG5bZG5dWzBdWydtYXBwZWREaWRzJ11bMF0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuYXZhaWxhYmxlRGlkUGF0dGVybnNNYXBwZWRUb0RuW2RuXVswXVsndm0nXSkge1xyXG4gICAgICAgICAgICAgICAgc3RyICs9ICcgICAgICAgIEluIFVzZSAtIFZNJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB1bndyYXBOdW1iZXJSYW5nZSA9IHVud3JhcE51bWJlclJhbmdlLmZpbHRlcigodW53cmFwcGVkTnVtYmVyOiBzdHJpbmcpID0+ICFhdmFpbGFibGVOdW1iZXIudXNlZE51bWJlcnMuaW5jbHVkZXModW53cmFwcGVkTnVtYmVyKSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHVud3JhcE51bWJlclJhbmdlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdW53cmFwTnVtYmVyUmFuZ2Uoc3RhcnQ6IHN0cmluZywgZW5kOiBzdHJpbmcpOiBzdHJpbmdbXSB7XHJcbiAgICAgICAgY29uc3QgcmVnRXhwID0gLyheMCspLztcclxuICAgICAgICBsZXQgbGVhZGluZ1plcm9zID0gJyc7XHJcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IHN0YXJ0Lm1hdGNoKHJlZ0V4cCk7XHJcbiAgICAgICAgaWYgKG1hdGNoZXMpIHtcclxuICAgICAgICAgICAgbGVhZGluZ1plcm9zID0gbWF0Y2hlc1sxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc3RhcnROdW1lcmljID0gbmV3IEJpZyhzdGFydCk7XHJcbiAgICAgICAgY29uc3QgZW5kTnVtZXJpYyA9IG5ldyBCaWcoZW5kKTtcclxuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh7bGVuZ3RoOiBOdW1iZXIoZW5kTnVtZXJpYy5taW51cyhzdGFydE51bWVyaWMpLnBsdXMobmV3IEJpZygxKSkudG9GaXhlZCgwKSl9LCAodiwgazogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlciA9IFN0cmluZyhzdGFydE51bWVyaWMucGx1cyhuZXcgQmlnKGsudG9TdHJpbmcoKSkpLnRvRml4ZWQoMCkpO1xyXG4gICAgICAgICAgICBpZiAoKGxlYWRpbmdaZXJvcyArIG51bWJlcikubGVuZ3RoID4gc3RhcnQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGxlYWRpbmdaZXJvcyA9IGxlYWRpbmdaZXJvcy5zdWJzdHIoMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGxlYWRpbmdaZXJvcyArIG51bWJlcjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0QXZhaWxhYmxlRGlkTWFwcGVkVG9EbihhdmFpbGFibGVOdW1iZXI6IGFueSk6IHZvaWQge1xyXG4gICAgICAgIGlmIChhdmFpbGFibGVOdW1iZXIudW5Vc2VkTnVtYmVyc1dpdGhEaWRzICYmIGF2YWlsYWJsZU51bWJlci51blVzZWROdW1iZXJzV2l0aERpZHMubGVuZ3RoKSB7XHJcblxyXG4gICAgICAgICAgICBhdmFpbGFibGVOdW1iZXIudW5Vc2VkTnVtYmVyc1dpdGhEaWRzLmZvckVhY2goKG51bWJlcldpdGhEaWRzOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZG4gPSBudW1iZXJXaXRoRGlkc1sndW5Vc2VkTnVtYmVyJ107XHJcbiAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlRGlkUGF0dGVybnNNYXBwZWRUb0RuW2RuXSA9IFt7fV07XHJcbiAgICAgICAgICAgIGlmIChudW1iZXJXaXRoRGlkc1sndHJhbnNsYXRpb25QYXR0ZXJuTGlzdCddICYmIG51bWJlcldpdGhEaWRzWyd0cmFuc2xhdGlvblBhdHRlcm5MaXN0J10ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVEaWRQYXR0ZXJuc01hcHBlZFRvRG5bZG5dID0gbnVtYmVyV2l0aERpZHNbJ3RyYW5zbGF0aW9uUGF0dGVybkxpc3QnXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlRGlkUGF0dGVybnNNYXBwZWRUb0RuW2RuXVswXVsnbWFwcGVkRGlkcyddID0gW3t9XTtcclxuICAgICAgICAgICAgICAgIGlmIChudW1iZXJXaXRoRGlkc1snbWFwcGVkRGlkcyddICYmIG51bWJlcldpdGhEaWRzWydtYXBwZWREaWRzJ10ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hdmFpbGFibGVEaWRQYXR0ZXJuc01hcHBlZFRvRG5bZG5dWzBdWydtYXBwZWREaWRzJ10gPSBudW1iZXJXaXRoRGlkc1snbWFwcGVkRGlkcyddO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuYXZhaWxhYmxlRGlkUGF0dGVybnNNYXBwZWRUb0RuW2RuXVswXVsndm0nXSA9IG51bWJlcldpdGhEaWRzWyd2bSddO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gVE9ETzogcmVwbGFjZSBwbGFjZWhvbGRlcnMgd2l0aCByZWFsIEFQSSBpbnRlZ3JhdGlvbi5cclxuICAgIGxvYWREYXRhRnJvbUFwaSgpOiB2b2lkIHtcclxuICAgICAgICAvLyB0aGlzLmFwaS5nZXRXaXphcmRCb290c3RyYXBEYXRhKCkuc3Vic2NyaWJlKC4uLilcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXRMaW5lV2l0aFNpdGVJbmZvKGxpbmU6IExpbmVJbnRlcmZhY2UpIHtcclxuICAgICAgICBsaW5lLmRpcmVjdG9yeU51bWJlci5yb3V0ZVBhcnRpdGlvbk5hbWUgPSB0aGlzLnNpdGVEZWZhdWx0cz8ucm91dGVQYXJ0aXRpb24gfHwgJyc7XHJcbiAgICBcclxuICAgICAgICBsZXQgY2FsbGluZ1NlYXJjaFNwYWNlVmFsID0gdGhpcy5zaXRlRGVmYXVsdHM/LmxpbmVDc3MgfHwgJyc7XHJcbiAgICAgICAgbGluZS5jYWxsaW5nU2VhcmNoU3BhY2UgPSBjYWxsaW5nU2VhcmNoU3BhY2VWYWw7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gcHJpdmF0ZSBpbml0VGVtcGxhdGVEbnNOYW1lc0ZvckxpbmVzKHVzZXJMaW5lczogVGVtcGxhdGVMaW5lTGlrZVtdKTogdm9pZCB7XHJcbiAgICAvLyAgICAgY29uc3Qgcm91dGVQYXJ0aXRpb24gPSB0aGlzLnNpdGVEZWZhdWx0cz8ucm91dGVQYXJ0aXRpb24gfHwgJyc7XHJcbiAgICAvLyAgICAgaWYgKHVzZXJMaW5lcyAmJiB1c2VyTGluZXMubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICAgICAgICB1c2VyTGluZXMuZm9yRWFjaCgobGluZSwgaW5kZXgpID0+IHtcclxuICAgIC8vICAgICAgICAgICAgIGxpbmUgJiYgbGluZS5kaXJlY3RvcnlOdW1iZXIgJiYgKGxpbmUuZGlyZWN0b3J5TnVtYmVyLnRlbXBsYXRlRGlyZWN0b3J5TnVtYmVyID0gbGluZS5kaXJlY3RvcnlOdW1iZXIuZGlyZWN0b3J5TnVtYmVyKTtcclxuICAgIC8vICAgICAgICAgICAgIGxpbmUgJiYgbGluZS5kaXJlY3RvcnlOdW1iZXIgJiYgKGxpbmUuZGlyZWN0b3J5TnVtYmVyLmRpcmVjdG9yeU51bWJlciA9ICcnKTtcclxuICAgIC8vICAgICAgICAgICAgIHJldHVybiBsaW5lO1xyXG4gICAgLy8gICAgICAgICB9KTtcclxuXHJcbiAgICAvLyAgICAgICAgIC8vIGNvbnN0IHJvdXRlUGFydGl0aW9uID0gdGhpcy5zaXRlRGVmYXVsdHM/LnJvdXRlUGFydGl0aW9uIHx8ICcnO1xyXG4gICAgLy8gICAgICAgICAvLyBpZiAobGluZS5saW5lQXNzb2NpYXRpb25zICYmIGxpbmUubGluZUFzc29jaWF0aW9ucy5sZW5ndGgpIHtcclxuICAgIC8vICAgICAgICAgLy8gdGhpcy5zZXRMaW5lQXNzb2NpYXRpb25zRm9yRGV2aWNlKGxpbmUsIHJvdXRlUGFydGl0aW9uKTtcclxuICAgIC8vICAgICAgICAgLy8gfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICB0aGlzLnRlbXBsYXRlRGV2aWNlcy5mb3JFYWNoKGRldmljZSA9PiB7XHJcbiAgICAvLyAgICAgICAgIGlmIChkZXZpY2UubGluZUFzc29jaWF0aW9ucyAmJiBkZXZpY2UubGluZUFzc29jaWF0aW9ucy5sZW5ndGgpIHtcclxuICAgIC8vICAgICAgICAgICAgIHRoaXMuc2V0TGluZUFzc29jaWF0aW9uc0ZvckRldmljZShkZXZpY2UsIHJvdXRlUGFydGl0aW9uKTtcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH0pO1xyXG4gICAgLy8gfVxyXG4gICAgXHJcbiAgICBcclxuICAgIHByaXZhdGUgc2V0TGluZUFzc29jaWF0aW9uc0ZvckRldmljZShkZXZpY2U6IFRlbXBsYXRlRGV2aWNlTGlrZSwgcm91dGVQYXJ0aXRpb246IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGxpbmVBc3NvY2lhdGlvbnMgPSBkZXZpY2UubGluZUFzc29jaWF0aW9ucyB8fCBbXTtcclxuICAgICAgICBpZihsaW5lQXNzb2NpYXRpb25zICYmIGxpbmVBc3NvY2lhdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGxpbmVBc3NvY2lhdGlvbnMuZm9yRWFjaChsaW5lQXNzb2NpYXRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgbGluZUFzc29jaWF0aW9uICYmIGxpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXIgJiYgKGxpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXIudGVtcGxhdGVEaXJlY3RvcnlOdW1iZXIgPSBsaW5lQXNzb2NpYXRpb24uZGlyZWN0b3J5TnVtYmVyLmRpcmVjdG9yeU51bWJlciB8fCAnJyk7XHJcbiAgICAgICAgICAgICAgICBsaW5lQXNzb2NpYXRpb24gJiYgbGluZUFzc29jaWF0aW9uLmRpcmVjdG9yeU51bWJlciAmJiAobGluZUFzc29jaWF0aW9uLmRpcmVjdG9yeU51bWJlci5yb3V0ZVBhcnRpdGlvbk5hbWUgPSByb3V0ZVBhcnRpdGlvbik7XHJcbiAgICAgICAgICAgICAgICBsaW5lQXNzb2NpYXRpb24gJiYgbGluZUFzc29jaWF0aW9uLmxvZ01pc3NlZENhbGwgJiYgKGxpbmVBc3NvY2lhdGlvbi5sb2dNaXNzZWRDYWxsID0gbGluZUFzc29jaWF0aW9uLmxvZ01pc3NlZENhbGwgfHwgJ2ZhbHNlJyk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGluaXREZXZpY2VXaXRoU2l0ZUluZm8oZGV2aWNlOiBEZXZpY2VJbnRlcmZhY2UpIHtcclxuICAgICAgICBkZXZpY2UubmV3TmFtZSA9IGRldmljZS5uYW1lO1xyXG4gICAgICAgIGlmICghZGV2aWNlTmFtZUhhc0R5bmFtaWNUb2tlbnMoZGV2aWNlLm5hbWUpKSB7XHJcbiAgICAgICAgICAgIGRldmljZS5uYW1lID0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZGV2aWNlWydlbmFibGVkRXh0ZW5zaW9uTW9iaWxpdHknXSkge1xyXG4gICAgICAgIGRldmljZS5lbmFibGVkRXh0ZW5zaW9uTW9iaWxpdHkgPSB0aGlzLnNpdGVEZWZhdWx0cz8uZW5hYmxlRW0gPz8gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkZXZpY2VbJ2VuYWJsZWRFeHRlbnNpb25Nb2JpbGl0eSddLnRvU3RyaW5nKCkgPT09ICdZZXMnKSB7XHJcbiAgICAgICAgZGV2aWNlLmVuYWJsZWRFeHRlbnNpb25Nb2JpbGl0eSA9IHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkZXZpY2VbJ2VuYWJsZWRFeHRlbnNpb25Nb2JpbGl0eSddLnRvU3RyaW5nKCkgPT09ICdObycpIHtcclxuICAgICAgICBkZXZpY2UuZW5hYmxlZEV4dGVuc2lvbk1vYmlsaXR5ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoZGV2aWNlLmxvY2F0aW9uKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VkVmFsdWUgPSB0aGlzLnJlcGxhY2VEeW5hbWljVmFsdWVTaXRlSW5mbyhkZXZpY2UubG9jYXRpb24sIHRoaXMuY3VycmVudFNpdGU/LnNob3J0TmFtZSA/PyAnJykgPz8gbnVsbDtcclxuICAgICAgICAgICAgZGV2aWNlLmxvY2F0aW9uID0gcmVwbGFjZWRWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRldmljZS5sb2NhdGlvbikge1xyXG4gICAgICAgICAgICBjb25zdCByZXBsYWNlZFZhbHVlID0gdGhpcy5yZXBsYWNlRHluYW1pY1ZhbHVlU2l0ZUluZm8oZGV2aWNlLmRldmljZVBvb2xOYW1lLCB0aGlzLmN1cnJlbnRTaXRlPy5zaG9ydE5hbWUgPz8gJycpID8/IG51bGw7XHJcbiAgICAgICAgICAgIGRldmljZS5kZXZpY2VQb29sTmFtZSA9IHJlcGxhY2VkVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkZXZpY2UubG9jYXRpb24pIHtcclxuICAgICAgICAgICAgY29uc3QgcmVwbGFjZWRWYWx1ZSA9IHRoaXMucmVwbGFjZUR5bmFtaWNWYWx1ZVNpdGVJbmZvKGRldmljZS5jYWxsaW5nU2VhcmNoU3BhY2VOYW1lLCB0aGlzLmN1cnJlbnRTaXRlPy5zaG9ydE5hbWUgPz8gJycpID8/IG51bGw7XHJcbiAgICAgICAgICAgIGRldmljZS5jYWxsaW5nU2VhcmNoU3BhY2VOYW1lID0gcmVwbGFjZWRWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRldmljZS5leHRyYU9wdGlvbnMpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVwbGFjZWRWYWx1ZSA9IHRoaXMucmVwbGFjZUR5bmFtaWNWYWx1ZVNpdGVJbmZvKGRldmljZS5leHRyYU9wdGlvbnMuYWFyQ3NzLCB0aGlzLmN1cnJlbnRTaXRlPy5zaG9ydE5hbWUgPz8gJycpID8/IG51bGw7XHJcbiAgICAgICAgICAgIGRldmljZS5leHRyYU9wdGlvbnMuYWFyQ3NzID0gcmVwbGFjZWRWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFkZXZpY2UuZGVzY3JpcHRpb24gJiYgdGhpcy5zaXRlRGVmYXVsdHMpIHtcclxuICAgICAgICAgICAgZGV2aWNlLmRlc2NyaXB0aW9uID0gdGhpcy5zaXRlRGVmYXVsdHMuZGV2aWNlRGVzY3JpcHRpb247XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVwbGFjZUR5bmFtaWNWYWx1ZVNpdGVJbmZvKGZpZWxkVmFsdWU6IGFueSwgc2l0ZVNob3J0TmFtZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKGZpZWxkVmFsdWUpIHtcclxuICAgICAgICBmaWVsZFZhbHVlID0gdGhpcy5yZXBsYWNlRHluYW1pY1ZhbHVlRm9ybWF0KGZpZWxkVmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IHBhcmFtc1RvUmVwbGFjZXMgPSB7ICdTaXRlU2hvcnROYW1lJzogc2l0ZVNob3J0TmFtZSB9O1xyXG4gICAgICAgIHJldHVybiB0aGlzLm11dGxpU3RyaW5nUmVwbGFjZShwYXJhbXNUb1JlcGxhY2VzLCBmaWVsZFZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZXBsYWNlRHluYW1pY1ZhbHVlRm9ybWF0KHN0cjogYW55KTogc3RyaW5nIHtcclxuICAgICAgICBzdHIgPSBzdHIucmVwbGFjZSgvXFxbRk5cXF0vaWcsICdbRk5dJykucmVwbGFjZSgvXFxbTE5cXF0vaWcsICdbTE5dJykucmVwbGFjZSgvXFxbSURcXF0vaWcsICdbVXNlcklkXScpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xcW1VzZXJJZFxcXS9pZywgJ1tVc2VySWRdJykucmVwbGFjZSgvPE1hdGNoIFVzZXIgSUQ+L2lnLCAnW1VzZXJJZF0nKVxyXG4gICAgICAgIC5yZXBsYWNlKC9cXFtFbWFpbFxcXS9pZywgJ1tFbWFpbF0nKS5yZXBsYWNlKC9cXFtETlxcKC9pZywgJ1tETignKVxyXG4gICAgICAgIC5yZXBsYWNlKC9cXFtTaXRlU2hvcnROYW1lXFxdL2lnLCAnW1NpdGVTaG9ydE5hbWVdJykucmVwbGFjZSgvXFwkXFwoU2l0ZVNob3J0TmFtZVxcKS9pZywgJ1tTaXRlU2hvcnROYW1lXScpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xcJFxce1NpdGVTaG9ydE5hbWVcXH0vaWcsICdbU2l0ZVNob3J0TmFtZV0nKS5yZXBsYWNlKC97U2l0ZVNob3J0TmFtZX0vaWcsICdbU2l0ZVNob3J0TmFtZV0nKVxyXG4gICAgICAgIC5yZXBsYWNlKC9cXFtGTlxcKC9pZywgJ1tGTignKS5yZXBsYWNlKC9cXFtMTlxcKC9pZywgJ1tMTignKVxyXG4gICAgICAgIC5yZXBsYWNlKC9cXFtJRFxcKC9pZywgJ1tJRCgnKTtcclxuICAgICAgICByZXR1cm4gc3RyO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtdXRsaVN0cmluZ1JlcGxhY2Uob2JqZWN0OiBhbnksIGlucHV0OiBzdHJpbmcsIGRpcmVjdG9yeU51bWJlcj86IHN0cmluZywgdXNlcj86IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgdmFyIHZhbCA9IGlucHV0O1xyXG5cclxuICAgICAgICBpZiAodmFsLmluY2x1ZGVzKCdbRE5dJykgJiYgZGlyZWN0b3J5TnVtYmVyICYmICFkaXJlY3RvcnlOdW1iZXIuaW5jbHVkZXMoJ0xpbmUnKSkge1xyXG4gICAgICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSgvXFxbRE5cXF0vZ2ksIGRpcmVjdG9yeU51bWJlcik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodXNlcj8uZmlyc3ROYW1lKSB7XHJcbiAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKC9cXFtGTlxcXS9naSwgdXNlci5maXJzdE5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodXNlcj8ubGFzdE5hbWUpIHtcclxuICAgICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoL1xcW0xOXFxdL2dpLCB1c2VyLmxhc3ROYW1lKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBpbmRleE9mRE4gPSB2YWwuaW5kZXhPZignW0ROKCcpO1xyXG4gICAgICAgIGlmIChpbmRleE9mRE4gIT09IC0xICYmIGRpcmVjdG9yeU51bWJlcikge1xyXG4gICAgICAgICAgICB2YXIgZGlnaXQgPSB2YWwuc3Vic3RyaW5nKGluZGV4T2ZETiArIDQsIHZhbC5pbmRleE9mKCcpJywgaW5kZXhPZkROICsgNCkpO1xyXG4gICAgICAgICAgICB2YXIgZGlnaXRDb3VudCA9IE51bWJlcihkaWdpdCkgfHwgMDtcclxuICAgICAgICAgICAgdmFyIGRuRGlnaXQgPSAoZGlnaXRDb3VudCA+IHZhbC5sZW5ndGgpID8gZGlyZWN0b3J5TnVtYmVyIDogZGlyZWN0b3J5TnVtYmVyLnN1YnN0cmluZyhkaXJlY3RvcnlOdW1iZXIubGVuZ3RoIC0gZGlnaXRDb3VudCwgZGlyZWN0b3J5TnVtYmVyLmxlbmd0aCk7XHJcbiAgICAgICAgICAgIHZhbCA9IHZhbC5yZXBsYWNlKCdbRE4oJyArIGRpZ2l0ICsgJyldJywgZG5EaWdpdCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgaW5kZXhPZkZOID0gdmFsLmluZGV4T2YoJ1tGTignKTtcclxuICAgICAgICBpZiAoaW5kZXhPZkZOICE9PSAtMSAmJiB1c2VyICYmIHVzZXIuZmlyc3ROYW1lKSB7XHJcbiAgICAgICAgICAgIHZhciBkaWdpdCA9IHZhbC5zdWJzdHJpbmcoaW5kZXhPZkZOICsgNCwgdmFsLmluZGV4T2YoJyknLCBpbmRleE9mRk4gKyA0KSk7XHJcbiAgICAgICAgICAgIHZhciBmbkRpZ2l0ID0gdXNlci5maXJzdE5hbWUuc3Vic3RyaW5nKDAsIGRpZ2l0KTtcclxuICAgICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoJ1tGTignICsgZGlnaXQgKyAnKV0nLCBmbkRpZ2l0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGluZGV4T2ZMTiA9IHZhbC5pbmRleE9mKCdbTE4oJyk7XHJcbiAgICAgICAgaWYgKGluZGV4T2ZMTiAhPT0gLTEgJiYgdXNlciAmJiB1c2VyLmxhc3ROYW1lKSB7XHJcbiAgICAgICAgICAgIHZhciBkaWdpdCA9IHZhbC5zdWJzdHJpbmcoaW5kZXhPZkxOICsgNCwgdmFsLmluZGV4T2YoJyknLCBpbmRleE9mTE4gKyA0KSk7XHJcbiAgICAgICAgICAgIHZhciBsbkRpZ2l0ID0gdXNlci5sYXN0TmFtZS5zdWJzdHJpbmcoMCwgZGlnaXQpO1xyXG4gICAgICAgICAgICB2YWwgPSB2YWwucmVwbGFjZSgnW0xOKCcgKyBkaWdpdCArICcpXScsIGxuRGlnaXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaW5kZXhPZklEID0gdmFsLmluZGV4T2YoJ1tJRCgnKTtcclxuICAgICAgICBpZiAoaW5kZXhPZklEICE9PSAtMSAmJiB1c2VyICYmIHVzZXIudXNlcmlkKSB7XHJcbiAgICAgICAgICAgIHZhciBkaWdpdCA9IHZhbC5zdWJzdHJpbmcoaW5kZXhPZklEICsgNCwgdmFsLmluZGV4T2YoJyknLCBpbmRleE9mSUQgKyA0KSk7XHJcbiAgICAgICAgICAgIHZhciBpZERpZ2l0ID0gdXNlci51c2VyaWQuc3Vic3RyaW5nKDAsIGRpZ2l0KTtcclxuICAgICAgICAgICAgdmFsID0gdmFsLnJlcGxhY2UoJ1tJRCgnICsgZGlnaXQgKyAnKV0nLCBpZERpZ2l0KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHZhciBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMob2JqZWN0KTtcclxuICAgICAgICBlbnRyaWVzLmZvckVhY2goKHBhcmEpID0+IHtcclxuICAgICAgICAgICAgdmFyIGZpbmQgPSAnWycgKyBwYXJhWzBdICsgJ10nO1xyXG4gICAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSBwYXJhWzFdICE9IG51bGwgPyBTdHJpbmcocGFyYVsxXSkgOiAnJztcclxuICAgICAgICAgICAgdmFsID0gdmFsLnNwbGl0KGZpbmQpLmpvaW4ocmVwbGFjZW1lbnQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB2YWw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBpbml0VGVtcGxhdGVEbnNOYW1lc0ZvckxpbmVzKCk6IHZvaWQge1xyXG4gICAgICAgIGlmICh0aGlzLmxpbmVzICYmIHRoaXMubGluZXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLmxpbmVzLmZvckVhY2goKGxpbmUsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsaW5lLmRpcmVjdG9yeU51bWJlci50ZW1wbGF0ZURpcmVjdG9yeU51bWJlciA9IGxpbmUuZGlyZWN0b3J5TnVtYmVyLmRpcmVjdG9yeU51bWJlcjtcclxuICAgICAgICAgICAgICAgIGxpbmUuZGlyZWN0b3J5TnVtYmVyLmRpcmVjdG9yeU51bWJlciA9ICcnO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmU7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgcm91dGVQYXJ0aXRpb24gPSB0aGlzLnNpdGVEZWZhdWx0cz8ucm91dGVQYXJ0aXRpb24gfHwgJyc7XHJcbiAgICAgICAgICAgIHRoaXMuZGV2aWNlcy5mb3JFYWNoKGRldmljZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMgJiYgZGV2aWNlLmxpbmVBc3NvY2lhdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldExpbmVBc3NvY2lhdGlvbnNGb3JEZXZpY2UoZGV2aWNlLCByb3V0ZVBhcnRpdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmRldmljZVByb2ZpbGVzLmZvckVhY2goZGV2aWNlUHJvZmlsZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGV2aWNlUHJvZmlsZS5saW5lQXNzb2NpYXRpb25zICYmIGRldmljZVByb2ZpbGUubGluZUFzc29jaWF0aW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0TGluZUFzc29jaWF0aW9uc0ZvckRldmljZShkZXZpY2VQcm9maWxlLCByb3V0ZVBhcnRpdGlvbik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZW5kVXNlcj8uc2luZ2xlTnVtYmVyUmVhY2ggJiYgdGhpcy5lbmRVc2VyLnNpbmdsZU51bWJlclJlYWNoLmFzc29jaWF0ZWRMaW5lcyAmJiB0aGlzLmVuZFVzZXIuc2luZ2xlTnVtYmVyUmVhY2guYXNzb2NpYXRlZExpbmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZW5kVXNlci5zaW5nbGVOdW1iZXJSZWFjaC5hc3NvY2lhdGVkTGluZXMgJiYgdGhpcy5lbmRVc2VyLnNpbmdsZU51bWJlclJlYWNoLmFzc29jaWF0ZWRMaW5lcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmVuZFVzZXIuc2luZ2xlTnVtYmVyUmVhY2guYXNzb2NpYXRlZExpbmVzLm1hcChsaW5lQXNzb2NpYXRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lQXNzb2NpYXRpb24uZGlyZWN0b3J5TnVtYmVyLnRlbXBsYXRlRGlyZWN0b3J5TnVtYmVyID0gbGluZUFzc29jaWF0aW9uLmRpcmVjdG9yeU51bWJlci5kaXJlY3RvcnlOdW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXIucm91dGVQYXJ0aXRpb25OYW1lID0gcm91dGVQYXJ0aXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lbmRVc2VyLnNpbmdsZU51bWJlclJlYWNoLnJlbW90ZURlc3RpbmF0aW9ucyAmJiB0aGlzLmVuZFVzZXIuc2luZ2xlTnVtYmVyUmVhY2gucmVtb3RlRGVzdGluYXRpb25zLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW5kVXNlci5zaW5nbGVOdW1iZXJSZWFjaC5yZW1vdGVEZXN0aW5hdGlvbnMuZm9yRWFjaChyZW1vdGVEZXN0aW5hdGlvbiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdGVEZXN0aW5hdGlvbi5saW5lQXNzb2NpYXRpb25zICYmIHJlbW90ZURlc3RpbmF0aW9uLmxpbmVBc3NvY2lhdGlvbnMubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVEZXN0aW5hdGlvbi5saW5lQXNzb2NpYXRpb25zLm1hcChsaW5lQXNzb2NpYXRpb24gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVBc3NvY2lhdGlvbi5kaXJlY3RvcnlOdW1iZXIudGVtcGxhdGVEaXJlY3RvcnlOdW1iZXIgPSBsaW5lQXNzb2NpYXRpb24uZGlyZWN0b3J5TnVtYmVyLmRpcmVjdG9yeU51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lQXNzb2NpYXRpb24uZGlyZWN0b3J5TnVtYmVyLnJvdXRlUGFydGl0aW9uTmFtZSA9IHJvdXRlUGFydGl0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBidWlsZFNhdmFibGVFbmRVc2VyKCk6IEVuZFVzZXJJbnRlcmZhY2Uge1xyXG4gICAgICAgIGlmICghdGhpcy5lbmRVc2VyKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignTm8gdGVtcGxhdGUgdXNlciBsb2FkZWQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJ1aWxkU2F2YWJsZUVuZFVzZXIoXHJcbiAgICAgICAgICAgIHRoaXMuZW5kVXNlcixcclxuICAgICAgICAgICAgdGhpcy5saW5lcyxcclxuICAgICAgICAgICAgdGhpcy5kZXZpY2VzLFxyXG4gICAgICAgICAgICB0aGlzLmRldmljZVByb2ZpbGVzLFxyXG4gICAgICAgICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZURldmljZU5hbWU6IChpbmRleCwgZGV2aWNlKSA9PiB0aGlzLnJlc29sdmVEZXZpY2VOYW1lRm9yU2F2ZShpbmRleCwgZGV2aWNlKSxcclxuICAgICAgICAgICAgICAgIHJlc29sdmVEZXZpY2VQcm9maWxlTmFtZTogKGluZGV4LCBwcm9maWxlKSA9PiB0aGlzLnJlc29sdmVEZXZpY2VOYW1lRm9yU2F2ZShpbmRleCwgcHJvZmlsZSksXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcmVzb2x2ZURldmljZU5hbWVGb3JTYXZlKF9pbmRleDogbnVtYmVyLCBkZXZpY2U6IERldmljZUludGVyZmFjZSk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSAoZGV2aWNlLm5ld05hbWUgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICBjb25zdCByZXNvbHZlZE5hbWUgPSAoZGV2aWNlLm5hbWUgfHwgJycpLnRyaW0oKTtcclxuICAgICAgICBjb25zdCByYXdOYW1lID0gcmVzb2x2ZWROYW1lIHx8IChkZXZpY2VOYW1lSGFzRHluYW1pY1Rva2Vucyh0ZW1wbGF0ZSkgPyAnJyA6IHRlbXBsYXRlKTtcclxuICAgICAgICBpZiAoIXJhd05hbWUpIHtcclxuICAgICAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBwcmVmaXggPSBkZXZpY2UucHJlZml4Py50cmltKCk7XHJcbiAgICAgICAgaWYgKHByZWZpeCAmJiAhcmF3TmFtZS50b1VwcGVyQ2FzZSgpLnN0YXJ0c1dpdGgocHJlZml4LnRvVXBwZXJDYXNlKCkpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBgJHtwcmVmaXh9JHtyYXdOYW1lfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByYXdOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlTmV3VXNlcigpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHVzZXIgPSB0aGlzLmJ1aWxkU2F2YWJsZUVuZFVzZXIoKTtcclxuICAgICAgICBjb25zdCBzaXRlSWQgPSBTdHJpbmcodGhpcy5zZWxlY3RlZFNpdGUgPz8gJycpO1xyXG4gICAgICAgIGNvbnN0IHRlbXBsYXRlSWQgPSBTdHJpbmcodGhpcy5zZWxlY3RlZFRlbXBsYXRlSWQgPz8gJycpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnVzZXJDcmVhdGlvbkFwaVNlcnZpY2Uuc2F2ZVRlbXBsYXRlVXNlcih1c2VyLCB0ZW1wbGF0ZUlkLCBzaXRlSWQpO1xyXG4gICAgfVxyXG59Il19
|