@cqa-lib/cqa-ui 1.1.521 → 1.1.522

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.
@@ -933,7 +933,8 @@ export class TestCaseDetailsEditComponent {
933
933
  if (item.label === 'Retry Failed Steps')
934
934
  return { ...item, value: this.emptyNumToZero(this.retryFailedSteps) };
935
935
  if (item.label === 'Test Case Timeout (minutes)') {
936
- const value = this.testCaseTimeoutMode === 'org' ? ORG_LEVEL_SENTINEL : this.emptyNumToZero(this.testCaseTimeout);
936
+ const trimmed = (this.testCaseTimeout ?? '').toString().trim();
937
+ const value = this.testCaseTimeoutMode === 'org' || trimmed === '' ? ORG_LEVEL_SENTINEL : trimmed;
937
938
  return { ...item, value };
938
939
  }
939
940
  if (item.label === 'Wait Timeout for Locators (secs)')
@@ -1102,4 +1103,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
1102
1103
  }], configureApiMocking: [{
1103
1104
  type: Output
1104
1105
  }] } });
1105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMtZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLWVkaXQvdGVzdC1jYXNlLWRldGFpbHMtZWRpdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLWVkaXQvdGVzdC1jYXNlLWRldGFpbHMtZWRpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLHVCQUF1QixHQUt4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7QUFXeEQsbUhBQW1IO0FBQ25ILE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDO0FBeUJ2QyxvR0FBb0c7QUFDcEcsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUc7SUFDM0MsTUFBTSxFQUFFLFFBQVE7SUFDaEIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsSUFBSSxFQUFFLE1BQU07SUFDWixNQUFNLEVBQUUsUUFBUTtJQUNoQixpQkFBaUIsRUFBRSxtQkFBbUI7SUFDdEMsZUFBZSxFQUFFLGlCQUFpQjtJQUNsQyxXQUFXLEVBQUUsYUFBYTtJQUMxQixjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLGlCQUFpQixFQUFFLG1CQUFtQjtJQUN0QyxlQUFlLEVBQUUsaUJBQWlCO0lBQ2xDLDRCQUE0QixFQUFFLDhCQUE4QjtJQUM1RCxhQUFhLEVBQUUsZUFBZTtJQUM5QixjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLGVBQWUsRUFBRSxpQkFBaUI7SUFDbEMsVUFBVSxFQUFFLFlBQVk7SUFDeEIsUUFBUSxFQUFFLFVBQVU7Q0FDWixDQUFDO0FBa0JYLE1BQU0sc0JBQXNCLEdBQUc7SUFDN0IsTUFBTTtJQUNOLFVBQVU7SUFDVixJQUFJO0lBQ0osUUFBUTtJQUNSLFlBQVk7SUFDWixRQUFRO0lBQ1IsWUFBWTtJQUNaLFVBQVU7SUFDVixhQUFhO0lBQ2IsT0FBTztDQUNSLENBQUM7QUFPRixNQUFNLE9BQU8sNEJBQTRCO0lBZ0Z2QyxZQUFvQixHQUFzQjtRQUF0QixRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQS9FakMscUJBQWdCLEdBQUcsYUFBYSxDQUFDO1FBQ2pDLHVCQUFrQixHQUFHLEVBQUUsQ0FBQztRQUNqQyx1R0FBdUc7UUFDOUYsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsa0JBQWEsR0FBa0MsRUFBRSxDQUFDO1FBQ2xELFdBQU0sR0FBYSxFQUFFLENBQUM7UUFDdEIsZ0JBQVcsR0FBRyxlQUFlLENBQUM7UUFDOUIsbUJBQWMsR0FBbUMsRUFBRSxDQUFDO1FBQ3BELHVCQUFrQixHQUFtQyxFQUFFLENBQUM7UUFDeEQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUMxQiwwSEFBMEg7UUFDakgsNEJBQXVCLEdBQXNDLEVBQUUsQ0FBQztRQUN6RSw0R0FBNEc7UUFDbkcsYUFBUSxHQUFxQixLQUFLLENBQUM7UUFFNUMsbUhBQW1IO1FBQzFHLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRTdCOzs7Ozs7V0FNRztRQUNNLDBCQUFxQixHQUEwQixFQUFFLENBQUM7UUFFM0QsNkVBQTZFO1FBQ3BFLHVCQUFrQixHQUFHLEtBQUssQ0FBQztRQUMzQixvQkFBZSxHQUFHLGFBQWEsQ0FBQztRQUNoQywwQkFBcUIsR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QywyQkFBc0IsR0FBRyx3QkFBd0IsQ0FBQztRQUNsRCwwQkFBcUIsR0FBRyxxRUFBcUUsQ0FBQztRQUM5Rix5QkFBb0IsR0FBRywrQkFBK0IsQ0FBQztRQUN2RCx3QkFBbUIsR0FBRyw4REFBOEQsQ0FBQztRQUM5Rjs7OztXQUlHO1FBQ00sMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ3ZDLG1HQUFtRztRQUMxRix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsOEJBQXlCLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLDZCQUF3QixHQUFHLENBQUMsQ0FBQztRQUM3Qiw4QkFBeUIsR0FBRyxDQUFDLENBQUM7UUFDdkM7eUZBQ2lGO1FBQ3hFLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQU85QixTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQStCLENBQUM7UUFDdkQsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFRLENBQUM7UUFFNUMseUhBQXlIO1FBQy9HLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQWtDLENBQUM7UUFFNUUscUdBQXFHO1FBQzNGLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQWtDLENBQUM7UUFFOUUsOEdBQThHO1FBQ3BHLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQW1CLENBQUM7UUFFN0Qsb0RBQW9EO1FBQzFDLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQW1DLENBQUM7UUFFaEYsc0VBQXNFO1FBQzVELGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO1FBQ2xELHVFQUF1RTtRQUM3RCxnQ0FBMkIsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ3BFLDhFQUE4RTtRQUNwRSw4QkFBeUIsR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFDO1FBQ2xFLDRGQUE0RjtRQUNsRix3QkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBSXpELGlCQUFpQjtRQUNqQixvQkFBZSxHQUFHLEVBQUUsQ0FBQztRQUNyQixlQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLGVBQVUsR0FBYSxFQUFFLENBQUM7UUFDMUIsaUdBQWlHO1FBQ2pHLDhCQUF5QixHQUFHLEtBQUssQ0FBQztRQUNsQyx5REFBeUQ7UUFDekQsNEJBQXVCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLG9CQUFlLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLCtIQUErSDtRQUMvSCx3QkFBbUIsR0FBcUIsS0FBSyxDQUFDO1FBQzlDLHdCQUFtQixHQUFHLEVBQUUsQ0FBQztRQUN6QixvQkFBZSxHQUFHLEtBQUssQ0FBQztRQUN4QixxQkFBZ0IsR0FBRyxFQUFFLENBQUM7UUFDdEIsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIsc0JBQWlCLEdBQUcsSUFBSSxDQUFDO1FBQ3pCLHFCQUFnQixHQUFHLElBQUksQ0FBQztRQUN4Qix5QkFBb0IsR0FBRyxJQUFJLENBQUM7UUFDNUIsbUJBQWMsR0FBRyxJQUFJLENBQUM7UUFDdEIscUJBQWdCLEdBQUcsSUFBSSxDQUFDO1FBQ3hCLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3Qix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsc0JBQWlCLEdBQUcsS0FBSyxDQUFDO1FBRWpCLHlCQUFvQixHQUFHLHNCQUFzQixDQUFDO1FBQy9DLHlCQUFvQixHQUFrQixJQUFJLENBQUM7UUFFbkQsZ0RBQWdEO1FBQ2hELGFBQVEsR0FBRyxJQUFJLFNBQVMsQ0FBQztZQUN2QixNQUFNLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzNCLFFBQVEsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDN0IsSUFBSSxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN6QixNQUFNLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBYyxDQUFDO1lBQ3ZDLGlCQUFpQixFQUFFLElBQUksV0FBVyxDQUFDLEVBQWMsQ0FBQztZQUNsRCxlQUFlLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3BDLFdBQVcsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDaEMsY0FBYyxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxjQUFjLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ25DLGVBQWUsRUFBRSxJQUFJLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDcEMsVUFBVSxFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUMvQixRQUFRLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQzdCLGlCQUFpQixFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxlQUFlLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDO1lBQ3BDLDRCQUE0QixFQUFFLElBQUksV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNqRCxhQUFhLEVBQUUsSUFBSSxXQUFXLENBQUMsRUFBRSxDQUFDO1NBQ25DLENBQUMsQ0FBQztRQXNCSCw4RkFBOEY7UUFDckYsdUJBQWtCLEdBQTZCO1lBQ3RELEdBQUcsRUFBRSxRQUFRO1lBQ2IsS0FBSyxFQUFFLEVBQUU7WUFDVCxXQUFXLEVBQUUsUUFBUTtZQUNyQixVQUFVLEVBQUUsS0FBSztZQUNqQixPQUFPLEVBQUU7Z0JBQ1AsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7Z0JBQ2pDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUN6QyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDdkMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Z0JBQ25DLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUN2QyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTthQUN0QztTQUNGLENBQUM7UUFFTyxxQkFBZ0IsR0FBNkI7WUFDcEQsR0FBRyxFQUFFLE1BQU07WUFDWCxLQUFLLEVBQUUsRUFBRTtZQUNULFdBQVcsRUFBRSxNQUFNO1lBQ25CLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLE9BQU8sRUFBRSxFQUFFO1NBQ1osQ0FBQztRQUVPLGdDQUEyQixHQUE2QjtZQUMvRCxHQUFHLEVBQUUsaUJBQWlCO1lBQ3RCLEtBQUssRUFBRSxFQUFFO1lBQ1QsV0FBVyxFQUFFLG1CQUFtQjtZQUNoQyxVQUFVLEVBQUUsSUFBSTtZQUNoQixPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7UUFFTyw0QkFBdUIsR0FBNkI7WUFDM0QsR0FBRyxFQUFFLGFBQWE7WUFDbEIsS0FBSyxFQUFFLEVBQUU7WUFDVCxXQUFXLEVBQUUsZUFBZTtZQUM1QixVQUFVLEVBQUUsSUFBSTtZQUNoQixPQUFPLEVBQUUsRUFBRTtTQUNaLENBQUM7UUFFZSxtQ0FBOEIsR0FBRztZQUNoRCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixFQUFFO1lBQy9DLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsMkJBQTJCLEVBQUU7WUFDdEQsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSx3QkFBd0IsRUFBRTtZQUNuRCxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLHdCQUF3QixFQUFFO1lBQ25ELEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsMEJBQTBCLEVBQUU7U0FDdEQsQ0FBQztRQUVPLCtCQUEwQixHQUE2QjtZQUM5RCxHQUFHLEVBQUUsZ0JBQWdCO1lBQ3JCLEtBQUssRUFBRSw2QkFBNkI7WUFDcEMsV0FBVyxFQUFFLFFBQVE7WUFDckIsVUFBVSxFQUFFLEtBQUs7WUFDakIsT0FBTyxFQUFFO2dCQUNQLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUMvQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtnQkFDakMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7YUFDMUM7U0FDRixDQUFDO1FBRU8scUNBQWdDLEdBQTZCO1lBQ3BFLEdBQUcsRUFBRSxlQUFlO1lBQ3BCLEtBQUssRUFBRSwrQkFBK0I7WUFDdEMsV0FBVyxFQUFFLFFBQVE7WUFDckIsVUFBVSxFQUFFLEtBQUs7WUFDakIsT0FBTyxFQUFFO2dCQUNQLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO2dCQUMvQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtnQkFDakMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7YUFDMUM7U0FDRixDQUFDO1FBRUYsNkVBQTZFO1FBQ3JFLDZCQUF3QixHQUFvQyxJQUFJLENBQUM7UUFDakUsNkJBQXdCLEdBQUcsSUFBSSxDQUFDO1FBOEJ4QyxpQ0FBNEIsR0FBNkI7WUFDdkQsR0FBRyxFQUFFLG1CQUFtQjtZQUN4QixLQUFLLEVBQUUsbUJBQW1CO1lBQzFCLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsV0FBVyxFQUFFLFVBQVU7WUFDdkIsYUFBYSxFQUFFLElBQUk7WUFDbkIsY0FBYyxFQUFFLEtBQUs7WUFDckIsT0FBTyxFQUFFO2dCQUNQLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7Z0JBQy9DLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsMkJBQTJCLEVBQUU7Z0JBQ3RELEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUU7Z0JBQ25ELEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLEVBQUU7Z0JBQ25ELEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsMEJBQTBCLEVBQUU7YUFDdEQ7U0FDRixDQUFDO1FBRU8sZ0NBQTJCLEdBQTZCO1lBQy9ELEdBQUcsRUFBRSxpQkFBaUI7WUFDdEIsS0FBSyxFQUFFLGtCQUFrQjtZQUN6QixXQUFXLEVBQUUsUUFBUTtZQUNyQixVQUFVLEVBQUUsS0FBSztZQUNqQixPQUFPLEVBQUU7Z0JBQ1AsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7YUFDeEM7U0FDRixDQUFDO1FBRU8sMkJBQXNCLEdBQTZCO1lBQzFELEdBQUcsRUFBRSxZQUFZO1lBQ2pCLEtBQUssRUFBRSxhQUFhO1lBQ3BCLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLE9BQU8sRUFBRTtnQkFDUCxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFDekMsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBQ3pDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO2dCQUN6QyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFDekMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFO2dCQUNuRCxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTthQUNsQztTQUNGLENBQUM7UUFFTyx5QkFBb0IsR0FBNkI7WUFDeEQsR0FBRyxFQUFFLFVBQVU7WUFDZixLQUFLLEVBQUUsSUFBSTtZQUNYLFdBQVcsRUFBRSxRQUFRO1lBQ3JCLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLE9BQU8sRUFBRTtnQkFDUCxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFDbkMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUU7Z0JBQ3ZDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2dCQUNuQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtnQkFDbkMsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBQzNDLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFO2FBQzVDO1NBQ0YsQ0FBQztRQUVPLCtCQUEwQixHQUE2QjtZQUM5RCxHQUFHLEVBQUUsZ0JBQWdCO1lBQ3JCLEtBQUssRUFBRSxpQkFBaUI7WUFDeEIsV0FBVyxFQUFFLFFBQVE7WUFDckIsVUFBVSxFQUFFLEtBQUs7WUFDakIsT0FBTyxFQUFFO2dCQUNQLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2dCQUNuQyxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtnQkFDckMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7Z0JBQ25DLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFO2FBQ2hDO1NBQ0YsQ0FBQztRQUVPLHlCQUFvQixHQUE2QjtZQUN4RCxHQUFHLEVBQUUsVUFBVTtZQUNmLEtBQUssRUFBRSxFQUFFO1lBQ1QsV0FBVyxFQUFFLFVBQVU7WUFDdkIsVUFBVSxFQUFFLEtBQUs7WUFDakIsT0FBTyxFQUFFO2dCQUNQLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUN2QyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtnQkFDakMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7Z0JBQy9CLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO2dCQUNuQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRTtnQkFDN0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUU7Z0JBQ2pDLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO2FBQ3RDO1NBQ0YsQ0FBQztRQUVPLGtDQUE2QixHQUE2QjtZQUNqRSxHQUFHLEVBQUUsbUJBQW1CO1lBQ3hCLEtBQUssRUFBRSxxQkFBcUI7WUFDNUIsV0FBVyxFQUFFLFVBQVU7WUFDdkIsVUFBVSxFQUFFLEtBQUs7WUFDakIsT0FBTyxFQUFFO2dCQUNQLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO2dCQUNqQyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFDdkMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUU7YUFDOUI7U0FDRixDQUFDO1FBRU8sZ0NBQTJCLEdBQTZCO1lBQy9ELEdBQUcsRUFBRSxpQkFBaUI7WUFDdEIsS0FBSyxFQUFFLG1CQUFtQjtZQUMxQixXQUFXLEVBQUUsWUFBWTtZQUN6QixVQUFVLEVBQUUsS0FBSztZQUNqQixPQUFPLEVBQUU7Z0JBQ1AsRUFBRSxLQUFLLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBQzNDLEVBQUUsS0FBSyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFO2dCQUMzQyxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7Z0JBQ3ZELEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO2dCQUNqQyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTthQUNoQztTQUNGLENBQUM7UUFFTyw2Q0FBd0MsR0FBNkI7WUFDNUUsR0FBRyxFQUFFLDhCQUE4QjtZQUNuQyxLQUFLLEVBQUUsa0NBQWtDO1lBQ3pDLFdBQVcsRUFBRSxNQUFNO1lBQ25CLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLE9BQU8sRUFBRTtnQkFDUCxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTthQUNoQztTQUNGLENBQUM7UUFtSU8sK0JBQTBCLEdBQXFCO1lBQ3RELEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFO1lBQ3BDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFO1NBQ3JDLENBQUM7UUErZkYsaURBQWlEO1FBQ2hDLHFCQUFnQixHQUFHO1lBQ2xDLEVBQUUsRUFBRSxTQUFTO1lBQ2IsTUFBTSxFQUFFLFNBQVM7WUFDakIsSUFBSSxFQUFFLFNBQVM7WUFDZixJQUFJLEVBQUUsU0FBUztTQUNoQixDQUFDO0lBbDdCMkMsQ0FBQztJQWtEOUMsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsSUFBSSxZQUFZO1FBQ2QsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxVQUFVLENBQUMsQ0FBQztJQUNoRSxDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsSUFBSSxhQUFhO1FBQ2YsT0FBTyxDQUFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDNUUsQ0FBQztJQThFRCx3R0FBd0c7SUFDeEcsSUFBSSxrQkFBa0I7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsSUFBSSxJQUFJLENBQUMsd0JBQXdCO1lBQUUsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUM7UUFDMUcsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xGLE1BQU0sVUFBVSxHQUFHLFFBQVEsRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDO1FBQzNDLE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxDQUFTO1lBQ2hDLEdBQUcsSUFBSSxDQUFDLG9CQUFvQjtZQUM1QixHQUFHLElBQUksQ0FBQyxVQUFVO1lBQ2xCLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7U0FDakYsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7YUFDbEMsTUFBTSxDQUFDLE9BQU8sQ0FBQzthQUNmLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyx3QkFBd0IsR0FBRztZQUM5QixHQUFHLEVBQUUsUUFBUTtZQUNiLEtBQUssRUFBRSxFQUFFO1lBQ1QsV0FBVyxFQUFFLDZCQUE2QjtZQUMxQyxVQUFVLEVBQUUsSUFBSTtZQUNoQixRQUFRLEVBQUUsSUFBSTtZQUNkLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLGdCQUFnQixFQUFFLElBQUk7WUFDdEIsT0FBTztTQUNSLENBQUM7UUFDRixJQUFJLENBQUMsd0JBQXdCLEdBQUcsS0FBSyxDQUFDO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDO0lBQ3ZDLENBQUM7SUE2SEQ7OztPQUdHO0lBQ0gsa0JBQWtCLENBQUMsR0FBVyxFQUFFLFVBQW9DO1FBQ2xFLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxVQUFVLENBQUM7UUFFakMsTUFBTSxNQUFNLEdBQTZCO1lBQ3ZDLEdBQUcsVUFBVTtZQUNiLEdBQUcsUUFBUTtZQUNYLE9BQU8sRUFBRSxRQUFRLENBQUMsT0FBTyxJQUFJLFVBQVUsQ0FBQyxPQUFPO1lBQy9DLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBRztTQUNwQixDQUFDO1FBRUYsSUFBSSxRQUFRLENBQUMsWUFBWSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQUU7WUFDOUMsTUFBTSxDQUFDLFFBQVEsR0FBRyxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUMxQixRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7WUFDekMsQ0FBQyxDQUFDO1NBQ0g7UUFDRCxJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRTtZQUMzQyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsS0FBYyxFQUFFLEVBQUU7Z0JBQ3JDLE1BQU0sQ0FBQyxHQUFHLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3RCLFFBQVEsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDOUMsQ0FBQyxDQUFDO1NBQ0g7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsY0FBYyxDQUFDLEdBQVc7UUFDeEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxjQUFjLENBQUMsS0FBcUM7UUFDbEQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3pELFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELGdCQUFnQixDQUFDLEtBQXFDO1FBQ3BELElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN6RCxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxLQUFzQztRQUN0RCxJQUFJLEtBQUssQ0FBQyxHQUFHLEtBQUssNkJBQTZCLENBQUMsTUFBTSxFQUFFO1lBQ3RELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNwSCxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO1lBQ3JDLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDekI7UUFDRCxzR0FBc0c7UUFDdEcsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLDZCQUE2QixDQUFDLGVBQWUsSUFBSSxLQUFLLENBQUMsR0FBRyxLQUFLLDZCQUE2QixDQUFDLFdBQVcsRUFBRTtZQUMxSCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDMUMsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDO1NBQ3JCO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVELHNCQUFzQixDQUFDLEtBQXFDO1FBQzFELE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUFFLE9BQU87UUFDOUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsd0JBQXdCLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDekcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sa0JBQWtCLENBQUMsWUFBb0IsRUFBRSxTQUFpQjtRQUNoRSxNQUFNLE9BQU8sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLElBQUksQ0FDdkUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNKLENBQUMsQ0FBQyxLQUFLLEtBQUssWUFBWTtZQUN4QixDQUFDLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FDOUQsQ0FBQztRQUNGLE1BQU0sSUFBSSxHQUFHLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUMvQixDQUFDLENBQUMsRUFBRSxFQUFFLENBQ0osQ0FBQyxDQUFDLEtBQUssS0FBSyxTQUFTO1lBQ3JCLENBQUMsQ0FBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUMzRCxDQUFDO1FBQ0YsT0FBUSxJQUFJLEVBQUUsS0FBZ0IsSUFBSSxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVELHlGQUF5RjtJQUNqRixvQkFBb0IsQ0FBQyxTQUFpQjtRQUM1QyxNQUFNLEdBQUcsR0FDUCxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQztZQUM1QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDdkQsT0FBTyxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkYsQ0FBQztJQUVELG1HQUFtRztJQUMzRixvQkFBb0IsQ0FBQyxTQUFpQjtRQUM1QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFDbEUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ2pFLElBQUksR0FBRyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRTlDLDhFQUE4RTtRQUM5RSxzRkFBc0Y7UUFDdEYscUZBQXFGO1FBQ3JGLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTtZQUNmLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUMvQixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDaEMsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDO1lBQzdCLElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDNUIsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDakMsTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDdEMsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLFFBQVEsR0FBRyxPQUFPLEVBQUU7b0JBQ3RDLEdBQUcsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLE9BQU8sR0FBRyxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7aUJBQ25EO3FCQUFNO29CQUNMLEdBQUcsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztpQkFDM0M7YUFDRjtTQUNGO1FBRUQsT0FBTyxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsS0FBSyxFQUFFLElBQUksTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDbkYsQ0FBQztJQUVELHVGQUF1RjtJQUMvRSxrQkFBa0IsQ0FBQyxHQUFXO1FBQ3BDLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLEtBQUssRUFBRTtZQUFFLE9BQU8sR0FBRyxDQUFDO1FBQzFDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3QixPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFPRCxxRkFBcUY7SUFDckYsSUFBSSwyQkFBMkI7UUFDN0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEtBQUssS0FBSyxFQUFFO1lBQ3RDLE9BQU8sSUFBSSxDQUFDLHVCQUF1QixJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7U0FDekY7UUFDRCxPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUVELDJCQUEyQixDQUFDLElBQXNCO1FBQ2hELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUM7UUFDaEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsdUhBQXVIO0lBQy9HLHdCQUF3QjtRQUM5QixNQUFNLEdBQUcsR0FDUCxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLEVBQUUsNkJBQTZCLENBQUM7WUFDMUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixFQUFFLDZCQUE2QixDQUFDLENBQUM7UUFDNUUsT0FBTyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDL0UsQ0FBQztJQUVELDZGQUE2RjtJQUM3RixVQUFVLENBQUMsR0FBVztRQUNwQixJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxLQUFLLEVBQUU7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUN6QyxPQUFPLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxtRUFBbUU7SUFDM0QsY0FBYyxDQUFDLEdBQVc7UUFDaEMsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFO1lBQUUsT0FBTyxHQUFHLENBQUM7UUFDekQsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUVPLDhCQUE4QjtRQUNwQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDdEUsSUFBSSxDQUFDLEdBQUc7WUFBRSxPQUFPLEVBQUUsQ0FBQztRQUNwQixPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVELHNFQUFzRTtJQUM5RCw0QkFBNEIsQ0FBQyxLQUFhO1FBQ2hELE9BQU8sS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDaEUsQ0FBQztJQUVELElBQUkseUJBQXlCO1FBQzNCLE1BQU0sT0FBTyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUMsSUFBSSxDQUN2RSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxXQUFXLENBQy9CLENBQUM7UUFDRixPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxRQUFRO1FBQ04sSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7UUFDL0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDL0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDbkQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxJQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN6RyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDM0YsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUN0RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FDNUQsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDO1FBQzdHLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksa0JBQWtCLENBQUM7UUFDekosTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxjQUFjLENBQUM7UUFDekksSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxrQ0FBa0MsQ0FBQyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLENBQUMsQ0FBQztRQUM3SSxJQUFJLENBQUMsZUFBZSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxPQUFPLENBQUMsQ0FBQztRQUN2RyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLG9CQUFvQixDQUFDLENBQUM7UUFDeEUsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztRQUM5RSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDO1FBQ3pHLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGtDQUFrQyxDQUFDLENBQUMsQ0FBQztRQUNsSCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQy9FLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDN0YsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFLG1CQUFtQixDQUFDLENBQUM7UUFDekYsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLEVBQUUsa0NBQWtDLENBQUMsQ0FBQztRQUN4SCxNQUFNLDRCQUE0QixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQywrQkFBK0IsRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLCtCQUErQixDQUFDO1FBQzFNLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFLCtCQUErQixDQUFDLENBQUM7UUFDdEcsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDekUsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsOEJBQThCLEVBQUUsQ0FBQztRQUNoRSxNQUFNLGNBQWMsR0FDbEIsSUFBSSxDQUFDLFFBQVEsS0FBSyxLQUFLO1lBQ3JCLENBQUMsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsaUJBQWlCLENBQUMsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLGlCQUFpQixDQUFDO1lBQ3pHLENBQUMsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDOUQsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLGlCQUFpQixDQUFDLENBQUM7UUFDbEYsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGlCQUFpRCxDQUFDLENBQUM7UUFDM0csTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNySCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzdELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDekQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztRQUNyQyxJQUFJLENBQUMseUJBQXlCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQztRQUM5RCxJQUFJLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztRQUMxRCxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztZQUN2QixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDdkIsUUFBUSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQzNCLElBQUksRUFBRSxPQUFPLElBQUksRUFBRTtZQUNuQixNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDdkIsZUFBZSxFQUFFLGtCQUFrQixJQUFJLEVBQUU7WUFDekMsV0FBVyxFQUFFLGNBQWMsSUFBSSxFQUFFO1lBQ2pDLGlCQUFpQjtZQUNqQixjQUFjLEVBQUUsY0FBYyxJQUFJLFFBQVE7WUFDMUMsY0FBYyxFQUFFLGNBQWMsSUFBSSxFQUFFO1lBQ3BDLGVBQWUsRUFBRSxlQUFlLElBQUksRUFBRTtZQUN0QyxVQUFVLEVBQUUsVUFBVSxJQUFJLEVBQUU7WUFDNUIsUUFBUSxFQUFFLFFBQVEsSUFBSSxFQUFFO1lBQ3hCLGlCQUFpQixFQUFFLGlCQUFpQixJQUFJLFVBQVU7WUFDbEQsZUFBZSxFQUFFLGVBQWUsSUFBSSxZQUFZO1lBQ2hELDRCQUE0QixFQUFFLDRCQUE0QixJQUFJLE1BQU07WUFDcEUsYUFBYSxFQUFFLGFBQWEsSUFBSSxFQUFFO1NBQ25DLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7UUFDcEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxpQkFBaUI7UUFDbkIsSUFBSSxJQUFJLENBQUMsb0JBQW9CLElBQUksSUFBSSxFQUFFO1lBQUUsT0FBTyxLQUFLLENBQUM7U0FBRTtRQUN4RCxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsb0JBQW9CLENBQUM7SUFDL0UsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNyRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsRUFBRSxLQUFLLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQztRQUMzRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3ZELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzdFLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDckUsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUN4RCxNQUFNLHdCQUF3QixHQUFHLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ2hFLE9BQU87WUFDTCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsZUFBZTtZQUN4QyxNQUFNO1lBQ04sUUFBUTtZQUNSLElBQUksRUFBRSxPQUFPO1lBQ2IsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQ3ZCLGlCQUFpQixFQUFFLGtCQUFrQixJQUFJLElBQUk7WUFDN0MsZ0JBQWdCLEVBQUUsY0FBYyxJQUFJLElBQUk7WUFDeEMsY0FBYyxFQUFFLG9CQUFvQjtZQUNwQyxrQkFBa0IsRUFBRSx3QkFBd0I7WUFDNUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLHlCQUF5QjtZQUNyRCxtQkFBbUIsRUFBRSxJQUFJLENBQUMsdUJBQXVCO1NBQ2xELENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCw2QkFBNkIsQ0FBQyxLQUFjO1FBQzFDLElBQUksQ0FBQyx5QkFBeUIsR0FBRyxLQUFLLENBQUM7UUFDdkMsSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFO1lBQ3pDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUM7WUFDckMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUM1QztRQUNELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRUQsdUdBQXVHO0lBQ3ZHLDJCQUEyQixDQUFDLEtBQWM7UUFDeEMsSUFBSSxDQUFDLHVCQUF1QixHQUFHLEtBQUssQ0FBQztRQUNyQyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMseUJBQXlCLEVBQUU7WUFDM0MsSUFBSSxDQUFDLHlCQUF5QixHQUFHLEtBQUssQ0FBQztZQUN2QyxJQUFJLENBQUMsMkJBQTJCLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzlDO1FBQ0QsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUMzQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxvQkFBb0IsQ0FDMUIsV0FBd0MsRUFDeEMsT0FBbUM7UUFFbkMsSUFBSSxXQUFXLElBQUksSUFBSSxJQUFJLFdBQVcsS0FBSyxFQUFFO1lBQUUsT0FBTyxXQUFXLENBQUM7UUFDbEUsTUFBTSxJQUFJLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPLFdBQVcsQ0FBQztRQUNyQyxNQUFNLEdBQUcsR0FBRyxPQUFPLFdBQVcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hGLE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25GLElBQUksU0FBUyxFQUFFO1lBQ2Isa0VBQWtFO1lBQ2xFLHNFQUFzRTtZQUN0RSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQ2hDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQVEsQ0FBUyxDQUFDLEVBQUUsS0FBSyxRQUFRLENBQ3hFLENBQUM7WUFDRixPQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztTQUM3QztRQUNELE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNyRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDNUIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzFFLE9BQU8sQ0FBQyxLQUFLLEdBQUcsQ0FBQztRQUNuQixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFLLEtBQWEsQ0FBQyxFQUFFLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztJQUNuRixDQUFDO0lBRU8sMkJBQTJCLENBQUMsR0FBaUM7UUFDbkUsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxNQUFNO1lBQUUsT0FBTyxNQUFNLENBQUM7UUFDbEQsSUFBSSxHQUFHLEtBQUssS0FBSyxJQUFJLEdBQUcsS0FBSyxPQUFPO1lBQUUsT0FBTyxPQUFPLENBQUM7UUFDckQsSUFDRSxHQUFHLEtBQUssV0FBVztZQUNuQixHQUFHLEtBQUssV0FBVztZQUNuQixDQUFDLE9BQU8sR0FBRyxLQUFLLFFBQVEsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQy9FO1lBQ0EsT0FBTyxXQUFXLENBQUM7U0FDcEI7UUFDRCxJQUFJLEdBQUcsS0FBSyxTQUFTLElBQUksR0FBRyxLQUFLLFNBQVM7WUFBRSxPQUFPLE1BQU0sQ0FBQztRQUMxRCxPQUFPLEdBQUcsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFHRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLHVCQUF1QixDQUFDLEVBQUU7WUFDekQsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztZQUNyQyxJQUFJLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUNsRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDM0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQztnQkFDckQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2pELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLG1CQUFtQixDQUFDLENBQUM7Z0JBQzVELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQzNELE1BQU0sS0FBSyxHQUFvQyxFQUFxQyxDQUFDO2dCQUNyRixJQUFJLFFBQVEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUU7b0JBQy9CLE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsSUFBSyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQWdCLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQ3pHLEtBQUssQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUN0SDtnQkFDRCwwRkFBMEY7Z0JBQzFGLG1EQUFtRDtnQkFDbkQsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFO29CQUM3QixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7b0JBQzNGLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQzt3QkFDdEIsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsaUJBQWlCLENBQUMsRUFBRSxPQUFPLENBQUM7NEJBQ3RHLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO2lCQUMvQjtnQkFDRCxJQUFJLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUU7b0JBQzdCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyw0QkFBNEIsQ0FDdEQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsSUFBSSxFQUFFLENBQzVELENBQUM7b0JBQ0YsS0FBSyxDQUFDLGFBQWEsQ0FBQzt3QkFDbEIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxPQUFPLENBQUM7NEJBQy9GLGNBQWMsSUFBSSxFQUFFLENBQUM7aUJBQ3hCO2dCQUNELHFGQUFxRjtnQkFDckYsSUFBSSxZQUFZLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFO29CQUN2QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLEVBQUUscUJBQXFCLENBQUMsQ0FBQztvQkFDMUYsSUFBSSxjQUFjO3dCQUFFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLGNBQWMsQ0FBQztpQkFDakU7Z0JBQ0QsSUFBSSxhQUFhLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxFQUFFO29CQUN6QyxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztvQkFDdEYsSUFBSSxZQUFZO3dCQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLFlBQVksQ0FBQztpQkFDM0Q7Z0JBQ0QsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQztnQkFDakUsSUFBSSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFO29CQUMzQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLEVBQUUsa0NBQWtDLENBQUMsQ0FBQztvQkFDOUYsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLEtBQUssQ0FBQztvQkFDcEksSUFBSSxVQUFVO3dCQUFFLEtBQUssQ0FBQyw4QkFBOEIsQ0FBQyxHQUFHLFVBQVUsQ0FBQztpQkFDcEU7Z0JBQ0QsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sRUFBRTtvQkFDN0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7aUJBQ3ZEO2FBQ0Y7U0FDRjtRQUNELElBQUksT0FBTyxDQUFDLG9CQUFvQixDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxlQUFlLENBQUMsRUFBRTtZQUNsRixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUMvQyxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDbkMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDL0MsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDbkQsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxJQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6RyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNsRCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN0RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QyxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5RSxNQUFNLGNBQWMsR0FBRyxhQUFhLEVBQUUsT0FBTyxJQUFJLGFBQWEsRUFBRSxLQUFLLENBQUM7WUFDdEUsTUFBTSxnQkFBZ0IsR0FBRyxlQUFlLEVBQUUsT0FBTyxJQUFJLGVBQWUsRUFBRSxLQUFLLENBQUM7WUFDNUUsTUFBTSxZQUFZLEdBQUcsV0FBVyxFQUFFLE9BQU8sSUFBSSxXQUFXLEVBQUUsS0FBSyxDQUFDO1lBQ2hFLE1BQU0sY0FBYyxHQUFHLGFBQWEsRUFBRSxPQUFPLElBQUksYUFBYSxFQUFFLEtBQUssQ0FBQztZQUN0RSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQztnQkFDdkIsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7Z0JBQ3RELEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQzVELEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQzFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2FBQ3ZELENBQUMsQ0FBQztTQUNKO1FBQ0QsSUFBSSxPQUFPLENBQUMseUJBQXlCLENBQUMsSUFBSSxJQUFJLENBQUMsdUJBQXVCLENBQUMsTUFBTSxFQUFFO1lBQzdFLElBQUksQ0FBQyw0QkFBNEIsR0FBRztnQkFDbEMsR0FBRyxJQUFJLENBQUMsNEJBQTRCO2dCQUNwQyxPQUFPLEVBQUUsSUFBSSxDQUFDLHVCQUF1QjthQUN0QyxDQUFDO1NBQ0g7UUFDRCxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFO1lBQzlELE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFLHFCQUFxQixDQUFDLENBQUM7WUFDN0YsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFLG1CQUFtQixDQUFDLENBQUM7WUFDekYsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsa0JBQWtCLEVBQUUsa0NBQWtDLENBQUMsQ0FBQztZQUN4SCxNQUFNLDRCQUE0QixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQywrQkFBK0IsRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxJQUFJLCtCQUErQixDQUFDO1lBQzFNLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7WUFDaEUsTUFBTSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxJQUFLLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBZ0IsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUN6RyxNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsbUJBQW1CLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDM0YsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixDQUN0RCxJQUFJLENBQUMsa0JBQWtCLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxJQUFJLEVBQUUsQ0FDNUQsQ0FBQztZQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksT0FBTyxDQUFDO1lBQzdHLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksa0JBQWtCLENBQUM7WUFDekosTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSxPQUFPLENBQUMsSUFBSSxjQUFjLENBQUM7WUFDekksTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQy9FLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO1lBQ2xGLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxpQkFBaUQsQ0FBQyxDQUFDO1lBQzNHLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLGtCQUFrQixFQUFFLCtCQUErQixDQUFDLENBQUM7WUFDdEcsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLDJCQUEyQixDQUFDLGdCQUFnRCxDQUFDLENBQUM7WUFDekcsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGtCQUFrQixDQUFDLElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNySCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQzdELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDekQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLGtDQUFrQyxDQUFDLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBQzdJLElBQUksQ0FBQyxlQUFlLEdBQUcsQ0FBQyxDQUFDLENBQUMsV0FBVyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksTUFBTSxDQUFDLFdBQVcsQ0FBQyxLQUFLLE9BQU8sQ0FBQyxDQUFDO1lBQ3ZHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsb0JBQW9CLENBQUMsQ0FBQztZQUN4RSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO1lBQzlFLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDLENBQUM7WUFDekcsSUFBSSxDQUFDLG1CQUFtQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxDQUFDO1lBQ2xILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ3JGLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxlQUFlLENBQUMsQ0FBQztZQUNuRixJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QixNQUFNLEtBQUssR0FBNEIsRUFBRSxDQUFDO1lBQzFDLElBQUksaUJBQWlCO2dCQUFFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO1lBQ3RFLElBQUksZUFBZTtnQkFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxlQUFlLENBQUM7WUFDaEUsSUFBSSw0QkFBNEI7Z0JBQUUsS0FBSyxDQUFDLDhCQUE4QixDQUFDLEdBQUcsNEJBQTRCLENBQUM7WUFDdkcsSUFBSSxhQUFhO2dCQUFFLEtBQUssQ0FBQyxlQUFlLENBQUMsR0FBRyxhQUFhLENBQUM7WUFDMUQsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNO2dCQUFFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLGlCQUFpQixDQUFDO1lBQzdFLElBQUksT0FBTztnQkFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLEdBQUcsT0FBTyxDQUFDO1lBRXJDLCtFQUErRTtZQUMvRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1lBQ3RELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ2xELE1BQU0sWUFBWSxHQUFHLFFBQVEsRUFBRSxLQUFLLENBQUM7WUFDckMsTUFBTSxZQUFZLEdBQUcsUUFBUSxFQUFFLEtBQUssQ0FBQztZQUVyQyxJQUFJLGtCQUFrQixJQUFJLENBQUMsWUFBWTtnQkFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxrQkFBa0IsQ0FBQztZQUN2RixJQUFJLGNBQWMsSUFBSSxJQUFJLElBQUksY0FBYyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQUUsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLGNBQWMsQ0FBQztZQUM1RyxJQUFJLGNBQWM7Z0JBQUUsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsY0FBYyxDQUFDO1lBQzdELElBQUksY0FBYztnQkFBRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxjQUFjLENBQUM7WUFDN0QsSUFBSSxlQUFlO2dCQUFFLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLGVBQWUsQ0FBQztZQUNoRSxJQUFJLFVBQVU7Z0JBQUUsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLFVBQVUsQ0FBQztZQUNqRCxJQUFJLFFBQVE7Z0JBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUMzQyxJQUFJLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTTtnQkFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNoRTtJQUNILENBQUM7SUFFRCxhQUFhLENBQUMsS0FBYTtRQUN6QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztRQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3pHLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGdCQUFnQjtRQUNkLElBQUksQ0FBQyxVQUFVLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksQ0FBQyx3QkFBd0IsR0FBRyxJQUFJLENBQUM7UUFDckMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQzVGLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGtCQUFrQixDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDOUMsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztZQUNyQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyw2QkFBNkIsQ0FBQyxNQUFNLENBQUMsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1lBQ3pHLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQsTUFBTTtRQUNKLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVPLG1CQUFtQjtRQUN6QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQy9CLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzdFLE1BQU0sY0FBYyxHQUFHLG1CQUFtQixLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsbUJBQW1CLENBQUM7UUFDN0gsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzNFLE1BQU0sYUFBYSxHQUFHLGtCQUFrQixLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxrQkFBa0IsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsa0JBQWtCLENBQUM7UUFDekgsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMzRSxNQUFNLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUM7WUFDM0QsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUM1RCxDQUFDLENBQUMsb0JBQW9CLElBQUksSUFBSSxJQUFJLG9CQUFvQixLQUFLLEVBQUU7Z0JBQzNELENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNoQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ1QsTUFBTSxxQkFBcUIsR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQzVGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDekQsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDL0UsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTtZQUN6QyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssV0FBVyxFQUFFO2dCQUNqQyxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSztxQkFDeEIsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLGlCQUFpQixDQUFDLENBQUM7cUJBQzNFLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUNaLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxpQkFBaUI7d0JBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsQ0FBQztvQkFDaEYsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLG1CQUFtQjt3QkFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFLENBQUM7b0JBQ3pGLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxNQUFNO3dCQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLENBQUM7b0JBQ2hFLElBQUksSUFBSSxDQUFDLEtBQUssS0FBSyxtQkFBbUI7d0JBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxDQUFDO29CQUN4RixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssZUFBZTt3QkFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLGdCQUFnQixFQUFFLENBQUM7b0JBQ2hGLE9BQU8sSUFBSSxDQUFDO2dCQUNkLENBQUMsQ0FBQyxDQUFDO2dCQUNMLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUM5QjtZQUNELElBQUksT0FBTyxDQUFDLEtBQUssS0FBSyxrQkFBa0IsRUFBRTtnQkFDeEMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxFQUFFLEtBQUssQ0FBQztnQkFDN0UsTUFBTSxvQkFBb0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFLEtBQUssQ0FBQztnQkFDekUsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyw4QkFBOEIsQ0FBQyxFQUFFLEtBQUssQ0FBQztnQkFDcEYsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtvQkFDdkMsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLCtCQUErQjt3QkFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxDQUFDO29CQUM3RixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUsscUJBQXFCLElBQUksc0JBQXNCLElBQUksSUFBSSxJQUFJLHNCQUFzQixLQUFLLEVBQUU7d0JBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxzQkFBc0IsRUFBRSxDQUFDO29CQUMvSixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssbUJBQW1CLElBQUksb0JBQW9CLElBQUksSUFBSSxJQUFJLG9CQUFvQixLQUFLLEVBQUU7d0JBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxvQkFBb0IsRUFBRSxDQUFDO29CQUN2SixJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssa0NBQWtDLElBQUksa0JBQWtCLElBQUksSUFBSSxJQUFJLGtCQUFrQixLQUFLLEVBQUU7d0JBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxDQUFDO29CQUNoSyxPQUFPLElBQUksQ0FBQztnQkFDZCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7YUFDOUI7WUFDRCxPQUFPLE9BQU8sQ0FBQztRQUNqQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUMvQixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDeEUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1FBQzFFLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDaEUsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUU1RCxJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbkQsSUFBSSxPQUFPLENBQUMsS0FBSyxLQUFLLGlCQUFpQixJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssa0JBQWtCLEVBQUU7Z0JBQy9FLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUM1RCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO29CQUN2QyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssV0FBVzt3QkFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLGFBQWEsRUFBRSxDQUFDO29CQUN6RSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssa0NBQWtDO3dCQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUN2RyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssb0JBQW9CO3dCQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO29CQUMvRyxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssNkJBQTZCLEVBQUU7d0JBQ2hELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzt3QkFDbEgsT0FBTyxFQUFFLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO3FCQUMzQjtvQkFDRCxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssa0NBQWtDO3dCQUFFLE9BQU8sRUFBRSxHQUFHLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO29CQUNoSSxPQUFPLElBQUksQ0FBQztnQkFDZCxDQUFDLENBQUMsQ0FBQztnQkFDSCxPQUFPLEVBQUUsR0FBRyxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUM7YUFDOUI7WUFDRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssZ0JBQWdCLEVBQUU7Z0JBQ3BFLE1BQU0sS0FBSyxHQUF1QztvQkFDaEQsR0FBRyxDQUFDLFFBQVEsS0FBSyxLQUFLO3dCQUNwQixDQUFDLENBQUM7NEJBQ0UsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTs0QkFDbkQsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRTt5QkFDdEQ7d0JBQ0gsQ0FBQyxDQUFDOzRCQUNFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFOzRCQUNwQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTt5QkFDakMsQ0FBQztpQkFDUCxDQUFDO2dCQUNGLE9BQU8sRUFBRSxHQUFHLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQzthQUM5QjtZQUNELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ2hHLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbkIsTUFBTSxhQUFhLEdBQWlDO2dCQUNsRCxLQUFLLEVBQUUsUUFBUTtnQkFDZixJQUFJLEVBQUUsU0FBUztnQkFDZixLQUFLLEVBQUU7b0JBQ0wsR0FBRyxDQUFDLFFBQVEsS0FBSyxLQUFLO3dCQUNwQixDQUFDLENBQUM7NEJBQ0UsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRTs0QkFDbkQsRUFBRSxLQUFLLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRTt5QkFDdEQ7d0JBQ0gsQ0FBQyxDQUFDOzRCQUNFLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFOzRCQUNwQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRTt5QkFDakMsQ0FBQztpQkFDUDthQUNGLENBQUM7WUFDRixNQUFNLEdBQUcsQ0FBQyxHQUFHLE1BQU0sRUFBRSxhQUFhLENBQUMsQ0FBQztTQUNyQztRQUVELE1BQU0sZUFBZSxHQUFpQztZQUNwRCxLQUFLLEVBQUUsV0FBVztZQUNsQixJQUFJLEVBQUUsTUFBTTtZQUNaLEtBQUssRUFBRTtnQkFDTCxFQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDOUUsRUFBRSxLQUFLLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUM1RSxFQUFFLEtBQUssRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7YUFDekU7U0FDRixDQUFDO1FBQ0YsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDO1FBQ3JFLElBQUksZ0JBQWdCLEVBQUU7WUFDcEIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUN4QixDQUFDLENBQUMsS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQzlDLENBQUM7U0FDSDthQUFNO1lBQ0wsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7U0FDdkM7UUFDRCxPQUFPLE1BQU0sQ0FBQztJQUNoQixDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELFlBQVksQ0FBQyxFQUFVLEVBQUUsS0FBYTtRQUNwQyxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxFQUFVLEVBQUUsT0FBcUM7UUFDbEUsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDO0lBQ3ZCLENBQUM7SUFVRCx3QkFBd0IsQ0FBQyxNQUFjO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUNyQyxPQUFPO1lBQ0wsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLEVBQUU7WUFDN0IsY0FBYyxFQUFFLE1BQU0sQ0FBQyxNQUFNO1lBQzdCLGNBQWMsRUFBRSxLQUFLO1lBQ3JCLGNBQWMsRUFBRSxPQUFPO1lBQ3ZCLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSTtTQUNuQixDQUFDO0lBQ0osQ0FBQztJQUVELHNCQUFzQixDQUFDLE1BQWM7UUFDbkMsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0lBQ3BDLENBQUM7O3lIQWpoQ1UsNEJBQTRCOzZHQUE1Qiw0QkFBNEIsc29EQ3RHekMseXd4QkF5Y0E7MkZEbldhLDRCQUE0QjtrQkFMeEMsU0FBUzsrQkFDRSw0QkFBNEIsbUJBRXJCLHVCQUF1QixDQUFDLE1BQU07d0dBR3RDLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBRUcsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBRUcsdUJBQXVCO3NCQUEvQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFTRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBR0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0csb0JBQW9CO3NCQUE1QixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFNRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBRUcsbUJBQW1CO3NCQUEzQixLQUFLO2dCQUNHLHlCQUF5QjtzQkFBakMsS0FBSztnQkFDRyx3QkFBd0I7c0JBQWhDLEtBQUs7Z0JBQ0cseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUdHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBQ0cscUJBQXFCO3NCQUE3QixLQUFLO2dCQUdHLHVCQUF1QjtzQkFBL0IsS0FBSztnQkFFSSxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUdHLFlBQVk7c0JBQXJCLE1BQU07Z0JBR0csY0FBYztzQkFBdkIsTUFBTTtnQkFHRyxZQUFZO3NCQUFyQixNQUFNO2dCQUdHLGVBQWU7c0JBQXhCLE1BQU07Z0JBR0csVUFBVTtzQkFBbkIsTUFBTTtnQkFFRywyQkFBMkI7c0JBQXBDLE1BQU07Z0JBRUcseUJBQXlCO3NCQUFsQyxNQUFNO2dCQUVHLG1CQUFtQjtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE9uSW5pdCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uLFxuICBUZXN0Q2FzZURldGFpbHNNZXRhZGF0YUl0ZW0sXG59IGZyb20gJy4uL3Rlc3QtY2FzZS1kZXRhaWxzLm1vZGVscyc7XG5pbXBvcnQge1xuICBEeW5hbWljU2VsZWN0RmllbGRDb25maWcsXG4gIFNlbGVjdE9wdGlvbixcbn0gZnJvbSAnLi4vLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IERyb3Bkb3duT3B0aW9uIH0gZnJvbSAnLi4vLi4vZHJvcGRvd24tYnV0dG9uL2Ryb3Bkb3duLWJ1dHRvbi5jb21wb25lbnQnO1xuXG4vKiogU2VudGluZWwgdmFsdWUgZW1pdHRlZCBpbiBzYXZlIHBheWxvYWRzIHRvIHRlbGwgdGhlIGhvc3QgdG8gc2VuZCBudWxsIGZvciB0aGUgZmllbGQgKHVzZSBvcmctbGV2ZWwgZGVmYXVsdCkuICovXG5jb25zdCBPUkdfTEVWRUxfU0VOVElORUwgPSAnT3JnIGxldmVsJztcblxuLyoqIE92ZXJyaWRlIGNvbmZpZyBmb3IgYSBzcGVjaWZpYyBzZWxlY3QuIFVzZSBmb3Igc2VydmVyLXNpZGUgc2VhcmNoLCBsb2FkIG1vcmUsIGN1c3RvbSBvcHRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RDb25maWdPdmVycmlkZSB7XG4gIC8qKiBSZXBsYWNlIG9wdGlvbnMgKGUuZy4gZnJvbSBBUEkpLiBVcGRhdGUgd2hlbiBBUEkgcmV0dXJucy4gKi9cbiAgb3B0aW9ucz86IFNlbGVjdE9wdGlvbltdO1xuICAvKiogRW5hYmxlIHNlcnZlci1zaWRlIHNlYXJjaDsgY29tcG9uZW50IGVtaXRzIHNlbGVjdFNlYXJjaCBpbnN0ZWFkIG9mIGxvY2FsIGZpbHRlcmluZy4gKi9cbiAgc2VydmVyU2VhcmNoPzogYm9vbGVhbjtcbiAgLyoqIEluZGljYXRlcyBtb3JlIHJlc3VsdHMgYXZhaWxhYmxlIGZvciBpbmZpbml0ZSBzY3JvbGwuICovXG4gIGhhc01vcmU/OiBib29sZWFuO1xuICAvKiogTG9hZGluZyBzdGF0ZSAoZS5nLiBkdXJpbmcgQVBJIGNhbGwpLiAqL1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIHNlYXJjaCBpbnB1dCBpbiB0aGUgc2VsZWN0LiAqL1xuICBzZWFyY2hhYmxlPzogYm9vbGVhbjtcbiAgLyoqIFdoZW4gdHJ1ZSwgdHJpZ2dlcnMgaW5pdGlhbCBzZWFyY2ggb24gcGFuZWwgb3BlbiAoc2VydmVyU2VhcmNoIG1vZGUpLiAqL1xuICBpbml0aWFsRmV0Y2hPbk9wZW4/OiBib29sZWFuO1xuICAvKiogQ2FsbGJhY2sgd2hlbiB1c2VyIHR5cGVzIGluIHNlYXJjaC4gQ2FsbCBBUEksIHRoZW4gdXBkYXRlIG9wdGlvbnMgdmlhIHNlbGVjdENvbmZpZ092ZXJyaWRlcy4gKi9cbiAgb25TZWFyY2g/OiAocXVlcnk6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gdXNlciBzY3JvbGxzIHRvIGxvYWQgbW9yZS4gQ2FsbCBBUEksIGFwcGVuZCBvcHRpb25zIHZpYSBzZWxlY3RDb25maWdPdmVycmlkZXMuICovXG4gIG9uTG9hZE1vcmU/OiAocXVlcnk/OiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbi8qKiBNYXAgb2Ygc2VsZWN0IGtleSAtPiBjb25maWcgb3ZlcnJpZGUuIEVuYWJsZXMgQVBJLWRyaXZlbiBvcHRpb25zLCBpbmZpbml0ZSBzZWFyY2gsIGxvYWQgbW9yZS4gKi9cbmV4cG9ydCB0eXBlIFNlbGVjdENvbmZpZ092ZXJyaWRlcyA9IFBhcnRpYWw8UmVjb3JkPHN0cmluZywgU2VsZWN0Q29uZmlnT3ZlcnJpZGU+PjtcblxuLyoqIEtleXMgZm9yIGVhY2ggZHluYW1pYyBzZWxlY3QgaW4gdGVzdC1jYXNlLWRldGFpbHMtZWRpdC4gVXNlIHRoZXNlIHdpdGggc2VsZWN0Q29uZmlnT3ZlcnJpZGVzLiAqL1xuZXhwb3J0IGNvbnN0IFRFU1RfQ0FTRV9ERVRBSUxTX1NFTEVDVF9LRVlTID0ge1xuICBzdGF0dXM6ICdzdGF0dXMnLFxuICBwcmlvcml0eTogJ3ByaW9yaXR5JyxcbiAgdHlwZTogJ3R5cGUnLFxuICBsYWJlbHM6ICdsYWJlbHMnLFxuICBwcmVyZXF1aXNpdGVDYXNlczogJ3ByZXJlcXVpc2l0ZUNhc2VzJyxcbiAgdGVzdERhdGFQcm9maWxlOiAndGVzdERhdGFQcm9maWxlJyxcbiAgdGVzdERhdGFTZXQ6ICd0ZXN0RGF0YVNldCcsXG4gIHZpZGVvUmVjb3JkaW5nOiAndmlkZW9SZWNvcmRpbmcnLFxuICBlbmFibGVBaVNtYXJ0bmVzczogJ2VuYWJsZUFpU21hcnRuZXNzJyxcbiAgZGVmYXVsdEFpQWN0aW9uOiAnZGVmYXVsdEFpQWN0aW9uJyxcbiAga25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZTogJ2tub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2UnLFxuICB1c2VBaU1ldGFkYXRhOiAndXNlQWlNZXRhZGF0YScsXG4gIGRlZmF1bHRCcm93c2VyOiAnZGVmYXVsdEJyb3dzZXInLFxuICBkZWZhdWx0Vmlld3BvcnQ6ICdkZWZhdWx0Vmlld3BvcnQnLFxuICBkZXZpY2VUeXBlOiAnZGV2aWNlVHlwZScsXG4gIGRldmljZU9TOiAnZGV2aWNlT1MnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0Q2FzZURldGFpbHNFZGl0Rm9ybURhdGEge1xuICBkZXNjcmlwdGlvbkNvbnRlbnQ6IHN0cmluZztcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIHByaW9yaXR5OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGxhYmVsczogc3RyaW5nW107XG4gIHRlc3REYXRhUHJvZmlsZUlkPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcbiAgdGVzdERhdGFTZXRJbmRleD86IG51bWJlciB8IHN0cmluZyB8IG51bGw7XG4gIGNvbmZpZ1NlY3Rpb25zOiBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uW107XG4gIGNvbmZpZ1NlY3Rpb25zUm93MjogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbltdO1xuICAvKiogXCJVc2UgbW9jayBBUEkgcmVzcG9uc2VzXCIgcm93IHN0YXRlLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgYXBpTW9ja2luZ1N0b3JlTW9ja2Agd2hlbiB0cnVlLiAqL1xuICBhcGlNb2NraW5nUmVzdG9yZU1vY2s/OiBib29sZWFuO1xuICAvKiogXCJSZW5ldyBhbmQgc3RvcmUgQVBJIHJlc3BvbnNlc1wiIHJvdyBzdGF0ZS4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYGFwaU1vY2tpbmdSZXN0b3JlTW9ja2Agd2hlbiB0cnVlLiAqL1xuICBhcGlNb2NraW5nU3RvcmVNb2NrPzogYm9vbGVhbjtcbn1cblxuY29uc3QgRlJFUVVFTlRMWV9VU0VEX0xBQkVMUyA9IFtcbiAgJ0Nhc2UnLFxuICAnQ3JpdGljYWwnLFxuICAnUE8nLFxuICAnVXBsb2FkJyxcbiAgJ1ZhbGlkYXRpb24nLFxuICAnUmV2aWV3JyxcbiAgJ0VkZ2UtY2FzZXMnLFxuICAnU2VjdXJpdHknLFxuICAnSW50ZWdyYXRpb24nLFxuICAnU21va2UnLFxuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXRlc3QtY2FzZS1kZXRhaWxzLWVkaXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVzdC1jYXNlLWRldGFpbHMtZWRpdC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUZXN0Q2FzZURldGFpbHNFZGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBkZXNjcmlwdGlvblRpdGxlID0gJ0Rlc2NyaXB0aW9uJztcbiAgQElucHV0KCkgZGVzY3JpcHRpb25Db250ZW50ID0gJyc7XG4gIC8qKiBXaGVuIHRydWUsIGRlc2NyaXB0aW9uIHVzZXMgVHJpeCByaWNoIHRleHQgZWRpdG9yIChCb2xkLCBJdGFsaWMsIGV0Yy4pLiBIb3N0IGFwcCBtdXN0IGxvYWQgVHJpeC4gKi9cbiAgQElucHV0KCkgZW5hYmxlTWFya2Rvd24gPSBmYWxzZTtcbiAgQElucHV0KCkgbWV0YWRhdGFJdGVtczogVGVzdENhc2VEZXRhaWxzTWV0YWRhdGFJdGVtW10gPSBbXTtcbiAgQElucHV0KCkgbGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBjb25maWdUaXRsZSA9ICdDb25maWd1cmF0aW9uJztcbiAgQElucHV0KCkgY29uZmlnU2VjdGlvbnM6IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb25bXSA9IFtdO1xuICBASW5wdXQoKSBjb25maWdTZWN0aW9uc1JvdzI6IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb25bXSA9IFtdO1xuICBASW5wdXQoKSBpc1NhdmluZyA9IGZhbHNlO1xuICAvKiogT3B0aW9uYWwgbGlzdCBvZiBwcmVyZXF1aXNpdGUgdGVzdCBjYXNlIG9wdGlvbnMgZm9yIHRoZSBtdWx0aS1zZWxlY3QuIElmIG5vdCBwcm92aWRlZCwgdXNlcyBkZWZhdWx0IHNhbXBsZSBvcHRpb25zLiAqL1xuICBASW5wdXQoKSBwcmVyZXF1aXNpdGVDYXNlT3B0aW9uczogeyB2YWx1ZTogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVtdID0gW107XG4gIC8qKiBQbGF0Zm9ybTogJ3dlYicgc2hvd3MgRGVmYXVsdCBCcm93c2VyICsgVmlld3BvcnQ7ICdtb2JpbGUnIHNob3dzIERldmljZSBUeXBlICsgT1MuIERlZmF1bHRzIHRvICd3ZWInLiAqL1xuICBASW5wdXQoKSBwbGF0Zm9ybTogJ3dlYicgfCAnbW9iaWxlJyA9ICd3ZWInO1xuXG4gIC8qKiBXaGVuIHRydWUsIGhpZGVzIFByaW9yaXR5LCBUeXBlLCBhbmQgVGVzdCBEYXRhIFNldCBmaWVsZHMgKHN0ZXAgZ3JvdXBzIGRvbid0IGhhdmUgdGhlc2UpLiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgQElucHV0KCkgaXNTdGVwR3JvdXAgPSBmYWxzZTtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgY29uZmlnIHBlciBzZWxlY3Qga2V5LiBVc2UgZm9yOlxuICAgKiAtIEFQSS1kcml2ZW4gb3B0aW9uczogcGFzcyBvcHRpb25zIGFycmF5ICh1cGRhdGUgd2hlbiBBUEkgcmV0dXJucylcbiAgICogLSBTZXJ2ZXItc2lkZSBzZWFyY2g6IHNlcnZlclNlYXJjaDogdHJ1ZSwgb25TZWFyY2ggaW4gb3ZlcnJpZGUgb3IgbGlzdGVuIHRvIHNlbGVjdFNlYXJjaFxuICAgKiAtIEluZmluaXRlIHNjcm9sbDogaGFzTW9yZTogdHJ1ZSwgb25Mb2FkTW9yZSBpbiBvdmVycmlkZSBvciBsaXN0ZW4gdG8gc2VsZWN0TG9hZE1vcmVcbiAgICogLSBJbml0aWFsIGZldGNoIG9uIG9wZW46IGluaXRpYWxGZXRjaE9uT3BlbjogdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0Q29uZmlnT3ZlcnJpZGVzOiBTZWxlY3RDb25maWdPdmVycmlkZXMgPSB7fTtcblxuICAvLyDilIDilIAgQVBJIE1vY2tpbmcgY2FyZCAoZWRpdCBtb2RlOiBzaG93cyB0d28gdG9nZ2xlcykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIEBJbnB1dCgpIHNob3dBcGlNb2NraW5nQ2FyZCA9IGZhbHNlO1xuICBASW5wdXQoKSBhcGlNb2NraW5nVGl0bGUgPSAnQVBJIE1vY2tpbmcnO1xuICBASW5wdXQoKSBhcGlNb2NraW5nU3RhdHVzTGFiZWwgPSAnTm90IGNvbmZpZ3VyZWQnO1xuICBASW5wdXQoKSBhcGlNb2NraW5nQ2FwdHVyZUxhYmVsID0gJ1VzZSBtb2NrIEFQSSByZXNwb25zZXMnO1xuICBASW5wdXQoKSBhcGlNb2NraW5nQ2FwdHVyZUhpbnQgPSAnVXNlcyBzdG9yZWQgcmVzcG9uc2VzIG9uIG5leHQgcnVuLiBUdXJuIG9uIGFmdGVyIGNhcHR1cmUgY29tcGxldGVzLic7XG4gIEBJbnB1dCgpIGFwaU1vY2tpbmdSZW5ld0xhYmVsID0gJ1JlbmV3IGFuZCBzdG9yZSBBUEkgcmVzcG9uc2VzJztcbiAgQElucHV0KCkgYXBpTW9ja2luZ1JlbmV3SGludCA9ICdSZS1jYXB0dXJlcyBmcmVzaCByZXNwb25zZXMgb24gbmV4dCBydW4uIFR1cm5zIG9mZiBVc2UgbW9jay4nO1xuICAvKipcbiAgICogU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGNhcmQncyBkdWFsIHRvZ2dsZSBzdGF0ZS5cbiAgICogICB0cnVlICDihpIgUmVuZXcgT04sIENhcHR1cmUgT0ZGXG4gICAqICAgZmFsc2Ug4oaSIFJlbmV3IE9GRiwgQ2FwdHVyZSBPTlxuICAgKi9cbiAgQElucHV0KCkgYXBpTW9ja2luZ1Jlc3RvcmVNb2NrID0gZmFsc2U7XG4gIC8qKiBcIlJlbmV3IGFuZCBzdG9yZSBBUEkgcmVzcG9uc2VzXCIg4oCUIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGBhcGlNb2NraW5nUmVzdG9yZU1vY2tgIHdoZW4gdHJ1ZS4gKi9cbiAgQElucHV0KCkgYXBpTW9ja2luZ1N0b3JlTW9jayA9IGZhbHNlO1xuICBASW5wdXQoKSBhcGlNb2NraW5nTW9ja2VkQXBpc0NvdW50ID0gMDtcbiAgQElucHV0KCkgYXBpTW9ja2luZ1RvdGFsQXBpc0NvdW50ID0gMDtcbiAgQElucHV0KCkgYXBpTW9ja2luZ1Byb2dyZXNzUGVyY2VudCA9IDA7XG4gIC8qKiBGb3J3YXJkZWQgdG8gYGNxYS1hcGktbW9ja2luZy1jYXJkYC4gSW4gZWRpdCBtb2RlIHRoZSBjYXJkIGhpZGVzIHRoZSBibG9jayBhbnl3YXksIGJ1dFxuICAgKiAgd2Ugc3RpbGwgcGlwZSB0aGUgaW5wdXQgdGhyb3VnaCBmb3Igc3ltbWV0cnkgd2l0aCB0aGUgcmVhZC1vbmx5IGNvbXBvbmVudC4gKi9cbiAgQElucHV0KCkgYXBpTW9ja2luZ1Nob3dQcm9ncmVzcyA9IGZhbHNlO1xuICBASW5wdXQoKSBhcGlNb2NraW5nU3VtbWFyeVRleHQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFwaU1vY2tpbmdQZXJjZW50VGV4dD86IHN0cmluZztcblxuICAvKiogT3JnLWxldmVsIGRlZmF1bHQgZm9yIFRlc3QgQ2FzZSBUaW1lb3V0IChtaW51dGVzKS4gVXNlZCB0byBmbGFnIHRoZSBpbnB1dCBhcyBcIk9SRyBsZXZlbFwiIHZzIFwiQ3VzdG9tXCIuICovXG4gIEBJbnB1dCgpIG9yZ0xldmVsVGVzdENhc2VUaW1lb3V0Pzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbDtcblxuICBAT3V0cHV0KCkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGVzdENhc2VEZXRhaWxzRWRpdEZvcm1EYXRhPigpO1xuICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBzZWFyY2hlcyBpbiBhIHNlbGVjdCAoc2VydmVyU2VhcmNoIG1vZGUpLiBDYWxsIEFQSSBhbmQgdXBkYXRlIG9wdGlvbnMgdmlhIHNlbGVjdENvbmZpZ092ZXJyaWRlcy4gKi9cbiAgQE91dHB1dCgpIHNlbGVjdFNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZzsgcXVlcnk6IHN0cmluZyB9PigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBzY3JvbGxzIHRvIGxvYWQgbW9yZS4gQ2FsbCBBUEksIGFwcGVuZCB0byBvcHRpb25zIHZpYSBzZWxlY3RDb25maWdPdmVycmlkZXMuICovXG4gIEBPdXRwdXQoKSBzZWxlY3RMb2FkTW9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZzsgcXVlcnk6IHN0cmluZyB9PigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gYSBzZWxlY3QgcGFuZWwgaXMgb3BlbmVkLiBVc2UgdG8gY2FsbCBBUEkgZm9yIGluaXRpYWwgbG9hZCAoZS5nLiB3aGVuIGluaXRpYWxGZXRjaE9uT3BlbikuICovXG4gIEBPdXRwdXQoKSBzZWxlY3RPcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5OiBzdHJpbmcgfT4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIHNlbGVjdGlvbiBjaGFuZ2VzIGluIGFueSBzZWxlY3QuICovXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0+KCk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGFkZHMgYSBuZXcgY3VzdG9tIGxhYmVsIHZpYSB0aGUgXCJOZXdcIiBvcHRpb24uICovXG4gIEBPdXRwdXQoKSBsYWJlbEFkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgZmxpcHMgdGhlIFwiVXNlIG1vY2sgQVBJIHJlc3BvbnNlc1wiIHRvZ2dsZS4gKi9cbiAgQE91dHB1dCgpIGFwaU1vY2tpbmdSZXN0b3JlTW9ja0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBmbGlwcyB0aGUgXCJSZW5ldyBhbmQgc3RvcmUgQVBJIHJlc3BvbnNlc1wiIHRvZ2dsZS4gKi9cbiAgQE91dHB1dCgpIGFwaU1vY2tpbmdTdG9yZU1vY2tDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIFwiQ29uZmlndXJlIE1vY2sgQVBJc1wiIG9uIHRoZSBlbWJlZGRlZCBjYXJkIGluIGVkaXQgbW9kZS4gKi9cbiAgQE91dHB1dCgpIGNvbmZpZ3VyZUFwaU1vY2tpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIC8qKiBGb3JtIHN0YXRlICovXG4gIGVkaXREZXNjcmlwdGlvbiA9ICcnO1xuICBlZGl0U3RhdHVzID0gJyc7XG4gIGVkaXRQcmlvcml0eSA9ICcnO1xuICBlZGl0TGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuICAvKiogTG9jYWwgZWRpdC1tb2RlIG1pcnJvciBvZiB0aGUgYHJlc3RvcmVNb2NrYCBib29sZWFuLiBTZWVkZWQgZnJvbSBASW5wdXQoKSBvbiBpbml0L2NoYW5nZXMuICovXG4gIGVkaXRBcGlNb2NraW5nUmVzdG9yZU1vY2sgPSBmYWxzZTtcbiAgLyoqIExvY2FsIGVkaXQtbW9kZSBtaXJyb3Igb2YgdGhlIGBzdG9yZU1vY2tgIGJvb2xlYW4uICovXG4gIGVkaXRBcGlNb2NraW5nU3RvcmVNb2NrID0gZmFsc2U7XG4gIHRlc3RDYXNlVGltZW91dCA9ICcnO1xuICAvKiogJ29yZycg4oaSIGlucHV0IGRpc2FibGVkLCBwYXlsb2FkIHNlbmRzIG51bGwgZm9yIHRlc3RjYXNlVGltZW91dDsgJ2N1c3RvbScg4oaSIGlucHV0IGVuYWJsZWQsIHBheWxvYWQgc2VuZHMgdGhlIHR5cGVkIHZhbHVlLiAqL1xuICB0ZXN0Q2FzZVRpbWVvdXRNb2RlOiAnb3JnJyB8ICdjdXN0b20nID0gJ29yZyc7XG4gIHdhaXRUaW1lb3V0TG9jYXRvcnMgPSAnJztcbiAgYXV0b1dhaXRFbmFibGVkID0gZmFsc2U7XG4gIHJldHJ5RmFpbGVkU3RlcHMgPSAnJztcbiAgY29uZmlnRXhwYW5kZWQgPSB0cnVlO1xuICBleGVjdXRpb25FeHBhbmRlZCA9IHRydWU7XG4gIGFpQ29uZmlnRXhwYW5kZWQgPSB0cnVlO1xuICB3YWl0c1JldHJpZXNFeHBhbmRlZCA9IHRydWU7XG4gIGRldmljZUV4cGFuZGVkID0gdHJ1ZTtcbiAga2V5RmxhZ3NFeHBhbmRlZCA9IHRydWU7XG4gIG1vYmlsZVRlc3RpbmdFbmFibGVkID0gZmFsc2U7XG4gIGV4dGVuc2lvblVzZUVuYWJsZWQgPSBmYWxzZTtcbiAgZGF0YURyaXZlbkVuYWJsZWQgPSBmYWxzZTtcblxuICByZWFkb25seSBmcmVxdWVudGx5VXNlZExhYmVscyA9IEZSRVFVRU5UTFlfVVNFRF9MQUJFTFM7XG4gIHByaXZhdGUgX2luaXRpYWxGb3JtU25hcHNob3Q6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBGb3JtR3JvdXAgZm9yIGNxYS1keW5hbWljLXNlbGVjdCBiaW5kaW5ncyAqL1xuICBlZGl0Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIHN0YXR1czogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICBwcmlvcml0eTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICB0eXBlOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgIGxhYmVsczogbmV3IEZvcm1Db250cm9sKFtdIGFzIHN0cmluZ1tdKSxcbiAgICBwcmVyZXF1aXNpdGVDYXNlczogbmV3IEZvcm1Db250cm9sKFtdIGFzIHN0cmluZ1tdKSxcbiAgICB0ZXN0RGF0YVByb2ZpbGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgdGVzdERhdGFTZXQ6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgZGVmYXVsdEJyb3dzZXI6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgdmlkZW9SZWNvcmRpbmc6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgZGVmYXVsdFZpZXdwb3J0OiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgIGRldmljZVR5cGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgZGV2aWNlT1M6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgZW5hYmxlQWlTbWFydG5lc3M6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgZGVmYXVsdEFpQWN0aW9uOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgIGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2U6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgdXNlQWlNZXRhZGF0YTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgfSk7XG5cbiAgZ2V0IHN0YXR1c0l0ZW0oKTogVGVzdENhc2VEZXRhaWxzTWV0YWRhdGFJdGVtIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhZGF0YUl0ZW1zLmZpbmQoKG0pID0+IG0ubGFiZWwgPT09ICdTdGF0dXMnKTtcbiAgfVxuXG4gIGdldCBwcmlvcml0eUl0ZW0oKTogVGVzdENhc2VEZXRhaWxzTWV0YWRhdGFJdGVtIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhZGF0YUl0ZW1zLmZpbmQoKG0pID0+IG0ubGFiZWwgPT09ICdQcmlvcml0eScpO1xuICB9XG5cbiAgZ2V0IHR5cGVJdGVtKCk6IFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubWV0YWRhdGFJdGVtcy5maW5kKChtKSA9PiBtLmxhYmVsID09PSAnVHlwZScpO1xuICB9XG5cbiAgZ2V0IHN0YXR1c09wdGlvbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ0RyYWZ0JywgJ0luIFJldmlldycsICdBcHByb3ZlZCcsICdBY3RpdmUnLCAnSW5hY3RpdmUnLCAnQmxvY2tlZCddO1xuICB9XG5cbiAgZ2V0IHByaW9yaXR5T3B0aW9ucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnQ3JpdGljYWwnLCAnTWFqb3InLCAnSGlnaCcsICdNZWRpdW0nLCAnTG93JywgJ01pbm9yJywgJ05vdCBzZXQnXTtcbiAgfVxuXG4gIC8qKiBDYWNoZWQgY29uZmlncyB0byBhdm9pZCBuZXcgb2JqZWN0IHJlZnMgZWFjaCBjaGFuZ2UgZGV0ZWN0aW9uIChwcmV2ZW50cyBpbmZpbml0ZSBsb29wcykgKi9cbiAgcmVhZG9ubHkgc3RhdHVzU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAnc3RhdHVzJyxcbiAgICBsYWJlbDogJycsXG4gICAgcGxhY2Vob2xkZXI6ICdTdGF0dXMnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICdEcmFmdCcsIG5hbWU6ICdEcmFmdCcgfSxcbiAgICAgIHsgdmFsdWU6ICdJbiBSZXZpZXcnLCBuYW1lOiAnSW4gUmV2aWV3JyB9LFxuICAgICAgeyB2YWx1ZTogJ0FwcHJvdmVkJywgbmFtZTogJ0FwcHJvdmVkJyB9LFxuICAgICAgeyB2YWx1ZTogJ0FjdGl2ZScsIG5hbWU6ICdBY3RpdmUnIH0sXG4gICAgICB7IHZhbHVlOiAnSW5hY3RpdmUnLCBuYW1lOiAnSW5hY3RpdmUnIH0sXG4gICAgICB7IHZhbHVlOiAnQmxvY2tlZCcsIG5hbWU6ICdCbG9ja2VkJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgcmVhZG9ubHkgdHlwZVNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ3R5cGUnLFxuICAgIGxhYmVsOiAnJyxcbiAgICBwbGFjZWhvbGRlcjogJ1R5cGUnLFxuICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgb3B0aW9uczogW10sXG4gIH07XG5cbiAgcmVhZG9ubHkgdGVzdERhdGFQcm9maWxlU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAndGVzdERhdGFQcm9maWxlJyxcbiAgICBsYWJlbDogJycsXG4gICAgcGxhY2Vob2xkZXI6ICdUZXN0IERhdGEgUHJvZmlsZScsXG4gICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICBvcHRpb25zOiBbXSxcbiAgfTtcblxuICByZWFkb25seSB0ZXN0RGF0YVNldFNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ3Rlc3REYXRhU2V0JyxcbiAgICBsYWJlbDogJycsXG4gICAgcGxhY2Vob2xkZXI6ICdUZXN0IERhdGEgU2V0JyxcbiAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgIG9wdGlvbnM6IFtdLFxuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFByZXJlcXVpc2l0ZUNhc2VPcHRpb25zID0gW1xuICAgIHsgdmFsdWU6ICdUQy0wMDEnLCBuYW1lOiAnVEMtMDAxOiBMb2dpbiBmbG93JyB9LFxuICAgIHsgdmFsdWU6ICdUQy0wMDInLCBuYW1lOiAnVEMtMDAyOiBVc2VyIHJlZ2lzdHJhdGlvbicgfSxcbiAgICB7IHZhbHVlOiAnVEMtMDAzJywgbmFtZTogJ1RDLTAwMzogUGFzc3dvcmQgcmVzZXQnIH0sXG4gICAgeyB2YWx1ZTogJ1RDLTAwNCcsIG5hbWU6ICdUQy0wMDQ6IERhc2hib2FyZCBsb2FkJyB9LFxuICAgIHsgdmFsdWU6ICdUQy0wMDUnLCBuYW1lOiAnVEMtMDA1OiBBUEkgaGVhbHRoIGNoZWNrJyB9LFxuICBdO1xuXG4gIHJlYWRvbmx5IHZpZGVvUmVjb3JkaW5nU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAndmlkZW9SZWNvcmRpbmcnLFxuICAgIGxhYmVsOiAnUmVjb3JkIHRlc3QgZXhlY3V0aW9uIHZpZGVvJyxcbiAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCcsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyB2YWx1ZTogJ3RydWUnLCBuYW1lOiAnVHJ1ZScgfSxcbiAgICAgIHsgdmFsdWU6ICdmYWxzZScsIG5hbWU6ICdGYWxzZScgfSxcbiAgICAgIHsgdmFsdWU6ICdPcmcgbGV2ZWwnLCBuYW1lOiAnT3JnIGxldmVsJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgcmVhZG9ubHkgYWlNZXRhZGF0YUNvbGxlY3Rpb25TZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICd1c2VBaU1ldGFkYXRhJyxcbiAgICBsYWJlbDogJ0VuYWJsZSBBSSBtZXRhZGF0YSBjb2xsZWN0aW9uJyxcbiAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCcsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyB2YWx1ZTogJ3RydWUnLCBuYW1lOiAnVHJ1ZScgfSxcbiAgICAgIHsgdmFsdWU6ICdmYWxzZScsIG5hbWU6ICdGYWxzZScgfSxcbiAgICAgIHsgdmFsdWU6ICdPcmcgbGV2ZWwnLCBuYW1lOiAnT3JnIGxldmVsJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgLyoqIENhY2hlZCBsYWJlbHMgY29uZmlnIHRvIGF2b2lkIG5ldyBvYmplY3Qgb24gZXZlcnkgQ0QgKHByZXZlbnRzIGZyZWV6ZSkgKi9cbiAgcHJpdmF0ZSBfbGFiZWxzU2VsZWN0Q29uZmlnQ2FjaGU6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9sYWJlbHNTZWxlY3RDb25maWdEaXJ0eSA9IHRydWU7XG5cbiAgLyoqIExhYmVscyBtdWx0aS1zZWxlY3Q6IG9wdGlvbnMgPSBmcmVxdWVudGx5IHVzZWQgKyBjdXJyZW50ICsgQVBJIG9wdGlvbnMgZnJvbSBzZWxlY3RDb25maWdPdmVycmlkZXMgKi9cbiAgZ2V0IGxhYmVsc1NlbGVjdENvbmZpZygpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIGlmICghdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnRGlydHkgJiYgdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnQ2FjaGUpIHJldHVybiB0aGlzLl9sYWJlbHNTZWxlY3RDb25maWdDYWNoZTtcbiAgICBjb25zdCBvdmVycmlkZSA9IHRoaXMuc2VsZWN0Q29uZmlnT3ZlcnJpZGVzW1RFU1RfQ0FTRV9ERVRBSUxTX1NFTEVDVF9LRVlTLmxhYmVsc107XG4gICAgY29uc3QgYXBpT3B0aW9ucyA9IG92ZXJyaWRlPy5vcHRpb25zID8/IFtdO1xuICAgIGNvbnN0IGFsbExhYmVscyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gICAgICAuLi50aGlzLmZyZXF1ZW50bHlVc2VkTGFiZWxzLFxuICAgICAgLi4udGhpcy5lZGl0TGFiZWxzLFxuICAgICAgLi4uYXBpT3B0aW9ucy5tYXAoKG8pID0+IFN0cmluZyhvLm5hbWUgPz8gby52YWx1ZSA/PyAnJykudHJpbSgpKS5maWx0ZXIoQm9vbGVhbiksXG4gICAgXSk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IEFycmF5LmZyb20oYWxsTGFiZWxzKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSlcbiAgICAgIC5tYXAoKHYpID0+ICh7IHZhbHVlOiB2LCBuYW1lOiB2IH0pKTtcbiAgICB0aGlzLl9sYWJlbHNTZWxlY3RDb25maWdDYWNoZSA9IHtcbiAgICAgIGtleTogJ2xhYmVscycsXG4gICAgICBsYWJlbDogJycsXG4gICAgICBwbGFjZWhvbGRlcjogJ1NlYXJjaCBsYWJlbHMgdG8gYWRkIC4uLi4uLicsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICBvcHRpb25TdHlsZTogJ2NoZWNrYm94JyxcbiAgICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWUsXG4gICAgICBvcHRpb25zLFxuICAgIH07XG4gICAgdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnRGlydHkgPSBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnQ2FjaGU7XG4gIH1cblxuICBwcmVyZXF1aXNpdGVDYXNlU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAncHJlcmVxdWlzaXRlQ2FzZXMnLFxuICAgIGxhYmVsOiAnUHJlcmVxdWlzaXRlIENhc2UnLFxuICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0JyxcbiAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG9wdGlvblN0eWxlOiAnY2hlY2tib3gnLFxuICAgIHNob3dTZWxlY3RBbGw6IHRydWUsXG4gICAgc2VsZWN0QWxsTGFiZWw6ICdBbGwnLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICdUQy0wMDEnLCBuYW1lOiAnVEMtMDAxOiBMb2dpbiBmbG93JyB9LFxuICAgICAgeyB2YWx1ZTogJ1RDLTAwMicsIG5hbWU6ICdUQy0wMDI6IFVzZXIgcmVnaXN0cmF0aW9uJyB9LFxuICAgICAgeyB2YWx1ZTogJ1RDLTAwMycsIG5hbWU6ICdUQy0wMDM6IFBhc3N3b3JkIHJlc2V0JyB9LFxuICAgICAgeyB2YWx1ZTogJ1RDLTAwNCcsIG5hbWU6ICdUQy0wMDQ6IERhc2hib2FyZCBsb2FkJyB9LFxuICAgICAgeyB2YWx1ZTogJ1RDLTAwNScsIG5hbWU6ICdUQy0wMDU6IEFQSSBoZWFsdGggY2hlY2snIH0sXG4gICAgXSxcbiAgfTtcblxuICByZWFkb25seSBkZWZhdWx0Vmlld3BvcnRTZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICdkZWZhdWx0Vmlld3BvcnQnLFxuICAgIGxhYmVsOiAnRGVmYXVsdCBWaWV3cG9ydCcsXG4gICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICcxMjgweDcyMCcsIG5hbWU6ICcxMjgweDcyMCcgfSxcbiAgICBdLFxuICB9O1xuXG4gIHJlYWRvbmx5IGRldmljZVR5cGVTZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICdkZXZpY2VUeXBlJyxcbiAgICBsYWJlbDogJ0RldmljZSBUeXBlJyxcbiAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCcsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyB2YWx1ZTogJ2lQaG9uZSAxNCcsIG5hbWU6ICdpUGhvbmUgMTQnIH0sXG4gICAgICB7IHZhbHVlOiAnaVBob25lIDE1JywgbmFtZTogJ2lQaG9uZSAxNScgfSxcbiAgICAgIHsgdmFsdWU6ICdpUGhvbmUgMTcnLCBuYW1lOiAnaVBob25lIDE3JyB9LFxuICAgICAgeyB2YWx1ZTogJ0lwaG9uZSAxNycsIG5hbWU6ICdJcGhvbmUgMTcnIH0sXG4gICAgICB7IHZhbHVlOiAnU2Ftc3VuZyBHYWxheHknLCBuYW1lOiAnU2Ftc3VuZyBHYWxheHknIH0sXG4gICAgICB7IHZhbHVlOiAnUGl4ZWwnLCBuYW1lOiAnUGl4ZWwnIH0sXG4gICAgXSxcbiAgfTtcblxuICByZWFkb25seSBkZXZpY2VPU1NlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ2RldmljZU9TJyxcbiAgICBsYWJlbDogJ09TJyxcbiAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCcsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyB2YWx1ZTogJ2lwYScsIG5hbWU6ICdpT1MgKGlwYSknIH0sXG4gICAgICB7IHZhbHVlOiAnYXBrJywgbmFtZTogJ0FuZHJvaWQgKGFwayknIH0sXG4gICAgICB7IHZhbHVlOiAnaU9TIDE2JywgbmFtZTogJ2lPUyAxNicgfSxcbiAgICAgIHsgdmFsdWU6ICdpT1MgMTcnLCBuYW1lOiAnaU9TIDE3JyB9LFxuICAgICAgeyB2YWx1ZTogJ0FuZHJvaWQgMTMnLCBuYW1lOiAnQW5kcm9pZCAxMycgfSxcbiAgICAgIHsgdmFsdWU6ICdBbmRyb2lkIDE0JywgbmFtZTogJ0FuZHJvaWQgMTQnIH0sXG4gICAgXSxcbiAgfTtcblxuICByZWFkb25seSBkZWZhdWx0QnJvd3NlclNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ2RlZmF1bHRCcm93c2VyJyxcbiAgICBsYWJlbDogJ0RlZmF1bHQgQnJvd3NlcicsXG4gICAgcGxhY2Vob2xkZXI6ICdDaHJvbWUnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICdDaHJvbWUnLCBuYW1lOiAnQ2hyb21lJyB9LFxuICAgICAgeyB2YWx1ZTogJ0ZpcmVmb3gnLCBuYW1lOiAnRmlyZWZveCcgfSxcbiAgICAgIHsgdmFsdWU6ICdTYWZhcmknLCBuYW1lOiAnU2FmYXJpJyB9LFxuICAgICAgeyB2YWx1ZTogJ0VkZ2UnLCBuYW1lOiAnRWRnZScgfSxcbiAgICBdLFxuICB9O1xuXG4gIHJlYWRvbmx5IHByaW9yaXR5U2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAncHJpb3JpdHknLFxuICAgIGxhYmVsOiAnJyxcbiAgICBwbGFjZWhvbGRlcjogJ1ByaW9yaXR5JyxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICBvcHRpb25zOiBbXG4gICAgICB7IHZhbHVlOiAnQ3JpdGljYWwnLCBuYW1lOiAnQ3JpdGljYWwnIH0sXG4gICAgICB7IHZhbHVlOiAnTWFqb3InLCBuYW1lOiAnTWFqb3InIH0sXG4gICAgICB7IHZhbHVlOiAnSGlnaCcsIG5hbWU6ICdIaWdoJyB9LFxuICAgICAgeyB2YWx1ZTogJ01lZGl1bScsIG5hbWU6ICdNZWRpdW0nIH0sXG4gICAgICB7IHZhbHVlOiAnTG93JywgbmFtZTogJ0xvdycgfSxcbiAgICAgIHsgdmFsdWU6ICdNaW5vcicsIG5hbWU6ICdNaW5vcicgfSxcbiAgICAgIHsgdmFsdWU6ICdOb3Qgc2V0JywgbmFtZTogJ05vdCBzZXQnIH0sXG4gICAgXSxcbiAgfTtcblxuICByZWFkb25seSBlbmFibGVBaVNtYXJ0bmVzc1NlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ2VuYWJsZUFpU21hcnRuZXNzJyxcbiAgICBsYWJlbDogJ0VuYWJsZSBBSSBTbWFydG5lc3MnLFxuICAgIHBsYWNlaG9sZGVyOiAnQWR2YW5jZWQnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICdCYXNpYycsIG5hbWU6ICdCYXNpYycgfSxcbiAgICAgIHsgdmFsdWU6ICdBZHZhbmNlZCcsIG5hbWU6ICdBZHZhbmNlZCcgfSxcbiAgICAgIHsgdmFsdWU6ICdPZmYnLCBuYW1lOiAnT2ZmJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgcmVhZG9ubHkgZGVmYXVsdEFpQWN0aW9uU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAnZGVmYXVsdEFpQWN0aW9uJyxcbiAgICBsYWJlbDogJ0RlZmF1bHQgQUkgQWN0aW9uJyxcbiAgICBwbGFjZWhvbGRlcjogJ1NtYXJ0IHdhaXQnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICdTbWFydCB3YWl0JywgbmFtZTogJ1NtYXJ0IHdhaXQnIH0sXG4gICAgICB7IHZhbHVlOiAnU21hcnQgV2FpdCcsIG5hbWU6ICdTbWFydCBXYWl0JyB9LFxuICAgICAgeyB2YWx1ZTogJ1dhaXQgZm9yIGVsZW1lbnQnLCBuYW1lOiAnV2FpdCBmb3IgZWxlbWVudCcgfSxcbiAgICAgIHsgdmFsdWU6ICdSZXRyeScsIG5hbWU6ICdSZXRyeScgfSxcbiAgICAgIHsgdmFsdWU6ICdTa2lwJywgbmFtZTogJ1NraXAnIH0sXG4gICAgXSxcbiAgfTtcblxuICByZWFkb25seSBrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAna25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZScsXG4gICAgbGFiZWw6ICdLbm93bGVkZ2UgQmFzZSBEZWZhdWx0IFRlc3QgQ2FzZScsXG4gICAgcGxhY2Vob2xkZXI6ICdOb25lJyxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICBvcHRpb25zOiBbXG4gICAgICB7IHZhbHVlOiAnbm9uZScsIG5hbWU6ICdOb25lJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgbWVyZ2VkIGNvbmZpZyBmb3IgYSBzZWxlY3Q6IGJhc2UgY29uZmlnICsgb3ZlcnJpZGUuXG4gICAqIFdpcmVzIG9uU2VhcmNoLCBvbkxvYWRNb3JlIHRvIGJvdGggb3ZlcnJpZGUgY2FsbGJhY2tzIGFuZCBvdXRwdXQgZXZlbnRzLlxuICAgKi9cbiAgZ2V0Q29uZmlnRm9yU2VsZWN0KGtleTogc3RyaW5nLCBiYXNlQ29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIGNvbnN0IG92ZXJyaWRlID0gdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LltrZXldO1xuICAgIGlmICghb3ZlcnJpZGUpIHJldHVybiBiYXNlQ29uZmlnO1xuXG4gICAgY29uc3QgbWVyZ2VkOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAgICAuLi5iYXNlQ29uZmlnLFxuICAgICAgLi4ub3ZlcnJpZGUsXG4gICAgICBvcHRpb25zOiBvdmVycmlkZS5vcHRpb25zID8/IGJhc2VDb25maWcub3B0aW9ucyxcbiAgICAgIGtleTogYmFzZUNvbmZpZy5rZXksXG4gICAgfTtcblxuICAgIGlmIChvdmVycmlkZS5zZXJ2ZXJTZWFyY2ggfHwgb3ZlcnJpZGUub25TZWFyY2gpIHtcbiAgICAgIG1lcmdlZC5vblNlYXJjaCA9IChxdWVyeSkgPT4ge1xuICAgICAgICBvdmVycmlkZS5vblNlYXJjaD8uKHF1ZXJ5KTtcbiAgICAgICAgdGhpcy5zZWxlY3RTZWFyY2guZW1pdCh7IGtleSwgcXVlcnkgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAob3ZlcnJpZGUuaGFzTW9yZSB8fCBvdmVycmlkZS5vbkxvYWRNb3JlKSB7XG4gICAgICBtZXJnZWQub25Mb2FkTW9yZSA9IChxdWVyeT86IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBxID0gcXVlcnkgPz8gJyc7XG4gICAgICAgIG92ZXJyaWRlLm9uTG9hZE1vcmU/LihxKTtcbiAgICAgICAgdGhpcy5zZWxlY3RMb2FkTW9yZS5lbWl0KHsga2V5LCBxdWVyeTogcSB9KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfVxuXG4gIG9uU2VsZWN0T3BlbmVkKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RPcGVuZWQuZW1pdCh7IGtleSB9KTtcbiAgfVxuXG4gIG9uU2VsZWN0U2VhcmNoKGV2ZW50OiB7IGtleTogc3RyaW5nOyBxdWVyeTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdFNlYXJjaC5lbWl0KGV2ZW50KTtcbiAgICBjb25zdCBvdmVycmlkZSA9IHRoaXMuc2VsZWN0Q29uZmlnT3ZlcnJpZGVzPy5bZXZlbnQua2V5XTtcbiAgICBvdmVycmlkZT8ub25TZWFyY2g/LihldmVudC5xdWVyeSk7XG4gIH1cblxuICBvblNlbGVjdExvYWRNb3JlKGV2ZW50OiB7IGtleTogc3RyaW5nOyBxdWVyeTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdExvYWRNb3JlLmVtaXQoZXZlbnQpO1xuICAgIGNvbnN0IG92ZXJyaWRlID0gdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LltldmVudC5rZXldO1xuICAgIG92ZXJyaWRlPy5vbkxvYWRNb3JlPy4oZXZlbnQucXVlcnkpO1xuICB9XG5cbiAgb25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBURVNUX0NBU0VfREVUQUlMU19TRUxFQ1RfS0VZUy5sYWJlbHMpIHtcbiAgICAgIGNvbnN0IHZhbCA9IGV2ZW50LnZhbHVlO1xuICAgICAgdGhpcy5lZGl0TGFiZWxzID0gQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsLm1hcCgodikgPT4gU3RyaW5nKHYpKS5maWx0ZXIoQm9vbGVhbikgOiB2YWwgIT0gbnVsbCA/IFtTdHJpbmcodmFsKV0gOiBbXTtcbiAgICAgIHRoaXMuX2xhYmVsc1NlbGVjdENvbmZpZ0RpcnR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICAvLyBNYXJrIFRlc3QgRGF0YSBzZWxlY3RzIGFzIGRpcnR5IHNvIGxhdGVyIGlucHV0IGNoYW5nZXMgKG9wdGlvbnMvY29uZmlnKSBkb24ndCBvdmVyd3JpdGUgdXNlciBjaG9pY2VcbiAgICBpZiAoZXZlbnQua2V5ID09PSBURVNUX0NBU0VfREVUQUlMU19TRUxFQ1RfS0VZUy50ZXN0RGF0YVByb2ZpbGUgfHwgZXZlbnQua2V5ID09PSBURVNUX0NBU0VfREVUQUlMU19TRUxFQ1RfS0VZUy50ZXN0RGF0YVNldCkge1xuICAgICAgY29uc3QgY3RybCA9IHRoaXMuZWRpdEZvcm0uZ2V0KGV2ZW50LmtleSk7XG4gICAgICBjdHJsPy5tYXJrQXNEaXJ0eSgpO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHsga2V5OiBldmVudC5rZXksIHZhbHVlOiBldmVudC52YWx1ZSB9KTtcbiAgfVxuXG4gIG9uTGFiZWxzQWRkQ3VzdG9tVmFsdWUoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIGNvbnN0IHYgPSAoZXZlbnQudmFsdWUgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIXYgfHwgdGhpcy5lZGl0TGFiZWxzLmluY2x1ZGVzKHYpKSByZXR1cm47XG4gICAgdGhpcy5lZGl0TGFiZWxzID0gWy4uLnRoaXMuZWRpdExhYmVscywgdl07XG4gICAgdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZWRpdEZvcm0uZ2V0KFRFU1RfQ0FTRV9ERVRBSUxTX1NFTEVDVF9LRVlTLmxhYmVscyk/LnNldFZhbHVlKHRoaXMuZWRpdExhYmVscywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMubGFiZWxBZGRlZC5lbWl0KHYpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb25maWdJdGVtVmFsdWUoc2VjdGlvblRpdGxlOiBzdHJpbmcsIGl0ZW1MYWJlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWN0aW9uID0gWy4uLnRoaXMuY29uZmlnU2VjdGlvbnMsIC4uLnRoaXMuY29uZmlnU2VjdGlvbnNSb3cyXS5maW5kKFxuICAgICAgKHMpID0+XG4gICAgICAgIHMudGl0bGUgPT09IHNlY3Rpb25UaXRsZSB8fFxuICAgICAgICBzLnRpdGxlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlY3Rpb25UaXRsZS50b0xvd2VyQ2FzZSgpKVxuICAgICk7XG4gICAgY29uc3QgaXRlbSA9IHNlY3Rpb24/Lml0ZW1zPy5maW5kKFxuICAgICAgKGkpID0+XG4gICAgICAgIGkubGFiZWwgPT09IGl0ZW1MYWJlbCB8fFxuICAgICAgICBpLmxhYmVsPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGl0ZW1MYWJlbC50b0xvd2VyQ2FzZSgpKVxuICAgICk7XG4gICAgcmV0dXJuIChpdGVtPy52YWx1ZSBhcyBzdHJpbmcpID8/ICcnO1xuICB9XG5cbiAgLyoqIEdldCB2YWx1ZSBmcm9tIERldmljZSBzZWN0aW9uIC0gc3VwcG9ydHMgYm90aCAnRGV2aWNlJyBhbmQgJ0RldmljZSBTZXR0aW5nJyB0aXRsZXMgKi9cbiAgcHJpdmF0ZSBnZXREZXZpY2VDb25maWdWYWx1ZShpdGVtTGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsID1cbiAgICAgIHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdEZXZpY2UnLCBpdGVtTGFiZWwpIHx8XG4gICAgICB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRGV2aWNlIFNldHRpbmcnLCBpdGVtTGFiZWwpO1xuICAgIHJldHVybiB2YWwgIT0gbnVsbCAmJiB2YWwgIT09ICcnICYmIFN0cmluZyh2YWwpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcodmFsKSA6ICcnO1xuICB9XG5cbiAgLyoqIEdldCB2YWx1ZSBmcm9tIFdhaXRzIHNlY3Rpb24gLSBzdXBwb3J0cyBib3RoICdXYWl0IGFuZCByZXRyaWVzJyBhbmQgJ1dhaXRzICYgUmV0cmllcycgdGl0bGVzICovXG4gIHByaXZhdGUgZ2V0V2FpdHNSZXRyaWVzVmFsdWUoaXRlbUxhYmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHYxID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ1dhaXQgYW5kIHJldHJpZXMnLCBpdGVtTGFiZWwpO1xuICAgIGNvbnN0IHYyID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ1dhaXRzICYgUmV0cmllcycsIGl0ZW1MYWJlbCk7XG4gICAgbGV0IHZhbCA9ICh2MSAhPT0gJycgJiYgdjEgIT0gbnVsbCkgPyB2MSA6IHYyO1xuXG4gICAgLy8gV2hlbiB2YWx1ZXMgYXJlIGNvbWluZyBmcm9tIG9yZ2FuaXphdGlvbiBzZXR0aW5ncywgdGhlIHBvcnRhbCB3cmFwcyB0aGVtIGFzXG4gICAgLy8gXCJPcmcgTGV2ZWwgKEFDVFVBTCBWQUxVRSlcIi4gRm9yIGVkaXQgaW5wdXRzIChSZXRyeSBGYWlsZWQgU3RlcHMsIFRlc3QgQ2FzZSBUaW1lb3V0LFxuICAgIC8vIFdhaXQgVGltZW91dCBmb3IgTG9jYXRvcnMpLCB3ZSBvbmx5IHdhbnQgdG8gc2hvdyB0aGUgaW5uZXIgdmFsdWUsIG5vdCB0aGUgd3JhcHBlci5cbiAgICBpZiAodmFsICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHJhdyA9IFN0cmluZyh2YWwpLnRyaW0oKTtcbiAgICAgIGNvbnN0IGxvd2VyID0gcmF3LnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBwcmVmaXggPSAnb3JnIGxldmVsICgnO1xuICAgICAgaWYgKGxvd2VyLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgICAgICBjb25zdCBvcGVuSWR4ID0gcmF3LmluZGV4T2YoJygnKTtcbiAgICAgICAgY29uc3QgY2xvc2VJZHggPSByYXcubGFzdEluZGV4T2YoJyknKTtcbiAgICAgICAgaWYgKG9wZW5JZHggPj0gMCAmJiBjbG9zZUlkeCA+IG9wZW5JZHgpIHtcbiAgICAgICAgICB2YWwgPSByYXcuc3Vic3RyaW5nKG9wZW5JZHggKyAxLCBjbG9zZUlkeCkudHJpbSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbCA9IHJhdy5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCkudHJpbSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbCAhPSBudWxsICYmIHZhbCAhPT0gJycgJiYgU3RyaW5nKHZhbCkudHJpbSgpICE9PSAnJyA/IFN0cmluZyh2YWwpIDogJyc7XG4gIH1cblxuICAvKiogU3RyaXAgdHJhaWxpbmcgJ3MnIGZyb20gdmFsdWUgKGUuZy4gXCIxMHNcIiAtPiBcIjEwXCIpIGZvciBkaXNwbGF5IGluIHRpbWVvdXQgaW5wdXRzICovXG4gIHByaXZhdGUgc3RyaXBUcmFpbGluZ1VuaXRTKHZhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodmFsID09IG51bGwgfHwgdmFsID09PSAnJykgcmV0dXJuIHZhbDtcbiAgICBjb25zdCBzID0gU3RyaW5nKHZhbCkudHJpbSgpO1xuICAgIHJldHVybiBzLnJlcGxhY2UoL1xccypzJC9pLCAnJyk7XG4gIH1cblxuICByZWFkb25seSB0ZXN0Q2FzZVRpbWVvdXRNb2RlT3B0aW9uczogRHJvcGRvd25PcHRpb25bXSA9IFtcbiAgICB7IGxhYmVsOiAnT1JHIGxldmVsJywgdmFsdWU6ICdvcmcnIH0sXG4gICAgeyBsYWJlbDogJ0N1c3RvbScsIHZhbHVlOiAnY3VzdG9tJyB9LFxuICBdO1xuXG4gIC8qKiBWYWx1ZSBzaG93biBpbiB0aGUgZGlzYWJsZWQgKG9yZykgb3IgZW5hYmxlZCAoY3VzdG9tKSBUZXN0IENhc2UgVGltZW91dCBpbnB1dC4gKi9cbiAgZ2V0IHRlc3RDYXNlVGltZW91dERpc3BsYXlWYWx1ZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnRlc3RDYXNlVGltZW91dE1vZGUgPT09ICdvcmcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcmdMZXZlbFRlc3RDYXNlVGltZW91dCAhPSBudWxsID8gU3RyaW5nKHRoaXMub3JnTGV2ZWxUZXN0Q2FzZVRpbWVvdXQpIDogJyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRlc3RDYXNlVGltZW91dDtcbiAgfVxuXG4gIG9uVGVzdENhc2VUaW1lb3V0TW9kZUNoYW5nZShtb2RlOiAnb3JnJyB8ICdjdXN0b20nKTogdm9pZCB7XG4gICAgdGhpcy50ZXN0Q2FzZVRpbWVvdXRNb2RlID0gbW9kZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBUcnVlIHdoZW4gdGhlIHBvcnRhbCB3cmFwcGVkIHRoZSBUZXN0IENhc2UgVGltZW91dCB2YWx1ZSBhcyBcIk9yZyBMZXZlbCAoLi4uKVwiLCBtZWFuaW5nIHRoZSBUQyBBUEkgcmV0dXJuZWQgbnVsbC4gKi9cbiAgcHJpdmF0ZSBpc1Rlc3RDYXNlVGltZW91dEZyb21PcmcoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmF3ID1cbiAgICAgIHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdXYWl0IGFuZCByZXRyaWVzJywgJ1Rlc3QgQ2FzZSBUaW1lb3V0IChtaW51dGVzKScpIHx8XG4gICAgICB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnV2FpdHMgJiBSZXRyaWVzJywgJ1Rlc3QgQ2FzZSBUaW1lb3V0IChtaW51dGVzKScpO1xuICAgIHJldHVybiByYXcudHJpbSgpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChPUkdfTEVWRUxfU0VOVElORUwudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICAvKiogQWxsb3cgb25seSBkaWdpdHM7IHVzZWQgZm9yIFJldHJ5IEZhaWxlZCBTdGVwcywgVGVzdCBDYXNlIFRpbWVvdXQsIFdhaXQgVGltZW91dCBpbnB1dHMgKi9cbiAgb25seURpZ2l0cyh2YWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gJycpIHJldHVybiAnJztcbiAgICByZXR1cm4gU3RyaW5nKHZhbCkucmVwbGFjZSgvXFxEL2csICcnKTtcbiAgfVxuXG4gIC8qKiBGb3IgdXBkYXRlOiB1c2UgXCIwXCIgd2hlbiB2YWx1ZSBpcyBlbXB0eSBzbyBBUEkgZ2V0cyBhIG51bWJlciAqL1xuICBwcml2YXRlIGVtcHR5TnVtVG9aZXJvKHZhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodmFsID09IG51bGwgfHwgU3RyaW5nKHZhbCkudHJpbSgpID09PSAnJykgcmV0dXJuICcwJztcbiAgICByZXR1cm4gU3RyaW5nKHZhbCkudHJpbSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcmVyZXF1aXNpdGVDYXNlc0Zyb21Db25maWcoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnUHJlcmVxdWlzaXRlIENhc2UnKTtcbiAgICBpZiAoIXZhbCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiB2YWwuaW5jbHVkZXMoJywnKSA/IHZhbC5zcGxpdCgnLCcpLm1hcCgocykgPT4gcy50cmltKCkpLmZpbHRlcihCb29sZWFuKSA6IFt2YWxdO1xuICB9XG5cbiAgLyoqIEVkaXQgbW9kZSBzaG91bGQgc2hvdyBwbGFjZWhvbGRlciB3aGVuIGRhdGFzZXQgaXMgbm90IHNlbGVjdGVkLiAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZVRlc3REYXRhU2V0UmF3VmFsdWUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlPy50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gJ25vdCBzZXQnID8gJycgOiB2YWx1ZTtcbiAgfVxuXG4gIGdldCBoYXNQcmVyZXF1aXNpdGVDYXNlQ29uZmlnKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlY3Rpb24gPSBbLi4udGhpcy5jb25maWdTZWN0aW9ucywgLi4udGhpcy5jb25maWdTZWN0aW9uc1JvdzJdLmZpbmQoXG4gICAgICAocykgPT4gcy50aXRsZSA9PT0gJ0V4ZWN1dGlvbidcbiAgICApO1xuICAgIHJldHVybiAhIXNlY3Rpb24/Lml0ZW1zPy5zb21lKChpKSA9PiBpLmxhYmVsID09PSAnUHJlcmVxdWlzaXRlIENhc2UnKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdERlc2NyaXB0aW9uID0gdGhpcy5kZXNjcmlwdGlvbkNvbnRlbnQ7XG4gICAgdGhpcy5lZGl0U3RhdHVzID0gdGhpcy5zdGF0dXNJdGVtPy52YWx1ZSA/PyAnJztcbiAgICB0aGlzLmVkaXRQcmlvcml0eSA9IHRoaXMucHJpb3JpdHlJdGVtPy52YWx1ZSA/PyAnJztcbiAgICBjb25zdCB0eXBlUmF3ID0gKHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnVHlwZScpIHx8ICh0aGlzLnR5cGVJdGVtPy52YWx1ZSBhcyBzdHJpbmcpKSA/PyAnJztcbiAgICBjb25zdCB0ZXN0RGF0YVByb2ZpbGVSYXcgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ1Rlc3QgRGF0YSBQcm9maWxlJykgPz8gJyc7XG4gICAgY29uc3QgdGVzdERhdGFTZXRSYXcgPSB0aGlzLm5vcm1hbGl6ZVRlc3REYXRhU2V0UmF3VmFsdWUoXG4gICAgICB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ1Rlc3QgRGF0YSBTZXQnKSA/PyAnJ1xuICAgICk7XG4gICAgY29uc3QgdHlwZVZhbCA9IHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUodHlwZVJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LlsndHlwZSddPy5vcHRpb25zKSA/PyB0eXBlUmF3O1xuICAgIGNvbnN0IHRlc3REYXRhUHJvZmlsZVZhbCA9IHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUodGVzdERhdGFQcm9maWxlUmF3LCB0aGlzLnNlbGVjdENvbmZpZ092ZXJyaWRlcz8uWyd0ZXN0RGF0YVByb2ZpbGUnXT8ub3B0aW9ucykgPz8gdGVzdERhdGFQcm9maWxlUmF3O1xuICAgIGNvbnN0IHRlc3REYXRhU2V0VmFsID0gdGhpcy5yZXNvbHZlVG9PcHRpb25WYWx1ZSh0ZXN0RGF0YVNldFJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LlsndGVzdERhdGFTZXQnXT8ub3B0aW9ucykgPz8gdGVzdERhdGFTZXRSYXc7XG4gICAgdGhpcy5lZGl0TGFiZWxzID0gWy4uLnRoaXMubGFiZWxzXTtcbiAgICBjb25zdCBhdXRvV2FpdFZhbCA9IHRoaXMuZ2V0V2FpdHNSZXRyaWVzVmFsdWUoJ0VuYWJsZSBBdm9pZCBBdXRvIHdhaXQgZm9yIHN0ZXBzJykgfHwgdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ1dhaXRzICYgUmV0cmllcycsICdBdXRvIFdhaXQnKTtcbiAgICB0aGlzLmF1dG9XYWl0RW5hYmxlZCA9ICEhKGF1dG9XYWl0VmFsICYmIGF1dG9XYWl0VmFsLnRyaW0oKSAhPT0gJycgJiYgU3RyaW5nKGF1dG9XYWl0VmFsKSAhPT0gJ2ZhbHNlJyk7XG4gICAgdGhpcy5yZXRyeUZhaWxlZFN0ZXBzID0gdGhpcy5nZXRXYWl0c1JldHJpZXNWYWx1ZSgnUmV0cnkgRmFpbGVkIFN0ZXBzJyk7XG4gICAgdGhpcy50ZXN0Q2FzZVRpbWVvdXRNb2RlID0gdGhpcy5pc1Rlc3RDYXNlVGltZW91dEZyb21PcmcoKSA/ICdvcmcnIDogJ2N1c3RvbSc7XG4gICAgdGhpcy50ZXN0Q2FzZVRpbWVvdXQgPSB0aGlzLnN0cmlwVHJhaWxpbmdVbml0Uyh0aGlzLmdldFdhaXRzUmV0cmllc1ZhbHVlKCdUZXN0IENhc2UgVGltZW91dCAobWludXRlcyknKSk7XG4gICAgdGhpcy53YWl0VGltZW91dExvY2F0b3JzID0gdGhpcy5zdHJpcFRyYWlsaW5nVW5pdFModGhpcy5nZXRXYWl0c1JldHJpZXNWYWx1ZSgnV2FpdCBUaW1lb3V0IGZvciBMb2NhdG9ycyAoc2VjcyknKSk7XG4gICAgdGhpcy5tb2JpbGVUZXN0aW5nRW5hYmxlZCA9ICEhdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0tleSBGbGFncycsICdNb2JpbGUgVGVzdGluZycpO1xuICAgIHRoaXMuZXh0ZW5zaW9uVXNlRW5hYmxlZCA9ICEhdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0tleSBGbGFncycsICdFeHRlbnNpb24gVXNlJyk7XG4gICAgdGhpcy5kYXRhRHJpdmVuRW5hYmxlZCA9ICEhdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0tleSBGbGFncycsICdEYXRhIERyaXZlbicpO1xuICAgIGNvbnN0IGVuYWJsZUFpU21hcnRuZXNzID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0FJIENvbmZpZ3VyYXRpb24nLCAnRW5hYmxlIEFJIFNtYXJ0bmVzcycpO1xuICAgIGNvbnN0IGRlZmF1bHRBaUFjdGlvbiA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdBSSBDb25maWd1cmF0aW9uJywgJ0RlZmF1bHQgQUkgQWN0aW9uJyk7XG4gICAgY29uc3Qga25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZVJhdyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdBSSBDb25maWd1cmF0aW9uJywgJ0tub3dsZWRnZSBCYXNlIERlZmF1bHQgVGVzdCBDYXNlJyk7XG4gICAgY29uc3Qga25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZSA9IHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUoa25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZVJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/Llsna25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZSddPy5vcHRpb25zKSA/PyBrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlUmF3O1xuICAgIGNvbnN0IHVzZUFpTWV0YWRhdGFSYXcgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnQUkgQ29uZmlndXJhdGlvbicsICdFbmFibGUgQUkgbWV0YWRhdGEgY29sbGVjdGlvbicpO1xuICAgIGNvbnN0IHVzZUFpTWV0YWRhdGEgPSB0aGlzLm5vcm1hbGl6ZUJvb2xlYW5TZWxlY3RWYWx1ZSh1c2VBaU1ldGFkYXRhUmF3KTtcbiAgICBjb25zdCBwcmVyZXF1aXNpdGVDYXNlcyA9IHRoaXMuZ2V0UHJlcmVxdWlzaXRlQ2FzZXNGcm9tQ29uZmlnKCk7XG4gICAgY29uc3QgZGVmYXVsdEJyb3dzZXIgPVxuICAgICAgdGhpcy5wbGF0Zm9ybSA9PT0gJ3dlYidcbiAgICAgICAgPyB0aGlzLmdldERldmljZUNvbmZpZ1ZhbHVlKCdEZWZhdWx0IEJyb3dzZXInKSB8fCB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ0RlZmF1bHQgQnJvd3NlcicpXG4gICAgICAgIDogdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0V4ZWN1dGlvbicsICdEZWZhdWx0IEJyb3dzZXInKTtcbiAgICBjb25zdCB2aWRlb1JlY29yZGluZ1JhdyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnVmlkZW8gUmVjb3JkaW5nJyk7XG4gICAgY29uc3QgdmlkZW9SZWNvcmRpbmcgPSB0aGlzLm5vcm1hbGl6ZUJvb2xlYW5TZWxlY3RWYWx1ZSh2aWRlb1JlY29yZGluZ1JhdyBhcyBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKTtcbiAgICBjb25zdCBkZWZhdWx0Vmlld3BvcnQgPSB0aGlzLmdldERldmljZUNvbmZpZ1ZhbHVlKCdEZWZhdWx0IFZpZXdwb3J0JykgfHwgdGhpcy5nZXREZXZpY2VDb25maWdWYWx1ZSgnVmlld3BvcnQnKSB8fCAnJztcbiAgICBjb25zdCBkZXZpY2VUeXBlID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0RldmljZScsICdUeXBlJyk7XG4gICAgY29uc3QgZGV2aWNlT1MgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRGV2aWNlJywgJ09TJyk7XG4gICAgdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZWRpdEFwaU1vY2tpbmdSZXN0b3JlTW9jayA9ICEhdGhpcy5hcGlNb2NraW5nUmVzdG9yZU1vY2s7XG4gICAgdGhpcy5lZGl0QXBpTW9ja2luZ1N0b3JlTW9jayA9ICEhdGhpcy5hcGlNb2NraW5nU3RvcmVNb2NrO1xuICAgIHRoaXMuZWRpdEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICBzdGF0dXM6IHRoaXMuZWRpdFN0YXR1cyxcbiAgICAgIHByaW9yaXR5OiB0aGlzLmVkaXRQcmlvcml0eSxcbiAgICAgIHR5cGU6IHR5cGVWYWwgfHwgJycsXG4gICAgICBsYWJlbHM6IHRoaXMuZWRpdExhYmVscyxcbiAgICAgIHRlc3REYXRhUHJvZmlsZTogdGVzdERhdGFQcm9maWxlVmFsIHx8ICcnLFxuICAgICAgdGVzdERhdGFTZXQ6IHRlc3REYXRhU2V0VmFsID8/ICcnLFxuICAgICAgcHJlcmVxdWlzaXRlQ2FzZXMsXG4gICAgICBkZWZhdWx0QnJvd3NlcjogZGVmYXVsdEJyb3dzZXIgfHwgJ0Nocm9tZScsXG4gICAgICB2aWRlb1JlY29yZGluZzogdmlkZW9SZWNvcmRpbmcgfHwgJycsXG4gICAgICBkZWZhdWx0Vmlld3BvcnQ6IGRlZmF1bHRWaWV3cG9ydCB8fCAnJyxcbiAgICAgIGRldmljZVR5cGU6IGRldmljZVR5cGUgfHwgJycsXG4gICAgICBkZXZpY2VPUzogZGV2aWNlT1MgfHwgJycsXG4gICAgICBlbmFibGVBaVNtYXJ0bmVzczogZW5hYmxlQWlTbWFydG5lc3MgfHwgJ0FkdmFuY2VkJyxcbiAgICAgIGRlZmF1bHRBaUFjdGlvbjogZGVmYXVsdEFpQWN0aW9uIHx8ICdTbWFydCB3YWl0JyxcbiAgICAgIGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2U6IGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2UgfHwgJ25vbmUnLFxuICAgICAgdXNlQWlNZXRhZGF0YTogdXNlQWlNZXRhZGF0YSB8fCAnJyxcbiAgICB9KTtcbiAgICB0aGlzLl9pbml0aWFsRm9ybVNuYXBzaG90ID0gSlNPTi5zdHJpbmdpZnkodGhpcy5idWlsZFNhdmVQYXlsb2FkKCkpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IGhhc1Vuc2F2ZWRDaGFuZ2VzKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLl9pbml0aWFsRm9ybVNuYXBzaG90ID09IG51bGwpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuYnVpbGRTYXZlUGF5bG9hZCgpKSAhPT0gdGhpcy5faW5pdGlhbEZvcm1TbmFwc2hvdDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTYXZlUGF5bG9hZCgpOiBUZXN0Q2FzZURldGFpbHNFZGl0Rm9ybURhdGEge1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdzdGF0dXMnKT8udmFsdWUgPz8gdGhpcy5lZGl0U3RhdHVzO1xuICAgIGNvbnN0IHByaW9yaXR5ID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3ByaW9yaXR5Jyk/LnZhbHVlID8/IHRoaXMuZWRpdFByaW9yaXR5O1xuICAgIGNvbnN0IHR5cGVWYWwgPSB0aGlzLmVkaXRGb3JtLmdldCgndHlwZScpPy52YWx1ZSA/PyAnJztcbiAgICBjb25zdCB0ZXN0RGF0YVByb2ZpbGVWYWwgPSB0aGlzLmVkaXRGb3JtLmdldCgndGVzdERhdGFQcm9maWxlJyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IHRlc3REYXRhU2V0VmFsID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3Rlc3REYXRhU2V0Jyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IGNvbmZpZ1NlY3Rpb25zTWVyZ2VkID0gdGhpcy5tZXJnZUNvbmZpZ1NlY3Rpb25zKCk7XG4gICAgY29uc3QgY29uZmlnU2VjdGlvbnNSb3cyTWVyZ2VkID0gdGhpcy5tZXJnZUNvbmZpZ1NlY3Rpb25zUm93MigpO1xuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmlwdGlvbkNvbnRlbnQ6IHRoaXMuZWRpdERlc2NyaXB0aW9uLFxuICAgICAgc3RhdHVzLFxuICAgICAgcHJpb3JpdHksXG4gICAgICB0eXBlOiB0eXBlVmFsLFxuICAgICAgbGFiZWxzOiB0aGlzLmVkaXRMYWJlbHMsXG4gICAgICB0ZXN0RGF0YVByb2ZpbGVJZDogdGVzdERhdGFQcm9maWxlVmFsIHx8IG51bGwsXG4gICAgICB0ZXN0RGF0YVNldEluZGV4OiB0ZXN0RGF0YVNldFZhbCA/PyBudWxsLFxuICAgICAgY29uZmlnU2VjdGlvbnM6IGNvbmZpZ1NlY3Rpb25zTWVyZ2VkLFxuICAgICAgY29uZmlnU2VjdGlvbnNSb3cyOiBjb25maWdTZWN0aW9uc1JvdzJNZXJnZWQsXG4gICAgICBhcGlNb2NraW5nUmVzdG9yZU1vY2s6IHRoaXMuZWRpdEFwaU1vY2tpbmdSZXN0b3JlTW9jayxcbiAgICAgIGFwaU1vY2tpbmdTdG9yZU1vY2s6IHRoaXMuZWRpdEFwaU1vY2tpbmdTdG9yZU1vY2ssXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVyIGJvdW5kIHRvIHRoZSBlbWJlZGRlZCBgPGNxYS1hcGktbW9ja2luZy1jYXJkPmAgYHJlc3RvcmVNb2NrQ2hhbmdlYCBvdXRwdXQuXG4gICAqIEtlZXBzIHRoZSBsb2NhbCBlZGl0LW1vZGUgbWlycm9yIGluIHN5bmMgKGluY2x1ZGluZyB0aGUgbXV0dWFsLWV4Y2x1c2l2aXR5IHJ1bGUg4oCUXG4gICAqIHR1cm5pbmcgVXNlLW1vY2sgb24gZm9yY2VzIHN0b3JlLW1vY2sgb2ZmKSBhbmQgcmUtZW1pdHMgdG8gdGhlIHBhcmVudCBzbyB0aGUgc2F2ZVxuICAgKiBwYXlsb2FkIHJlZmxlY3RzIHRoZSBuZXcgc3RhdGUuXG4gICAqL1xuICBvbkFwaU1vY2tpbmdSZXN0b3JlTW9ja0NoYW5nZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZWRpdEFwaU1vY2tpbmdSZXN0b3JlTW9jayA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSAmJiB0aGlzLmVkaXRBcGlNb2NraW5nU3RvcmVNb2NrKSB7XG4gICAgICB0aGlzLmVkaXRBcGlNb2NraW5nU3RvcmVNb2NrID0gZmFsc2U7XG4gICAgICB0aGlzLmFwaU1vY2tpbmdTdG9yZU1vY2tDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuYXBpTW9ja2luZ1Jlc3RvcmVNb2NrQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIE1pcnJvciBoYW5kbGVyIGZvciB0aGUgXCJSZW5ldyBhbmQgc3RvcmUgQVBJIHJlc3BvbnNlc1wiIHRvZ2dsZS4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggVXNlLW1vY2suICovXG4gIG9uQXBpTW9ja2luZ1N0b3JlTW9ja0NoYW5nZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZWRpdEFwaU1vY2tpbmdTdG9yZU1vY2sgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUgJiYgdGhpcy5lZGl0QXBpTW9ja2luZ1Jlc3RvcmVNb2NrKSB7XG4gICAgICB0aGlzLmVkaXRBcGlNb2NraW5nUmVzdG9yZU1vY2sgPSBmYWxzZTtcbiAgICAgIHRoaXMuYXBpTW9ja2luZ1Jlc3RvcmVNb2NrQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmFwaU1vY2tpbmdTdG9yZU1vY2tDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVUb09wdGlvblZhbHVlKFxuICAgIGNvbmZpZ1ZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogU2VsZWN0T3B0aW9uW10gfCB1bmRlZmluZWRcbiAgKTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoY29uZmlnVmFsdWUgPT0gbnVsbCB8fCBjb25maWdWYWx1ZSA9PT0gJycpIHJldHVybiBjb25maWdWYWx1ZTtcbiAgICBjb25zdCBvcHRzID0gb3B0aW9ucyA/PyBbXTtcbiAgICBpZiAoIW9wdHMubGVuZ3RoKSByZXR1cm4gY29uZmlnVmFsdWU7XG4gICAgY29uc3QgbnVtID0gdHlwZW9mIGNvbmZpZ1ZhbHVlID09PSAnbnVtYmVyJyA/IGNvbmZpZ1ZhbHVlIDogTnVtYmVyKGNvbmZpZ1ZhbHVlKTtcbiAgICBjb25zdCBpc051bWVyaWMgPSAhTnVtYmVyLmlzTmFOKG51bSkgJiYgU3RyaW5nKGNvbmZpZ1ZhbHVlKS50cmltKCkgPT09IFN0cmluZyhudW0pO1xuICAgIGlmIChpc051bWVyaWMpIHtcbiAgICAgIC8vIElmIG9wdGlvbnMgdXNlIG51bWVyaWMgdmFsdWVzIChlLmcuIGluZGljZXMgZm9yIFRlc3QgRGF0YSBTZXQpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBudW1lcmljIGZvcm0gc28gdGhlIHNlbGVjdCBjYW4gbWF0Y2ggYnkgc3RyaWN0IGVxdWFsaXR5LlxuICAgICAgY29uc3QgaGFzTnVtZXJpY09wdGlvbiA9IG9wdHMuc29tZShcbiAgICAgICAgKG8pID0+IHR5cGVvZiBvLnZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgKG8gYXMgYW55KS5pZCA9PT0gJ251bWJlcidcbiAgICAgICk7XG4gICAgICByZXR1cm4gaGFzTnVtZXJpY09wdGlvbiA/IG51bSA6IGNvbmZpZ1ZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBzdHIgPSBTdHJpbmcoY29uZmlnVmFsdWUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG1hdGNoID0gb3B0cy5maW5kKChvKSA9PiB7XG4gICAgICBjb25zdCBuID0gU3RyaW5nKG8ubmFtZSA/PyBvLmxhYmVsID8/IG8udmFsdWUgPz8gJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIG4gPT09IHN0cjtcbiAgICB9KTtcbiAgICByZXR1cm4gbWF0Y2ggIT0gbnVsbCA/IChtYXRjaC52YWx1ZSA/PyAobWF0Y2ggYXMgYW55KS5pZCA/PyBtYXRjaCkgOiBjb25maWdWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplQm9vbGVhblNlbGVjdFZhbHVlKHZhbDogc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKHZhbCA9PT0gdHJ1ZSB8fCB2YWwgPT09ICd0cnVlJykgcmV0dXJuICd0cnVlJztcbiAgICBpZiAodmFsID09PSBmYWxzZSB8fCB2YWwgPT09ICdmYWxzZScpIHJldHVybiAnZmFsc2UnO1xuICAgIGlmIChcbiAgICAgIHZhbCA9PT0gJ09yZyBsZXZlbCcgfHxcbiAgICAgIHZhbCA9PT0gJ09yZyBMZXZlbCcgfHxcbiAgICAgICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwudHJpbSgpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnb3JnIGxldmVsICgnKSlcbiAgICApIHtcbiAgICAgIHJldHVybiAnT3JnIGxldmVsJztcbiAgICB9XG4gICAgaWYgKHZhbCA9PT0gJ09uIFdhaXQnIHx8IHZhbCA9PT0gJ29uIHdhaXQnKSByZXR1cm4gJ3RydWUnO1xuICAgIHJldHVybiB2YWwgJiYgU3RyaW5nKHZhbCkudHJpbSgpID8gU3RyaW5nKHZhbCkgOiAnJztcbiAgfVxuXG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydsYWJlbHMnXSB8fCBjaGFuZ2VzWydzZWxlY3RDb25maWdPdmVycmlkZXMnXSkge1xuICAgICAgdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnRGlydHkgPSB0cnVlO1xuICAgICAgaWYgKGNoYW5nZXNbJ3NlbGVjdENvbmZpZ092ZXJyaWRlcyddICYmIHRoaXMuZWRpdEZvcm0/LmdldCgndHlwZScpKSB7XG4gICAgICAgIGNvbnN0IHR5cGVDdHJsID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3R5cGUnKTtcbiAgICAgICAgY29uc3QgdGRwQ3RybCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd0ZXN0RGF0YVByb2ZpbGUnKTtcbiAgICAgICAgY29uc3QgdGRzQ3RybCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd0ZXN0RGF0YVNldCcpO1xuICAgICAgICBjb25zdCBlbmFibGVBaUN0cmwgPSB0aGlzLmVkaXRGb3JtLmdldCgnZW5hYmxlQWlTbWFydG5lc3MnKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdEFpQ3RybCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdkZWZhdWx0QWlBY3Rpb24nKTtcbiAgICAgICAgY29uc3QgcGF0Y2g6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4gPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+O1xuICAgICAgICBpZiAodHlwZUN0cmwgJiYgIXR5cGVDdHJsLmRpcnR5KSB7XG4gICAgICAgICAgY29uc3QgdHlwZVJhdyA9ICh0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ1R5cGUnKSB8fCAodGhpcy50eXBlSXRlbT8udmFsdWUgYXMgc3RyaW5nKSkgPz8gJyc7XG4gICAgICAgICAgcGF0Y2hbJ3R5cGUnXSA9ICh0aGlzLnJlc29sdmVUb09wdGlvblZhbHVlKHR5cGVSYXcsIHRoaXMuc2VsZWN0Q29uZmlnT3ZlcnJpZGVzPy5bJ3R5cGUnXT8ub3B0aW9ucykgPz8gdHlwZVJhdykgfHwgJyc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yIFRlc3QgRGF0YSBQcm9maWxlIC8gU2V0LCBhbGxvdyBvbmUtdGltZSByZS1yZXNvbHZlIGZyb20gY29uZmlnIHdoZW4gb3B0aW9ucyBhcnJpdmUsXG4gICAgICAgIC8vIGJ1dCBuZXZlciBvdmVyd3JpdGUgYSB1c2VyLWVkaXRlZCAoZGlydHkpIHZhbHVlLlxuICAgICAgICBpZiAodGRwQ3RybCAmJiAhdGRwQ3RybC5kaXJ0eSkge1xuICAgICAgICAgIGNvbnN0IHRlc3REYXRhUHJvZmlsZVJhdyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnVGVzdCBEYXRhIFByb2ZpbGUnKSA/PyAnJztcbiAgICAgICAgICBwYXRjaFsndGVzdERhdGFQcm9maWxlJ10gPVxuICAgICAgICAgICAgKHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUodGVzdERhdGFQcm9maWxlUmF3LCB0aGlzLnNlbGVjdENvbmZpZ092ZXJyaWRlcz8uWyd0ZXN0RGF0YVByb2ZpbGUnXT8ub3B0aW9ucykgPz9cbiAgICAgICAgICAgICAgdGVzdERhdGFQcm9maWxlUmF3KSB8fCAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGRzQ3RybCAmJiAhdGRzQ3RybC5kaXJ0eSkge1xuICAgICAgICAgIGNvbnN0IHRlc3REYXRhU2V0UmF3ID0gdGhpcy5ub3JtYWxpemVUZXN0RGF0YVNldFJhd1ZhbHVlKFxuICAgICAgICAgICAgdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0V4ZWN1dGlvbicsICdUZXN0IERhdGEgU2V0JykgPz8gJydcbiAgICAgICAgICApO1xuICAgICAgICAgIHBhdGNoWyd0ZXN0RGF0YVNldCddID1cbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUodGVzdERhdGFTZXRSYXcsIHRoaXMuc2VsZWN0Q29uZmlnT3ZlcnJpZGVzPy5bJ3Rlc3REYXRhU2V0J10/Lm9wdGlvbnMpID8/XG4gICAgICAgICAgICB0ZXN0RGF0YVNldFJhdyA/PyAnJztcbiAgICAgICAgfVxuICAgICAgICAvLyBSZS1yZXNvbHZlIEFJIGZpZWxkcyB3aGVuIHRoZWlyIG9wdGlvbnMgYXJyaXZlICh0aGV5IHVzZSBkaXNwbGF5IG5hbWVzIGFzIHZhbHVlcykuXG4gICAgICAgIGlmIChlbmFibGVBaUN0cmwgJiYgIWVuYWJsZUFpQ3RybC5kaXJ0eSkge1xuICAgICAgICAgIGNvbnN0IGFpU21hcnRuZXNzUmF3ID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0FJIENvbmZpZ3VyYXRpb24nLCAnRW5hYmxlIEFJIFNtYXJ0bmVzcycpO1xuICAgICAgICAgIGlmIChhaVNtYXJ0bmVzc1JhdykgcGF0Y2hbJ2VuYWJsZUFpU21hcnRuZXNzJ10gPSBhaVNtYXJ0bmVzc1JhdztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmYXVsdEFpQ3RybCAmJiAhZGVmYXVsdEFpQ3RybC5kaXJ0eSkge1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRBaVJhdyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdBSSBDb25maWd1cmF0aW9uJywgJ0RlZmF1bHQgQUkgQWN0aW9uJyk7XG4gICAgICAgICAgaWYgKGRlZmF1bHRBaVJhdykgcGF0Y2hbJ2RlZmF1bHRBaUFjdGlvbiddID0gZGVmYXVsdEFpUmF3O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtiQ3RybCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlJyk7XG4gICAgICAgIGlmIChrYkN0cmwgJiYgIWtiQ3RybC5kaXJ0eSkge1xuICAgICAgICAgIGNvbnN0IGtiUmF3ID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0FJIENvbmZpZ3VyYXRpb24nLCAnS25vd2xlZGdlIEJhc2UgRGVmYXVsdCBUZXN0IENhc2UnKTtcbiAgICAgICAgICBjb25zdCBrYlJlc29sdmVkID0gdGhpcy5yZXNvbHZlVG9PcHRpb25WYWx1ZShrYlJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/Llsna25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZSddPy5vcHRpb25zKSA/PyBrYlJhdztcbiAgICAgICAgICBpZiAoa2JSZXNvbHZlZCkgcGF0Y2hbJ2tub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2UnXSA9IGtiUmVzb2x2ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHBhdGNoKS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmVkaXRGb3JtLnBhdGNoVmFsdWUocGF0Y2gsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snZGVzY3JpcHRpb25Db250ZW50J10gfHwgY2hhbmdlc1snbGFiZWxzJ10gfHwgY2hhbmdlc1snbWV0YWRhdGFJdGVtcyddKSB7XG4gICAgICB0aGlzLmVkaXREZXNjcmlwdGlvbiA9IHRoaXMuZGVzY3JpcHRpb25Db250ZW50O1xuICAgICAgdGhpcy5lZGl0TGFiZWxzID0gWy4uLnRoaXMubGFiZWxzXTtcbiAgICAgIHRoaXMuZWRpdFN0YXR1cyA9IHRoaXMuc3RhdHVzSXRlbT8udmFsdWUgPz8gJyc7XG4gICAgICB0aGlzLmVkaXRQcmlvcml0eSA9IHRoaXMucHJpb3JpdHlJdGVtPy52YWx1ZSA/PyAnJztcbiAgICAgIGNvbnN0IHR5cGVWYWwgPSAodGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0V4ZWN1dGlvbicsICdUeXBlJykgfHwgKHRoaXMudHlwZUl0ZW0/LnZhbHVlIGFzIHN0cmluZykpID8/ICcnO1xuICAgICAgY29uc3Qgc3RhdHVzQ29udHJvbCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdzdGF0dXMnKTtcbiAgICAgIGNvbnN0IHByaW9yaXR5Q29udHJvbCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdwcmlvcml0eScpO1xuICAgICAgY29uc3QgdHlwZUNvbnRyb2wgPSB0aGlzLmVkaXRGb3JtLmdldCgndHlwZScpO1xuICAgICAgY29uc3QgbGFiZWxzQ29udHJvbCA9IHRoaXMuZWRpdEZvcm0uZ2V0KFRFU1RfQ0FTRV9ERVRBSUxTX1NFTEVDVF9LRVlTLmxhYmVscyk7XG4gICAgICBjb25zdCBwcmVzZXJ2ZVN0YXR1cyA9IHN0YXR1c0NvbnRyb2w/LnRvdWNoZWQgfHwgc3RhdHVzQ29udHJvbD8uZGlydHk7XG4gICAgICBjb25zdCBwcmVzZXJ2ZVByaW9yaXR5ID0gcHJpb3JpdHlDb250cm9sPy50b3VjaGVkIHx8IHByaW9yaXR5Q29udHJvbD8uZGlydHk7XG4gICAgICBjb25zdCBwcmVzZXJ2ZVR5cGUgPSB0eXBlQ29udHJvbD8udG91Y2hlZCB8fCB0eXBlQ29udHJvbD8uZGlydHk7XG4gICAgICBjb25zdCBwcmVzZXJ2ZUxhYmVscyA9IGxhYmVsc0NvbnRyb2w/LnRvdWNoZWQgfHwgbGFiZWxzQ29udHJvbD8uZGlydHk7XG4gICAgICB0aGlzLmVkaXRGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAuLi4ocHJlc2VydmVTdGF0dXMgPyB7fSA6IHsgc3RhdHVzOiB0aGlzLmVkaXRTdGF0dXMgfSksXG4gICAgICAgIC4uLihwcmVzZXJ2ZVByaW9yaXR5ID8ge30gOiB7IHByaW9yaXR5OiB0aGlzLmVkaXRQcmlvcml0eSB9KSxcbiAgICAgICAgLi4uKHByZXNlcnZlVHlwZSA/IHt9IDogeyB0eXBlOiB0eXBlVmFsIH0pLFxuICAgICAgICAuLi4ocHJlc2VydmVMYWJlbHMgPyB7fSA6IHsgbGFiZWxzOiB0aGlzLmVkaXRMYWJlbHMgfSksXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3ByZXJlcXVpc2l0ZUNhc2VPcHRpb25zJ10gJiYgdGhpcy5wcmVyZXF1aXNpdGVDYXNlT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucHJlcmVxdWlzaXRlQ2FzZVNlbGVjdENvbmZpZyA9IHtcbiAgICAgICAgLi4udGhpcy5wcmVyZXF1aXNpdGVDYXNlU2VsZWN0Q29uZmlnLFxuICAgICAgICBvcHRpb25zOiB0aGlzLnByZXJlcXVpc2l0ZUNhc2VPcHRpb25zLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2NvbmZpZ1NlY3Rpb25zJ10gfHwgY2hhbmdlc1snY29uZmlnU2VjdGlvbnNSb3cyJ10pIHtcbiAgICAgIGNvbnN0IGVuYWJsZUFpU21hcnRuZXNzID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0FJIENvbmZpZ3VyYXRpb24nLCAnRW5hYmxlIEFJIFNtYXJ0bmVzcycpO1xuICAgICAgY29uc3QgZGVmYXVsdEFpQWN0aW9uID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0FJIENvbmZpZ3VyYXRpb24nLCAnRGVmYXVsdCBBSSBBY3Rpb24nKTtcbiAgICAgIGNvbnN0IGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2VSYXcgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnQUkgQ29uZmlndXJhdGlvbicsICdLbm93bGVkZ2UgQmFzZSBEZWZhdWx0IFRlc3QgQ2FzZScpO1xuICAgICAgY29uc3Qga25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZSA9IHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUoa25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZVJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/Llsna25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZSddPy5vcHRpb25zKSA/PyBrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlUmF3O1xuICAgICAgY29uc3QgcHJlcmVxdWlzaXRlQ2FzZXMgPSB0aGlzLmdldFByZXJlcXVpc2l0ZUNhc2VzRnJvbUNvbmZpZygpO1xuICAgICAgY29uc3QgdHlwZVJhdyA9ICh0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ1R5cGUnKSB8fCAodGhpcy50eXBlSXRlbT8udmFsdWUgYXMgc3RyaW5nKSkgPz8gJyc7XG4gICAgICBjb25zdCB0ZXN0RGF0YVByb2ZpbGVSYXcgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ1Rlc3QgRGF0YSBQcm9maWxlJykgPz8gJyc7XG4gICAgICBjb25zdCB0ZXN0RGF0YVNldFJhdyA9IHRoaXMubm9ybWFsaXplVGVzdERhdGFTZXRSYXdWYWx1ZShcbiAgICAgICAgdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0V4ZWN1dGlvbicsICdUZXN0IERhdGEgU2V0JykgPz8gJydcbiAgICAgICk7XG4gICAgICBjb25zdCB0eXBlVmFsID0gdGhpcy5yZXNvbHZlVG9PcHRpb25WYWx1ZSh0eXBlUmF3LCB0aGlzLnNlbGVjdENvbmZpZ092ZXJyaWRlcz8uWyd0eXBlJ10/Lm9wdGlvbnMpID8/IHR5cGVSYXc7XG4gICAgICBjb25zdCB0ZXN0RGF0YVByb2ZpbGVWYWwgPSB0aGlzLnJlc29sdmVUb09wdGlvblZhbHVlKHRlc3REYXRhUHJvZmlsZVJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LlsndGVzdERhdGFQcm9maWxlJ10/Lm9wdGlvbnMpID8/IHRlc3REYXRhUHJvZmlsZVJhdztcbiAgICAgIGNvbnN0IHRlc3REYXRhU2V0VmFsID0gdGhpcy5yZXNvbHZlVG9PcHRpb25WYWx1ZSh0ZXN0RGF0YVNldFJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LlsndGVzdERhdGFTZXQnXT8ub3B0aW9ucykgPz8gdGVzdERhdGFTZXRSYXc7XG4gICAgICBjb25zdCBkZWZhdWx0QnJvd3NlciA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnRGVmYXVsdCBCcm93c2VyJyk7XG4gICAgICBjb25zdCB2aWRlb1JlY29yZGluZ1JhdyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnVmlkZW8gUmVjb3JkaW5nJyk7XG4gICAgICBjb25zdCB2aWRlb1JlY29yZGluZyA9IHRoaXMubm9ybWFsaXplQm9vbGVhblNlbGVjdFZhbHVlKHZpZGVvUmVjb3JkaW5nUmF3IGFzIHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpO1xuICAgICAgY29uc3QgdXNlQWlNZXRhZGF0YVJhdyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdBSSBDb25maWd1cmF0aW9uJywgJ0VuYWJsZSBBSSBtZXRhZGF0YSBjb2xsZWN0aW9uJyk7XG4gICAgICBjb25zdCB1c2VBaU1ldGFkYXRhID0gdGhpcy5ub3JtYWxpemVCb29sZWFuU2VsZWN0VmFsdWUodXNlQWlNZXRhZGF0YVJhdyBhcyBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRWaWV3cG9ydCA9IHRoaXMuZ2V0RGV2aWNlQ29uZmlnVmFsdWUoJ0RlZmF1bHQgVmlld3BvcnQnKSB8fCB0aGlzLmdldERldmljZUNvbmZpZ1ZhbHVlKCdWaWV3cG9ydCcpIHx8ICcnO1xuICAgICAgY29uc3QgZGV2aWNlVHlwZSA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdEZXZpY2UnLCAnVHlwZScpO1xuICAgICAgY29uc3QgZGV2aWNlT1MgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRGV2aWNlJywgJ09TJyk7XG4gICAgICBjb25zdCBhdXRvV2FpdFZhbCA9IHRoaXMuZ2V0V2FpdHNSZXRyaWVzVmFsdWUoJ0VuYWJsZSBBdm9pZCBBdXRvIHdhaXQgZm9yIHN0ZXBzJykgfHwgdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ1dhaXRzICYgUmV0cmllcycsICdBdXRvIFdhaXQnKTtcbiAgICAgIHRoaXMuYXV0b1dhaXRFbmFibGVkID0gISEoYXV0b1dhaXRWYWwgJiYgYXV0b1dhaXRWYWwudHJpbSgpICE9PSAnJyAmJiBTdHJpbmcoYXV0b1dhaXRWYWwpICE9PSAnZmFsc2UnKTtcbiAgICAgIHRoaXMucmV0cnlGYWlsZWRTdGVwcyA9IHRoaXMuZ2V0V2FpdHNSZXRyaWVzVmFsdWUoJ1JldHJ5IEZhaWxlZCBTdGVwcycpO1xuICAgICAgdGhpcy50ZXN0Q2FzZVRpbWVvdXRNb2RlID0gdGhpcy5pc1Rlc3RDYXNlVGltZW91dEZyb21PcmcoKSA/ICdvcmcnIDogJ2N1c3RvbSc7XG4gICAgICB0aGlzLnRlc3RDYXNlVGltZW91dCA9IHRoaXMuc3RyaXBUcmFpbGluZ1VuaXRTKHRoaXMuZ2V0V2FpdHNSZXRyaWVzVmFsdWUoJ1Rlc3QgQ2FzZSBUaW1lb3V0IChtaW51dGVzKScpKTtcbiAgICAgIHRoaXMud2FpdFRpbWVvdXRMb2NhdG9ycyA9IHRoaXMuc3RyaXBUcmFpbGluZ1VuaXRTKHRoaXMuZ2V0V2FpdHNSZXRyaWVzVmFsdWUoJ1dhaXQgVGltZW91dCBmb3IgTG9jYXRvcnMgKHNlY3MpJykpO1xuICAgICAgdGhpcy5tb2JpbGVUZXN0aW5nRW5hYmxlZCA9ICEhdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0tleSBGbGFncycsICdNb2JpbGUgVGVzdGluZycpO1xuICAgICAgdGhpcy5leHRlbnNpb25Vc2VFbmFibGVkID0gISF0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnS2V5IEZsYWdzJywgJ0V4dGVuc2lvbiBVc2UnKTtcbiAgICAgIHRoaXMuZGF0YURyaXZlbkVuYWJsZWQgPSAhIXRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdLZXkgRmxhZ3MnLCAnRGF0YSBEcml2ZW4nKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgY29uc3QgcGF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICBpZiAoZW5hYmxlQWlTbWFydG5lc3MpIHBhdGNoWydlbmFibGVBaVNtYXJ0bmVzcyddID0gZW5hYmxlQWlTbWFydG5lc3M7XG4gICAgICBpZiAoZGVmYXVsdEFpQWN0aW9uKSBwYXRjaFsnZGVmYXVsdEFpQWN0aW9uJ10gPSBkZWZhdWx0QWlBY3Rpb247XG4gICAgICBpZiAoa25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZSkgcGF0Y2hbJ2tub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2UnXSA9IGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2U7XG4gICAgICBpZiAodXNlQWlNZXRhZGF0YSkgcGF0Y2hbJ3VzZUFpTWV0YWRhdGEnXSA9IHVzZUFpTWV0YWRhdGE7XG4gICAgICBpZiAocHJlcmVxdWlzaXRlQ2FzZXMubGVuZ3RoKSBwYXRjaFsncHJlcmVxdWlzaXRlQ2FzZXMnXSA9IHByZXJlcXVpc2l0ZUNhc2VzO1xuICAgICAgaWYgKHR5cGVWYWwpIHBhdGNoWyd0eXBlJ10gPSB0eXBlVmFsO1xuXG4gICAgICAvLyBSZS1zeW5jIFRlc3QgRGF0YSBQcm9maWxlIC8gU2V0IGZyb20gY29uZmlnIG9ubHkgd2hlbiBjb250cm9scyBhcmUgTk9UIGRpcnR5XG4gICAgICBjb25zdCB0ZHBDdHJsMiA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd0ZXN0RGF0YVByb2ZpbGUnKTtcbiAgICAgIGNvbnN0IHRkc0N0cmwyID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3Rlc3REYXRhU2V0Jyk7XG4gICAgICBjb25zdCBwcmVzZXJ2ZVRkcDIgPSB0ZHBDdHJsMj8uZGlydHk7XG4gICAgICBjb25zdCBwcmVzZXJ2ZVRkczIgPSB0ZHNDdHJsMj8uZGlydHk7XG5cbiAgICAgIGlmICh0ZXN0RGF0YVByb2ZpbGVWYWwgJiYgIXByZXNlcnZlVGRwMikgcGF0Y2hbJ3Rlc3REYXRhUHJvZmlsZSddID0gdGVzdERhdGFQcm9maWxlVmFsO1xuICAgICAgaWYgKHRlc3REYXRhU2V0VmFsICE9IG51bGwgJiYgdGVzdERhdGFTZXRWYWwgIT09ICcnICYmICFwcmVzZXJ2ZVRkczIpIHBhdGNoWyd0ZXN0RGF0YVNldCddID0gdGVzdERhdGFTZXRWYWw7XG4gICAgICBpZiAoZGVmYXVsdEJyb3dzZXIpIHBhdGNoWydkZWZhdWx0QnJvd3NlciddID0gZGVmYXVsdEJyb3dzZXI7XG4gICAgICBpZiAodmlkZW9SZWNvcmRpbmcpIHBhdGNoWyd2aWRlb1JlY29yZGluZyddID0gdmlkZW9SZWNvcmRpbmc7XG4gICAgICBpZiAoZGVmYXVsdFZpZXdwb3J0KSBwYXRjaFsnZGVmYXVsdFZpZXdwb3J0J10gPSBkZWZhdWx0Vmlld3BvcnQ7XG4gICAgICBpZiAoZGV2aWNlVHlwZSkgcGF0Y2hbJ2RldmljZVR5cGUnXSA9IGRldmljZVR5cGU7XG4gICAgICBpZiAoZGV2aWNlT1MpIHBhdGNoWydkZXZpY2VPUyddID0gZGV2aWNlT1M7XG4gICAgICBpZiAoT2JqZWN0LmtleXMocGF0Y2gpLmxlbmd0aCkgdGhpcy5lZGl0Rm9ybS5wYXRjaFZhbHVlKHBhdGNoKTtcbiAgICB9XG4gIH1cblxuICBvblJlbW92ZUxhYmVsKGxhYmVsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRMYWJlbHMgPSB0aGlzLmVkaXRMYWJlbHMuZmlsdGVyKChsKSA9PiBsICE9PSBsYWJlbCk7XG4gICAgdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZWRpdEZvcm0uZ2V0KFRFU1RfQ0FTRV9ERVRBSUxTX1NFTEVDVF9LRVlTLmxhYmVscyk/LnNldFZhbHVlKHRoaXMuZWRpdExhYmVscywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25DbGVhckFsbExhYmVscygpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRMYWJlbHMgPSBbXTtcbiAgICB0aGlzLl9sYWJlbHNTZWxlY3RDb25maWdEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5lZGl0Rm9ybS5nZXQoVEVTVF9DQVNFX0RFVEFJTFNfU0VMRUNUX0tFWVMubGFiZWxzKT8uc2V0VmFsdWUoW10sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uQWRkRnJlcXVlbnRMYWJlbChsYWJlbDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRMYWJlbHMuaW5jbHVkZXMobGFiZWwpKSB7XG4gICAgICB0aGlzLmVkaXRMYWJlbHMgPSBbLi4udGhpcy5lZGl0TGFiZWxzLCBsYWJlbF07XG4gICAgICB0aGlzLl9sYWJlbHNTZWxlY3RDb25maWdEaXJ0eSA9IHRydWU7XG4gICAgICB0aGlzLmVkaXRGb3JtLmdldChURVNUX0NBU0VfREVUQUlMU19TRUxFQ1RfS0VZUy5sYWJlbHMpPy5zZXRWYWx1ZSh0aGlzLmVkaXRMYWJlbHMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIG9uU2F2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNhdmUuZW1pdCh0aGlzLmJ1aWxkU2F2ZVBheWxvYWQoKSk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlQ29uZmlnU2VjdGlvbnMoKTogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbltdIHtcbiAgICBjb25zdCBwbGF0Zm9ybSA9IHRoaXMucGxhdGZvcm07XG4gICAgY29uc3QgdmlkZW9SZWNvcmRpbmdWYWx1ZSA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd2aWRlb1JlY29yZGluZycpPy52YWx1ZSA/PyAnJztcbiAgICBjb25zdCB2aWRlb1JlY29yZGluZyA9IHZpZGVvUmVjb3JkaW5nVmFsdWUgPT09ICd0cnVlJyA/IHRydWUgOiB2aWRlb1JlY29yZGluZ1ZhbHVlID09PSAnZmFsc2UnID8gZmFsc2UgOiB2aWRlb1JlY29yZGluZ1ZhbHVlO1xuICAgIGNvbnN0IHVzZUFpTWV0YWRhdGFWYWx1ZSA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd1c2VBaU1ldGFkYXRhJyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IHVzZUFpTWV0YWRhdGEgPSB1c2VBaU1ldGFkYXRhVmFsdWUgPT09ICd0cnVlJyA/IHRydWUgOiB1c2VBaU1ldGFkYXRhVmFsdWUgPT09ICdmYWxzZScgPyBmYWxzZSA6IHVzZUFpTWV0YWRhdGFWYWx1ZTtcbiAgICBjb25zdCBwcmVyZXF1aXNpdGVDYXNlc1JhdyA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdwcmVyZXF1aXNpdGVDYXNlcycpPy52YWx1ZTtcbiAgICBjb25zdCBwcmVyZXF1aXNpdGVDYXNlcyA9IEFycmF5LmlzQXJyYXkocHJlcmVxdWlzaXRlQ2FzZXNSYXcpXG4gICAgICA/IHByZXJlcXVpc2l0ZUNhc2VzUmF3Lm1hcCgodikgPT4gU3RyaW5nKHYpKS5maWx0ZXIoQm9vbGVhbilcbiAgICAgIDogcHJlcmVxdWlzaXRlQ2FzZXNSYXcgIT0gbnVsbCAmJiBwcmVyZXF1aXNpdGVDYXNlc1JhdyAhPT0gJydcbiAgICAgICAgPyBbU3RyaW5nKHByZXJlcXVpc2l0ZUNhc2VzUmF3KV1cbiAgICAgICAgOiBbXTtcbiAgICBjb25zdCBwcmVyZXF1aXNpdGVDYXNlVmFsdWUgPSBwcmVyZXF1aXNpdGVDYXNlcy5sZW5ndGggPyBwcmVyZXF1aXNpdGVDYXNlcy5qb2luKCcsJykgOiBudWxsO1xuICAgIGNvbnN0IHR5cGVWYWx1ZSA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd0eXBlJyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IHRlc3REYXRhUHJvZmlsZVZhbHVlID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3Rlc3REYXRhUHJvZmlsZScpPy52YWx1ZSA/PyAnJztcbiAgICBjb25zdCB0ZXN0RGF0YVNldFZhbHVlID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3Rlc3REYXRhU2V0Jyk/LnZhbHVlID8/ICcnO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ1NlY3Rpb25zLm1hcCgoc2VjdGlvbikgPT4ge1xuICAgICAgaWYgKHNlY3Rpb24udGl0bGUgPT09ICdFeGVjdXRpb24nKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gc2VjdGlvbi5pdGVtc1xuICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+ICEocGxhdGZvcm0gPT09ICd3ZWInICYmIGl0ZW0ubGFiZWwgPT09ICdEZWZhdWx0IEJyb3dzZXInKSlcbiAgICAgICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5sYWJlbCA9PT0gJ1ZpZGVvIFJlY29yZGluZycpIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlOiB2aWRlb1JlY29yZGluZyB9O1xuICAgICAgICAgICAgaWYgKGl0ZW0ubGFiZWwgPT09ICdQcmVyZXF1aXNpdGUgQ2FzZScpIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlOiBwcmVyZXF1aXNpdGVDYXNlVmFsdWUgfTtcbiAgICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnVHlwZScpIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlOiB0eXBlVmFsdWUgfTtcbiAgICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnVGVzdCBEYXRhIFByb2ZpbGUnKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogdGVzdERhdGFQcm9maWxlVmFsdWUgfTtcbiAgICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnVGVzdCBEYXRhIFNldCcpIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlOiB0ZXN0RGF0YVNldFZhbHVlIH07XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgLi4uc2VjdGlvbiwgaXRlbXMgfTtcbiAgICAgIH1cbiAgICAgIGlmIChzZWN0aW9uLnRpdGxlID09PSAnQUkgQ29uZmlndXJhdGlvbicpIHtcbiAgICAgICAgY29uc3QgZW5hYmxlQWlTbWFydG5lc3NWYWx1ZSA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdlbmFibGVBaVNtYXJ0bmVzcycpPy52YWx1ZTtcbiAgICAgICAgY29uc3QgZGVmYXVsdEFpQWN0aW9uVmFsdWUgPSB0aGlzLmVkaXRGb3JtLmdldCgnZGVmYXVsdEFpQWN0aW9uJyk/LnZhbHVlO1xuICAgICAgICBjb25zdCBrbm93bGVkZ2VCYXNlVmFsdWUgPSB0aGlzLmVkaXRGb3JtLmdldCgna25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZScpPy52YWx1ZTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBzZWN0aW9uLml0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnRW5hYmxlIEFJIG1ldGFkYXRhIGNvbGxlY3Rpb24nKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogdXNlQWlNZXRhZGF0YSB9O1xuICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnRW5hYmxlIEFJIFNtYXJ0bmVzcycgJiYgZW5hYmxlQWlTbWFydG5lc3NWYWx1ZSAhPSBudWxsICYmIGVuYWJsZUFpU21hcnRuZXNzVmFsdWUgIT09ICcnKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogZW5hYmxlQWlTbWFydG5lc3NWYWx1ZSB9O1xuICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnRGVmYXVsdCBBSSBBY3Rpb24nICYmIGRlZmF1bHRBaUFjdGlvblZhbHVlICE9IG51bGwgJiYgZGVmYXVsdEFpQWN0aW9uVmFsdWUgIT09ICcnKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogZGVmYXVsdEFpQWN0aW9uVmFsdWUgfTtcbiAgICAgICAgICBpZiAoaXRlbS5sYWJlbCA9PT0gJ0tub3dsZWRnZSBCYXNlIERlZmF1bHQgVGVzdCBDYXNlJyAmJiBrbm93bGVkZ2VCYXNlVmFsdWUgIT0gbnVsbCAmJiBrbm93bGVkZ2VCYXNlVmFsdWUgIT09ICcnKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZToga25vd2xlZGdlQmFzZVZhbHVlIH07XG4gICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyAuLi5zZWN0aW9uLCBpdGVtcyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlY3Rpb247XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlQ29uZmlnU2VjdGlvbnNSb3cyKCk6IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb25bXSB7XG4gICAgY29uc3QgcGxhdGZvcm0gPSB0aGlzLnBsYXRmb3JtO1xuICAgIGNvbnN0IGRlZmF1bHRCcm93c2VyID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ2RlZmF1bHRCcm93c2VyJyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IGRlZmF1bHRWaWV3cG9ydCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdkZWZhdWx0Vmlld3BvcnQnKT8udmFsdWUgPz8gJyc7XG4gICAgY29uc3QgZGV2aWNlVHlwZSA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdkZXZpY2VUeXBlJyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IGRldmljZU9TID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ2RldmljZU9TJyk/LnZhbHVlID8/ICcnO1xuXG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuY29uZmlnU2VjdGlvbnNSb3cyLm1hcCgoc2VjdGlvbikgPT4ge1xuICAgICAgaWYgKHNlY3Rpb24udGl0bGUgPT09ICdXYWl0cyAmIFJldHJpZXMnIHx8IHNlY3Rpb24udGl0bGUgPT09ICdXYWl0IGFuZCByZXRyaWVzJykge1xuICAgICAgICBjb25zdCBhdXRvV2FpdFZhbHVlID0gdGhpcy5hdXRvV2FpdEVuYWJsZWQgPyAnRW5hYmxlZCcgOiAnJztcbiAgICAgICAgY29uc3QgaXRlbXMgPSBzZWN0aW9uLml0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnQXV0byBXYWl0JykgcmV0dXJuIHsgLi4uaXRlbSwgdmFsdWU6IGF1dG9XYWl0VmFsdWUgfTtcbiAgICAgICAgICBpZiAoaXRlbS5sYWJlbCA9PT0gJ0VuYWJsZSBBdm9pZCBBdXRvIHdhaXQgZm9yIHN0ZXBzJykgcmV0dXJuIHsgLi4uaXRlbSwgdmFsdWU6IHRoaXMuYXV0b1dhaXRFbmFibGVkIH07XG4gICAgICAgICAgaWYgKGl0ZW0ubGFiZWwgPT09ICdSZXRyeSBGYWlsZWQgU3RlcHMnKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogdGhpcy5lbXB0eU51bVRvWmVybyh0aGlzLnJldHJ5RmFpbGVkU3RlcHMpIH07XG4gICAgICAgICAgaWYgKGl0ZW0ubGFiZWwgPT09ICdUZXN0IENhc2UgVGltZW91dCAobWludXRlcyknKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMudGVzdENhc2VUaW1lb3V0TW9kZSA9PT0gJ29yZycgPyBPUkdfTEVWRUxfU0VOVElORUwgOiB0aGlzLmVtcHR5TnVtVG9aZXJvKHRoaXMudGVzdENhc2VUaW1lb3V0KTtcbiAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlIH07XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnV2FpdCBUaW1lb3V0IGZvciBMb2NhdG9ycyAoc2VjcyknKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogdGhpcy5lbXB0eU51bVRvWmVybyh0aGlzLndhaXRUaW1lb3V0TG9jYXRvcnMpIH07XG4gICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyAuLi5zZWN0aW9uLCBpdGVtcyB9O1xuICAgICAgfVxuICAgICAgaWYgKHNlY3Rpb24udGl0bGUgPT09ICdEZXZpY2UnIHx8IHNlY3Rpb24udGl0bGUgPT09ICdEZXZpY2UgU2V0dGluZycpIHtcbiAgICAgICAgY29uc3QgaXRlbXM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IHN0cmluZyB9W10gPSBbXG4gICAgICAgICAgLi4uKHBsYXRmb3JtID09PSAnd2ViJ1xuICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgQnJvd3NlcicsIHZhbHVlOiBkZWZhdWx0QnJvd3NlciB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZpZXdwb3J0JywgdmFsdWU6IGRlZmF1bHRWaWV3cG9ydCB9LFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnVHlwZScsIHZhbHVlOiBkZXZpY2VUeXBlIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ09TJywgdmFsdWU6IGRldmljZU9TIH0sXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICBdO1xuICAgICAgICByZXR1cm4geyAuLi5zZWN0aW9uLCBpdGVtcyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlY3Rpb247XG4gICAgfSk7XG5cbiAgICBjb25zdCBleGlzdGluZ0RldmljZSA9IHJlc3VsdC5maW5kKChzKSA9PiBzLnRpdGxlID09PSAnRGV2aWNlJyB8fCBzLnRpdGxlID09PSAnRGV2aWNlIFNldHRpbmcnKTtcbiAgICBpZiAoIWV4aXN0aW5nRGV2aWNlKSB7XG4gICAgICBjb25zdCBkZXZpY2VTZWN0aW9uOiBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uID0ge1xuICAgICAgICB0aXRsZTogJ0RldmljZScsXG4gICAgICAgIGljb246ICdkZXZpY2VzJyxcbiAgICAgICAgaXRlbXM6IFtcbiAgICAgICAgICAuLi4ocGxhdGZvcm0gPT09ICd3ZWInXG4gICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBCcm93c2VyJywgdmFsdWU6IGRlZmF1bHRCcm93c2VyIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgVmlld3BvcnQnLCB2YWx1ZTogZGVmYXVsdFZpZXdwb3J0IH0sXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIDogW1xuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdUeXBlJywgdmFsdWU6IGRldmljZVR5cGUgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnT1MnLCB2YWx1ZTogZGV2aWNlT1MgfSxcbiAgICAgICAgICAgICAgXSksXG4gICAgICAgIF0sXG4gICAgICB9O1xuICAgICAgcmVzdWx0ID0gWy4uLnJlc3VsdCwgZGV2aWNlU2VjdGlvbl07XG4gICAgfVxuXG4gICAgY29uc3Qga2V5RmxhZ3NTZWN0aW9uOiBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uID0ge1xuICAgICAgdGl0bGU6ICdLZXkgRmxhZ3MnLFxuICAgICAgaWNvbjogJ2ZsYWcnLFxuICAgICAgaXRlbXM6IFtcbiAgICAgICAgeyBsYWJlbDogJ01vYmlsZSBUZXN0aW5nJywgdmFsdWU6IHRoaXMubW9iaWxlVGVzdGluZ0VuYWJsZWQgPyAnRW5hYmxlZCcgOiAnJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRXh0ZW5zaW9uIFVzZScsIHZhbHVlOiB0aGlzLmV4dGVuc2lvblVzZUVuYWJsZWQgPyAnRW5hYmxlZCcgOiAnJyB9LFxuICAgICAgICB7IGxhYmVsOiAnRGF0YSBEcml2ZW4nLCB2YWx1ZTogdGhpcy5kYXRhRHJpdmVuRW5hYmxlZCA/ICdFbmFibGVkJyA6ICcnIH0sXG4gICAgICBdLFxuICAgIH07XG4gICAgY29uc3QgZXhpc3RpbmdLZXlGbGFncyA9IHJlc3VsdC5maW5kKChzKSA9PiBzLnRpdGxlID09PSAnS2V5IEZsYWdzJyk7XG4gICAgaWYgKGV4aXN0aW5nS2V5RmxhZ3MpIHtcbiAgICAgIHJlc3VsdCA9IHJlc3VsdC5tYXAoKHMpID0+XG4gICAgICAgIHMudGl0bGUgPT09ICdLZXkgRmxhZ3MnID8ga2V5RmxhZ3NTZWN0aW9uIDogc1xuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gWy4uLnJlc3VsdCwga2V5RmxhZ3NTZWN0aW9uXTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIG9uQ2FuY2VsKCk6IHZvaWQge1xuICAgIHRoaXMuY2FuY2VsLmVtaXQoKTtcbiAgfVxuXG4gIHRyYWNrQnlMYWJlbChfaTogbnVtYmVyLCBsYWJlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbGFiZWw7XG4gIH1cblxuICB0cmFja0J5Q29uZmlnVGl0bGUoX2k6IG51bWJlciwgc2VjdGlvbjogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHNlY3Rpb24udGl0bGU7XG4gIH1cblxuICAvKiogQ3VycmVudCBsYWJlbHMgdXNlIGNvbnNpc3RlbnQgaW5kaWdvIHN0eWxlICovXG4gIHByaXZhdGUgcmVhZG9ubHkgTEFCRUxfQ0hJUF9TVFlMRSA9IHtcbiAgICBiZzogJyM2MzY2RjEnLFxuICAgIGJvcmRlcjogJyM2MzY2RjEnLFxuICAgIHRleHQ6ICcjRkZGRkZGJyxcbiAgICBpY29uOiAnI0ZGRkZGRicsXG4gIH07XG5cbiAgZ2V0Q3VycmVudExhYmVsQ2hpcFN0eWxlKF9sYWJlbDogc3RyaW5nKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgY29sb3JzID0gdGhpcy5MQUJFTF9DSElQX1NUWUxFO1xuICAgIHJldHVybiB7XG4gICAgICAnYmFja2dyb3VuZC1jb2xvcic6IGNvbG9ycy5iZyxcbiAgICAgICdib3JkZXItY29sb3InOiBjb2xvcnMuYm9yZGVyLFxuICAgICAgJ2JvcmRlci13aWR0aCc6ICcxcHgnLFxuICAgICAgJ2JvcmRlci1zdHlsZSc6ICdzb2xpZCcsXG4gICAgICBjb2xvcjogY29sb3JzLnRleHQsXG4gICAgfTtcbiAgfVxuXG4gIGdldExhYmVsQ2xvc2VJY29uQ29sb3IoX2xhYmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLkxBQkVMX0NISVBfU1RZTEUuaWNvbjtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtNCBjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtcm91bmRlZC1sZyBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNFMkU4RjBdIGNxYS1weS00XCI+XG4gIDwhLS0gQmFzaWMgZGV0YWlsczogRGVzY3JpcHRpb24sIFN0YXR1cy9Qcmlvcml0eS9UeXBlLCBMYWJlbHMgKGxpZ2h0IGJhY2tncm91bmQgY29udGFpbmVyKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtNCBjcWEtcm91bmRlZC1sZyBjcWEtYm9yZGVyIGNxYS1ib3JkZXItWyNFMkU4RjBdIGNxYS1iZy1bI0Y4RjlGRV0gY3FhLXAtNFwiPlxuICA8IS0tIERlc2NyaXB0aW9uIChGaWdtYTogZG9jdW1lbnQgaWNvbiwgdGV4dGFyZWEgd2l0aCBsaWdodCBwdXJwbGUgYmcpIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMi41XCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctNSBjcWEtaC01IGNxYS1wLTEgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJnLVsjM0Y0M0VFMUFdIGNxYS1yb3VuZGVkLW1kIGNxYS1pbmxpbmUtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzFCMUZFQl0gY3FhLXRleHQtWzEycHhdIGNxYS13LTMgY3FhLWgtMyBjcWEtbGVhZGluZy1ub25lIGNxYS1ibG9ja1wiPmRlc2NyaXB0aW9uPC9tYXQtaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bIzM3NDE1MV0gY3FhLXRleHQtc20gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWxlYWRpbmctWzE5LjZweF1cIj57eyBkZXNjcmlwdGlvblRpdGxlIH19PC9zcGFuPlxuICAgIDwvZGl2PlxuICAgIDxjcWEtY3VzdG9tLXRleHRhcmVhXG4gICAgICBbdmFsdWVdPVwiZWRpdERlc2NyaXB0aW9uXCJcbiAgICAgICh2YWx1ZUNoYW5nZSk9XCJlZGl0RGVzY3JpcHRpb24gPSAkZXZlbnRcIlxuICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgIFtyb3dzXT1cIjRcIlxuICAgICAgW2VuYWJsZU1hcmtkb3duXT1cImVuYWJsZU1hcmtkb3duXCJcbiAgICAgIHBsYWNlaG9sZGVyPVwiRW50ZXIgZGVzY3JpcHRpb24uLi5cIlxuICAgICAgdGV4dGFyZWFJbmxpbmVTdHlsZT1cInBhZGRpbmc6IDEycHg7IGZvbnQtc2l6ZTogMTJweDsgbGluZS1oZWlnaHQ6IDEwMCVcIlxuICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+XG4gICAgPC9jcWEtY3VzdG9tLXRleHRhcmVhPlxuICA8L2Rpdj5cblxuICA8IS0tIFN0YXR1cywgUHJpb3JpdHkgJiBUeXBlIChGaWdtYTogc2lkZS1ieS1zaWRlIGRyb3Bkb3ducywgY3FhLWR5bmFtaWMtc2VsZWN0KSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1ncmlkIGNxYS1ncmlkLWNvbHMtMiBjcWEtZ2FwLTRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMlwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWyM2QjcyODBdIGNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LW1lZGl1bVwiPlN0YXR1czwvbGFiZWw+XG4gICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgIFtjb25maWddPVwiZ2V0Q29uZmlnRm9yU2VsZWN0KCdzdGF0dXMnLCBzdGF0dXNTZWxlY3RDb25maWcpXCJcbiAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgnc3RhdHVzJylcIlxuICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFpc1N0ZXBHcm91cFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMlwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWyM2QjcyODBdIGNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LW1lZGl1bVwiPlByaW9yaXR5PC9sYWJlbD5cbiAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3RcbiAgICAgICAgICBbZm9ybV09XCJlZGl0Rm9ybVwiXG4gICAgICAgICAgW2NvbmZpZ109XCJnZXRDb25maWdGb3JTZWxlY3QoJ3ByaW9yaXR5JywgcHJpb3JpdHlTZWxlY3RDb25maWcpXCJcbiAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgncHJpb3JpdHknKVwiXG4gICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGxcIj48L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2ICpuZ0lmPVwiIWlzU3RlcEdyb3VwXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yXCI+XG4gICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1bIzZCNzI4MF0gY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLWZvbnQtbWVkaXVtXCI+VHlwZTwvbGFiZWw+XG4gICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgIFtjb25maWddPVwiZ2V0Q29uZmlnRm9yU2VsZWN0KCd0eXBlJywgdHlwZVNlbGVjdENvbmZpZylcIlxuICAgICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWxlY3RTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgKGxvYWRNb3JlKT1cIm9uU2VsZWN0TG9hZE1vcmUoJGV2ZW50KVwiXG4gICAgICAgICAgKHNlbGVjdENsaWNrKT1cIm9uU2VsZWN0T3BlbmVkKCd0eXBlJylcIlxuICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDwhLS0gTGFiZWxzIChGaWdtYTogQ3VycmVudCBMYWJlbHMgd2l0aCBDbGVhciBBbGwsIGNxYS1iYWRnZSB3aXRoIHgsIEZyZXF1ZW50bHkgdXNlZCwgU2VhcmNoKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIuNVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyMzNzQxNTFdIGNxYS10ZXh0LVsxNXB4XSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1tZWRpdW1cIj5DdXJyZW50IExhYmVscyAoe3sgZWRpdExhYmVscy5sZW5ndGggfX0pPC9zcGFuPlxuICAgICAgPGJ1dHRvblxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgKm5nSWY9XCJlZGl0TGFiZWxzLmxlbmd0aCA+IDBcIlxuICAgICAgICBjbGFzcz1cImNxYS10ZXh0LXhzIGNxYS10ZXh0LVsjREMyNjI2XSBob3ZlcjpjcWEtdW5kZXJsaW5lIGNxYS1mb250LW5vcm1hbFwiXG4gICAgICAgIChjbGljayk9XCJvbkNsZWFyQWxsTGFiZWxzKClcIj5cbiAgICAgICAgQ2xlYXIgQWxsXG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtZ2FwLTJcIiAqbmdJZj1cImVkaXRMYWJlbHMubGVuZ3RoID4gMFwiPlxuICAgICAgPGRpdlxuICAgICAgICAqbmdGb3I9XCJsZXQgbGFiZWwgb2YgZWRpdExhYmVsczsgdHJhY2tCeTogdHJhY2tCeUxhYmVsXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtaW5saW5lLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTEuNSBjcWEtcHgtMi41IGNxYS1weS0xIGNxYS10ZXh0LXhzIGNxYS1mb250LW1lZGl1bSBjcWEtcm91bmRlZC1tZCBjcWEtYm9yZGVyXCJcbiAgICAgICAgW25nU3R5bGVdPVwiZ2V0Q3VycmVudExhYmVsQ2hpcFN0eWxlKGxhYmVsKVwiPlxuICAgICAgICA8c3Bhbj57eyBsYWJlbCB9fTwvc3Bhbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLXctMy41IGNxYS1oLTMuNSBjcWEtcm91bmRlZCBob3ZlcjpjcWEtb3BhY2l0eS04MCBjcWEtdHJhbnNpdGlvbi1vcGFjaXR5IGNxYS1iZy10cmFuc3BhcmVudCBjcWEtYm9yZGVyLW5vbmUgY3FhLXAtMCBjcWEtY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgIFtzdHlsZS5jb2xvcl09XCJnZXRMYWJlbENsb3NlSWNvbkNvbG9yKGxhYmVsKVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uUmVtb3ZlTGFiZWwobGFiZWwpXCJcbiAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidSZW1vdmUgJyArIGxhYmVsXCI+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWzE0cHhdIGNxYS13LTMuNSBjcWEtaC0zLjVcIj5jbG9zZTwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyMzNzQxNTFdIGNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LW1lZGl1bVwiPkZyZXF1ZW50bHkgdXNlZDwvc3Bhbj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC13cmFwIGNxYS1nYXAtMlwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGxhYmVsIG9mIGZyZXF1ZW50bHlVc2VkTGFiZWxzOyB0cmFja0J5OiB0cmFja0J5TGFiZWxcIlxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwib25BZGRGcmVxdWVudExhYmVsKGxhYmVsKVwiPlxuICAgICAgICAgIDxjcWEtYmFkZ2VcbiAgICAgICAgICAgIFtsYWJlbF09XCJsYWJlbFwiXG4gICAgICAgICAgICB2YXJpYW50PVwiZGVmYXVsdFwiXG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgYmFja2dyb3VuZENvbG9yPVwiI0U4RTlGRlwiXG4gICAgICAgICAgICB0ZXh0Q29sb3I9XCIjM0Y0M0VFXCJcbiAgICAgICAgICAgIGJvcmRlckNvbG9yPVwiI0U4RTlGRlwiPlxuICAgICAgICAgIDwvY3FhLWJhZGdlPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsjMzc0MTUxXSBjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1tZWRpdW1cIj5BZGQgbGFiZWxzPC9sYWJlbD5cbiAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICBbZm9ybV09XCJlZGl0Rm9ybVwiXG4gICAgICBbY29uZmlnXT1cImxhYmVsc1NlbGVjdENvbmZpZ1wiXG4gICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgKHNlbGVjdENsaWNrKT1cIm9uU2VsZWN0T3BlbmVkKCdsYWJlbHMnKVwiXG4gICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgKGFkZEN1c3RvbVZhbHVlKT1cIm9uTGFiZWxzQWRkQ3VzdG9tVmFsdWUoJGV2ZW50KVwiXG4gICAgICBjbGFzcz1cImNxYS13LWZ1bGxcIj5cbiAgICA8L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgPC9kaXY+XG4gIDwvZGl2PlxuXG5cbiAgPCEtLSBDb25maWd1cmF0aW9uIChGaWdtYTogY29sbGFwc2libGUsIGdlYXIgaWNvbiwgbGlnaHQgYmFja2dyb3VuZCBjb250YWluZXIpIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLXNlbGYtc3RyZXRjaCBjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC1bMTJweF0gY3FhLXJvdW5kZWQtbGcgY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjRTJFOEYwXSBjcWEtYmctWyNGOEY5RkVdIGNxYS1wLTRcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXRleHQtbGVmdCBjcWEtdy1mdWxsXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctNSBjcWEtaC01IGNxYS1wLTEgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJnLVsjM0Y0M0VFMUFdIGNxYS1yb3VuZGVkLW1kIGNxYS1pbmxpbmUtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzFCMUZFQl0gY3FhLXRleHQtWzEycHhdIGNxYS13LTMgY3FhLWgtMyBjcWEtbGVhZGluZy1ub25lIGNxYS1ibG9ja1wiPnNldHRpbmdzPC9tYXQtaWNvbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1bIzM3NDE1MV0gY3FhLXRleHQtc20gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLWxlYWRpbmctWzE5LjVweF1cIj57eyBjb25maWdUaXRsZSB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgKm5nSWY9XCJjb25maWdFeHBhbmRlZFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtNSBjcWEtdGV4dC14c1wiPlxuICAgICAgPCEtLSBFeGVjdXRpb24gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMi41IGNxYS1taW4tdy0wIGNxYS1yb3VuZGVkLWxnIGNxYS1wLTQgY3FhLW1iLTQgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFMkU4RjBdXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtdy1mdWxsIGNxYS1iZy10cmFuc3BhcmVudCBjcWEtYm9yZGVyLW5vbmUgY3FhLXAtMCBjcWEtY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgIChjbGljayk9XCJleGVjdXRpb25FeHBhbmRlZCA9ICFleGVjdXRpb25FeHBhbmRlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS13LTUgY3FhLWgtNSBjcWEtcC0xIGNxYS1mbGV4LXNocmluay0wIGNxYS1iZy1bIzNGNDNFRTFBXSBjcWEtcm91bmRlZC1tZCBjcWEtaW5saW5lLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyMxQjFGRUJdIGNxYS10ZXh0LVsxMnB4XSBjcWEtdy0zIGNxYS1oLTMgY3FhLWxlYWRpbmctbm9uZSBjcWEtYmxvY2tcIj5wbGF5X2NpcmNsZTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMxMTE4MjddXCI+RXhlY3V0aW9uPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsjNjQ3NDhCXSBjcWEtdGV4dC14bCBjcWEtdy01IGNxYS1oLTVcIj5cbiAgICAgICAgICAgIHt7IGV4ZWN1dGlvbkV4cGFuZGVkID8gJ2V4cGFuZF9sZXNzJyA6ICdleHBhbmRfbW9yZScgfX1cbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImV4ZWN1dGlvbkV4cGFuZGVkXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0zIGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICA8IS0tIDxkaXYgKm5nSWY9XCJoYXNQcmVyZXF1aXNpdGVDYXNlQ29uZmlnXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjUgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPiBcbiAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3RcbiAgICAgICAgICAgIFtmb3JtXT1cImVkaXRGb3JtXCJcbiAgICAgICAgICAgIFtjb25maWddPVwiZ2V0Q29uZmlnRm9yU2VsZWN0KCdwcmVyZXF1aXNpdGVDYXNlcycsIHByZXJlcXVpc2l0ZUNhc2VTZWxlY3RDb25maWcpXCJcbiAgICAgICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWxlY3RTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAobG9hZE1vcmUpPVwib25TZWxlY3RMb2FkTW9yZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgncHJlcmVxdWlzaXRlQ2FzZXMnKVwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjUgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWyM2QjcyODBdIGNxYS10ZXh0LXhzIGNxYS1mb250LW1lZGl1bVwiPlRlc3QgRGF0YSBQcm9maWxlPC9sYWJlbD5cbiAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3RcbiAgICAgICAgICAgIFtmb3JtXT1cImVkaXRGb3JtXCJcbiAgICAgICAgICAgIFtjb25maWddPVwiZ2V0Q29uZmlnRm9yU2VsZWN0KCd0ZXN0RGF0YVByb2ZpbGUnLCB0ZXN0RGF0YVByb2ZpbGVTZWxlY3RDb25maWcpXCJcbiAgICAgICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWxlY3RTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAobG9hZE1vcmUpPVwib25TZWxlY3RMb2FkTW9yZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgndGVzdERhdGFQcm9maWxlJylcIlxuICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLXctZnVsbFwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCIhaXNTdGVwR3JvdXBcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEuNSBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1bIzY4NzM4OV0gY3FhLXRleHQteHMgY3FhLWZvbnQtbWVkaXVtXCI+VGVzdCBEYXRhIFNldDwvbGFiZWw+XG4gICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgICBbZm9ybV09XCJlZGl0Rm9ybVwiXG4gICAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZ0ZvclNlbGVjdCgndGVzdERhdGFTZXQnLCB0ZXN0RGF0YVNldFNlbGVjdENvbmZpZylcIlxuICAgICAgICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgICAgKHNlbGVjdENsaWNrKT1cIm9uU2VsZWN0T3BlbmVkKCd0ZXN0RGF0YVNldCcpXCJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGxcIj48L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjUgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWyM2QjcyODBdIGNxYS10ZXh0LXhzIGNxYS1mb250LW1lZGl1bVwiPlZpZGVvIFJlY29yZGluZzwvbGFiZWw+XG4gICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgICBbZm9ybV09XCJlZGl0Rm9ybVwiXG4gICAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZ0ZvclNlbGVjdCgndmlkZW9SZWNvcmRpbmcnLCB2aWRlb1JlY29yZGluZ1NlbGVjdENvbmZpZylcIlxuICAgICAgICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgICAgKHNlbGVjdENsaWNrKT1cIm9uU2VsZWN0T3BlbmVkKCd2aWRlb1JlY29yZGluZycpXCJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGxcIj48L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIEFJIENvbmZpZ3VyYXRpb24gLS0+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMi41IGNxYS1taW4tdy0wIGNxYS1yb3VuZGVkLWxnIGNxYS1wLTQgY3FhLW1iLTQgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItWyNFMkU4RjBdXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktYmV0d2VlbiBjcWEtdy1mdWxsIGNxYS1iZy10cmFuc3BhcmVudCBjcWEtYm9yZGVyLW5vbmUgY3FhLXAtMCBjcWEtY3Vyc29yLXBvaW50ZXJcIlxuICAgICAgICAgIChjbGljayk9XCJhaUNvbmZpZ0V4cGFuZGVkID0gIWFpQ29uZmlnRXhwYW5kZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdy01IGNxYS1oLTUgY3FhLXAtMSBjcWEtZmxleC1zaHJpbmstMCBjcWEtYmctWyMzRjQzRUUxQV0gY3FhLXJvdW5kZWQtbWQgY3FhLWlubGluZS1mbGV4IGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsjMUIxRkVCXSBjcWEtdGV4dC1bMTJweF0gY3FhLXctMyBjcWEtaC0zIGNxYS1sZWFkaW5nLW5vbmUgY3FhLWJsb2NrXCI+c21hcnRfdG95PC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzExMTgyN11cIj5BSSBDb25maWd1cmF0aW9uPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsjNjQ3NDhCXSBjcWEtdGV4dC14bCBjcWEtdy01IGNxYS1oLTVcIj5cbiAgICAgICAgICAgIHt7IGFpQ29uZmlnRXhwYW5kZWQgPyAnZXhwYW5kX2xlc3MnIDogJ2V4cGFuZF9tb3JlJyB9fVxuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiYWlDb25maWdFeHBhbmRlZFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMyBjcWEtcHktMCBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEuNSBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgICBbZm9ybV09XCJlZGl0Rm9ybVwiXG4gICAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZ0ZvclNlbGVjdCgnZW5hYmxlQWlTbWFydG5lc3MnLCBlbmFibGVBaVNtYXJ0bmVzc1NlbGVjdENvbmZpZylcIlxuICAgICAgICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgICAgKHNlbGVjdENsaWNrKT1cIm9uU2VsZWN0T3BlbmVkKCdlbmFibGVBaVNtYXJ0bmVzcycpXCJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGxcIj48L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41IGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3RcbiAgICAgICAgICAgIFtmb3JtXT1cImVkaXRGb3JtXCJcbiAgICAgICAgICAgIFtjb25maWddPVwiZ2V0Q29uZmlnRm9yU2VsZWN0KCdkZWZhdWx0QWlBY3Rpb24nLCBkZWZhdWx0QWlBY3Rpb25TZWxlY3RDb25maWcpXCJcbiAgICAgICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWxlY3RTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAobG9hZE1vcmUpPVwib25TZWxlY3RMb2FkTW9yZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgnZGVmYXVsdEFpQWN0aW9uJylcIlxuICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLXctZnVsbFwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjUgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJnZXRDb25maWdGb3JTZWxlY3QoJ2tub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2UnLCBrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlU2VsZWN0Q29uZmlnKVwiXG4gICAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgKGxvYWRNb3JlKT1cIm9uU2VsZWN0TG9hZE1vcmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VsZWN0Q2xpY2spPVwib25TZWxlY3RPcGVuZWQoJ2tub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2UnKVwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEuNSBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgICBbZm9ybV09XCJlZGl0Rm9ybVwiXG4gICAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZ0ZvclNlbGVjdCgndXNlQWlNZXRhZGF0YScsIGFpTWV0YWRhdGFDb2xsZWN0aW9uU2VsZWN0Q29uZmlnKVwiXG4gICAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgKGxvYWRNb3JlKT1cIm9uU2VsZWN0TG9hZE1vcmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VsZWN0Q2xpY2spPVwib25TZWxlY3RPcGVuZWQoJ3VzZUFpTWV0YWRhdGEnKVwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIFdhaXRzICYgUmV0cmllcy0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIuNSBjcWEtbWluLXctMCBjcWEtcm91bmRlZC1sZyBjcWEtcC00IGNxYS1tYi00IGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTJFOEYwXVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLXctZnVsbCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWJvcmRlci1ub25lIGNxYS1wLTAgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwid2FpdHNSZXRyaWVzRXhwYW5kZWQgPSAhd2FpdHNSZXRyaWVzRXhwYW5kZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdy01IGNxYS1oLTUgY3FhLXAtMSBjcWEtZmxleC1zaHJpbmstMCBjcWEtYmctWyMzRjQzRUUxQV0gY3FhLXJvdW5kZWQtbWQgY3FhLWlubGluZS1mbGV4IGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsjMUIxRkVCXSBjcWEtdGV4dC1bMTJweF0gY3FhLXctMyBjcWEtaC0zIGNxYS1sZWFkaW5nLW5vbmUgY3FhLWJsb2NrXCI+dGltZXI8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTExODI3XVwiPldhaXQgYW5kIFJldHJpZXM8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyM2NDc0OEJdIGNxYS10ZXh0LXhsIGNxYS13LTUgY3FhLWgtNVwiPlxuICAgICAgICAgICAge3sgd2FpdHNSZXRyaWVzRXhwYW5kZWQgPyAnZXhwYW5kX2xlc3MnIDogJ2V4cGFuZF9tb3JlJyB9fVxuICAgICAgICAgIDwvbWF0LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwid2FpdHNSZXRyaWVzRXhwYW5kZWRcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtcHgtMyBjcWEtcHktMi41IGNxYS1yb3VuZGVkLWxnXCI+XG4gICAgICAgICAgICA8Y3FhLWN1c3RvbS10b2dnbGUgW2NoZWNrZWRdPVwiYXV0b1dhaXRFbmFibGVkXCIgKGNoZWNrZWRDaGFuZ2UpPVwiYXV0b1dhaXRFbmFibGVkID0gJGV2ZW50XCIgYXJpYUxhYmVsPVwiRW5hYmxlIEF2b2lkIEF1dG8gd2FpdCBmb3Igc3RlcHNcIj48L2NxYS1jdXN0b20tdG9nZ2xlPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1ub3JtYWwgY3FhLXRleHQtWyMxMTE4MjddXCI+RW5hYmxlIEF2b2lkIEF1dG8gd2FpdCBmb3Igc3RlcHM8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEuNSBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgbGFiZWw9XCJSZXRyeSBGYWlsZWQgU3RlcHNcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwicmV0cnlGYWlsZWRTdGVwc1wiXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJyZXRyeUZhaWxlZFN0ZXBzID0gb25seURpZ2l0cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIwXCJcbiAgICAgICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgc2l6ZT1cInNtXCJcbiAgICAgICAgICAgICAgbGFiZWxJbmxpbmVTdHlsZT1cImZvbnQtc2l6ZTogMTRweDsgbGluZS1oZWlnaHQ6IDE5LjZweFwiPlxuICAgICAgICAgICAgPC9jcWEtY3VzdG9tLWlucHV0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjUgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLWZvbnQtbWVkaXVtIGNxYS10ZXh0LVsjMzc0MTUxXSBjcWEtdGV4dC14cyBjcWEtbWItMVwiIHN0eWxlPVwiZm9udC1zaXplOiAxNHB4OyBsaW5lLWhlaWdodDogMTkuNnB4XCI+XG4gICAgICAgICAgICAgIFRlc3QgQ2FzZSBUaW1lb3V0IChtaW51dGVzKVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtaW5saW5lLWZsZXggY3FhLXJvdW5kZWQtbWQgY3FhLWJvcmRlciBjcWEtYm9yZGVyLXNvbGlkIGNxYS1ib3JkZXItZ3JheS0yMDBcIj5cbiAgICAgICAgICAgICAgICA8Y3FhLWRyb3Bkb3duLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwidGVzdENhc2VUaW1lb3V0TW9kZU9wdGlvbnNcIlxuICAgICAgICAgICAgICAgICAgW3NlbGVjdGVkVmFsdWVdPVwidGVzdENhc2VUaW1lb3V0TW9kZVwiXG4gICAgICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uVGVzdENhc2VUaW1lb3V0TW9kZUNoYW5nZSgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPC9jcWEtZHJvcGRvd24tYnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLW1pbi13LTBcIj5cbiAgICAgICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgICAgICBbdmFsdWVdPVwidGVzdENhc2VUaW1lb3V0RGlzcGxheVZhbHVlXCJcbiAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJ0ZXN0Q2FzZVRpbWVvdXRNb2RlID09PSAnb3JnJ1wiXG4gICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwidGVzdENhc2VUaW1lb3V0ID0gb25seURpZ2l0cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMzBcIlxuICAgICAgICAgICAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgIHNpemU9XCJzbVwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41IGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxjcWEtY3VzdG9tLWlucHV0XG4gICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICBsYWJlbD1cIldhaXQgVGltZW91dCBmb3IgTG9jYXRvcnMgKHNlYylcIlxuICAgICAgICAgICAgICBbdmFsdWVdPVwid2FpdFRpbWVvdXRMb2NhdG9yc1wiXG4gICAgICAgICAgICAgICh2YWx1ZUNoYW5nZSk9XCJ3YWl0VGltZW91dExvY2F0b3JzID0gb25seURpZ2l0cygkZXZlbnQpXCJcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCIxNVwiXG4gICAgICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgIGxhYmVsSW5saW5lU3R5bGU9XCJmb250LXNpemU6IDE0cHg7IGxpbmUtaGVpZ2h0OiAxOS42cHhcIj5cbiAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxkaXYgKm5nSWY9XCJwbGF0Zm9ybSAhPT0gJ21vYmlsZSdcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIuNSBjcWEtbWluLXctMCBjcWEtcm91bmRlZC1sZyBjcWEtcC00IGNxYS1tYi00IGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTJFOEYwXVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLXctZnVsbCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWJvcmRlci1ub25lIGNxYS1wLTAgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwiZGV2aWNlRXhwYW5kZWQgPSAhZGV2aWNlRXhwYW5kZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdy01IGNxYS1oLTUgY3FhLXAtMSBjcWEtZmxleC1zaHJpbmstMCBjcWEtYmctWyMzRjQzRUUxQV0gY3FhLXJvdW5kZWQtbWQgY3FhLWlubGluZS1mbGV4IGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsjMUIxRkVCXSBjcWEtdGV4dC1bMTJweF0gY3FhLXctMyBjcWEtaC0zIGNxYS1sZWFkaW5nLW5vbmUgY3FhLWJsb2NrXCI+ZGV2aWNlczwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMxMTE4MjddXCI+RGV2aWNlIFNldHRpbmdzPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsjNjQ3NDhCXSBjcWEtdGV4dC14bCBjcWEtdy01IGNxYS1oLTVcIj5cbiAgICAgICAgICAgIHt7IGRldmljZUV4cGFuZGVkID8gJ2V4cGFuZF9sZXNzJyA6ICdleHBhbmRfbW9yZScgfX1cbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImRldmljZUV4cGFuZGVkXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0zIGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICA8IS0tIFdlYiBvbmx5OiBtb2JpbGUgRGV2aWNlIFNldHRpbmdzIGhpZGRlbiB0ZW1wb3JhcmlseSAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgICAgICBbZm9ybV09XCJlZGl0Rm9ybVwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwiZ2V0Q29uZmlnRm9yU2VsZWN0KCdkZWZhdWx0QnJvd3NlcicsIGRlZmF1bHRCcm93c2VyU2VsZWN0Q29uZmlnKVwiXG4gICAgICAgICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWxlY3RTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgICAgICAoc2VsZWN0Q2xpY2spPVwib25TZWxlY3RPcGVuZWQoJ2RlZmF1bHRCcm93c2VyJylcIlxuICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGxcIj48L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgICAgICBbZm9ybV09XCJlZGl0Rm9ybVwiXG4gICAgICAgICAgICAgIFtjb25maWddPVwiZ2V0Q29uZmlnRm9yU2VsZWN0KCdkZWZhdWx0Vmlld3BvcnQnLCBkZWZhdWx0Vmlld3BvcnRTZWxlY3RDb25maWcpXCJcbiAgICAgICAgICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKGxvYWRNb3JlKT1cIm9uU2VsZWN0TG9hZE1vcmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgnZGVmYXVsdFZpZXdwb3J0JylcIlxuICAgICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGxcIj48L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICAgIDwhLS0gS2V5IEZsYWdzIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIuNSBjcWEtbWluLXctMCBjcWEtcm91bmRlZC1sZyBjcWEtcC00IGNxYS1tYi0wIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTJFOEYwXVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLXctZnVsbCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWJvcmRlci1ub25lIGNxYS1wLTAgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwia2V5RmxhZ3NFeHBhbmRlZCA9ICFrZXlGbGFnc0V4cGFuZGVkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctNSBjcWEtaC01IGNxYS1wLTEgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJnLVsjM0Y0M0VFMUFdIGNxYS1yb3VuZGVkLW1kIGNxYS1pbmxpbmUtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzFCMUZFQl0gY3FhLXRleHQtWzEycHhdIGNxYS13LTMgY3FhLWgtMyBjcWEtbGVhZGluZy1ub25lIGNxYS1ibG9ja1wiPmZsYWc8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTExODI3XVwiPktleSBGbGFnczwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzY0NzQ4Ql0gY3FhLXRleHQteGwgY3FhLXctNSBjcWEtaC01XCI+XG4gICAgICAgICAgICB7eyBrZXlGbGFnc0V4cGFuZGVkID8gJ2V4cGFuZF9sZXNzJyA6ICdleHBhbmRfbW9yZScgfX1cbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImtleUZsYWdzRXhwYW5kZWRcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXB4LTMgY3FhLXB5LTIuNSBjcWEtcm91bmRlZC1sZ1wiPlxuICAgICAgICAgICAgPGNxYS1jdXN0b20tdG9nZ2xlIFtjaGVja2VkXT1cIm1vYmlsZVRlc3RpbmdFbmFibGVkXCIgKGNoZWNrZWRDaGFuZ2UpPVwibW9iaWxlVGVzdGluZ0VuYWJsZWQgPSAkZXZlbnRcIiBhcmlhTGFiZWw9XCJNb2JpbGUgVGVzdGluZ1wiPjwvY3FhLWN1c3RvbS10b2dnbGU+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LW5vcm1hbCBjcWEtdGV4dC1bIzExMTgyN11cIj5Nb2JpbGUgVGVzdGluZzwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXB4LTMgY3FhLXB5LTIuNSBjcWEtcm91bmRlZC1sZ1wiPlxuICAgICAgICAgICAgPGNxYS1jdXN0b20tdG9nZ2xlIFtjaGVja2VkXT1cImV4dGVuc2lvblVzZUVuYWJsZWRcIiAoY2hlY2tlZENoYW5nZSk9XCJleHRlbnNpb25Vc2VFbmFibGVkID0gJGV2ZW50XCIgYXJpYUxhYmVsPVwiRXh0ZW5zaW9uIFVzZVwiPjwvY3FhLWN1c3RvbS10b2dnbGU+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LW5vcm1hbCBjcWEtdGV4dC1bIzExMTgyN11cIj5FeHRlbnNpb24gVXNlPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMiBjcWEtcHgtMyBjcWEtcHktMi41IGNxYS1yb3VuZGVkLWxnXCI+XG4gICAgICAgICAgICA8Y3FhLWN1c3RvbS10b2dnbGUgW2NoZWNrZWRdPVwiZGF0YURyaXZlbkVuYWJsZWRcIiAoY2hlY2tlZENoYW5nZSk9XCJkYXRhRHJpdmVuRW5hYmxlZCA9ICRldmVudFwiIGFyaWFMYWJlbD1cIkRhdGEgRHJpdmVuXCI+PC9jcWEtY3VzdG9tLXRvZ2dsZT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLWZvbnQtbm9ybWFsIGNxYS10ZXh0LVsjMTExODI3XVwiPkRhdGEgRHJpdmVuPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICBcbiAgICAgIDwhLS0gQVBJIE1vY2tpbmcgQ2FyZCAoZWRpdCBtb2RlOiBtdXR1YWxseS1leGNsdXNpdmUgdG9nZ2xlcyBkcml2ZW4gYnkgb25lIGJvb2xlYW4pIC0tPlxuICAgICAgPGNxYS1hcGktbW9ja2luZy1jYXJkXG4gICAgICAgICpuZ0lmPVwic2hvd0FwaU1vY2tpbmdDYXJkXCJcbiAgICAgICAgc3R5bGU9XCJ3aWR0aDogMTAwJTtcIlxuICAgICAgICBbdGl0bGVdPVwiYXBpTW9ja2luZ1RpdGxlXCJcbiAgICAgICAgW3N0YXR1c0xhYmVsXT1cImFwaU1vY2tpbmdTdGF0dXNMYWJlbFwiXG4gICAgICAgIFtjYXB0dXJlTGFiZWxdPVwiYXBpTW9ja2luZ0NhcHR1cmVMYWJlbFwiXG4gICAgICAgIFtjYXB0dXJlSGludF09XCJhcGlNb2NraW5nQ2FwdHVyZUhpbnRcIlxuICAgICAgICBbcmVuZXdMYWJlbF09XCJhcGlNb2NraW5nUmVuZXdMYWJlbFwiXG4gICAgICAgIFtyZW5ld0hpbnRdPVwiYXBpTW9ja2luZ1JlbmV3SGludFwiXG4gICAgICAgIFtyZXN0b3JlTW9ja109XCJlZGl0QXBpTW9ja2luZ1Jlc3RvcmVNb2NrXCJcbiAgICAgICAgW3N0b3JlTW9ja109XCJlZGl0QXBpTW9ja2luZ1N0b3JlTW9ja1wiXG4gICAgICAgIFttb2NrZWRBcGlzQ291bnRdPVwiYXBpTW9ja2luZ01vY2tlZEFwaXNDb3VudFwiXG4gICAgICAgIFt0b3RhbEFwaXNDb3VudF09XCJhcGlNb2NraW5nVG90YWxBcGlzQ291bnRcIlxuICAgICAgICBbcHJvZ3Jlc3NQZXJjZW50XT1cImFwaU1vY2tpbmdQcm9ncmVzc1BlcmNlbnRcIlxuICAgICAgICBbc2hvd1Byb2dyZXNzXT1cImFwaU1vY2tpbmdTaG93UHJvZ3Jlc3NcIlxuICAgICAgICBbc3VtbWFyeVRleHRdPVwiYXBpTW9ja2luZ1N1bW1hcnlUZXh0XCJcbiAgICAgICAgW3BlcmNlbnRUZXh0XT1cImFwaU1vY2tpbmdQZXJjZW50VGV4dFwiXG4gICAgICAgIFtlZGl0aW5nXT1cInRydWVcIlxuICAgICAgICAocmVzdG9yZU1vY2tDaGFuZ2UpPVwib25BcGlNb2NraW5nUmVzdG9yZU1vY2tDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgIChzdG9yZU1vY2tDaGFuZ2UpPVwib25BcGlNb2NraW5nU3RvcmVNb2NrQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoY29uZmlndXJlKT1cImNvbmZpZ3VyZUFwaU1vY2tpbmcuZW1pdCgpXCI+XG4gICAgICA8L2NxYS1hcGktbW9ja2luZy1jYXJkPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPlxuICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWdhcC0zIGNxYS1wdC0yIGNxYS13LWZ1bGxcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXgtMSBjcWEtbWluLXctMFwiPlxuICAgICAgPGNxYS1idXR0b25cbiAgICAgICAgdmFyaWFudD1cIm91dGxpbmVkXCJcbiAgICAgICAgW3RleHRdPVwiJ0NhbmNlbCdcIlxuICAgICAgICBidG5TaXplPVwibWRcIlxuICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAoY2xpY2tlZCk9XCJvbkNhbmNlbCgpXCI+XG4gICAgICA8L2NxYS1idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLW1pbi13LTBcIj5cbiAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgICpuZ0lmPVwiIWlzU2F2aW5nXCJcbiAgICAgICAgdmFyaWFudD1cImZpbGxlZFwiXG4gICAgICAgIFt0ZXh0XT1cIidTYXZlIENoYW5nZXMnXCJcbiAgICAgICAgYnRuU2l6ZT1cIm1kXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgW2Rpc2FibGVkXT1cIiFoYXNVbnNhdmVkQ2hhbmdlc1wiXG4gICAgICAgIChjbGlja2VkKT1cIm9uU2F2ZSgpXCI+XG4gICAgICA8L2NxYS1idXR0b24+XG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNTYXZpbmdcIiBjbGFzcz1cImNxYS13LWZ1bGxcIj5cbiAgICAgICAgPGNxYS1iYWRnZVxuICAgICAgICAgIGxhYmVsPVwiU2F2aW5n4oCmXCJcbiAgICAgICAgICBpY29uPVwiYXV0b3JlbmV3XCJcbiAgICAgICAgICBbaXNMb2FkaW5nXT1cInRydWVcIlxuICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgW2NlbnRlckNvbnRlbnRdPVwidHJ1ZVwiXG4gICAgICAgICAgdmFyaWFudD1cImluZm9cIlxuICAgICAgICAgIHNpemU9XCJtZWRpdW1cIj5cbiAgICAgICAgPC9jcWEtYmFkZ2U+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
1106
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMtZWRpdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLWVkaXQvdGVzdC1jYXNlLWRldGFpbHMtZWRpdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLWVkaXQvdGVzdC1jYXNlLWRldGFpbHMtZWRpdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULEtBQUssRUFDTCxNQUFNLEVBQ04sWUFBWSxFQUNaLHVCQUF1QixHQUt4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7Ozs7Ozs7Ozs7QUFXeEQsbUhBQW1IO0FBQ25ILE1BQU0sa0JBQWtCLEdBQUcsV0FBVyxDQUFDO0FBeUJ2QyxvR0FBb0c7QUFDcEcsTUFBTSxDQUFDLE1BQU0sNkJBQTZCLEdBQUc7SUFDM0MsTUFBTSxFQUFFLFFBQVE7SUFDaEIsUUFBUSxFQUFFLFVBQVU7SUFDcEIsSUFBSSxFQUFFLE1BQU07SUFDWixNQUFNLEVBQUUsUUFBUTtJQUNoQixpQkFBaUIsRUFBRSxtQkFBbUI7SUFDdEMsZUFBZSxFQUFFLGlCQUFpQjtJQUNsQyxXQUFXLEVBQUUsYUFBYTtJQUMxQixjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLGlCQUFpQixFQUFFLG1CQUFtQjtJQUN0QyxlQUFlLEVBQUUsaUJBQWlCO0lBQ2xDLDRCQUE0QixFQUFFLDhCQUE4QjtJQUM1RCxhQUFhLEVBQUUsZUFBZTtJQUM5QixjQUFjLEVBQUUsZ0JBQWdCO0lBQ2hDLGVBQWUsRUFBRSxpQkFBaUI7SUFDbEMsVUFBVSxFQUFFLFlBQVk7SUFD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QkFBdkIsTUFBTTtnQkFHRyxZQUFZO3NCQUFyQixNQUFNO2dCQUdHLGVBQWU7c0JBQXhCLE1BQU07Z0JBR0csVUFBVTtzQkFBbkIsTUFBTTtnQkFFRywyQkFBMkI7c0JBQXBDLE1BQU07Z0JBRUcseUJBQXlCO3NCQUFsQyxNQUFNO2dCQUVHLG1CQUFtQjtzQkFBNUIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIE9uSW5pdCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1xuICBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uLFxuICBUZXN0Q2FzZURldGFpbHNNZXRhZGF0YUl0ZW0sXG59IGZyb20gJy4uL3Rlc3QtY2FzZS1kZXRhaWxzLm1vZGVscyc7XG5pbXBvcnQge1xuICBEeW5hbWljU2VsZWN0RmllbGRDb25maWcsXG4gIFNlbGVjdE9wdGlvbixcbn0gZnJvbSAnLi4vLi4vZHluYW1pYy1zZWxlY3QvZHluYW1pYy1zZWxlY3QtZmllbGQuY29tcG9uZW50JztcbmltcG9ydCB7IERyb3Bkb3duT3B0aW9uIH0gZnJvbSAnLi4vLi4vZHJvcGRvd24tYnV0dG9uL2Ryb3Bkb3duLWJ1dHRvbi5jb21wb25lbnQnO1xuXG4vKiogU2VudGluZWwgdmFsdWUgZW1pdHRlZCBpbiBzYXZlIHBheWxvYWRzIHRvIHRlbGwgdGhlIGhvc3QgdG8gc2VuZCBudWxsIGZvciB0aGUgZmllbGQgKHVzZSBvcmctbGV2ZWwgZGVmYXVsdCkuICovXG5jb25zdCBPUkdfTEVWRUxfU0VOVElORUwgPSAnT3JnIGxldmVsJztcblxuLyoqIE92ZXJyaWRlIGNvbmZpZyBmb3IgYSBzcGVjaWZpYyBzZWxlY3QuIFVzZSBmb3Igc2VydmVyLXNpZGUgc2VhcmNoLCBsb2FkIG1vcmUsIGN1c3RvbSBvcHRpb25zLiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RDb25maWdPdmVycmlkZSB7XG4gIC8qKiBSZXBsYWNlIG9wdGlvbnMgKGUuZy4gZnJvbSBBUEkpLiBVcGRhdGUgd2hlbiBBUEkgcmV0dXJucy4gKi9cbiAgb3B0aW9ucz86IFNlbGVjdE9wdGlvbltdO1xuICAvKiogRW5hYmxlIHNlcnZlci1zaWRlIHNlYXJjaDsgY29tcG9uZW50IGVtaXRzIHNlbGVjdFNlYXJjaCBpbnN0ZWFkIG9mIGxvY2FsIGZpbHRlcmluZy4gKi9cbiAgc2VydmVyU2VhcmNoPzogYm9vbGVhbjtcbiAgLyoqIEluZGljYXRlcyBtb3JlIHJlc3VsdHMgYXZhaWxhYmxlIGZvciBpbmZpbml0ZSBzY3JvbGwuICovXG4gIGhhc01vcmU/OiBib29sZWFuO1xuICAvKiogTG9hZGluZyBzdGF0ZSAoZS5nLiBkdXJpbmcgQVBJIGNhbGwpLiAqL1xuICBpc0xvYWRpbmc/OiBib29sZWFuO1xuICAvKiogRW5hYmxlIHNlYXJjaCBpbnB1dCBpbiB0aGUgc2VsZWN0LiAqL1xuICBzZWFyY2hhYmxlPzogYm9vbGVhbjtcbiAgLyoqIFdoZW4gdHJ1ZSwgdHJpZ2dlcnMgaW5pdGlhbCBzZWFyY2ggb24gcGFuZWwgb3BlbiAoc2VydmVyU2VhcmNoIG1vZGUpLiAqL1xuICBpbml0aWFsRmV0Y2hPbk9wZW4/OiBib29sZWFuO1xuICAvKiogQ2FsbGJhY2sgd2hlbiB1c2VyIHR5cGVzIGluIHNlYXJjaC4gQ2FsbCBBUEksIHRoZW4gdXBkYXRlIG9wdGlvbnMgdmlhIHNlbGVjdENvbmZpZ092ZXJyaWRlcy4gKi9cbiAgb25TZWFyY2g/OiAocXVlcnk6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqIENhbGxiYWNrIHdoZW4gdXNlciBzY3JvbGxzIHRvIGxvYWQgbW9yZS4gQ2FsbCBBUEksIGFwcGVuZCBvcHRpb25zIHZpYSBzZWxlY3RDb25maWdPdmVycmlkZXMuICovXG4gIG9uTG9hZE1vcmU/OiAocXVlcnk/OiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbi8qKiBNYXAgb2Ygc2VsZWN0IGtleSAtPiBjb25maWcgb3ZlcnJpZGUuIEVuYWJsZXMgQVBJLWRyaXZlbiBvcHRpb25zLCBpbmZpbml0ZSBzZWFyY2gsIGxvYWQgbW9yZS4gKi9cbmV4cG9ydCB0eXBlIFNlbGVjdENvbmZpZ092ZXJyaWRlcyA9IFBhcnRpYWw8UmVjb3JkPHN0cmluZywgU2VsZWN0Q29uZmlnT3ZlcnJpZGU+PjtcblxuLyoqIEtleXMgZm9yIGVhY2ggZHluYW1pYyBzZWxlY3QgaW4gdGVzdC1jYXNlLWRldGFpbHMtZWRpdC4gVXNlIHRoZXNlIHdpdGggc2VsZWN0Q29uZmlnT3ZlcnJpZGVzLiAqL1xuZXhwb3J0IGNvbnN0IFRFU1RfQ0FTRV9ERVRBSUxTX1NFTEVDVF9LRVlTID0ge1xuICBzdGF0dXM6ICdzdGF0dXMnLFxuICBwcmlvcml0eTogJ3ByaW9yaXR5JyxcbiAgdHlwZTogJ3R5cGUnLFxuICBsYWJlbHM6ICdsYWJlbHMnLFxuICBwcmVyZXF1aXNpdGVDYXNlczogJ3ByZXJlcXVpc2l0ZUNhc2VzJyxcbiAgdGVzdERhdGFQcm9maWxlOiAndGVzdERhdGFQcm9maWxlJyxcbiAgdGVzdERhdGFTZXQ6ICd0ZXN0RGF0YVNldCcsXG4gIHZpZGVvUmVjb3JkaW5nOiAndmlkZW9SZWNvcmRpbmcnLFxuICBlbmFibGVBaVNtYXJ0bmVzczogJ2VuYWJsZUFpU21hcnRuZXNzJyxcbiAgZGVmYXVsdEFpQWN0aW9uOiAnZGVmYXVsdEFpQWN0aW9uJyxcbiAga25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZTogJ2tub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2UnLFxuICB1c2VBaU1ldGFkYXRhOiAndXNlQWlNZXRhZGF0YScsXG4gIGRlZmF1bHRCcm93c2VyOiAnZGVmYXVsdEJyb3dzZXInLFxuICBkZWZhdWx0Vmlld3BvcnQ6ICdkZWZhdWx0Vmlld3BvcnQnLFxuICBkZXZpY2VUeXBlOiAnZGV2aWNlVHlwZScsXG4gIGRldmljZU9TOiAnZGV2aWNlT1MnLFxufSBhcyBjb25zdDtcblxuZXhwb3J0IGludGVyZmFjZSBUZXN0Q2FzZURldGFpbHNFZGl0Rm9ybURhdGEge1xuICBkZXNjcmlwdGlvbkNvbnRlbnQ6IHN0cmluZztcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIHByaW9yaXR5OiBzdHJpbmc7XG4gIHR5cGU/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGxhYmVsczogc3RyaW5nW107XG4gIHRlc3REYXRhUHJvZmlsZUlkPzogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbDtcbiAgdGVzdERhdGFTZXRJbmRleD86IG51bWJlciB8IHN0cmluZyB8IG51bGw7XG4gIGNvbmZpZ1NlY3Rpb25zOiBUZXN0Q2FzZURldGFpbHNDb25maWdTZWN0aW9uW107XG4gIGNvbmZpZ1NlY3Rpb25zUm93MjogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbltdO1xuICAvKiogXCJVc2UgbW9jayBBUEkgcmVzcG9uc2VzXCIgcm93IHN0YXRlLiBNdXR1YWxseSBleGNsdXNpdmUgd2l0aCBgYXBpTW9ja2luZ1N0b3JlTW9ja2Agd2hlbiB0cnVlLiAqL1xuICBhcGlNb2NraW5nUmVzdG9yZU1vY2s/OiBib29sZWFuO1xuICAvKiogXCJSZW5ldyBhbmQgc3RvcmUgQVBJIHJlc3BvbnNlc1wiIHJvdyBzdGF0ZS4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggYGFwaU1vY2tpbmdSZXN0b3JlTW9ja2Agd2hlbiB0cnVlLiAqL1xuICBhcGlNb2NraW5nU3RvcmVNb2NrPzogYm9vbGVhbjtcbn1cblxuY29uc3QgRlJFUVVFTlRMWV9VU0VEX0xBQkVMUyA9IFtcbiAgJ0Nhc2UnLFxuICAnQ3JpdGljYWwnLFxuICAnUE8nLFxuICAnVXBsb2FkJyxcbiAgJ1ZhbGlkYXRpb24nLFxuICAnUmV2aWV3JyxcbiAgJ0VkZ2UtY2FzZXMnLFxuICAnU2VjdXJpdHknLFxuICAnSW50ZWdyYXRpb24nLFxuICAnU21va2UnLFxuXTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXRlc3QtY2FzZS1kZXRhaWxzLWVkaXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGVzdC1jYXNlLWRldGFpbHMtZWRpdC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUZXN0Q2FzZURldGFpbHNFZGl0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICBASW5wdXQoKSBkZXNjcmlwdGlvblRpdGxlID0gJ0Rlc2NyaXB0aW9uJztcbiAgQElucHV0KCkgZGVzY3JpcHRpb25Db250ZW50ID0gJyc7XG4gIC8qKiBXaGVuIHRydWUsIGRlc2NyaXB0aW9uIHVzZXMgVHJpeCByaWNoIHRleHQgZWRpdG9yIChCb2xkLCBJdGFsaWMsIGV0Yy4pLiBIb3N0IGFwcCBtdXN0IGxvYWQgVHJpeC4gKi9cbiAgQElucHV0KCkgZW5hYmxlTWFya2Rvd24gPSBmYWxzZTtcbiAgQElucHV0KCkgbWV0YWRhdGFJdGVtczogVGVzdENhc2VEZXRhaWxzTWV0YWRhdGFJdGVtW10gPSBbXTtcbiAgQElucHV0KCkgbGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuICBASW5wdXQoKSBjb25maWdUaXRsZSA9ICdDb25maWd1cmF0aW9uJztcbiAgQElucHV0KCkgY29uZmlnU2VjdGlvbnM6IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb25bXSA9IFtdO1xuICBASW5wdXQoKSBjb25maWdTZWN0aW9uc1JvdzI6IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb25bXSA9IFtdO1xuICBASW5wdXQoKSBpc1NhdmluZyA9IGZhbHNlO1xuICAvKiogT3B0aW9uYWwgbGlzdCBvZiBwcmVyZXF1aXNpdGUgdGVzdCBjYXNlIG9wdGlvbnMgZm9yIHRoZSBtdWx0aS1zZWxlY3QuIElmIG5vdCBwcm92aWRlZCwgdXNlcyBkZWZhdWx0IHNhbXBsZSBvcHRpb25zLiAqL1xuICBASW5wdXQoKSBwcmVyZXF1aXNpdGVDYXNlT3B0aW9uczogeyB2YWx1ZTogc3RyaW5nOyBuYW1lOiBzdHJpbmcgfVtdID0gW107XG4gIC8qKiBQbGF0Zm9ybTogJ3dlYicgc2hvd3MgRGVmYXVsdCBCcm93c2VyICsgVmlld3BvcnQ7ICdtb2JpbGUnIHNob3dzIERldmljZSBUeXBlICsgT1MuIERlZmF1bHRzIHRvICd3ZWInLiAqL1xuICBASW5wdXQoKSBwbGF0Zm9ybTogJ3dlYicgfCAnbW9iaWxlJyA9ICd3ZWInO1xuXG4gIC8qKiBXaGVuIHRydWUsIGhpZGVzIFByaW9yaXR5LCBUeXBlLCBhbmQgVGVzdCBEYXRhIFNldCBmaWVsZHMgKHN0ZXAgZ3JvdXBzIGRvbid0IGhhdmUgdGhlc2UpLiBEZWZhdWx0cyB0byBmYWxzZS4gKi9cbiAgQElucHV0KCkgaXNTdGVwR3JvdXAgPSBmYWxzZTtcblxuICAvKipcbiAgICogT3ZlcnJpZGUgY29uZmlnIHBlciBzZWxlY3Qga2V5LiBVc2UgZm9yOlxuICAgKiAtIEFQSS1kcml2ZW4gb3B0aW9uczogcGFzcyBvcHRpb25zIGFycmF5ICh1cGRhdGUgd2hlbiBBUEkgcmV0dXJucylcbiAgICogLSBTZXJ2ZXItc2lkZSBzZWFyY2g6IHNlcnZlclNlYXJjaDogdHJ1ZSwgb25TZWFyY2ggaW4gb3ZlcnJpZGUgb3IgbGlzdGVuIHRvIHNlbGVjdFNlYXJjaFxuICAgKiAtIEluZmluaXRlIHNjcm9sbDogaGFzTW9yZTogdHJ1ZSwgb25Mb2FkTW9yZSBpbiBvdmVycmlkZSBvciBsaXN0ZW4gdG8gc2VsZWN0TG9hZE1vcmVcbiAgICogLSBJbml0aWFsIGZldGNoIG9uIG9wZW46IGluaXRpYWxGZXRjaE9uT3BlbjogdHJ1ZVxuICAgKi9cbiAgQElucHV0KCkgc2VsZWN0Q29uZmlnT3ZlcnJpZGVzOiBTZWxlY3RDb25maWdPdmVycmlkZXMgPSB7fTtcblxuICAvLyDilIDilIAgQVBJIE1vY2tpbmcgY2FyZCAoZWRpdCBtb2RlOiBzaG93cyB0d28gdG9nZ2xlcykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gIEBJbnB1dCgpIHNob3dBcGlNb2NraW5nQ2FyZCA9IGZhbHNlO1xuICBASW5wdXQoKSBhcGlNb2NraW5nVGl0bGUgPSAnQVBJIE1vY2tpbmcnO1xuICBASW5wdXQoKSBhcGlNb2NraW5nU3RhdHVzTGFiZWwgPSAnTm90IGNvbmZpZ3VyZWQnO1xuICBASW5wdXQoKSBhcGlNb2NraW5nQ2FwdHVyZUxhYmVsID0gJ1VzZSBtb2NrIEFQSSByZXNwb25zZXMnO1xuICBASW5wdXQoKSBhcGlNb2NraW5nQ2FwdHVyZUhpbnQgPSAnVXNlcyBzdG9yZWQgcmVzcG9uc2VzIG9uIG5leHQgcnVuLiBUdXJuIG9uIGFmdGVyIGNhcHR1cmUgY29tcGxldGVzLic7XG4gIEBJbnB1dCgpIGFwaU1vY2tpbmdSZW5ld0xhYmVsID0gJ1JlbmV3IGFuZCBzdG9yZSBBUEkgcmVzcG9uc2VzJztcbiAgQElucHV0KCkgYXBpTW9ja2luZ1JlbmV3SGludCA9ICdSZS1jYXB0dXJlcyBmcmVzaCByZXNwb25zZXMgb24gbmV4dCBydW4uIFR1cm5zIG9mZiBVc2UgbW9jay4nO1xuICAvKipcbiAgICogU2luZ2xlIHNvdXJjZSBvZiB0cnV0aCBmb3IgdGhlIGNhcmQncyBkdWFsIHRvZ2dsZSBzdGF0ZS5cbiAgICogICB0cnVlICDihpIgUmVuZXcgT04sIENhcHR1cmUgT0ZGXG4gICAqICAgZmFsc2Ug4oaSIFJlbmV3IE9GRiwgQ2FwdHVyZSBPTlxuICAgKi9cbiAgQElucHV0KCkgYXBpTW9ja2luZ1Jlc3RvcmVNb2NrID0gZmFsc2U7XG4gIC8qKiBcIlJlbmV3IGFuZCBzdG9yZSBBUEkgcmVzcG9uc2VzXCIg4oCUIG11dHVhbGx5IGV4Y2x1c2l2ZSB3aXRoIGBhcGlNb2NraW5nUmVzdG9yZU1vY2tgIHdoZW4gdHJ1ZS4gKi9cbiAgQElucHV0KCkgYXBpTW9ja2luZ1N0b3JlTW9jayA9IGZhbHNlO1xuICBASW5wdXQoKSBhcGlNb2NraW5nTW9ja2VkQXBpc0NvdW50ID0gMDtcbiAgQElucHV0KCkgYXBpTW9ja2luZ1RvdGFsQXBpc0NvdW50ID0gMDtcbiAgQElucHV0KCkgYXBpTW9ja2luZ1Byb2dyZXNzUGVyY2VudCA9IDA7XG4gIC8qKiBGb3J3YXJkZWQgdG8gYGNxYS1hcGktbW9ja2luZy1jYXJkYC4gSW4gZWRpdCBtb2RlIHRoZSBjYXJkIGhpZGVzIHRoZSBibG9jayBhbnl3YXksIGJ1dFxuICAgKiAgd2Ugc3RpbGwgcGlwZSB0aGUgaW5wdXQgdGhyb3VnaCBmb3Igc3ltbWV0cnkgd2l0aCB0aGUgcmVhZC1vbmx5IGNvbXBvbmVudC4gKi9cbiAgQElucHV0KCkgYXBpTW9ja2luZ1Nob3dQcm9ncmVzcyA9IGZhbHNlO1xuICBASW5wdXQoKSBhcGlNb2NraW5nU3VtbWFyeVRleHQ/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGFwaU1vY2tpbmdQZXJjZW50VGV4dD86IHN0cmluZztcblxuICAvKiogT3JnLWxldmVsIGRlZmF1bHQgZm9yIFRlc3QgQ2FzZSBUaW1lb3V0IChtaW51dGVzKS4gVXNlZCB0byBmbGFnIHRoZSBpbnB1dCBhcyBcIk9SRyBsZXZlbFwiIHZzIFwiQ3VzdG9tXCIuICovXG4gIEBJbnB1dCgpIG9yZ0xldmVsVGVzdENhc2VUaW1lb3V0Pzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbDtcblxuICBAT3V0cHV0KCkgc2F2ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGVzdENhc2VEZXRhaWxzRWRpdEZvcm1EYXRhPigpO1xuICBAT3V0cHV0KCkgY2FuY2VsID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBzZWFyY2hlcyBpbiBhIHNlbGVjdCAoc2VydmVyU2VhcmNoIG1vZGUpLiBDYWxsIEFQSSBhbmQgdXBkYXRlIG9wdGlvbnMgdmlhIHNlbGVjdENvbmZpZ092ZXJyaWRlcy4gKi9cbiAgQE91dHB1dCgpIHNlbGVjdFNlYXJjaCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZzsgcXVlcnk6IHN0cmluZyB9PigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gdXNlciBzY3JvbGxzIHRvIGxvYWQgbW9yZS4gQ2FsbCBBUEksIGFwcGVuZCB0byBvcHRpb25zIHZpYSBzZWxlY3RDb25maWdPdmVycmlkZXMuICovXG4gIEBPdXRwdXQoKSBzZWxlY3RMb2FkTW9yZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBrZXk6IHN0cmluZzsgcXVlcnk6IHN0cmluZyB9PigpO1xuXG4gIC8qKiBFbWl0dGVkIHdoZW4gYSBzZWxlY3QgcGFuZWwgaXMgb3BlbmVkLiBVc2UgdG8gY2FsbCBBUEkgZm9yIGluaXRpYWwgbG9hZCAoZS5nLiB3aGVuIGluaXRpYWxGZXRjaE9uT3BlbikuICovXG4gIEBPdXRwdXQoKSBzZWxlY3RPcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5OiBzdHJpbmcgfT4oKTtcblxuICAvKiogRW1pdHRlZCB3aGVuIHNlbGVjdGlvbiBjaGFuZ2VzIGluIGFueSBzZWxlY3QuICovXG4gIEBPdXRwdXQoKSBzZWxlY3Rpb25DaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0+KCk7XG5cbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGFkZHMgYSBuZXcgY3VzdG9tIGxhYmVsIHZpYSB0aGUgXCJOZXdcIiBvcHRpb24uICovXG4gIEBPdXRwdXQoKSBsYWJlbEFkZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgZmxpcHMgdGhlIFwiVXNlIG1vY2sgQVBJIHJlc3BvbnNlc1wiIHRvZ2dsZS4gKi9cbiAgQE91dHB1dCgpIGFwaU1vY2tpbmdSZXN0b3JlTW9ja0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB0aGUgdXNlciBmbGlwcyB0aGUgXCJSZW5ldyBhbmQgc3RvcmUgQVBJIHJlc3BvbnNlc1wiIHRvZ2dsZS4gKi9cbiAgQE91dHB1dCgpIGFwaU1vY2tpbmdTdG9yZU1vY2tDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIFwiQ29uZmlndXJlIE1vY2sgQVBJc1wiIG9uIHRoZSBlbWJlZGRlZCBjYXJkIGluIGVkaXQgbW9kZS4gKi9cbiAgQE91dHB1dCgpIGNvbmZpZ3VyZUFwaU1vY2tpbmcgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmKSB7fVxuXG4gIC8qKiBGb3JtIHN0YXRlICovXG4gIGVkaXREZXNjcmlwdGlvbiA9ICcnO1xuICBlZGl0U3RhdHVzID0gJyc7XG4gIGVkaXRQcmlvcml0eSA9ICcnO1xuICBlZGl0TGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuICAvKiogTG9jYWwgZWRpdC1tb2RlIG1pcnJvciBvZiB0aGUgYHJlc3RvcmVNb2NrYCBib29sZWFuLiBTZWVkZWQgZnJvbSBASW5wdXQoKSBvbiBpbml0L2NoYW5nZXMuICovXG4gIGVkaXRBcGlNb2NraW5nUmVzdG9yZU1vY2sgPSBmYWxzZTtcbiAgLyoqIExvY2FsIGVkaXQtbW9kZSBtaXJyb3Igb2YgdGhlIGBzdG9yZU1vY2tgIGJvb2xlYW4uICovXG4gIGVkaXRBcGlNb2NraW5nU3RvcmVNb2NrID0gZmFsc2U7XG4gIHRlc3RDYXNlVGltZW91dCA9ICcnO1xuICAvKiogJ29yZycg4oaSIGlucHV0IGRpc2FibGVkLCBwYXlsb2FkIHNlbmRzIG51bGwgZm9yIHRlc3RjYXNlVGltZW91dDsgJ2N1c3RvbScg4oaSIGlucHV0IGVuYWJsZWQsIHBheWxvYWQgc2VuZHMgdGhlIHR5cGVkIHZhbHVlLiAqL1xuICB0ZXN0Q2FzZVRpbWVvdXRNb2RlOiAnb3JnJyB8ICdjdXN0b20nID0gJ29yZyc7XG4gIHdhaXRUaW1lb3V0TG9jYXRvcnMgPSAnJztcbiAgYXV0b1dhaXRFbmFibGVkID0gZmFsc2U7XG4gIHJldHJ5RmFpbGVkU3RlcHMgPSAnJztcbiAgY29uZmlnRXhwYW5kZWQgPSB0cnVlO1xuICBleGVjdXRpb25FeHBhbmRlZCA9IHRydWU7XG4gIGFpQ29uZmlnRXhwYW5kZWQgPSB0cnVlO1xuICB3YWl0c1JldHJpZXNFeHBhbmRlZCA9IHRydWU7XG4gIGRldmljZUV4cGFuZGVkID0gdHJ1ZTtcbiAga2V5RmxhZ3NFeHBhbmRlZCA9IHRydWU7XG4gIG1vYmlsZVRlc3RpbmdFbmFibGVkID0gZmFsc2U7XG4gIGV4dGVuc2lvblVzZUVuYWJsZWQgPSBmYWxzZTtcbiAgZGF0YURyaXZlbkVuYWJsZWQgPSBmYWxzZTtcblxuICByZWFkb25seSBmcmVxdWVudGx5VXNlZExhYmVscyA9IEZSRVFVRU5UTFlfVVNFRF9MQUJFTFM7XG4gIHByaXZhdGUgX2luaXRpYWxGb3JtU25hcHNob3Q6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gIC8qKiBGb3JtR3JvdXAgZm9yIGNxYS1keW5hbWljLXNlbGVjdCBiaW5kaW5ncyAqL1xuICBlZGl0Rm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgIHN0YXR1czogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICBwcmlvcml0eTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICB0eXBlOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgIGxhYmVsczogbmV3IEZvcm1Db250cm9sKFtdIGFzIHN0cmluZ1tdKSxcbiAgICBwcmVyZXF1aXNpdGVDYXNlczogbmV3IEZvcm1Db250cm9sKFtdIGFzIHN0cmluZ1tdKSxcbiAgICB0ZXN0RGF0YVByb2ZpbGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgdGVzdERhdGFTZXQ6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgZGVmYXVsdEJyb3dzZXI6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgdmlkZW9SZWNvcmRpbmc6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgZGVmYXVsdFZpZXdwb3J0OiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgIGRldmljZVR5cGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgZGV2aWNlT1M6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgZW5hYmxlQWlTbWFydG5lc3M6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgZGVmYXVsdEFpQWN0aW9uOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgIGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2U6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgdXNlQWlNZXRhZGF0YTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgfSk7XG5cbiAgZ2V0IHN0YXR1c0l0ZW0oKTogVGVzdENhc2VEZXRhaWxzTWV0YWRhdGFJdGVtIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhZGF0YUl0ZW1zLmZpbmQoKG0pID0+IG0ubGFiZWwgPT09ICdTdGF0dXMnKTtcbiAgfVxuXG4gIGdldCBwcmlvcml0eUl0ZW0oKTogVGVzdENhc2VEZXRhaWxzTWV0YWRhdGFJdGVtIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhZGF0YUl0ZW1zLmZpbmQoKG0pID0+IG0ubGFiZWwgPT09ICdQcmlvcml0eScpO1xuICB9XG5cbiAgZ2V0IHR5cGVJdGVtKCk6IFRlc3RDYXNlRGV0YWlsc01ldGFkYXRhSXRlbSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMubWV0YWRhdGFJdGVtcy5maW5kKChtKSA9PiBtLmxhYmVsID09PSAnVHlwZScpO1xuICB9XG5cbiAgZ2V0IHN0YXR1c09wdGlvbnMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbJ0RyYWZ0JywgJ0luIFJldmlldycsICdBcHByb3ZlZCcsICdBY3RpdmUnLCAnSW5hY3RpdmUnLCAnQmxvY2tlZCddO1xuICB9XG5cbiAgZ2V0IHByaW9yaXR5T3B0aW9ucygpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsnQ3JpdGljYWwnLCAnTWFqb3InLCAnSGlnaCcsICdNZWRpdW0nLCAnTG93JywgJ01pbm9yJywgJ05vdCBzZXQnXTtcbiAgfVxuXG4gIC8qKiBDYWNoZWQgY29uZmlncyB0byBhdm9pZCBuZXcgb2JqZWN0IHJlZnMgZWFjaCBjaGFuZ2UgZGV0ZWN0aW9uIChwcmV2ZW50cyBpbmZpbml0ZSBsb29wcykgKi9cbiAgcmVhZG9ubHkgc3RhdHVzU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAnc3RhdHVzJyxcbiAgICBsYWJlbDogJycsXG4gICAgcGxhY2Vob2xkZXI6ICdTdGF0dXMnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICdEcmFmdCcsIG5hbWU6ICdEcmFmdCcgfSxcbiAgICAgIHsgdmFsdWU6ICdJbiBSZXZpZXcnLCBuYW1lOiAnSW4gUmV2aWV3JyB9LFxuICAgICAgeyB2YWx1ZTogJ0FwcHJvdmVkJywgbmFtZTogJ0FwcHJvdmVkJyB9LFxuICAgICAgeyB2YWx1ZTogJ0FjdGl2ZScsIG5hbWU6ICdBY3RpdmUnIH0sXG4gICAgICB7IHZhbHVlOiAnSW5hY3RpdmUnLCBuYW1lOiAnSW5hY3RpdmUnIH0sXG4gICAgICB7IHZhbHVlOiAnQmxvY2tlZCcsIG5hbWU6ICdCbG9ja2VkJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgcmVhZG9ubHkgdHlwZVNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ3R5cGUnLFxuICAgIGxhYmVsOiAnJyxcbiAgICBwbGFjZWhvbGRlcjogJ1R5cGUnLFxuICAgIHNlYXJjaGFibGU6IHRydWUsXG4gICAgb3B0aW9uczogW10sXG4gIH07XG5cbiAgcmVhZG9ubHkgdGVzdERhdGFQcm9maWxlU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAndGVzdERhdGFQcm9maWxlJyxcbiAgICBsYWJlbDogJycsXG4gICAgcGxhY2Vob2xkZXI6ICdUZXN0IERhdGEgUHJvZmlsZScsXG4gICAgc2VhcmNoYWJsZTogdHJ1ZSxcbiAgICBvcHRpb25zOiBbXSxcbiAgfTtcblxuICByZWFkb25seSB0ZXN0RGF0YVNldFNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ3Rlc3REYXRhU2V0JyxcbiAgICBsYWJlbDogJycsXG4gICAgcGxhY2Vob2xkZXI6ICdUZXN0IERhdGEgU2V0JyxcbiAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgIG9wdGlvbnM6IFtdLFxuICB9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVmYXVsdFByZXJlcXVpc2l0ZUNhc2VPcHRpb25zID0gW1xuICAgIHsgdmFsdWU6ICdUQy0wMDEnLCBuYW1lOiAnVEMtMDAxOiBMb2dpbiBmbG93JyB9LFxuICAgIHsgdmFsdWU6ICdUQy0wMDInLCBuYW1lOiAnVEMtMDAyOiBVc2VyIHJlZ2lzdHJhdGlvbicgfSxcbiAgICB7IHZhbHVlOiAnVEMtMDAzJywgbmFtZTogJ1RDLTAwMzogUGFzc3dvcmQgcmVzZXQnIH0sXG4gICAgeyB2YWx1ZTogJ1RDLTAwNCcsIG5hbWU6ICdUQy0wMDQ6IERhc2hib2FyZCBsb2FkJyB9LFxuICAgIHsgdmFsdWU6ICdUQy0wMDUnLCBuYW1lOiAnVEMtMDA1OiBBUEkgaGVhbHRoIGNoZWNrJyB9LFxuICBdO1xuXG4gIHJlYWRvbmx5IHZpZGVvUmVjb3JkaW5nU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAndmlkZW9SZWNvcmRpbmcnLFxuICAgIGxhYmVsOiAnUmVjb3JkIHRlc3QgZXhlY3V0aW9uIHZpZGVvJyxcbiAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCcsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyB2YWx1ZTogJ3RydWUnLCBuYW1lOiAnVHJ1ZScgfSxcbiAgICAgIHsgdmFsdWU6ICdmYWxzZScsIG5hbWU6ICdGYWxzZScgfSxcbiAgICAgIHsgdmFsdWU6ICdPcmcgbGV2ZWwnLCBuYW1lOiAnT3JnIGxldmVsJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgcmVhZG9ubHkgYWlNZXRhZGF0YUNvbGxlY3Rpb25TZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICd1c2VBaU1ldGFkYXRhJyxcbiAgICBsYWJlbDogJ0VuYWJsZSBBSSBtZXRhZGF0YSBjb2xsZWN0aW9uJyxcbiAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCcsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyB2YWx1ZTogJ3RydWUnLCBuYW1lOiAnVHJ1ZScgfSxcbiAgICAgIHsgdmFsdWU6ICdmYWxzZScsIG5hbWU6ICdGYWxzZScgfSxcbiAgICAgIHsgdmFsdWU6ICdPcmcgbGV2ZWwnLCBuYW1lOiAnT3JnIGxldmVsJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgLyoqIENhY2hlZCBsYWJlbHMgY29uZmlnIHRvIGF2b2lkIG5ldyBvYmplY3Qgb24gZXZlcnkgQ0QgKHByZXZlbnRzIGZyZWV6ZSkgKi9cbiAgcHJpdmF0ZSBfbGFiZWxzU2VsZWN0Q29uZmlnQ2FjaGU6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIF9sYWJlbHNTZWxlY3RDb25maWdEaXJ0eSA9IHRydWU7XG5cbiAgLyoqIExhYmVscyBtdWx0aS1zZWxlY3Q6IG9wdGlvbnMgPSBmcmVxdWVudGx5IHVzZWQgKyBjdXJyZW50ICsgQVBJIG9wdGlvbnMgZnJvbSBzZWxlY3RDb25maWdPdmVycmlkZXMgKi9cbiAgZ2V0IGxhYmVsc1NlbGVjdENvbmZpZygpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIGlmICghdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnRGlydHkgJiYgdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnQ2FjaGUpIHJldHVybiB0aGlzLl9sYWJlbHNTZWxlY3RDb25maWdDYWNoZTtcbiAgICBjb25zdCBvdmVycmlkZSA9IHRoaXMuc2VsZWN0Q29uZmlnT3ZlcnJpZGVzW1RFU1RfQ0FTRV9ERVRBSUxTX1NFTEVDVF9LRVlTLmxhYmVsc107XG4gICAgY29uc3QgYXBpT3B0aW9ucyA9IG92ZXJyaWRlPy5vcHRpb25zID8/IFtdO1xuICAgIGNvbnN0IGFsbExhYmVscyA9IG5ldyBTZXQ8c3RyaW5nPihbXG4gICAgICAuLi50aGlzLmZyZXF1ZW50bHlVc2VkTGFiZWxzLFxuICAgICAgLi4udGhpcy5lZGl0TGFiZWxzLFxuICAgICAgLi4uYXBpT3B0aW9ucy5tYXAoKG8pID0+IFN0cmluZyhvLm5hbWUgPz8gby52YWx1ZSA/PyAnJykudHJpbSgpKS5maWx0ZXIoQm9vbGVhbiksXG4gICAgXSk7XG4gICAgY29uc3Qgb3B0aW9ucyA9IEFycmF5LmZyb20oYWxsTGFiZWxzKVxuICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSlcbiAgICAgIC5tYXAoKHYpID0+ICh7IHZhbHVlOiB2LCBuYW1lOiB2IH0pKTtcbiAgICB0aGlzLl9sYWJlbHNTZWxlY3RDb25maWdDYWNoZSA9IHtcbiAgICAgIGtleTogJ2xhYmVscycsXG4gICAgICBsYWJlbDogJycsXG4gICAgICBwbGFjZWhvbGRlcjogJ1NlYXJjaCBsYWJlbHMgdG8gYWRkIC4uLi4uLicsXG4gICAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgICAgbXVsdGlwbGU6IHRydWUsXG4gICAgICBvcHRpb25TdHlsZTogJ2NoZWNrYm94JyxcbiAgICAgIGFsbG93Q3VzdG9tVmFsdWU6IHRydWUsXG4gICAgICBvcHRpb25zLFxuICAgIH07XG4gICAgdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnRGlydHkgPSBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnQ2FjaGU7XG4gIH1cblxuICBwcmVyZXF1aXNpdGVDYXNlU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAncHJlcmVxdWlzaXRlQ2FzZXMnLFxuICAgIGxhYmVsOiAnUHJlcmVxdWlzaXRlIENhc2UnLFxuICAgIHBsYWNlaG9sZGVyOiAnU2VsZWN0JyxcbiAgICBzZWFyY2hhYmxlOiB0cnVlLFxuICAgIG11bHRpcGxlOiB0cnVlLFxuICAgIG9wdGlvblN0eWxlOiAnY2hlY2tib3gnLFxuICAgIHNob3dTZWxlY3RBbGw6IHRydWUsXG4gICAgc2VsZWN0QWxsTGFiZWw6ICdBbGwnLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICdUQy0wMDEnLCBuYW1lOiAnVEMtMDAxOiBMb2dpbiBmbG93JyB9LFxuICAgICAgeyB2YWx1ZTogJ1RDLTAwMicsIG5hbWU6ICdUQy0wMDI6IFVzZXIgcmVnaXN0cmF0aW9uJyB9LFxuICAgICAgeyB2YWx1ZTogJ1RDLTAwMycsIG5hbWU6ICdUQy0wMDM6IFBhc3N3b3JkIHJlc2V0JyB9LFxuICAgICAgeyB2YWx1ZTogJ1RDLTAwNCcsIG5hbWU6ICdUQy0wMDQ6IERhc2hib2FyZCBsb2FkJyB9LFxuICAgICAgeyB2YWx1ZTogJ1RDLTAwNScsIG5hbWU6ICdUQy0wMDU6IEFQSSBoZWFsdGggY2hlY2snIH0sXG4gICAgXSxcbiAgfTtcblxuICByZWFkb25seSBkZWZhdWx0Vmlld3BvcnRTZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICdkZWZhdWx0Vmlld3BvcnQnLFxuICAgIGxhYmVsOiAnRGVmYXVsdCBWaWV3cG9ydCcsXG4gICAgcGxhY2Vob2xkZXI6ICdTZWxlY3QnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICcxMjgweDcyMCcsIG5hbWU6ICcxMjgweDcyMCcgfSxcbiAgICBdLFxuICB9O1xuXG4gIHJlYWRvbmx5IGRldmljZVR5cGVTZWxlY3RDb25maWc6IER5bmFtaWNTZWxlY3RGaWVsZENvbmZpZyA9IHtcbiAgICBrZXk6ICdkZXZpY2VUeXBlJyxcbiAgICBsYWJlbDogJ0RldmljZSBUeXBlJyxcbiAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCcsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyB2YWx1ZTogJ2lQaG9uZSAxNCcsIG5hbWU6ICdpUGhvbmUgMTQnIH0sXG4gICAgICB7IHZhbHVlOiAnaVBob25lIDE1JywgbmFtZTogJ2lQaG9uZSAxNScgfSxcbiAgICAgIHsgdmFsdWU6ICdpUGhvbmUgMTcnLCBuYW1lOiAnaVBob25lIDE3JyB9LFxuICAgICAgeyB2YWx1ZTogJ0lwaG9uZSAxNycsIG5hbWU6ICdJcGhvbmUgMTcnIH0sXG4gICAgICB7IHZhbHVlOiAnU2Ftc3VuZyBHYWxheHknLCBuYW1lOiAnU2Ftc3VuZyBHYWxheHknIH0sXG4gICAgICB7IHZhbHVlOiAnUGl4ZWwnLCBuYW1lOiAnUGl4ZWwnIH0sXG4gICAgXSxcbiAgfTtcblxuICByZWFkb25seSBkZXZpY2VPU1NlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ2RldmljZU9TJyxcbiAgICBsYWJlbDogJ09TJyxcbiAgICBwbGFjZWhvbGRlcjogJ1NlbGVjdCcsXG4gICAgc2VhcmNoYWJsZTogZmFsc2UsXG4gICAgb3B0aW9uczogW1xuICAgICAgeyB2YWx1ZTogJ2lwYScsIG5hbWU6ICdpT1MgKGlwYSknIH0sXG4gICAgICB7IHZhbHVlOiAnYXBrJywgbmFtZTogJ0FuZHJvaWQgKGFwayknIH0sXG4gICAgICB7IHZhbHVlOiAnaU9TIDE2JywgbmFtZTogJ2lPUyAxNicgfSxcbiAgICAgIHsgdmFsdWU6ICdpT1MgMTcnLCBuYW1lOiAnaU9TIDE3JyB9LFxuICAgICAgeyB2YWx1ZTogJ0FuZHJvaWQgMTMnLCBuYW1lOiAnQW5kcm9pZCAxMycgfSxcbiAgICAgIHsgdmFsdWU6ICdBbmRyb2lkIDE0JywgbmFtZTogJ0FuZHJvaWQgMTQnIH0sXG4gICAgXSxcbiAgfTtcblxuICByZWFkb25seSBkZWZhdWx0QnJvd3NlclNlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ2RlZmF1bHRCcm93c2VyJyxcbiAgICBsYWJlbDogJ0RlZmF1bHQgQnJvd3NlcicsXG4gICAgcGxhY2Vob2xkZXI6ICdDaHJvbWUnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICdDaHJvbWUnLCBuYW1lOiAnQ2hyb21lJyB9LFxuICAgICAgeyB2YWx1ZTogJ0ZpcmVmb3gnLCBuYW1lOiAnRmlyZWZveCcgfSxcbiAgICAgIHsgdmFsdWU6ICdTYWZhcmknLCBuYW1lOiAnU2FmYXJpJyB9LFxuICAgICAgeyB2YWx1ZTogJ0VkZ2UnLCBuYW1lOiAnRWRnZScgfSxcbiAgICBdLFxuICB9O1xuXG4gIHJlYWRvbmx5IHByaW9yaXR5U2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAncHJpb3JpdHknLFxuICAgIGxhYmVsOiAnJyxcbiAgICBwbGFjZWhvbGRlcjogJ1ByaW9yaXR5JyxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICBvcHRpb25zOiBbXG4gICAgICB7IHZhbHVlOiAnQ3JpdGljYWwnLCBuYW1lOiAnQ3JpdGljYWwnIH0sXG4gICAgICB7IHZhbHVlOiAnTWFqb3InLCBuYW1lOiAnTWFqb3InIH0sXG4gICAgICB7IHZhbHVlOiAnSGlnaCcsIG5hbWU6ICdIaWdoJyB9LFxuICAgICAgeyB2YWx1ZTogJ01lZGl1bScsIG5hbWU6ICdNZWRpdW0nIH0sXG4gICAgICB7IHZhbHVlOiAnTG93JywgbmFtZTogJ0xvdycgfSxcbiAgICAgIHsgdmFsdWU6ICdNaW5vcicsIG5hbWU6ICdNaW5vcicgfSxcbiAgICAgIHsgdmFsdWU6ICdOb3Qgc2V0JywgbmFtZTogJ05vdCBzZXQnIH0sXG4gICAgXSxcbiAgfTtcblxuICByZWFkb25seSBlbmFibGVBaVNtYXJ0bmVzc1NlbGVjdENvbmZpZzogRHluYW1pY1NlbGVjdEZpZWxkQ29uZmlnID0ge1xuICAgIGtleTogJ2VuYWJsZUFpU21hcnRuZXNzJyxcbiAgICBsYWJlbDogJ0VuYWJsZSBBSSBTbWFydG5lc3MnLFxuICAgIHBsYWNlaG9sZGVyOiAnQWR2YW5jZWQnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICdCYXNpYycsIG5hbWU6ICdCYXNpYycgfSxcbiAgICAgIHsgdmFsdWU6ICdBZHZhbmNlZCcsIG5hbWU6ICdBZHZhbmNlZCcgfSxcbiAgICAgIHsgdmFsdWU6ICdPZmYnLCBuYW1lOiAnT2ZmJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgcmVhZG9ubHkgZGVmYXVsdEFpQWN0aW9uU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAnZGVmYXVsdEFpQWN0aW9uJyxcbiAgICBsYWJlbDogJ0RlZmF1bHQgQUkgQWN0aW9uJyxcbiAgICBwbGFjZWhvbGRlcjogJ1NtYXJ0IHdhaXQnLFxuICAgIHNlYXJjaGFibGU6IGZhbHNlLFxuICAgIG9wdGlvbnM6IFtcbiAgICAgIHsgdmFsdWU6ICdTbWFydCB3YWl0JywgbmFtZTogJ1NtYXJ0IHdhaXQnIH0sXG4gICAgICB7IHZhbHVlOiAnU21hcnQgV2FpdCcsIG5hbWU6ICdTbWFydCBXYWl0JyB9LFxuICAgICAgeyB2YWx1ZTogJ1dhaXQgZm9yIGVsZW1lbnQnLCBuYW1lOiAnV2FpdCBmb3IgZWxlbWVudCcgfSxcbiAgICAgIHsgdmFsdWU6ICdSZXRyeScsIG5hbWU6ICdSZXRyeScgfSxcbiAgICAgIHsgdmFsdWU6ICdTa2lwJywgbmFtZTogJ1NraXAnIH0sXG4gICAgXSxcbiAgfTtcblxuICByZWFkb25seSBrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlU2VsZWN0Q29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAga2V5OiAna25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZScsXG4gICAgbGFiZWw6ICdLbm93bGVkZ2UgQmFzZSBEZWZhdWx0IFRlc3QgQ2FzZScsXG4gICAgcGxhY2Vob2xkZXI6ICdOb25lJyxcbiAgICBzZWFyY2hhYmxlOiBmYWxzZSxcbiAgICBvcHRpb25zOiBbXG4gICAgICB7IHZhbHVlOiAnbm9uZScsIG5hbWU6ICdOb25lJyB9LFxuICAgIF0sXG4gIH07XG5cbiAgLyoqXG4gICAqIFJldHVybnMgbWVyZ2VkIGNvbmZpZyBmb3IgYSBzZWxlY3Q6IGJhc2UgY29uZmlnICsgb3ZlcnJpZGUuXG4gICAqIFdpcmVzIG9uU2VhcmNoLCBvbkxvYWRNb3JlIHRvIGJvdGggb3ZlcnJpZGUgY2FsbGJhY2tzIGFuZCBvdXRwdXQgZXZlbnRzLlxuICAgKi9cbiAgZ2V0Q29uZmlnRm9yU2VsZWN0KGtleTogc3RyaW5nLCBiYXNlQ29uZmlnOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcpOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcge1xuICAgIGNvbnN0IG92ZXJyaWRlID0gdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LltrZXldO1xuICAgIGlmICghb3ZlcnJpZGUpIHJldHVybiBiYXNlQ29uZmlnO1xuXG4gICAgY29uc3QgbWVyZ2VkOiBEeW5hbWljU2VsZWN0RmllbGRDb25maWcgPSB7XG4gICAgICAuLi5iYXNlQ29uZmlnLFxuICAgICAgLi4ub3ZlcnJpZGUsXG4gICAgICBvcHRpb25zOiBvdmVycmlkZS5vcHRpb25zID8/IGJhc2VDb25maWcub3B0aW9ucyxcbiAgICAgIGtleTogYmFzZUNvbmZpZy5rZXksXG4gICAgfTtcblxuICAgIGlmIChvdmVycmlkZS5zZXJ2ZXJTZWFyY2ggfHwgb3ZlcnJpZGUub25TZWFyY2gpIHtcbiAgICAgIG1lcmdlZC5vblNlYXJjaCA9IChxdWVyeSkgPT4ge1xuICAgICAgICBvdmVycmlkZS5vblNlYXJjaD8uKHF1ZXJ5KTtcbiAgICAgICAgdGhpcy5zZWxlY3RTZWFyY2guZW1pdCh7IGtleSwgcXVlcnkgfSk7XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAob3ZlcnJpZGUuaGFzTW9yZSB8fCBvdmVycmlkZS5vbkxvYWRNb3JlKSB7XG4gICAgICBtZXJnZWQub25Mb2FkTW9yZSA9IChxdWVyeT86IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBxID0gcXVlcnkgPz8gJyc7XG4gICAgICAgIG92ZXJyaWRlLm9uTG9hZE1vcmU/LihxKTtcbiAgICAgICAgdGhpcy5zZWxlY3RMb2FkTW9yZS5lbWl0KHsga2V5LCBxdWVyeTogcSB9KTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfVxuXG4gIG9uU2VsZWN0T3BlbmVkKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RPcGVuZWQuZW1pdCh7IGtleSB9KTtcbiAgfVxuXG4gIG9uU2VsZWN0U2VhcmNoKGV2ZW50OiB7IGtleTogc3RyaW5nOyBxdWVyeTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdFNlYXJjaC5lbWl0KGV2ZW50KTtcbiAgICBjb25zdCBvdmVycmlkZSA9IHRoaXMuc2VsZWN0Q29uZmlnT3ZlcnJpZGVzPy5bZXZlbnQua2V5XTtcbiAgICBvdmVycmlkZT8ub25TZWFyY2g/LihldmVudC5xdWVyeSk7XG4gIH1cblxuICBvblNlbGVjdExvYWRNb3JlKGV2ZW50OiB7IGtleTogc3RyaW5nOyBxdWVyeTogc3RyaW5nIH0pOiB2b2lkIHtcbiAgICB0aGlzLnNlbGVjdExvYWRNb3JlLmVtaXQoZXZlbnQpO1xuICAgIGNvbnN0IG92ZXJyaWRlID0gdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LltldmVudC5rZXldO1xuICAgIG92ZXJyaWRlPy5vbkxvYWRNb3JlPy4oZXZlbnQucXVlcnkpO1xuICB9XG5cbiAgb25TZWxlY3Rpb25DaGFuZ2UoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSBURVNUX0NBU0VfREVUQUlMU19TRUxFQ1RfS0VZUy5sYWJlbHMpIHtcbiAgICAgIGNvbnN0IHZhbCA9IGV2ZW50LnZhbHVlO1xuICAgICAgdGhpcy5lZGl0TGFiZWxzID0gQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsLm1hcCgodikgPT4gU3RyaW5nKHYpKS5maWx0ZXIoQm9vbGVhbikgOiB2YWwgIT0gbnVsbCA/IFtTdHJpbmcodmFsKV0gOiBbXTtcbiAgICAgIHRoaXMuX2xhYmVsc1NlbGVjdENvbmZpZ0RpcnR5ID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgICAvLyBNYXJrIFRlc3QgRGF0YSBzZWxlY3RzIGFzIGRpcnR5IHNvIGxhdGVyIGlucHV0IGNoYW5nZXMgKG9wdGlvbnMvY29uZmlnKSBkb24ndCBvdmVyd3JpdGUgdXNlciBjaG9pY2VcbiAgICBpZiAoZXZlbnQua2V5ID09PSBURVNUX0NBU0VfREVUQUlMU19TRUxFQ1RfS0VZUy50ZXN0RGF0YVByb2ZpbGUgfHwgZXZlbnQua2V5ID09PSBURVNUX0NBU0VfREVUQUlMU19TRUxFQ1RfS0VZUy50ZXN0RGF0YVNldCkge1xuICAgICAgY29uc3QgY3RybCA9IHRoaXMuZWRpdEZvcm0uZ2V0KGV2ZW50LmtleSk7XG4gICAgICBjdHJsPy5tYXJrQXNEaXJ0eSgpO1xuICAgIH1cbiAgICB0aGlzLnNlbGVjdGlvbkNoYW5nZS5lbWl0KHsga2V5OiBldmVudC5rZXksIHZhbHVlOiBldmVudC52YWx1ZSB9KTtcbiAgfVxuXG4gIG9uTGFiZWxzQWRkQ3VzdG9tVmFsdWUoZXZlbnQ6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfSk6IHZvaWQge1xuICAgIGNvbnN0IHYgPSAoZXZlbnQudmFsdWUgfHwgJycpLnRyaW0oKTtcbiAgICBpZiAoIXYgfHwgdGhpcy5lZGl0TGFiZWxzLmluY2x1ZGVzKHYpKSByZXR1cm47XG4gICAgdGhpcy5lZGl0TGFiZWxzID0gWy4uLnRoaXMuZWRpdExhYmVscywgdl07XG4gICAgdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZWRpdEZvcm0uZ2V0KFRFU1RfQ0FTRV9ERVRBSUxTX1NFTEVDVF9LRVlTLmxhYmVscyk/LnNldFZhbHVlKHRoaXMuZWRpdExhYmVscywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMubGFiZWxBZGRlZC5lbWl0KHYpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb25maWdJdGVtVmFsdWUoc2VjdGlvblRpdGxlOiBzdHJpbmcsIGl0ZW1MYWJlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWN0aW9uID0gWy4uLnRoaXMuY29uZmlnU2VjdGlvbnMsIC4uLnRoaXMuY29uZmlnU2VjdGlvbnNSb3cyXS5maW5kKFxuICAgICAgKHMpID0+XG4gICAgICAgIHMudGl0bGUgPT09IHNlY3Rpb25UaXRsZSB8fFxuICAgICAgICBzLnRpdGxlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlY3Rpb25UaXRsZS50b0xvd2VyQ2FzZSgpKVxuICAgICk7XG4gICAgY29uc3QgaXRlbSA9IHNlY3Rpb24/Lml0ZW1zPy5maW5kKFxuICAgICAgKGkpID0+XG4gICAgICAgIGkubGFiZWwgPT09IGl0ZW1MYWJlbCB8fFxuICAgICAgICBpLmxhYmVsPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGl0ZW1MYWJlbC50b0xvd2VyQ2FzZSgpKVxuICAgICk7XG4gICAgcmV0dXJuIChpdGVtPy52YWx1ZSBhcyBzdHJpbmcpID8/ICcnO1xuICB9XG5cbiAgLyoqIEdldCB2YWx1ZSBmcm9tIERldmljZSBzZWN0aW9uIC0gc3VwcG9ydHMgYm90aCAnRGV2aWNlJyBhbmQgJ0RldmljZSBTZXR0aW5nJyB0aXRsZXMgKi9cbiAgcHJpdmF0ZSBnZXREZXZpY2VDb25maWdWYWx1ZShpdGVtTGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgdmFsID1cbiAgICAgIHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdEZXZpY2UnLCBpdGVtTGFiZWwpIHx8XG4gICAgICB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRGV2aWNlIFNldHRpbmcnLCBpdGVtTGFiZWwpO1xuICAgIHJldHVybiB2YWwgIT0gbnVsbCAmJiB2YWwgIT09ICcnICYmIFN0cmluZyh2YWwpLnRyaW0oKSAhPT0gJycgPyBTdHJpbmcodmFsKSA6ICcnO1xuICB9XG5cbiAgLyoqIEdldCB2YWx1ZSBmcm9tIFdhaXRzIHNlY3Rpb24gLSBzdXBwb3J0cyBib3RoICdXYWl0IGFuZCByZXRyaWVzJyBhbmQgJ1dhaXRzICYgUmV0cmllcycgdGl0bGVzICovXG4gIHByaXZhdGUgZ2V0V2FpdHNSZXRyaWVzVmFsdWUoaXRlbUxhYmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHYxID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ1dhaXQgYW5kIHJldHJpZXMnLCBpdGVtTGFiZWwpO1xuICAgIGNvbnN0IHYyID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ1dhaXRzICYgUmV0cmllcycsIGl0ZW1MYWJlbCk7XG4gICAgbGV0IHZhbCA9ICh2MSAhPT0gJycgJiYgdjEgIT0gbnVsbCkgPyB2MSA6IHYyO1xuXG4gICAgLy8gV2hlbiB2YWx1ZXMgYXJlIGNvbWluZyBmcm9tIG9yZ2FuaXphdGlvbiBzZXR0aW5ncywgdGhlIHBvcnRhbCB3cmFwcyB0aGVtIGFzXG4gICAgLy8gXCJPcmcgTGV2ZWwgKEFDVFVBTCBWQUxVRSlcIi4gRm9yIGVkaXQgaW5wdXRzIChSZXRyeSBGYWlsZWQgU3RlcHMsIFRlc3QgQ2FzZSBUaW1lb3V0LFxuICAgIC8vIFdhaXQgVGltZW91dCBmb3IgTG9jYXRvcnMpLCB3ZSBvbmx5IHdhbnQgdG8gc2hvdyB0aGUgaW5uZXIgdmFsdWUsIG5vdCB0aGUgd3JhcHBlci5cbiAgICBpZiAodmFsICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IHJhdyA9IFN0cmluZyh2YWwpLnRyaW0oKTtcbiAgICAgIGNvbnN0IGxvd2VyID0gcmF3LnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCBwcmVmaXggPSAnb3JnIGxldmVsICgnO1xuICAgICAgaWYgKGxvd2VyLnN0YXJ0c1dpdGgocHJlZml4KSkge1xuICAgICAgICBjb25zdCBvcGVuSWR4ID0gcmF3LmluZGV4T2YoJygnKTtcbiAgICAgICAgY29uc3QgY2xvc2VJZHggPSByYXcubGFzdEluZGV4T2YoJyknKTtcbiAgICAgICAgaWYgKG9wZW5JZHggPj0gMCAmJiBjbG9zZUlkeCA+IG9wZW5JZHgpIHtcbiAgICAgICAgICB2YWwgPSByYXcuc3Vic3RyaW5nKG9wZW5JZHggKyAxLCBjbG9zZUlkeCkudHJpbSgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhbCA9IHJhdy5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCkudHJpbSgpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbCAhPSBudWxsICYmIHZhbCAhPT0gJycgJiYgU3RyaW5nKHZhbCkudHJpbSgpICE9PSAnJyA/IFN0cmluZyh2YWwpIDogJyc7XG4gIH1cblxuICAvKiogU3RyaXAgdHJhaWxpbmcgJ3MnIGZyb20gdmFsdWUgKGUuZy4gXCIxMHNcIiAtPiBcIjEwXCIpIGZvciBkaXNwbGF5IGluIHRpbWVvdXQgaW5wdXRzICovXG4gIHByaXZhdGUgc3RyaXBUcmFpbGluZ1VuaXRTKHZhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodmFsID09IG51bGwgfHwgdmFsID09PSAnJykgcmV0dXJuIHZhbDtcbiAgICBjb25zdCBzID0gU3RyaW5nKHZhbCkudHJpbSgpO1xuICAgIHJldHVybiBzLnJlcGxhY2UoL1xccypzJC9pLCAnJyk7XG4gIH1cblxuICByZWFkb25seSB0ZXN0Q2FzZVRpbWVvdXRNb2RlT3B0aW9uczogRHJvcGRvd25PcHRpb25bXSA9IFtcbiAgICB7IGxhYmVsOiAnT1JHIGxldmVsJywgdmFsdWU6ICdvcmcnIH0sXG4gICAgeyBsYWJlbDogJ0N1c3RvbScsIHZhbHVlOiAnY3VzdG9tJyB9LFxuICBdO1xuXG4gIC8qKiBWYWx1ZSBzaG93biBpbiB0aGUgZGlzYWJsZWQgKG9yZykgb3IgZW5hYmxlZCAoY3VzdG9tKSBUZXN0IENhc2UgVGltZW91dCBpbnB1dC4gKi9cbiAgZ2V0IHRlc3RDYXNlVGltZW91dERpc3BsYXlWYWx1ZSgpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLnRlc3RDYXNlVGltZW91dE1vZGUgPT09ICdvcmcnKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcmdMZXZlbFRlc3RDYXNlVGltZW91dCAhPSBudWxsID8gU3RyaW5nKHRoaXMub3JnTGV2ZWxUZXN0Q2FzZVRpbWVvdXQpIDogJyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnRlc3RDYXNlVGltZW91dDtcbiAgfVxuXG4gIG9uVGVzdENhc2VUaW1lb3V0TW9kZUNoYW5nZShtb2RlOiAnb3JnJyB8ICdjdXN0b20nKTogdm9pZCB7XG4gICAgdGhpcy50ZXN0Q2FzZVRpbWVvdXRNb2RlID0gbW9kZTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIC8qKiBUcnVlIHdoZW4gdGhlIHBvcnRhbCB3cmFwcGVkIHRoZSBUZXN0IENhc2UgVGltZW91dCB2YWx1ZSBhcyBcIk9yZyBMZXZlbCAoLi4uKVwiLCBtZWFuaW5nIHRoZSBUQyBBUEkgcmV0dXJuZWQgbnVsbC4gKi9cbiAgcHJpdmF0ZSBpc1Rlc3RDYXNlVGltZW91dEZyb21PcmcoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcmF3ID1cbiAgICAgIHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdXYWl0IGFuZCByZXRyaWVzJywgJ1Rlc3QgQ2FzZSBUaW1lb3V0IChtaW51dGVzKScpIHx8XG4gICAgICB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnV2FpdHMgJiBSZXRyaWVzJywgJ1Rlc3QgQ2FzZSBUaW1lb3V0IChtaW51dGVzKScpO1xuICAgIHJldHVybiByYXcudHJpbSgpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aChPUkdfTEVWRUxfU0VOVElORUwudG9Mb3dlckNhc2UoKSk7XG4gIH1cblxuICAvKiogQWxsb3cgb25seSBkaWdpdHM7IHVzZWQgZm9yIFJldHJ5IEZhaWxlZCBTdGVwcywgVGVzdCBDYXNlIFRpbWVvdXQsIFdhaXQgVGltZW91dCBpbnB1dHMgKi9cbiAgb25seURpZ2l0cyh2YWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHZhbCA9PSBudWxsIHx8IHZhbCA9PT0gJycpIHJldHVybiAnJztcbiAgICByZXR1cm4gU3RyaW5nKHZhbCkucmVwbGFjZSgvXFxEL2csICcnKTtcbiAgfVxuXG4gIC8qKiBGb3IgdXBkYXRlOiB1c2UgXCIwXCIgd2hlbiB2YWx1ZSBpcyBlbXB0eSBzbyBBUEkgZ2V0cyBhIG51bWJlciAqL1xuICBwcml2YXRlIGVtcHR5TnVtVG9aZXJvKHZhbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodmFsID09IG51bGwgfHwgU3RyaW5nKHZhbCkudHJpbSgpID09PSAnJykgcmV0dXJuICcwJztcbiAgICByZXR1cm4gU3RyaW5nKHZhbCkudHJpbSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcmVyZXF1aXNpdGVDYXNlc0Zyb21Db25maWcoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHZhbCA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnUHJlcmVxdWlzaXRlIENhc2UnKTtcbiAgICBpZiAoIXZhbCkgcmV0dXJuIFtdO1xuICAgIHJldHVybiB2YWwuaW5jbHVkZXMoJywnKSA/IHZhbC5zcGxpdCgnLCcpLm1hcCgocykgPT4gcy50cmltKCkpLmZpbHRlcihCb29sZWFuKSA6IFt2YWxdO1xuICB9XG5cbiAgLyoqIEVkaXQgbW9kZSBzaG91bGQgc2hvdyBwbGFjZWhvbGRlciB3aGVuIGRhdGFzZXQgaXMgbm90IHNlbGVjdGVkLiAqL1xuICBwcml2YXRlIG5vcm1hbGl6ZVRlc3REYXRhU2V0UmF3VmFsdWUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHZhbHVlPy50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gJ25vdCBzZXQnID8gJycgOiB2YWx1ZTtcbiAgfVxuXG4gIGdldCBoYXNQcmVyZXF1aXNpdGVDYXNlQ29uZmlnKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNlY3Rpb24gPSBbLi4udGhpcy5jb25maWdTZWN0aW9ucywgLi4udGhpcy5jb25maWdTZWN0aW9uc1JvdzJdLmZpbmQoXG4gICAgICAocykgPT4gcy50aXRsZSA9PT0gJ0V4ZWN1dGlvbidcbiAgICApO1xuICAgIHJldHVybiAhIXNlY3Rpb24/Lml0ZW1zPy5zb21lKChpKSA9PiBpLmxhYmVsID09PSAnUHJlcmVxdWlzaXRlIENhc2UnKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuZWRpdERlc2NyaXB0aW9uID0gdGhpcy5kZXNjcmlwdGlvbkNvbnRlbnQ7XG4gICAgdGhpcy5lZGl0U3RhdHVzID0gdGhpcy5zdGF0dXNJdGVtPy52YWx1ZSA/PyAnJztcbiAgICB0aGlzLmVkaXRQcmlvcml0eSA9IHRoaXMucHJpb3JpdHlJdGVtPy52YWx1ZSA/PyAnJztcbiAgICBjb25zdCB0eXBlUmF3ID0gKHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnVHlwZScpIHx8ICh0aGlzLnR5cGVJdGVtPy52YWx1ZSBhcyBzdHJpbmcpKSA/PyAnJztcbiAgICBjb25zdCB0ZXN0RGF0YVByb2ZpbGVSYXcgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ1Rlc3QgRGF0YSBQcm9maWxlJykgPz8gJyc7XG4gICAgY29uc3QgdGVzdERhdGFTZXRSYXcgPSB0aGlzLm5vcm1hbGl6ZVRlc3REYXRhU2V0UmF3VmFsdWUoXG4gICAgICB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ1Rlc3QgRGF0YSBTZXQnKSA/PyAnJ1xuICAgICk7XG4gICAgY29uc3QgdHlwZVZhbCA9IHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUodHlwZVJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LlsndHlwZSddPy5vcHRpb25zKSA/PyB0eXBlUmF3O1xuICAgIGNvbnN0IHRlc3REYXRhUHJvZmlsZVZhbCA9IHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUodGVzdERhdGFQcm9maWxlUmF3LCB0aGlzLnNlbGVjdENvbmZpZ092ZXJyaWRlcz8uWyd0ZXN0RGF0YVByb2ZpbGUnXT8ub3B0aW9ucykgPz8gdGVzdERhdGFQcm9maWxlUmF3O1xuICAgIGNvbnN0IHRlc3REYXRhU2V0VmFsID0gdGhpcy5yZXNvbHZlVG9PcHRpb25WYWx1ZSh0ZXN0RGF0YVNldFJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LlsndGVzdERhdGFTZXQnXT8ub3B0aW9ucykgPz8gdGVzdERhdGFTZXRSYXc7XG4gICAgdGhpcy5lZGl0TGFiZWxzID0gWy4uLnRoaXMubGFiZWxzXTtcbiAgICBjb25zdCBhdXRvV2FpdFZhbCA9IHRoaXMuZ2V0V2FpdHNSZXRyaWVzVmFsdWUoJ0VuYWJsZSBBdm9pZCBBdXRvIHdhaXQgZm9yIHN0ZXBzJykgfHwgdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ1dhaXRzICYgUmV0cmllcycsICdBdXRvIFdhaXQnKTtcbiAgICB0aGlzLmF1dG9XYWl0RW5hYmxlZCA9ICEhKGF1dG9XYWl0VmFsICYmIGF1dG9XYWl0VmFsLnRyaW0oKSAhPT0gJycgJiYgU3RyaW5nKGF1dG9XYWl0VmFsKSAhPT0gJ2ZhbHNlJyk7XG4gICAgdGhpcy5yZXRyeUZhaWxlZFN0ZXBzID0gdGhpcy5nZXRXYWl0c1JldHJpZXNWYWx1ZSgnUmV0cnkgRmFpbGVkIFN0ZXBzJyk7XG4gICAgdGhpcy50ZXN0Q2FzZVRpbWVvdXRNb2RlID0gdGhpcy5pc1Rlc3RDYXNlVGltZW91dEZyb21PcmcoKSA/ICdvcmcnIDogJ2N1c3RvbSc7XG4gICAgdGhpcy50ZXN0Q2FzZVRpbWVvdXQgPSB0aGlzLnN0cmlwVHJhaWxpbmdVbml0Uyh0aGlzLmdldFdhaXRzUmV0cmllc1ZhbHVlKCdUZXN0IENhc2UgVGltZW91dCAobWludXRlcyknKSk7XG4gICAgdGhpcy53YWl0VGltZW91dExvY2F0b3JzID0gdGhpcy5zdHJpcFRyYWlsaW5nVW5pdFModGhpcy5nZXRXYWl0c1JldHJpZXNWYWx1ZSgnV2FpdCBUaW1lb3V0IGZvciBMb2NhdG9ycyAoc2VjcyknKSk7XG4gICAgdGhpcy5tb2JpbGVUZXN0aW5nRW5hYmxlZCA9ICEhdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0tleSBGbGFncycsICdNb2JpbGUgVGVzdGluZycpO1xuICAgIHRoaXMuZXh0ZW5zaW9uVXNlRW5hYmxlZCA9ICEhdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0tleSBGbGFncycsICdFeHRlbnNpb24gVXNlJyk7XG4gICAgdGhpcy5kYXRhRHJpdmVuRW5hYmxlZCA9ICEhdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0tleSBGbGFncycsICdEYXRhIERyaXZlbicpO1xuICAgIGNvbnN0IGVuYWJsZUFpU21hcnRuZXNzID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0FJIENvbmZpZ3VyYXRpb24nLCAnRW5hYmxlIEFJIFNtYXJ0bmVzcycpO1xuICAgIGNvbnN0IGRlZmF1bHRBaUFjdGlvbiA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdBSSBDb25maWd1cmF0aW9uJywgJ0RlZmF1bHQgQUkgQWN0aW9uJyk7XG4gICAgY29uc3Qga25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZVJhdyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdBSSBDb25maWd1cmF0aW9uJywgJ0tub3dsZWRnZSBCYXNlIERlZmF1bHQgVGVzdCBDYXNlJyk7XG4gICAgY29uc3Qga25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZSA9IHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUoa25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZVJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/Llsna25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZSddPy5vcHRpb25zKSA/PyBrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlUmF3O1xuICAgIGNvbnN0IHVzZUFpTWV0YWRhdGFSYXcgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnQUkgQ29uZmlndXJhdGlvbicsICdFbmFibGUgQUkgbWV0YWRhdGEgY29sbGVjdGlvbicpO1xuICAgIGNvbnN0IHVzZUFpTWV0YWRhdGEgPSB0aGlzLm5vcm1hbGl6ZUJvb2xlYW5TZWxlY3RWYWx1ZSh1c2VBaU1ldGFkYXRhUmF3KTtcbiAgICBjb25zdCBwcmVyZXF1aXNpdGVDYXNlcyA9IHRoaXMuZ2V0UHJlcmVxdWlzaXRlQ2FzZXNGcm9tQ29uZmlnKCk7XG4gICAgY29uc3QgZGVmYXVsdEJyb3dzZXIgPVxuICAgICAgdGhpcy5wbGF0Zm9ybSA9PT0gJ3dlYidcbiAgICAgICAgPyB0aGlzLmdldERldmljZUNvbmZpZ1ZhbHVlKCdEZWZhdWx0IEJyb3dzZXInKSB8fCB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ0RlZmF1bHQgQnJvd3NlcicpXG4gICAgICAgIDogdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0V4ZWN1dGlvbicsICdEZWZhdWx0IEJyb3dzZXInKTtcbiAgICBjb25zdCB2aWRlb1JlY29yZGluZ1JhdyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnVmlkZW8gUmVjb3JkaW5nJyk7XG4gICAgY29uc3QgdmlkZW9SZWNvcmRpbmcgPSB0aGlzLm5vcm1hbGl6ZUJvb2xlYW5TZWxlY3RWYWx1ZSh2aWRlb1JlY29yZGluZ1JhdyBhcyBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKTtcbiAgICBjb25zdCBkZWZhdWx0Vmlld3BvcnQgPSB0aGlzLmdldERldmljZUNvbmZpZ1ZhbHVlKCdEZWZhdWx0IFZpZXdwb3J0JykgfHwgdGhpcy5nZXREZXZpY2VDb25maWdWYWx1ZSgnVmlld3BvcnQnKSB8fCAnJztcbiAgICBjb25zdCBkZXZpY2VUeXBlID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0RldmljZScsICdUeXBlJyk7XG4gICAgY29uc3QgZGV2aWNlT1MgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRGV2aWNlJywgJ09TJyk7XG4gICAgdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZWRpdEFwaU1vY2tpbmdSZXN0b3JlTW9jayA9ICEhdGhpcy5hcGlNb2NraW5nUmVzdG9yZU1vY2s7XG4gICAgdGhpcy5lZGl0QXBpTW9ja2luZ1N0b3JlTW9jayA9ICEhdGhpcy5hcGlNb2NraW5nU3RvcmVNb2NrO1xuICAgIHRoaXMuZWRpdEZvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICBzdGF0dXM6IHRoaXMuZWRpdFN0YXR1cyxcbiAgICAgIHByaW9yaXR5OiB0aGlzLmVkaXRQcmlvcml0eSxcbiAgICAgIHR5cGU6IHR5cGVWYWwgfHwgJycsXG4gICAgICBsYWJlbHM6IHRoaXMuZWRpdExhYmVscyxcbiAgICAgIHRlc3REYXRhUHJvZmlsZTogdGVzdERhdGFQcm9maWxlVmFsIHx8ICcnLFxuICAgICAgdGVzdERhdGFTZXQ6IHRlc3REYXRhU2V0VmFsID8/ICcnLFxuICAgICAgcHJlcmVxdWlzaXRlQ2FzZXMsXG4gICAgICBkZWZhdWx0QnJvd3NlcjogZGVmYXVsdEJyb3dzZXIgfHwgJ0Nocm9tZScsXG4gICAgICB2aWRlb1JlY29yZGluZzogdmlkZW9SZWNvcmRpbmcgfHwgJycsXG4gICAgICBkZWZhdWx0Vmlld3BvcnQ6IGRlZmF1bHRWaWV3cG9ydCB8fCAnJyxcbiAgICAgIGRldmljZVR5cGU6IGRldmljZVR5cGUgfHwgJycsXG4gICAgICBkZXZpY2VPUzogZGV2aWNlT1MgfHwgJycsXG4gICAgICBlbmFibGVBaVNtYXJ0bmVzczogZW5hYmxlQWlTbWFydG5lc3MgfHwgJ0FkdmFuY2VkJyxcbiAgICAgIGRlZmF1bHRBaUFjdGlvbjogZGVmYXVsdEFpQWN0aW9uIHx8ICdTbWFydCB3YWl0JyxcbiAgICAgIGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2U6IGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2UgfHwgJ25vbmUnLFxuICAgICAgdXNlQWlNZXRhZGF0YTogdXNlQWlNZXRhZGF0YSB8fCAnJyxcbiAgICB9KTtcbiAgICB0aGlzLl9pbml0aWFsRm9ybVNuYXBzaG90ID0gSlNPTi5zdHJpbmdpZnkodGhpcy5idWlsZFNhdmVQYXlsb2FkKCkpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgZ2V0IGhhc1Vuc2F2ZWRDaGFuZ2VzKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLl9pbml0aWFsRm9ybVNuYXBzaG90ID09IG51bGwpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuYnVpbGRTYXZlUGF5bG9hZCgpKSAhPT0gdGhpcy5faW5pdGlhbEZvcm1TbmFwc2hvdDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTYXZlUGF5bG9hZCgpOiBUZXN0Q2FzZURldGFpbHNFZGl0Rm9ybURhdGEge1xuICAgIGNvbnN0IHN0YXR1cyA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdzdGF0dXMnKT8udmFsdWUgPz8gdGhpcy5lZGl0U3RhdHVzO1xuICAgIGNvbnN0IHByaW9yaXR5ID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3ByaW9yaXR5Jyk/LnZhbHVlID8/IHRoaXMuZWRpdFByaW9yaXR5O1xuICAgIGNvbnN0IHR5cGVWYWwgPSB0aGlzLmVkaXRGb3JtLmdldCgndHlwZScpPy52YWx1ZSA/PyAnJztcbiAgICBjb25zdCB0ZXN0RGF0YVByb2ZpbGVWYWwgPSB0aGlzLmVkaXRGb3JtLmdldCgndGVzdERhdGFQcm9maWxlJyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IHRlc3REYXRhU2V0VmFsID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3Rlc3REYXRhU2V0Jyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IGNvbmZpZ1NlY3Rpb25zTWVyZ2VkID0gdGhpcy5tZXJnZUNvbmZpZ1NlY3Rpb25zKCk7XG4gICAgY29uc3QgY29uZmlnU2VjdGlvbnNSb3cyTWVyZ2VkID0gdGhpcy5tZXJnZUNvbmZpZ1NlY3Rpb25zUm93MigpO1xuICAgIHJldHVybiB7XG4gICAgICBkZXNjcmlwdGlvbkNvbnRlbnQ6IHRoaXMuZWRpdERlc2NyaXB0aW9uLFxuICAgICAgc3RhdHVzLFxuICAgICAgcHJpb3JpdHksXG4gICAgICB0eXBlOiB0eXBlVmFsLFxuICAgICAgbGFiZWxzOiB0aGlzLmVkaXRMYWJlbHMsXG4gICAgICB0ZXN0RGF0YVByb2ZpbGVJZDogdGVzdERhdGFQcm9maWxlVmFsIHx8IG51bGwsXG4gICAgICB0ZXN0RGF0YVNldEluZGV4OiB0ZXN0RGF0YVNldFZhbCA/PyBudWxsLFxuICAgICAgY29uZmlnU2VjdGlvbnM6IGNvbmZpZ1NlY3Rpb25zTWVyZ2VkLFxuICAgICAgY29uZmlnU2VjdGlvbnNSb3cyOiBjb25maWdTZWN0aW9uc1JvdzJNZXJnZWQsXG4gICAgICBhcGlNb2NraW5nUmVzdG9yZU1vY2s6IHRoaXMuZWRpdEFwaU1vY2tpbmdSZXN0b3JlTW9jayxcbiAgICAgIGFwaU1vY2tpbmdTdG9yZU1vY2s6IHRoaXMuZWRpdEFwaU1vY2tpbmdTdG9yZU1vY2ssXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIYW5kbGVyIGJvdW5kIHRvIHRoZSBlbWJlZGRlZCBgPGNxYS1hcGktbW9ja2luZy1jYXJkPmAgYHJlc3RvcmVNb2NrQ2hhbmdlYCBvdXRwdXQuXG4gICAqIEtlZXBzIHRoZSBsb2NhbCBlZGl0LW1vZGUgbWlycm9yIGluIHN5bmMgKGluY2x1ZGluZyB0aGUgbXV0dWFsLWV4Y2x1c2l2aXR5IHJ1bGUg4oCUXG4gICAqIHR1cm5pbmcgVXNlLW1vY2sgb24gZm9yY2VzIHN0b3JlLW1vY2sgb2ZmKSBhbmQgcmUtZW1pdHMgdG8gdGhlIHBhcmVudCBzbyB0aGUgc2F2ZVxuICAgKiBwYXlsb2FkIHJlZmxlY3RzIHRoZSBuZXcgc3RhdGUuXG4gICAqL1xuICBvbkFwaU1vY2tpbmdSZXN0b3JlTW9ja0NoYW5nZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZWRpdEFwaU1vY2tpbmdSZXN0b3JlTW9jayA9IHZhbHVlO1xuICAgIGlmICh2YWx1ZSAmJiB0aGlzLmVkaXRBcGlNb2NraW5nU3RvcmVNb2NrKSB7XG4gICAgICB0aGlzLmVkaXRBcGlNb2NraW5nU3RvcmVNb2NrID0gZmFsc2U7XG4gICAgICB0aGlzLmFwaU1vY2tpbmdTdG9yZU1vY2tDaGFuZ2UuZW1pdChmYWxzZSk7XG4gICAgfVxuICAgIHRoaXMuYXBpTW9ja2luZ1Jlc3RvcmVNb2NrQ2hhbmdlLmVtaXQodmFsdWUpO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgLyoqIE1pcnJvciBoYW5kbGVyIGZvciB0aGUgXCJSZW5ldyBhbmQgc3RvcmUgQVBJIHJlc3BvbnNlc1wiIHRvZ2dsZS4gTXV0dWFsbHkgZXhjbHVzaXZlIHdpdGggVXNlLW1vY2suICovXG4gIG9uQXBpTW9ja2luZ1N0b3JlTW9ja0NoYW5nZSh2YWx1ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuZWRpdEFwaU1vY2tpbmdTdG9yZU1vY2sgPSB2YWx1ZTtcbiAgICBpZiAodmFsdWUgJiYgdGhpcy5lZGl0QXBpTW9ja2luZ1Jlc3RvcmVNb2NrKSB7XG4gICAgICB0aGlzLmVkaXRBcGlNb2NraW5nUmVzdG9yZU1vY2sgPSBmYWxzZTtcbiAgICAgIHRoaXMuYXBpTW9ja2luZ1Jlc3RvcmVNb2NrQ2hhbmdlLmVtaXQoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmFwaU1vY2tpbmdTdG9yZU1vY2tDaGFuZ2UuZW1pdCh2YWx1ZSk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVUb09wdGlvblZhbHVlKFxuICAgIGNvbmZpZ1ZhbHVlOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgb3B0aW9uczogU2VsZWN0T3B0aW9uW10gfCB1bmRlZmluZWRcbiAgKTogc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoY29uZmlnVmFsdWUgPT0gbnVsbCB8fCBjb25maWdWYWx1ZSA9PT0gJycpIHJldHVybiBjb25maWdWYWx1ZTtcbiAgICBjb25zdCBvcHRzID0gb3B0aW9ucyA/PyBbXTtcbiAgICBpZiAoIW9wdHMubGVuZ3RoKSByZXR1cm4gY29uZmlnVmFsdWU7XG4gICAgY29uc3QgbnVtID0gdHlwZW9mIGNvbmZpZ1ZhbHVlID09PSAnbnVtYmVyJyA/IGNvbmZpZ1ZhbHVlIDogTnVtYmVyKGNvbmZpZ1ZhbHVlKTtcbiAgICBjb25zdCBpc051bWVyaWMgPSAhTnVtYmVyLmlzTmFOKG51bSkgJiYgU3RyaW5nKGNvbmZpZ1ZhbHVlKS50cmltKCkgPT09IFN0cmluZyhudW0pO1xuICAgIGlmIChpc051bWVyaWMpIHtcbiAgICAgIC8vIElmIG9wdGlvbnMgdXNlIG51bWVyaWMgdmFsdWVzIChlLmcuIGluZGljZXMgZm9yIFRlc3QgRGF0YSBTZXQpLFxuICAgICAgLy8gcmV0dXJuIHRoZSBudW1lcmljIGZvcm0gc28gdGhlIHNlbGVjdCBjYW4gbWF0Y2ggYnkgc3RyaWN0IGVxdWFsaXR5LlxuICAgICAgY29uc3QgaGFzTnVtZXJpY09wdGlvbiA9IG9wdHMuc29tZShcbiAgICAgICAgKG8pID0+IHR5cGVvZiBvLnZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgKG8gYXMgYW55KS5pZCA9PT0gJ251bWJlcidcbiAgICAgICk7XG4gICAgICByZXR1cm4gaGFzTnVtZXJpY09wdGlvbiA/IG51bSA6IGNvbmZpZ1ZhbHVlO1xuICAgIH1cbiAgICBjb25zdCBzdHIgPSBTdHJpbmcoY29uZmlnVmFsdWUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIGNvbnN0IG1hdGNoID0gb3B0cy5maW5kKChvKSA9PiB7XG4gICAgICBjb25zdCBuID0gU3RyaW5nKG8ubmFtZSA/PyBvLmxhYmVsID8/IG8udmFsdWUgPz8gJycpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgICAgcmV0dXJuIG4gPT09IHN0cjtcbiAgICB9KTtcbiAgICByZXR1cm4gbWF0Y2ggIT0gbnVsbCA/IChtYXRjaC52YWx1ZSA/PyAobWF0Y2ggYXMgYW55KS5pZCA/PyBtYXRjaCkgOiBjb25maWdWYWx1ZTtcbiAgfVxuXG4gIHByaXZhdGUgbm9ybWFsaXplQm9vbGVhblNlbGVjdFZhbHVlKHZhbDogc3RyaW5nIHwgYm9vbGVhbiB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gICAgaWYgKHZhbCA9PT0gdHJ1ZSB8fCB2YWwgPT09ICd0cnVlJykgcmV0dXJuICd0cnVlJztcbiAgICBpZiAodmFsID09PSBmYWxzZSB8fCB2YWwgPT09ICdmYWxzZScpIHJldHVybiAnZmFsc2UnO1xuICAgIGlmIChcbiAgICAgIHZhbCA9PT0gJ09yZyBsZXZlbCcgfHxcbiAgICAgIHZhbCA9PT0gJ09yZyBMZXZlbCcgfHxcbiAgICAgICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJiB2YWwudHJpbSgpLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCgnb3JnIGxldmVsICgnKSlcbiAgICApIHtcbiAgICAgIHJldHVybiAnT3JnIGxldmVsJztcbiAgICB9XG4gICAgaWYgKHZhbCA9PT0gJ09uIFdhaXQnIHx8IHZhbCA9PT0gJ29uIHdhaXQnKSByZXR1cm4gJ3RydWUnO1xuICAgIHJldHVybiB2YWwgJiYgU3RyaW5nKHZhbCkudHJpbSgpID8gU3RyaW5nKHZhbCkgOiAnJztcbiAgfVxuXG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydsYWJlbHMnXSB8fCBjaGFuZ2VzWydzZWxlY3RDb25maWdPdmVycmlkZXMnXSkge1xuICAgICAgdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnRGlydHkgPSB0cnVlO1xuICAgICAgaWYgKGNoYW5nZXNbJ3NlbGVjdENvbmZpZ092ZXJyaWRlcyddICYmIHRoaXMuZWRpdEZvcm0/LmdldCgndHlwZScpKSB7XG4gICAgICAgIGNvbnN0IHR5cGVDdHJsID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3R5cGUnKTtcbiAgICAgICAgY29uc3QgdGRwQ3RybCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd0ZXN0RGF0YVByb2ZpbGUnKTtcbiAgICAgICAgY29uc3QgdGRzQ3RybCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd0ZXN0RGF0YVNldCcpO1xuICAgICAgICBjb25zdCBlbmFibGVBaUN0cmwgPSB0aGlzLmVkaXRGb3JtLmdldCgnZW5hYmxlQWlTbWFydG5lc3MnKTtcbiAgICAgICAgY29uc3QgZGVmYXVsdEFpQ3RybCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdkZWZhdWx0QWlBY3Rpb24nKTtcbiAgICAgICAgY29uc3QgcGF0Y2g6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlcj4gPSB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXI+O1xuICAgICAgICBpZiAodHlwZUN0cmwgJiYgIXR5cGVDdHJsLmRpcnR5KSB7XG4gICAgICAgICAgY29uc3QgdHlwZVJhdyA9ICh0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ1R5cGUnKSB8fCAodGhpcy50eXBlSXRlbT8udmFsdWUgYXMgc3RyaW5nKSkgPz8gJyc7XG4gICAgICAgICAgcGF0Y2hbJ3R5cGUnXSA9ICh0aGlzLnJlc29sdmVUb09wdGlvblZhbHVlKHR5cGVSYXcsIHRoaXMuc2VsZWN0Q29uZmlnT3ZlcnJpZGVzPy5bJ3R5cGUnXT8ub3B0aW9ucykgPz8gdHlwZVJhdykgfHwgJyc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRm9yIFRlc3QgRGF0YSBQcm9maWxlIC8gU2V0LCBhbGxvdyBvbmUtdGltZSByZS1yZXNvbHZlIGZyb20gY29uZmlnIHdoZW4gb3B0aW9ucyBhcnJpdmUsXG4gICAgICAgIC8vIGJ1dCBuZXZlciBvdmVyd3JpdGUgYSB1c2VyLWVkaXRlZCAoZGlydHkpIHZhbHVlLlxuICAgICAgICBpZiAodGRwQ3RybCAmJiAhdGRwQ3RybC5kaXJ0eSkge1xuICAgICAgICAgIGNvbnN0IHRlc3REYXRhUHJvZmlsZVJhdyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnVGVzdCBEYXRhIFByb2ZpbGUnKSA/PyAnJztcbiAgICAgICAgICBwYXRjaFsndGVzdERhdGFQcm9maWxlJ10gPVxuICAgICAgICAgICAgKHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUodGVzdERhdGFQcm9maWxlUmF3LCB0aGlzLnNlbGVjdENvbmZpZ092ZXJyaWRlcz8uWyd0ZXN0RGF0YVByb2ZpbGUnXT8ub3B0aW9ucykgPz9cbiAgICAgICAgICAgICAgdGVzdERhdGFQcm9maWxlUmF3KSB8fCAnJztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGRzQ3RybCAmJiAhdGRzQ3RybC5kaXJ0eSkge1xuICAgICAgICAgIGNvbnN0IHRlc3REYXRhU2V0UmF3ID0gdGhpcy5ub3JtYWxpemVUZXN0RGF0YVNldFJhd1ZhbHVlKFxuICAgICAgICAgICAgdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0V4ZWN1dGlvbicsICdUZXN0IERhdGEgU2V0JykgPz8gJydcbiAgICAgICAgICApO1xuICAgICAgICAgIHBhdGNoWyd0ZXN0RGF0YVNldCddID1cbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUodGVzdERhdGFTZXRSYXcsIHRoaXMuc2VsZWN0Q29uZmlnT3ZlcnJpZGVzPy5bJ3Rlc3REYXRhU2V0J10/Lm9wdGlvbnMpID8/XG4gICAgICAgICAgICB0ZXN0RGF0YVNldFJhdyA/PyAnJztcbiAgICAgICAgfVxuICAgICAgICAvLyBSZS1yZXNvbHZlIEFJIGZpZWxkcyB3aGVuIHRoZWlyIG9wdGlvbnMgYXJyaXZlICh0aGV5IHVzZSBkaXNwbGF5IG5hbWVzIGFzIHZhbHVlcykuXG4gICAgICAgIGlmIChlbmFibGVBaUN0cmwgJiYgIWVuYWJsZUFpQ3RybC5kaXJ0eSkge1xuICAgICAgICAgIGNvbnN0IGFpU21hcnRuZXNzUmF3ID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0FJIENvbmZpZ3VyYXRpb24nLCAnRW5hYmxlIEFJIFNtYXJ0bmVzcycpO1xuICAgICAgICAgIGlmIChhaVNtYXJ0bmVzc1JhdykgcGF0Y2hbJ2VuYWJsZUFpU21hcnRuZXNzJ10gPSBhaVNtYXJ0bmVzc1JhdztcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmYXVsdEFpQ3RybCAmJiAhZGVmYXVsdEFpQ3RybC5kaXJ0eSkge1xuICAgICAgICAgIGNvbnN0IGRlZmF1bHRBaVJhdyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdBSSBDb25maWd1cmF0aW9uJywgJ0RlZmF1bHQgQUkgQWN0aW9uJyk7XG4gICAgICAgICAgaWYgKGRlZmF1bHRBaVJhdykgcGF0Y2hbJ2RlZmF1bHRBaUFjdGlvbiddID0gZGVmYXVsdEFpUmF3O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGtiQ3RybCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlJyk7XG4gICAgICAgIGlmIChrYkN0cmwgJiYgIWtiQ3RybC5kaXJ0eSkge1xuICAgICAgICAgIGNvbnN0IGtiUmF3ID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0FJIENvbmZpZ3VyYXRpb24nLCAnS25vd2xlZGdlIEJhc2UgRGVmYXVsdCBUZXN0IENhc2UnKTtcbiAgICAgICAgICBjb25zdCBrYlJlc29sdmVkID0gdGhpcy5yZXNvbHZlVG9PcHRpb25WYWx1ZShrYlJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/Llsna25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZSddPy5vcHRpb25zKSA/PyBrYlJhdztcbiAgICAgICAgICBpZiAoa2JSZXNvbHZlZCkgcGF0Y2hbJ2tub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2UnXSA9IGtiUmVzb2x2ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHBhdGNoKS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmVkaXRGb3JtLnBhdGNoVmFsdWUocGF0Y2gsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoY2hhbmdlc1snZGVzY3JpcHRpb25Db250ZW50J10gfHwgY2hhbmdlc1snbGFiZWxzJ10gfHwgY2hhbmdlc1snbWV0YWRhdGFJdGVtcyddKSB7XG4gICAgICB0aGlzLmVkaXREZXNjcmlwdGlvbiA9IHRoaXMuZGVzY3JpcHRpb25Db250ZW50O1xuICAgICAgdGhpcy5lZGl0TGFiZWxzID0gWy4uLnRoaXMubGFiZWxzXTtcbiAgICAgIHRoaXMuZWRpdFN0YXR1cyA9IHRoaXMuc3RhdHVzSXRlbT8udmFsdWUgPz8gJyc7XG4gICAgICB0aGlzLmVkaXRQcmlvcml0eSA9IHRoaXMucHJpb3JpdHlJdGVtPy52YWx1ZSA/PyAnJztcbiAgICAgIGNvbnN0IHR5cGVWYWwgPSAodGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0V4ZWN1dGlvbicsICdUeXBlJykgfHwgKHRoaXMudHlwZUl0ZW0/LnZhbHVlIGFzIHN0cmluZykpID8/ICcnO1xuICAgICAgY29uc3Qgc3RhdHVzQ29udHJvbCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdzdGF0dXMnKTtcbiAgICAgIGNvbnN0IHByaW9yaXR5Q29udHJvbCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdwcmlvcml0eScpO1xuICAgICAgY29uc3QgdHlwZUNvbnRyb2wgPSB0aGlzLmVkaXRGb3JtLmdldCgndHlwZScpO1xuICAgICAgY29uc3QgbGFiZWxzQ29udHJvbCA9IHRoaXMuZWRpdEZvcm0uZ2V0KFRFU1RfQ0FTRV9ERVRBSUxTX1NFTEVDVF9LRVlTLmxhYmVscyk7XG4gICAgICBjb25zdCBwcmVzZXJ2ZVN0YXR1cyA9IHN0YXR1c0NvbnRyb2w/LnRvdWNoZWQgfHwgc3RhdHVzQ29udHJvbD8uZGlydHk7XG4gICAgICBjb25zdCBwcmVzZXJ2ZVByaW9yaXR5ID0gcHJpb3JpdHlDb250cm9sPy50b3VjaGVkIHx8IHByaW9yaXR5Q29udHJvbD8uZGlydHk7XG4gICAgICBjb25zdCBwcmVzZXJ2ZVR5cGUgPSB0eXBlQ29udHJvbD8udG91Y2hlZCB8fCB0eXBlQ29udHJvbD8uZGlydHk7XG4gICAgICBjb25zdCBwcmVzZXJ2ZUxhYmVscyA9IGxhYmVsc0NvbnRyb2w/LnRvdWNoZWQgfHwgbGFiZWxzQ29udHJvbD8uZGlydHk7XG4gICAgICB0aGlzLmVkaXRGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAuLi4ocHJlc2VydmVTdGF0dXMgPyB7fSA6IHsgc3RhdHVzOiB0aGlzLmVkaXRTdGF0dXMgfSksXG4gICAgICAgIC4uLihwcmVzZXJ2ZVByaW9yaXR5ID8ge30gOiB7IHByaW9yaXR5OiB0aGlzLmVkaXRQcmlvcml0eSB9KSxcbiAgICAgICAgLi4uKHByZXNlcnZlVHlwZSA/IHt9IDogeyB0eXBlOiB0eXBlVmFsIH0pLFxuICAgICAgICAuLi4ocHJlc2VydmVMYWJlbHMgPyB7fSA6IHsgbGFiZWxzOiB0aGlzLmVkaXRMYWJlbHMgfSksXG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ3ByZXJlcXVpc2l0ZUNhc2VPcHRpb25zJ10gJiYgdGhpcy5wcmVyZXF1aXNpdGVDYXNlT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRoaXMucHJlcmVxdWlzaXRlQ2FzZVNlbGVjdENvbmZpZyA9IHtcbiAgICAgICAgLi4udGhpcy5wcmVyZXF1aXNpdGVDYXNlU2VsZWN0Q29uZmlnLFxuICAgICAgICBvcHRpb25zOiB0aGlzLnByZXJlcXVpc2l0ZUNhc2VPcHRpb25zLFxuICAgICAgfTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZXNbJ2NvbmZpZ1NlY3Rpb25zJ10gfHwgY2hhbmdlc1snY29uZmlnU2VjdGlvbnNSb3cyJ10pIHtcbiAgICAgIGNvbnN0IGVuYWJsZUFpU21hcnRuZXNzID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0FJIENvbmZpZ3VyYXRpb24nLCAnRW5hYmxlIEFJIFNtYXJ0bmVzcycpO1xuICAgICAgY29uc3QgZGVmYXVsdEFpQWN0aW9uID0gdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0FJIENvbmZpZ3VyYXRpb24nLCAnRGVmYXVsdCBBSSBBY3Rpb24nKTtcbiAgICAgIGNvbnN0IGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2VSYXcgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnQUkgQ29uZmlndXJhdGlvbicsICdLbm93bGVkZ2UgQmFzZSBEZWZhdWx0IFRlc3QgQ2FzZScpO1xuICAgICAgY29uc3Qga25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZSA9IHRoaXMucmVzb2x2ZVRvT3B0aW9uVmFsdWUoa25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZVJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/Llsna25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZSddPy5vcHRpb25zKSA/PyBrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlUmF3O1xuICAgICAgY29uc3QgcHJlcmVxdWlzaXRlQ2FzZXMgPSB0aGlzLmdldFByZXJlcXVpc2l0ZUNhc2VzRnJvbUNvbmZpZygpO1xuICAgICAgY29uc3QgdHlwZVJhdyA9ICh0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ1R5cGUnKSB8fCAodGhpcy50eXBlSXRlbT8udmFsdWUgYXMgc3RyaW5nKSkgPz8gJyc7XG4gICAgICBjb25zdCB0ZXN0RGF0YVByb2ZpbGVSYXcgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRXhlY3V0aW9uJywgJ1Rlc3QgRGF0YSBQcm9maWxlJykgPz8gJyc7XG4gICAgICBjb25zdCB0ZXN0RGF0YVNldFJhdyA9IHRoaXMubm9ybWFsaXplVGVzdERhdGFTZXRSYXdWYWx1ZShcbiAgICAgICAgdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0V4ZWN1dGlvbicsICdUZXN0IERhdGEgU2V0JykgPz8gJydcbiAgICAgICk7XG4gICAgICBjb25zdCB0eXBlVmFsID0gdGhpcy5yZXNvbHZlVG9PcHRpb25WYWx1ZSh0eXBlUmF3LCB0aGlzLnNlbGVjdENvbmZpZ092ZXJyaWRlcz8uWyd0eXBlJ10/Lm9wdGlvbnMpID8/IHR5cGVSYXc7XG4gICAgICBjb25zdCB0ZXN0RGF0YVByb2ZpbGVWYWwgPSB0aGlzLnJlc29sdmVUb09wdGlvblZhbHVlKHRlc3REYXRhUHJvZmlsZVJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LlsndGVzdERhdGFQcm9maWxlJ10/Lm9wdGlvbnMpID8/IHRlc3REYXRhUHJvZmlsZVJhdztcbiAgICAgIGNvbnN0IHRlc3REYXRhU2V0VmFsID0gdGhpcy5yZXNvbHZlVG9PcHRpb25WYWx1ZSh0ZXN0RGF0YVNldFJhdywgdGhpcy5zZWxlY3RDb25maWdPdmVycmlkZXM/LlsndGVzdERhdGFTZXQnXT8ub3B0aW9ucykgPz8gdGVzdERhdGFTZXRSYXc7XG4gICAgICBjb25zdCBkZWZhdWx0QnJvd3NlciA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnRGVmYXVsdCBCcm93c2VyJyk7XG4gICAgICBjb25zdCB2aWRlb1JlY29yZGluZ1JhdyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdFeGVjdXRpb24nLCAnVmlkZW8gUmVjb3JkaW5nJyk7XG4gICAgICBjb25zdCB2aWRlb1JlY29yZGluZyA9IHRoaXMubm9ybWFsaXplQm9vbGVhblNlbGVjdFZhbHVlKHZpZGVvUmVjb3JkaW5nUmF3IGFzIHN0cmluZyB8IGJvb2xlYW4gfCB1bmRlZmluZWQpO1xuICAgICAgY29uc3QgdXNlQWlNZXRhZGF0YVJhdyA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdBSSBDb25maWd1cmF0aW9uJywgJ0VuYWJsZSBBSSBtZXRhZGF0YSBjb2xsZWN0aW9uJyk7XG4gICAgICBjb25zdCB1c2VBaU1ldGFkYXRhID0gdGhpcy5ub3JtYWxpemVCb29sZWFuU2VsZWN0VmFsdWUodXNlQWlNZXRhZGF0YVJhdyBhcyBzdHJpbmcgfCBib29sZWFuIHwgdW5kZWZpbmVkKTtcbiAgICAgIGNvbnN0IGRlZmF1bHRWaWV3cG9ydCA9IHRoaXMuZ2V0RGV2aWNlQ29uZmlnVmFsdWUoJ0RlZmF1bHQgVmlld3BvcnQnKSB8fCB0aGlzLmdldERldmljZUNvbmZpZ1ZhbHVlKCdWaWV3cG9ydCcpIHx8ICcnO1xuICAgICAgY29uc3QgZGV2aWNlVHlwZSA9IHRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdEZXZpY2UnLCAnVHlwZScpO1xuICAgICAgY29uc3QgZGV2aWNlT1MgPSB0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnRGV2aWNlJywgJ09TJyk7XG4gICAgICBjb25zdCBhdXRvV2FpdFZhbCA9IHRoaXMuZ2V0V2FpdHNSZXRyaWVzVmFsdWUoJ0VuYWJsZSBBdm9pZCBBdXRvIHdhaXQgZm9yIHN0ZXBzJykgfHwgdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ1dhaXRzICYgUmV0cmllcycsICdBdXRvIFdhaXQnKTtcbiAgICAgIHRoaXMuYXV0b1dhaXRFbmFibGVkID0gISEoYXV0b1dhaXRWYWwgJiYgYXV0b1dhaXRWYWwudHJpbSgpICE9PSAnJyAmJiBTdHJpbmcoYXV0b1dhaXRWYWwpICE9PSAnZmFsc2UnKTtcbiAgICAgIHRoaXMucmV0cnlGYWlsZWRTdGVwcyA9IHRoaXMuZ2V0V2FpdHNSZXRyaWVzVmFsdWUoJ1JldHJ5IEZhaWxlZCBTdGVwcycpO1xuICAgICAgdGhpcy50ZXN0Q2FzZVRpbWVvdXRNb2RlID0gdGhpcy5pc1Rlc3RDYXNlVGltZW91dEZyb21PcmcoKSA/ICdvcmcnIDogJ2N1c3RvbSc7XG4gICAgICB0aGlzLnRlc3RDYXNlVGltZW91dCA9IHRoaXMuc3RyaXBUcmFpbGluZ1VuaXRTKHRoaXMuZ2V0V2FpdHNSZXRyaWVzVmFsdWUoJ1Rlc3QgQ2FzZSBUaW1lb3V0IChtaW51dGVzKScpKTtcbiAgICAgIHRoaXMud2FpdFRpbWVvdXRMb2NhdG9ycyA9IHRoaXMuc3RyaXBUcmFpbGluZ1VuaXRTKHRoaXMuZ2V0V2FpdHNSZXRyaWVzVmFsdWUoJ1dhaXQgVGltZW91dCBmb3IgTG9jYXRvcnMgKHNlY3MpJykpO1xuICAgICAgdGhpcy5tb2JpbGVUZXN0aW5nRW5hYmxlZCA9ICEhdGhpcy5nZXRDb25maWdJdGVtVmFsdWUoJ0tleSBGbGFncycsICdNb2JpbGUgVGVzdGluZycpO1xuICAgICAgdGhpcy5leHRlbnNpb25Vc2VFbmFibGVkID0gISF0aGlzLmdldENvbmZpZ0l0ZW1WYWx1ZSgnS2V5IEZsYWdzJywgJ0V4dGVuc2lvbiBVc2UnKTtcbiAgICAgIHRoaXMuZGF0YURyaXZlbkVuYWJsZWQgPSAhIXRoaXMuZ2V0Q29uZmlnSXRlbVZhbHVlKCdLZXkgRmxhZ3MnLCAnRGF0YSBEcml2ZW4nKTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgY29uc3QgcGF0Y2g6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG4gICAgICBpZiAoZW5hYmxlQWlTbWFydG5lc3MpIHBhdGNoWydlbmFibGVBaVNtYXJ0bmVzcyddID0gZW5hYmxlQWlTbWFydG5lc3M7XG4gICAgICBpZiAoZGVmYXVsdEFpQWN0aW9uKSBwYXRjaFsnZGVmYXVsdEFpQWN0aW9uJ10gPSBkZWZhdWx0QWlBY3Rpb247XG4gICAgICBpZiAoa25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZSkgcGF0Y2hbJ2tub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2UnXSA9IGtub3dsZWRnZUJhc2VEZWZhdWx0VGVzdENhc2U7XG4gICAgICBpZiAodXNlQWlNZXRhZGF0YSkgcGF0Y2hbJ3VzZUFpTWV0YWRhdGEnXSA9IHVzZUFpTWV0YWRhdGE7XG4gICAgICBpZiAocHJlcmVxdWlzaXRlQ2FzZXMubGVuZ3RoKSBwYXRjaFsncHJlcmVxdWlzaXRlQ2FzZXMnXSA9IHByZXJlcXVpc2l0ZUNhc2VzO1xuICAgICAgaWYgKHR5cGVWYWwpIHBhdGNoWyd0eXBlJ10gPSB0eXBlVmFsO1xuXG4gICAgICAvLyBSZS1zeW5jIFRlc3QgRGF0YSBQcm9maWxlIC8gU2V0IGZyb20gY29uZmlnIG9ubHkgd2hlbiBjb250cm9scyBhcmUgTk9UIGRpcnR5XG4gICAgICBjb25zdCB0ZHBDdHJsMiA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd0ZXN0RGF0YVByb2ZpbGUnKTtcbiAgICAgIGNvbnN0IHRkc0N0cmwyID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3Rlc3REYXRhU2V0Jyk7XG4gICAgICBjb25zdCBwcmVzZXJ2ZVRkcDIgPSB0ZHBDdHJsMj8uZGlydHk7XG4gICAgICBjb25zdCBwcmVzZXJ2ZVRkczIgPSB0ZHNDdHJsMj8uZGlydHk7XG5cbiAgICAgIGlmICh0ZXN0RGF0YVByb2ZpbGVWYWwgJiYgIXByZXNlcnZlVGRwMikgcGF0Y2hbJ3Rlc3REYXRhUHJvZmlsZSddID0gdGVzdERhdGFQcm9maWxlVmFsO1xuICAgICAgaWYgKHRlc3REYXRhU2V0VmFsICE9IG51bGwgJiYgdGVzdERhdGFTZXRWYWwgIT09ICcnICYmICFwcmVzZXJ2ZVRkczIpIHBhdGNoWyd0ZXN0RGF0YVNldCddID0gdGVzdERhdGFTZXRWYWw7XG4gICAgICBpZiAoZGVmYXVsdEJyb3dzZXIpIHBhdGNoWydkZWZhdWx0QnJvd3NlciddID0gZGVmYXVsdEJyb3dzZXI7XG4gICAgICBpZiAodmlkZW9SZWNvcmRpbmcpIHBhdGNoWyd2aWRlb1JlY29yZGluZyddID0gdmlkZW9SZWNvcmRpbmc7XG4gICAgICBpZiAoZGVmYXVsdFZpZXdwb3J0KSBwYXRjaFsnZGVmYXVsdFZpZXdwb3J0J10gPSBkZWZhdWx0Vmlld3BvcnQ7XG4gICAgICBpZiAoZGV2aWNlVHlwZSkgcGF0Y2hbJ2RldmljZVR5cGUnXSA9IGRldmljZVR5cGU7XG4gICAgICBpZiAoZGV2aWNlT1MpIHBhdGNoWydkZXZpY2VPUyddID0gZGV2aWNlT1M7XG4gICAgICBpZiAoT2JqZWN0LmtleXMocGF0Y2gpLmxlbmd0aCkgdGhpcy5lZGl0Rm9ybS5wYXRjaFZhbHVlKHBhdGNoKTtcbiAgICB9XG4gIH1cblxuICBvblJlbW92ZUxhYmVsKGxhYmVsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRMYWJlbHMgPSB0aGlzLmVkaXRMYWJlbHMuZmlsdGVyKChsKSA9PiBsICE9PSBsYWJlbCk7XG4gICAgdGhpcy5fbGFiZWxzU2VsZWN0Q29uZmlnRGlydHkgPSB0cnVlO1xuICAgIHRoaXMuZWRpdEZvcm0uZ2V0KFRFU1RfQ0FTRV9ERVRBSUxTX1NFTEVDVF9LRVlTLmxhYmVscyk/LnNldFZhbHVlKHRoaXMuZWRpdExhYmVscywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25DbGVhckFsbExhYmVscygpOiB2b2lkIHtcbiAgICB0aGlzLmVkaXRMYWJlbHMgPSBbXTtcbiAgICB0aGlzLl9sYWJlbHNTZWxlY3RDb25maWdEaXJ0eSA9IHRydWU7XG4gICAgdGhpcy5lZGl0Rm9ybS5nZXQoVEVTVF9DQVNFX0RFVEFJTFNfU0VMRUNUX0tFWVMubGFiZWxzKT8uc2V0VmFsdWUoW10sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIG9uQWRkRnJlcXVlbnRMYWJlbChsYWJlbDogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmVkaXRMYWJlbHMuaW5jbHVkZXMobGFiZWwpKSB7XG4gICAgICB0aGlzLmVkaXRMYWJlbHMgPSBbLi4udGhpcy5lZGl0TGFiZWxzLCBsYWJlbF07XG4gICAgICB0aGlzLl9sYWJlbHNTZWxlY3RDb25maWdEaXJ0eSA9IHRydWU7XG4gICAgICB0aGlzLmVkaXRGb3JtLmdldChURVNUX0NBU0VfREVUQUlMU19TRUxFQ1RfS0VZUy5sYWJlbHMpPy5zZXRWYWx1ZSh0aGlzLmVkaXRMYWJlbHMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIG9uU2F2ZSgpOiB2b2lkIHtcbiAgICB0aGlzLnNhdmUuZW1pdCh0aGlzLmJ1aWxkU2F2ZVBheWxvYWQoKSk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlQ29uZmlnU2VjdGlvbnMoKTogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbltdIHtcbiAgICBjb25zdCBwbGF0Zm9ybSA9IHRoaXMucGxhdGZvcm07XG4gICAgY29uc3QgdmlkZW9SZWNvcmRpbmdWYWx1ZSA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd2aWRlb1JlY29yZGluZycpPy52YWx1ZSA/PyAnJztcbiAgICBjb25zdCB2aWRlb1JlY29yZGluZyA9IHZpZGVvUmVjb3JkaW5nVmFsdWUgPT09ICd0cnVlJyA/IHRydWUgOiB2aWRlb1JlY29yZGluZ1ZhbHVlID09PSAnZmFsc2UnID8gZmFsc2UgOiB2aWRlb1JlY29yZGluZ1ZhbHVlO1xuICAgIGNvbnN0IHVzZUFpTWV0YWRhdGFWYWx1ZSA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd1c2VBaU1ldGFkYXRhJyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IHVzZUFpTWV0YWRhdGEgPSB1c2VBaU1ldGFkYXRhVmFsdWUgPT09ICd0cnVlJyA/IHRydWUgOiB1c2VBaU1ldGFkYXRhVmFsdWUgPT09ICdmYWxzZScgPyBmYWxzZSA6IHVzZUFpTWV0YWRhdGFWYWx1ZTtcbiAgICBjb25zdCBwcmVyZXF1aXNpdGVDYXNlc1JhdyA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdwcmVyZXF1aXNpdGVDYXNlcycpPy52YWx1ZTtcbiAgICBjb25zdCBwcmVyZXF1aXNpdGVDYXNlcyA9IEFycmF5LmlzQXJyYXkocHJlcmVxdWlzaXRlQ2FzZXNSYXcpXG4gICAgICA/IHByZXJlcXVpc2l0ZUNhc2VzUmF3Lm1hcCgodikgPT4gU3RyaW5nKHYpKS5maWx0ZXIoQm9vbGVhbilcbiAgICAgIDogcHJlcmVxdWlzaXRlQ2FzZXNSYXcgIT0gbnVsbCAmJiBwcmVyZXF1aXNpdGVDYXNlc1JhdyAhPT0gJydcbiAgICAgICAgPyBbU3RyaW5nKHByZXJlcXVpc2l0ZUNhc2VzUmF3KV1cbiAgICAgICAgOiBbXTtcbiAgICBjb25zdCBwcmVyZXF1aXNpdGVDYXNlVmFsdWUgPSBwcmVyZXF1aXNpdGVDYXNlcy5sZW5ndGggPyBwcmVyZXF1aXNpdGVDYXNlcy5qb2luKCcsJykgOiBudWxsO1xuICAgIGNvbnN0IHR5cGVWYWx1ZSA9IHRoaXMuZWRpdEZvcm0uZ2V0KCd0eXBlJyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IHRlc3REYXRhUHJvZmlsZVZhbHVlID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3Rlc3REYXRhUHJvZmlsZScpPy52YWx1ZSA/PyAnJztcbiAgICBjb25zdCB0ZXN0RGF0YVNldFZhbHVlID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ3Rlc3REYXRhU2V0Jyk/LnZhbHVlID8/ICcnO1xuICAgIHJldHVybiB0aGlzLmNvbmZpZ1NlY3Rpb25zLm1hcCgoc2VjdGlvbikgPT4ge1xuICAgICAgaWYgKHNlY3Rpb24udGl0bGUgPT09ICdFeGVjdXRpb24nKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gc2VjdGlvbi5pdGVtc1xuICAgICAgICAgIC5maWx0ZXIoKGl0ZW0pID0+ICEocGxhdGZvcm0gPT09ICd3ZWInICYmIGl0ZW0ubGFiZWwgPT09ICdEZWZhdWx0IEJyb3dzZXInKSlcbiAgICAgICAgICAubWFwKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS5sYWJlbCA9PT0gJ1ZpZGVvIFJlY29yZGluZycpIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlOiB2aWRlb1JlY29yZGluZyB9O1xuICAgICAgICAgICAgaWYgKGl0ZW0ubGFiZWwgPT09ICdQcmVyZXF1aXNpdGUgQ2FzZScpIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlOiBwcmVyZXF1aXNpdGVDYXNlVmFsdWUgfTtcbiAgICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnVHlwZScpIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlOiB0eXBlVmFsdWUgfTtcbiAgICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnVGVzdCBEYXRhIFByb2ZpbGUnKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogdGVzdERhdGFQcm9maWxlVmFsdWUgfTtcbiAgICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnVGVzdCBEYXRhIFNldCcpIHJldHVybiB7IC4uLml0ZW0sIHZhbHVlOiB0ZXN0RGF0YVNldFZhbHVlIH07XG4gICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgLi4uc2VjdGlvbiwgaXRlbXMgfTtcbiAgICAgIH1cbiAgICAgIGlmIChzZWN0aW9uLnRpdGxlID09PSAnQUkgQ29uZmlndXJhdGlvbicpIHtcbiAgICAgICAgY29uc3QgZW5hYmxlQWlTbWFydG5lc3NWYWx1ZSA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdlbmFibGVBaVNtYXJ0bmVzcycpPy52YWx1ZTtcbiAgICAgICAgY29uc3QgZGVmYXVsdEFpQWN0aW9uVmFsdWUgPSB0aGlzLmVkaXRGb3JtLmdldCgnZGVmYXVsdEFpQWN0aW9uJyk/LnZhbHVlO1xuICAgICAgICBjb25zdCBrbm93bGVkZ2VCYXNlVmFsdWUgPSB0aGlzLmVkaXRGb3JtLmdldCgna25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZScpPy52YWx1ZTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBzZWN0aW9uLml0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnRW5hYmxlIEFJIG1ldGFkYXRhIGNvbGxlY3Rpb24nKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogdXNlQWlNZXRhZGF0YSB9O1xuICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnRW5hYmxlIEFJIFNtYXJ0bmVzcycgJiYgZW5hYmxlQWlTbWFydG5lc3NWYWx1ZSAhPSBudWxsICYmIGVuYWJsZUFpU21hcnRuZXNzVmFsdWUgIT09ICcnKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogZW5hYmxlQWlTbWFydG5lc3NWYWx1ZSB9O1xuICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnRGVmYXVsdCBBSSBBY3Rpb24nICYmIGRlZmF1bHRBaUFjdGlvblZhbHVlICE9IG51bGwgJiYgZGVmYXVsdEFpQWN0aW9uVmFsdWUgIT09ICcnKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogZGVmYXVsdEFpQWN0aW9uVmFsdWUgfTtcbiAgICAgICAgICBpZiAoaXRlbS5sYWJlbCA9PT0gJ0tub3dsZWRnZSBCYXNlIERlZmF1bHQgVGVzdCBDYXNlJyAmJiBrbm93bGVkZ2VCYXNlVmFsdWUgIT0gbnVsbCAmJiBrbm93bGVkZ2VCYXNlVmFsdWUgIT09ICcnKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZToga25vd2xlZGdlQmFzZVZhbHVlIH07XG4gICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4geyAuLi5zZWN0aW9uLCBpdGVtcyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlY3Rpb247XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1lcmdlQ29uZmlnU2VjdGlvbnNSb3cyKCk6IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb25bXSB7XG4gICAgY29uc3QgcGxhdGZvcm0gPSB0aGlzLnBsYXRmb3JtO1xuICAgIGNvbnN0IGRlZmF1bHRCcm93c2VyID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ2RlZmF1bHRCcm93c2VyJyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IGRlZmF1bHRWaWV3cG9ydCA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdkZWZhdWx0Vmlld3BvcnQnKT8udmFsdWUgPz8gJyc7XG4gICAgY29uc3QgZGV2aWNlVHlwZSA9IHRoaXMuZWRpdEZvcm0uZ2V0KCdkZXZpY2VUeXBlJyk/LnZhbHVlID8/ICcnO1xuICAgIGNvbnN0IGRldmljZU9TID0gdGhpcy5lZGl0Rm9ybS5nZXQoJ2RldmljZU9TJyk/LnZhbHVlID8/ICcnO1xuXG4gICAgbGV0IHJlc3VsdCA9IHRoaXMuY29uZmlnU2VjdGlvbnNSb3cyLm1hcCgoc2VjdGlvbikgPT4ge1xuICAgICAgaWYgKHNlY3Rpb24udGl0bGUgPT09ICdXYWl0cyAmIFJldHJpZXMnIHx8IHNlY3Rpb24udGl0bGUgPT09ICdXYWl0IGFuZCByZXRyaWVzJykge1xuICAgICAgICBjb25zdCBhdXRvV2FpdFZhbHVlID0gdGhpcy5hdXRvV2FpdEVuYWJsZWQgPyAnRW5hYmxlZCcgOiAnJztcbiAgICAgICAgY29uc3QgaXRlbXMgPSBzZWN0aW9uLml0ZW1zLm1hcCgoaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpdGVtLmxhYmVsID09PSAnQXV0byBXYWl0JykgcmV0dXJuIHsgLi4uaXRlbSwgdmFsdWU6IGF1dG9XYWl0VmFsdWUgfTtcbiAgICAgICAgICBpZiAoaXRlbS5sYWJlbCA9PT0gJ0VuYWJsZSBBdm9pZCBBdXRvIHdhaXQgZm9yIHN0ZXBzJykgcmV0dXJuIHsgLi4uaXRlbSwgdmFsdWU6IHRoaXMuYXV0b1dhaXRFbmFibGVkIH07XG4gICAgICAgICAgaWYgKGl0ZW0ubGFiZWwgPT09ICdSZXRyeSBGYWlsZWQgU3RlcHMnKSByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZTogdGhpcy5lbXB0eU51bVRvWmVybyh0aGlzLnJldHJ5RmFpbGVkU3RlcHMpIH07XG4gICAgICAgICAgaWYgKGl0ZW0ubGFiZWwgPT09ICdUZXN0IENhc2UgVGltZW91dCAobWludXRlcyknKSB7XG4gICAgICAgICAgICBjb25zdCB0cmltbWVkID0gKHRoaXMudGVzdENhc2VUaW1lb3V0ID8/ICcnKS50b1N0cmluZygpLnRyaW0oKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy50ZXN0Q2FzZVRpbWVvdXRNb2RlID09PSAnb3JnJyB8fCB0cmltbWVkID09PSAnJyA/IE9SR19MRVZFTF9TRU5USU5FTCA6IHRyaW1tZWQ7XG4gICAgICAgICAgICByZXR1cm4geyAuLi5pdGVtLCB2YWx1ZSB9O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXRlbS5sYWJlbCA9PT0gJ1dhaXQgVGltZW91dCBmb3IgTG9jYXRvcnMgKHNlY3MpJykgcmV0dXJuIHsgLi4uaXRlbSwgdmFsdWU6IHRoaXMuZW1wdHlOdW1Ub1plcm8odGhpcy53YWl0VGltZW91dExvY2F0b3JzKSB9O1xuICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgLi4uc2VjdGlvbiwgaXRlbXMgfTtcbiAgICAgIH1cbiAgICAgIGlmIChzZWN0aW9uLnRpdGxlID09PSAnRGV2aWNlJyB8fCBzZWN0aW9uLnRpdGxlID09PSAnRGV2aWNlIFNldHRpbmcnKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1zOiB7IGxhYmVsOiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfVtdID0gW1xuICAgICAgICAgIC4uLihwbGF0Zm9ybSA9PT0gJ3dlYidcbiAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IEJyb3dzZXInLCB2YWx1ZTogZGVmYXVsdEJyb3dzZXIgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnRGVmYXVsdCBWaWV3cG9ydCcsIHZhbHVlOiBkZWZhdWx0Vmlld3BvcnQgfSxcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgOiBbXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ1R5cGUnLCB2YWx1ZTogZGV2aWNlVHlwZSB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdPUycsIHZhbHVlOiBkZXZpY2VPUyB9LFxuICAgICAgICAgICAgICBdKSxcbiAgICAgICAgXTtcbiAgICAgICAgcmV0dXJuIHsgLi4uc2VjdGlvbiwgaXRlbXMgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZWN0aW9uO1xuICAgIH0pO1xuXG4gICAgY29uc3QgZXhpc3RpbmdEZXZpY2UgPSByZXN1bHQuZmluZCgocykgPT4gcy50aXRsZSA9PT0gJ0RldmljZScgfHwgcy50aXRsZSA9PT0gJ0RldmljZSBTZXR0aW5nJyk7XG4gICAgaWYgKCFleGlzdGluZ0RldmljZSkge1xuICAgICAgY29uc3QgZGV2aWNlU2VjdGlvbjogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbiA9IHtcbiAgICAgICAgdGl0bGU6ICdEZXZpY2UnLFxuICAgICAgICBpY29uOiAnZGV2aWNlcycsXG4gICAgICAgIGl0ZW1zOiBbXG4gICAgICAgICAgLi4uKHBsYXRmb3JtID09PSAnd2ViJ1xuICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ0RlZmF1bHQgQnJvd3NlcicsIHZhbHVlOiBkZWZhdWx0QnJvd3NlciB9LFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdEZWZhdWx0IFZpZXdwb3J0JywgdmFsdWU6IGRlZmF1bHRWaWV3cG9ydCB9LFxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnVHlwZScsIHZhbHVlOiBkZXZpY2VUeXBlIH0sXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ09TJywgdmFsdWU6IGRldmljZU9TIH0sXG4gICAgICAgICAgICAgIF0pLFxuICAgICAgICBdLFxuICAgICAgfTtcbiAgICAgIHJlc3VsdCA9IFsuLi5yZXN1bHQsIGRldmljZVNlY3Rpb25dO1xuICAgIH1cblxuICAgIGNvbnN0IGtleUZsYWdzU2VjdGlvbjogVGVzdENhc2VEZXRhaWxzQ29uZmlnU2VjdGlvbiA9IHtcbiAgICAgIHRpdGxlOiAnS2V5IEZsYWdzJyxcbiAgICAgIGljb246ICdmbGFnJyxcbiAgICAgIGl0ZW1zOiBbXG4gICAgICAgIHsgbGFiZWw6ICdNb2JpbGUgVGVzdGluZycsIHZhbHVlOiB0aGlzLm1vYmlsZVRlc3RpbmdFbmFibGVkID8gJ0VuYWJsZWQnIDogJycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0V4dGVuc2lvbiBVc2UnLCB2YWx1ZTogdGhpcy5leHRlbnNpb25Vc2VFbmFibGVkID8gJ0VuYWJsZWQnIDogJycgfSxcbiAgICAgICAgeyBsYWJlbDogJ0RhdGEgRHJpdmVuJywgdmFsdWU6IHRoaXMuZGF0YURyaXZlbkVuYWJsZWQgPyAnRW5hYmxlZCcgOiAnJyB9LFxuICAgICAgXSxcbiAgICB9O1xuICAgIGNvbnN0IGV4aXN0aW5nS2V5RmxhZ3MgPSByZXN1bHQuZmluZCgocykgPT4gcy50aXRsZSA9PT0gJ0tleSBGbGFncycpO1xuICAgIGlmIChleGlzdGluZ0tleUZsYWdzKSB7XG4gICAgICByZXN1bHQgPSByZXN1bHQubWFwKChzKSA9PlxuICAgICAgICBzLnRpdGxlID09PSAnS2V5IEZsYWdzJyA/IGtleUZsYWdzU2VjdGlvbiA6IHNcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IFsuLi5yZXN1bHQsIGtleUZsYWdzU2VjdGlvbl07XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICBvbkNhbmNlbCgpOiB2b2lkIHtcbiAgICB0aGlzLmNhbmNlbC5lbWl0KCk7XG4gIH1cblxuICB0cmFja0J5TGFiZWwoX2k6IG51bWJlciwgbGFiZWw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGxhYmVsO1xuICB9XG5cbiAgdHJhY2tCeUNvbmZpZ1RpdGxlKF9pOiBudW1iZXIsIHNlY3Rpb246IFRlc3RDYXNlRGV0YWlsc0NvbmZpZ1NlY3Rpb24pOiBzdHJpbmcge1xuICAgIHJldHVybiBzZWN0aW9uLnRpdGxlO1xuICB9XG5cbiAgLyoqIEN1cnJlbnQgbGFiZWxzIHVzZSBjb25zaXN0ZW50IGluZGlnbyBzdHlsZSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IExBQkVMX0NISVBfU1RZTEUgPSB7XG4gICAgYmc6ICcjNjM2NkYxJyxcbiAgICBib3JkZXI6ICcjNjM2NkYxJyxcbiAgICB0ZXh0OiAnI0ZGRkZGRicsXG4gICAgaWNvbjogJyNGRkZGRkYnLFxuICB9O1xuXG4gIGdldEN1cnJlbnRMYWJlbENoaXBTdHlsZShfbGFiZWw6IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgIGNvbnN0IGNvbG9ycyA9IHRoaXMuTEFCRUxfQ0hJUF9TVFlMRTtcbiAgICByZXR1cm4ge1xuICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBjb2xvcnMuYmcsXG4gICAgICAnYm9yZGVyLWNvbG9yJzogY29sb3JzLmJvcmRlcixcbiAgICAgICdib3JkZXItd2lkdGgnOiAnMXB4JyxcbiAgICAgICdib3JkZXItc3R5bGUnOiAnc29saWQnLFxuICAgICAgY29sb3I6IGNvbG9ycy50ZXh0LFxuICAgIH07XG4gIH1cblxuICBnZXRMYWJlbENsb3NlSWNvbkNvbG9yKF9sYWJlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5MQUJFTF9DSElQX1NUWUxFLmljb247XG4gIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTQgY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLXJvdW5kZWQtbGcgY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjRTJFOEYwXSBjcWEtcHktNFwiPlxuICA8IS0tIEJhc2ljIGRldGFpbHM6IERlc2NyaXB0aW9uLCBTdGF0dXMvUHJpb3JpdHkvVHlwZSwgTGFiZWxzIChsaWdodCBiYWNrZ3JvdW5kIGNvbnRhaW5lcikgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtc2VsZi1zdHJldGNoIGNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTQgY3FhLXJvdW5kZWQtbGcgY3FhLWJvcmRlciBjcWEtYm9yZGVyLVsjRTJFOEYwXSBjcWEtYmctWyNGOEY5RkVdIGNxYS1wLTRcIj5cbiAgPCEtLSBEZXNjcmlwdGlvbiAoRmlnbWE6IGRvY3VtZW50IGljb24sIHRleHRhcmVhIHdpdGggbGlnaHQgcHVycGxlIGJnKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIuNVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS13LTUgY3FhLWgtNSBjcWEtcC0xIGNxYS1mbGV4LXNocmluay0wIGNxYS1iZy1bIzNGNDNFRTFBXSBjcWEtcm91bmRlZC1tZCBjcWEtaW5saW5lLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyMxQjFGRUJdIGNxYS10ZXh0LVsxMnB4XSBjcWEtdy0zIGNxYS1oLTMgY3FhLWxlYWRpbmctbm9uZSBjcWEtYmxvY2tcIj5kZXNjcmlwdGlvbjwvbWF0LWljb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyMzNzQxNTFdIGNxYS10ZXh0LXNtIGNxYS1mb250LXNlbWlib2xkIGNxYS1sZWFkaW5nLVsxOS42cHhdXCI+e3sgZGVzY3JpcHRpb25UaXRsZSB9fTwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8Y3FhLWN1c3RvbS10ZXh0YXJlYVxuICAgICAgW3ZhbHVlXT1cImVkaXREZXNjcmlwdGlvblwiXG4gICAgICAodmFsdWVDaGFuZ2UpPVwiZWRpdERlc2NyaXB0aW9uID0gJGV2ZW50XCJcbiAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICBbcm93c109XCI0XCJcbiAgICAgIFtlbmFibGVNYXJrZG93bl09XCJlbmFibGVNYXJrZG93blwiXG4gICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIGRlc2NyaXB0aW9uLi4uXCJcbiAgICAgIHRleHRhcmVhSW5saW5lU3R5bGU9XCJwYWRkaW5nOiAxMnB4OyBmb250LXNpemU6IDEycHg7IGxpbmUtaGVpZ2h0OiAxMDAlXCJcbiAgICAgIGNsYXNzPVwiY3FhLXctZnVsbFwiPlxuICAgIDwvY3FhLWN1c3RvbS10ZXh0YXJlYT5cbiAgPC9kaXY+XG5cbiAgPCEtLSBTdGF0dXMsIFByaW9yaXR5ICYgVHlwZSAoRmlnbWE6IHNpZGUtYnktc2lkZSBkcm9wZG93bnMsIGNxYS1keW5hbWljLXNlbGVjdCkgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZ3JpZCBjcWEtZ3JpZC1jb2xzLTIgY3FhLWdhcC00XCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1tZWRpdW1cIj5TdGF0dXM8L2xhYmVsPlxuICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgIFtmb3JtXT1cImVkaXRGb3JtXCJcbiAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZ0ZvclNlbGVjdCgnc3RhdHVzJywgc3RhdHVzU2VsZWN0Q29uZmlnKVwiXG4gICAgICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAobG9hZE1vcmUpPVwib25TZWxlY3RMb2FkTW9yZSgkZXZlbnQpXCJcbiAgICAgICAgICAoc2VsZWN0Q2xpY2spPVwib25TZWxlY3RPcGVuZWQoJ3N0YXR1cycpXCJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLXctZnVsbFwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgKm5nSWY9XCIhaXNTdGVwR3JvdXBcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTJcIj5cbiAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1tZWRpdW1cIj5Qcmlvcml0eTwvbGFiZWw+XG4gICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgIFtjb25maWddPVwiZ2V0Q29uZmlnRm9yU2VsZWN0KCdwcmlvcml0eScsIHByaW9yaXR5U2VsZWN0Q29uZmlnKVwiXG4gICAgICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAobG9hZE1vcmUpPVwib25TZWxlY3RMb2FkTW9yZSgkZXZlbnQpXCJcbiAgICAgICAgICAoc2VsZWN0Q2xpY2spPVwib25TZWxlY3RPcGVuZWQoJ3ByaW9yaXR5JylcIlxuICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgPC9kaXY+XG4gICAgPGRpdiAqbmdJZj1cIiFpc1N0ZXBHcm91cFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMlwiPlxuICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWyM2QjcyODBdIGNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LW1lZGl1bVwiPlR5cGU8L2xhYmVsPlxuICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgIFtmb3JtXT1cImVkaXRGb3JtXCJcbiAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZ0ZvclNlbGVjdCgndHlwZScsIHR5cGVTZWxlY3RDb25maWcpXCJcbiAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgndHlwZScpXCJcbiAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLXctZnVsbFwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8IS0tIExhYmVscyAoRmlnbWE6IEN1cnJlbnQgTGFiZWxzIHdpdGggQ2xlYXIgQWxsLCBjcWEtYmFkZ2Ugd2l0aCB4LCBGcmVxdWVudGx5IHVzZWQsIFNlYXJjaCkgLS0+XG4gIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yLjVcIj5cbiAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjMzc0MTUxXSBjcWEtdGV4dC1bMTVweF0gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLWZvbnQtbWVkaXVtXCI+Q3VycmVudCBMYWJlbHMgKHt7IGVkaXRMYWJlbHMubGVuZ3RoIH19KTwvc3Bhbj5cbiAgICAgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICpuZ0lmPVwiZWRpdExhYmVscy5sZW5ndGggPiAwXCJcbiAgICAgICAgY2xhc3M9XCJjcWEtdGV4dC14cyBjcWEtdGV4dC1bI0RDMjYyNl0gaG92ZXI6Y3FhLXVuZGVybGluZSBjcWEtZm9udC1ub3JtYWxcIlxuICAgICAgICAoY2xpY2spPVwib25DbGVhckFsbExhYmVscygpXCI+XG4gICAgICAgIENsZWFyIEFsbFxuICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LXdyYXAgY3FhLWdhcC0yXCIgKm5nSWY9XCJlZGl0TGFiZWxzLmxlbmd0aCA+IDBcIj5cbiAgICAgIDxkaXZcbiAgICAgICAgKm5nRm9yPVwibGV0IGxhYmVsIG9mIGVkaXRMYWJlbHM7IHRyYWNrQnk6IHRyYWNrQnlMYWJlbFwiXG4gICAgICAgIGNsYXNzPVwiY3FhLWlubGluZS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0xLjUgY3FhLXB4LTIuNSBjcWEtcHktMSBjcWEtdGV4dC14cyBjcWEtZm9udC1tZWRpdW0gY3FhLXJvdW5kZWQtbWQgY3FhLWJvcmRlclwiXG4gICAgICAgIFtuZ1N0eWxlXT1cImdldEN1cnJlbnRMYWJlbENoaXBTdHlsZShsYWJlbClcIj5cbiAgICAgICAgPHNwYW4+e3sgbGFiZWwgfX08L3NwYW4+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWp1c3RpZnktY2VudGVyIGNxYS13LTMuNSBjcWEtaC0zLjUgY3FhLXJvdW5kZWQgaG92ZXI6Y3FhLW9wYWNpdHktODAgY3FhLXRyYW5zaXRpb24tb3BhY2l0eSBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWJvcmRlci1ub25lIGNxYS1wLTAgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICBbc3R5bGUuY29sb3JdPVwiZ2V0TGFiZWxDbG9zZUljb25Db2xvcihsYWJlbClcIlxuICAgICAgICAgIChjbGljayk9XCJvblJlbW92ZUxhYmVsKGxhYmVsKVwiXG4gICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCInUmVtb3ZlICcgKyBsYWJlbFwiPlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsxNHB4XSBjcWEtdy0zLjUgY3FhLWgtMy41XCI+Y2xvc2U8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LVsjMzc0MTUxXSBjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1tZWRpdW1cIj5GcmVxdWVudGx5IHVzZWQ8L3NwYW4+XG4gICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtd3JhcCBjcWEtZ2FwLTJcIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICpuZ0Zvcj1cImxldCBsYWJlbCBvZiBmcmVxdWVudGx5VXNlZExhYmVsczsgdHJhY2tCeTogdHJhY2tCeUxhYmVsXCJcbiAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICBjbGFzcz1cImNxYS1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cIm9uQWRkRnJlcXVlbnRMYWJlbChsYWJlbClcIj5cbiAgICAgICAgICA8Y3FhLWJhZGdlXG4gICAgICAgICAgICBbbGFiZWxdPVwibGFiZWxcIlxuICAgICAgICAgICAgdmFyaWFudD1cImRlZmF1bHRcIlxuICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIGJhY2tncm91bmRDb2xvcj1cIiNFOEU5RkZcIlxuICAgICAgICAgICAgdGV4dENvbG9yPVwiIzNGNDNFRVwiXG4gICAgICAgICAgICBib3JkZXJDb2xvcj1cIiNFOEU5RkZcIj5cbiAgICAgICAgICA8L2NxYS1iYWRnZT5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgICA8bGFiZWwgY2xhc3M9XCJjcWEtdGV4dC1bIzM3NDE1MV0gY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLWZvbnQtbWVkaXVtXCI+QWRkIGxhYmVsczwvbGFiZWw+XG4gICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgW2NvbmZpZ109XCJsYWJlbHNTZWxlY3RDb25maWdcIlxuICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgnbGFiZWxzJylcIlxuICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgIChhZGRDdXN0b21WYWx1ZSk9XCJvbkxhYmVsc0FkZEN1c3RvbVZhbHVlKCRldmVudClcIlxuICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+XG4gICAgPC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gIDwvZGl2PlxuICA8L2Rpdj5cblxuXG4gIDwhLS0gQ29uZmlndXJhdGlvbiAoRmlnbWE6IGNvbGxhcHNpYmxlLCBnZWFyIGljb24sIGxpZ2h0IGJhY2tncm91bmQgY29udGFpbmVyKSAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1zZWxmLXN0cmV0Y2ggY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtWzEycHhdIGNxYS1yb3VuZGVkLWxnIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1bI0UyRThGMF0gY3FhLWJnLVsjRjhGOUZFXSBjcWEtcC00XCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS10ZXh0LWxlZnQgY3FhLXctZnVsbFwiPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS13LTUgY3FhLWgtNSBjcWEtcC0xIGNxYS1mbGV4LXNocmluay0wIGNxYS1iZy1bIzNGNDNFRTFBXSBjcWEtcm91bmRlZC1tZCBjcWEtaW5saW5lLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyMxQjFGRUJdIGNxYS10ZXh0LVsxMnB4XSBjcWEtdy0zIGNxYS1oLTMgY3FhLWxlYWRpbmctbm9uZSBjcWEtYmxvY2tcIj5zZXR0aW5nczwvbWF0LWljb24+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtWyMzNzQxNTFdIGNxYS10ZXh0LXNtIGNxYS1mb250LXNlbWlib2xkIGNxYS1sZWFkaW5nLVsxOS41cHhdXCI+e3sgY29uZmlnVGl0bGUgfX08L3NwYW4+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2ICpuZ0lmPVwiY29uZmlnRXhwYW5kZWRcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTUgY3FhLXRleHQteHNcIj5cbiAgICAgIDwhLS0gRXhlY3V0aW9uIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIuNSBjcWEtbWluLXctMCBjcWEtcm91bmRlZC1sZyBjcWEtcC00IGNxYS1tYi00IGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTJFOEYwXVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLXctZnVsbCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWJvcmRlci1ub25lIGNxYS1wLTAgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwiZXhlY3V0aW9uRXhwYW5kZWQgPSAhZXhlY3V0aW9uRXhwYW5kZWRcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtdy01IGNxYS1oLTUgY3FhLXAtMSBjcWEtZmxleC1zaHJpbmstMCBjcWEtYmctWyMzRjQzRUUxQV0gY3FhLXJvdW5kZWQtbWQgY3FhLWlubGluZS1mbGV4IGNxYS1qdXN0aWZ5LWNlbnRlciBjcWEtaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsjMUIxRkVCXSBjcWEtdGV4dC1bMTJweF0gY3FhLXctMyBjcWEtaC0zIGNxYS1sZWFkaW5nLW5vbmUgY3FhLWJsb2NrXCI+cGxheV9jaXJjbGU8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTExODI3XVwiPkV4ZWN1dGlvbjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzY0NzQ4Ql0gY3FhLXRleHQteGwgY3FhLXctNSBjcWEtaC01XCI+XG4gICAgICAgICAgICB7eyBleGVjdXRpb25FeHBhbmRlZCA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnIH19XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJleGVjdXRpb25FeHBhbmRlZFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMyBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiaGFzUHJlcmVxdWlzaXRlQ2FzZUNvbmZpZ1wiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41IGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj4gXG4gICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgICBbZm9ybV09XCJlZGl0Rm9ybVwiXG4gICAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZ0ZvclNlbGVjdCgncHJlcmVxdWlzaXRlQ2FzZXMnLCBwcmVyZXF1aXNpdGVDYXNlU2VsZWN0Q29uZmlnKVwiXG4gICAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgKGxvYWRNb3JlKT1cIm9uU2VsZWN0TG9hZE1vcmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VsZWN0Q2xpY2spPVwib25TZWxlY3RPcGVuZWQoJ3ByZXJlcXVpc2l0ZUNhc2VzJylcIlxuICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLXctZnVsbFwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PiAtLT5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41IGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtdGV4dC14cyBjcWEtZm9udC1tZWRpdW1cIj5UZXN0IERhdGEgUHJvZmlsZTwvbGFiZWw+XG4gICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgICBbZm9ybV09XCJlZGl0Rm9ybVwiXG4gICAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZ0ZvclNlbGVjdCgndGVzdERhdGFQcm9maWxlJywgdGVzdERhdGFQcm9maWxlU2VsZWN0Q29uZmlnKVwiXG4gICAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgKGxvYWRNb3JlKT1cIm9uU2VsZWN0TG9hZE1vcmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VsZWN0Q2xpY2spPVwib25TZWxlY3RPcGVuZWQoJ3Rlc3REYXRhUHJvZmlsZScpXCJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGxcIj48L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiIWlzU3RlcEdyb3VwXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjUgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiY3FhLXRleHQtWyM2ODczODldIGNxYS10ZXh0LXhzIGNxYS1mb250LW1lZGl1bVwiPlRlc3QgRGF0YSBTZXQ8L2xhYmVsPlxuICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJnZXRDb25maWdGb3JTZWxlY3QoJ3Rlc3REYXRhU2V0JywgdGVzdERhdGFTZXRTZWxlY3RDb25maWcpXCJcbiAgICAgICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWxlY3RTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAobG9hZE1vcmUpPVwib25TZWxlY3RMb2FkTW9yZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgndGVzdERhdGFTZXQnKVwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41IGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS10ZXh0LVsjNkI3MjgwXSBjcWEtdGV4dC14cyBjcWEtZm9udC1tZWRpdW1cIj5WaWRlbyBSZWNvcmRpbmc8L2xhYmVsPlxuICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJnZXRDb25maWdGb3JTZWxlY3QoJ3ZpZGVvUmVjb3JkaW5nJywgdmlkZW9SZWNvcmRpbmdTZWxlY3RDb25maWcpXCJcbiAgICAgICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWxlY3RTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAobG9hZE1vcmUpPVwib25TZWxlY3RMb2FkTW9yZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgndmlkZW9SZWNvcmRpbmcnKVwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBBSSBDb25maWd1cmF0aW9uIC0tPlxuICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTIuNSBjcWEtbWluLXctMCBjcWEtcm91bmRlZC1sZyBjcWEtcC00IGNxYS1tYi00IGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLVsjRTJFOEYwXVwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1qdXN0aWZ5LWJldHdlZW4gY3FhLXctZnVsbCBjcWEtYmctdHJhbnNwYXJlbnQgY3FhLWJvcmRlci1ub25lIGNxYS1wLTAgY3FhLWN1cnNvci1wb2ludGVyXCJcbiAgICAgICAgICAoY2xpY2spPVwiYWlDb25maWdFeHBhbmRlZCA9ICFhaUNvbmZpZ0V4cGFuZGVkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctNSBjcWEtaC01IGNxYS1wLTEgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJnLVsjM0Y0M0VFMUFdIGNxYS1yb3VuZGVkLW1kIGNxYS1pbmxpbmUtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzFCMUZFQl0gY3FhLXRleHQtWzEycHhdIGNxYS13LTMgY3FhLWgtMyBjcWEtbGVhZGluZy1ub25lIGNxYS1ibG9ja1wiPnNtYXJ0X3RveTwvbWF0LWljb24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLWZvbnQtc2VtaWJvbGQgY3FhLXRleHQtWyMxMTE4MjddXCI+QUkgQ29uZmlndXJhdGlvbjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzY0NzQ4Ql0gY3FhLXRleHQteGwgY3FhLXctNSBjcWEtaC01XCI+XG4gICAgICAgICAgICB7eyBhaUNvbmZpZ0V4cGFuZGVkID8gJ2V4cGFuZF9sZXNzJyA6ICdleHBhbmRfbW9yZScgfX1cbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cImFpQ29uZmlnRXhwYW5kZWRcIiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTMgY3FhLXB5LTAgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjUgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJnZXRDb25maWdGb3JTZWxlY3QoJ2VuYWJsZUFpU21hcnRuZXNzJywgZW5hYmxlQWlTbWFydG5lc3NTZWxlY3RDb25maWcpXCJcbiAgICAgICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWxlY3RTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAobG9hZE1vcmUpPVwib25TZWxlY3RMb2FkTW9yZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChzZWxlY3RDbGljayk9XCJvblNlbGVjdE9wZW5lZCgnZW5hYmxlQWlTbWFydG5lc3MnKVwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEuNSBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICA8Y3FhLWR5bmFtaWMtc2VsZWN0XG4gICAgICAgICAgICBbZm9ybV09XCJlZGl0Rm9ybVwiXG4gICAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZ0ZvclNlbGVjdCgnZGVmYXVsdEFpQWN0aW9uJywgZGVmYXVsdEFpQWN0aW9uU2VsZWN0Q29uZmlnKVwiXG4gICAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgKGxvYWRNb3JlKT1cIm9uU2VsZWN0TG9hZE1vcmUoJGV2ZW50KVwiXG4gICAgICAgICAgICAoc2VsZWN0Q2xpY2spPVwib25TZWxlY3RPcGVuZWQoJ2RlZmF1bHRBaUFjdGlvbicpXCJcbiAgICAgICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZWxlY3Rpb25DaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICBjbGFzcz1cImNxYS13LWZ1bGxcIj48L2NxYS1keW5hbWljLXNlbGVjdD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41IGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3RcbiAgICAgICAgICAgIFtmb3JtXT1cImVkaXRGb3JtXCJcbiAgICAgICAgICAgIFtjb25maWddPVwiZ2V0Q29uZmlnRm9yU2VsZWN0KCdrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlJywga25vd2xlZGdlQmFzZURlZmF1bHRUZXN0Q2FzZVNlbGVjdENvbmZpZylcIlxuICAgICAgICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgICAgKHNlbGVjdENsaWNrKT1cIm9uU2VsZWN0T3BlbmVkKCdrbm93bGVkZ2VCYXNlRGVmYXVsdFRlc3RDYXNlJylcIlxuICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLXctZnVsbFwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjUgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgPGNxYS1keW5hbWljLXNlbGVjdFxuICAgICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgICAgW2NvbmZpZ109XCJnZXRDb25maWdGb3JTZWxlY3QoJ3VzZUFpTWV0YWRhdGEnLCBhaU1ldGFkYXRhQ29sbGVjdGlvblNlbGVjdENvbmZpZylcIlxuICAgICAgICAgICAgKHNlYXJjaENoYW5nZSk9XCJvblNlbGVjdFNlYXJjaCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgICAgKHNlbGVjdENsaWNrKT1cIm9uU2VsZWN0T3BlbmVkKCd1c2VBaU1ldGFkYXRhJylcIlxuICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY3FhLXctZnVsbFwiPjwvY3FhLWR5bmFtaWMtc2VsZWN0PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICAgPCEtLSBXYWl0cyAmIFJldHJpZXMtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yLjUgY3FhLW1pbi13LTAgY3FhLXJvdW5kZWQtbGcgY3FhLXAtNCBjcWEtbWItNCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0UyRThGMF1cIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS13LWZ1bGwgY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1ib3JkZXItbm9uZSBjcWEtcC0wIGNxYS1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cIndhaXRzUmV0cmllc0V4cGFuZGVkID0gIXdhaXRzUmV0cmllc0V4cGFuZGVkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctNSBjcWEtaC01IGNxYS1wLTEgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJnLVsjM0Y0M0VFMUFdIGNxYS1yb3VuZGVkLW1kIGNxYS1pbmxpbmUtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzFCMUZFQl0gY3FhLXRleHQtWzEycHhdIGNxYS13LTMgY3FhLWgtMyBjcWEtbGVhZGluZy1ub25lIGNxYS1ibG9ja1wiPnRpbWVyPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzExMTgyN11cIj5XYWl0IGFuZCBSZXRyaWVzPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImNxYS10ZXh0LVsjNjQ3NDhCXSBjcWEtdGV4dC14bCBjcWEtdy01IGNxYS1oLTVcIj5cbiAgICAgICAgICAgIHt7IHdhaXRzUmV0cmllc0V4cGFuZGVkID8gJ2V4cGFuZF9sZXNzJyA6ICdleHBhbmRfbW9yZScgfX1cbiAgICAgICAgICA8L21hdC1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGRpdiAqbmdJZj1cIndhaXRzUmV0cmllc0V4cGFuZGVkXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yIGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXB4LTMgY3FhLXB5LTIuNSBjcWEtcm91bmRlZC1sZ1wiPlxuICAgICAgICAgICAgPGNxYS1jdXN0b20tdG9nZ2xlIFtjaGVja2VkXT1cImF1dG9XYWl0RW5hYmxlZFwiIChjaGVja2VkQ2hhbmdlKT1cImF1dG9XYWl0RW5hYmxlZCA9ICRldmVudFwiIGFyaWFMYWJlbD1cIkVuYWJsZSBBdm9pZCBBdXRvIHdhaXQgZm9yIHN0ZXBzXCI+PC9jcWEtY3VzdG9tLXRvZ2dsZT5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3FhLXRleHQtc20gY3FhLWxlYWRpbmctWzE5LjZweF0gY3FhLWZvbnQtbm9ybWFsIGNxYS10ZXh0LVsjMTExODI3XVwiPkVuYWJsZSBBdm9pZCBBdXRvIHdhaXQgZm9yIHN0ZXBzPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0xLjUgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgICAgICAgdHlwZT1cIm51bWJlclwiXG4gICAgICAgICAgICAgIGxhYmVsPVwiUmV0cnkgRmFpbGVkIFN0ZXBzXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cInJldHJ5RmFpbGVkU3RlcHNcIlxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwicmV0cnlGYWlsZWRTdGVwcyA9IG9ubHlEaWdpdHMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMFwiXG4gICAgICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgIHNpemU9XCJzbVwiXG4gICAgICAgICAgICAgIGxhYmVsSW5saW5lU3R5bGU9XCJmb250LXNpemU6IDE0cHg7IGxpbmUtaGVpZ2h0OiAxOS42cHhcIj5cbiAgICAgICAgICAgIDwvY3FhLWN1c3RvbS1pbnB1dD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMS41IGNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImNxYS1mb250LW1lZGl1bSBjcWEtdGV4dC1bIzM3NDE1MV0gY3FhLXRleHQteHMgY3FhLW1iLTFcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTRweDsgbGluZS1oZWlnaHQ6IDE5LjZweFwiPlxuICAgICAgICAgICAgICBUZXN0IENhc2UgVGltZW91dCAobWludXRlcylcbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLW1pbi13LTAgY3FhLXctZnVsbFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWlubGluZS1mbGV4IGNxYS1yb3VuZGVkLW1kIGNxYS1ib3JkZXIgY3FhLWJvcmRlci1zb2xpZCBjcWEtYm9yZGVyLWdyYXktMjAwXCI+XG4gICAgICAgICAgICAgICAgPGNxYS1kcm9wZG93bi1idXR0b25cbiAgICAgICAgICAgICAgICAgIFtvcHRpb25zXT1cInRlc3RDYXNlVGltZW91dE1vZGVPcHRpb25zXCJcbiAgICAgICAgICAgICAgICAgIFtzZWxlY3RlZFZhbHVlXT1cInRlc3RDYXNlVGltZW91dE1vZGVcIlxuICAgICAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblRlc3RDYXNlVGltZW91dE1vZGVDaGFuZ2UoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDwvY3FhLWRyb3Bkb3duLWJ1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1taW4tdy0wXCI+XG4gICAgICAgICAgICAgICAgPGNxYS1jdXN0b20taW5wdXRcbiAgICAgICAgICAgICAgICAgIHR5cGU9XCJudW1iZXJcIlxuICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInRlc3RDYXNlVGltZW91dERpc3BsYXlWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidGVzdENhc2VUaW1lb3V0TW9kZSA9PT0gJ29yZydcIlxuICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInRlc3RDYXNlVGltZW91dCA9IG9ubHlEaWdpdHMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIjMwXCJcbiAgICAgICAgICAgICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICBzaXplPVwic21cIj5cbiAgICAgICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1mbGV4LWNvbCBjcWEtZ2FwLTEuNSBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgICA8Y3FhLWN1c3RvbS1pbnB1dFxuICAgICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcbiAgICAgICAgICAgICAgbGFiZWw9XCJXYWl0IFRpbWVvdXQgZm9yIExvY2F0b3JzIChzZWMpXCJcbiAgICAgICAgICAgICAgW3ZhbHVlXT1cIndhaXRUaW1lb3V0TG9jYXRvcnNcIlxuICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwid2FpdFRpbWVvdXRMb2NhdG9ycyA9IG9ubHlEaWdpdHMoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiMTVcIlxuICAgICAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgICAgICBzaXplPVwic21cIlxuICAgICAgICAgICAgICBsYWJlbElubGluZVN0eWxlPVwiZm9udC1zaXplOiAxNHB4OyBsaW5lLWhlaWdodDogMTkuNnB4XCI+XG4gICAgICAgICAgICA8L2NxYS1jdXN0b20taW5wdXQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2ICpuZ0lmPVwicGxhdGZvcm0gIT09ICdtb2JpbGUnXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yLjUgY3FhLW1pbi13LTAgY3FhLXJvdW5kZWQtbGcgY3FhLXAtNCBjcWEtbWItNCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0UyRThGMF1cIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS13LWZ1bGwgY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1ib3JkZXItbm9uZSBjcWEtcC0wIGNxYS1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cImRldmljZUV4cGFuZGVkID0gIWRldmljZUV4cGFuZGVkXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLXctNSBjcWEtaC01IGNxYS1wLTEgY3FhLWZsZXgtc2hyaW5rLTAgY3FhLWJnLVsjM0Y0M0VFMUFdIGNxYS1yb3VuZGVkLW1kIGNxYS1pbmxpbmUtZmxleCBjcWEtanVzdGlmeS1jZW50ZXIgY3FhLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzFCMUZFQl0gY3FhLXRleHQtWzEycHhdIGNxYS13LTMgY3FhLWgtMyBjcWEtbGVhZGluZy1ub25lIGNxYS1ibG9ja1wiPmRldmljZXM8L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LXNlbWlib2xkIGNxYS10ZXh0LVsjMTExODI3XVwiPkRldmljZSBTZXR0aW5nczwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJjcWEtdGV4dC1bIzY0NzQ4Ql0gY3FhLXRleHQteGwgY3FhLXctNSBjcWEtaC01XCI+XG4gICAgICAgICAgICB7eyBkZXZpY2VFeHBhbmRlZCA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnIH19XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJkZXZpY2VFeHBhbmRlZFwiIGNsYXNzPVwiY3FhLWZsZXggY3FhLWZsZXgtY29sIGNxYS1nYXAtMyBjcWEtbWluLXctMCBjcWEtdy1mdWxsXCI+XG4gICAgICAgICAgPCEtLSBXZWIgb25seTogbW9iaWxlIERldmljZSBTZXR0aW5ncyBoaWRkZW4gdGVtcG9yYXJpbHkgLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3RcbiAgICAgICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZ0ZvclNlbGVjdCgnZGVmYXVsdEJyb3dzZXInLCBkZWZhdWx0QnJvd3NlclNlbGVjdENvbmZpZylcIlxuICAgICAgICAgICAgICAoc2VhcmNoQ2hhbmdlKT1cIm9uU2VsZWN0U2VhcmNoKCRldmVudClcIlxuICAgICAgICAgICAgICAobG9hZE1vcmUpPVwib25TZWxlY3RMb2FkTW9yZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgKHNlbGVjdENsaWNrKT1cIm9uU2VsZWN0T3BlbmVkKCdkZWZhdWx0QnJvd3NlcicpXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1taW4tdy0wIGNxYS13LWZ1bGxcIj5cbiAgICAgICAgICAgIDxjcWEtZHluYW1pYy1zZWxlY3RcbiAgICAgICAgICAgICAgW2Zvcm1dPVwiZWRpdEZvcm1cIlxuICAgICAgICAgICAgICBbY29uZmlnXT1cImdldENvbmZpZ0ZvclNlbGVjdCgnZGVmYXVsdFZpZXdwb3J0JywgZGVmYXVsdFZpZXdwb3J0U2VsZWN0Q29uZmlnKVwiXG4gICAgICAgICAgICAgIChzZWFyY2hDaGFuZ2UpPVwib25TZWxlY3RTZWFyY2goJGV2ZW50KVwiXG4gICAgICAgICAgICAgIChsb2FkTW9yZSk9XCJvblNlbGVjdExvYWRNb3JlKCRldmVudClcIlxuICAgICAgICAgICAgICAoc2VsZWN0Q2xpY2spPVwib25TZWxlY3RPcGVuZWQoJ2RlZmF1bHRWaWV3cG9ydCcpXCJcbiAgICAgICAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvblNlbGVjdGlvbkNoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJjcWEtdy1mdWxsXCI+PC9jcWEtZHluYW1pYy1zZWxlY3Q+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgICA8IS0tIEtleSBGbGFncyAtLT5cbiAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yLjUgY3FhLW1pbi13LTAgY3FhLXJvdW5kZWQtbGcgY3FhLXAtNCBjcWEtbWItMCBjcWEtYm9yZGVyIGNxYS1ib3JkZXItc29saWQgY3FhLWJvcmRlci1bI0UyRThGMF1cIj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgIGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtanVzdGlmeS1iZXR3ZWVuIGNxYS13LWZ1bGwgY3FhLWJnLXRyYW5zcGFyZW50IGNxYS1ib3JkZXItbm9uZSBjcWEtcC0wIGNxYS1jdXJzb3ItcG9pbnRlclwiXG4gICAgICAgICAgKGNsaWNrKT1cImtleUZsYWdzRXhwYW5kZWQgPSAha2V5RmxhZ3NFeHBhbmRlZFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleCBjcWEtaXRlbXMtY2VudGVyIGNxYS1nYXAtMlwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS13LTUgY3FhLWgtNSBjcWEtcC0xIGNxYS1mbGV4LXNocmluay0wIGNxYS1iZy1bIzNGNDNFRTFBXSBjcWEtcm91bmRlZC1tZCBjcWEtaW5saW5lLWZsZXggY3FhLWp1c3RpZnktY2VudGVyIGNxYS1pdGVtcy1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyMxQjFGRUJdIGNxYS10ZXh0LVsxMnB4XSBjcWEtdy0zIGNxYS1oLTMgY3FhLWxlYWRpbmctbm9uZSBjcWEtYmxvY2tcIj5mbGFnPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1zZW1pYm9sZCBjcWEtdGV4dC1bIzExMTgyN11cIj5LZXkgRmxhZ3M8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiY3FhLXRleHQtWyM2NDc0OEJdIGNxYS10ZXh0LXhsIGNxYS13LTUgY3FhLWgtNVwiPlxuICAgICAgICAgICAge3sga2V5RmxhZ3NFeHBhbmRlZCA/ICdleHBhbmRfbGVzcycgOiAnZXhwYW5kX21vcmUnIH19XG4gICAgICAgICAgPC9tYXQtaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJrZXlGbGFnc0V4cGFuZGVkXCIgY2xhc3M9XCJjcWEtZmxleCBjcWEtZmxleC1jb2wgY3FhLWdhcC0yXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1weC0zIGNxYS1weS0yLjUgY3FhLXJvdW5kZWQtbGdcIj5cbiAgICAgICAgICAgIDxjcWEtY3VzdG9tLXRvZ2dsZSBbY2hlY2tlZF09XCJtb2JpbGVUZXN0aW5nRW5hYmxlZFwiIChjaGVja2VkQ2hhbmdlKT1cIm1vYmlsZVRlc3RpbmdFbmFibGVkID0gJGV2ZW50XCIgYXJpYUxhYmVsPVwiTW9iaWxlIFRlc3RpbmdcIj48L2NxYS1jdXN0b20tdG9nZ2xlPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1ub3JtYWwgY3FhLXRleHQtWyMxMTE4MjddXCI+TW9iaWxlIFRlc3Rpbmc8L3NwYW4+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1pdGVtcy1jZW50ZXIgY3FhLWdhcC0yIGNxYS1weC0zIGNxYS1weS0yLjUgY3FhLXJvdW5kZWQtbGdcIj5cbiAgICAgICAgICAgIDxjcWEtY3VzdG9tLXRvZ2dsZSBbY2hlY2tlZF09XCJleHRlbnNpb25Vc2VFbmFibGVkXCIgKGNoZWNrZWRDaGFuZ2UpPVwiZXh0ZW5zaW9uVXNlRW5hYmxlZCA9ICRldmVudFwiIGFyaWFMYWJlbD1cIkV4dGVuc2lvbiBVc2VcIj48L2NxYS1jdXN0b20tdG9nZ2xlPlxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjcWEtdGV4dC1zbSBjcWEtbGVhZGluZy1bMTkuNnB4XSBjcWEtZm9udC1ub3JtYWwgY3FhLXRleHQtWyMxMTE4MjddXCI+RXh0ZW5zaW9uIFVzZTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiY3FhLWZsZXggY3FhLWl0ZW1zLWNlbnRlciBjcWEtZ2FwLTIgY3FhLXB4LTMgY3FhLXB5LTIuNSBjcWEtcm91bmRlZC1sZ1wiPlxuICAgICAgICAgICAgPGNxYS1jdXN0b20tdG9nZ2xlIFtjaGVja2VkXT1cImRhdGFEcml2ZW5FbmFibGVkXCIgKGNoZWNrZWRDaGFuZ2UpPVwiZGF0YURyaXZlbkVuYWJsZWQgPSAkZXZlbnRcIiBhcmlhTGFiZWw9XCJEYXRhIERyaXZlblwiPjwvY3FhLWN1c3RvbS10b2dnbGU+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImNxYS10ZXh0LXNtIGNxYS1sZWFkaW5nLVsxOS42cHhdIGNxYS1mb250LW5vcm1hbCBjcWEtdGV4dC1bIzExMTgyN11cIj5EYXRhIERyaXZlbjwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cblxuICAgICAgXG4gICAgICA8IS0tIEFQSSBNb2NraW5nIENhcmQgKGVkaXQgbW9kZTogbXV0dWFsbHktZXhjbHVzaXZlIHRvZ2dsZXMgZHJpdmVuIGJ5IG9uZSBib29sZWFuKSAtLT5cbiAgICAgIDxjcWEtYXBpLW1vY2tpbmctY2FyZFxuICAgICAgICAqbmdJZj1cInNob3dBcGlNb2NraW5nQ2FyZFwiXG4gICAgICAgIHN0eWxlPVwid2lkdGg6IDEwMCU7XCJcbiAgICAgICAgW3RpdGxlXT1cImFwaU1vY2tpbmdUaXRsZVwiXG4gICAgICAgIFtzdGF0dXNMYWJlbF09XCJhcGlNb2NraW5nU3RhdHVzTGFiZWxcIlxuICAgICAgICBbY2FwdHVyZUxhYmVsXT1cImFwaU1vY2tpbmdDYXB0dXJlTGFiZWxcIlxuICAgICAgICBbY2FwdHVyZUhpbnRdPVwiYXBpTW9ja2luZ0NhcHR1cmVIaW50XCJcbiAgICAgICAgW3JlbmV3TGFiZWxdPVwiYXBpTW9ja2luZ1JlbmV3TGFiZWxcIlxuICAgICAgICBbcmVuZXdIaW50XT1cImFwaU1vY2tpbmdSZW5ld0hpbnRcIlxuICAgICAgICBbcmVzdG9yZU1vY2tdPVwiZWRpdEFwaU1vY2tpbmdSZXN0b3JlTW9ja1wiXG4gICAgICAgIFtzdG9yZU1vY2tdPVwiZWRpdEFwaU1vY2tpbmdTdG9yZU1vY2tcIlxuICAgICAgICBbbW9ja2VkQXBpc0NvdW50XT1cImFwaU1vY2tpbmdNb2NrZWRBcGlzQ291bnRcIlxuICAgICAgICBbdG90YWxBcGlzQ291bnRdPVwiYXBpTW9ja2luZ1RvdGFsQXBpc0NvdW50XCJcbiAgICAgICAgW3Byb2dyZXNzUGVyY2VudF09XCJhcGlNb2NraW5nUHJvZ3Jlc3NQZXJjZW50XCJcbiAgICAgICAgW3Nob3dQcm9ncmVzc109XCJhcGlNb2NraW5nU2hvd1Byb2dyZXNzXCJcbiAgICAgICAgW3N1bW1hcnlUZXh0XT1cImFwaU1vY2tpbmdTdW1tYXJ5VGV4dFwiXG4gICAgICAgIFtwZXJjZW50VGV4dF09XCJhcGlNb2NraW5nUGVyY2VudFRleHRcIlxuICAgICAgICBbZWRpdGluZ109XCJ0cnVlXCJcbiAgICAgICAgKHJlc3RvcmVNb2NrQ2hhbmdlKT1cIm9uQXBpTW9ja2luZ1Jlc3RvcmVNb2NrQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAoc3RvcmVNb2NrQ2hhbmdlKT1cIm9uQXBpTW9ja2luZ1N0b3JlTW9ja0NoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgKGNvbmZpZ3VyZSk9XCJjb25maWd1cmVBcGlNb2NraW5nLmVtaXQoKVwiPlxuICAgICAgPC9jcWEtYXBpLW1vY2tpbmctY2FyZD5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPCEtLSBBY3Rpb24gQnV0dG9ucyAtLT5cbiAgPGRpdiBjbGFzcz1cImNxYS1mbGV4IGNxYS1nYXAtMyBjcWEtcHQtMiBjcWEtdy1mdWxsXCI+XG4gICAgPGRpdiBjbGFzcz1cImNxYS1mbGV4LTEgY3FhLW1pbi13LTBcIj5cbiAgICAgIDxjcWEtYnV0dG9uXG4gICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lZFwiXG4gICAgICAgIFt0ZXh0XT1cIidDYW5jZWwnXCJcbiAgICAgICAgYnRuU2l6ZT1cIm1kXCJcbiAgICAgICAgW2Z1bGxXaWR0aF09XCJ0cnVlXCJcbiAgICAgICAgKGNsaWNrZWQpPVwib25DYW5jZWwoKVwiPlxuICAgICAgPC9jcWEtYnV0dG9uPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJjcWEtZmxleC0xIGNxYS1taW4tdy0wXCI+XG4gICAgICA8Y3FhLWJ1dHRvblxuICAgICAgICAqbmdJZj1cIiFpc1NhdmluZ1wiXG4gICAgICAgIHZhcmlhbnQ9XCJmaWxsZWRcIlxuICAgICAgICBbdGV4dF09XCInU2F2ZSBDaGFuZ2VzJ1wiXG4gICAgICAgIGJ0blNpemU9XCJtZFwiXG4gICAgICAgIFtmdWxsV2lkdGhdPVwidHJ1ZVwiXG4gICAgICAgIFtkaXNhYmxlZF09XCIhaGFzVW5zYXZlZENoYW5nZXNcIlxuICAgICAgICAoY2xpY2tlZCk9XCJvblNhdmUoKVwiPlxuICAgICAgPC9jcWEtYnV0dG9uPlxuICAgICAgPGRpdiAqbmdJZj1cImlzU2F2aW5nXCIgY2xhc3M9XCJjcWEtdy1mdWxsXCI+XG4gICAgICAgIDxjcWEtYmFkZ2VcbiAgICAgICAgICBsYWJlbD1cIlNhdmluZ+KAplwiXG4gICAgICAgICAgaWNvbj1cImF1dG9yZW5ld1wiXG4gICAgICAgICAgW2lzTG9hZGluZ109XCJ0cnVlXCJcbiAgICAgICAgICBbZnVsbFdpZHRoXT1cInRydWVcIlxuICAgICAgICAgIFtjZW50ZXJDb250ZW50XT1cInRydWVcIlxuICAgICAgICAgIHZhcmlhbnQ9XCJpbmZvXCJcbiAgICAgICAgICBzaXplPVwibWVkaXVtXCI+XG4gICAgICAgIDwvY3FhLWJhZGdlPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=