tnx-shared 5.0.55 → 5.0.57
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/tnx-shared.umd.js +5 -3
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/data-list-base.d.ts.map +1 -1
- package/classes/public-function.d.ts +1 -1
- package/components/crud/crud-form/crud-form.component.d.ts +2 -2
- package/esm2015/classes/base/data-list-base.js +2 -1
- package/esm2015/components/crud/crud-list/crud-list.component.js +3 -3
- package/esm2015/services/crud.service.js +3 -2
- package/fesm2015/tnx-shared.js +5 -3
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/crud.service.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data-list-base.d.ts","sourceRoot":"../../../../projects/tnx-shared/src/lib/","sources":["classes/base/data-list-base.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"data-list-base.d.ts","sourceRoot":"../../../../projects/tnx-shared/src/lib/","sources":["classes/base/data-list-base.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,7 +43,7 @@ export declare class PublicFunction {
|
|
|
43
43
|
static getSignalrConfig(environment: any): import("ng2-signalr").SignalRConfiguration;
|
|
44
44
|
static registerLocaleData(locale?: any, language?: any): void;
|
|
45
45
|
static importRootModule(environment: any): (typeof FormsModule | typeof BrowserModule | import("@angular/core").ModuleWithProviders<TranslateModule>)[];
|
|
46
|
-
static useRootProvider(enviromment: any): (typeof
|
|
46
|
+
static useRootProvider(enviromment: any): (typeof DecimalPipe | typeof DatePipe | typeof ConfirmationService | typeof MessageService | typeof TranslateService | typeof NotifierService | typeof EntityWorkflowHistoryService | typeof EntityWorkflowSettingService | typeof EntityPermissionService | typeof SafeHtmlPipe | typeof UserFormatPipe | typeof UsersFormatPipe | typeof HtmlFormatPipe | typeof MasterDataPipe | typeof OrganizationFormatPipe | typeof OrganizationsFormatPipe | {
|
|
47
47
|
provide: import("@angular/core").InjectionToken<import("@angular/common/http").HttpInterceptor[]>;
|
|
48
48
|
useClass: typeof SendAccessTokenInterceptor;
|
|
49
49
|
multi: boolean;
|
|
@@ -115,8 +115,8 @@ export declare class CrudFormComponent extends ComponentBase implements OnInit,
|
|
|
115
115
|
triggerChange(fieldPath: any): void;
|
|
116
116
|
ngAfterViewInit(): void;
|
|
117
117
|
setIsLoadedDataEdit(value: boolean): void;
|
|
118
|
-
getControlType(control: any): "custom" | "address" | "button" | "label" | "table" | "template" | "textarea" | "title" | "mask" | "switch" | "text" | "datetime" | "money" | "container" | "autocomplete-picker" | "entity-picker" | "spanControl" | "numberrange" | "phoneOrfax" | "datetimerange" | "
|
|
119
|
-
getViewModeDataType(control: any): "user" | "address" | "html" | "label" | "table" | "title" | "mask" | "string" | "
|
|
118
|
+
getControlType(control: any): "custom" | "address" | "button" | "label" | "table" | "template" | "textarea" | "title" | "mask" | "switch" | "text" | "autocomplete" | "dropdown" | "datetime" | "money" | "container" | "autocomplete-picker" | "entity-picker" | "spanControl" | "numberrange" | "phoneOrfax" | "datetimerange" | "editor" | "common-picker" | "user-picker" | "organization-picker" | "cocautochuc-picker" | "cocautochuc" | "checkbox" | "checkboxlist" | "radiobuttonlist" | "fileUpload" | "serviceFileUpload" | "fileManager" | "colorPicker" | "colorControl" | "vanban" | "congviec";
|
|
119
|
+
getViewModeDataType(control: any): "user" | "address" | "html" | "label" | "table" | "title" | "mask" | "string" | "date" | "boolean" | "datetime" | "money" | "container" | "fileUpload" | "fileManager" | "colorPicker" | "colorControl" | "hasDataSource" | "fileServiceUpload" | "app-key-value";
|
|
120
120
|
validateForm(): Promise<boolean>;
|
|
121
121
|
private validateModel;
|
|
122
122
|
validateFormControl(fieldPath: any): Promise<boolean>;
|
|
@@ -733,6 +733,7 @@ export class DataListBase extends ComponentBase {
|
|
|
733
733
|
});
|
|
734
734
|
}
|
|
735
735
|
mergeRefDataToDatasource(dataSource, schema, data) {
|
|
736
|
+
data !== null && data !== void 0 ? data : (data = []);
|
|
736
737
|
const field = schema.field;
|
|
737
738
|
let funcGetLabel = item => item[schema.displayField] || item['label'];
|
|
738
739
|
if (schema.funcGetLabel) {
|
|
@@ -844,4 +845,4 @@ DataListBase.propDecorators = {
|
|
|
844
845
|
content: [{ type: ViewChild, args: ['crudList',] }],
|
|
845
846
|
parentModel: [{ type: Input }]
|
|
846
847
|
};
|
|
847
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY2xhc3Nlcy9iYXNlL2RhdGEtbGlzdC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDeEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDbkgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFckcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbEgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbEgsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDeEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFMUQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUUzRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkgsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLGVBQWUsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2xKLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUdqRCxNQUFNLE9BQWdCLFlBQWEsU0FBUSxhQUFhO0lBc0RwRCxZQUNJLFNBQW1CO1FBRW5CLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQXhDYixnQ0FBMkIsR0FBRyxpQ0FBaUMsQ0FBQztRQUN4RSwwQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDOUIsWUFBTyxHQUFvQixJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ2pELFVBQUssR0FBaUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN6QyxjQUFTLEdBQWlCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0Msa0JBQWEsR0FBUSxFQUFFLENBQUM7UUFDeEIsbUJBQWMsR0FBRyxLQUFLLENBQUM7UUFDdkIsZUFBVSxHQUFXLENBQUMsQ0FBQztRQUN2QixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUNuQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQUN0QixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixZQUFPLEdBQUcsRUFBRSxDQUFDO1FBR2IsZUFBVSxHQUFHLEtBQUssQ0FBQztRQTJCZixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxRCxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzFDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDeEQsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDOUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDOUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2pELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLDZCQUE2QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLDRCQUE0QixDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDNUUsSUFBSSxDQUFDLHVCQUF1QixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDNUYsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLG9CQUFvQixDQUFDLENBQUM7SUFDMUUsQ0FBQztJQTNFRCxJQUEyQixPQUFPLENBQUMsT0FBMEI7UUFDekQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNsQyxJQUFJLE9BQU8sRUFBRTtZQUNULElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1lBQ3hCLElBQUksQ0FBQyxXQUFXLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNsQixJQUFJLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxFQUFFO29CQUNyQixPQUFPO2lCQUNWO2dCQUNELElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUN0QjtTQUNKO0lBQ0wsQ0FBQztJQWlFRCxRQUFRO1FBQ0osSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRTtZQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUN0RTtRQUNELElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtZQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFO2dCQUM3QixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxDQUFDO2FBQ3ZFO1NBQ0o7YUFDSTtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFO2dCQUNyQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQy9DO1lBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3RCxJQUFJLENBQUMsNkJBQTZCLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2xGLElBQUksQ0FBQyw2QkFBNkIsQ0FBQyxlQUFlLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDbEYsSUFBSSxDQUFDLHdCQUF3QixDQUFDLGVBQWUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM3RSxJQUFJLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQy9FO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUM7UUFDeEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO0lBQy9CLENBQUM7SUFFRCxXQUFXO1FBQ1AsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3BCLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVhLG1CQUFtQjs7WUFDN0IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUU7Z0JBQ2xFLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7YUFDakM7WUFDRCxJQUFJLENBQUMsZ0NBQWdDLEVBQUUsQ0FBQztZQUN4QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxJQUFJLENBQUMsVUFBVSxHQUFHLENBQUMsRUFBRTtnQkFDckIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7YUFDOUI7UUFDTCxDQUFDO0tBQUE7SUFFYSxnQ0FBZ0M7O1lBQzFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHdCQUF3QixFQUFFO2dCQUN4QyxNQUFNLFNBQVMsR0FBRyxJQUFJLGdCQUFnQixDQUFDO29CQUNuQyxLQUFLLEVBQUUsb0JBQW9CO29CQUMzQixLQUFLLEVBQUUscUJBQXFCO29CQUM1QixRQUFRLEVBQUUsb0JBQW9CO29CQUM5QixnQkFBZ0IsRUFBRSxvQkFBb0I7b0JBQ3RDLEtBQUssRUFBRSxPQUFPO29CQUNkLFVBQVUsRUFBRSw0QkFBNEI7b0JBQ3hDLE9BQU8sRUFBRSxJQUFJO29CQUNiLFdBQVcsRUFBRSxXQUFXLENBQUMsUUFBUTtpQkFDcEMsQ0FBQyxDQUFDO2dCQUVILElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzVELE1BQU0sUUFBUSxtQ0FDUCxTQUFTLEtBQ1osU0FBUyxFQUFFLFNBQVMsRUFDcEIsV0FBVyxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQ2pDLFFBQVEsRUFBRSxTQUFTLENBQUMsZ0JBQWdCLEVBQ3BDLEtBQUssRUFBRSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFDOUIsV0FBVyxFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQ2xDLElBQUksRUFBRSxLQUFLLEVBQ1gsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsR0FDOUMsQ0FBQztnQkFDRixTQUFTLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztnQkFDbkQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7YUFDaEQ7UUFDTCxDQUFDO0tBQUE7SUFFYSxnQkFBZ0I7O1lBQzFCLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDN0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFJLENBQUMsNkJBQTZCLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RFLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRTtnQkFDbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO2dCQUN2QyxxQ0FBcUM7Z0JBQ3JDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztnQkFDbEcsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRTtvQkFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO2lCQUNyRTtnQkFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDaEQsTUFBTSxTQUFTLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQztvQkFDbkMsS0FBSyxFQUFFLHNCQUFzQjtvQkFDN0IsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsZ0JBQWdCLEVBQUUsc0JBQXNCO29CQUN4QyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQjtvQkFDM0MsV0FBVyxFQUFFLFdBQVcsQ0FBQyxRQUFRO29CQUNqQyxLQUFLLEVBQUUsWUFBWTtvQkFDbkIsS0FBSyxFQUFFLE9BQU87b0JBQ2QsVUFBVSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQzt3QkFDdEMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO3dCQUNYLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRztxQkFDaEIsQ0FBQyxDQUFDO2lCQUNOLENBQUMsQ0FBQztnQkFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO2dCQUNwRSxNQUFNLFFBQVEsbUNBQ1AsU0FBUyxLQUNaLFNBQVMsRUFBRSxTQUFTLEVBQ3BCLFdBQVcsRUFBRSxXQUFXLENBQUMsUUFBUSxFQUNqQyxRQUFRLEVBQUUsU0FBUyxDQUFDLGdCQUFnQixFQUNwQyxLQUFLLEVBQUUsS0FBSyxHQUFHLFNBQVMsQ0FBQyxLQUFLLEVBQzlCLFdBQVcsRUFBRSxTQUFTLENBQUMsV0FBVyxFQUNsQyxJQUFJLEVBQUUsS0FBSyxFQUNYLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEdBQzlDLENBQUM7Z0JBQ0YsU0FBUyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQzVDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2FBQ2hEO1FBQ0wsQ0FBQztLQUFBO0lBRUssOEJBQThCOztZQUNoQyxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7S0FBQTtJQUVhLGtDQUFrQyxDQUFDLG1CQUF3Qjs7WUFDckUsSUFBSSxtQkFBbUIsQ0FBQyxhQUFhLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxFQUFFO2dCQUN4RixtQkFBbUIsQ0FBQyxhQUFhLEdBQUcsbUJBQW1CLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUNwRjtZQUNELE1BQU0sU0FBUyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsdUJBQXVCLENBQ3ZFO2dCQUNJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsbUJBQW1CLENBQUMsYUFBYSxDQUFDO2FBQ3pFLEVBQ0QsSUFBSSxlQUFlLENBQUM7Z0JBQ2hCLFVBQVUsRUFBRSxNQUFNO2dCQUNsQixZQUFZLEVBQUUsT0FBTztnQkFDckIsU0FBUyxFQUFFLE1BQU07YUFDcEIsQ0FBQyxDQUNMLENBQUMsQ0FBQztZQUNILFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ3JCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztnQkFDbkMsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDOUIsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDeEMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7b0JBQzVDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7d0JBQ3hDLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsRUFBRSxFQUFFOzRCQUMzQixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt5QkFDckQ7b0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ1AsQ0FBQyxDQUFDLENBQUM7WUFDUCxDQUFDLENBQUMsQ0FBQztZQUNILG1CQUFtQixDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDOUMsQ0FBQztLQUFBO0lBRVMsdUJBQXVCLENBQUMsU0FBbUI7UUFDakQsTUFBTSxVQUFVLEdBQUcsQ0FBQztnQkFDaEIsRUFBRSxFQUFFLElBQUk7Z0JBQ1IsTUFBTSxFQUFFLGNBQWM7Z0JBQ3RCLEdBQUcsRUFBRSxjQUFjO2dCQUNuQixPQUFPLEVBQUUsRUFBRTtnQkFDWCxRQUFRLEVBQUUsY0FBYzthQUMzQixDQUFDLENBQUM7UUFDSCxJQUFJLFNBQVMsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFO1lBQy9CLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQ3pCLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDckMsTUFBTSxVQUFVLEdBQUc7d0JBQ2YsRUFBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJO3dCQUNoQixNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUk7d0JBQ3BCLEdBQUcsRUFBRSxPQUFPLENBQUMsSUFBSTt3QkFDakIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO3dCQUNuQyxRQUFRLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUU7cUJBQ3ZDLENBQUM7b0JBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQzdGLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQzVCLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLFVBQVUsQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLE9BQU8sSUFBSSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7d0JBQ2hILElBQUksWUFBWSxFQUFFOzRCQUNkLFlBQVksQ0FBQyxHQUFHLEdBQUcsR0FBRyxZQUFZLENBQUMsTUFBTSxLQUFLLFlBQVksQ0FBQyxFQUFFLEdBQUcsQ0FBQzs0QkFDakUsVUFBVSxDQUFDLEdBQUcsR0FBRyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEtBQUssVUFBVSxDQUFDLEVBQUUsR0FBRyxDQUFDO3lCQUM5RDtxQkFDSjtnQkFDTCxDQUFDLENBQUMsQ0FBQztZQUNQLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFDRCxNQUFNLFNBQVMsR0FBRyxJQUFJLGdCQUFnQixDQUFDO1lBQ25DLEtBQUssRUFBRSxzQkFBc0I7WUFDN0IsUUFBUSxFQUFFLGFBQWE7WUFDdkIsZ0JBQWdCLEVBQUUsYUFBYTtZQUMvQixPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQjtZQUMzQyxXQUFXLEVBQUUsV0FBVyxDQUFDLFFBQVE7WUFDakMsS0FBSyxFQUFFLFlBQVk7WUFDbkIsS0FBSyxFQUFFLE9BQU87WUFDZCxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU07WUFDM0IsTUFBTSxFQUFFLElBQUk7WUFDWixTQUFTLEVBQUUsVUFBVTtZQUNyQixVQUFVO1NBQ2IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDO1FBQ3BFLE1BQU0sUUFBUSxtQ0FDUCxTQUFTLEtBQ1osU0FBUyxFQUFFLFNBQVMsRUFDcEIsV0FBVyxFQUFFLFdBQVcsQ0FBQyxRQUFRLEVBQ2pDLFFBQVEsRUFBRSxTQUFTLENBQUMsZ0JBQWdCLEVBQ3BDLEtBQUssRUFBRSxLQUFLLEdBQUcsU0FBUyxDQUFDLEtBQUssRUFDOUIsV0FBVyxFQUFFLFNBQVMsQ0FBQyxXQUFXLEVBQ2xDLElBQUksRUFBRSxLQUFLLEVBQ1gsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsR0FDOUMsQ0FBQztRQUNGLFNBQVMsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsQ0FBQyxTQUFTLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUU3QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZELElBQUksV0FBVyxDQUFDLFFBQVEsSUFBSSxPQUFPLEVBQUU7WUFDakMsTUFBTSxXQUFXLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQztnQkFDckMsS0FBSyxFQUFFLGVBQWU7Z0JBQ3RCLFFBQVEsRUFBRSxlQUFlO2dCQUN6QixLQUFLLEVBQUUsRUFBRTtnQkFDVCxLQUFLLEVBQUUsT0FBTztnQkFDZCxTQUFTLEVBQUUsU0FBUyxDQUFDLE1BQU07YUFDOUIsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUMzQyxJQUFJLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztTQUNsRDtJQUNMLENBQUM7SUFFSyxpQkFBaUIsQ0FBQyxPQUFPOztZQUMzQixPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0tBQUE7SUFFRCxjQUFjLENBQUMsT0FBTztRQUNsQixJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQztJQUNsQyxDQUFDO0lBRUssSUFBSSxDQUFDLEdBQUc7O1lBQ1YsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDaEQsSUFBSSxDQUFDLGNBQWMsRUFBRTtnQkFDakIsT0FBTzthQUNWO1lBQ0QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUM7WUFDekMsTUFBTSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsWUFBWSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2pFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztRQUMvQixDQUFDO0tBQUE7SUFFSyxXQUFXOztZQUNiLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7S0FBQTtJQUVLLFNBQVM7O1FBQ2YsQ0FBQztLQUFBO0lBRUssS0FBSyxDQUFDLE9BQU87O1lBQ2YsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztZQUMxQyxNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDOUMsTUFBTSxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQy9CLENBQUM7S0FBQTtJQUVLLFVBQVU7O1FBQ2hCLENBQUM7S0FBQTtJQUVLLGVBQWUsQ0FBQyxPQUFZOztRQUNsQyxDQUFDO0tBQUE7SUFFSyxLQUFLLENBQUMsT0FBTyxFQUFFLGdCQUFxQixFQUFFOztZQUN4QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDeEMsT0FBTyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLElBQUksQ0FBQztZQUMxQyxNQUFNLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxZQUFZLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDakUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNuRCxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztZQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQzlDLE1BQU0sSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxTQUFTLENBQUM7WUFDOUMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7UUFDL0IsQ0FBQztLQUFBO0lBRUssVUFBVTs7UUFDaEIsQ0FBQztLQUFBO0lBRUssZUFBZSxDQUFDLE9BQVk7O1FBQ2xDLENBQUM7S0FBQTtJQUVPLFNBQVMsQ0FBQyxPQUFPO1FBQ3JCLE9BQU87WUFDSCxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO1NBQ3RDLENBQUM7SUFDTixDQUFDO0lBRUQsb0JBQW9CLENBQUMsT0FBTztRQUN4QixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUFPO1FBQ1gsSUFBSSxPQUFPLENBQUMsZUFBZSxFQUFFO1lBQ3pCLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNoRCxJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUNMLE9BQU87YUFDVjtZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUM7cUJBQzdCLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDYixJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUU7d0JBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTs0QkFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7eUJBQ2hGOzZCQUNJOzRCQUNELElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO3lCQUM5Qjt3QkFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLEVBQUUsQ0FBQztxQkFDakQ7eUJBQ0k7d0JBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO3FCQUN4RDtnQkFDTCxDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUU7b0JBQ1AsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixFQUFFLENBQUM7Z0JBQ2hELENBQUMsQ0FBQyxDQUFDO2FBQ1Y7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxLQUFLO1FBQ3ZCLE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCxlQUFlLENBQUMsS0FBSztRQUNqQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDaEQsSUFBSSxDQUFDLEVBQUUsRUFBRTtnQkFDTCxPQUFPO2FBQ1Y7WUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO2dCQUMxQixJQUFJLENBQUMscUJBQXFCLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFO29CQUM5QyxJQUFJLFFBQVEsQ0FBQyxPQUFPLEVBQUU7d0JBQ2xCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO3dCQUMzQixJQUFJLENBQUMsZ0JBQWdCLENBQUMscUJBQXFCLEVBQUUsQ0FBQztxQkFDakQ7eUJBQ0k7d0JBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLG9CQUFvQixDQUFDLFFBQVEsQ0FBQyxDQUFDO3FCQUN4RDtnQkFDTCxDQUFDLENBQUMsQ0FBQzthQUNOO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYztJQUVkLENBQUM7SUFFRCxZQUFZO1FBQ1IsSUFBSSxDQUFDLGNBQWMsR0FBRyxLQUFLLENBQUM7UUFDNUIsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7SUFDL0IsQ0FBQztJQUVELGFBQWEsQ0FBQyxNQUFNO1FBQ2hCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztJQUNoQyxDQUFDO0lBRWEsaUJBQWlCOztZQUMzQixJQUFJO2dCQUNBLHFDQUFxQztnQkFDckMsNkZBQTZGO2dCQUM3RixjQUFjO2dCQUNkLFdBQVc7Z0JBQ1gsc0ZBQXNGO2dCQUN0Rix3RUFBd0U7Z0JBQ3hFLG1IQUFtSDtnQkFDbkgsNkZBQTZGO2dCQUM3RixJQUFJO2FBQ1A7WUFDRCxPQUFPLENBQUMsRUFBRTtnQkFDTixPQUFPLENBQUMsS0FBSyxDQUFDLCtEQUErRCxDQUFDLENBQUM7YUFDbEY7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0tBQUE7SUFFSyxNQUFNOztZQUNSLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDM0IsQ0FBQztLQUFBO0lBRUssbUJBQW1CLENBQUMsUUFBbUI7O1lBQ3pDLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQyxDQUFDO0tBQUE7SUFFYSxXQUFXLENBQUMsUUFBbUI7O1lBQ3pDLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1lBQzVCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ2hCLE9BQU87aUJBQ1Y7Z0JBQ0QsSUFBSSxDQUFDLFFBQVEsRUFBRTtvQkFDWCxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztpQkFDMUM7YUFDSjtpQkFDSTtnQkFDRCxJQUFJLENBQUMsUUFBUSxFQUFFO29CQUNYLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQzt3QkFDcEIsUUFBUSxFQUFFOzRCQUNOLElBQUksRUFBRSxDQUFDOzRCQUNQLFFBQVEsRUFBRSxHQUFHO3lCQUNoQjt3QkFDRCxPQUFPLEVBQUUsRUFBRTt3QkFDWCxLQUFLLEVBQUUsRUFBRTtxQkFDWixDQUFDLENBQUM7aUJBQ047YUFDSjtZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDM0IsQ0FBQztLQUFBO0lBRUssY0FBYyxDQUFDLFFBQWtCOztZQUNuQyxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0tBQUE7SUFFYSxPQUFPLENBQUMsUUFBa0I7O1lBQ3BDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUU7Z0JBQzlDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDcEIsUUFBUSxDQUFDLFlBQVksQ0FBQyxzQkFBc0IsRUFBRSxNQUFNLENBQUMsRUFBRTtvQkFDbkQsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFO3dCQUNkLElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQzt3QkFDekIsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO3dCQUN0QixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7NEJBQ3JDLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtnQ0FDaEIsWUFBWSxHQUFHLElBQUksQ0FBQzs2QkFDdkI7aUNBQ0k7Z0NBQ0QsVUFBVSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs2QkFDMUI7d0JBQ0wsQ0FBQyxDQUFDLENBQUM7d0JBQ0gsSUFBSSxZQUFZLEVBQUU7NEJBQ2QsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtnQ0FDeEIsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO2dDQUNsQyxPQUFPOzZCQUNWOzRCQUNELE1BQU0sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDOzRCQUNwQixNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzs0QkFDcEIsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7NEJBQ3BCLE1BQU0sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDOzRCQUN2QixNQUFNLENBQUMsT0FBTyxHQUFHO2dDQUNiLElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUM7Z0NBQzNELElBQUksQ0FBQyxTQUFTLENBQUMsc0JBQXNCLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxVQUFVLENBQUM7NkJBQ2xFLENBQUM7eUJBQ0w7cUJBQ0o7Z0JBQ0wsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUN6RCxJQUFJLFlBQVksS0FBSyxLQUFLLEVBQUU7b0JBQ3hCLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztvQkFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDO29CQUNyQixJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7b0JBQ2hDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztvQkFDdEIsT0FBTztpQkFDVjtnQkFDRCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQy9CO1FBQ0wsQ0FBQztLQUFBO0lBRUQsWUFBWTtRQUNSLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDZixJQUFJLENBQUMsUUFBUSxDQUFDLHlCQUF5QixFQUFFLENBQUM7U0FDN0M7UUFDRCxZQUFZLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNsQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLG9FQUFvRSxDQUFDLENBQUM7WUFDeEcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1FBQy9CLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUNkLENBQUM7SUFFRCxlQUFlLENBQUMsR0FBRyxHQUFHLElBQUk7UUFDdEIsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN6QixDQUFDO0lBRUssYUFBYTs4REFBSyxDQUFDO0tBQUE7SUFFekIsY0FBYztRQUNWLFlBQVksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO0lBQy9CLENBQUM7SUFFTyxjQUFjLENBQUMsVUFBbUIsSUFBSTtRQUMxQyxJQUFJLE9BQU8sSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO1lBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDbkM7UUFDRCxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDMUIsQ0FBQztJQUVELGlCQUFpQixDQUFDLFFBQWtCO1FBQ2hDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM3RSxDQUFDO0lBRUQsYUFBYSxDQUFDLFFBQWtCO0lBRWhDLENBQUM7SUFFTyxZQUFZLENBQUMsUUFBa0I7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDckIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztxQkFDM0IsSUFBSSxDQUFDLENBQU0sUUFBUSxFQUFDLEVBQUU7b0JBQ25CLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRTt3QkFDbEIsTUFBTSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDO3dCQUNwQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7cUJBQ3pCO3lCQUNJO3dCQUNELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3dCQUNwRCxJQUFJLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUM5QjtnQkFDTCxDQUFDLENBQUEsRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDUCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztvQkFDNUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0IsQ0FBQyxDQUFDLENBQUM7YUFDVjtTQUNKO2FBQ0k7WUFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1NBQ2hDO0lBQ0wsQ0FBQztJQUVhLGNBQWMsQ0FBQyxRQUF3Qjs7WUFDakQsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxXQUFXLENBQUM7WUFDeEMsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDM0MsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNqRCxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtvQkFDNUIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVLEVBQUU7d0JBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQztxQkFDckY7b0JBQ0QsSUFBSSxDQUFDLDhCQUE4QixDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUNqRCxDQUFDLENBQUMsQ0FBQzthQUNOO1lBQ0QsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztZQUVqQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFO2dCQUM5QixvREFBb0Q7Z0JBQ3BELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzdJLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7b0JBQ2xHLGlEQUFpRDtvQkFDakQsSUFBSSxDQUFDLGFBQWEsR0FBRyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pGLENBQUMsQ0FBQyxDQUFDO2FBQ047aUJBQ0k7Z0JBQ0QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztvQkFDbEcsaURBQWlEO2dCQUNyRCxDQUFDLENBQUMsQ0FBQzthQUNOO1lBRUQsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1lBRW5DLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDO1lBQ3ZGLElBQUksa0JBQWtCLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDdkM7WUFFRCxNQUFNLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUUxQixJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRCxDQUFDO0tBQUE7SUFFRCxzQkFBc0IsQ0FBQyxVQUFlO1FBQ2xDLE9BQU8sVUFBVSxDQUFDO0lBQ3RCLENBQUM7SUFFTyw4QkFBOEIsQ0FBQyxDQUFNO1FBQ3pDLG1CQUFtQjtRQUNuQixJQUFJLElBQUksQ0FBQyxzQkFBc0IsRUFBRTtZQUM3QixJQUFJLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsRUFBRTtnQkFDckMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUM1RCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDM0UsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLGFBQWEsRUFBRTt3QkFDakMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUM7d0JBQ3ZCLENBQUMsQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO3FCQUM1QjtpQkFDSjtxQkFDSSxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsRUFBRTtvQkFDL0IsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDMUQsTUFBTSxHQUFHLEdBQUcsY0FBYyxHQUFHLEtBQUssQ0FBQztvQkFDbkMsK0lBQStJO29CQUMvSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTt3QkFDZCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksYUFBYSxDQUFDLEVBQUU7NEJBQzVDLENBQUMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDOzRCQUN2QixDQUFDLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQzt5QkFDNUI7cUJBQ0o7b0JBQ0QsY0FBYztpQkFDakI7cUJBQ0ksSUFBSSxDQUFDLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQy9CLENBQUMsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO29CQUN2QixDQUFDLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztpQkFDNUI7YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVLLFlBQVk7O1FBRWxCLENBQUM7S0FBQTtJQUVhLG1CQUFtQixDQUFDLFVBQVU7O1lBQ3hDLElBQUksVUFBVSxJQUFJLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNyQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRTtvQkFDMUMsTUFBTSxzQkFBc0IsR0FBRyxFQUFFLENBQUM7b0JBQ2xDLE1BQU0scUJBQXFCLEdBQUcsRUFBRSxDQUFDO29CQUNqQyxLQUFLLE1BQU0sTUFBTSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRTt3QkFDM0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQzt3QkFDM0IsSUFBSSxNQUFNLENBQUMsa0JBQWtCLENBQUMsSUFBSSxjQUFjLENBQUMsTUFBTSxFQUFFOzRCQUNyRCxJQUFJLE1BQU0sQ0FBQyxZQUFZO21DQUNoQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUM7bUNBQzVILElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksS0FBSyxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxFQUN6RjtnQ0FDRSxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7Z0NBQ3BCLFVBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUU7b0NBQzFCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQ0FDckMsSUFBSSxZQUFZLElBQUksSUFBSSxFQUFFO3dDQUN0QixJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7NENBQ2pCLElBQUksR0FBRyxHQUFHLFlBQVksQ0FBQzs0Q0FDdkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0RBQ3JCLEdBQUcsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDOzZDQUN4Qjs0Q0FDRCxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO2dEQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFO29EQUM5QixRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lEQUNyQjs0Q0FDTCxDQUFDLENBQUMsQ0FBQzt5Q0FDTjs2Q0FDSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxZQUFZLENBQUMsRUFBRTs0Q0FDN0MsUUFBUSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQzt5Q0FDL0I7cUNBQ0o7Z0NBQ0wsQ0FBQyxDQUFDLENBQUM7Z0NBQ0gsSUFBSSxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtvQ0FDckIsSUFBSSxPQUFPLEdBQUcsSUFBSSxDQUFDO29DQUNuQixJQUFJLE1BQU0sQ0FBQyxXQUFXLFlBQVksaUJBQWlCLEVBQUU7d0NBQ2pELE9BQU8sR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FDeEMsTUFBTSxDQUFDLFNBQVMsRUFDZCxRQUFRLEVBQ1IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7cUNBQzdDO3lDQUNJO3dDQUNELE1BQU0sT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQzt3Q0FDM0UsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFOzRDQUNyQixNQUFNLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO3lDQUNoQzt3Q0FDRCxPQUFPLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FDaEQsT0FBTyxFQUNQLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FDckMsQ0FBQztxQ0FDTDtvQ0FDRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLElBQUksSUFBSSxFQUFFO3dDQUN0QixNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQzt3Q0FDN0IsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7cUNBQzdEO3lDQUNJO3dDQUNELHNCQUFzQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3Q0FDckMscUJBQXFCLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FDQUN0QztpQ0FDSjs2QkFDSjt5QkFDSjs2QkFDSTs0QkFDRCxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDOzRCQUN0RSxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7Z0NBQ3JCLFlBQVksR0FBRyxNQUFNLENBQUMsWUFBWSxDQUFDOzZCQUN0Qzs0QkFDRCxVQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dDQUMxQixNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0NBQ3BGLElBQUksT0FBTyxJQUFJLElBQUksRUFBRTtvQ0FDakIsUUFBUSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7aUNBQ25EOzRCQUNMLENBQUMsQ0FBQyxDQUFDO3lCQUNOO3FCQUNKO29CQUNELElBQUksc0JBQXNCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDbkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7d0JBQ3pELHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRTs0QkFDNUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7d0JBQ3JFLENBQUMsQ0FBQyxDQUFDO3FCQUNOO29CQUNELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDbkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7aUJBQzlCO3FCQUNJO29CQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO2lCQUM5QjthQUNKO1FBQ0wsQ0FBQztLQUFBO0lBRU8sd0JBQXdCLENBQUMsVUFBaUIsRUFBRSxNQUF3QixFQUFFLElBQVc7UUFDckYsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUMzQixJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3RFLElBQUksTUFBTSxDQUFDLFlBQVksRUFBRTtZQUNyQixZQUFZLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQztTQUN0QztRQUNELElBQUksZUFBZSxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzdDLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRTtZQUNqQyxPQUFPLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNqRixDQUFDLENBQUM7UUFDRixJQUFJLE1BQU0sQ0FBQyxlQUFlLEVBQUU7WUFDeEIsZUFBZSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7U0FDNUM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixpQkFBaUIsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUM7U0FDaEQ7UUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUU7WUFDakIsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDMUIsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFO29CQUN6QixJQUFJLEdBQUcsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzFCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUNyQixHQUFHLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDeEI7b0JBQ0QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzNFLElBQUksUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQ3JCLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7d0JBQ3RELGVBQWUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUM7cUJBQ3ZDO2lCQUNKO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDTjthQUNJO1lBQ0QsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDMUIsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxFQUFFO29CQUN6QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdkUsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFO3dCQUNqQixRQUFRLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDaEQsZUFBZSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztxQkFDdEM7aUJBQ0o7WUFFTCxDQUFDLENBQUMsQ0FBQztTQUNOO1FBQ0QsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTyxxQkFBcUIsQ0FBQyxNQUF3QjtRQUNsRCxPQUFPLElBQUksZUFBZSxDQUFDO1lBQ3ZCLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtZQUNqQyxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVU7WUFDN0IsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1lBQzNCLFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztZQUMzQixtQkFBbUIsRUFBRSxNQUFNLENBQUMsbUJBQW1CO1lBQy9DLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtZQUNqQyxTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7WUFDM0IsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1lBQ3ZCLGtCQUFrQixFQUFFLE1BQU0sQ0FBQyxrQkFBa0I7U0FDaEQsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELHVCQUF1QixDQUFDLEtBQWE7SUFFckMsQ0FBQztJQUVPLHVCQUF1QjtRQUMzQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDNUIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNwRixJQUFJLGlCQUFpQixFQUFFO2dCQUNuQixHQUFHLENBQUMsS0FBSyxHQUFHLGlCQUFpQixDQUFDLElBQUksQ0FBQztnQkFDbkMsR0FBRyxDQUFDLFNBQVMsR0FBRyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFO29CQUNmLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDL0Q7YUFDSjtRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLFdBQVcsQ0FBQyxJQUFZO1FBQzVCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTyx1QkFBdUI7UUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO1lBQzVCLElBQUksR0FBRyxDQUFDLGNBQWMsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNoRDtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3pDLE1BQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNuQixJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ3pDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2RixDQUFDLENBQUMsQ0FBQztZQUVILElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsRUFBRTtnQkFDakMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLE1BQU0sQ0FBQztvQkFDcEQsS0FBSyxFQUFFLElBQUk7b0JBQ1gsT0FBTztpQkFDVixDQUFDLENBQUMsQ0FBQzthQUNQO1NBQ0o7SUFDTCxDQUFDO0lBRWEsa0JBQWtCLENBQUMsT0FBTzs7WUFDcEMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNmLE9BQU8sTUFBTSxJQUFJLENBQUMsUUFBUSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzFEO1lBQ0QsT0FBTyxLQUFLLENBQUM7UUFDakIsQ0FBQztLQUFBOzs7WUExM0JKLFNBQVM7OztZQTVCNEMsUUFBUTs7O3NCQStCekQsU0FBUyxTQUFDLFVBQVU7MEJBYXBCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xyXG5pbXBvcnQgeyBDcnVkTGlzdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3J1ZC9jcnVkLWxpc3QvY3J1ZC1saXN0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEVudGl0eVBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9lbnRpdHktcGVybWlzc2lvbi9zZXJ2aWNlcy5jcy9lbnRpdHktcGVybWlzc2lvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgU3RhdGVNYWNoaW5lc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3N0YXRlbWFjaGluZXMvc2VydmljZXMvc3RhdGVtYWNoaW5lcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV2ZJdGVtIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9tb2RlbHMvbW9kZWxzJztcclxuaW1wb3J0IHsgRW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvc2VydmljZXMvZW50aXR5LXdvcmtmbG93LWhpc3Rvcnkuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL2VudGl0eS13b3JrZmxvdy1zZXR0aW5nLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9zZXJ2aWNlcy93b3JrZmxvdy1wZXJtaXNzaW9uLWRldGFpbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL3dvcmtmbG93LXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcclxuaW1wb3J0IHsgRmlsdGVyLCBHcmlkSW5mbyB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBSZXNwb25zZVJlc3VsdCB9IGZyb20gJy4uLy4uL21vZGVscy9yZXNwb25zZS1yZXN1bHQnO1xyXG5pbXBvcnQgeyBEYXRhU291cmNlV29ya2Zsb3dDb3JlU3RhdHVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3dvcmtmbG93LWNvcmUtc3RhdHVzLmVudW0nO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XHJcbmltcG9ydCB7IEN1c3RvbVJvdXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jdXN0b20tcm91dGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRpdHlNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktbWV0YWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IExpc3RIZWxwZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGlzdC1oZWxwZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hc3RlckRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbWFzdGVyLWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudW1HZXRSZWZUeXBlLCBGb3JtU3RhdGUsIEtleUZpZWxkR2V0UmVmVHlwZSwgS2V5Rmxhc2hTaG93LCBXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcclxuaW1wb3J0IHsgQ29sdW1uU2NoZW1hQmFzZSwgQ29udHJvbFR5cGUsIENydWRGb3JtRGF0YSwgQ3J1ZExpc3REYXRhLCBDcnVkTGlzdFNldHRpbmcsIERyb3Bkb3duT3B0aW9ucywgT3BlcmF0b3IsIFRleHRBbGlnbiB9IGZyb20gJy4uL2Zvcm0tc2NoZW1hJztcclxuaW1wb3J0IHsgQ29tcG9uZW50QmFzZSB9IGZyb20gJy4vY29tcG9uZW50LWJhc2UnO1xyXG5cclxuQERpcmVjdGl2ZSgpXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEYXRhTGlzdEJhc2UgZXh0ZW5kcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIEFmdGVyVmlld0luaXQge1xyXG4gICAgcHVibGljIGNydWRMaXN0OiBDcnVkTGlzdENvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoJ2NydWRMaXN0Jykgc2V0IGNvbnRlbnQoY29udGVudDogQ3J1ZExpc3RDb21wb25lbnQpIHtcclxuICAgICAgICBjb25zdCBiZWZvcmVWYWx1ZSA9IHRoaXMuY3J1ZExpc3Q7XHJcbiAgICAgICAgaWYgKGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdCA9IGNvbnRlbnQ7XHJcbiAgICAgICAgICAgIGlmICghYmVmb3JlVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY291bnRSZWFkeSsrO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY291bnRSZWFkeSA8IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBASW5wdXQoKSBwYXJlbnRNb2RlbDogQ3J1ZExpc3REYXRhO1xyXG5cclxuICAgIHByaXZhdGUgbm90Q29uZmlnQmFzZVNlcnZpY2VNZXNzYWdlID0gJ0NoxrBhIGPhuqV1IGjDrG5oIENSVUQgYmFzZSBzZXJ2aWNlJztcclxuICAgIGRvTm90Q2hlY2tCYXNlU2VydmljZSA9IGZhbHNlO1xyXG4gICAgc2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xyXG4gICAgbW9kZWw6IENydWRMaXN0RGF0YSA9IG5ldyBDcnVkTGlzdERhdGEoKTtcclxuICAgIGZvcm1Nb2RlbDogQ3J1ZEZvcm1EYXRhID0gbmV3IENydWRGb3JtRGF0YSgpO1xyXG4gICAgc2NvcGVEYXRhRWRpdDogYW55ID0ge307XHJcbiAgICBzaG93RGV0YWlsRm9ybSA9IGZhbHNlO1xyXG4gICAgY291bnRSZWFkeTogbnVtYmVyID0gMDtcclxuICAgIGhhc0NydWRMaXN0ID0gdHJ1ZTtcclxuICAgIGN1c3RvbUdldERhdGEgPSBmYWxzZTtcclxuICAgIHJlYWR5VG9UcmluaEt5ID0gZmFsc2U7XHJcbiAgICBwbHVzVXJsID0gJyc7XHJcbiAgICByb3dEYXRhQ3VycmVudDogYW55O1xyXG5cclxuICAgIGlzQ3J1ZExpc3QgPSBmYWxzZTtcclxuICAgIGxvYWRpbmdUaW1lb3V0O1xyXG5cclxuICAgIHByb3RlY3RlZCBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2N1c3RvbVJvdXRlclNlcnZpY2U6IEN1c3RvbVJvdXRlclNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2xpc3RIZWxwZXJTZXJ2aWNlOiBMaXN0SGVscGVyU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfZXhwb3J0U2VydmljZTogRXhwb3J0U2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfcm91dGVyOiBSb3V0ZXI7XHJcbiAgICBwcm90ZWN0ZWQgX2NydWRTZXJ2aWNlOiBDcnVkU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfZGF0ZVBpcGU6IERhdGVQaXBlO1xyXG4gICAgcHJvdGVjdGVkIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWY7XHJcbiAgICBwcm90ZWN0ZWQgX2VudGl0eU1ldGFkYXRhU2VydmljZTogRW50aXR5TWV0YWRhdGFTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF91c2VyU2VydmljZTogVXNlclNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX21hc3RlckRhdGFTZXJ2aWNlOiBNYXN0ZXJEYXRhU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfZW50aXR5V29ya2Zsb3dTZXR0aW5nU2VydmljZTogRW50aXR5V29ya2Zsb3dTZXR0aW5nU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfZW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZTogRW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfZW50aXR5UGVybWlzc2lvblNlcnZpY2U6IEVudGl0eVBlcm1pc3Npb25TZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF93b3JrZmxvd1NldHRpbmdTZXJ2aWNlOiBXb3JrZmxvd1NldHRpbmdzU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfd29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZTogV29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfc3RhdGVNYWNoaW5lc1NlcnZpY2U6IFN0YXRlTWFjaGluZXNTZXJ2aWNlO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIF9pbmplY3RvcjogSW5qZWN0b3JcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fYWN0aXZhdGVkUm91dGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoQWN0aXZhdGVkUm91dGUpO1xyXG4gICAgICAgIHRoaXMuX3JvdXRlciA9IHRoaXMuX2luamVjdG9yLmdldChSb3V0ZXIpO1xyXG4gICAgICAgIHRoaXMuX2N1c3RvbVJvdXRlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3VzdG9tUm91dGVyU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fbGlzdEhlbHBlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTGlzdEhlbHBlclNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fdHJhbnNsYXRlU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChUcmFuc2xhdGVTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9leHBvcnRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEV4cG9ydFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENydWRTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9kYXRlUGlwZSA9IHRoaXMuX2luamVjdG9yLmdldChEYXRlUGlwZSk7XHJcbiAgICAgICAgdGhpcy5fY2QgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gICAgICAgIHRoaXMuX3VzZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFVzZXJTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9tYXN0ZXJEYXRhU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChNYXN0ZXJEYXRhU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fZW50aXR5V29ya2Zsb3dTZXR0aW5nU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFbnRpdHlXb3JrZmxvd1NldHRpbmdTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9lbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2VudGl0eVBlcm1pc3Npb25TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEVudGl0eVBlcm1pc3Npb25TZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl93b3JrZmxvd1NldHRpbmdTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFdvcmtmbG93U2V0dGluZ3NTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl93b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3N0YXRlTWFjaGluZXNTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFN0YXRlTWFjaGluZXNTZXJ2aWNlKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMgPSB0aGlzLnNldHRpbmcuY29scy5maWx0ZXIocSA9PiAhcS5yZW1vdmVPbkluaXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm1lcmdlSW5mb1RvQ29sdW1uU2NoZW1hKCk7XHJcbiAgICAgICAgdGhpcy5nZW5lcmF0ZUZpZWxkU2VhcmNoVGV4dCgpO1xyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5kb05vdENoZWNrQmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyh0aGlzLm5vdENvbmZpZ0Jhc2VTZXJ2aWNlTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmhpZGRlblNldHRpbmdXb3JrZmxvdykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVzZVdvcmtmbG93ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZ2V0S2V5V29ya2Zsb3dTZXR0aW5nKCk7XHJcbiAgICAgICAgICAgIHRoaXMuX2VudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2UucmVnaXN0ZXJTZXJ2aWNlKGtleSwgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKTtcclxuICAgICAgICAgICAgdGhpcy5fZW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZS5yZWdpc3RlclNlcnZpY2Uoa2V5LCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xyXG4gICAgICAgICAgICB0aGlzLl9lbnRpdHlQZXJtaXNzaW9uU2VydmljZS5yZWdpc3RlclNlcnZpY2Uoa2V5LCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xyXG4gICAgICAgICAgICB0aGlzLl93b3JrZmxvd1NldHRpbmdTZXJ2aWNlLnJlZ2lzdGVyU2VydmljZShrZXksIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hlY2tBbGxvd1RyaW5oS3kgPSB0aGlzLmNoZWNrQWxsb3dUcmluaEt5LmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNoZWNrQWxsb3dUcmluaEt5ID0gdGhpcy5jaGVja0FsbG93VHJpbmhLeTtcclxuICAgICAgICB0aGlzLmdldE1lbnVCdXR0b25zID0gdGhpcy5nZXRNZW51QnV0dG9ucy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmhhbmRsZUFmdGVyVmlld0luaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpIHtcclxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGhhbmRsZUFmdGVyVmlld0luaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSAmJiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UudXNlV29ya2Zsb3cpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGVja0hhc1dvcmtmbG93KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2hlY2tIYXNFbmFibGVXb3JrZmxvd0NvcmVTdGF0dXMoKTtcclxuICAgICAgICB0aGlzLmNvdW50UmVhZHkrKztcclxuICAgICAgICBpZiAodGhpcy5jb3VudFJlYWR5ID4gMSkge1xyXG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBjaGVja0hhc0VuYWJsZVdvcmtmbG93Q29yZVN0YXR1cygpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0NvcmVTdGF0dXMpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sUGFyZW50ID0gbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICd3b3JrZmxvd0NvcmVTdGF0dXMnLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdUcuG6oW5nIHRow6FpIHRyw6xuaCBrw70nLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICd3b3JrZmxvd0NvcmVTdGF0dXMnLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGVSZWZGaWVsZDogJ3dvcmtmbG93Q29yZVN0YXR1cycsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEyMHB4JyxcclxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IERhdGFTb3VyY2VXb3JrZmxvd0NvcmVTdGF0dXMsXHJcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZE5lZWRHZXRSZWYudW5zaGlmdChjb2xQYXJlbnQpO1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHtcclxuICAgICAgICAgICAgICAgIC4uLmNvbFBhcmVudCxcclxuICAgICAgICAgICAgICAgIHJhd0NvbHVtbjogY29sUGFyZW50LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IGNvbFBhcmVudC5kYXRhVHlwZVJlZkZpZWxkLFxyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdzdHInICsgY29sUGFyZW50LmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGNvbFBhcmVudC5hbGxvd0ZpbHRlcixcclxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0NvbHVtblxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb2xQYXJlbnQudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29scy5wdXNoKGNvbFBhcmVudCwgY2hpbGRyZW4pO1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmZvcm1hdENvbHVtbnMoW2NvbFBhcmVudCwgY2hpbGRyZW5dKTtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5idWlsZEZpbHRlckNvbHVtbihbY29sUGFyZW50XSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tIYXNXb3JrZmxvdygpIHtcclxuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZ2V0S2V5V29ya2Zsb3dTZXR0aW5nKCk7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMuX2VudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2UuZ2V0U2V0dGluZyhrZXkpO1xyXG4gICAgICAgIGlmIChkYXRhICE9IG51bGwgJiYgZGF0YS5kYXRhICE9IG51bGwpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IGRhdGEuZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLndvcmtmbG93U2V0dGluZyA9IHNldHRpbmc7XHJcbiAgICAgICAgICAgIC8vIEzhuqV5IHRow7RuZyB0aW4gcXV54buBbiBj4bunYSBuZ8aw4budaSBkw7luZ1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyRGF0YSA9IGF3YWl0IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEluZm9Gb3JXb3JrZmxvdyh0aGlzLl91c2VyU2VydmljZS5nZXRVc2VySWRDb21iaW5lKCkpO1xyXG4gICAgICAgICAgICBpZiAodXNlckRhdGEuZGF0YSA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0zhu5dpIGzhuqV5IHRow7RuZyB0aW4gbmfGsOG7nWkgZMO5bmcnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmFkdmFuY2VEYXRhLnVzZXJEYXRhID0gdXNlckRhdGEuZGF0YTtcclxuICAgICAgICAgICAgY29uc3QgY29sUGFyZW50ID0gbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6IFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogJ2VudGl0eVdvcmtmbG93U3RhdHVzJyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlUmVmRmllbGQ6ICdlbnRpdHlXb3JrZmxvd1N0YXR1cycsXHJcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5zZXR0aW5nLmhpZGRlbldvcmtmbG93Q29sdW1uLFxyXG4gICAgICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxyXG4gICAgICAgICAgICAgICAgbGFiZWw6ICdUcuG6oW5nIHRow6FpJyxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTIwcHgnLFxyXG4gICAgICAgICAgICAgICAgZGF0YVNvdXJjZTogc2V0dGluZy5zdGF0dXNlcy5tYXAoaXRlbSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBpdGVtLm1hLFxyXG4gICAgICAgICAgICAgICAgICAgIHRlbjogaXRlbS50ZW5cclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkTmVlZEdldFJlZi51bnNoaWZ0KGNvbFBhcmVudCk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS51c2VyRGF0YSA9IHRoaXMubW9kZWwuYWR2YW5jZURhdGEudXNlckRhdGE7XHJcbiAgICAgICAgICAgIGNvbnN0IGNoaWxkcmVuID0ge1xyXG4gICAgICAgICAgICAgICAgLi4uY29sUGFyZW50LFxyXG4gICAgICAgICAgICAgICAgcmF3Q29sdW1uOiBjb2xQYXJlbnQsXHJcbiAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogY29sUGFyZW50LmRhdGFUeXBlUmVmRmllbGQsXHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ3N0cicgKyBjb2xQYXJlbnQuZmllbGQsXHJcbiAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogY29sUGFyZW50LmFsbG93RmlsdGVyLFxyXG4gICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5zZXR0aW5nLmhpZGRlbldvcmtmbG93Q29sdW1uXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbFBhcmVudC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLnB1c2goY29sUGFyZW50LCBjaGlsZHJlbik7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuZm9ybWF0Q29sdW1ucyhbY29sUGFyZW50LCBjaGlsZHJlbl0pO1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmJ1aWxkRmlsdGVyQ29sdW1uKFtjb2xQYXJlbnRdKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0RGF0YVNvdXJjZVRyYW5nVGhhaVdvcmtmbG93KCkge1xyXG4gICAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGdldFdvcmtmbG93RGV0YWlsQnlXb3JrZmxvd1NldHRpbmcoaXRlbVdvcmtmbG93U2V0dGluZzogYW55KSB7XHJcbiAgICAgICAgaWYgKGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlcyAmJiAhQXJyYXkuaXNBcnJheShpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZXMpKSB7XHJcbiAgICAgICAgICAgIGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlcyA9IGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2Rlcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB3b3JrZmxvd3MgPSAoYXdhaXQgdGhpcy5fc3RhdGVNYWNoaW5lc1NlcnZpY2UuZ2V0RGF0YURyb3Bkb3duQnlGaWx0ZXIoXHJcbiAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdjb2RlJywgT3BlcmF0b3IuaW4sIGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlcylcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgbmV3IERyb3Bkb3duT3B0aW9ucyh7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZUZpZWxkOiAnY29kZScsXHJcbiAgICAgICAgICAgICAgICBkaXNwbGF5RmllbGQ6ICd0aXRsZScsXHJcbiAgICAgICAgICAgICAgICBmaWVsZFBsdXM6ICdkYXRhJ1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICkpO1xyXG4gICAgICAgIHdvcmtmbG93cy5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpdGVtLmRhdGEgPSBKU09OLnBhcnNlKGl0ZW0uZGF0YSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlTWFjaGluZURhdGEgPSBpdGVtLmRhdGE7XHJcbiAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9ucyA9IHt9O1xyXG4gICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLm1hY2hpbmVzLmZvckVhY2gobWFjaGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnNbbWFjaGluZS5jb2RlXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5jb25uZWN0aW9ucy5mb3JFYWNoKGNvbm4gPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb25uLnNvdXJjZSA9PSBtYWNoaW5lLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuYWN0aW9uc1ttYWNoaW5lLmNvZGVdLnB1c2goY29ubik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGl0ZW1Xb3JrZmxvd1NldHRpbmcud29ya2Zsb3dzID0gd29ya2Zsb3dzO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhcHBlbmRDb2xXb3JrZmxvd1N0YXR1cyh3b3JrZmxvd3M6IFdmSXRlbVtdKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IFt7XHJcbiAgICAgICAgICAgIGlkOiBudWxsLFxyXG4gICAgICAgICAgICByYXdUZW46ICdDaMawYSBi4bqvdCDEkeG6p3UnLFxyXG4gICAgICAgICAgICB0ZW46ICdDaMawYSBi4bqvdCDEkeG6p3UnLFxyXG4gICAgICAgICAgICBtYUxvd2VyOiAnJyxcclxuICAgICAgICAgICAgdGVuTG93ZXI6ICdjaMawYSBi4bqvdCDEkeG6p3UnXHJcbiAgICAgICAgfV07XHJcbiAgICAgICAgaWYgKHdvcmtmbG93cyAmJiB3b3JrZmxvd3MubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHdvcmtmbG93cy5mb3JFYWNoKHdvcmtmbG93ID0+IHtcclxuICAgICAgICAgICAgICAgIHdvcmtmbG93LmRhdGEubWFjaGluZXMuZm9yRWFjaChtYWNoaW5lID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU3RhdHVzID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbWFjaGluZS5jb2RlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByYXdUZW46IG1hY2hpbmUubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVuOiBtYWNoaW5lLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hTG93ZXI6IG1hY2hpbmUuY29kZS50b0xvd2VyQ2FzZSgpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW5Mb3dlcjogbWFjaGluZS5uYW1lLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YVNvdXJjZS5zb21lKHggPT4geC50ZW5Mb3dlciA9PSBpdGVtU3RhdHVzLnRlbkxvd2VyICYmIHgubWFMb3dlciA9PSBpdGVtU3RhdHVzLm1hTG93ZXIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UucHVzaChpdGVtU3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVNhbWVOYW1lID0gZGF0YVNvdXJjZS5maW5kKHEgPT4gcS50ZW5Mb3dlciA9PSBpdGVtU3RhdHVzLnRlbkxvd2VyICYmIHEubWFMb3dlciAhPSBpdGVtU3RhdHVzLm1hTG93ZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVNhbWVOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2FtZU5hbWUudGVuID0gYCR7aXRlbVNhbWVOYW1lLnJhd1Rlbn0gKCR7aXRlbVNhbWVOYW1lLmlkfSlgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVN0YXR1cy50ZW4gPSBgJHtpdGVtU3RhdHVzLnJhd1Rlbn0gKCR7aXRlbVN0YXR1cy5pZH0pYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY29sUGFyZW50ID0gbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICBmaWVsZDogV29ya2Zsb3dGaWVsZFN0YXRlQ29kZSxcclxuICAgICAgICAgICAgZGF0YVR5cGU6ICd0cmFuZ1RoYWlWNScsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlUmVmRmllbGQ6ICd0cmFuZ1RoYWlWNScsXHJcbiAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb2x1bW4sXHJcbiAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcclxuICAgICAgICAgICAgbGFiZWw6ICdUcuG6oW5nIHRow6FpJyxcclxuICAgICAgICAgICAgd2lkdGg6ICcxMjBweCcsXHJcbiAgICAgICAgICAgIHRleHRBbGlnbjogVGV4dEFsaWduLkNlbnRlcixcclxuICAgICAgICAgICAgaXNUcmVlOiB0cnVlLFxyXG4gICAgICAgICAgICBmaWVsZFRyZWU6ICdwYXJlbnRJZCcsXHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2VcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGROZWVkR2V0UmVmLnVuc2hpZnQoY29sUGFyZW50KTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEudXNlckRhdGEgPSB0aGlzLm1vZGVsLmFkdmFuY2VEYXRhLnVzZXJEYXRhO1xyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuID0ge1xyXG4gICAgICAgICAgICAuLi5jb2xQYXJlbnQsXHJcbiAgICAgICAgICAgIHJhd0NvbHVtbjogY29sUGFyZW50LFxyXG4gICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiBjb2xQYXJlbnQuZGF0YVR5cGVSZWZGaWVsZCxcclxuICAgICAgICAgICAgZmllbGQ6ICdzdHInICsgY29sUGFyZW50LmZpZWxkLFxyXG4gICAgICAgICAgICBhbGxvd0ZpbHRlcjogY29sUGFyZW50LmFsbG93RmlsdGVyLFxyXG4gICAgICAgICAgICBzb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0NvbHVtblxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29sUGFyZW50LnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY29scy5wdXNoKGNvbFBhcmVudCwgY2hpbGRyZW4pO1xyXG4gICAgICAgIHRoaXMuY3J1ZExpc3QuZm9ybWF0Q29sdW1ucyhbY29sUGFyZW50LCBjaGlsZHJlbl0pO1xyXG4gICAgICAgIHRoaXMuY3J1ZExpc3QuYnVpbGRGaWx0ZXJDb2x1bW4oW2NvbFBhcmVudF0pO1xyXG5cclxuICAgICAgICBjb25zdCB1c2VyQ3VycmVudCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICAgICAgaWYgKHVzZXJDdXJyZW50LnVzZXJOYW1lID09ICdhZG1pbicpIHtcclxuICAgICAgICAgICAgY29uc3QgY29sRm9yQWRtaW4gPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogJ19fdmlld0hpc3RvcnknLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdfX3ZpZXdIaXN0b3J5JyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnJyxcclxuICAgICAgICAgICAgICAgIHdpZHRoOiAnMTAwcHgnLFxyXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOiBUZXh0QWxpZ24uQ2VudGVyXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29scy5wdXNoKGNvbEZvckFkbWluKTtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5mb3JtYXRDb2x1bW5zKFtjb2xGb3JBZG1pbl0pO1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmJ1aWxkRmlsdGVyQ29sdW1uKFtjb2xGb3JBZG1pbl0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjaGVja0FsbG93VHJpbmhLeShyb3dEYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWVudUJ1dHRvbnMocm93RGF0YSkge1xyXG4gICAgICAgIHRoaXMucm93RGF0YUN1cnJlbnQgPSByb3dEYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF9hZGQoZXZ0KSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0VmFsaWRhdGUgPSBhd2FpdCB0aGlzLnZhbGlkYXRlQWRkKCk7XHJcbiAgICAgICAgaWYgKCFyZXN1bHRWYWxpZGF0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB7fTtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuQUREO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlQWRkKCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBvcHVwSGVhZGVyID0gYFRow6ptIG3hu5tpICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9YDtcclxuICAgICAgICB0aGlzLnNldHRpbmcubWFza0NsYXNzID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNob3dEZXRhaWxGb3JtID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB2YWxpZGF0ZUFkZCgpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBiZWZvcmVBZGQoKSB7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3ZpZXcocm93RGF0YSkge1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5WSUVXO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlVmlldygpO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5wb3B1cEhlYWRlciA9IGBYZW0gJHt0aGlzLnNldHRpbmcub2JqZWN0TmFtZX1gO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5tYXNrQ2xhc3MgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB0aGlzLmNsb25lRGF0YShyb3dEYXRhKTtcclxuICAgICAgICBhd2FpdCB0aGlzLm1vZGlmeVZpZXdNb2RlbChyb3dEYXRhKTtcclxuICAgICAgICB0aGlzLnNob3dEZXRhaWxGb3JtID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBiZWZvcmVWaWV3KCkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vZGlmeVZpZXdNb2RlbChyb3dEYXRhOiBhbnkpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfZWRpdChyb3dEYXRhLCBzY29wZURhdGFFZGl0OiBhbnkgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IGZsYXNoU2hvdyA9IHJvd0RhdGFbS2V5Rmxhc2hTaG93XTtcclxuICAgICAgICBkZWxldGUgcm93RGF0YVtLZXlGbGFzaFNob3ddO1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5FRElUO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlRWRpdCgpO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5wb3B1cEhlYWRlciA9IGBD4bqtcCBuaOG6rXQgJHt0aGlzLnNldHRpbmcub2JqZWN0TmFtZX1gO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5tYXNrQ2xhc3MgPSBmbGFzaFNob3cgPyAnaGlkZScgOiBudWxsO1xyXG4gICAgICAgIHRoaXMuc2NvcGVEYXRhRWRpdCA9IHNjb3BlRGF0YUVkaXQ7XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZGF0YSA9IHRoaXMuY2xvbmVEYXRhKHJvd0RhdGEpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMubW9kaWZ5RWRpdE1vZGVsKHJvd0RhdGEpO1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGFbS2V5Rmxhc2hTaG93XSA9IGZsYXNoU2hvdztcclxuICAgICAgICB0aGlzLnNob3dEZXRhaWxGb3JtID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBiZWZvcmVFZGl0KCkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vZGlmeUVkaXRNb2RlbChyb3dEYXRhOiBhbnkpIHtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNsb25lRGF0YShyb3dEYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgaWQ6IHJvd0RhdGFbdGhpcy5zZXR0aW5nLmVudGl0eUtleV1cclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb21pc2VEZWxldGVJdGVtKHJvd0RhdGEpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmRlbGV0ZShyb3dEYXRhLmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBfZGVsZXRlKHJvd0RhdGEpIHtcclxuICAgICAgICBpZiAocm93RGF0YS5fX2Rpc2FibGVEZWxldGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZUNvbmZpcm0oKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgaWYgKCFycykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZURlbGV0ZUl0ZW0ocm93RGF0YSlcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNob3dWZXJzaW9uQnV0dG9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuQ09NTU9OLlJFTE9BRF9EQVRBX1ZFUlNJT04sIHt9LCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhU3VjY2VzcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nQnlSZXBvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhRXJyb3IoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFByb21pc2VEZWxldGVJdGVtcyhpdGVtcykge1xyXG4gICAgICAgIGNvbnN0IGlkcyA9IGl0ZW1zLm1hcCh4ID0+IHguaWQpLmpvaW4oJywnKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmRlbGV0ZU1hbnkoaWRzKTtcclxuICAgIH1cclxuXHJcbiAgICBfZGVsZXRlTXVsdGlwbGUoaXRlbXMpIHtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0RlbGV0ZUNvbmZpcm0oKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgaWYgKCFycykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZURlbGV0ZUl0ZW1zKGl0ZW1zKS50aGVuKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVEYXRhU3VjY2VzcygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nQnlSZXBvbnNlKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQmVmb3JlQ2FuY2VsKCkge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlU2F2ZWQoKSB7XHJcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX3RyaWdnZXJQcm9jZXNzRGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIF9oYW5kbGVDYW5jZWwoJGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5vbkJlZm9yZUNhbmNlbCgpO1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGdldEVudGl0eU1ldGFkYXRhKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuc2V0dGluZy5lbnRpdHlNZXRhZGF0YVNldHRpbmcuZGF0YSA9IHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5nZXRXZjFTZXR0aW5nKCk7XHJcbiAgICAgICAgICAgIC8vICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIC8vIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNldHRpbmcuZW50aXR5TWV0YWRhdGFTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEVudGl0eU1ldGFkYXRhU2VydmljZSk7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UgPSB0aGlzLnNldHRpbmcuZW50aXR5TWV0YWRhdGFTZXJ2aWNlO1xyXG4gICAgICAgICAgICAvLyAgICAgYXdhaXQgdGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlLmxvYWQodGhpcy5fYmFzZVNlcnZpY2UsIHRoaXMuY29udGV4dCwgdHJ1ZSk7ICAvLyBmb3JjZSBsb2FkIMSR4buDIMSR4buNYyB04burIGNzZGxcclxuICAgICAgICAgICAgLy8gICAgIHRoaXMuc2V0dGluZy5lbnRpdHlNZXRhZGF0YVNldHRpbmcuZGF0YSA9IHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5nZXRXZjFTZXR0aW5nKCk7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcignUGxlYXNlIGluY2x1ZGUgRW50aXR5TWV0YWRhdGFTZXJ2aWNlIGluIHByb3ZpZGVyIG9mIGNvbXBvbmVudCcpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZWxvYWQoKSB7XHJcbiAgICAgICAgdGhpcy5jcnVkTGlzdC5yZWxvYWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfdHJpZ2dlclByb2Nlc3NEYXRhKGdyaWRJbmZvPzogR3JpZEluZm8pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NEYXRhKGdyaWRJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHByb2Nlc3NEYXRhKGdyaWRJbmZvPzogR3JpZEluZm8pIHtcclxuICAgICAgICB0aGlzLnJlYWR5VG9UcmluaEt5ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKHRoaXMuaGFzQ3J1ZExpc3QpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmNydWRMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFncmlkSW5mbykge1xyXG4gICAgICAgICAgICAgICAgZ3JpZEluZm8gPSB0aGlzLmNydWRMaXN0LmdldEdyaWRJbmZvKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghZ3JpZEluZm8pIHtcclxuICAgICAgICAgICAgICAgIGdyaWRJbmZvID0gbmV3IEdyaWRJbmZvKHtcclxuICAgICAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlOiAxLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogOTk5XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBzb3J0czogW11cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2V0RGF0YShncmlkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbW9kaWZ5R3JpZEluZm8oZ3JpZEluZm86IEdyaWRJbmZvKTogUHJvbWlzZTxib29sZWFuIHwgdm9pZD4ge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZ2V0RGF0YShncmlkSW5mbzogR3JpZEluZm8pIHtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlICYmIHRoaXMubW9kZWwucmVhZHkpIHtcclxuICAgICAgICAgICAgdGhpcy5fbWFya0xvYWRpbmcoKTtcclxuICAgICAgICAgICAgZ3JpZEluZm8ubW9kaWZ5RmlsdGVyKFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsIGZpbHRlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyLnZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGhhc051bGxWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3RWYWx1ZXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBKU09OLnBhcnNlKGZpbHRlci52YWx1ZSkuZm9yRWFjaCh2YWx1ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzTnVsbFZhbHVlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3RWYWx1ZXMucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzTnVsbFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN0VmFsdWVzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIub3BlcmF0b3IgPSBPcGVyYXRvci5pc051bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmxvZ2ljID0gJ29yJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmZpZWxkID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLnZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmZpbHRlcnMgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBPcGVyYXRvci5pc051bGwsICcnKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsIE9wZXJhdG9yLmluLCByZXN0VmFsdWVzKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdE1vZGlmeSA9IGF3YWl0IHRoaXMubW9kaWZ5R3JpZEluZm8oZ3JpZEluZm8pO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0TW9kaWZ5ID09PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnRvdGFsID0gMDtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZXhwYW5kZWRSb3dLZXlzID0ge307XHJcbiAgICAgICAgICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5kb0dldFJlcXVlc3QoZ3JpZEluZm8pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBfbWFya0xvYWRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5sb2FkaW5nID0gdHJ1ZTtcclxuICAgICAgICBpZiAodGhpcy5jcnVkTGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmFkanVzdFBvc2l0aW9uTG9hZGluZ01hc2soKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdNw6F5IGNo4bunIHBo4bqjbiBo4buTaSBxdcOhIGzDonUsIHZ1aSBsw7JuZyBraeG7g20gdHJhIGzhuqFpIMSRxrDhu51uZyB0cnV54buBbiBt4bqhbmchJyk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH0sIDIwMDAwKTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlUmVsb2FkZWQoZXZ0ID0gbnVsbCkge1xyXG4gICAgICAgIHRoaXMuX3VubWFya0xvYWRpbmcoKTtcclxuICAgICAgICB0aGlzLmFmdGVyUmVsb2FkZWQoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZnRlclJlbG9hZGVkKCkgeyB9XHJcblxyXG4gICAgX3VubWFya0xvYWRpbmcoKSB7XHJcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGluZ1RpbWVvdXQpO1xyXG4gICAgICAgIHRoaXMubW9kZWwubG9hZGluZyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmlyZURhdGFMb2FkZWQoc3VjY2VzczogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICBpZiAoc3VjY2VzcyAmJiB0aGlzLmNydWRMaXN0KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QucHJvY2Vzc0Jhc2VEYXRhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3VubWFya0xvYWRpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9taXNlR2V0RGF0YShncmlkSW5mbzogR3JpZEluZm8pIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldEJ5R3JpZFJlcXVlc3QoZ3JpZEluZm8sIHRoaXMucGx1c1VybCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RGF0YUN1c3RvbShncmlkSW5mbzogR3JpZEluZm8pIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkb0dldFJlcXVlc3QoZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1c3RvbUdldERhdGEpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRQcm9taXNlR2V0RGF0YShncmlkSW5mbylcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihhc3luYyByZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb2Nlc3NHZXREYXRhKHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZURhdGFMb2FkZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhyZXNwb25zZS5tZXNzYWdlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlyZURhdGFMb2FkZWQoZmFsc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0h0dHBVbmtub3dFcnJvcigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVEYXRhTG9hZGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5nZXREYXRhQ3VzdG9tKGdyaWRJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzR2V0RGF0YShyZXNwb25zZTogUmVzcG9uc2VSZXN1bHQpIHtcclxuICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5cyA9IHt9O1xyXG4gICAgICAgIHRoaXMubW9kZWwudG90YWwgPSByZXNwb25zZS50b3RhbFJlY29yZDtcclxuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YSAmJiByZXNwb25zZS5kYXRhLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5iZWZvcmVSZW5kZXJEYXRhU291cmNlKHJlc3BvbnNlLmRhdGEpO1xyXG4gICAgICAgICAgICByZXNwb25zZS5kYXRhLmZvckVhY2gocm93SXRlbSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZXhwYW5kZWRSb3dLZXlzW3Jvd0l0ZW1bdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZF1dID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc0ZvcmVhY2hJdGVtQWZ0ZXJHZXREYXRhKHJvd0l0ZW0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IHJlc3BvbnNlLmRhdGE7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcud29ya2Zsb3dTZXR0aW5nKSB7XHJcbiAgICAgICAgICAgIC8vIEzhuqV5IHJhIG5o4buvbmcgdHLhuqFuZyB0aMOhaSBtw6AgYuG6o24gZ2hpIGtow7RuZyDEkcaw4bujYyBz4butYVxyXG4gICAgICAgICAgICBjb25zdCBzdGF0dXNOb3RBbGxvd0VkaXRzID0gdGhpcy5zZXR0aW5nLndvcmtmbG93U2V0dGluZy5zdGF0dXNlcy5maWx0ZXIocCA9PiAhcC5vcHRpb25zLmNob1BoZXBTdWEpLm1hcChpdGVtID0+IGl0ZW0udHJhbmdUaGFpQ29udGFpbmVyLm1hKTtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5faW5kZXggPSAodGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgLSAxKSAqIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlU2l6ZSArIDEgKyBpbmRleDtcclxuICAgICAgICAgICAgICAgIC8vIGl0ZW0uY3VycmVudFN0YXRlQ29kZSA9IGl0ZW0uY3VycmVudFN0YXRlQ29kZTtcclxuICAgICAgICAgICAgICAgIGl0ZW0uX19kaXNhYmxlRWRpdCA9IHN0YXR1c05vdEFsbG93RWRpdHMuaW5kZXhPZihpdGVtLmN1cnJlbnRTdGF0ZUNvZGUpID4gLTE7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaXRlbS5faW5kZXggPSAodGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgLSAxKSAqIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlU2l6ZSArIDEgKyBpbmRleDtcclxuICAgICAgICAgICAgICAgIC8vIGl0ZW0uY3VycmVudFN0YXRlQ29kZSA9IGl0ZW0uY3VycmVudFN0YXRlQ29kZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLm1vZGVsLmRhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xyXG5cclxuICAgICAgICBjb25zdCByZXNldFNlbGVjdGVkSXRlbXMgPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMgJiYgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aDtcclxuICAgICAgICBpZiAocmVzZXRTZWxlY3RlZEl0ZW1zKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPSAwO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYXdhaXQgdGhpcy5hZnRlckdldERhdGEoKTtcclxuXHJcbiAgICAgICAgdGhpcy5fZ2V0UmVmRGF0YURyb3Bkb3duKHRoaXMubW9kZWwuZGF0YVNvdXJjZSk7XHJcbiAgICB9XHJcblxyXG4gICAgYmVmb3JlUmVuZGVyRGF0YVNvdXJjZShkYXRhc291cmNlOiBhbnkpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIHJldHVybiBkYXRhc291cmNlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgcHJvY2Vzc0ZvcmVhY2hJdGVtQWZ0ZXJHZXREYXRhKHg6IGFueSkge1xyXG4gICAgICAgIC8vIHByb2Nlc3Mgd29ya2Zsb3dcclxuICAgICAgICBpZiAodGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UuaXNXZjEoKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5nZXRXZjFTZXR0aW5nKCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VXNlcklkID0gdGhpcy5fdXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKS51c2VySWQudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIGlmICh4WydtZXRhZGF0YVN0YXR1cyddID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoeFsnY3JlYXRlZEJ5J10gIT0gY3VycmVudFVzZXJJZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4Ll9fZGlzYWJsZUVkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4Ll9fZGlzYWJsZURlbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoeFsnbWV0YWRhdGFTdGF0dXMnXSA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB4LmNvdW50T2ZBcHByb3ZlID8geC5jb3VudE9mQXBwcm92ZSArIDEgOiAxO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9ICdvYmplY3RJc1VzZXInICsgY291bnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVUQtMTE5OCAtIE5hbU5IIC0gVHLGsOG7nW5nIGjhu6NwIHNldHRpbmcgY2jGsGEgY8OzIGThu68gbGnhu4d1IHRow6wgYuG7iyBleGNlcHRpb24sIGRvIGPDoWMgYuG6o24gZ2hpIHRow6ptIG3hu5tpIHRyxrDhu5tjIGtoaSBi4bqtdCBxdXkgdHLDrG5oIHRow6wga28gY8OzIGThu68gbGnhu4d1IG7DoHlcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ1trZXldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nW2tleV0uc29tZSh4ID0+IHggPT0gY3VycmVudFVzZXJJZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHguX19kaXNhYmxlRWRpdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Ll9fZGlzYWJsZURlbGV0ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRU5EIFVELTExOThcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHhbJ21ldGFkYXRhU3RhdHVzJ10gPT0gMikge1xyXG4gICAgICAgICAgICAgICAgICAgIHguX19kaXNhYmxlRWRpdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgeC5fX2Rpc2FibGVEZWxldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFmdGVyR2V0RGF0YSgpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0UmVmRGF0YURyb3Bkb3duKGRhdGFTb3VyY2UpIHtcclxuICAgICAgICBpZiAoZGF0YVNvdXJjZSAmJiBkYXRhU291cmNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZE5lZWRHZXRSZWYpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFyclByb21pc2VEb250TmVlZFdhaXQgPSBbXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGFyclNjaGVtYURvbnROZWVkV2FpdCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzY2hlbWEgb2YgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkTmVlZEdldFJlZikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkID0gc2NoZW1hLmZpZWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWFbS2V5RmllbGRHZXRSZWZUeXBlXSA9PSBFbnVtR2V0UmVmVHlwZS5TRVJWRVIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mb3JjZUdldERhdGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8ICh0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4gJiYgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnJhd0NvbHVtbiAmJiB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4ucmF3Q29sdW1uLmZpZWxkID09IHNjaGVtYS5maWVsZClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHRoaXMuc2V0dGluZy5jb2xzLnNvbWUoaXRlbSA9PiBpdGVtLmZpZWxkID09ICdzdHInICsgZmllbGQgJiYgaXRlbS52aXNpYmxlICE9IGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyclZhbHVlID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGl0ZW1EYXRhW2ZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGlkcyA9IGN1cnJlbnRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShpZHMpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzID0gaWRzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZHMuZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcnJWYWx1ZS5zb21lKHAgPT4gcCA9PSBpZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyVmFsdWUucHVzaChpZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWFyclZhbHVlLnNvbWUocCA9PiBwID09IGN1cnJlbnRWYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goY3VycmVudFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyclZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgcHJvbWlzZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5iYXNlU2VydmljZSBpbnN0YW5jZW9mIE1hc3RlckRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSBzY2hlbWEuYmFzZVNlcnZpY2UuZ2V0RGF0YURyb3Bkb3duKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hLmdyb3VwQ29kZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCBhcnJWYWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCB0aGlzLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyhzY2hlbWEpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbHRlcnMgPSBbdGhpcy5uZXdGaWx0ZXIoc2NoZW1hLnZhbHVlRmllbGQsIE9wZXJhdG9yLmluLCBhcnJWYWx1ZSldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm1vZGlmeUZpbHRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NoZW1hLm1vZGlmeUZpbHRlcihmaWx0ZXJzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2NoZW1hLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVycyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlRHJvcGRvd25PcHRpb25zKHNjaGVtYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5vcmRlciAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21pc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VSZWZEYXRhVG9EYXRhc291cmNlKGRhdGFTb3VyY2UsIHNjaGVtYSwgcmVzdWx0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclByb21pc2VEb250TmVlZFdhaXQucHVzaChwcm9taXNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyU2NoZW1hRG9udE5lZWRXYWl0LnB1c2goc2NoZW1hKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IGl0ZW1bc2NoZW1hLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsnbGFiZWwnXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0TGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNHZXRMYWJlbCA9IHNjaGVtYS5mdW5jR2V0TGFiZWw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW0gPSBzY2hlbWEuZGF0YVNvdXJjZS5maW5kKGkgPT4gc2NoZW1hLmZ1bmNDb21wYXJlKGksIGl0ZW1EYXRhW2ZpZWxkXSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldExhYmVsKHJlZkl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJyUHJvbWlzZURvbnROZWVkV2FpdC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyUmVzID0gYXdhaXQgUHJvbWlzZS5hbGwoYXJyUHJvbWlzZURvbnROZWVkV2FpdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyU2NoZW1hRG9udE5lZWRXYWl0LmZvckVhY2goKHNjaGVtYSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZXJnZVJlZkRhdGFUb0RhdGFzb3VyY2UoZGF0YVNvdXJjZSwgc2NoZW1hLCBhcnJSZXNbaW5kZXhdKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuYWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24obnVsbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5VG9UcmluaEt5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVhZHlUb1RyaW5oS3kgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWVyZ2VSZWZEYXRhVG9EYXRhc291cmNlKGRhdGFTb3VyY2U6IGFueVtdLCBzY2hlbWE6IENvbHVtblNjaGVtYUJhc2UsIGRhdGE6IGFueVtdKSB7XHJcbiAgICAgICAgY29uc3QgZmllbGQgPSBzY2hlbWEuZmllbGQ7XHJcbiAgICAgICAgbGV0IGZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4gaXRlbVtzY2hlbWEuZGlzcGxheUZpZWxkXSB8fCBpdGVtWydsYWJlbCddO1xyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY0dldExhYmVsKSB7XHJcbiAgICAgICAgICAgIGZ1bmNHZXRMYWJlbCA9IHNjaGVtYS5mdW5jR2V0TGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBmdW5jU2V0VmFsdWVSb3cgPSAocm93SXRlbSwgZGF0YSkgPT4geyB9O1xyXG4gICAgICAgIGxldCBmdW5jR2V0UmVmRGF0YVJvdyA9IChyZWZJdGVtcykgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gcmVmSXRlbXMubWFwKGl0ZW0gPT4gZnVuY0dldExhYmVsKGl0ZW0pKS5qb2luKGAke3NjaGVtYS5zZXBhcmF0b3J9IGApO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jU2V0VmFsdWVSb3cpIHtcclxuICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93ID0gc2NoZW1hLmZ1bmNTZXRWYWx1ZVJvdztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNjaGVtYS5mdW5jR2V0UmVmRGF0YVJvdykge1xyXG4gICAgICAgICAgICBmdW5jR2V0UmVmRGF0YVJvdyA9IHNjaGVtYS5mdW5jR2V0UmVmRGF0YVJvdztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1EYXRhW2ZpZWxkXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGlkcyA9IGl0ZW1EYXRhW2ZpZWxkXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaWRzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZHMgPSBpZHMuc3BsaXQoJywnKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbXMgPSBkYXRhLmZpbHRlcihpID0+IGlkcy5zb21lKHEgPT4gc2NoZW1hLmZ1bmNDb21wYXJlKGksIHEpKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbURhdGFbJ3N0cicgKyBmaWVsZF0gPSBmdW5jR2V0UmVmRGF0YVJvdyhyZWZJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyhpdGVtRGF0YSwgcmVmSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlLmZvckVhY2goaXRlbURhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1EYXRhW2ZpZWxkXSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVmSXRlbSA9IGRhdGEuZmluZChpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBpdGVtRGF0YVtmaWVsZF0pKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocmVmSXRlbSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldExhYmVsKHJlZkl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3coaXRlbURhdGEsIHJlZkl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmFmdGVyR2V0UmVmRGF0YURyb3Bkb3duKGZpZWxkKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNyZWF0ZURyb3Bkb3duT3B0aW9ucyhzY2hlbWE6IENvbHVtblNjaGVtYUJhc2UpIHtcclxuICAgICAgICByZXR1cm4gbmV3IERyb3Bkb3duT3B0aW9ucyh7XHJcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZDogc2NoZW1hLmRpc3BsYXlGaWVsZCxcclxuICAgICAgICAgICAgdmFsdWVGaWVsZDogc2NoZW1hLnZhbHVlRmllbGQsXHJcbiAgICAgICAgICAgIGZpZWxkUGx1czogc2NoZW1hLmZpZWxkUGx1cyxcclxuICAgICAgICAgICAgZmllbGRUcmVlOiBzY2hlbWEuZmllbGRUcmVlLFxyXG4gICAgICAgICAgICBmaWVsZFBhcmVudFRyZWVJdGVtOiBzY2hlbWEuZmllbGRQYXJlbnRUcmVlSXRlbSxcclxuICAgICAgICAgICAgZnVuY0dldExhYmVsOiBzY2hlbWEuZnVuY0dldExhYmVsLFxyXG4gICAgICAgICAgICBzb3J0RmllbGQ6IHNjaGVtYS5zb3J0RmllbGQsXHJcbiAgICAgICAgICAgIHNvcnREaXI6IHNjaGVtYS5zb3J0RGlyLFxyXG4gICAgICAgICAgICBjYWxsYmFja0RhdGFGaW5pc2g6IHNjaGVtYS5jYWxsYmFja0RhdGFGaW5pc2hcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhZnRlckdldFJlZkRhdGFEcm9wZG93bihmaWVsZDogc3RyaW5nKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbWVyZ2VJbmZvVG9Db2x1bW5TY2hlbWEoKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb2x1bW5Nb2RlbFNjaGVtYSA9IHRoaXMuc2V0dGluZy5tb2RlbFNjaGVtYXMuZmluZChwID0+IHAuZmllbGQgPT0gY29sLmZpZWxkKTtcclxuICAgICAgICAgICAgaWYgKGNvbHVtbk1vZGVsU2NoZW1hKSB7XHJcbiAgICAgICAgICAgICAgICBjb2wubGFiZWwgPSBjb2x1bW5Nb2RlbFNjaGVtYS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgY29sLmZ1bGxMYWJlbCA9IGNvbHVtbk1vZGVsU2NoZW1hLmZ1bGxOYW1lO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFjb2wuZGF0YVR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2wuZGF0YVR5cGUgPSB0aGlzLmdldERhdGFUeXBlKGNvbHVtbk1vZGVsU2NoZW1hLmRhdGFUeXBlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RGF0YVR5cGUodHlwZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHR5cGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZW5lcmF0ZUZpZWxkU2VhcmNoVGV4dCgpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY29scy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb2wuZnVsbFRleHRTZWFyY2gpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWVsZFNlYXJjaFRleHQucHVzaChjb2wuZmllbGQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5maWVsZFNlYXJjaFRleHQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWVsZFNlYXJjaFRleHQuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgICAgICAgICAgICBmaWx0ZXJzLnB1c2gobmV3IEZpbHRlcih7IGZpZWxkLCBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbiwgc291cmNlRmllbGQ6ICdfaycgfSkpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuZmlsdGVyVGVtcGxhdGVBZHZzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmlsdGVyVGVtcGxhdGVBZHZzLnNwbGljZSgwLCAwLCBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgICAgICAgICBsb2dpYzogJ29yJyxcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzXHJcbiAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZVBlcm1pc3Npb24ocm93RGF0YSkge1xyXG4gICAgICAgIGlmICh0aGlzLmNydWRMaXN0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLmNydWRMaXN0LnZhbGlkYXRlUGVybWlzc2lvbihyb3dEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
848
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS1saXN0LWJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvdG54LXNoYXJlZC9zcmMvbGliLyIsInNvdXJjZXMiOlsiY2xhc3Nlcy9iYXNlL2RhdGEtbGlzdC1iYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDM0MsT0FBTyxFQUFpQixpQkFBaUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBcUIsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scURBQXFELENBQUM7QUFDeEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEVBQTBFLENBQUM7QUFDbkgsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFFckcsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbEgsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFDbEgsT0FBTyxFQUFFLCtCQUErQixFQUFFLE1BQU0sdUVBQXVFLENBQUM7QUFDeEgsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sOERBQThELENBQUM7QUFDdkcsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFMUQsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDdEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8s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R0FBRyxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUN6QyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksTUFBTSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkYsQ0FBQyxDQUFDLENBQUM7WUFFSCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUM7b0JBQ3BELEtBQUssRUFBRSxJQUFJO29CQUNYLE9BQU87aUJBQ1YsQ0FBQyxDQUFDLENBQUM7YUFDUDtTQUNKO0lBQ0wsQ0FBQztJQUVhLGtCQUFrQixDQUFDLE9BQU87O1lBQ3BDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtnQkFDZixPQUFPLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUMxRDtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUM7S0FBQTs7O1lBMzNCSixTQUFTOzs7WUE1QjRDLFFBQVE7OztzQkErQnpELFNBQVMsU0FBQyxVQUFVOzBCQWFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBZnRlclZpZXdJbml0LCBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBJbmplY3RvciwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgQ3J1ZExpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NydWQvY3J1ZC1saXN0L2NydWQtbGlzdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBFbnRpdHlQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZW50aXR5LXBlcm1pc3Npb24vc2VydmljZXMuY3MvZW50aXR5LXBlcm1pc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFN0YXRlTWFjaGluZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zdGF0ZW1hY2hpbmVzL3NlcnZpY2VzL3N0YXRlbWFjaGluZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IFdmSXRlbSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvbW9kZWxzL21vZGVscyc7XHJcbmltcG9ydCB7IEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL2VudGl0eS13b3JrZmxvdy1oaXN0b3J5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRpdHlXb3JrZmxvd1NldHRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9zZXJ2aWNlcy9lbnRpdHktd29ya2Zsb3ctc2V0dGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgV29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvc2VydmljZXMvd29ya2Zsb3ctcGVybWlzc2lvbi1kZXRhaWwuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmtmbG93U2V0dGluZ3NTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9zZXJ2aWNlcy93b3JrZmxvdy1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XHJcbmltcG9ydCB7IEZpbHRlciwgR3JpZEluZm8gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcclxuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcclxuaW1wb3J0IHsgRGF0YVNvdXJjZVdvcmtmbG93Q29yZVN0YXR1cyB9IGZyb20gJy4uLy4uL21vZGVscy93b3JrZmxvdy1jb3JlLXN0YXR1cy5lbnVtJztcclxuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbW1vbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jcnVkLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDdXN0b21Sb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3VzdG9tLXJvdXRlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50aXR5TWV0YWRhdGFTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZW50aXR5LW1ldGFkYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXhwb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBMaXN0SGVscGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xpc3QtaGVscGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXN0ZXJEYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21hc3Rlci1kYXRhLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnVtR2V0UmVmVHlwZSwgRm9ybVN0YXRlLCBLZXlGaWVsZEdldFJlZlR5cGUsIEtleUZsYXNoU2hvdywgV29ya2Zsb3dGaWVsZFN0YXRlQ29kZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IENvbHVtblNjaGVtYUJhc2UsIENvbnRyb2xUeXBlLCBDcnVkRm9ybURhdGEsIENydWRMaXN0RGF0YSwgQ3J1ZExpc3RTZXR0aW5nLCBEcm9wZG93bk9wdGlvbnMsIE9wZXJhdG9yLCBUZXh0QWxpZ24gfSBmcm9tICcuLi9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuL2NvbXBvbmVudC1iYXNlJztcclxuXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgRGF0YUxpc3RCYXNlIGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlclZpZXdJbml0IHtcclxuICAgIHB1YmxpYyBjcnVkTGlzdDogQ3J1ZExpc3RDb21wb25lbnQ7XHJcbiAgICBAVmlld0NoaWxkKCdjcnVkTGlzdCcpIHNldCBjb250ZW50KGNvbnRlbnQ6IENydWRMaXN0Q29tcG9uZW50KSB7XHJcbiAgICAgICAgY29uc3QgYmVmb3JlVmFsdWUgPSB0aGlzLmNydWRMaXN0O1xyXG4gICAgICAgIGlmIChjb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QgPSBjb250ZW50O1xyXG4gICAgICAgICAgICBpZiAoIWJlZm9yZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvdW50UmVhZHkrKztcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvdW50UmVhZHkgPCAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzRGF0YSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgQElucHV0KCkgcGFyZW50TW9kZWw6IENydWRMaXN0RGF0YTtcclxuXHJcbiAgICBwcml2YXRlIG5vdENvbmZpZ0Jhc2VTZXJ2aWNlTWVzc2FnZSA9ICdDaMawYSBj4bqldSBow6xuaCBDUlVEIGJhc2Ugc2VydmljZSc7XHJcbiAgICBkb05vdENoZWNrQmFzZVNlcnZpY2UgPSBmYWxzZTtcclxuICAgIHNldHRpbmc6IENydWRMaXN0U2V0dGluZyA9IG5ldyBDcnVkTGlzdFNldHRpbmcoKTtcclxuICAgIG1vZGVsOiBDcnVkTGlzdERhdGEgPSBuZXcgQ3J1ZExpc3REYXRhKCk7XHJcbiAgICBmb3JtTW9kZWw6IENydWRGb3JtRGF0YSA9IG5ldyBDcnVkRm9ybURhdGEoKTtcclxuICAgIHNjb3BlRGF0YUVkaXQ6IGFueSA9IHt9O1xyXG4gICAgc2hvd0RldGFpbEZvcm0gPSBmYWxzZTtcclxuICAgIGNvdW50UmVhZHk6IG51bWJlciA9IDA7XHJcbiAgICBoYXNDcnVkTGlzdCA9IHRydWU7XHJcbiAgICBjdXN0b21HZXREYXRhID0gZmFsc2U7XHJcbiAgICByZWFkeVRvVHJpbmhLeSA9IGZhbHNlO1xyXG4gICAgcGx1c1VybCA9ICcnO1xyXG4gICAgcm93RGF0YUN1cnJlbnQ6IGFueTtcclxuXHJcbiAgICBpc0NydWRMaXN0ID0gZmFsc2U7XHJcbiAgICBsb2FkaW5nVGltZW91dDtcclxuXHJcbiAgICBwcm90ZWN0ZWQgX25vdGlmaWVyU2VydmljZTogTm90aWZpZXJTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9jdXN0b21Sb3V0ZXJTZXJ2aWNlOiBDdXN0b21Sb3V0ZXJTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9saXN0SGVscGVyU2VydmljZTogTGlzdEhlbHBlclNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3RyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2V4cG9ydFNlcnZpY2U6IEV4cG9ydFNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3JvdXRlcjogUm91dGVyO1xyXG4gICAgcHJvdGVjdGVkIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2RhdGVQaXBlOiBEYXRlUGlwZTtcclxuICAgIHByb3RlY3RlZCBfY2Q6IENoYW5nZURldGVjdG9yUmVmO1xyXG4gICAgcHJvdGVjdGVkIF9lbnRpdHlNZXRhZGF0YVNlcnZpY2U6IEVudGl0eU1ldGFkYXRhU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfdXNlclNlcnZpY2U6IFVzZXJTZXJ2aWNlO1xyXG4gICAgcHJvdGVjdGVkIF9tYXN0ZXJEYXRhU2VydmljZTogTWFzdGVyRGF0YVNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2VudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2U6IEVudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2VudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2U6IEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX2VudGl0eVBlcm1pc3Npb25TZXJ2aWNlOiBFbnRpdHlQZXJtaXNzaW9uU2VydmljZTtcclxuICAgIHByb3RlY3RlZCBfd29ya2Zsb3dTZXR0aW5nU2VydmljZTogV29ya2Zsb3dTZXR0aW5nc1NlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3dvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2U6IFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2U7XHJcbiAgICBwcm90ZWN0ZWQgX3N0YXRlTWFjaGluZXNTZXJ2aWNlOiBTdGF0ZU1hY2hpbmVzU2VydmljZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBfaW5qZWN0b3I6IEluamVjdG9yXHJcbiAgICApIHtcclxuICAgICAgICBzdXBlcihfaW5qZWN0b3IpO1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcclxuICAgICAgICB0aGlzLl9yb3V0ZXIgPSB0aGlzLl9pbmplY3Rvci5nZXQoUm91dGVyKTtcclxuICAgICAgICB0aGlzLl9jdXN0b21Sb3V0ZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEN1c3RvbVJvdXRlclNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2xpc3RIZWxwZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KExpc3RIZWxwZXJTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENvbW1vblNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fZXhwb3J0U2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFeHBvcnRTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9jcnVkU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDcnVkU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fZGF0ZVBpcGUgPSB0aGlzLl9pbmplY3Rvci5nZXQoRGF0ZVBpcGUpO1xyXG4gICAgICAgIHRoaXMuX2NkID0gdGhpcy5faW5qZWN0b3IuZ2V0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICAgICAgICB0aGlzLl91c2VyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChVc2VyU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fbWFzdGVyRGF0YVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTWFzdGVyRGF0YVNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2VudGl0eVdvcmtmbG93U2V0dGluZ1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRW50aXR5V29ya2Zsb3dTZXR0aW5nU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fZW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9lbnRpdHlQZXJtaXNzaW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFbnRpdHlQZXJtaXNzaW9uU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fd29ya2Zsb3dTZXR0aW5nU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChXb3JrZmxvd1NldHRpbmdzU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fd29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChXb3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9zdGF0ZU1hY2hpbmVzU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChTdGF0ZU1hY2hpbmVzU2VydmljZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkluaXQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2xzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2xzID0gdGhpcy5zZXR0aW5nLmNvbHMuZmlsdGVyKHEgPT4gIXEucmVtb3ZlT25Jbml0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5tZXJnZUluZm9Ub0NvbHVtblNjaGVtYSgpO1xyXG4gICAgICAgIHRoaXMuZ2VuZXJhdGVGaWVsZFNlYXJjaFRleHQoKTtcclxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZG9Ob3RDaGVja0Jhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcodGhpcy5ub3RDb25maWdCYXNlU2VydmljZU1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5oaWRkZW5TZXR0aW5nV29ya2Zsb3cpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS51c2VXb3JrZmxvdyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldEtleVdvcmtmbG93U2V0dGluZygpO1xyXG4gICAgICAgICAgICB0aGlzLl9lbnRpdHlXb3JrZmxvd1NldHRpbmdTZXJ2aWNlLnJlZ2lzdGVyU2VydmljZShrZXksIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX2VudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UucmVnaXN0ZXJTZXJ2aWNlKGtleSwgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKTtcclxuICAgICAgICAgICAgdGhpcy5fZW50aXR5UGVybWlzc2lvblNlcnZpY2UucmVnaXN0ZXJTZXJ2aWNlKGtleSwgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKTtcclxuICAgICAgICAgICAgdGhpcy5fd29ya2Zsb3dTZXR0aW5nU2VydmljZS5yZWdpc3RlclNlcnZpY2Uoa2V5LCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoZWNrQWxsb3dUcmluaEt5ID0gdGhpcy5jaGVja0FsbG93VHJpbmhLeS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jaGVja0FsbG93VHJpbmhLeSA9IHRoaXMuY2hlY2tBbGxvd1RyaW5oS3k7XHJcbiAgICAgICAgdGhpcy5nZXRNZW51QnV0dG9ucyA9IHRoaXMuZ2V0TWVudUJ1dHRvbnMuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVBZnRlclZpZXdJbml0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcclxuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5sb2FkaW5nVGltZW91dCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBoYW5kbGVBZnRlclZpZXdJbml0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UgJiYgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnVzZVdvcmtmbG93KSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hlY2tIYXNXb3JrZmxvdygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNoZWNrSGFzRW5hYmxlV29ya2Zsb3dDb3JlU3RhdHVzKCk7XHJcbiAgICAgICAgdGhpcy5jb3VudFJlYWR5Kys7XHJcbiAgICAgICAgaWYgKHRoaXMuY291bnRSZWFkeSA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgY2hlY2tIYXNFbmFibGVXb3JrZmxvd0NvcmVTdGF0dXMoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb3JlU3RhdHVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbFBhcmVudCA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnd29ya2Zsb3dDb3JlU3RhdHVzJyxcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnVHLhuqFuZyB0aMOhaSB0csOsbmgga8O9JyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnd29ya2Zsb3dDb3JlU3RhdHVzJyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlUmVmRmllbGQ6ICd3b3JrZmxvd0NvcmVTdGF0dXMnLFxyXG4gICAgICAgICAgICAgICAgd2lkdGg6ICcxMjBweCcsXHJcbiAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBEYXRhU291cmNlV29ya2Zsb3dDb3JlU3RhdHVzLFxyXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGROZWVkR2V0UmVmLnVuc2hpZnQoY29sUGFyZW50KTtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSB7XHJcbiAgICAgICAgICAgICAgICAuLi5jb2xQYXJlbnQsXHJcbiAgICAgICAgICAgICAgICByYXdDb2x1bW46IGNvbFBhcmVudCxcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBjb2xQYXJlbnQuZGF0YVR5cGVSZWZGaWVsZCxcclxuICAgICAgICAgICAgICAgIGZpZWxkOiAnc3RyJyArIGNvbFBhcmVudC5maWVsZCxcclxuICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBjb2xQYXJlbnQuYWxsb3dGaWx0ZXIsXHJcbiAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb2x1bW5cclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29sUGFyZW50LnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2xQYXJlbnQsIGNoaWxkcmVuKTtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5mb3JtYXRDb2x1bW5zKFtjb2xQYXJlbnQsIGNoaWxkcmVuXSk7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuYnVpbGRGaWx0ZXJDb2x1bW4oW2NvbFBhcmVudF0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGNoZWNrSGFzV29ya2Zsb3coKSB7XHJcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmdldEtleVdvcmtmbG93U2V0dGluZygpO1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLl9lbnRpdHlXb3JrZmxvd1NldHRpbmdTZXJ2aWNlLmdldFNldHRpbmcoa2V5KTtcclxuICAgICAgICBpZiAoZGF0YSAhPSBudWxsICYmIGRhdGEuZGF0YSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBkYXRhLmRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy53b3JrZmxvd1NldHRpbmcgPSBzZXR0aW5nO1xyXG4gICAgICAgICAgICAvLyBM4bqleSB0aMO0bmcgdGluIHF1eeG7gW4gY+G7p2EgbmfGsOG7nWkgZMO5bmdcclxuICAgICAgICAgICAgY29uc3QgdXNlckRhdGEgPSBhd2FpdCB0aGlzLl91c2VyU2VydmljZS5nZXRJbmZvRm9yV29ya2Zsb3codGhpcy5fdXNlclNlcnZpY2UuZ2V0VXNlcklkQ29tYmluZSgpKTtcclxuICAgICAgICAgICAgaWYgKHVzZXJEYXRhLmRhdGEgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdM4buXaSBs4bqleSB0aMO0bmcgdGluIG5nxrDhu51pIGTDuW5nJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5hZHZhbmNlRGF0YS51c2VyRGF0YSA9IHVzZXJEYXRhLmRhdGE7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbFBhcmVudCA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiBXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6ICdlbnRpdHlXb3JrZmxvd1N0YXR1cycsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZVJlZkZpZWxkOiAnZW50aXR5V29ya2Zsb3dTdGF0dXMnLFxyXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0NvbHVtbixcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xUeXBlOiBDb250cm9sVHlwZS5kcm9wZG93bixcclxuICAgICAgICAgICAgICAgIGxhYmVsOiAnVHLhuqFuZyB0aMOhaScsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEyMHB4JyxcclxuICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IHNldHRpbmcuc3RhdHVzZXMubWFwKGl0ZW0gPT4gKHtcclxuICAgICAgICAgICAgICAgICAgICBpZDogaXRlbS5tYSxcclxuICAgICAgICAgICAgICAgICAgICB0ZW46IGl0ZW0udGVuXHJcbiAgICAgICAgICAgICAgICB9KSlcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZE5lZWRHZXRSZWYudW5zaGlmdChjb2xQYXJlbnQpO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEudXNlckRhdGEgPSB0aGlzLm1vZGVsLmFkdmFuY2VEYXRhLnVzZXJEYXRhO1xyXG4gICAgICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHtcclxuICAgICAgICAgICAgICAgIC4uLmNvbFBhcmVudCxcclxuICAgICAgICAgICAgICAgIHJhd0NvbHVtbjogY29sUGFyZW50LFxyXG4gICAgICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IGNvbFBhcmVudC5kYXRhVHlwZVJlZkZpZWxkLFxyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdzdHInICsgY29sUGFyZW50LmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGNvbFBhcmVudC5hbGxvd0ZpbHRlcixcclxuICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogIXRoaXMuc2V0dGluZy5oaWRkZW5Xb3JrZmxvd0NvbHVtblxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb2xQYXJlbnQudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29scy5wdXNoKGNvbFBhcmVudCwgY2hpbGRyZW4pO1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LmZvcm1hdENvbHVtbnMoW2NvbFBhcmVudCwgY2hpbGRyZW5dKTtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5idWlsZEZpbHRlckNvbHVtbihbY29sUGFyZW50XSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldERhdGFTb3VyY2VUcmFuZ1RoYWlXb3JrZmxvdygpIHtcclxuICAgICAgICByZXR1cm4gW107XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRXb3JrZmxvd0RldGFpbEJ5V29ya2Zsb3dTZXR0aW5nKGl0ZW1Xb3JrZmxvd1NldHRpbmc6IGFueSkge1xyXG4gICAgICAgIGlmIChpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZXMgJiYgIUFycmF5LmlzQXJyYXkoaXRlbVdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGVzKSkge1xyXG4gICAgICAgICAgICBpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZXMgPSBpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZXMuc3BsaXQoJywnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dzID0gKGF3YWl0IHRoaXMuX3N0YXRlTWFjaGluZXNTZXJ2aWNlLmdldERhdGFEcm9wZG93bkJ5RmlsdGVyKFxyXG4gICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignY29kZScsIE9wZXJhdG9yLmluLCBpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZXMpXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIG5ldyBEcm9wZG93bk9wdGlvbnMoe1xyXG4gICAgICAgICAgICAgICAgdmFsdWVGaWVsZDogJ2NvZGUnLFxyXG4gICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkOiAndGl0bGUnLFxyXG4gICAgICAgICAgICAgICAgZmllbGRQbHVzOiAnZGF0YSdcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApKTtcclxuICAgICAgICB3b3JrZmxvd3MuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaXRlbS5kYXRhID0gSlNPTi5wYXJzZShpdGVtLmRhdGEpO1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0ZU1hY2hpbmVEYXRhID0gaXRlbS5kYXRhO1xyXG4gICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnMgPSB7fTtcclxuICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5tYWNoaW5lcy5mb3JFYWNoKG1hY2hpbmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgc3RhdGVNYWNoaW5lRGF0YS5hY3Rpb25zW21hY2hpbmUuY29kZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgIHN0YXRlTWFjaGluZURhdGEuY29ubmVjdGlvbnMuZm9yRWFjaChjb25uID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29ubi5zb3VyY2UgPT0gbWFjaGluZS5pZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZU1hY2hpbmVEYXRhLmFjdGlvbnNbbWFjaGluZS5jb2RlXS5wdXNoKGNvbm4pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBpdGVtV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cyA9IHdvcmtmbG93cztcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXBwZW5kQ29sV29ya2Zsb3dTdGF0dXMod29ya2Zsb3dzOiBXZkl0ZW1bXSkge1xyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBbe1xyXG4gICAgICAgICAgICBpZDogbnVsbCxcclxuICAgICAgICAgICAgcmF3VGVuOiAnQ2jGsGEgYuG6r3QgxJHhuqd1JyxcclxuICAgICAgICAgICAgdGVuOiAnQ2jGsGEgYuG6r3QgxJHhuqd1JyxcclxuICAgICAgICAgICAgbWFMb3dlcjogJycsXHJcbiAgICAgICAgICAgIHRlbkxvd2VyOiAnY2jGsGEgYuG6r3QgxJHhuqd1J1xyXG4gICAgICAgIH1dO1xyXG4gICAgICAgIGlmICh3b3JrZmxvd3MgJiYgd29ya2Zsb3dzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICB3b3JrZmxvd3MuZm9yRWFjaCh3b3JrZmxvdyA9PiB7XHJcbiAgICAgICAgICAgICAgICB3b3JrZmxvdy5kYXRhLm1hY2hpbmVzLmZvckVhY2gobWFjaGluZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbVN0YXR1cyA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IG1hY2hpbmUuY29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmF3VGVuOiBtYWNoaW5lLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbjogbWFjaGluZS5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtYUxvd2VyOiBtYWNoaW5lLmNvZGUudG9Mb3dlckNhc2UoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVuTG93ZXI6IG1hY2hpbmUubmFtZS50b0xvd2VyQ2FzZSgpXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGFTb3VyY2Uuc29tZSh4ID0+IHgudGVuTG93ZXIgPT0gaXRlbVN0YXR1cy50ZW5Mb3dlciAmJiB4Lm1hTG93ZXIgPT0gaXRlbVN0YXR1cy5tYUxvd2VyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlLnB1c2goaXRlbVN0YXR1cyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1TYW1lTmFtZSA9IGRhdGFTb3VyY2UuZmluZChxID0+IHEudGVuTG93ZXIgPT0gaXRlbVN0YXR1cy50ZW5Mb3dlciAmJiBxLm1hTG93ZXIgIT0gaXRlbVN0YXR1cy5tYUxvd2VyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1TYW1lTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNhbWVOYW1lLnRlbiA9IGAke2l0ZW1TYW1lTmFtZS5yYXdUZW59ICgke2l0ZW1TYW1lTmFtZS5pZH0pYDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TdGF0dXMudGVuID0gYCR7aXRlbVN0YXR1cy5yYXdUZW59ICgke2l0ZW1TdGF0dXMuaWR9KWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGNvbFBhcmVudCA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgZmllbGQ6IFdvcmtmbG93RmllbGRTdGF0ZUNvZGUsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiAndHJhbmdUaGFpVjUnLFxyXG4gICAgICAgICAgICBkYXRhVHlwZVJlZkZpZWxkOiAndHJhbmdUaGFpVjUnLFxyXG4gICAgICAgICAgICB2aXNpYmxlOiAhdGhpcy5zZXR0aW5nLmhpZGRlbldvcmtmbG93Q29sdW1uLFxyXG4gICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgIGxhYmVsOiAnVHLhuqFuZyB0aMOhaScsXHJcbiAgICAgICAgICAgIHdpZHRoOiAnMTIwcHgnLFxyXG4gICAgICAgICAgICB0ZXh0QWxpZ246IFRleHRBbGlnbi5DZW50ZXIsXHJcbiAgICAgICAgICAgIGlzVHJlZTogdHJ1ZSxcclxuICAgICAgICAgICAgZmllbGRUcmVlOiAncGFyZW50SWQnLFxyXG4gICAgICAgICAgICBkYXRhU291cmNlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkTmVlZEdldFJlZi51bnNoaWZ0KGNvbFBhcmVudCk7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLnVzZXJEYXRhID0gdGhpcy5tb2RlbC5hZHZhbmNlRGF0YS51c2VyRGF0YTtcclxuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHtcclxuICAgICAgICAgICAgLi4uY29sUGFyZW50LFxyXG4gICAgICAgICAgICByYXdDb2x1bW46IGNvbFBhcmVudCxcclxuICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxyXG4gICAgICAgICAgICBkYXRhVHlwZTogY29sUGFyZW50LmRhdGFUeXBlUmVmRmllbGQsXHJcbiAgICAgICAgICAgIGZpZWxkOiAnc3RyJyArIGNvbFBhcmVudC5maWVsZCxcclxuICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGNvbFBhcmVudC5hbGxvd0ZpbHRlcixcclxuICAgICAgICAgICAgc29ydDogZmFsc2UsXHJcbiAgICAgICAgICAgIHZpc2libGU6ICF0aGlzLnNldHRpbmcuaGlkZGVuV29ya2Zsb3dDb2x1bW5cclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbFBhcmVudC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2xQYXJlbnQsIGNoaWxkcmVuKTtcclxuICAgICAgICB0aGlzLmNydWRMaXN0LmZvcm1hdENvbHVtbnMoW2NvbFBhcmVudCwgY2hpbGRyZW5dKTtcclxuICAgICAgICB0aGlzLmNydWRMaXN0LmJ1aWxkRmlsdGVyQ29sdW1uKFtjb2xQYXJlbnRdKTtcclxuXHJcbiAgICAgICAgY29uc3QgdXNlckN1cnJlbnQgPSB0aGlzLl91c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgICAgIGlmICh1c2VyQ3VycmVudC51c2VyTmFtZSA9PSAnYWRtaW4nKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbEZvckFkbWluID0gbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6ICdfX3ZpZXdIaXN0b3J5JyxcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnX192aWV3SGlzdG9yeScsXHJcbiAgICAgICAgICAgICAgICBsYWJlbDogJycsXHJcbiAgICAgICAgICAgICAgICB3aWR0aDogJzEwMHB4JyxcclxuICAgICAgICAgICAgICAgIHRleHRBbGlnbjogVGV4dEFsaWduLkNlbnRlclxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMucHVzaChjb2xGb3JBZG1pbik7XHJcbiAgICAgICAgICAgIHRoaXMuY3J1ZExpc3QuZm9ybWF0Q29sdW1ucyhbY29sRm9yQWRtaW5dKTtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5idWlsZEZpbHRlckNvbHVtbihbY29sRm9yQWRtaW5dKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2hlY2tBbGxvd1RyaW5oS3kocm93RGF0YSkge1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1lbnVCdXR0b25zKHJvd0RhdGEpIHtcclxuICAgICAgICB0aGlzLnJvd0RhdGFDdXJyZW50ID0gcm93RGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBfYWRkKGV2dCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdFZhbGlkYXRlID0gYXdhaXQgdGhpcy52YWxpZGF0ZUFkZCgpO1xyXG4gICAgICAgIGlmICghcmVzdWx0VmFsaWRhdGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5kYXRhID0ge307XHJcbiAgICAgICAgdGhpcy5mb3JtTW9kZWwuZm9ybVN0YXRlID0gRm9ybVN0YXRlLkFERDtcclxuICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZUFkZCgpO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5wb3B1cEhlYWRlciA9IGBUaMOqbSBt4bubaSAke3RoaXMuc2V0dGluZy5vYmplY3ROYW1lfWA7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLm1hc2tDbGFzcyA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdmFsaWRhdGVBZGQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYmVmb3JlQWRkKCkge1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIF92aWV3KHJvd0RhdGEpIHtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuVklFVztcclxuICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZVZpZXcoKTtcclxuICAgICAgICB0aGlzLnNldHRpbmcucG9wdXBIZWFkZXIgPSBgWGVtICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9YDtcclxuICAgICAgICB0aGlzLnNldHRpbmcubWFza0NsYXNzID0gbnVsbDtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5kYXRhID0gdGhpcy5jbG9uZURhdGEocm93RGF0YSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5tb2RpZnlWaWV3TW9kZWwocm93RGF0YSk7XHJcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYmVmb3JlVmlldygpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb2RpZnlWaWV3TW9kZWwocm93RGF0YTogYW55KSB7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX2VkaXQocm93RGF0YSwgc2NvcGVEYXRhRWRpdDogYW55ID0ge30pIHtcclxuICAgICAgICBjb25zdCBmbGFzaFNob3cgPSByb3dEYXRhW0tleUZsYXNoU2hvd107XHJcbiAgICAgICAgZGVsZXRlIHJvd0RhdGFbS2V5Rmxhc2hTaG93XTtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuRURJVDtcclxuICAgICAgICBhd2FpdCB0aGlzLmJlZm9yZUVkaXQoKTtcclxuICAgICAgICB0aGlzLnNldHRpbmcucG9wdXBIZWFkZXIgPSBgQ+G6rXAgbmjhuq10ICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9YDtcclxuICAgICAgICB0aGlzLnNldHRpbmcubWFza0NsYXNzID0gZmxhc2hTaG93ID8gJ2hpZGUnIDogbnVsbDtcclxuICAgICAgICB0aGlzLnNjb3BlRGF0YUVkaXQgPSBzY29wZURhdGFFZGl0O1xyXG4gICAgICAgIHRoaXMuZm9ybU1vZGVsLmRhdGEgPSB0aGlzLmNsb25lRGF0YShyb3dEYXRhKTtcclxuICAgICAgICBhd2FpdCB0aGlzLm1vZGlmeUVkaXRNb2RlbChyb3dEYXRhKTtcclxuICAgICAgICB0aGlzLmZvcm1Nb2RlbC5kYXRhW0tleUZsYXNoU2hvd10gPSBmbGFzaFNob3c7XHJcbiAgICAgICAgdGhpcy5zaG93RGV0YWlsRm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYmVmb3JlRWRpdCgpIHtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBtb2RpZnlFZGl0TW9kZWwocm93RGF0YTogYW55KSB7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjbG9uZURhdGEocm93RGF0YSkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGlkOiByb3dEYXRhW3RoaXMuc2V0dGluZy5lbnRpdHlLZXldXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9taXNlRGVsZXRlSXRlbShyb3dEYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5kZWxldGUocm93RGF0YS5pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2RlbGV0ZShyb3dEYXRhKSB7XHJcbiAgICAgICAgaWYgKHJvd0RhdGEuX19kaXNhYmxlRGVsZXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVDb25maXJtKCkudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcnMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb21pc2VEZWxldGVJdGVtKHJvd0RhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zaG93VmVyc2lvbkJ1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5SRUxPQURfREFUQV9WRVJTSU9OLCB7fSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVwb25zZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YUVycm9yKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQcm9taXNlRGVsZXRlSXRlbXMoaXRlbXMpIHtcclxuICAgICAgICBjb25zdCBpZHMgPSBpdGVtcy5tYXAoeCA9PiB4LmlkKS5qb2luKCcsJyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5kZWxldGVNYW55KGlkcyk7XHJcbiAgICB9XHJcblxyXG4gICAgX2RlbGV0ZU11bHRpcGxlKGl0ZW1zKSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dEZWxldGVDb25maXJtKCkudGhlbihycyA9PiB7XHJcbiAgICAgICAgICAgIGlmICghcnMpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdldFByb21pc2VEZWxldGVJdGVtcyhpdGVtcykudGhlbihyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLnN1Y2Nlc3MpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlclByb2Nlc3NEYXRhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93RGVsZXRlRGF0YVN1Y2Nlc3MoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZ0J5UmVwb25zZShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbkJlZm9yZUNhbmNlbCgpIHtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZVNhdmVkKCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0RldGFpbEZvcm0gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLl90cmlnZ2VyUHJvY2Vzc0RhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBfaGFuZGxlQ2FuY2VsKCRldmVudCkge1xyXG4gICAgICAgIHRoaXMub25CZWZvcmVDYW5jZWwoKTtcclxuICAgICAgICB0aGlzLnNob3dEZXRhaWxGb3JtID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRFbnRpdHlNZXRhZGF0YSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNldHRpbmcuZW50aXR5TWV0YWRhdGFTZXR0aW5nLmRhdGEgPSB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UuZ2V0V2YxU2V0dGluZygpO1xyXG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5zZXR0aW5nLmVudGl0eU1ldGFkYXRhU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChFbnRpdHlNZXRhZGF0YVNlcnZpY2UpO1xyXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlID0gdGhpcy5zZXR0aW5nLmVudGl0eU1ldGFkYXRhU2VydmljZTtcclxuICAgICAgICAgICAgLy8gICAgIGF3YWl0IHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZS5sb2FkKHRoaXMuX2Jhc2VTZXJ2aWNlLCB0aGlzLmNvbnRleHQsIHRydWUpOyAgLy8gZm9yY2UgbG9hZCDEkeG7gyDEkeG7jWMgdOG7qyBjc2RsXHJcbiAgICAgICAgICAgIC8vICAgICB0aGlzLnNldHRpbmcuZW50aXR5TWV0YWRhdGFTZXR0aW5nLmRhdGEgPSB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UuZ2V0V2YxU2V0dGluZygpO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1BsZWFzZSBpbmNsdWRlIEVudGl0eU1ldGFkYXRhU2VydmljZSBpbiBwcm92aWRlciBvZiBjb21wb25lbnQnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVsb2FkKCkge1xyXG4gICAgICAgIHRoaXMuY3J1ZExpc3QucmVsb2FkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgX3RyaWdnZXJQcm9jZXNzRGF0YShncmlkSW5mbz86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzRGF0YShncmlkSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBwcm9jZXNzRGF0YShncmlkSW5mbz86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5yZWFkeVRvVHJpbmhLeSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0NydWRMaXN0KSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jcnVkTGlzdCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZ3JpZEluZm8pIHtcclxuICAgICAgICAgICAgICAgIGdyaWRJbmZvID0gdGhpcy5jcnVkTGlzdC5nZXRHcmlkSW5mbygpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIWdyaWRJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbyh7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFnZUluZm86IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZTogMSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IDk5OVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgc29ydHM6IFtdXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmdldERhdGEoZ3JpZEluZm8pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvOiBHcmlkSW5mbyk6IFByb21pc2U8Ym9vbGVhbiB8IHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGdldERhdGEoZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSAmJiB0aGlzLm1vZGVsLnJlYWR5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX21hcmtMb2FkaW5nKCk7XHJcbiAgICAgICAgICAgIGdyaWRJbmZvLm1vZGlmeUZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBmaWx0ZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlci52YWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBoYXNOdWxsVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN0VmFsdWVzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgSlNPTi5wYXJzZShmaWx0ZXIudmFsdWUpLmZvckVhY2godmFsdWUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc051bGxWYWx1ZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN0VmFsdWVzLnB1c2godmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc051bGxWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdFZhbHVlcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm9wZXJhdG9yID0gT3BlcmF0b3IuaXNOdWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5sb2dpYyA9ICdvcic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWVsZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci52YWx1ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5vcGVyYXRvciA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlci5maWx0ZXJzID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoV29ya2Zsb3dGaWVsZFN0YXRlQ29kZSwgT3BlcmF0b3IuaXNOdWxsLCAnJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcihXb3JrZmxvd0ZpZWxkU3RhdGVDb2RlLCBPcGVyYXRvci5pbiwgcmVzdFZhbHVlcylcclxuICAgICAgICAgICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHRNb2RpZnkgPSBhd2FpdCB0aGlzLm1vZGlmeUdyaWRJbmZvKGdyaWRJbmZvKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdE1vZGlmeSA9PT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC50b3RhbCA9IDA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5cyA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fdW5tYXJrTG9hZGluZygpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuZG9HZXRSZXF1ZXN0KGdyaWRJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgX21hcmtMb2FkaW5nKCkge1xyXG4gICAgICAgIHRoaXMubW9kZWwubG9hZGluZyA9IHRydWU7XHJcbiAgICAgICAgaWYgKHRoaXMuY3J1ZExpc3QpIHtcclxuICAgICAgICAgICAgdGhpcy5jcnVkTGlzdC5hZGp1c3RQb3NpdGlvbkxvYWRpbmdNYXNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnTcOheSBjaOG7pyBwaOG6o24gaOG7k2kgcXXDoSBsw6J1LCB2dWkgbMOybmcga2nhu4NtIHRyYSBs4bqhaSDEkcaw4budbmcgdHJ1eeG7gW4gbeG6oW5nIScpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9LCAyMDAwMCk7XHJcbiAgICB9XHJcblxyXG4gICAgX2hhbmRsZVJlbG9hZGVkKGV2dCA9IG51bGwpIHtcclxuICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XHJcbiAgICAgICAgdGhpcy5hZnRlclJlbG9hZGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWZ0ZXJSZWxvYWRlZCgpIHsgfVxyXG5cclxuICAgIF91bm1hcmtMb2FkaW5nKCkge1xyXG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmxvYWRpbmdUaW1lb3V0KTtcclxuICAgICAgICB0aGlzLm1vZGVsLmxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGZpcmVEYXRhTG9hZGVkKHN1Y2Nlc3M6IGJvb2xlYW4gPSB0cnVlKSB7XHJcbiAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgdGhpcy5jcnVkTGlzdCkge1xyXG4gICAgICAgICAgICB0aGlzLmNydWRMaXN0LnByb2Nlc3NCYXNlRGF0YSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl91bm1hcmtMb2FkaW5nKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5nZXRCeUdyaWRSZXF1ZXN0KGdyaWRJbmZvLCB0aGlzLnBsdXNVcmwpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldERhdGFDdXN0b20oZ3JpZEluZm86IEdyaWRJbmZvKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZG9HZXRSZXF1ZXN0KGdyaWRJbmZvOiBHcmlkSW5mbykge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXN0b21HZXREYXRhKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0UHJvbWlzZUdldERhdGEoZ3JpZEluZm8pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oYXN5bmMgcmVzcG9uc2UgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcG9uc2Uuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzR2V0RGF0YShyZXNwb25zZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVEYXRhTG9hZGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcocmVzcG9uc2UubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpcmVEYXRhTG9hZGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sIGVycm9yID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dIdHRwVW5rbm93RXJyb3IoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maXJlRGF0YUxvYWRlZChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YUN1c3RvbShncmlkSW5mbyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgcHJvY2Vzc0dldERhdGEocmVzcG9uc2U6IFJlc3BvbnNlUmVzdWx0KSB7XHJcbiAgICAgICAgdGhpcy5tb2RlbC5leHBhbmRlZFJvd0tleXMgPSB7fTtcclxuICAgICAgICB0aGlzLm1vZGVsLnRvdGFsID0gcmVzcG9uc2UudG90YWxSZWNvcmQ7XHJcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuYmVmb3JlUmVuZGVyRGF0YVNvdXJjZShyZXNwb25zZS5kYXRhKTtcclxuICAgICAgICAgICAgcmVzcG9uc2UuZGF0YS5mb3JFYWNoKHJvd0l0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5c1tyb3dJdGVtW3RoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGRdXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NGb3JlYWNoSXRlbUFmdGVyR2V0RGF0YShyb3dJdGVtKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSByZXNwb25zZS5kYXRhO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLndvcmtmbG93U2V0dGluZykge1xyXG4gICAgICAgICAgICAvLyBM4bqleSByYSBuaOG7r25nIHRy4bqhbmcgdGjDoWkgbcOgIGLhuqNuIGdoaSBraMO0bmcgxJHGsOG7o2Mgc+G7rWFcclxuICAgICAgICAgICAgY29uc3Qgc3RhdHVzTm90QWxsb3dFZGl0cyA9IHRoaXMuc2V0dGluZy53b3JrZmxvd1NldHRpbmcuc3RhdHVzZXMuZmlsdGVyKHAgPT4gIXAub3B0aW9ucy5jaG9QaGVwU3VhKS5tYXAoaXRlbSA9PiBpdGVtLnRyYW5nVGhhaUNvbnRhaW5lci5tYSk7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uX2luZGV4ID0gKHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlIC0gMSkgKiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemUgKyAxICsgaW5kZXg7XHJcbiAgICAgICAgICAgICAgICAvLyBpdGVtLmN1cnJlbnRTdGF0ZUNvZGUgPSBpdGVtLmN1cnJlbnRTdGF0ZUNvZGU7XHJcbiAgICAgICAgICAgICAgICBpdGVtLl9fZGlzYWJsZUVkaXQgPSBzdGF0dXNOb3RBbGxvd0VkaXRzLmluZGV4T2YoaXRlbS5jdXJyZW50U3RhdGVDb2RlKSA+IC0xO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIGl0ZW0uX2luZGV4ID0gKHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlIC0gMSkgKiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemUgKyAxICsgaW5kZXg7XHJcbiAgICAgICAgICAgICAgICAvLyBpdGVtLmN1cnJlbnRTdGF0ZUNvZGUgPSBpdGVtLmN1cnJlbnRTdGF0ZUNvZGU7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcclxuXHJcbiAgICAgICAgY29uc3QgcmVzZXRTZWxlY3RlZEl0ZW1zID0gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zICYmIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGg7XHJcbiAgICAgICAgaWYgKHJlc2V0U2VsZWN0ZWRJdGVtcykge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoID0gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMuYWZ0ZXJHZXREYXRhKCk7XHJcblxyXG4gICAgICAgIHRoaXMuX2dldFJlZkRhdGFEcm9wZG93bih0aGlzLm1vZGVsLmRhdGFTb3VyY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGJlZm9yZVJlbmRlckRhdGFTb3VyY2UoZGF0YXNvdXJjZTogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICByZXR1cm4gZGF0YXNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHByb2Nlc3NGb3JlYWNoSXRlbUFmdGVyR2V0RGF0YSh4OiBhbnkpIHtcclxuICAgICAgICAvLyBwcm9jZXNzIHdvcmtmbG93XHJcbiAgICAgICAgaWYgKHRoaXMuX2VudGl0eU1ldGFkYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZW50aXR5TWV0YWRhdGFTZXJ2aWNlLmlzV2YxKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSB0aGlzLl9lbnRpdHlNZXRhZGF0YVNlcnZpY2UuZ2V0V2YxU2V0dGluZygpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFVzZXJJZCA9IHRoaXMuX3VzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCkudXNlcklkLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoeFsnbWV0YWRhdGFTdGF0dXMnXSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhbJ2NyZWF0ZWRCeSddICE9IGN1cnJlbnRVc2VySWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeC5fX2Rpc2FibGVFZGl0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgeC5fX2Rpc2FibGVEZWxldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHhbJ21ldGFkYXRhU3RhdHVzJ10gPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50ID0geC5jb3VudE9mQXBwcm92ZSA/IHguY291bnRPZkFwcHJvdmUgKyAxIDogMTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSAnb2JqZWN0SXNVc2VyJyArIGNvdW50O1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFVELTExOTggLSBOYW1OSCAtIFRyxrDhu51uZyBo4bujcCBzZXR0aW5nIGNoxrBhIGPDsyBk4buvIGxp4buHdSB0aMOsIGLhu4sgZXhjZXB0aW9uLCBkbyBjw6FjIGLhuqNuIGdoaSB0aMOqbSBt4bubaSB0csaw4bubYyBraGkgYuG6rXQgcXV5IHRyw6xuaCB0aMOsIGtvIGPDsyBk4buvIGxp4buHdSBuw6B5XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmdba2V5XSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZ1trZXldLnNvbWUoeCA9PiB4ID09IGN1cnJlbnRVc2VySWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Ll9fZGlzYWJsZUVkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeC5fX2Rpc2FibGVEZWxldGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIEVORCBVRC0xMTk4XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh4WydtZXRhZGF0YVN0YXR1cyddID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICB4Ll9fZGlzYWJsZUVkaXQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHguX19kaXNhYmxlRGVsZXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhZnRlckdldERhdGEoKSB7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2dldFJlZkRhdGFEcm9wZG93bihkYXRhU291cmNlKSB7XHJcbiAgICAgICAgaWYgKGRhdGFTb3VyY2UgJiYgZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGROZWVkR2V0UmVmKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJQcm9taXNlRG9udE5lZWRXYWl0ID0gW107XHJcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJTY2hlbWFEb250TmVlZFdhaXQgPSBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2NoZW1hIG9mIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZE5lZWRHZXRSZWYpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZCA9IHNjaGVtYS5maWVsZDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hW0tleUZpZWxkR2V0UmVmVHlwZV0gPT0gRW51bUdldFJlZlR5cGUuU0VSVkVSKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZm9yY2VHZXREYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAodGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uICYmIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5yYXdDb2x1bW4gJiYgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnJhd0NvbHVtbi5maWVsZCA9PSBzY2hlbWEuZmllbGQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLnNldHRpbmcuY29scy5zb21lKGl0ZW0gPT4gaXRlbS5maWVsZCA9PSAnc3RyJyArIGZpZWxkICYmIGl0ZW0udmlzaWJsZSAhPSBmYWxzZSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnJWYWx1ZSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50VmFsdWUgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZHMgPSBjdXJyZW50VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoaWRzKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkcyA9IGlkcy5zcGxpdCgnLCcpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRzLmZvckVhY2goaWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYXJyVmFsdWUuc29tZShwID0+IHAgPT0gaWQpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclZhbHVlLnB1c2goaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFhcnJWYWx1ZS5zb21lKHAgPT4gcCA9PSBjdXJyZW50VmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJWYWx1ZS5wdXNoKGN1cnJlbnRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcnJWYWx1ZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb21pc2UgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuYmFzZVNlcnZpY2UgaW5zdGFuY2VvZiBNYXN0ZXJEYXRhU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9taXNlID0gc2NoZW1hLmJhc2VTZXJ2aWNlLmdldERhdGFEcm9wZG93bihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYS5ncm91cENvZGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgYXJyVmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwgdGhpcy5jcmVhdGVEcm9wZG93bk9wdGlvbnMoc2NoZW1hKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gW3RoaXMubmV3RmlsdGVyKHNjaGVtYS52YWx1ZUZpZWxkLCBPcGVyYXRvci5pbiwgYXJyVmFsdWUpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tb2RpZnlGaWx0ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjaGVtYS5tb2RpZnlGaWx0ZXIoZmlsdGVycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9IHNjaGVtYS5iYXNlU2VydmljZS5nZXREYXRhRHJvcGRvd25CeUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZURyb3Bkb3duT3B0aW9ucyhzY2hlbWEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEub3JkZXIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBwcm9taXNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlLCBzY2hlbWEsIHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJQcm9taXNlRG9udE5lZWRXYWl0LnB1c2gocHJvbWlzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyclNjaGVtYURvbnROZWVkV2FpdC5wdXNoKHNjaGVtYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY0dldExhYmVsID0gaXRlbSA9PiBpdGVtW3NjaGVtYS5kaXNwbGF5RmllbGRdIHx8IGl0ZW1bJ2xhYmVsJ107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZnVuY0dldExhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBzY2hlbWEuZnVuY0dldExhYmVsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2UuZm9yRWFjaChpdGVtRGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZWZJdGVtID0gc2NoZW1hLmRhdGFTb3VyY2UuZmluZChpID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBpdGVtRGF0YVtmaWVsZF0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRMYWJlbChyZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGFyclByb21pc2VEb250TmVlZFdhaXQubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFyclJlcyA9IGF3YWl0IFByb21pc2UuYWxsKGFyclByb21pc2VEb250TmVlZFdhaXQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGFyclNjaGVtYURvbnROZWVkV2FpdC5mb3JFYWNoKChzY2hlbWEsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVyZ2VSZWZEYXRhVG9EYXRhc291cmNlKGRhdGFTb3VyY2UsIHNjaGVtYSwgYXJyUmVzW2luZGV4XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFmdGVyR2V0UmVmRGF0YURyb3Bkb3duKG51bGwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWFkeVRvVHJpbmhLeSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlYWR5VG9UcmluaEt5ID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lcmdlUmVmRGF0YVRvRGF0YXNvdXJjZShkYXRhU291cmNlOiBhbnlbXSwgc2NoZW1hOiBDb2x1bW5TY2hlbWFCYXNlLCBkYXRhOiBhbnlbXSkge1xyXG4gICAgICAgIGRhdGEgPz89IFtdO1xyXG4gICAgICAgIGNvbnN0IGZpZWxkID0gc2NoZW1hLmZpZWxkO1xyXG4gICAgICAgIGxldCBmdW5jR2V0TGFiZWwgPSBpdGVtID0+IGl0ZW1bc2NoZW1hLmRpc3BsYXlGaWVsZF0gfHwgaXRlbVsnbGFiZWwnXTtcclxuICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbCkge1xyXG4gICAgICAgICAgICBmdW5jR2V0TGFiZWwgPSBzY2hlbWEuZnVuY0dldExhYmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgZnVuY1NldFZhbHVlUm93ID0gKHJvd0l0ZW0sIGRhdGEpID0+IHsgfTtcclxuICAgICAgICBsZXQgZnVuY0dldFJlZkRhdGFSb3cgPSAocmVmSXRlbXMpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZkl0ZW1zLm1hcChpdGVtID0+IGZ1bmNHZXRMYWJlbChpdGVtKSkuam9pbihgJHtzY2hlbWEuc2VwYXJhdG9yfSBgKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY1NldFZhbHVlUm93KSB7XHJcbiAgICAgICAgICAgIGZ1bmNTZXRWYWx1ZVJvdyA9IHNjaGVtYS5mdW5jU2V0VmFsdWVSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3cpIHtcclxuICAgICAgICAgICAgZnVuY0dldFJlZkRhdGFSb3cgPSBzY2hlbWEuZnVuY0dldFJlZkRhdGFSb3c7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtRGF0YVtmaWVsZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZHMgPSBpdGVtRGF0YVtmaWVsZF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlkcykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWRzID0gaWRzLnNwbGl0KCcsJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW1zID0gZGF0YS5maWx0ZXIoaSA9PiBpZHMuc29tZShxID0+IHNjaGVtYS5mdW5jQ29tcGFyZShpLCBxKSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZWZJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhWydzdHInICsgZmllbGRdID0gZnVuY0dldFJlZkRhdGFSb3cocmVmSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmdW5jU2V0VmFsdWVSb3coaXRlbURhdGEsIHJlZkl0ZW1zKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtRGF0YVtmaWVsZF0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlZkl0ZW0gPSBkYXRhLmZpbmQoaSA9PiBzY2hlbWEuZnVuY0NvbXBhcmUoaSwgaXRlbURhdGFbZmllbGRdKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlZkl0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YVsnc3RyJyArIGZpZWxkXSA9IGZ1bmNHZXRMYWJlbChyZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZnVuY1NldFZhbHVlUm93KGl0ZW1EYXRhLCByZWZJdGVtKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5hZnRlckdldFJlZkRhdGFEcm9wZG93bihmaWVsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjcmVhdGVEcm9wZG93bk9wdGlvbnMoc2NoZW1hOiBDb2x1bW5TY2hlbWFCYXNlKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBEcm9wZG93bk9wdGlvbnMoe1xyXG4gICAgICAgICAgICBkaXNwbGF5RmllbGQ6IHNjaGVtYS5kaXNwbGF5RmllbGQsXHJcbiAgICAgICAgICAgIHZhbHVlRmllbGQ6IHNjaGVtYS52YWx1ZUZpZWxkLFxyXG4gICAgICAgICAgICBmaWVsZFBsdXM6IHNjaGVtYS5maWVsZFBsdXMsXHJcbiAgICAgICAgICAgIGZpZWxkVHJlZTogc2NoZW1hLmZpZWxkVHJlZSxcclxuICAgICAgICAgICAgZmllbGRQYXJlbnRUcmVlSXRlbTogc2NoZW1hLmZpZWxkUGFyZW50VHJlZUl0ZW0sXHJcbiAgICAgICAgICAgIGZ1bmNHZXRMYWJlbDogc2NoZW1hLmZ1bmNHZXRMYWJlbCxcclxuICAgICAgICAgICAgc29ydEZpZWxkOiBzY2hlbWEuc29ydEZpZWxkLFxyXG4gICAgICAgICAgICBzb3J0RGlyOiBzY2hlbWEuc29ydERpcixcclxuICAgICAgICAgICAgY2FsbGJhY2tEYXRhRmluaXNoOiBzY2hlbWEuY2FsbGJhY2tEYXRhRmluaXNoXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWZ0ZXJHZXRSZWZEYXRhRHJvcGRvd24oZmllbGQ6IHN0cmluZykge1xyXG5cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIG1lcmdlSW5mb1RvQ29sdW1uU2NoZW1hKCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29sdW1uTW9kZWxTY2hlbWEgPSB0aGlzLnNldHRpbmcubW9kZWxTY2hlbWFzLmZpbmQocCA9PiBwLmZpZWxkID09IGNvbC5maWVsZCk7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW5Nb2RlbFNjaGVtYSkge1xyXG4gICAgICAgICAgICAgICAgY29sLmxhYmVsID0gY29sdW1uTW9kZWxTY2hlbWEubmFtZTtcclxuICAgICAgICAgICAgICAgIGNvbC5mdWxsTGFiZWwgPSBjb2x1bW5Nb2RlbFNjaGVtYS5mdWxsTmFtZTtcclxuICAgICAgICAgICAgICAgIGlmICghY29sLmRhdGFUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sLmRhdGFUeXBlID0gdGhpcy5nZXREYXRhVHlwZShjb2x1bW5Nb2RlbFNjaGVtYS5kYXRhVHlwZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldERhdGFUeXBlKHR5cGU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0eXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2VuZXJhdGVGaWVsZFNlYXJjaFRleHQoKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29sLmZ1bGxUZXh0U2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0LnB1c2goY29sLmZpZWxkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0Lmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgZmlsdGVycyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGRTZWFyY2hUZXh0LmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICAgICAgICAgICAgZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoeyBmaWVsZCwgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sIHNvdXJjZUZpZWxkOiAnX2snIH0pKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmZpbHRlclRlbXBsYXRlQWR2cykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpbHRlclRlbXBsYXRlQWR2cy5zcGxpY2UoMCwgMCwgbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9naWM6ICdvcicsXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyc1xyXG4gICAgICAgICAgICAgICAgfSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgdmFsaWRhdGVQZXJtaXNzaW9uKHJvd0RhdGEpIHtcclxuICAgICAgICBpZiAodGhpcy5jcnVkTGlzdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5jcnVkTGlzdC52YWxpZGF0ZVBlcm1pc3Npb24ocm93RGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iXX0=
|