@sachin9822/reports-lib 0.0.214 → 0.0.215
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/accounting-report/accounting-report.component.mjs +19 -1
- package/esm2020/lib/components/branch-activity-send-report/branch-activity-send-report.component.mjs +21 -1
- package/esm2020/lib/components/branch-activity-send-summary-report/branch-activity-send-summary-report.component.mjs +19 -1
- package/esm2020/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.mjs +21 -1
- package/esm2020/lib/components/transaction-enquiry-report/transaction-enquiry-report.component.mjs +19 -3
- package/esm2020/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.mjs +26 -5
- package/esm2020/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.mjs +23 -50
- package/esm2020/lib/models/trial-balance-accounts-report/trial-balance-accounts.models.mjs +1 -1
- package/esm2020/lib/services/report.service.mjs +4 -4
- package/esm2020/lib/shared/search-filter/search-filter.component.mjs +31 -18
- package/fesm2015/sachin9822-reports-lib.mjs +296 -76
- package/fesm2015/sachin9822-reports-lib.mjs.map +1 -1
- package/fesm2020/sachin9822-reports-lib.mjs +174 -75
- package/fesm2020/sachin9822-reports-lib.mjs.map +1 -1
- package/lib/components/cancellation-transaction-report/cancellation-transaction-report.component.d.ts +13 -0
- package/lib/components/transaction-monitoring-report/transaction-monitoring-report.component.d.ts +1 -0
- package/lib/components/trial-balance-accounts-report/trial-balance-accounts-report.component.d.ts +2 -3
- package/lib/models/trial-balance-accounts-report/trial-balance-accounts.models.d.ts +0 -1
- package/lib/services/report.service.d.ts +1 -1
- package/lib/shared/search-filter/search-filter.component.d.ts +1 -1
- package/package.json +1 -1
|
@@ -53,7 +53,7 @@ export class SearchFilterComponent {
|
|
|
53
53
|
this.isSelectAllChecked = true;
|
|
54
54
|
this.erroMessage = 'Error in Loading Data';
|
|
55
55
|
// for Trial Balance - Accounts Report
|
|
56
|
-
this.
|
|
56
|
+
this.businessLines = [];
|
|
57
57
|
this.accountStatuses = [];
|
|
58
58
|
this.currency = [];
|
|
59
59
|
this.financialYears = [];
|
|
@@ -76,7 +76,7 @@ export class SearchFilterComponent {
|
|
|
76
76
|
'Accounting': ['client', 'fromDate', 'toDate', 'branch', 'transactionProduct', 'sendCurrency', 'transactionStatus', 'sendCountry', 'receiveCountry'],
|
|
77
77
|
'Credit Limit Status Enquiry': ['client', 'fromDate', 'toDate', 'transactionStatusSingleSelect'],
|
|
78
78
|
'Funding': ['fromDate', 'toDate'],
|
|
79
|
-
'Trial Balance - Accounts': ['
|
|
79
|
+
'Trial Balance - Accounts': ['businessLine', 'accountStatus', 'currency', 'financialYear', 'fromMonth', 'toMonth', 'dateTypeForTrialBalanceAccounts', 'fromDay', 'toDay'],
|
|
80
80
|
'Branch Activity Send Summary': ['client', 'fromDate', 'toDate', 'branch', 'transactionProduct', 'receiveCurrency', 'transactionStatus', 'sendCountry', 'receiveCountry', 'summaryReport'],
|
|
81
81
|
'Transaction Monitoring': ['client', 'fromDate', 'toDate', 'branch', 'transactionProduct', 'receiveCurrency', 'transactionStatus', 'sendCountry', 'receiveCountry'],
|
|
82
82
|
// Add more report types here
|
|
@@ -107,7 +107,7 @@ export class SearchFilterComponent {
|
|
|
107
107
|
receiveCountry: 'Receive Country:',
|
|
108
108
|
sendBusinessPartner: 'Sender Partner:',
|
|
109
109
|
recvBusinessPartner: 'Receiver Partner:',
|
|
110
|
-
|
|
110
|
+
businessLine: 'Business Line:',
|
|
111
111
|
financialYear: 'Financial Year:',
|
|
112
112
|
fromMonth: 'From Month:',
|
|
113
113
|
toMonth: 'To Month:',
|
|
@@ -136,7 +136,7 @@ export class SearchFilterComponent {
|
|
|
136
136
|
receiveCurrency: 'currency',
|
|
137
137
|
sendBusinessPartner: 'name',
|
|
138
138
|
recvBusinessPartner: 'name',
|
|
139
|
-
|
|
139
|
+
businessLine: 'businessLine',
|
|
140
140
|
financialYear: 'financialYear',
|
|
141
141
|
fromMonth: 'period',
|
|
142
142
|
toMonth: 'pMonthName',
|
|
@@ -157,7 +157,7 @@ export class SearchFilterComponent {
|
|
|
157
157
|
receiveCurrency: 'currencyCode',
|
|
158
158
|
sendBusinessPartner: 'id',
|
|
159
159
|
recvBusinessPartner: 'id',
|
|
160
|
-
|
|
160
|
+
businessLine: 'businessLine',
|
|
161
161
|
financialYear: 'financialYear',
|
|
162
162
|
fromMonth: 'pOrder',
|
|
163
163
|
toMonth: 'pMonth',
|
|
@@ -526,7 +526,7 @@ export class SearchFilterComponent {
|
|
|
526
526
|
if (this.ReportName == "Trial Balance - Accounts") {
|
|
527
527
|
this.searchForm = this.fb.group({
|
|
528
528
|
// Added fields
|
|
529
|
-
|
|
529
|
+
businessLine: ['All'],
|
|
530
530
|
accountStatus: [['Active']],
|
|
531
531
|
financialYear: [new Date().getFullYear().toString()],
|
|
532
532
|
fromMonth: [''],
|
|
@@ -820,7 +820,7 @@ export class SearchFilterComponent {
|
|
|
820
820
|
loadInitialDataForTrialBalanceAccounts() {
|
|
821
821
|
this.loadingState = ComponentLoadingState.Loading;
|
|
822
822
|
forkJoin({
|
|
823
|
-
|
|
823
|
+
businessLines: this.reportService.GetBusinessLineForTrialBalanceAccountsReport()
|
|
824
824
|
.pipe(catchError(err => of([]))),
|
|
825
825
|
accountStatuses: this.reportService.GetAccountStatusForTrialBalanceAccountsReport()
|
|
826
826
|
.pipe(catchError(err => of([]))),
|
|
@@ -837,7 +837,7 @@ export class SearchFilterComponent {
|
|
|
837
837
|
})
|
|
838
838
|
.pipe(switchMap(results => {
|
|
839
839
|
// assign base results
|
|
840
|
-
this.
|
|
840
|
+
this.businessLines = results.businessLines.filter(b => b.businessLine?.trim() !== '');
|
|
841
841
|
this.accountStatuses = results.accountStatuses;
|
|
842
842
|
this.dateTypes = results.dateTypes;
|
|
843
843
|
this.financialYears = results.financialYears
|
|
@@ -882,7 +882,7 @@ export class SearchFilterComponent {
|
|
|
882
882
|
this.toMonths = allResults.toMonths;
|
|
883
883
|
// patch form defaults
|
|
884
884
|
this.searchForm.patchValue({
|
|
885
|
-
|
|
885
|
+
businessLine: this.businessLines[0]?.businessLine ?? null,
|
|
886
886
|
accountStatus: this.accountStatuses.length ? [this.accountStatuses[0].statusCode] : [],
|
|
887
887
|
financialYear: this.paramDateDefault[0]?.financialYear ?? new Date().getFullYear().toString(),
|
|
888
888
|
fromMonth: this.paramDateDefault[0]?.financialMonth,
|
|
@@ -906,9 +906,16 @@ export class SearchFilterComponent {
|
|
|
906
906
|
this.searchForm.get('fromDate')?.valueChanges.subscribe(fromDateStr => {
|
|
907
907
|
const toDateControl = this.searchForm.get('toDate');
|
|
908
908
|
const toDateStr = toDateControl?.value;
|
|
909
|
-
if (!fromDateStr
|
|
909
|
+
if (!fromDateStr)
|
|
910
910
|
return;
|
|
911
911
|
const fromDate = new Date(fromDateStr);
|
|
912
|
+
// If ToDate is empty → set default
|
|
913
|
+
if (!toDateControl?.value) {
|
|
914
|
+
const maxToDate = new Date(fromDate);
|
|
915
|
+
maxToDate.setDate(fromDate.getDate() + 30);
|
|
916
|
+
toDateControl.patchValue(maxToDate.toISOString().split("T")[0]);
|
|
917
|
+
return;
|
|
918
|
+
}
|
|
912
919
|
const toDate = new Date(toDateStr);
|
|
913
920
|
const maxToDate = new Date(fromDate);
|
|
914
921
|
maxToDate?.setDate(fromDate.getDate() + 30);
|
|
@@ -924,9 +931,16 @@ export class SearchFilterComponent {
|
|
|
924
931
|
this.searchForm.get('toDate')?.valueChanges.subscribe(toDateStr => {
|
|
925
932
|
const fromDateControl = this.searchForm.get('fromDate');
|
|
926
933
|
const fromDateStr = fromDateControl?.value;
|
|
927
|
-
if (!toDateStr
|
|
934
|
+
if (!toDateStr)
|
|
928
935
|
return;
|
|
929
936
|
const toDate = new Date(toDateStr);
|
|
937
|
+
// If FromDate is empty → set default
|
|
938
|
+
if (!fromDateControl?.value) {
|
|
939
|
+
const minFromDate = new Date(toDate);
|
|
940
|
+
minFromDate.setDate(toDate.getDate() - 30);
|
|
941
|
+
fromDateControl.patchValue(minFromDate.toISOString().split("T")[0]);
|
|
942
|
+
return;
|
|
943
|
+
}
|
|
930
944
|
const fromDate = new Date(fromDateStr);
|
|
931
945
|
this.disabledDate = this.toNgbDateStruct(fromDate);
|
|
932
946
|
const minFromDate = new Date(toDate);
|
|
@@ -1623,7 +1637,7 @@ export class SearchFilterComponent {
|
|
|
1623
1637
|
const formValue = this.searchForm.value;
|
|
1624
1638
|
// formValue.fromDate = this.toIsoFormat(formValue.fromDate);
|
|
1625
1639
|
// formValue.toDate = this.toIsoFormat(formValue.toDate);
|
|
1626
|
-
if (this.initialFilters?.isRealtime && (formValue.fromDate
|
|
1640
|
+
if (this.initialFilters?.isRealtime && (!formValue.fromDate && !formValue.toDate)) {
|
|
1627
1641
|
formValue.fromDate = null;
|
|
1628
1642
|
formValue.toDate = null;
|
|
1629
1643
|
}
|
|
@@ -1648,7 +1662,6 @@ export class SearchFilterComponent {
|
|
|
1648
1662
|
return {
|
|
1649
1663
|
modal: formValue,
|
|
1650
1664
|
sysUserID: this.currentUser,
|
|
1651
|
-
isRealtime: this.initialFilters?.isRealtime,
|
|
1652
1665
|
searchCriteria: searchCriteria
|
|
1653
1666
|
};
|
|
1654
1667
|
}
|
|
@@ -1973,8 +1986,8 @@ export class SearchFilterComponent {
|
|
|
1973
1986
|
case 'recvBusinessPartner':
|
|
1974
1987
|
list = this.recvBusinessPartnerAgents;
|
|
1975
1988
|
break;
|
|
1976
|
-
case '
|
|
1977
|
-
list = this.
|
|
1989
|
+
case 'businessLine':
|
|
1990
|
+
list = this.businessLines;
|
|
1978
1991
|
break;
|
|
1979
1992
|
case 'financialYear':
|
|
1980
1993
|
list = this.financialYears;
|
|
@@ -2118,10 +2131,10 @@ export class SearchFilterComponent {
|
|
|
2118
2131
|
}
|
|
2119
2132
|
}
|
|
2120
2133
|
SearchFilterComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SearchFilterComponent, deps: [{ token: i1.ReportService }, { token: i2.FormBuilder }, { token: i3.ConfigService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
2121
|
-
SearchFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SearchFilterComponent, selector: "lib-search-filter", inputs: { ReportName: "ReportName", initialFilters: "initialFilters" }, outputs: { searchClicked: "searchClicked", formValid: "formValid" }, ngImport: i0, template: "<h6 class=\"Breadcrumb\">\r\n <a class=\"BreadCrumbLink\" [routerLink]=\"['/reports']\">\r\n <h1>Reports</h1>\r\n </a>\r\n <a href=\"BreadCrumbLink\"></a>\r\n <span class=\"BreadCrumbArrow\"></span>\r\n <a class=\"BreadCrumbLink\">\r\n <h2>{{ ReportName }}</h2>\r\n </a>\r\n</h6>\r\n\r\n<app-loader *ngIf=\"loadingState === ComponentLoadingState.Loading\"></app-loader>\r\n<section>\r\n <form [formGroup]=\"searchForm\" (ngSubmit)=\"onSearch()\">\r\n <div class=\"row\">\r\n <div class=\"col-custom-10-5\">\r\n <div class=\"filter-grid\">\r\n\r\n <!-- Dynamically render filters in order -->\r\n <ng-container *ngFor=\"let field of visibleFields\">\r\n <ng-container [ngSwitch]=\"field\">\r\n\r\n <!-- Client -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'client'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"clients1\" bindLabel=\"businessPartnerName\" bindValue=\"businessPartnerCode\"\r\n placeholder=\"Select Client\" [clearable]=\"false\" formControlName=\"client\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('client')?.invalid && (searchForm.get('client')?.touched || formValidationError)}\"\r\n (change)=\"onClientChange()\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.businessPartnerName\">{{ item.businessPartnerName }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Branch -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'branch'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Branch<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"branches\" bindLabel=\"businessPartnerBranch\" bindValue=\"branchCode\"\r\n placeholder=\"Select Branch\" [clearable]=\"false\" formControlName=\"branch\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('branch')?.invalid && (searchForm.get('branch')?.touched || formValidationError)}\"\r\n (change)=\"onBranchChange()\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.businessPartnerBranch\">{{ item.businessPartnerBranch }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- From Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'fromDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">From Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #fromDateInput=\"ngbDatepicker\" formControlName=\"fromDate\" autocomplete=\"off\"\r\n [ngClass]=\"{'invalid-date':searchForm.get('fromDate')?.invalid && (searchForm.get('fromDate')?.touched || formValidationError)}\" />\r\n <button class=\"input-group-button cal\" (click)=\"fromDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- To Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'toDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">To Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"toDate\" [minDate]=\"disabledDate\"\r\n autocomplete=\"off\"\r\n [ngClass]=\"{'invalid-date':searchForm.get('toDate')?.invalid && (searchForm.get('toDate')?.touched || formValidationError)}\" />\r\n <button class=\"input-group-button cal\" (click)=\"toDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Product -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'product'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Product</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"products\" bindLabel=\"productName\" bindValue=\"productCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"product\" (open)=\"onOpen()\"\r\n (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- User -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'userId'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">User<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"users\" bindLabel=\"userName\" bindValue=\"userId\" placeholder=\"Select User\"\r\n [clearable]=\"false\" formControlName=\"userId\" required (open)=\"onOpen()\" (close)=\"onClose()\"\r\n [searchable]=\"isOpen\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('userId')?.invalid && (searchForm.get('userId')?.touched || formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Currency -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'currency'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Currency</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"currencies\" bindValue=\"currencyCode\" placeholder=\"Select Currency\"\r\n [clearable]=\"false\" formControlName=\"currency\" [searchable]=\"true\" [searchFn]=\"currencySearch\"\r\n (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n\r\n <!-- Template for dropdown options -->\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Template for selected value -->\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--Send Currency -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'sendCurrency'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Send Currency</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"currencies\" bindValue=\"currencyCode\" placeholder=\"Select Currency\"\r\n [clearable]=\"false\" formControlName=\"currency\" [searchable]=\"true\" [searchFn]=\"currencySearch\"\r\n (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n\r\n <!-- Template for dropdown options -->\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Template for selected value -->\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction Status (Multi-select) -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionStatus'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Status<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select class=\"transaction-status-select\" [items]=\"transactionStatuses\"\r\n bindLabel=\"transactionStatus\" bindValue=\"transactionStatus\" [multiple]=\"true\"\r\n placeholder=\"Select Transaction Status\" formControlName=\"transactionStatus\"\r\n [closeOnSelect]=\"false\" [clearable]=\"false\" [searchable]=\"false\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('transactionStatus')?.invalid && (searchForm.get('transactionStatus')?.touched || formValidationError)}\">\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" /> {{ item.transactionStatus }}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction No -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionNo'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Number</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <input class=\"form-control dpicker\" formControlName=\"transactionNo\"\r\n placeholder=\"Enter transaction number\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Value Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'valueDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-3\">\r\n <label class=\"form-label label-data\">Value Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-9\">\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"toDate\" autocomplete=\"off\"\r\n [ngClass]=\"{'invalid-date':searchForm.get('date')?.invalid && (searchForm.get('date')?.touched || formValidationError)}\" />\r\n <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toDateInput.toggle()\">\r\n <i class=\"fa fa-calendar\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Send Country -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'sendCountry'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Send Country</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"sendCountry\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.country\">{{ item.country }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Receive Country -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'receiveCountry'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Receive Country</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"receiveCountry\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.country\">{{ item.country }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--Transaction Product -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionProduct'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Product</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"transactionProducts\" bindLabel=\"name\" bindValue=\"productCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"product\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date Type -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'dateType'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date Type</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select placeholder=\"- Please select -\" formControlName=\"dateType\" [clearable]=\"false\" required>\r\n <ng-option [value]=\"1\">\r\n Value Date\r\n </ng-option>\r\n <ng-option [value]=\"2\">\r\n Posting Date\r\n </ng-option>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'date'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #dateInput=\"ngbDatepicker\" formControlName=\"date\" autocomplete=\"off\"\r\n [ngClass]=\"{'invalid-date': searchForm.get('date')?.invalid && (searchForm.get('date')?.touched || formValidationError)}\" />\r\n <button class=\"input-group-button cal\" type=\"button\" (click)=\"dateInput.toggle()\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- receiveCurrency -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'receiveCurrency'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Receive Currency</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"currencies\" bindValue=\"currencyCode\" placeholder=\"Select Receive Currency\"\r\n [clearable]=\"false\" formControlName=\"receiveCurrency\" required (change)=\"onBranchChange()\"\r\n [searchable]=\"true\" [searchFn]=\"currencySearch\" (open)=\"onOpen()\" (close)=\"onClose()\"\r\n [searchable]=\"isOpen\">\r\n\r\n <!-- Dropdown options -->\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Selected value -->\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Send BusinessPartner -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'sendBusinessPartner'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Send Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"sendBusinessPartnerAgents\" bindLabel=\"name\" bindValue=\"id\"\r\n placeholder=\"Select Send Partner\" [clearable]=\"false\" formControlName=\"sendBusinessPartner\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('sendBusinessPartner')?.invalid && (searchForm.get('sendBusinessPartner')?.touched || formValidationError)}\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.name\">{{ item.name }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Recv BusinessPartner -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'recvBusinessPartner'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Recv Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"recvBusinessPartnerAgents\" bindLabel=\"name\" bindValue=\"id\"\r\n placeholder=\"Select Recv Partner\" [clearable]=\"false\" formControlName=\"recvBusinessPartner\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('recvBusinessPartner')?.invalid && (searchForm.get('recvBusinessPartner')?.touched || formValidationError)}\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.name\">{{ item.name }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction Status (Single-select) -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionStatusSingleSelect'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Status<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"transactionStatuses\" bindLabel=\"transactionStatus\" bindValue=\"transactionStatus\"\r\n placeholder=\"Select Status\" [clearable]=\"false\" formControlName=\"transactionStatus\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('transactionStatus')?.invalid && (searchForm.get('transactionStatus')?.touched || formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- For Trial Balance - Accounts Report -->\r\n\r\n <!-- Business Unit -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'businessUnit'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Business Unit</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"businessUnits\" bindLabel=\"companyFullName\" bindValue=\"companyCode\"\r\n placeholder=\"Select Business Unit\" [clearable]=\"false\" formControlName=\"businessUnit\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('businessUnit')?.invalid && (searchForm.get('businessUnit')?.touched || formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Year -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'financialYear'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Financial Year</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"financialYears\" bindLabel=\"financialYear\" bindValue=\"financialYear\"\r\n placeholder=\"Select Year\" [clearable]=\"false\" formControlName=\"financialYear\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('financialYear')?.invalid && (searchForm.get('financialYear')?.touched || formValidationError)}\"\r\n (change)=\"onSelectFinancialYear()\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- From Month -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'fromMonth'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">From Month</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"fromMonths\" bindLabel=\"period\" bindValue=\"pOrder\"\r\n placeholder=\"Select From Month\" [clearable]=\"false\" formControlName=\"fromMonth\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('fromMonth')?.invalid && (searchForm.get('fromMonth')?.touched|| formValidationError)}\"\r\n (change)=\"onSelectFromMonth()\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- To Month -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'toMonth'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">To Month</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"toMonths\" bindLabel=\"pMonthName\" bindValue=\"pMonth\"\r\n placeholder=\"Select To Month\" [clearable]=\"false\" formControlName=\"toMonth\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('toMonth')?.invalid && (searchForm.get('toMonth')?.touched|| formValidationError)}\"\r\n (change)=\"onSelectToMonth()\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- From Day -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'fromDay'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">From Day <span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"fromDays\" bindLabel=\"individualDay\" bindValue=\"individualDate\"\r\n placeholder=\"Select From Day\" [clearable]=\"false\" formControlName=\"fromDay\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('fromDay')?.invalid && (searchForm.get('fromDay')?.touched|| formValidationError)}\"\r\n (change)=\"onSelectFromDay()\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- To Day -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'toDay'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">To Day<span style=\"margin-left: 1px;\"\r\n class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"toDays\" bindLabel=\"pDate\" bindValue=\"individualDate\" placeholder=\"Select To Day\"\r\n [clearable]=\"false\" formControlName=\"toDay\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('toDay')?.invalid && (searchForm.get('toDay')?.touched|| formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date Type -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'dateTypeForTrialBalanceAccounts'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date Type</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"dateTypes\" bindLabel=\"dateTypeLabel\" bindValue=\"dateTypeCode\"\r\n placeholder=\"Select Date Type\" formControlName=\"dateType\" [clearable]=\"false\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('dateType')?.invalid && (searchForm.get('dateType')?.touched|| formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Account Status -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'accountStatus'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Account Status</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select class=\"transaction-status-select\" [items]=\"accountStatuses\" bindLabel=\"statusName\"\r\n bindValue=\"statusCode\" [multiple]=\"true\" placeholder=\"Select Account Status\"\r\n formControlName=\"accountStatus\" [closeOnSelect]=\"false\" [clearable]=\"false\" [searchable]=\"false\"\r\n required\r\n [ngClass]=\"{'invalid-select': searchForm.get('accountStatus')?.invalid && (searchForm.get('accountStatus')?.touched|| formValidationError)}\">\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" /> {{ item.statusName }}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n <!--Summary Report-->\r\n <div class=\"form-field\" *ngSwitchCase=\"'summaryReport'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Summary Report</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"summaryReportTypes\" bindLabel=\"label\" bindValue=\"value\"\r\n [clearable]=\"false\" formControlName=\"summaryReport\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.label\">{{ item.label }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-custom-1-5\">\r\n <!-- View Report Button (Always at Top-Right) -->\r\n <div class=\"form-field view-report-btn\">\r\n <button type=\"submit\" class=\"btn btn-report\">View</button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</section>\r\n<hr>\r\n<!-- Error Messages -->\r\n<div class=\"alert alert-danger mt-3\" *ngIf=\"formValidationError && hasSearched\">\r\n Please fill all mandatory fields\r\n</div>\r\n\r\n<div class=\"alert alert-danger mt-3\" *ngIf=\"errorMessage && loadingState === ComponentLoadingState.Error\">\r\n {{ errorMessage }}\r\n</div>", styles: ["@charset \"UTF-8\";.filter-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;grid-column:span 3}.form-field{display:flex;flex-direction:column;padding:0 4px 0 0!important;min-width:0}.col-custom-10-5{flex:0 0 87.5%!important;max-width:87.5%!important}.col-custom-1-5{flex:0 0 12.5%!important;max-width:12.5%!important;padding:0!important}::ng-deep .ng-select .ng-select-container .ng-value-container{overflow:hidden;flex-wrap:nowrap}::ng-deep .ng-select .ng-select-container .ng-value-container .ng-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}::ng-deep .ng-select .ng-select-container{height:32px!important;min-height:32px!important;font-size:12px!important;align-items:center}.form-label{margin-bottom:0!important}.date-group{height:32px!important}::ng-deep .transaction-status-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{padding:4px 0!important}::ng-deep .ng-select .ng-select-container .ng-value-container{padding-top:0}::ng-deep .ng-dropdown-panel .ng-option{font-size:12px}.btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px;padding:4px 15px!important;margin-left:15px!important;width:auto!important;margin-right:7px!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}.fa-calendar{--fa: \"\\f073\" !important}.dpicker{border:1px solid #ccc!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2;margin-left:0!important}.cal:focus{box-shadow:none!important}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}@media (max-width: 768px){.filter-grid{grid-template-columns:1fr;gap:12px}}.input-group-button{background:none!important;border:1px solid #1877F2!important;background-color:#1877f2!important;border-radius:0 3px 3px 0!important;min-width:35px;margin-left:1px;height:32px!important;cursor:pointer}.input-group-button .fa{color:#fff}.input-group-button:focus{box-shadow:0 0 5px 3px #009ee054}.input-group-button:focus{outline:none!important;box-shadow:none!important}.Breadcrumb h1,.Breadcrumb h2{font-weight:700}.row{display:flex;flex-wrap:wrap;margin-right:0;margin-left:0}.col-2{padding-left:0}.col-10{padding-right:0}.col-custom-10-5{padding-right:0!important;padding-left:0}::ng-deep .invalid-select.ng-select>.ng-select-container{background-color:#d521211a;border:2px solid red!important}.invalid-date{background-color:#d521211a;border:2px solid red!important}\n"], dependencies: [{ kind: "directive", type: i4.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i6.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i7.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "component", type: i7.NgOptionComponent, selector: "ng-option", inputs: ["value", "disabled"] }, { kind: "directive", type: i7.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i7.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { kind: "component", type: i8.LoaderComponent, selector: "app-loader" }] });
|
|
2134
|
+
SearchFilterComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SearchFilterComponent, selector: "lib-search-filter", inputs: { ReportName: "ReportName", initialFilters: "initialFilters" }, outputs: { searchClicked: "searchClicked", formValid: "formValid" }, ngImport: i0, template: "<h6 class=\"Breadcrumb\">\r\n <a class=\"BreadCrumbLink\" [routerLink]=\"['/reports']\">\r\n <h1>Reports</h1>\r\n </a>\r\n <a href=\"BreadCrumbLink\"></a>\r\n <span class=\"BreadCrumbArrow\"></span>\r\n <a class=\"BreadCrumbLink\">\r\n <h2>{{ ReportName }}</h2>\r\n </a>\r\n</h6>\r\n\r\n<app-loader *ngIf=\"loadingState === ComponentLoadingState.Loading\"></app-loader>\r\n<section>\r\n <form [formGroup]=\"searchForm\" (ngSubmit)=\"onSearch()\">\r\n <div class=\"row\">\r\n <div class=\"col-custom-10-5\">\r\n <div class=\"filter-grid\">\r\n\r\n <!-- Dynamically render filters in order -->\r\n <ng-container *ngFor=\"let field of visibleFields\">\r\n <ng-container [ngSwitch]=\"field\">\r\n\r\n <!-- Client -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'client'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"clients1\" bindLabel=\"businessPartnerName\" bindValue=\"businessPartnerCode\"\r\n placeholder=\"Select Client\" [clearable]=\"false\" formControlName=\"client\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('client')?.invalid && (searchForm.get('client')?.touched || formValidationError)}\"\r\n (change)=\"onClientChange()\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.businessPartnerName\">{{ item.businessPartnerName }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Branch -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'branch'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Branch<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"branches\" bindLabel=\"businessPartnerBranch\" bindValue=\"branchCode\"\r\n placeholder=\"Select Branch\" [clearable]=\"false\" formControlName=\"branch\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('branch')?.invalid && (searchForm.get('branch')?.touched || formValidationError)}\"\r\n (change)=\"onBranchChange()\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.businessPartnerBranch\">{{ item.businessPartnerBranch }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- From Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'fromDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">From Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #fromDateInput=\"ngbDatepicker\" formControlName=\"fromDate\" autocomplete=\"off\"\r\n [ngClass]=\"{'invalid-date':searchForm.get('fromDate')?.invalid && (searchForm.get('fromDate')?.touched || formValidationError)}\" />\r\n <button class=\"input-group-button cal\" (click)=\"fromDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- To Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'toDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">To Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"toDate\" [minDate]=\"disabledDate\"\r\n autocomplete=\"off\"\r\n [ngClass]=\"{'invalid-date':searchForm.get('toDate')?.invalid && (searchForm.get('toDate')?.touched || formValidationError)}\" />\r\n <button class=\"input-group-button cal\" (click)=\"toDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Product -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'product'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Product</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"products\" bindLabel=\"productName\" bindValue=\"productCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"product\" (open)=\"onOpen()\"\r\n (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- User -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'userId'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">User<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"users\" bindLabel=\"userName\" bindValue=\"userId\" placeholder=\"Select User\"\r\n [clearable]=\"false\" formControlName=\"userId\" required (open)=\"onOpen()\" (close)=\"onClose()\"\r\n [searchable]=\"isOpen\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('userId')?.invalid && (searchForm.get('userId')?.touched || formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Currency -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'currency'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Currency</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"currencies\" bindValue=\"currencyCode\" placeholder=\"Select Currency\"\r\n [clearable]=\"false\" formControlName=\"currency\" [searchable]=\"true\" [searchFn]=\"currencySearch\"\r\n (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n\r\n <!-- Template for dropdown options -->\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Template for selected value -->\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--Send Currency -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'sendCurrency'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Send Currency</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"currencies\" bindValue=\"currencyCode\" placeholder=\"Select Currency\"\r\n [clearable]=\"false\" formControlName=\"currency\" [searchable]=\"true\" [searchFn]=\"currencySearch\"\r\n (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n\r\n <!-- Template for dropdown options -->\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Template for selected value -->\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction Status (Multi-select) -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionStatus'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Status<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select class=\"transaction-status-select\" [items]=\"transactionStatuses\"\r\n bindLabel=\"transactionStatus\" bindValue=\"transactionStatus\" [multiple]=\"true\"\r\n placeholder=\"Select Transaction Status\" formControlName=\"transactionStatus\"\r\n [closeOnSelect]=\"false\" [clearable]=\"false\" [searchable]=\"false\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('transactionStatus')?.invalid && (searchForm.get('transactionStatus')?.touched || formValidationError)}\">\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" /> {{ item.transactionStatus }}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction No -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionNo'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Number</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <input class=\"form-control dpicker\" formControlName=\"transactionNo\"\r\n placeholder=\"Enter transaction number\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Value Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'valueDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-3\">\r\n <label class=\"form-label label-data\">Value Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-9\">\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"toDate\" autocomplete=\"off\"\r\n [ngClass]=\"{'invalid-date':searchForm.get('date')?.invalid && (searchForm.get('date')?.touched || formValidationError)}\" />\r\n <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toDateInput.toggle()\">\r\n <i class=\"fa fa-calendar\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Send Country -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'sendCountry'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Send Country</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"sendCountry\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.country\">{{ item.country }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Receive Country -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'receiveCountry'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Receive Country</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"receiveCountry\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.country\">{{ item.country }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--Transaction Product -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionProduct'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Product</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"transactionProducts\" bindLabel=\"name\" bindValue=\"productCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"product\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date Type -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'dateType'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date Type</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select placeholder=\"- Please select -\" formControlName=\"dateType\" [clearable]=\"false\" required>\r\n <ng-option [value]=\"1\">\r\n Value Date\r\n </ng-option>\r\n <ng-option [value]=\"2\">\r\n Posting Date\r\n </ng-option>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'date'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #dateInput=\"ngbDatepicker\" formControlName=\"date\" autocomplete=\"off\"\r\n [ngClass]=\"{'invalid-date': searchForm.get('date')?.invalid && (searchForm.get('date')?.touched || formValidationError)}\" />\r\n <button class=\"input-group-button cal\" type=\"button\" (click)=\"dateInput.toggle()\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- receiveCurrency -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'receiveCurrency'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Receive Currency</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"currencies\" bindValue=\"currencyCode\" placeholder=\"Select Receive Currency\"\r\n [clearable]=\"false\" formControlName=\"receiveCurrency\" required (change)=\"onBranchChange()\"\r\n [searchable]=\"true\" [searchFn]=\"currencySearch\" (open)=\"onOpen()\" (close)=\"onClose()\"\r\n [searchable]=\"isOpen\">\r\n\r\n <!-- Dropdown options -->\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Selected value -->\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Send BusinessPartner -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'sendBusinessPartner'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Send Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"sendBusinessPartnerAgents\" bindLabel=\"name\" bindValue=\"id\"\r\n placeholder=\"Select Send Partner\" [clearable]=\"false\" formControlName=\"sendBusinessPartner\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('sendBusinessPartner')?.invalid && (searchForm.get('sendBusinessPartner')?.touched || formValidationError)}\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.name\">{{ item.name }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Recv BusinessPartner -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'recvBusinessPartner'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Recv Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"recvBusinessPartnerAgents\" bindLabel=\"name\" bindValue=\"id\"\r\n placeholder=\"Select Recv Partner\" [clearable]=\"false\" formControlName=\"recvBusinessPartner\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('recvBusinessPartner')?.invalid && (searchForm.get('recvBusinessPartner')?.touched || formValidationError)}\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.name\">{{ item.name }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction Status (Single-select) -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionStatusSingleSelect'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Status<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"transactionStatuses\" bindLabel=\"transactionStatus\" bindValue=\"transactionStatus\"\r\n placeholder=\"Select Status\" [clearable]=\"false\" formControlName=\"transactionStatus\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('transactionStatus')?.invalid && (searchForm.get('transactionStatus')?.touched || formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- For Trial Balance - Accounts Report -->\r\n\r\n <!-- Business Line -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'businessLine'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Business Line</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"businessLines\" bindLabel=\"businessLine\" bindValue=\"businessLine\"\r\n placeholder=\"Select Business Line\" [clearable]=\"false\" formControlName=\"businessLine\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('businessLine')?.invalid && (searchForm.get('businessLine')?.touched || formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Year -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'financialYear'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Financial Year</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"financialYears\" bindLabel=\"financialYear\" bindValue=\"financialYear\"\r\n placeholder=\"Select Year\" [clearable]=\"false\" formControlName=\"financialYear\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('financialYear')?.invalid && (searchForm.get('financialYear')?.touched || formValidationError)}\"\r\n (change)=\"onSelectFinancialYear()\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- From Month -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'fromMonth'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">From Month</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"fromMonths\" bindLabel=\"period\" bindValue=\"pOrder\"\r\n placeholder=\"Select From Month\" [clearable]=\"false\" formControlName=\"fromMonth\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('fromMonth')?.invalid && (searchForm.get('fromMonth')?.touched|| formValidationError)}\"\r\n (change)=\"onSelectFromMonth()\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- To Month -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'toMonth'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">To Month</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"toMonths\" bindLabel=\"pMonthName\" bindValue=\"pMonth\"\r\n placeholder=\"Select To Month\" [clearable]=\"false\" formControlName=\"toMonth\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('toMonth')?.invalid && (searchForm.get('toMonth')?.touched|| formValidationError)}\"\r\n (change)=\"onSelectToMonth()\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- From Day -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'fromDay'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">From Day <span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"fromDays\" bindLabel=\"individualDay\" bindValue=\"individualDate\"\r\n placeholder=\"Select From Day\" [clearable]=\"false\" formControlName=\"fromDay\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('fromDay')?.invalid && (searchForm.get('fromDay')?.touched|| formValidationError)}\"\r\n (change)=\"onSelectFromDay()\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- To Day -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'toDay'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">To Day<span style=\"margin-left: 1px;\"\r\n class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"toDays\" bindLabel=\"pDate\" bindValue=\"individualDate\" placeholder=\"Select To Day\"\r\n [clearable]=\"false\" formControlName=\"toDay\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('toDay')?.invalid && (searchForm.get('toDay')?.touched|| formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date Type -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'dateTypeForTrialBalanceAccounts'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date Type</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"dateTypes\" bindLabel=\"dateTypeLabel\" bindValue=\"dateTypeCode\"\r\n placeholder=\"Select Date Type\" formControlName=\"dateType\" [clearable]=\"false\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('dateType')?.invalid && (searchForm.get('dateType')?.touched|| formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Account Status -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'accountStatus'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Account Status</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select class=\"transaction-status-select\" [items]=\"accountStatuses\" bindLabel=\"statusName\"\r\n bindValue=\"statusCode\" [multiple]=\"true\" placeholder=\"Select Account Status\"\r\n formControlName=\"accountStatus\" [closeOnSelect]=\"false\" [clearable]=\"false\" [searchable]=\"false\"\r\n required\r\n [ngClass]=\"{'invalid-select': searchForm.get('accountStatus')?.invalid && (searchForm.get('accountStatus')?.touched|| formValidationError)}\">\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" /> {{ item.statusName }}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n <!--Summary Report-->\r\n <div class=\"form-field\" *ngSwitchCase=\"'summaryReport'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Summary Report</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"summaryReportTypes\" bindLabel=\"label\" bindValue=\"value\"\r\n [clearable]=\"false\" formControlName=\"summaryReport\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.label\">{{ item.label }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-custom-1-5\">\r\n <!-- View Report Button (Always at Top-Right) -->\r\n <div class=\"form-field view-report-btn\">\r\n <button type=\"submit\" class=\"btn btn-report\">View</button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</section>\r\n<hr>\r\n<!-- Error Messages -->\r\n<div class=\"alert alert-danger mt-3\" *ngIf=\"formValidationError && hasSearched\">\r\n Please fill all mandatory fields\r\n</div>\r\n\r\n<div class=\"alert alert-danger mt-3\" *ngIf=\"errorMessage && loadingState === ComponentLoadingState.Error\">\r\n {{ errorMessage }}\r\n</div>", styles: ["@charset \"UTF-8\";.filter-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;grid-column:span 3}.form-field{display:flex;flex-direction:column;padding:0 4px 0 0!important;min-width:0}.col-custom-10-5{flex:0 0 87.5%!important;max-width:87.5%!important}.col-custom-1-5{flex:0 0 12.5%!important;max-width:12.5%!important;padding:0!important}::ng-deep .ng-select .ng-select-container .ng-value-container{overflow:hidden;flex-wrap:nowrap}::ng-deep .ng-select .ng-select-container .ng-value-container .ng-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}::ng-deep .ng-select .ng-select-container{height:32px!important;min-height:32px!important;font-size:12px!important;align-items:center}.form-label{margin-bottom:0!important}.date-group{height:32px!important}::ng-deep .transaction-status-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{padding:4px 0!important}::ng-deep .ng-select .ng-select-container .ng-value-container{padding-top:0}::ng-deep .ng-dropdown-panel .ng-option{font-size:12px}.btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px;padding:4px 15px!important;margin-left:15px!important;width:auto!important;margin-right:7px!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}.fa-calendar{--fa: \"\\f073\" !important}.dpicker{border:1px solid #ccc!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2;margin-left:0!important}.cal:focus{box-shadow:none!important}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}@media (max-width: 768px){.filter-grid{grid-template-columns:1fr;gap:12px}}.input-group-button{background:none!important;border:1px solid #1877F2!important;background-color:#1877f2!important;border-radius:0 3px 3px 0!important;min-width:35px;margin-left:1px;height:32px!important;cursor:pointer}.input-group-button .fa{color:#fff}.input-group-button:focus{box-shadow:0 0 5px 3px #009ee054}.input-group-button:focus{outline:none!important;box-shadow:none!important}.Breadcrumb h1,.Breadcrumb h2{font-weight:700}.row{display:flex;flex-wrap:wrap;margin-right:0;margin-left:0}.col-2{padding-left:0}.col-10{padding-right:0}.col-custom-10-5{padding-right:0!important;padding-left:0}::ng-deep .invalid-select.ng-select>.ng-select-container{background-color:#d521211a;border:2px solid red!important}.invalid-date{background-color:#d521211a;border:2px solid red!important}\n"], dependencies: [{ kind: "directive", type: i4.RouterLinkWithHref, selector: "a[routerLink],area[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "directive", type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i5.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i6.NgbInputDatepicker, selector: "input[ngbDatepicker]", inputs: ["autoClose", "datepickerClass", "dayTemplate", "dayTemplateData", "displayMonths", "firstDayOfWeek", "footerTemplate", "markDisabled", "minDate", "maxDate", "navigation", "outsideDays", "placement", "popperOptions", "restoreFocus", "showWeekNumbers", "startDate", "container", "positionTarget", "weekdays", "disabled"], outputs: ["dateSelect", "navigate", "closed"], exportAs: ["ngbDatepicker"] }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i7.NgSelectComponent, selector: "ng-select", inputs: ["bindLabel", "bindValue", "markFirst", "placeholder", "notFoundText", "typeToSearchText", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "keyDownFn", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "component", type: i7.NgOptionComponent, selector: "ng-option", inputs: ["value", "disabled"] }, { kind: "directive", type: i7.NgOptionTemplateDirective, selector: "[ng-option-tmp]" }, { kind: "directive", type: i7.NgLabelTemplateDirective, selector: "[ng-label-tmp]" }, { kind: "component", type: i8.LoaderComponent, selector: "app-loader" }] });
|
|
2122
2135
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SearchFilterComponent, decorators: [{
|
|
2123
2136
|
type: Component,
|
|
2124
|
-
args: [{ selector: 'lib-search-filter', template: "<h6 class=\"Breadcrumb\">\r\n <a class=\"BreadCrumbLink\" [routerLink]=\"['/reports']\">\r\n <h1>Reports</h1>\r\n </a>\r\n <a href=\"BreadCrumbLink\"></a>\r\n <span class=\"BreadCrumbArrow\"></span>\r\n <a class=\"BreadCrumbLink\">\r\n <h2>{{ ReportName }}</h2>\r\n </a>\r\n</h6>\r\n\r\n<app-loader *ngIf=\"loadingState === ComponentLoadingState.Loading\"></app-loader>\r\n<section>\r\n <form [formGroup]=\"searchForm\" (ngSubmit)=\"onSearch()\">\r\n <div class=\"row\">\r\n <div class=\"col-custom-10-5\">\r\n <div class=\"filter-grid\">\r\n\r\n <!-- Dynamically render filters in order -->\r\n <ng-container *ngFor=\"let field of visibleFields\">\r\n <ng-container [ngSwitch]=\"field\">\r\n\r\n <!-- Client -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'client'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"clients1\" bindLabel=\"businessPartnerName\" bindValue=\"businessPartnerCode\"\r\n placeholder=\"Select Client\" [clearable]=\"false\" formControlName=\"client\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('client')?.invalid && (searchForm.get('client')?.touched || formValidationError)}\"\r\n (change)=\"onClientChange()\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.businessPartnerName\">{{ item.businessPartnerName }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Branch -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'branch'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Branch<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"branches\" bindLabel=\"businessPartnerBranch\" bindValue=\"branchCode\"\r\n placeholder=\"Select Branch\" [clearable]=\"false\" formControlName=\"branch\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('branch')?.invalid && (searchForm.get('branch')?.touched || formValidationError)}\"\r\n (change)=\"onBranchChange()\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.businessPartnerBranch\">{{ item.businessPartnerBranch }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- From Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'fromDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">From Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #fromDateInput=\"ngbDatepicker\" formControlName=\"fromDate\" autocomplete=\"off\"\r\n [ngClass]=\"{'invalid-date':searchForm.get('fromDate')?.invalid && (searchForm.get('fromDate')?.touched || formValidationError)}\" />\r\n <button class=\"input-group-button cal\" (click)=\"fromDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- To Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'toDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">To Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"toDate\" [minDate]=\"disabledDate\"\r\n autocomplete=\"off\"\r\n [ngClass]=\"{'invalid-date':searchForm.get('toDate')?.invalid && (searchForm.get('toDate')?.touched || formValidationError)}\" />\r\n <button class=\"input-group-button cal\" (click)=\"toDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Product -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'product'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Product</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"products\" bindLabel=\"productName\" bindValue=\"productCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"product\" (open)=\"onOpen()\"\r\n (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- User -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'userId'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">User<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"users\" bindLabel=\"userName\" bindValue=\"userId\" placeholder=\"Select User\"\r\n [clearable]=\"false\" formControlName=\"userId\" required (open)=\"onOpen()\" (close)=\"onClose()\"\r\n [searchable]=\"isOpen\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('userId')?.invalid && (searchForm.get('userId')?.touched || formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Currency -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'currency'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Currency</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"currencies\" bindValue=\"currencyCode\" placeholder=\"Select Currency\"\r\n [clearable]=\"false\" formControlName=\"currency\" [searchable]=\"true\" [searchFn]=\"currencySearch\"\r\n (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n\r\n <!-- Template for dropdown options -->\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Template for selected value -->\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--Send Currency -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'sendCurrency'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Send Currency</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"currencies\" bindValue=\"currencyCode\" placeholder=\"Select Currency\"\r\n [clearable]=\"false\" formControlName=\"currency\" [searchable]=\"true\" [searchFn]=\"currencySearch\"\r\n (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n\r\n <!-- Template for dropdown options -->\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Template for selected value -->\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction Status (Multi-select) -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionStatus'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Status<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select class=\"transaction-status-select\" [items]=\"transactionStatuses\"\r\n bindLabel=\"transactionStatus\" bindValue=\"transactionStatus\" [multiple]=\"true\"\r\n placeholder=\"Select Transaction Status\" formControlName=\"transactionStatus\"\r\n [closeOnSelect]=\"false\" [clearable]=\"false\" [searchable]=\"false\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('transactionStatus')?.invalid && (searchForm.get('transactionStatus')?.touched || formValidationError)}\">\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" /> {{ item.transactionStatus }}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction No -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionNo'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Number</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <input class=\"form-control dpicker\" formControlName=\"transactionNo\"\r\n placeholder=\"Enter transaction number\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Value Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'valueDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-3\">\r\n <label class=\"form-label label-data\">Value Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-9\">\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"toDate\" autocomplete=\"off\"\r\n [ngClass]=\"{'invalid-date':searchForm.get('date')?.invalid && (searchForm.get('date')?.touched || formValidationError)}\" />\r\n <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toDateInput.toggle()\">\r\n <i class=\"fa fa-calendar\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Send Country -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'sendCountry'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Send Country</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"sendCountry\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.country\">{{ item.country }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Receive Country -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'receiveCountry'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Receive Country</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"receiveCountry\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.country\">{{ item.country }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--Transaction Product -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionProduct'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Product</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"transactionProducts\" bindLabel=\"name\" bindValue=\"productCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"product\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date Type -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'dateType'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date Type</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select placeholder=\"- Please select -\" formControlName=\"dateType\" [clearable]=\"false\" required>\r\n <ng-option [value]=\"1\">\r\n Value Date\r\n </ng-option>\r\n <ng-option [value]=\"2\">\r\n Posting Date\r\n </ng-option>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'date'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #dateInput=\"ngbDatepicker\" formControlName=\"date\" autocomplete=\"off\"\r\n [ngClass]=\"{'invalid-date': searchForm.get('date')?.invalid && (searchForm.get('date')?.touched || formValidationError)}\" />\r\n <button class=\"input-group-button cal\" type=\"button\" (click)=\"dateInput.toggle()\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- receiveCurrency -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'receiveCurrency'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Receive Currency</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"currencies\" bindValue=\"currencyCode\" placeholder=\"Select Receive Currency\"\r\n [clearable]=\"false\" formControlName=\"receiveCurrency\" required (change)=\"onBranchChange()\"\r\n [searchable]=\"true\" [searchFn]=\"currencySearch\" (open)=\"onOpen()\" (close)=\"onClose()\"\r\n [searchable]=\"isOpen\">\r\n\r\n <!-- Dropdown options -->\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Selected value -->\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Send BusinessPartner -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'sendBusinessPartner'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Send Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"sendBusinessPartnerAgents\" bindLabel=\"name\" bindValue=\"id\"\r\n placeholder=\"Select Send Partner\" [clearable]=\"false\" formControlName=\"sendBusinessPartner\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('sendBusinessPartner')?.invalid && (searchForm.get('sendBusinessPartner')?.touched || formValidationError)}\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.name\">{{ item.name }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Recv BusinessPartner -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'recvBusinessPartner'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Recv Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"recvBusinessPartnerAgents\" bindLabel=\"name\" bindValue=\"id\"\r\n placeholder=\"Select Recv Partner\" [clearable]=\"false\" formControlName=\"recvBusinessPartner\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('recvBusinessPartner')?.invalid && (searchForm.get('recvBusinessPartner')?.touched || formValidationError)}\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.name\">{{ item.name }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction Status (Single-select) -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionStatusSingleSelect'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Status<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"transactionStatuses\" bindLabel=\"transactionStatus\" bindValue=\"transactionStatus\"\r\n placeholder=\"Select Status\" [clearable]=\"false\" formControlName=\"transactionStatus\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('transactionStatus')?.invalid && (searchForm.get('transactionStatus')?.touched || formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- For Trial Balance - Accounts Report -->\r\n\r\n <!-- Business Unit -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'businessUnit'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Business Unit</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"businessUnits\" bindLabel=\"companyFullName\" bindValue=\"companyCode\"\r\n placeholder=\"Select Business Unit\" [clearable]=\"false\" formControlName=\"businessUnit\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('businessUnit')?.invalid && (searchForm.get('businessUnit')?.touched || formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Year -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'financialYear'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Financial Year</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"financialYears\" bindLabel=\"financialYear\" bindValue=\"financialYear\"\r\n placeholder=\"Select Year\" [clearable]=\"false\" formControlName=\"financialYear\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('financialYear')?.invalid && (searchForm.get('financialYear')?.touched || formValidationError)}\"\r\n (change)=\"onSelectFinancialYear()\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- From Month -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'fromMonth'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">From Month</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"fromMonths\" bindLabel=\"period\" bindValue=\"pOrder\"\r\n placeholder=\"Select From Month\" [clearable]=\"false\" formControlName=\"fromMonth\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('fromMonth')?.invalid && (searchForm.get('fromMonth')?.touched|| formValidationError)}\"\r\n (change)=\"onSelectFromMonth()\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- To Month -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'toMonth'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">To Month</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"toMonths\" bindLabel=\"pMonthName\" bindValue=\"pMonth\"\r\n placeholder=\"Select To Month\" [clearable]=\"false\" formControlName=\"toMonth\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('toMonth')?.invalid && (searchForm.get('toMonth')?.touched|| formValidationError)}\"\r\n (change)=\"onSelectToMonth()\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- From Day -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'fromDay'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">From Day <span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"fromDays\" bindLabel=\"individualDay\" bindValue=\"individualDate\"\r\n placeholder=\"Select From Day\" [clearable]=\"false\" formControlName=\"fromDay\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('fromDay')?.invalid && (searchForm.get('fromDay')?.touched|| formValidationError)}\"\r\n (change)=\"onSelectFromDay()\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- To Day -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'toDay'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">To Day<span style=\"margin-left: 1px;\"\r\n class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"toDays\" bindLabel=\"pDate\" bindValue=\"individualDate\" placeholder=\"Select To Day\"\r\n [clearable]=\"false\" formControlName=\"toDay\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('toDay')?.invalid && (searchForm.get('toDay')?.touched|| formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date Type -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'dateTypeForTrialBalanceAccounts'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date Type</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"dateTypes\" bindLabel=\"dateTypeLabel\" bindValue=\"dateTypeCode\"\r\n placeholder=\"Select Date Type\" formControlName=\"dateType\" [clearable]=\"false\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('dateType')?.invalid && (searchForm.get('dateType')?.touched|| formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Account Status -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'accountStatus'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Account Status</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select class=\"transaction-status-select\" [items]=\"accountStatuses\" bindLabel=\"statusName\"\r\n bindValue=\"statusCode\" [multiple]=\"true\" placeholder=\"Select Account Status\"\r\n formControlName=\"accountStatus\" [closeOnSelect]=\"false\" [clearable]=\"false\" [searchable]=\"false\"\r\n required\r\n [ngClass]=\"{'invalid-select': searchForm.get('accountStatus')?.invalid && (searchForm.get('accountStatus')?.touched|| formValidationError)}\">\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" /> {{ item.statusName }}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n <!--Summary Report-->\r\n <div class=\"form-field\" *ngSwitchCase=\"'summaryReport'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Summary Report</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"summaryReportTypes\" bindLabel=\"label\" bindValue=\"value\"\r\n [clearable]=\"false\" formControlName=\"summaryReport\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.label\">{{ item.label }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-custom-1-5\">\r\n <!-- View Report Button (Always at Top-Right) -->\r\n <div class=\"form-field view-report-btn\">\r\n <button type=\"submit\" class=\"btn btn-report\">View</button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</section>\r\n<hr>\r\n<!-- Error Messages -->\r\n<div class=\"alert alert-danger mt-3\" *ngIf=\"formValidationError && hasSearched\">\r\n Please fill all mandatory fields\r\n</div>\r\n\r\n<div class=\"alert alert-danger mt-3\" *ngIf=\"errorMessage && loadingState === ComponentLoadingState.Error\">\r\n {{ errorMessage }}\r\n</div>", styles: ["@charset \"UTF-8\";.filter-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;grid-column:span 3}.form-field{display:flex;flex-direction:column;padding:0 4px 0 0!important;min-width:0}.col-custom-10-5{flex:0 0 87.5%!important;max-width:87.5%!important}.col-custom-1-5{flex:0 0 12.5%!important;max-width:12.5%!important;padding:0!important}::ng-deep .ng-select .ng-select-container .ng-value-container{overflow:hidden;flex-wrap:nowrap}::ng-deep .ng-select .ng-select-container .ng-value-container .ng-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}::ng-deep .ng-select .ng-select-container{height:32px!important;min-height:32px!important;font-size:12px!important;align-items:center}.form-label{margin-bottom:0!important}.date-group{height:32px!important}::ng-deep .transaction-status-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{padding:4px 0!important}::ng-deep .ng-select .ng-select-container .ng-value-container{padding-top:0}::ng-deep .ng-dropdown-panel .ng-option{font-size:12px}.btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px;padding:4px 15px!important;margin-left:15px!important;width:auto!important;margin-right:7px!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}.fa-calendar{--fa: \"\\f073\" !important}.dpicker{border:1px solid #ccc!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2;margin-left:0!important}.cal:focus{box-shadow:none!important}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}@media (max-width: 768px){.filter-grid{grid-template-columns:1fr;gap:12px}}.input-group-button{background:none!important;border:1px solid #1877F2!important;background-color:#1877f2!important;border-radius:0 3px 3px 0!important;min-width:35px;margin-left:1px;height:32px!important;cursor:pointer}.input-group-button .fa{color:#fff}.input-group-button:focus{box-shadow:0 0 5px 3px #009ee054}.input-group-button:focus{outline:none!important;box-shadow:none!important}.Breadcrumb h1,.Breadcrumb h2{font-weight:700}.row{display:flex;flex-wrap:wrap;margin-right:0;margin-left:0}.col-2{padding-left:0}.col-10{padding-right:0}.col-custom-10-5{padding-right:0!important;padding-left:0}::ng-deep .invalid-select.ng-select>.ng-select-container{background-color:#d521211a;border:2px solid red!important}.invalid-date{background-color:#d521211a;border:2px solid red!important}\n"] }]
|
|
2137
|
+
args: [{ selector: 'lib-search-filter', template: "<h6 class=\"Breadcrumb\">\r\n <a class=\"BreadCrumbLink\" [routerLink]=\"['/reports']\">\r\n <h1>Reports</h1>\r\n </a>\r\n <a href=\"BreadCrumbLink\"></a>\r\n <span class=\"BreadCrumbArrow\"></span>\r\n <a class=\"BreadCrumbLink\">\r\n <h2>{{ ReportName }}</h2>\r\n </a>\r\n</h6>\r\n\r\n<app-loader *ngIf=\"loadingState === ComponentLoadingState.Loading\"></app-loader>\r\n<section>\r\n <form [formGroup]=\"searchForm\" (ngSubmit)=\"onSearch()\">\r\n <div class=\"row\">\r\n <div class=\"col-custom-10-5\">\r\n <div class=\"filter-grid\">\r\n\r\n <!-- Dynamically render filters in order -->\r\n <ng-container *ngFor=\"let field of visibleFields\">\r\n <ng-container [ngSwitch]=\"field\">\r\n\r\n <!-- Client -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'client'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"clients1\" bindLabel=\"businessPartnerName\" bindValue=\"businessPartnerCode\"\r\n placeholder=\"Select Client\" [clearable]=\"false\" formControlName=\"client\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('client')?.invalid && (searchForm.get('client')?.touched || formValidationError)}\"\r\n (change)=\"onClientChange()\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.businessPartnerName\">{{ item.businessPartnerName }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Branch -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'branch'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Branch<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"branches\" bindLabel=\"businessPartnerBranch\" bindValue=\"branchCode\"\r\n placeholder=\"Select Branch\" [clearable]=\"false\" formControlName=\"branch\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('branch')?.invalid && (searchForm.get('branch')?.touched || formValidationError)}\"\r\n (change)=\"onBranchChange()\" (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.businessPartnerBranch\">{{ item.businessPartnerBranch }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- From Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'fromDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">From Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #fromDateInput=\"ngbDatepicker\" formControlName=\"fromDate\" autocomplete=\"off\"\r\n [ngClass]=\"{'invalid-date':searchForm.get('fromDate')?.invalid && (searchForm.get('fromDate')?.touched || formValidationError)}\" />\r\n <button class=\"input-group-button cal\" (click)=\"fromDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- To Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'toDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">To Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"toDate\" [minDate]=\"disabledDate\"\r\n autocomplete=\"off\"\r\n [ngClass]=\"{'invalid-date':searchForm.get('toDate')?.invalid && (searchForm.get('toDate')?.touched || formValidationError)}\" />\r\n <button class=\"input-group-button cal\" (click)=\"toDateInput.toggle()\" type=\"button\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Product -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'product'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Product</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"products\" bindLabel=\"productName\" bindValue=\"productCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"product\" (open)=\"onOpen()\"\r\n (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- User -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'userId'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">User<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"users\" bindLabel=\"userName\" bindValue=\"userId\" placeholder=\"Select User\"\r\n [clearable]=\"false\" formControlName=\"userId\" required (open)=\"onOpen()\" (close)=\"onClose()\"\r\n [searchable]=\"isOpen\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('userId')?.invalid && (searchForm.get('userId')?.touched || formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Currency -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'currency'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Currency</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"currencies\" bindValue=\"currencyCode\" placeholder=\"Select Currency\"\r\n [clearable]=\"false\" formControlName=\"currency\" [searchable]=\"true\" [searchFn]=\"currencySearch\"\r\n (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n\r\n <!-- Template for dropdown options -->\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Template for selected value -->\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--Send Currency -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'sendCurrency'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Send Currency</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"currencies\" bindValue=\"currencyCode\" placeholder=\"Select Currency\"\r\n [clearable]=\"false\" formControlName=\"currency\" [searchable]=\"true\" [searchFn]=\"currencySearch\"\r\n (open)=\"onOpen()\" (close)=\"onClose()\" [searchable]=\"isOpen\">\r\n\r\n <!-- Template for dropdown options -->\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Template for selected value -->\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction Status (Multi-select) -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionStatus'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Status<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select class=\"transaction-status-select\" [items]=\"transactionStatuses\"\r\n bindLabel=\"transactionStatus\" bindValue=\"transactionStatus\" [multiple]=\"true\"\r\n placeholder=\"Select Transaction Status\" formControlName=\"transactionStatus\"\r\n [closeOnSelect]=\"false\" [clearable]=\"false\" [searchable]=\"false\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('transactionStatus')?.invalid && (searchForm.get('transactionStatus')?.touched || formValidationError)}\">\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" /> {{ item.transactionStatus }}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction No -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionNo'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Number</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <input class=\"form-control dpicker\" formControlName=\"transactionNo\"\r\n placeholder=\"Enter transaction number\" />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Value Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'valueDate'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-3\">\r\n <label class=\"form-label label-data\">Value Date<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-9\">\r\n <div class=\"input-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #toDateInput=\"ngbDatepicker\" formControlName=\"toDate\" autocomplete=\"off\"\r\n [ngClass]=\"{'invalid-date':searchForm.get('date')?.invalid && (searchForm.get('date')?.touched || formValidationError)}\" />\r\n <button class=\"btn btn-outline-secondary\" type=\"button\" (click)=\"toDateInput.toggle()\">\r\n <i class=\"fa fa-calendar\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Send Country -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'sendCountry'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Send Country</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"sendCountry\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.country\">{{ item.country }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Receive Country -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'receiveCountry'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Receive Country</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"countries\" bindLabel=\"country\" bindValue=\"countryCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"receiveCountry\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.country\">{{ item.country }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!--Transaction Product -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionProduct'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Product</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"transactionProducts\" bindLabel=\"name\" bindValue=\"productCode\"\r\n placeholder=\"Select Product\" [clearable]=\"false\" formControlName=\"product\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date Type -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'dateType'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date Type</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select placeholder=\"- Please select -\" formControlName=\"dateType\" [clearable]=\"false\" required>\r\n <ng-option [value]=\"1\">\r\n Value Date\r\n </ng-option>\r\n <ng-option [value]=\"2\">\r\n Posting Date\r\n </ng-option>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'date'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <div class=\"input-group date-group\">\r\n <input class=\"form-control dpicker\" placeholder=\"dd/mm/yyyy\" ngbDatepicker\r\n #dateInput=\"ngbDatepicker\" formControlName=\"date\" autocomplete=\"off\"\r\n [ngClass]=\"{'invalid-date': searchForm.get('date')?.invalid && (searchForm.get('date')?.touched || formValidationError)}\" />\r\n <button class=\"input-group-button cal\" type=\"button\" (click)=\"dateInput.toggle()\">\r\n <i class=\"fa fa-calendar\" aria-hidden=\"true\"></i>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- receiveCurrency -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'receiveCurrency'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Receive Currency</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"currencies\" bindValue=\"currencyCode\" placeholder=\"Select Receive Currency\"\r\n [clearable]=\"false\" formControlName=\"receiveCurrency\" required (change)=\"onBranchChange()\"\r\n [searchable]=\"true\" [searchFn]=\"currencySearch\" (open)=\"onOpen()\" (close)=\"onClose()\"\r\n [searchable]=\"isOpen\">\r\n\r\n <!-- Dropdown options -->\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n <!-- Selected value -->\r\n <ng-template ng-label-tmp let-item=\"item\">\r\n <div\r\n [title]=\"item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency)\">\r\n {{ item.currencyCode === 'All' ? 'All' : (item.currencyCode + ' - ' + item.currency) }}\r\n </div>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Send BusinessPartner -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'sendBusinessPartner'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Send Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"sendBusinessPartnerAgents\" bindLabel=\"name\" bindValue=\"id\"\r\n placeholder=\"Select Send Partner\" [clearable]=\"false\" formControlName=\"sendBusinessPartner\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('sendBusinessPartner')?.invalid && (searchForm.get('sendBusinessPartner')?.touched || formValidationError)}\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.name\">{{ item.name }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Recv BusinessPartner -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'recvBusinessPartner'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Recv Client<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"recvBusinessPartnerAgents\" bindLabel=\"name\" bindValue=\"id\"\r\n placeholder=\"Select Recv Partner\" [clearable]=\"false\" formControlName=\"recvBusinessPartner\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('recvBusinessPartner')?.invalid && (searchForm.get('recvBusinessPartner')?.touched || formValidationError)}\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.name\">{{ item.name }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Transaction Status (Single-select) -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'transactionStatusSingleSelect'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Txn. Status<span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"transactionStatuses\" bindLabel=\"transactionStatus\" bindValue=\"transactionStatus\"\r\n placeholder=\"Select Status\" [clearable]=\"false\" formControlName=\"transactionStatus\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('transactionStatus')?.invalid && (searchForm.get('transactionStatus')?.touched || formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- For Trial Balance - Accounts Report -->\r\n\r\n <!-- Business Line -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'businessLine'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Business Line</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"businessLines\" bindLabel=\"businessLine\" bindValue=\"businessLine\"\r\n placeholder=\"Select Business Line\" [clearable]=\"false\" formControlName=\"businessLine\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('businessLine')?.invalid && (searchForm.get('businessLine')?.touched || formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Year -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'financialYear'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Financial Year</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"financialYears\" bindLabel=\"financialYear\" bindValue=\"financialYear\"\r\n placeholder=\"Select Year\" [clearable]=\"false\" formControlName=\"financialYear\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('financialYear')?.invalid && (searchForm.get('financialYear')?.touched || formValidationError)}\"\r\n (change)=\"onSelectFinancialYear()\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- From Month -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'fromMonth'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">From Month</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"fromMonths\" bindLabel=\"period\" bindValue=\"pOrder\"\r\n placeholder=\"Select From Month\" [clearable]=\"false\" formControlName=\"fromMonth\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('fromMonth')?.invalid && (searchForm.get('fromMonth')?.touched|| formValidationError)}\"\r\n (change)=\"onSelectFromMonth()\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- To Month -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'toMonth'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">To Month</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"toMonths\" bindLabel=\"pMonthName\" bindValue=\"pMonth\"\r\n placeholder=\"Select To Month\" [clearable]=\"false\" formControlName=\"toMonth\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('toMonth')?.invalid && (searchForm.get('toMonth')?.touched|| formValidationError)}\"\r\n (change)=\"onSelectToMonth()\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- From Day -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'fromDay'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">From Day <span class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"fromDays\" bindLabel=\"individualDay\" bindValue=\"individualDate\"\r\n placeholder=\"Select From Day\" [clearable]=\"false\" formControlName=\"fromDay\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('fromDay')?.invalid && (searchForm.get('fromDay')?.touched|| formValidationError)}\"\r\n (change)=\"onSelectFromDay()\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- To Day -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'toDay'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">To Day<span style=\"margin-left: 1px;\"\r\n class=\"text-danger\">*</span></label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"toDays\" bindLabel=\"pDate\" bindValue=\"individualDate\" placeholder=\"Select To Day\"\r\n [clearable]=\"false\" formControlName=\"toDay\"\r\n [ngClass]=\"{'invalid-select': searchForm.get('toDay')?.invalid && (searchForm.get('toDay')?.touched|| formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Date Type -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'dateTypeForTrialBalanceAccounts'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Date Type</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"dateTypes\" bindLabel=\"dateTypeLabel\" bindValue=\"dateTypeCode\"\r\n placeholder=\"Select Date Type\" formControlName=\"dateType\" [clearable]=\"false\" required\r\n [ngClass]=\"{'invalid-select': searchForm.get('dateType')?.invalid && (searchForm.get('dateType')?.touched|| formValidationError)}\">\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n\r\n <!-- Account Status -->\r\n <div class=\"form-field\" *ngSwitchCase=\"'accountStatus'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Account Status</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select class=\"transaction-status-select\" [items]=\"accountStatuses\" bindLabel=\"statusName\"\r\n bindValue=\"statusCode\" [multiple]=\"true\" placeholder=\"Select Account Status\"\r\n formControlName=\"accountStatus\" [closeOnSelect]=\"false\" [clearable]=\"false\" [searchable]=\"false\"\r\n required\r\n [ngClass]=\"{'invalid-select': searchForm.get('accountStatus')?.invalid && (searchForm.get('accountStatus')?.touched|| formValidationError)}\">\r\n <ng-template ng-option-tmp let-item=\"item\" let-item$=\"item$\">\r\n <input type=\"checkbox\" [checked]=\"item$.selected\" /> {{ item.statusName }}\r\n </ng-template>\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n <!--Summary Report-->\r\n <div class=\"form-field\" *ngSwitchCase=\"'summaryReport'\">\r\n <div class=\"row align-items-center\">\r\n <div class=\"col-2\">\r\n <label class=\"form-label label-data\">Summary Report</label>\r\n </div>\r\n <div class=\"col-10\">\r\n <ng-select [items]=\"summaryReportTypes\" bindLabel=\"label\" bindValue=\"value\"\r\n [clearable]=\"false\" formControlName=\"summaryReport\">\r\n\r\n <ng-template ng-option-tmp let-item=\"item\">\r\n <span [title]=\"item.label\">{{ item.label }}</span>\r\n </ng-template>\r\n\r\n </ng-select>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n\r\n </div>\r\n\r\n </div>\r\n <div class=\"col-custom-1-5\">\r\n <!-- View Report Button (Always at Top-Right) -->\r\n <div class=\"form-field view-report-btn\">\r\n <button type=\"submit\" class=\"btn btn-report\">View</button>\r\n </div>\r\n </div>\r\n </div>\r\n </form>\r\n</section>\r\n<hr>\r\n<!-- Error Messages -->\r\n<div class=\"alert alert-danger mt-3\" *ngIf=\"formValidationError && hasSearched\">\r\n Please fill all mandatory fields\r\n</div>\r\n\r\n<div class=\"alert alert-danger mt-3\" *ngIf=\"errorMessage && loadingState === ComponentLoadingState.Error\">\r\n {{ errorMessage }}\r\n</div>", styles: ["@charset \"UTF-8\";.filter-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;grid-column:span 3}.form-field{display:flex;flex-direction:column;padding:0 4px 0 0!important;min-width:0}.col-custom-10-5{flex:0 0 87.5%!important;max-width:87.5%!important}.col-custom-1-5{flex:0 0 12.5%!important;max-width:12.5%!important;padding:0!important}::ng-deep .ng-select .ng-select-container .ng-value-container{overflow:hidden;flex-wrap:nowrap}::ng-deep .ng-select .ng-select-container .ng-value-container .ng-value{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}::ng-deep .ng-select .ng-select-container{height:32px!important;min-height:32px!important;font-size:12px!important;align-items:center}.form-label{margin-bottom:0!important}.date-group{height:32px!important}::ng-deep .transaction-status-select .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{padding:4px 0!important}::ng-deep .ng-select .ng-select-container .ng-value-container{padding-top:0}::ng-deep .ng-dropdown-panel .ng-option{font-size:12px}.btn-report{border-radius:4px;background-color:#8091a5;color:#fff!important;font-size:14px!important;height:32px;padding:4px 15px!important;margin-left:15px!important;width:auto!important;margin-right:7px!important}::ng-deep .ng-select .ng-select-container:focus-within{box-shadow:0 0 5px 3px #1877f2!important}::ng-deep .ng-select .ng-select-container:focus{box-shadow:0 0 5px 3px #1877f2!important}.fa-calendar{--fa: \"\\f073\" !important}.dpicker{border:1px solid #ccc!important;font-size:12px!important;font-weight:400!important;height:32px!important}.dpicker:focus{box-shadow:0 0 5px 3px #1877f2!important}.cal{height:32px!important;background-color:#1877f2;margin-left:0!important}.cal:focus{box-shadow:none!important}.label-data{font-weight:600!important;font-size:.7rem!important;line-height:1rem}@media (max-width: 768px){.filter-grid{grid-template-columns:1fr;gap:12px}}.input-group-button{background:none!important;border:1px solid #1877F2!important;background-color:#1877f2!important;border-radius:0 3px 3px 0!important;min-width:35px;margin-left:1px;height:32px!important;cursor:pointer}.input-group-button .fa{color:#fff}.input-group-button:focus{box-shadow:0 0 5px 3px #009ee054}.input-group-button:focus{outline:none!important;box-shadow:none!important}.Breadcrumb h1,.Breadcrumb h2{font-weight:700}.row{display:flex;flex-wrap:wrap;margin-right:0;margin-left:0}.col-2{padding-left:0}.col-10{padding-right:0}.col-custom-10-5{padding-right:0!important;padding-left:0}::ng-deep .invalid-select.ng-select>.ng-select-container{background-color:#d521211a;border:2px solid red!important}.invalid-date{background-color:#d521211a;border:2px solid red!important}\n"] }]
|
|
2125
2138
|
}], ctorParameters: function () { return [{ type: i1.ReportService }, { type: i2.FormBuilder }, { type: i3.ConfigService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { ReportName: [{
|
|
2126
2139
|
type: Input
|
|
2127
2140
|
}], searchClicked: [{
|
|
@@ -2131,4 +2144,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
|
|
|
2131
2144
|
}], initialFilters: [{
|
|
2132
2145
|
type: Input
|
|
2133
2146
|
}] } });
|
|
2134
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnRzLWxpYi9zcmMvbGliL3NoYXJlZC9zZWFyY2gtZmlsdGVyL3NlYXJjaC1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0cy1saWIvc3JjL2xpYi9zaGFyZWQvc2VhcmNoLWZpbHRlci9zZWFyY2gtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxxQkFBcUIsRUFBOEQsTUFBTSxtRUFBbUUsQ0FBQztBQUN0SyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJM0MsT0FBTyxLQUFLLGFBQWEsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7OztBQVFqRCxNQUFNLE9BQU8scUJBQXFCO0lBcUZoQyxZQUNVLGFBQTRCLEVBQzVCLEVBQWUsRUFDZixNQUFxQixFQUNyQixFQUFxQjtRQUhyQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQXZGckIs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QUFDLENBQUM7UUFFSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDOztrSEE1ekVVLHFCQUFxQjtzR0FBckIscUJBQXFCLHNNQ2xCbEMsazVnQ0F3bEJNOzJGRHRrQk8scUJBQXFCO2tCQU5qQyxTQUFTOytCQUNFLG1CQUFtQjswTEFNcEIsVUFBVTtzQkFBbEIsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBRUUsY0FBYztzQkFBdEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPbkRlc3Ryb3ksIE91dHB1dCwgQ2hhbmdlRGV0ZWN0b3JSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRm9ybUJ1aWxkZXIsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgQ29tcG9uZW50TG9hZGluZ1N0YXRlLCBDbGllbnQsIEJyYW5jaCwgQ3VycmVuY3ksIFByb2R1Y3QsIFRyYW5zYWN0aW9uU3RhdHVzLCBVc2VyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RyYW5zYWN0aW9uLWVucXVpcnktcmVwb3J0L3RyYW5zYWN0aW9uLWVucXVpcnkubW9kZWwnO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGZvcmtKb2luLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmaW5hbGl6ZSwgbWFwLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgUmVwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3JlcG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmZpZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmdiRGF0ZVN0cnVjdCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcclxuaW1wb3J0ICogYXMgYW5ndWxhckNvbW1vbiBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdsaWItc2VhcmNoLWZpbHRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3NlYXJjaC1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NlYXJjaC1maWx0ZXIuY29tcG9uZW50LnNjc3MnXVxyXG59KVxyXG5cclxuZXhwb3J0IGNsYXNzIFNlYXJjaEZpbHRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoKSBSZXBvcnROYW1lITogc3RyaW5nO1xyXG4gIEBPdXRwdXQoKSBzZWFyY2hDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgQE91dHB1dCgpIGZvcm1WYWxpZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcclxuICBzZWFyY2hGb3JtITogRm9ybUdyb3VwO1xyXG4gIEBJbnB1dCgpIGluaXRpYWxGaWx0ZXJzOiBhbnk7XHJcbiAgZm9ybVZhbGlkYXRpb25FcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBsb2FkaW5nU3RhdGU6IENvbXBvbmVudExvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICBDb21wb25lbnRMb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGU7XHJcbiAgaGFzU2VhcmNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIF9lcnJvck1lc3NhZ2U6IHN0cmluZyA9ICcnO1xyXG5cclxuICBjdXJyZW50VXNlcjogc3RyaW5nID0gJyc7XHJcbiAgdXNlcm5hbWVNaXNzaW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgdG9rZW4gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdhY2Nlc3NfdG9rZW4nKTtcclxuICBhcHBsaWNhdGlvblR5cGUgPSAnZXpyZW1pdCc7XHJcbiAgY29tcGFueUNvZGUgPSAnQkgnO1xyXG4gIHNlcnZpY2VVcmw6IHN0cmluZztcclxuICBwdWJsaWMgaXNPcGVuID0gZmFsc2U7XHJcblxyXG4gIGNsaWVudHMxOiBDbGllbnRbXSA9IFtdO1xyXG4gIGJyYW5jaGVzOiBCcmFuY2hbXSA9IFtdO1xyXG4gIHVzZXJzOiBVc2VyW10gPSBbXTtcclxuICBjdXJyZW5jaWVzOiBDdXJyZW5jeVtdID0gW107XHJcbiAgcHJvZHVjdHM6IFByb2R1Y3RbXSA9IFtdO1xyXG4gIHRyYW5zYWN0aW9uU3RhdHVzZXM6IFRyYW5zYWN0aW9uU3RhdHVzW10gPSBbXTtcclxuICBzdW1tYXJ5UmVwb3J0VHlwZXM6IGFueVtdID0gW107XHJcbiAgc2VsZWN0ZWRTdGF0dXNlczogc3RyaW5nW10gPSBbXTtcclxuICBzaG93U3RhdHVzRHJvcGRvd246IGJvb2xlYW4gPSBmYWxzZTtcclxuICB2aXNpYmxlRmllbGRLZXlzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHBhcmFtczogYW55O1xyXG4gIGNvdW50cmllczogYW55W10gPSBbXTtcclxuICB0cmFuc2FjdGlvblByb2R1Y3RzOiBhbnlbXSA9IFtdO1xyXG4gIGRhdGVUeXBlOiBhbnkgPSAxO1xyXG4gIGRhdGU6IGFueTtcclxuICBzZW5kQnVzaW5lc3NQYXJ0bmVyQWdlbnRzOiBhbnlbXSA9IFtdO1xyXG4gIHJlY3ZCdXNpbmVzc1BhcnRuZXJBZ2VudHM6IGFueVtdID0gW107XHJcbiAgY2xpZW50TmFtZTogc3RyaW5nO1xyXG4gIGNsaWVudFR5cGU6IHN0cmluZztcclxuICBkaXNhYmxlZERhdGU6IE5nYkRhdGVTdHJ1Y3Q7XHJcbiAgaXNTZWxlY3RBbGxDaGVja2VkID0gdHJ1ZTtcclxuICBlcnJvTWVzc2FnZTogc3RyaW5nID0gJ0Vycm9yIGluIExvYWRpbmcgRGF0YSc7XHJcblxyXG4gIC8vIGZvciBUcmlhbCBCYWxhbmNlIC0gQWNjb3VudHMgUmVwb3J0XHJcbiAgYnVzaW5lc3NVbml0czogYW55W10gPSBbXTtcclxuICBhY2NvdW50U3RhdHVzZXM6IGFueVtdID0gW107XHJcbiAgY3VycmVuY3k6IGFueVtdID0gW107XHJcbiAgZmluYW5jaWFsWWVhcnM6IGFueVtdID0gW107XHJcbiAgZnJvbU1vbnRoczogYW55W10gPSBbXTtcclxuICB0b01vbnRoczogYW55W10gPSBbXTtcclxuICBkYXRlVHlwZXM6IGFueVtdID0gW107XHJcbiAgZnJvbURheXM6IGFueVtdID0gW107XHJcbiAgdG9EYXlzOiBhbnlbXSA9IFtdO1xyXG4gIHBhcmFtRGF0ZURlZmF1bHQ6IGFueVtdID0gW107XHJcblxyXG4gIC8vIEZpZWxkIHZpc2liaWxpdHkgbWFwLCAnZnJvbURhdGUnLCAndG9EYXRlJywncHJvZHVjdCcsJ3VzZXJJZCcsJ2N1cnJlbmN5JywndHJhbnNhY3Rpb25TdGF0dXMnLCd0cmFuc2FjdGlvbk5vJ1xyXG4gIHZpc2libGVGaWVsZHNNYXA6IHsgW3JlcG9ydDogc3RyaW5nXTogc3RyaW5nW10gfSA9IHtcclxuICAgICdUcmFuc2FjdGlvbiBFbnF1aXJ5JzogWydjbGllbnQnLCAnZnJvbURhdGUnLCAndG9EYXRlJywgJ2JyYW5jaCcsICdwcm9kdWN0JywgJ2N1cnJlbmN5JywgJ3RyYW5zYWN0aW9uU3RhdHVzJywgJ3RyYW5zYWN0aW9uTm8nXSxcclxuICAgICdGQyBMZWRnZXInOiBbJ2NsaWVudCcsICdmcm9tRGF0ZScsICd0b0RhdGUnLCAnY3VycmVuY3knLCAncHJvZHVjdCddLFxyXG4gICAgJ0JyYW5jaCBBY3Rpdml0eSBTZW5kJzogWydjbGllbnQnLCAnZnJvbURhdGUnLCAndG9EYXRlJywgJ2JyYW5jaCcsICd0cmFuc2FjdGlvblByb2R1Y3QnLCAncmVjZWl2ZUN1cnJlbmN5JywgJ3RyYW5zYWN0aW9uU3RhdHVzJywgJ3NlbmRDb3VudHJ5JywgJ3JlY2VpdmVDb3VudHJ5J10sXHJcbiAgICAnQUNDIEdMIERldGFpbHMgRW5xdWlyeSc6IFsnZGF0ZVR5cGUnLCAnZGF0ZSddLFxyXG4gICAgJ0JyYW5jaCBBY3Rpdml0eSBSZWNlaXZlJzogWydjbGllbnQnLCAnZnJvbURhdGUnLCAndG9EYXRlJywgJ2JyYW5jaCcsICd0cmFuc2FjdGlvblByb2R1Y3QnLCAncmVjZWl2ZUN1cnJlbmN5JywgJ3RyYW5zYWN0aW9uU3RhdHVzJywgJ3NlbmRDb3VudHJ5JywgJ3JlY2VpdmVDb3VudHJ5J10sXHJcbiAgICAnQ2FuY2VsbGF0aW9uIFRyYW5zYWN0aW9uJzogWydjbGllbnQnLCAnZnJvbURhdGUnLCAndG9EYXRlJywgJ2JyYW5jaCcsICdzZW5kQ291bnRyeScsICdyZWNlaXZlQ291bnRyeScsICdwcm9kdWN0JywgJ3JlY2VpdmVDdXJyZW5jeSddLFxyXG4gICAgJ1JldmVudWUgUGVyIFRyYW5zYWN0aW9uJzogWydzZW5kQnVzaW5lc3NQYXJ0bmVyJywgJ2Zyb21EYXRlJywgJ3RvRGF0ZScsICdyZWN2QnVzaW5lc3NQYXJ0bmVyJywgJ3NlbmRDb3VudHJ5JywgJ3JlY2VpdmVDb3VudHJ5JywgJ3RyYW5zYWN0aW9uU3RhdHVzJ10sXHJcbiAgICAnU3RhdGVtZW50IG9mIEFjY291bnRzJzogWydjbGllbnQnLCAnZnJvbURhdGUnLCAndG9EYXRlJ10sXHJcbiAgICAnQWNjb3VudGluZyc6IFsnY2xpZW50JywgJ2Zyb21EYXRlJywgJ3RvRGF0ZScsICdicmFuY2gnLCAndHJhbnNhY3Rpb25Qcm9kdWN0JywgJ3NlbmRDdXJyZW5jeScsICd0cmFuc2FjdGlvblN0YXR1cycsICdzZW5kQ291bnRyeScsICdyZWNlaXZlQ291bnRyeSddLFxyXG4gICAgJ0NyZWRpdCBMaW1pdCBTdGF0dXMgRW5xdWlyeSc6IFsnY2xpZW50JywgJ2Zyb21EYXRlJywgJ3RvRGF0ZScsICd0cmFuc2FjdGlvblN0YXR1c1NpbmdsZVNlbGVjdCddLFxyXG4gICAgJ0Z1bmRpbmcnOiBbJ2Zyb21EYXRlJywgJ3RvRGF0ZSddLFxyXG4gICAgJ1RyaWFsIEJhbGFuY2UgLSBBY2NvdW50cyc6IFsnYnVzaW5lc3NVbml0JywgJ2FjY291bnRTdGF0dXMnLCAnY3VycmVuY3knLCAnZmluYW5jaWFsWWVhcicsICdmcm9tTW9udGgnLCAndG9Nb250aCcsICdkYXRlVHlwZUZvclRyaWFsQmFsYW5jZUFjY291bnRzJywgJ2Zyb21EYXknLCAndG9EYXknXSxcclxuICAgICdCcmFuY2ggQWN0aXZpdHkgU2VuZCBTdW1tYXJ5JzogWydjbGllbnQnLCAnZnJvbURhdGUnLCAndG9EYXRlJywgJ2JyYW5jaCcsICd0cmFuc2FjdGlvblByb2R1Y3QnLCAncmVjZWl2ZUN1cnJlbmN5JywgJ3RyYW5zYWN0aW9uU3RhdHVzJywgJ3NlbmRDb3VudHJ5JywgJ3JlY2VpdmVDb3VudHJ5JywgJ3N1bW1hcnlSZXBvcnQnXSxcclxuXHJcbiAgICAnVHJhbnNhY3Rpb24gTW9uaXRvcmluZyc6IFsnY2xpZW50JywgJ2Zyb21EYXRlJywgJ3RvRGF0ZScsICdicmFuY2gnLCAndHJhbnNhY3Rpb25Qcm9kdWN0JywgJ3JlY2VpdmVDdXJyZW5jeScsICd0cmFuc2FjdGlvblN0YXR1cycsICdzZW5kQ291bnRyeScsICdyZWNlaXZlQ291bnRyeSddLFxyXG4gICAgLy8gQWRkIG1vcmUgcmVwb3J0IHR5cGVzIGhlcmVcclxuICB9O1xyXG5cclxuICBnZXQgdmlzaWJsZUZpZWxkcygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlRmllbGRzTWFwW3RoaXMuUmVwb3J0TmFtZV0gfHwgW107XHJcbiAgfVxyXG5cclxuICBpc0ZpZWxkVmlzaWJsZShmaWVsZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy52aXNpYmxlRmllbGRzLmluY2x1ZGVzKGZpZWxkKTtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZXBvcnRTZXJ2aWNlOiBSZXBvcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBmYjogRm9ybUJ1aWxkZXIsXHJcbiAgICBwcml2YXRlIGNvbmZpZzogQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgY2Q6IENoYW5nZURldGVjdG9yUmVmXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNlcnZpY2VVcmwgPSB0aGlzLmNvbmZpZy5nZXQuc2VydmljZVVybDtcclxuICAgIGxldCBmb3NzaWxVc2VyID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZm9zc2lsdXNlcm5hbWUnKTtcclxuICAgIGxldCBlenJlbWl0VXNlciA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2V6cmVtaXR1c2VybmFtZScpO1xyXG5cclxuICAgIGlmIChmb3NzaWxVc2VyKSB0aGlzLmN1cnJlbnRVc2VyID0gZm9zc2lsVXNlcjtcclxuICAgIGVsc2UgaWYgKGV6cmVtaXRVc2VyKSB0aGlzLmN1cnJlbnRVc2VyID0gZXpyZW1pdFVzZXI7XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy51c2VybmFtZU1pc3NpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5jdXJyZW50VXNlciA9IHRoaXMuY3VycmVudFVzZXIucmVwbGFjZSgvXltcIiddKC4qKVtcIiddJC8sICckMScpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XHJcbiAgICB0aGlzLmRpc2FibGVkRGF0ZSA9IHtcclxuICAgICAgeWVhcjogdG9kYXkuZ2V0RnVsbFllYXIoKSxcclxuICAgICAgbW9udGg6IHRvZGF5LmdldE1vbnRoKCkgKyAxLFxyXG4gICAgICBkYXk6IHRvZGF5LmdldERhdGUoKVxyXG4gICAgfTtcclxuICAgIHRoaXMuY2hlY2tSZXBvcnQoKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrUmVwb3J0KCkge1xyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIlRyYW5zYWN0aW9uIEVucXVpcnlcIikge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XHJcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9EYXRlQ2hhbmdlcygpO1xyXG4gICAgICB0aGlzLmxvYWRJbml0aWFsRGF0YSgpO1xyXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uU3RhdHVzU3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQnJhbmNoIEFjdGl2aXR5IFNlbmRcIikge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XHJcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhKCk7XHJcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9EYXRlQ2hhbmdlcygpO1xyXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uU3RhdHVzU3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQUNDIEdMIERldGFpbHMgRW5xdWlyeVwiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJDYW5jZWxsYXRpb24gVHJhbnNhY3Rpb25cIikge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XHJcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhKCk7XHJcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9EYXRlQ2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PT0gXCJCcmFuY2ggQWN0aXZpdHkgUmVjZWl2ZVwiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcclxuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGEoKTtcclxuICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGVDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25TdGF0dXNTdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT09IFwiUmV2ZW51ZSBQZXIgVHJhbnNhY3Rpb25cIikge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVGb3JtKClcclxuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGEoKTtcclxuICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGVDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25TdGF0dXNTdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJTdGF0ZW1lbnQgb2YgQWNjb3VudHNcIikge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XHJcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhKCk7XHJcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9EYXRlQ2hhbmdlcygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkFjY291bnRpbmdcIikge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XHJcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhKCk7XHJcbiAgICAgIHRoaXMuc3Vic2NyaWJlVG9EYXRlQ2hhbmdlcygpO1xyXG4gICAgICB0aGlzLnRyYW5zYWN0aW9uU3RhdHVzU3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09PSBcIkNyZWRpdCBMaW1pdCBTdGF0dXMgRW5xdWlyeVwiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcclxuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGEoKTtcclxuICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGVDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiRnVuZGluZ1wiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcclxuICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGVDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiVHJpYWwgQmFsYW5jZSAtIEFjY291bnRzXCIpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xyXG4gICAgICB0aGlzLmxvYWRJbml0aWFsRGF0YSgpO1xyXG4gICAgfVxyXG4gICAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQnJhbmNoIEFjdGl2aXR5IFNlbmQgU3VtbWFyeVwiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcclxuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGEoKTtcclxuICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGVDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25TdGF0dXNTdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiVHJhbnNhY3Rpb24gTW9uaXRvcmluZ1wiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcclxuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGEoKTtcclxuICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGVDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25TdGF0dXNTdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWRJbml0aWFsRGF0YSgpIHtcclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gJ1RyYW5zYWN0aW9uIEVucXVpcnknKSB7XHJcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhZm9ydHhuRW5xdWlyeSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJCcmFuY2ggQWN0aXZpdHkgU2VuZFwiKSB7XHJcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhZm9yQnJhbmNoQWN0aXZpdHlTZW5kKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PT0gXCJCcmFuY2ggQWN0aXZpdHkgUmVjZWl2ZVwiKSB7XHJcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhZm9yQnJhbmNoQWN0aXZpdHlSZWNlaXZlKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQ2FuY2VsbGF0aW9uIFRyYW5zYWN0aW9uXCIpIHtcclxuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGFGb3JDYW5jZWxsYXRpb25SZXBvcnQoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT09IFwiUmV2ZW51ZSBQZXIgVHJhbnNhY3Rpb25cIikge1xyXG4gICAgICB0aGlzLmxvYWREYXRhRm9yUmV2ZW51ZVBlclRyYW5zYWN0aW9uUmVwb3J0KCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiU3RhdGVtZW50IG9mIEFjY291bnRzXCIpIHtcclxuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGFGb3JTdGF0ZW1lbnRPZkFjY291bnRzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQWNjb3VudGluZ1wiKSB7XHJcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhZm9yQWNjb3VudGluZygpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIlRyaWFsIEJhbGFuY2UgLSBBY2NvdW50c1wiKSB7XHJcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhRm9yVHJpYWxCYWxhbmNlQWNjb3VudHMoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09PSBcIkNyZWRpdCBMaW1pdCBTdGF0dXMgRW5xdWlyeVwiKSB7XHJcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhRm9yQ3JlZGl0TGltaXRTdGF0dXNFbnF1aXJ5KCk7XHJcbiAgICB9XHJcbiAgICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkJyYW5jaCBBY3Rpdml0eSBTZW5kIFN1bW1hcnlcIikge1xyXG4gICAgICB0aGlzLmxvYWRJbml0aWFsRGF0YWZvckJyYW5jaEFjdGl2aXR5U2VuZFN1bW1hcnkoKTtcclxuICAgIH1cclxuICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiVHJhbnNhY3Rpb24gTW9uaXRvcmluZ1wiKSB7XHJcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhZm9yVHJhbnNhY3Rpb25Nb25pdG9yaW5nKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuIGxvYWRJbml0aWFsRGF0YWZvckJyYW5jaEFjdGl2aXR5U2VuZFN1bW1hcnkoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nO1xyXG4gICAgZm9ya0pvaW4oe1xyXG4gICAgICBwYXJhbXM6IHRoaXMucmVwb3J0U2VydmljZS5nZXRQYXJhbXNGb3JTZW5kU3VtbWFyeVJlcG9ydCgpLnBpcGUoXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBwYXJhbXMnLCBlcnIpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICksXHJcbiAgICAgIGNsaWVudHM6IHRoaXMucmVwb3J0U2VydmljZS5nZXRQYXlJbkFnZW50Zm9yU2VuZFN1bW1hcnlSZXBvcnQoKS5waXBlKFxyXG4gICAgICAgIG1hcCgoY2xpZW50czogYW55W10pOiBDbGllbnRbXSA9PlxyXG4gICAgICAgICAgY2xpZW50cy5tYXAoKGNsaWVudCwgaW5kZXgpID0+ICh7XHJcbiAgICAgICAgICAgIGJ1c2luZXNzUGFydG5lck5hbWU6IGNsaWVudC5hZ2VudCxcclxuICAgICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyQ29kZTogY2xpZW50LmNvZGUsXHJcbiAgICAgICAgICAgIGRpc3BsYXlPcmRlcjogaW5kZXgsXHJcbiAgICAgICAgICAgIGNsaWVudFR5cGU6IFwiXCJcclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgICksXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBjbGllbnRzJywgZXJyKTtcclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfSkuc3Vic2NyaWJlKFxyXG4gICAgICB7XHJcbiAgICAgICAgbmV4dDogKHsgcGFyYW1zLCBjbGllbnRzIH0pID0+IHtcclxuICAgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRzMSA9IGNsaWVudHM7XHJcbiAgICAgICAgICB0aGlzLmNvdW50cmllcyA9IFsuLi5wYXJhbXM/LmNvdW50cmllc11cclxuICAgICAgICAgIHRoaXMuY3VycmVuY2llcyA9IFsuLi5wYXJhbXM/LmN1cnJlbmNpZXNdO1xyXG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvblN0YXR1c2VzID0gWy4uLnBhcmFtcz8udHJhbnNhY3Rpb25TdGF0dXNUeXBlc107XHJcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uUHJvZHVjdHMgPSBbLi4ucGFyYW1zPy50cmFuc2FjdGlvblByb2R1Y3RUeXBlc107XHJcbiAgICAgICAgICB0aGlzLnN1bW1hcnlSZXBvcnRUeXBlcyA9IFtcclxuICAgICAgICAgICAgeyBsYWJlbDogJ0RhdGUtV2lzZSBTdW1tYXJ5JywgdmFsdWU6ICdEYXRlLVdpc2UgU3VtbWFyeScgfSxcclxuICAgICAgICAgICAgeyBsYWJlbDogJ1RvdGFsIFN1bW1hcnknLCB2YWx1ZTogJ1RvdGFsIFN1bW1hcnknIH1cclxuICAgICAgICAgIF07XHJcblxyXG4gICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBjbGllbnQ6IHRoaXMuY2xpZW50czFbMF0uYnVzaW5lc3NQYXJ0bmVyQ29kZSB9KTtcclxuICAgICAgICAgIHRoaXMub25DbGllbnRDaGFuZ2UoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5leHBlY3RlZCBmb3JrSm9pbiBlcnJvcicsIGVycik7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG4gICAgXHJcbiAgbG9hZEluaXRpYWxEYXRhZm9yVHJhbnNhY3Rpb25Nb25pdG9yaW5nKCkge1xyXG4gICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nO1xyXG4gICAgZm9ya0pvaW4oe1xyXG4gICAgICBwYXJhbXM6IHRoaXMucmVwb3J0U2VydmljZS5nZXRQYXJhbXNGb3JUcmFuc2FjdGlvbk1vbml0b3JpbmdSZXBvcnQoKS5waXBlKFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgcGFyYW1zJywgZXJyKTtcclxuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgICB9KVxyXG4gICAgICApLFxyXG4gICAgICBjbGllbnRzOiB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0UGF5SW5BZ2VudGZvclRyYW5zYWN0aW9uTW9uaXRvcmluZ1JlcG9ydCgpLnBpcGUoXHJcbiAgICAgICAgbWFwKChjbGllbnRzOiBhbnlbXSk6IENsaWVudFtdID0+XHJcbiAgICAgICAgICBjbGllbnRzLm1hcCgoY2xpZW50LCBpbmRleCkgPT4gKHtcclxuICAgICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyTmFtZTogY2xpZW50LmFnZW50LFxyXG4gICAgICAgICAgICBidXNpbmVzc1BhcnRuZXJDb2RlOiBjbGllbnQuY29kZSxcclxuICAgICAgICAgICAgZGlzcGxheU9yZGVyOiBpbmRleCxcclxuICAgICAgICAgICAgY2xpZW50VHlwZTogXCJcIlxyXG4gICAgICAgICAgfSkpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGNsaWVudHMnLCBlcnIpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9KS5zdWJzY3JpYmUoXHJcbiAgICAgIHtcclxuICAgICAgICBuZXh0OiAoeyBwYXJhbXMsIGNsaWVudHMgfSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudHMxID0gY2xpZW50cztcclxuICAgICAgICAgIHRoaXMuY291bnRyaWVzID0gWy4uLnBhcmFtcz8uY291bnRyaWVzXVxyXG4gICAgICAgICAgdGhpcy5jdXJyZW5jaWVzID0gWy4uLnBhcmFtcz8uY3VycmVuY2llc107XHJcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uU3RhdHVzZXMgPSBbLi4ucGFyYW1zPy50cmFuc2FjdGlvblN0YXR1c1R5cGVzXTtcclxuICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Qcm9kdWN0cyA9IFsuLi5wYXJhbXM/LnRyYW5zYWN0aW9uUHJvZHVjdFR5cGVzXTtcclxuXHJcbiAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgY2xpZW50OiB0aGlzLmNsaWVudHMxWzBdLmJ1c2luZXNzUGFydG5lckNvZGUgfSk7XHJcbiAgICAgICAgICBpZiAodGhpcy5pbml0aWFsRmlsdGVycykge1xyXG4gICAgICAgICAgICAvL3BhdGNoIGRhdGFcclxuICAgICAgICAgICAgdGhpcy5hcHBseUluaXRpYWxGaWx0ZXJzKCk7XHJcbiAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgIHRoaXMub25DbGllbnRDaGFuZ2UoKTtcclxuICAgICAgICAgIC8vICBBVVRPIExPQUQgT05MWSBmb3Igcm91dGVkIGNhc2VcclxuICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxGaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgIHRoaXMub25TZWFyY2goKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5leHBlY3RlZCBmb3JrSm9pbiBlcnJvcicsIGVycik7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFwcGx5SW5pdGlhbEZpbHRlcnMoKSB7XHJcbiAgICBpZiAoIXRoaXMuaW5pdGlhbEZpbHRlcnMpIHJldHVybjtcclxuICAgIGNvbnN0IHBhdGNoOiBhbnkgPSB7fTtcclxuICAgIC8vIFRyYW5zYWN0aW9uIFN0YXR1cyAoU1RSSU5HIOKGkiBBUlJBWSlcclxuICAgIGlmICh0aGlzLmluaXRpYWxGaWx0ZXJzLnRyYW5zYWN0aW9uU3RhdHVzKSB7XHJcbiAgICAgIHBhdGNoLnRyYW5zYWN0aW9uU3RhdHVzID0gW3RoaXMuaW5pdGlhbEZpbHRlcnMudHJhbnNhY3Rpb25TdGF0dXNdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlY2VpdmUgQ291bnRyeVxyXG4gICAgaWYgKHRoaXMuaW5pdGlhbEZpbHRlcnMucmVjZWl2ZUNvdW50cnkpIHtcclxuICAgICAgcGF0Y2gucmVjZWl2ZUNvdW50cnkgPSB0aGlzLmluaXRpYWxGaWx0ZXJzLnJlY2VpdmVDb3VudHJ5O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFJlYWx0aW1lIGhhbmRsaW5nXHJcbiAgICBpZiAodGhpcy5pbml0aWFsRmlsdGVycy5pc1JlYWx0aW1lKSB7XHJcblxyXG4gICAgICBwYXRjaC5mcm9tRGF0ZSA9ICcnO1xyXG4gICAgICBwYXRjaC50b0RhdGUgPSAnJztcclxuICAgICAgLy9jbGVhclxyXG4gICAgICB0aGlzLnNlYXJjaEZvcm0uZ2V0KCdmcm9tRGF0ZScpPy5jbGVhclZhbGlkYXRvcnMoKTtcclxuICAgICAgdGhpcy5zZWFyY2hGb3JtLmdldCgndG9EYXRlJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG5cclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBPbmx5IG92ZXJyaWRlIGlmIHZhbHVlcyBleGlzdCAoVkVSWSBJTVBPUlRBTlQpXHJcbiAgICAgIGlmICh0aGlzLmluaXRpYWxGaWx0ZXJzLnRvRGF0ZSkge1xyXG4gICAgICAgIHBhdGNoLnRvRGF0ZSA9IHRoaXMuaW5pdGlhbEZpbHRlcnMudG9EYXRlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmluaXRpYWxGaWx0ZXJzLmZyb21EYXRlKSB7XHJcbiAgICAgICAgcGF0Y2guZnJvbURhdGUgPSB0aGlzLmluaXRpYWxGaWx0ZXJzLmZyb21EYXRlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnNlYXJjaEZvcm0uZ2V0KCdmcm9tRGF0ZScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0b0RhdGUnKT8uc2V0VmFsaWRhdG9ycyhWYWxpZGF0b3JzLnJlcXVpcmVkKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2luZ2xlIHBhdGNoIGNhbGwgKGF2b2lkcyBtdWx0aXBsZSB0cmlnZ2VycylcclxuICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHBhdGNoLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XHJcbiAgICB0aGlzLnNlYXJjaEZvcm0uZ2V0KCdmcm9tRGF0ZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RvRGF0ZScpPy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXRpYWxpemVGb3JtKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIlRyYW5zYWN0aW9uIEVucXVpcnlcIikge1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm0gPSB0aGlzLmZiLmdyb3VwKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNsaWVudDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgZnJvbURhdGU6IFtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHRvRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgYnJhbmNoOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBwcm9kdWN0OiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBjdXJyZW5jeTogWydBbGwnXSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uU3RhdHVzOiBbWydBbGwnXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICB0cmFuc2FjdGlvbk5vOiBbJyddXHJcbiAgICAgICAgfSxcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQUNDIEdMIERldGFpbHMgRW5xdWlyeVwiKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybSA9IHRoaXMuZmIuZ3JvdXAoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgZGF0ZVR5cGU6IFsxLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJCcmFuY2ggQWN0aXZpdHkgU2VuZFwiKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybSA9IHRoaXMuZmIuZ3JvdXAoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY2xpZW50OiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBmcm9tRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgdG9EYXRlOiBbbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBicmFuY2g6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHJlY2VpdmVDdXJyZW5jeTogWydBbGwnXSxcclxuICAgICAgICAgIHByb2R1Y3Q6IFsnQWxsJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICB0cmFuc2FjdGlvblN0YXR1czogW1snQWxsJ10sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgc2VuZENvdW50cnk6IFsnQWxsJ10sXHJcbiAgICAgICAgICByZWNlaXZlQ291bnRyeTogWydBbGwnXVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQnJhbmNoIEFjdGl2aXR5IFJlY2VpdmVcIikge1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm0gPSB0aGlzLmZiLmdyb3VwKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNsaWVudDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgZnJvbURhdGU6IFtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHRvRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgYnJhbmNoOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICByZWNlaXZlQ3VycmVuY3k6IFsnQWxsJ10sXHJcbiAgICAgICAgICBwcm9kdWN0OiBbJ0FsbCcsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25TdGF0dXM6IFtbJ0FsbCddLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHNlbmRDb3VudHJ5OiBbJ0FsbCddLFxyXG4gICAgICAgICAgcmVjZWl2ZUNvdW50cnk6IFsnQWxsJ11cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkNhbmNlbGxhdGlvbiBUcmFuc2FjdGlvblwiKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybSA9IHRoaXMuZmIuZ3JvdXAoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY2xpZW50OiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBmcm9tRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgdG9EYXRlOiBbbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBicmFuY2g6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHNlbmRDb3VudHJ5OiBbbnVsbF0sXHJcbiAgICAgICAgICByZWNlaXZlQ291bnRyeTogW251bGxdLFxyXG4gICAgICAgICAgcHJvZHVjdDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgcmVjZWl2ZUN1cnJlbmN5OiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT09IFwiUmV2ZW51ZSBQZXIgVHJhbnNhY3Rpb25cIikge1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm0gPSB0aGlzLmZiLmdyb3VwKHtcclxuICAgICAgICBzZW5kQnVzaW5lc3NQYXJ0bmVyOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgZnJvbURhdGU6IFtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICB0b0RhdGU6IFtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICByZWN2QnVzaW5lc3NQYXJ0bmVyOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgdHJhbnNhY3Rpb25TdGF0dXM6IFtbJ0FsbCddLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICBzZW5kQ291bnRyeTogWydBbGwnXSxcclxuICAgICAgICByZWNlaXZlQ291bnRyeTogWydBbGwnXVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJTdGF0ZW1lbnQgb2YgQWNjb3VudHNcIikge1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm0gPSB0aGlzLmZiLmdyb3VwKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNsaWVudDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgZnJvbURhdGU6IFtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHRvRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJBY2NvdW50aW5nXCIpIHtcclxuICAgICAgdGhpcy5zZWFyY2hGb3JtID0gdGhpcy5mYi5ncm91cChcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjbGllbnQ6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIGZyb21EYXRlOiBbbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICB0b0RhdGU6IFtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIGJyYW5jaDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgY3VycmVuY3k6IFsnQWxsJ10sXHJcbiAgICAgICAgICBwcm9kdWN0OiBbJ0FsbCcsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25TdGF0dXM6IFtbJ0FsbCddLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHNlbmRDb3VudHJ5OiBbJ0FsbCddLFxyXG4gICAgICAgICAgcmVjZWl2ZUNvdW50cnk6IFsnQWxsJ11cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PT0gXCJDcmVkaXQgTGltaXQgU3RhdHVzIEVucXVpcnlcIikge1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm0gPSB0aGlzLmZiLmdyb3VwKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNsaWVudDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgZnJvbURhdGU6IFtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHRvRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25TdGF0dXM6IFsnQWxsJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkZ1bmRpbmdcIikge1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm0gPSB0aGlzLmZiLmdyb3VwKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGZyb21EYXRlOiBbbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICB0b0RhdGU6IFtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJUcmlhbCBCYWxhbmNlIC0gQWNjb3VudHNcIikge1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm0gPSB0aGlzLmZiLmdyb3VwKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIC8vIEFkZGVkIGZpZWxkc1xyXG4gICAgICAgICAgYnVzaW5lc3NVbml0OiBbJ0FsbCddLFxyXG4gICAgICAgICAgYWNjb3VudFN0YXR1czogW1snQWN0aXZlJ11dLFxyXG4gICAgICAgICAgZmluYW5jaWFsWWVhcjogW25ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpXSwgICAvLyBkZWZhdWx0IHRvIGN1cnJlbnQgeWVhclxyXG4gICAgICAgICAgZnJvbU1vbnRoOiBbJyddLFxyXG4gICAgICAgICAgdG9Nb250aDogWycnXSxcclxuICAgICAgICAgIGRhdGVUeXBlOiBbJ1ZEJ10sICAgICAgICAgICAgICAvLyBleGFtcGxlIGRlZmF1bHRcclxuICAgICAgICAgIGZyb21EYXk6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHRvRGF5OiBbeyB2YWx1ZTogbnVsbCwgZGlzYWJsZWQ6IHRydWUgfSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBjdXJyZW5jeTogWydBbGwnXSxcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgICAgdGhpcy5yZXBvcnRTZXJ2aWNlLkdldFBhcmFtRGF0ZURlZmF1bHRGb3JUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydCgpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBsZXQgZmluYW5jaWFsTW9udGg6IHN0cmluZyA9IHJlc3BvbnNlWzBdLmZpbmFuY2lhbE1vbnRoO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coYGZpbmFuY2lhbE1vbnRoIGluIGluaXQgZm9ybSBvZiBUcmlhbCBCYWxhbmNlIC0gQWNjb3VudHM6ICR7ZmluYW5jaWFsTW9udGh9YCk7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIGZyb21Nb250aDogZmluYW5jaWFsTW9udGgsXHJcbiAgICAgICAgICAgIHRvTW9udGg6IGZpbmFuY2lhbE1vbnRoXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LCBlcnJvcjogKGVycikgPT4geyBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBkYXRhOicsIGVycik7IH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJCcmFuY2ggQWN0aXZpdHkgU2VuZCBTdW1tYXJ5XCIpIHtcclxuICAgICAgdGhpcy5zZWFyY2hGb3JtID0gdGhpcy5mYi5ncm91cChcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjbGllbnQ6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIGZyb21EYXRlOiBbbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICB0b0RhdGU6IFtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIGJyYW5jaDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgcmVjZWl2ZUN1cnJlbmN5OiBbJ0FsbCddLFxyXG4gICAgICAgICAgcHJvZHVjdDogWydBbGwnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uU3RhdHVzOiBbWydBbGwnXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBzZW5kQ291bnRyeTogWydBbGwnXSxcclxuICAgICAgICAgIHJlY2VpdmVDb3VudHJ5OiBbJ0FsbCddLFxyXG4gICAgICAgICAgc3VtbWFyeVJlcG9ydDogWydEYXRlLVdpc2UgU3VtbWFyeSddXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIlRyYW5zYWN0aW9uIE1vbml0b3JpbmdcIikge1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm0gPSB0aGlzLmZiLmdyb3VwKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNsaWVudDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgZnJvbURhdGU6IFtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHRvRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgYnJhbmNoOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICByZWNlaXZlQ3VycmVuY3k6IFsnQWxsJ10sXHJcbiAgICAgICAgICBwcm9kdWN0OiBbJ0FsbCcsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25TdGF0dXM6IFtbJ0FsbCddLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHNlbmRDb3VudHJ5OiBbJ0FsbCddLFxyXG4gICAgICAgICAgcmVjZWl2ZUNvdW50cnk6IFsnQWxsJ11cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkSW5pdGlhbERhdGFmb3JCcmFuY2hBY3Rpdml0eVNlbmQoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nO1xyXG4gICAgZm9ya0pvaW4oe1xyXG4gICAgICBwYXJhbXM6IHRoaXMucmVwb3J0U2VydmljZS5nZXRQYXJhbXMoKS5waXBlKFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgcGFyYW1zJywgZXJyKTtcclxuICAgICAgICAgIHJldHVybiBvZihudWxsKTtcclxuICAgICAgICB9KVxyXG4gICAgICApLFxyXG4gICAgICBjbGllbnRzOiB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0UGF5SW5BZ2VudHMoKS5waXBlKFxyXG4gICAgICAgIG1hcCgoY2xpZW50czogYW55W10pOiBDbGllbnRbXSA9PlxyXG4gICAgICAgICAgY2xpZW50cy5tYXAoKGNsaWVudCwgaW5kZXgpID0+ICh7XHJcbiAgICAgICAgICAgIGJ1c2luZXNzUGFydG5lck5hbWU6IGNsaWVudC5hZ2VudCxcclxuICAgICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyQ29kZTogY2xpZW50LmNvZGUsXHJcbiAgICAgICAgICAgIGRpc3BsYXlPcmRlcjogaW5kZXgsXHJcbiAgICAgICAgICAgIGNsaWVudFR5cGU6IFwiXCJcclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgICksXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBjbGllbnRzJywgZXJyKTtcclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfSkuc3Vic2NyaWJlKFxyXG4gICAgICB7XHJcbiAgICAgICAgbmV4dDogKHsgcGFyYW1zLCBjbGllbnRzIH0pID0+IHtcclxuICAgICAgICAgIHRoaXMucGFyYW1zID0gcGFyYW1zO1xyXG4gICAgICAgICAgdGhpcy5jbGllbnRzMSA9IGNsaWVudHM7XHJcbiAgICAgICAgICB0aGlzLmNvdW50cmllcyA9IFsuLi5wYXJhbXM/LmNvdW50cmllc11cclxuICAgICAgICAgIHRoaXMuY3VycmVuY2llcyA9IFsuLi5wYXJhbXM/LmN1cnJlbmNpZXNdO1xyXG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvblN0YXR1c2VzID0gWy4uLnBhcmFtcz8udHJhbnNhY3Rpb25TdGF0dXNUeXBlc107XHJcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uUHJvZHVjdHMgPSBbLi4ucGFyYW1zPy50cmFuc2FjdGlvblByb2R1Y3RUeXBlc107XHJcblxyXG4gICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBjbGllbnQ6IHRoaXMuY2xpZW50czFbMF0uYnVzaW5lc3NQYXJ0bmVyQ29kZX0pO1xyXG4gICAgICAgICAgdGhpcy5vbkNsaWVudENoYW5nZSgpO1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignVW5leHBlY3RlZCBmb3JrSm9pbiBlcnJvcicsIGVycik7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGxvYWRJbml0aWFsRGF0YWZvcnR4bkVucXVpcnkoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nO1xyXG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnJlcG9ydFNlcnZpY2VcclxuICAgICAgICAuZ2V0UGFnZUxvYWREYXRhKClcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnRvUHJvbWlzZSgpO1xyXG5cclxuICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICB0aGlzLmNsaWVudHMxID0gZGF0YS5jbGllbnRzIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuY3VycmVuY2llcyA9IGRhdGEuY3VycmVuY2llcyB8fCBbXTtcclxuICAgICAgICB0aGlzLnByb2R1Y3RzID0gZGF0YS5wcm9kdWN0cyB8fCBbXTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uU3RhdHVzZXMgPSAoZGF0YS50cmFuc2FjdGlvblN0YXR1c2VzIHx8IFtdKS5maWx0ZXIoXHJcbiAgICAgICAgICB0cyA9PiB0cy50cmFuc2FjdGlvblN0YXR1cyAhPT0gJydcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICF0aGlzLnRyYW5zYWN0aW9uU3RhdHVzZXMuc29tZShcclxuICAgICAgICAgICAgcyA9PiBzLnRyYW5zYWN0aW9uU3RhdHVzID09PSAnQWxsJ1xyXG4gICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvblN0YXR1c2VzLnVuc2hpZnQoe1xyXG4gICAgICAgICAgICB0cmFuc2FjdGlvblN0YXR1czogJ0FsbCcsXHJcbiAgICAgICAgICB9IGFzIFRyYW5zYWN0aW9uU3RhdHVzKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBwcm9kdWN0OiAnQWxsJyB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBjbGllbnQ6IHRoaXMuY2xpZW50czFbMF0uYnVzaW5lc3NQYXJ0bmVyQ29kZX0pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMub25DbGllbnRDaGFuZ2UoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdGYWlsZWQgdG8gbG9hZCBpbml0aWFsIGRhdGEnO1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5FcnJvcjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWRJbml0aWFsRGF0YWZvckJyYW5jaEFjdGl2aXR5UmVjZWl2ZSgpIHtcclxuICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICBmb3JrSm9pbih7XHJcbiAgICAgIHBhcmFtczogdGhpcy5yZXBvcnRTZXJ2aWNlLmdldEJyYW5jaEFjdGl2aXR5UmVjZWl2ZVBhcmFtcygpXHJcbiAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBwYXJhbXMnLCBlcnIpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgKSxcclxuICAgICAgcGF5b3V0QWdlbnRzOiB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0QWxsUGF5T3V0QWdlbnRzKClcclxuICAgICAgICAucGlwZShtYXAoKGNsaWVudHM6IGFueVtdKTogQ2xpZW50W10gPT5cclxuICAgICAgICAgIGNsaWVudHMubWFwKChjbGllbnQsIGluZGV4KSA9PiAoe1xyXG4gICAgICAgICAgICBidXNpbmVzc1BhcnRuZXJOYW1lOiBjbGllbnQuYWdlbnQsXHJcbiAgICAgICAgICAgIGJ1c2luZXNzUGFydG5lckNvZGU6IGNsaWVudC5jb2RlLFxyXG4gICAgICAgICAgICBkaXNwbGF5T3JkZXI6IGNsaWVudC5udW1iZXIsXHJcbiAgICAgICAgICAgIGNsaWVudFR5cGU6IFwiXCJcclxuICAgICAgICAgIH0pKVxyXG4gICAgICAgICksIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSkpXHJcbiAgICB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoeyBwYXJhbXMsIHBheW91dEFnZW50cyB9KSA9PiB7XHJcbiAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XHJcbiAgICAgICAgdGhpcy5jbGllbnRzMSA9IHBheW91dEFnZW50cztcclxuICAgICAgICB0aGlzLmNvdW50cmllcyA9IFsuLi5wYXJhbXM/LmNvdW50cmllc11cclxuICAgICAgICB0aGlzLmN1cnJlbmNpZXMgPSBbLi4ucGFyYW1zPy5jdXJyZW5jaWVzXTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uU3RhdHVzZXMgPSBbLi4ucGFyYW1zPy50cmFuc2FjdGlvblN0YXR1c1R5cGVzXTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uUHJvZHVjdHMgPSBbLi4ucGFyYW1zPy50cmFuc2FjdGlvblByb2R1Y3RUeXBlc107XHJcblxyXG4gICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgY2xpZW50OiB0aGlzLmNsaWVudHMxWzBdLmJ1c2luZXNzUGFydG5lckNvZGV9KTtcclxuICAgICAgICB0aGlzLm9uQ2xpZW50Q2hhbmdlKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuZXhwZWN0ZWQgZm9ya0pvaW4gZXJyb3InLCBlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICB9LFxyXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICBwcml2YXRlIGFzeW5jIGxvYWRJbml0aWFsRGF0YUZvckNhbmNlbGxhdGlvblJlcG9ydCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnJlcG9ydFNlcnZpY2VcclxuICAgICAgICAubG9hZERhdGFmb3JDYW5jYWxsYXRpb24oKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuY291bnRyaWVzID0gZGF0YS5jb3VudHJpZXMgPz8gW107XHJcbiAgICAgICAgdGhpcy5jbGllbnRzMSA9IChkYXRhLnBheUluQWdlbnRzID8/IFtdKS5tYXAoKGFnZW50KSA9PiAoe1xyXG4gICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyTmFtZTogYWdlbnQuYWdlbnQsXHJcbiAgICAgICAgICBidXNpbmVzc1BhcnRuZXJDb2RlOiBhZ2VudC5jb2RlXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMucHJvZHVjdHMgPSAoZGF0YS5wcm9kdWN0VHlwZXMgPz8gW10pLm1hcCgocHQpID0+ICh7XHJcbiAgICAgICAgICBwcm9kdWN0Q29kZTogcHQucHJvZHVjdENvZGUsXHJcbiAgICAgICAgICBwcm9kdWN0TmFtZTogcHQubmFtZVxyXG4gICAgICAgIH0pKTtcclxuICAgICAgICB0aGlzLmN1cnJlbmNpZXMgPSBkYXRhLmN1cnJlbmNpZXMgPz8gW107XHJcblxyXG4gICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgIHByb2R1Y3Q6IHRoaXMucHJvZHVjdHNbMF0/LnByb2R1Y3RDb2RlLFxyXG4gICAgICAgICAgcmVjZWl2ZUNvdW50cnk6IHRoaXMuY291bnRyaWVzWzBdPy5jb3VudHJ5LFxyXG4gICAgICAgICAgc2VuZENvdW50cnk6IHRoaXMuY291bnRyaWVzWzBdPy5jb3VudHJ5LFxyXG4gICAgICAgICAgcmVjZWl2ZUN1cnJlbmN5OiB0aGlzLmN1cnJlbmNpZXNbMF0/LmN1cnJlbmN5Q29kZVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGNsaWVudDogdGhpcy5jbGllbnRzMVswXS5idXNpbmVzc1BhcnRuZXJDb2RlfSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5vbkNsaWVudENoYW5nZSgpO1xyXG4gICAgICAgIFxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIE5vIGRhdGEgY2FzZVxyXG4gICAgICAgIHRoaXMuY291bnRyaWVzID0gW107XHJcbiAgICAgICAgdGhpcy5jbGllbnRzMSA9IFtdO1xyXG4gICAgICAgIHRoaXMucHJvZHVjdHMgPSBbXTtcclxuICAgICAgICB0aGlzLmN1cnJlbmNpZXMgPSBbXTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcblxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBjYW5jZWxsYXRpb24gcmVwb3J0IGRhdGEnLCBlcnJvcik7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0ZhaWxlZCB0byBsb2FkIGNhbmNlbGxhdGlvbiByZXBvcnQgZGF0YSc7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkVycm9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZERhdGFGb3JSZXZlbnVlUGVyVHJhbnNhY3Rpb25SZXBvcnQoKSB7XHJcbiAgICBjb25zdCAkYWdlbnRzID0gdGhpcy5yZXBvcnRTZXJ2aWNlLmdldEFnZW50c0ZvclJldmVudWVQZXJUcmFuc2FjdGlvbigpO1xyXG4gICAgY29uc3QgJHBhcmFtcyA9IHRoaXMucmVwb3J0U2VydmljZS5nZXRSZXZlbnVlUGVyVHJhbnNhY3Rpb25SZXBvcnRQYXJhbXMoKTtcclxuICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICBmb3JrSm9pbihbJGFnZW50cywgJHBhcmFtc10pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChbYWdlbnRzLCBwYXJhbXNdKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZW5kQnVzaW5lc3NQYXJ0bmVyQWdlbnRzID0gYWdlbnRzLmZpbHRlcihhZ2VudCA9PiBhZ2VudC50cmFuc2FjdGlvbkxlZyA9PT0gXCJQYXlJblwiKTtcclxuICAgICAgICB0aGlzLnJlY3ZCdXNpbmVzc1BhcnRuZXJBZ2VudHMgPSBhZ2VudHMuZmlsdGVyKGFnZW50ID0+IGFnZW50LnRyYW5zYWN0aW9uTGVnID09PSBcIlBheU91dFwiKTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uU3RhdHVzZXMgPSBwYXJhbXMudHJhbnNhY3Rpb25TdGF0dXNUeXBlc1xyXG4gICAgICAgIHRoaXMuY291bnRyaWVzID0gcGFyYW1zLmNvdW50cmllcztcclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgIHNlbmRCdXNpbmVzc1BhcnRuZXI6IHRoaXMuc2VuZEJ1c2luZXNzUGFydG5lckFnZW50c1swXS5pZCxcclxuICAgICAgICByZWN2QnVzaW5lc3NQYXJ0bmVyOiB0aGlzLnJlY3ZCdXNpbmVzc1BhcnRuZXJBZ2VudHNbMF0uaWRcclxuICAgICAgfSk7XHJcblxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICB9LFxyXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcblxyXG4gIGxvYWRJbml0aWFsRGF0YWZvckFjY291bnRpbmcoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nO1xyXG5cclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgY2xpZW50czogdGhpcy5yZXBvcnRTZXJ2aWNlLmdldENsaWVudHNGb3JBY2NvdW50aW5nUmVwb3J0KHRoaXMuY3VycmVudFVzZXIpLnBpcGUoXHJcbiAgICAgICAgbWFwKChjbGllbnRzOiBhbnlbXSk6IENsaWVudFtdID0+XHJcbiAgICAgICAgICBjbGllbnRzLm1hcCgoY2xpZW50LCBpbmRleCkgPT4gKHtcclxuICAgICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyTmFtZTogY2xpZW50LmFnZW50LFxyXG4gICAgICAgICAgICBidXNpbmVzc1BhcnRuZXJDb2RlOiBjbGllbnQuY29ycmVsYXRpb25JZCxcclxuICAgICAgICAgICAgZGlzcGxheU9yZGVyOiBpbmRleCxcclxuICAgICAgICAgICAgY2xpZW50VHlwZTogXCJcIlxyXG4gICAgICAgICAgfSkpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGNsaWVudHMnLCBlcnIpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgICB9KVxyXG4gICAgICApLFxyXG4gICAgICBwcm9kdWN0czogdGhpcy5yZXBvcnRTZXJ2aWNlLmdldFRyYW5zYWN0aW9uVHlwZXNGb3JBY2NvdW50aW5nUmVwb3J0KCkucGlwZShcclxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHRyYW5zYWN0aW9uIHR5cGVzJywgZXJyKTtcclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKSxcclxuICAgICAgY3VycmVuY2llczogdGhpcy5yZXBvcnRTZXJ2aWNlLmdldEFsbEN1cnJlbmNpZXNGb3JBY2NvdW50aW5nUmVwb3J0KCkucGlwZShcclxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGN1cnJlbmNpZXMnLCBlcnIpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgICB9KVxyXG4gICAgICApLFxyXG4gICAgICBzdGF0dXNlczogdGhpcy5yZXBvcnRTZXJ2aWNlLmdldEFsbFRyYW5zYWN0aW9uU3RhdHVzRm9yQWNjb3VudGluZ1JlcG9ydCgpLnBpcGUoXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBzdGF0dXNlcycsIGVycik7XHJcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICksXHJcbiAgICAgIGNvdW50cmllczogdGhpcy5yZXBvcnRTZXJ2aWNlLmdldEFsbENvdW50cmllc0ZvckFjY291bnRpbmdSZXBvcnQoKS5waXBlKFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgY291bnRyaWVzJywgZXJyKTtcclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHsgY2xpZW50cywgcHJvZHVjdHMsIGN1cnJlbmNpZXMsIHN0YXR1c2VzLCBjb3VudHJpZXMgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xpZW50czEgPSBjbGllbnRzO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Qcm9kdWN0cyA9IHByb2R1Y3RzO1xyXG4gICAgICAgIHRoaXMuY3VycmVuY2llcyA9IGN1cnJlbmNpZXM7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvblN0YXR1c2VzID0gc3RhdHVzZXM7XHJcbiAgICAgICAgdGhpcy5jb3VudHJpZXMgPSBjb3VudHJpZXM7XHJcblxyXG4gICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgY2xpZW50OiB0aGlzLmNsaWVudHMxWzBdLmJ1c2luZXNzUGFydG5lckNvZGV9KTtcclxuICAgICAgICB0aGlzLm9uQ2xpZW50Q2hhbmdlKCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiBlcnIgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuZXhwZWN0ZWQgZm9ya0pvaW4gZXJyb3IgaW4gQWNjb3VudGluZyBpbml0JywgZXJyKTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5FcnJvcjtcclxuICAgICAgfSxcclxuICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIH1cclxuXHJcbiAgbG9hZEluaXRpYWxEYXRhRm9yQ3JlZGl0TGltaXRTdGF0dXNFbnF1aXJ5KCkge1xyXG4gICAgY29uc3QgJGFnZW50cyA9IHRoaXMucmVwb3J0U2VydmljZS5nZXRDbGllbnRzRm9yQ3JlZGl0TGltaXRTdGF0dXNFbnF1aXJ5UmVwb3J0KCk7XHJcbiAgICBjb25zdCAkc3RhdHVzID0gdGhpcy5yZXBvcnRTZXJ2aWNlLmdldFRyYW5zYWN0aW9uVHlwZXNGb3JDcmVkaXRMaW1pdFN0YXR1c0VucXVpcnlSZXBvcnQoKTtcclxuICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICBmb3JrSm9pbih7XHJcbiAgICAgIGFnZW50czogJGFnZW50cy5waXBlKFxyXG4gICAgICAgIG1hcCgoY2xpZW50czogYW55W10pOiBDbGllbnRbXSA9PlxyXG4gICAgICAgICAgY2xpZW50cy5tYXAoKGNsaWVudCwgaW5kZXgpID0+ICh7XHJcbiAgICAgICAgICAgIGJ1c2luZXNzUGFydG5lck5hbWU6IGNsaWVudC5uYW1lLFxyXG4gICAgICAgICAgICBidXNpbmVzc1BhcnRuZXJDb2RlOiBjbGllbnQuY29kZSxcclxuICAgICAgICAgICAgZGlzcGxheU9yZGVyOiBpbmRleCxcclxuICAgICAgICAgICAgY2xpZW50VHlwZTogXCJcIlxyXG4gICAgICAgICAgfSkpXHJcbiAgICAgICAgKVxyXG4gICAgICApLFxyXG4gICAgICBzdGF0dXM6ICRzdGF0dXNcclxuICAgIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICh7IGFnZW50cywgc3RhdHVzIH0pID0+IHtcclxuICAgICAgICB0aGlzLmNsaWVudHMxID0gYWdlbnRzO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgY2xpZW50OiB0aGlzLmNsaWVudHMxWzBdLmJ1c2luZXNzUGFydG5lckNvZGUgfSk7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvblN0YXR1c2VzID0gc3RhdHVzO1xyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1VuZXhwZWN0ZWQgZm9ya0pvaW4gZXJyb3InLCBlcnIpO1xyXG4gICAgICB9LFxyXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSlcclxuICB9XHJcbiAgbG9hZEluaXRpYWxEYXRhRm9yVHJpYWxCYWxhbmNlQWNjb3VudHMoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nO1xyXG5cclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgYnVzaW5lc3NVbml0czogdGhpcy5yZXBvcnRTZXJ2aWNlLkdldEJ1c2luZXNzVW5pdEZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KClcclxuICAgICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiBvZihbXSkpKSxcclxuICAgICAgYWNjb3VudFN0YXR1c2VzOiB0aGlzLnJlcG9ydFNlcnZpY2UuR2V0QWNjb3VudFN0YXR1c0ZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KClcclxuICAgICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiBvZihbXSkpKSxcclxuICAgICAgZGF0ZVR5cGVzOiB0aGlzLnJlcG9ydFNlcnZpY2UuR2V0RGF0ZVR5cGVGb3JUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydCgpXHJcbiAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gb2YoW10pKSksXHJcbiAgICAgIGZpbmFuY2lhbFllYXJzOiB0aGlzLnJlcG9ydFNlcnZpY2UuR2V0WWVhckZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KClcclxuICAgICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiBvZihbXSkpKSxcclxuICAgICAgZnJvbU1vbnRoczogdGhpcy5yZXBvcnRTZXJ2aWNlLkdldEZyb21Nb250aHNGb3JUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydCgpXHJcbiAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gb2YoW10pKSksXHJcbiAgICAgIGN1cnJlbmN5OiB0aGlzLnJlcG9ydFNlcnZpY2UuR2V0Q3VycmVuY2llc0ZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KClcclxuICAgICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiBvZihbXSkpKSxcclxuICAgICAgcGFyYW1EYXRlRGVmYXVsdDogdGhpcy5yZXBvcnRTZXJ2aWNlLkdldFBhcmFtRGF0ZURlZmF1bHRGb3JUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydCgpXHJcbiAgICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gb2YoW10pKSlcclxuICAgIH0pXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIHN3aXRjaE1hcChyZXN1bHRzID0+IHtcclxuICAgICAgICAgIC8vIGFzc2lnbiBiYXNlIHJlc3VsdHNcclxuICAgICAgICAgIHRoaXMuYnVzaW5lc3NVbml0cyA9IHJlc3VsdHMuYnVzaW5lc3NVbml0cztcclxuICAgICAgICAgIHRoaXMuYWNjb3VudFN0YXR1c2VzID0gcmVzdWx0cy5hY2NvdW50U3RhdHVzZXM7XHJcbiAgICAgICAgICB0aGlzLmRhdGVUeXBlcyA9IHJlc3VsdHMuZGF0ZVR5cGVzO1xyXG4gICAgICAgICAgdGhpcy5maW5hbmNpYWxZZWFycyA9IHJlc3VsdHMuZmluYW5jaWFsWWVhcnNcclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IE51bWJlcihhLmZpbmFuY2lhbFllYXIpIC0gTnVtYmVyKGIuZmluYW5jaWFsWWVhcikpO1xyXG4gICAgICAgICAgdGhpcy5mcm9tTW9udGhzID0gcmVzdWx0cy5mcm9tTW9udGhzO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW5jaWVzID0gcmVzdWx0cy5jdXJyZW5jeTtcclxuICAgICAgICAgIHRoaXMucGFyYW1EYXRlRGVmYXVsdCA9IHJlc3VsdHMucGFyYW1EYXRlRGVmYXVsdDtcclxuXHJcbiAgICAgICAgICAvLyByZXNvbHZlIHllYXIvbW9udGggZm9yIGZyb21EYXlzICYgdG9Nb250aHNcclxuICAgICAgICAgIGNvbnN0IHllYXIgPSArKG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSk7XHJcbiAgICAgICAgICBjb25zdCBtb250aCA9IHRoaXMucGFyYW1EYXRlRGVmYXVsdFswXS5maW5hbmNpYWxNb250aDtcclxuXHJcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZFBNb250aCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21Nb250aCcpPy52YWx1ZTtcclxuICAgICAgICAgIGNvbnN0IGZyb21Nb250aE9iaiA9IHRoaXMuZnJvbU1vbnRocy5maW5kKG0gPT4gbS5wT3JkZXIgPT09IHNlbGVjdGVkUE1vbnRoKTtcclxuICAgICAgICAgIGNvbnN0IGZyb21Nb250aExhYmVsID0gZnJvbU1vbnRoT2JqPy5wZXJpb2Q7XHJcblxyXG4gICAgICAgICAgLy8gZmlyc3QgY2FsbCBmcm9tRGF5cyB3aXRoIHllYXIvbW9udGhcclxuICAgICAgICAgIHJldHVybiB0aGlzLnJlcG9ydFNlcnZpY2UuR2V0RnJvbURhdGVzRm9yVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQoXHJcbiAgICAgICAgICAgIHllYXIsIGZyb21Nb250aExhYmVsXHJcbiAgICAgICAgICApLnBpcGUoXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IG9mKFtdKSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChmcm9tRGF5cyA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mcm9tRGF5cyA9IGZyb21EYXlzO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgICAgIGZyb21EYXk6IHRoaXMucGFyYW1EYXRlRGVmYXVsdFswXT8udERhdGUsXHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGZpbmFuY2lhbFllYXIgPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCdmaW5hbmNpYWxZZWFyJyk/LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZyb21Nb250aCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21Nb250aCcpPy52YWx1ZTtcclxuICAgICAgICAgICAgICBjb25zdCB0b01vbnRoID0gdGhpcy5zZWFyY2hGb3JtLmdldCgndG9Nb250aCcpPy52YWx1ZTtcclxuICAgICAgICAgICAgICBjb25zdCBmcm9tRGF5ID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnZnJvbURheScpPy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdFBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgICAgICBZZWFyOiBmaW5hbmNpYWxZZWFyLFxyXG4gICAgICAgICAgICAgICAgRnJvbU1vbnRoOiBmcm9tTW9udGgsXHJcbiAgICAgICAgICAgICAgICBUb01vbnRoOiB0b01vbnRoLFxyXG4gICAgICAgICAgICAgICAgRnJvbURhdGU6IGZyb21EYXkgLy8gYXNzdW1pbmcgZnJvbURheSBpcyBhbHJlYWR5IGEgRGF0ZSBvciBJU08gc3RyaW5nXHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gbm93IGNoYWluIHRvOiB0b0RheXMgKyB0b01vbnRoc1xyXG4gICAgICAgICAgICAgIHJldHVybiBmb3JrSm9pbih7XHJcbiAgICAgICAgICAgICAgICB0b0RheXM6IHRoaXMucmVwb3J0U2VydmljZS5HZXRUb0RhdGVzRm9yVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQocmVxdWVzdFBheWxvYWQpXHJcbiAgICAgICAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IG9mKFtdKSkpLFxyXG4gICAgICAgICAgICAgICAgdG9Nb250aHM6IHRoaXMucmVwb3J0U2VydmljZS5HZXRUb01vbnRoc0ZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KHllYXIsIG1vbnRoKVxyXG4gICAgICAgICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiBvZihbXSkpKVxyXG4gICAgICAgICAgICAgIH0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoZXh0cmEgPT4gKHsgLi4ucmVzdWx0cywgZnJvbURheXMsIC4uLmV4dHJhIH0pKVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGFsbFJlc3VsdHMpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9EYXlzID0gYWxsUmVzdWx0cy50b0RheXM7XHJcbiAgICAgICAgICB0aGlzLnRvTW9udGhzID0gYWxsUmVzdWx0cy50b01vbnRocztcclxuXHJcbiAgICAgICAgICAvLyBwYXRjaCBmb3JtIGRlZmF1bHRzXHJcbiAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIGJ1c2luZXNzVW5pdDogdGhpcy5idXNpbmVzc1VuaXRzWzBdPy5jb21wYW55Q29kZSA/PyBudWxsLFxyXG4gICAgICAgICAgICBhY2NvdW50U3RhdHVzOiB0aGlzLmFjY291bnRTdGF0dXNlcy5sZW5ndGggPyBbdGhpcy5hY2NvdW50U3RhdHVzZXNbMF0uc3RhdHVzQ29kZV0gOiBbXSxcclxuICAgICAgICAgICAgZmluYW5jaWFsWWVhcjogdGhpcy5wYXJhbURhdGVEZWZhdWx0WzBdPy5maW5hbmNpYWxZZWFyID8/IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpLFxyXG4gICAgICAgICAgICBmcm9tTW9udGg6IHRoaXMucGFyYW1EYXRlRGVmYXVsdFswXT8uZmluYW5jaWFsTW9udGgsXHJcbiAgICAgICAgICAgIHRvTW9udGg6IHRoaXMucGFyYW1EYXRlRGVmYXVsdFswXT8uZmluYW5jaWFsTW9udGgsXHJcbiAgICAgICAgICAgIGRhdGVUeXBlOiB0aGlzLmRhdGVUeXBlc1swXT8uZGF0ZVR5cGVDb2RlID8/ICdWRCcsXHJcbiAgICAgICAgICAgIGZyb21EYXk6IHRoaXMuZnJvbURheXNbMF0/LnREYXRlLFxyXG4gICAgICAgICAgICB0b0RheTogdGhpcy50b0RheXMuZmluZChkID0+IGQuaXNUb2RheSk/LnZhbHVlID8/IG5ldyBEYXRlKCkuZ2V0RGF0ZSgpLFxyXG4gICAgICAgICAgICBjdXJyZW5jeTogdGhpcy5jdXJyZW5jeVswXT8uY3VycmVuY3lDb2RlID8/ICdBbGwnXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gbG9hZCBUcmlhbCBCYWxhbmNlIGRyb3Bkb3duIGRhdGEnLCBlcnIpO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuRXJyb3I7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3Vic2NyaWJlVG9EYXRlQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21EYXRlJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoZnJvbURhdGVTdHIgPT4ge1xyXG4gICAgICBjb25zdCB0b0RhdGVDb250cm9sID0gdGhpcy5zZWFyY2hGb3JtLmdldCgndG9EYXRlJyk7XHJcbiAgICAgIGNvbnN0IHRvRGF0ZVN0ciA9IHRvRGF0ZUNvbnRyb2w/LnZhbHVlO1xyXG4gICAgICBpZiAoIWZyb21EYXRlU3RyIHx8ICF0b0RhdGVTdHIpIHJldHVybjtcclxuICAgICAgY29uc3QgZnJvbURhdGUgPSBuZXcgRGF0ZShmcm9tRGF0ZVN0cik7XHJcbiAgICAgIGNvbnN0IHRvRGF0ZSA9IG5ldyBEYXRlKHRvRGF0ZVN0cik7XHJcbiAgICAgIGNvbnN0IG1heFRvRGF0ZSA9IG5ldyBEYXRlKGZyb21EYXRlKTtcclxuICAgICAgbWF4VG9EYXRlPy5zZXREYXRlKGZyb21EYXRlLmdldERhdGUoKSArIDMwKTtcclxuICAgICAgaWYgKHRvRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKSA+IG1heFRvRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKSB8fCB0b0RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCkgPCBmcm9tRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKSkge1xyXG4gICAgICAgIG1heFRvRGF0ZS5zZXRIb3VycygxMiwgMCwgMCwgMCk7XHJcbiAgICAgICAgdG9EYXRlQ29udHJvbD8ucGF0Y2hWYWx1ZShtYXhUb0RhdGUudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0pO1xyXG4gICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4gdG9EYXRlQ29udHJvbD8ucGF0Y2hWYWx1ZShtYXhUb0RhdGUudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0pKTtcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRpc2FibGVkRGF0ZSA9IHRoaXMudG9OZ2JEYXRlU3RydWN0KGZyb21EYXRlKTtcclxuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB0aGlzLmRpc2FibGVkRGF0ZSA9IHRoaXMudG9OZ2JEYXRlU3RydWN0KGZyb21EYXRlKSk7XHJcblxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zZWFyY2hGb3JtLmdldCgndG9EYXRlJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodG9EYXRlU3RyID0+IHtcclxuICAgICAgY29uc3QgZnJvbURhdGVDb250cm9sID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnZnJvbURhdGUnKTtcclxuICAgICAgY29uc3QgZnJvbURhdGVTdHIgPSBmcm9tRGF0ZUNvbnRyb2w/LnZhbHVlO1xyXG4gICAgICBpZiAoIXRvRGF0ZVN0ciB8fCAhZnJvbURhdGVTdHIpIHJldHVybjtcclxuICAgICAgY29uc3QgdG9EYXRlID0gbmV3IERhdGUodG9EYXRlU3RyKTtcclxuICAgICAgY29uc3QgZnJvbURhdGUgPSBuZXcgRGF0ZShmcm9tRGF0ZVN0cik7XHJcbiAgICAgIHRoaXMuZGlzYWJsZWREYXRlID0gdGhpcy50b05nYkRhdGVTdHJ1Y3QoZnJvbURhdGUpO1xyXG4gICAgICBjb25zdCBtaW5Gcm9tRGF0ZSA9IG5ldyBEYXRlKHRvRGF0ZSk7XHJcbiAgICAgIG1pbkZyb21EYXRlPy5zZXREYXRlKHRvRGF0ZS5nZXREYXRlKCkgLSAzMCk7XHJcbiAgICAgIGlmIChmcm9tRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKSA8IG1pbkZyb21EYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApKSB7XHJcbiAgICAgICAgbWluRnJvbURhdGUuc2V0SG91cnMoMTIsIDAsIDAsIDApO1xyXG4gICAgICAgIGZyb21EYXRlQ29udHJvbD8ucGF0Y2hWYWx1ZShtaW5Gcm9tRGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSk7XHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmcm9tRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKSA+IHRvRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKSkge1xyXG4gICAgICAgIGZyb21EYXRlQ29udHJvbD8ucGF0Y2hWYWx1ZShtaW5Gcm9tRGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSk7XHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2FkSW5pdGlhbERhdGFGb3JTdGF0ZW1lbnRPZkFjY291bnRzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZztcclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgY2xpZW50cyA9IGF3YWl0IHRoaXMucmVwb3J0U2VydmljZVxyXG4gICAgICAgIC5sb2FkQ2xpZW50c0ZvclN0YXRlbWVudE9mQWNjb3VudHMoKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgICBpZiAoY2xpZW50cyAmJiBjbGllbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmNsaWVudHMxID0gY2xpZW50cy5tYXAoKGMsIGluZGV4KSA9PiAoe1xyXG4gICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyQ29kZTogYy5hZ2VudElELFxyXG4gICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyTmFtZTogYy5hZ2VudE5hbWUsXHJcbiAgICAgICAgICBkaXNwbGF5T3JkZXI6IGluZGV4LFxyXG4gICAgICAgICAgY2xpZW50VHlwZTogYy5jbGllbnRUeXBlXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2xpZW50czEgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jbGllbnRzMS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICBjbGllbnQ6IHRoaXMuY2xpZW50czFbMF0uYnVzaW5lc3NQYXJ0bmVyQ29kZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMub25DbGllbnRDaGFuZ2UoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcblxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBTdGF0ZW1lbnQgb2YgQWNjb3VudHMgY2xpZW50cycsIGVycm9yKTtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRmFpbGVkIHRvIGxvYWQgY2xpZW50cyBmb3IgU3RhdGVtZW50IG9mIEFjY291bnRzJztcclxuICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuRXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkNsaWVudENoYW5nZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiVHJhbnNhY3Rpb24gRW5xdWlyeVwiKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2xpZW50ID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnY2xpZW50Jyk/LnZhbHVlO1xyXG4gICAgICBpZiAoIXNlbGVjdGVkQ2xpZW50KSByZXR1cm47XHJcbiAgICAgIHRoaXMuYnJhbmNoZXMgPSBbXTtcclxuICAgICAgaWYgKHNlbGVjdGVkQ2xpZW50ID09PSAnQWxsJykge1xyXG4gICAgICAgIHRoaXMuYnJhbmNoZXMgPSBbe1xyXG4gICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyQnJhbmNoOiAnQWxsJyxcclxuICAgICAgICAgIGJ1c2luZXNzUGFydG5lckJyYW5jaF9Db3JyZWxhdGlvbklkOiAnQWxsJyxcclxuICAgICAgICAgIGJyYW5jaENvZGU6ICdBbGwnLFxyXG4gICAgICAgICAgYmFuazogJ0FsbCcsXHJcbiAgICAgICAgICBudW1iZXI6IDFcclxuICAgICAgICB9XTtcclxuICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGJyYW5jaDogdGhpcy5icmFuY2hlc1swXS5icmFuY2hDb2RlIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRCcmFuY2hlc0J5QWdlbnQoc2VsZWN0ZWRDbGllbnQpXHJcbiAgICAgICAgICBdKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRmFpbGVkIHRvIGxvYWQgYnJhbmNoJztcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJCcmFuY2ggQWN0aXZpdHkgU2VuZFwiKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2xpZW50ID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnY2xpZW50Jyk/LnZhbHVlO1xyXG4gICAgICBpZiAoIXNlbGVjdGVkQ2xpZW50KSByZXR1cm47XHJcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICAgIHRoaXMuYnJhbmNoZXMgPSBbXTtcclxuICAgICAgaWYgKHNlbGVjdGVkQ2xpZW50ID09PSAnQWxsJykge1xyXG4gICAgICAgIHRoaXMuYnJhbmNoZXMgPSBbe1xyXG4gICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyQnJhbmNoOiAnQWxsJyxcclxuICAgICAgICAgIGJ1c2luZXNzUGFydG5lckJyYW5jaF9Db3JyZWxhdGlvbklkOiAnQWxsJyxcclxuICAgICAgICAgIGJyYW5jaENvZGU6ICdBbGwnLFxyXG4gICAgICAgICAgYmFuazogJ0FsbCcsXHJcbiAgICAgICAgICBudW1iZXI6IDFcclxuICAgICAgICB9XTtcclxuICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGJyYW5jaDogdGhpcy5icmFuY2hlc1swXS5icmFuY2hDb2RlIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0QnJhbmNoQnlBZ2VudChzZWxlY3RlZENsaWVudCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYnJhbmNoZXMgPSBkYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGJyYW5jaDogdGhpcy5icmFuY2hlc1swXS5icmFuY2hDb2RlIH0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PT0gXCJCcmFuY2ggQWN0aXZpdHkgUmVjZWl2ZVwiKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2xpZW50ID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnY2xpZW50Jyk/LnZhbHVlO1xyXG4gICAgICBpZiAoIXNlbGVjdGVkQ2xpZW50KSByZXR1cm47XHJcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICAgIHRoaXMuYnJhbmNoZXMgPSBbXTtcclxuICAgICAgaWYgKHNlbGVjdGVkQ2xpZW50ID09PSAnQWxsJykge1xyXG4gICAgICAgIHRoaXMuYnJhbmNoZXMgPSBbe1xyXG4gICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyQnJhbmNoOiAnQWxsJyxcclxuICAgICAgICAgIGJ1c2luZXNzUGFydG5lckJyYW5jaF9Db3JyZWxhdGlvbklkOiAnQWxsJyxcclxuICAgICAgICAgIGJyYW5jaENvZGU6ICdBbGwnLFxyXG4gICAgICAgICAgYmFuazogJ0FsbCcsXHJcbiAgICAgICAgICBudW1iZXI6IDFcclxuICAgICAgICB9XTtcclxuICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGJyYW5jaDogdGhpcy5icmFuY2hlc1swXS5icmFuY2hDb2RlIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0QnJhbmNoQWN0aXZpdHlSZWNlaXZlUGF5b3V0QWdlbnRCcmFuY2goc2VsZWN0ZWRDbGllbnQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJyYW5jaGVzID0gZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBicmFuY2g6IHRoaXMuYnJhbmNoZXNbMF0uYnJhbmNoQ29kZSB9KTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJDYW5jZWxsYXRpb24gVHJhbnNhY3Rpb25cIikge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nO1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xyXG4gICAgICBjb25zdCBzZWxlY3RlZENsaWVudCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2NsaWVudCcpPy52YWx1ZTtcclxuICAgICAgdGhpcy5icmFuY2hlcyA9IFtdO1xyXG4gICAgICBpZiAoc2VsZWN0ZWRDbGllbnQgPT09ICdBbGwnKSB7XHJcbiAgICAgICAgdGhpcy5icmFuY2hlcyA9IFt7XHJcbiAgICAgICAgICBidXNpbmVzc1BhcnRuZXJCcmFuY2g6ICdBbGwnLFxyXG4gICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyQnJhbmNoX0NvcnJlbGF0aW9uSWQ6ICdBbGwnLFxyXG4gICAgICAgICAgYnJhbmNoQ29kZTogJ0FsbCcsXHJcbiAgICAgICAgICBiYW5rOiAnQWxsJyxcclxuICAgICAgICAgIG51bWJlcjogMVxyXG4gICAgICAgIH1dO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgYnJhbmNoOiB0aGlzLmJyYW5jaGVzWzBdLmJyYW5jaENvZGUgfSk7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5yZXBvcnRTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRCcmFuY2hlcyhzZWxlY3RlZENsaWVudClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5icmFuY2hlcyA9IGRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgYnJhbmNoOiB0aGlzLmJyYW5jaGVzWzBdLmJyYW5jaENvZGUgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuXHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGJyYW5jaGVzJywgZXJyb3IpO1xyXG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRmFpbGVkIHRvIGxvYWQgYnJhbmNoIGRhdGEnO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuRXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIlN0YXRlbWVudCBvZiBBY2NvdW50c1wiKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XHJcbiAgICAgIGNvbnN0IENsaWVudElkID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnY2xpZW50Jyk/LnZhbHVlO1xyXG4gICAgICBjb25zdCBzZWxlY3RlZENsaWVudCA9IHRoaXMuY2xpZW50czEuZmluZChjID0+IGMuYnVzaW5lc3NQYXJ0bmVyQ29kZSA9PT0gQ2xpZW50SWQpO1xyXG4gICAgICB0aGlzLmNsaWVudE5hbWUgPSBzZWxlY3RlZENsaWVudD8uYnVzaW5lc3NQYXJ0bmVyTmFtZSB8fCAnJztcclxuICAgICAgdGhpcy5jbGllbnRUeXBlID0gc2VsZWN0ZWRDbGllbnQ/LmNsaWVudFR5cGUgfHwgJyc7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGFjY291bnRpbmcgcmVwb3J0XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQWNjb3VudGluZ1wiKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2xpZW50ID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnY2xpZW50Jyk/LnZhbHVlO1xyXG4gICAgICBpZiAoIXNlbGVjdGVkQ2xpZW50KSByZXR1cm47XHJcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcblxyXG4gICAgICB0aGlzLmJyYW5jaGVzID0gW107XHJcbiAgICAgIGlmIChzZWxlY3RlZENsaWVudCA9PT0gJ0FsbCcpIHtcclxuICAgICAgICB0aGlzLmJyYW5jaGVzID0gW3tcclxuICAgICAgICAgIGJ1c2luZXNzUGFydG5lckJyYW5jaDogJ0FsbCcsXHJcbiAgICAgICAgICBidXNpbmVzc1BhcnRuZXJCcmFuY2hfQ29ycmVsYXRpb25JZDogJ0FsbCcsXHJcbiAgICAgICAgICBicmFuY2hDb2RlOiAnQWxsJyxcclxuICAgICAgICAgIGJhbms6ICdBbGwnLFxyXG4gICAgICAgICAgbnVtYmVyOiAxXHJcbiAgICAgICAgfV07XHJcbiAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBicmFuY2g6IHRoaXMuYnJhbmNoZXNbMF0uYnJhbmNoQ29kZSB9KTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRTZXJ2aWNlLmdldEJyYW5jaEJ5QWdlbnRGb3JBY2NvdW50aW5nUmVwb3J0KHRoaXMuY3VycmVudFVzZXIsIHNlbGVjdGVkQ2xpZW50KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5icmFuY2hlcyA9IGRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgYnJhbmNoOiB0aGlzLmJyYW5jaGVzWzBdLmJyYW5jaENvZGUgfSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQnJhbmNoIEFjdGl2aXR5IFNlbmRcIikge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nO1xyXG4gICAgICBjb25zdCBzZWxlY3RlZENsaWVudCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2NsaWVudCcpPy52YWx1ZTtcclxuICAgICAgdGhpcy5icmFuY2hlcyA9IFtdO1xyXG4gICAgICBpZiAoc2VsZWN0ZWRDbGllbnQgPT09ICdBbGwnKSB7XHJcbiAgICAgICAgdGhpcy5icmFuY2hlcyA9IFt7XHJcbiAgICAgICAgICBidXNpbmVzc1BhcnRuZXJCcmFuY2g6ICdBbGwnLFxyXG4gICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyQnJhbmNoX0NvcnJlbGF0aW9uSWQ6ICdBbGwnLFxyXG4gICAgICAgICAgYnJhbmNoQ29kZTogJ0FsbCcsXHJcbiAgICAgICAgICBiYW5rOiAnQWxsJyxcclxuICAgICAgICAgIG51bWJlcjogMVxyXG4gICAgICAgIH1dO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgYnJhbmNoOiB0aGlzLmJyYW5jaGVzWzBdLmJyYW5jaENvZGUgfSk7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVwb3J0U2VydmljZS5nZXRCcmFuY2hCeUFnZW50KHNlbGVjdGVkQ2xpZW50KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5icmFuY2hlcyA9IGRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgYnJhbmNoOiB0aGlzLmJyYW5jaGVzWzBdLmJyYW5jaENvZGUgfSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiVHJhbnNhY3Rpb24gTW9uaXRvcmluZ1wiKSB7XHJcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZENsaWVudCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2NsaWVudCcpPy52YWx1ZTtcclxuICAgICAgICAgIGlmICghc2VsZWN0ZWRDbGllbnQpIHJldHVybjtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICAgICAgICB0aGlzLmJyYW5jaGVzID0gW107XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRDbGllbnQgPT09ICdBbGwnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnJhbmNoZXMgPSBbe1xyXG4gICAgICAgICAgICAgIGJ1c2luZXNzUGFydG5lckJyYW5jaDogJ0FsbCcsXHJcbiAgICAgICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyQnJhbmNoX0NvcnJlbGF0aW9uSWQ6ICdBbGwnLFxyXG4gICAgICAgICAgICAgIGJyYW5jaENvZGU6ICdBbGwnLFxyXG4gICAgICAgICAgICAgIGJhbms6ICdBbGwnLFxyXG4gICAgICAgICAgICAgIG51bWJlcjogMVxyXG4gICAgICAgICAgICB9XTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBicmFuY2g6IHRoaXMuYnJhbmNoZXNbMF0uYnJhbmNoQ29kZSB9KTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0QnJhbmNoQnlBZ2VudEZvclRyYW5zYWN0aW9uTW9uaXRvcmluZ1JlcG9ydChzZWxlY3RlZENsaWVudCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5icmFuY2hlcyA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGJyYW5jaDogdGhpcy5icmFuY2hlc1swXS5icmFuY2hDb2RlIH0pO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQnJhbmNoIEFjdGl2aXR5IFNlbmQgU3VtbWFyeVwiKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2xpZW50ID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnY2xpZW50Jyk/LnZhbHVlO1xyXG4gICAgICB0aGlzLmJyYW5jaGVzID0gW107XHJcbiAgICAgIGlmIChzZWxlY3RlZENsaWVudCA9PT0gJ0FsbCcpIHtcclxuICAgICAgICB0aGlzLmJyYW5jaGVzID0gW3tcclxuICAgICAgICAgIGJ1c2luZXNzUGFydG5lckJyYW5jaDogJ0FsbCcsXHJcbiAgICAgICAgICBidXNpbmVzc1BhcnRuZXJCcmFuY2hfQ29ycmVsYXRpb25JZDogJ0FsbCcsXHJcbiAgICAgICAgICBicmFuY2hDb2RlOiAnQWxsJyxcclxuICAgICAgICAgIGJhbms6ICdBbGwnLFxyXG4gICAgICAgICAgbnVtYmVyOiAxXHJcbiAgICAgICAgfV07XHJcbiAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBicmFuY2g6IHRoaXMuYnJhbmNoZXNbMF0uYnJhbmNoQ29kZSB9KTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRTZXJ2aWNlLmdldEJyYW5jaEJ5QWdlbnRGb3JTZW5kU3VtbWFyeVJlcG9ydChzZWxlY3RlZENsaWVudCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYnJhbmNoZXMgPSBkYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGJyYW5jaDogdGhpcy5icmFuY2hlc1swXS5icmFuY2hDb2RlIH0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBcclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2FkQnJhbmNoZXNCeUFnZW50KGFnZW50Q29kZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBicmFuY2hlcyA9IGF3YWl0IHRoaXMucmVwb3J0U2VydmljZVxyXG4gICAgICAuZ2V0QnJhbmNoZXNCeUFnZW50KGFnZW50Q29kZSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICB0aGlzLmJyYW5jaGVzID0gYnJhbmNoZXMgfHwgW107XHJcblxyXG4gICAgaWYgKHRoaXMuYnJhbmNoZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgYnJhbmNoOiB0aGlzLmJyYW5jaGVzWzBdLmJyYW5jaENvZGUgfSk7XHJcbiAgICAgIC8vIGF3YWl0IHRoaXMubG9hZFVzZXJzQnlCcmFuY2goYWdlbnRDb2RlLCB0aGlzLmJyYW5jaGVzWzBdLmJyYW5jaENvZGUpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmJyYW5jaGVzLnNvbWUoYiA9PiBiLmJyYW5jaENvZGUgPT09ICdBbGwnKSkge1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGJyYW5jaDogJ0FsbCcgfSk7XHJcbiAgICAgIC8vIGF3YWl0IHRoaXMubG9hZFVzZXJzQnlCcmFuY2goYWdlbnRDb2RlLCAnQWxsJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGJyYW5jaDogJycgfSk7XHJcbiAgICAgIHRoaXMudXNlcnMgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9uQnJhbmNoQ2hhbmdlKCk6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIlRyYW5zYWN0aW9uIEVucXVpcnlcIikge1xyXG4gICAgICB0aGlzLmhhc1NlYXJjaGVkID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ2xpY2tlZC5lbWl0KHRoaXMuYnVpbGRTZWFyY2hDcml0ZXJpYSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQnJhbmNoIEFjdGl2aXR5IFNlbmRcIikge1xyXG4gICAgICB0aGlzLmhhc1NlYXJjaGVkID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ2xpY2tlZC5lbWl0KHRoaXMuYnVpbGRTZWFyY2hDcml0ZXJpYSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQUNDIEdMIERldGFpbHMgRW5xdWlyeVwiKSB7XHJcbiAgICAgIHRoaXMuaGFzU2VhcmNoZWQgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hGb3JtLmludmFsaWQpIHtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSBmYWxzZTtcclxuICAgICAgY29uc3QgbW9kYWwgPSB7XHJcbiAgICAgICAgc2VsZWN0ZWREYXRlVHlwZTogdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzW1wiZGF0ZVR5cGVcIl0/LnZhbHVlLFxyXG4gICAgICAgIHNlbGVjdGVkRGF0ZTogdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzW1wiZGF0ZVwiXT8udmFsdWVcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KHRydWUpO1xyXG4gICAgICB0aGlzLnNlYXJjaENsaWNrZWQuZW1pdChtb2RhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PT0gXCJCcmFuY2ggQWN0aXZpdHkgUmVjZWl2ZVwiKSB7XHJcbiAgICAgIHRoaXMuaGFzU2VhcmNoZWQgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hGb3JtLmludmFsaWQpIHtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSBmYWxzZTtcclxuICAgICAgdGhpcy5mb3JtVmFsaWQuZW1pdCh0cnVlKTtcclxuICAgICAgdGhpcy5zZWFyY2hDbGlja2VkLmVtaXQodGhpcy5idWlsZFNlYXJjaENyaXRlcmlhKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJDYW5jZWxsYXRpb24gVHJhbnNhY3Rpb25cIikge1xyXG4gICAgICB0aGlzLmhhc1NlYXJjaGVkID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ2xpY2tlZC5lbWl0KHRoaXMuYnVpbGRTZWFyY2hDcml0ZXJpYSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09PSBcIlJldmVudWUgUGVyIFRyYW5zYWN0aW9uXCIpIHtcclxuICAgICAgdGhpcy5oYXNTZWFyY2hlZCA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLnNlYXJjaEZvcm0uaW52YWxpZCkge1xyXG4gICAgICAgIHRoaXMuZm9ybVZhbGlkYXRpb25FcnJvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5mb3JtVmFsaWQuZW1pdChmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybVZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KHRydWUpO1xyXG4gICAgICB0aGlzLnNlYXJjaENsaWNrZWQuZW1pdCh0aGlzLmJ1aWxkU2VhcmNoQ3JpdGVyaWEoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIlN0YXRlbWVudCBvZiBBY2NvdW50c1wiKSB7XHJcbiAgICAgIHRoaXMuaGFzU2VhcmNoZWQgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hGb3JtLmludmFsaWQpIHtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSBmYWxzZTtcclxuICAgICAgdGhpcy5mb3JtVmFsaWQuZW1pdCh0cnVlKTtcclxuICAgICAgdGhpcy5zZWFyY2hDbGlja2VkLmVtaXQodGhpcy5idWlsZFNlYXJjaENyaXRlcmlhKCkpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQWNjb3VudGluZ1wiKSB7XHJcbiAgICAgIHRoaXMuaGFzU2VhcmNoZWQgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hGb3JtLmludmFsaWQpIHtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIC8vIHRoaXMubWFya0Zvcm1Hcm91cFRvdWNoZWQodGhpcy5zZWFyY2hGb3JtKTtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ2xpY2tlZC5lbWl0KHRoaXMuYnVpbGRTZWFyY2hDcml0ZXJpYSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09PSBcIkNyZWRpdCBMaW1pdCBTdGF0dXMgRW5xdWlyeVwiKSB7XHJcbiAgICAgIHRoaXMuaGFzU2VhcmNoZWQgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hGb3JtLmludmFsaWQpIHtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSBmYWxzZTtcclxuICAgICAgdGhpcy5mb3JtVmFsaWQuZW1pdCh0cnVlKTtcclxuICAgICAgdGhpcy5zZWFyY2hDbGlja2VkLmVtaXQodGhpcy5idWlsZFNlYXJjaENyaXRlcmlhKCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkZ1bmRpbmdcIikge1xyXG4gICAgICB0aGlzLmhhc1NlYXJjaGVkID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ2xpY2tlZC5lbWl0KHRoaXMuYnVpbGRTZWFyY2hDcml0ZXJpYSgpKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJUcmlhbCBCYWxhbmNlIC0gQWNjb3VudHNcIikge1xyXG4gICAgICB0aGlzLmhhc1NlYXJjaGVkID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ2xpY2tlZC5lbWl0KHRoaXMuYnVpbGRTZWFyY2hDcml0ZXJpYSgpKTtcclxuICAgIH1cclxuICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkJyYW5jaCBBY3Rpdml0eSBTZW5kIFN1bW1hcnlcIilcclxuIHtcclxuICAgICAgdGhpcy5oYXNTZWFyY2hlZCA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLnNlYXJjaEZvcm0uaW52YWxpZCkge1xyXG4gICAgICAgIHRoaXMuZm9ybVZhbGlkYXRpb25FcnJvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5mb3JtVmFsaWQuZW1pdChmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybVZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KHRydWUpO1xyXG4gICAgICB0aGlzLnNlYXJjaENsaWNrZWQuZW1pdCh0aGlzLmJ1aWxkU2VhcmNoQ3JpdGVyaWEoKSk7XHJcbiAgICB9XHJcbiAgICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIlRyYW5zYWN0aW9uIE1vbml0b3JpbmdcIikge1xyXG4gICAgICB0aGlzLmhhc1NlYXJjaGVkID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ2xpY2tlZC5lbWl0KHRoaXMuYnVpbGRTZWFyY2hDcml0ZXJpYSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRTZWFyY2hDcml0ZXJpYSgpOiBhbnkge1xyXG5cclxuICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuc2VhcmNoRm9ybS52YWx1ZTtcclxuICAgIGNvbnN0IGZyb21EYXRlID0gbmV3IERhdGUoZm9ybVZhbHVlLmZyb21EYXRlKTtcclxuICAgIGNvbnN0IHRvRGF0ZSA9IG5ldyBEYXRlKGZvcm1WYWx1ZS50b0RhdGUpO1xyXG5cclxuICAgIGNvbnN0IGZvcm1hdERhdGUgPSAoZDogRGF0ZSkgPT4ge1xyXG4gICAgICBjb25zdCBkYXkgPSBTdHJpbmcoZC5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsIFwiMFwiKTtcclxuICAgICAgY29uc3QgbW9udGggPSBTdHJpbmcoZC5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgXCIwXCIpO1xyXG4gICAgICBjb25zdCB5ZWFyID0gZC5nZXRGdWxsWWVhcigpO1xyXG4gICAgICByZXR1cm4gYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9YDtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2VhcmNoQ3JpdGVyaWEgPSB0aGlzLmdldFNlYXJjaENyaXRlcmlhQXJyYXkoKTtcclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiVHJhbnNhY3Rpb24gRW5xdWlyeVwiKSB7XHJcbiAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuc2VhcmNoRm9ybS52YWx1ZTtcclxuICAgICAgZm9ybVZhbHVlLmZyb21EYXRlID0gdGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUuZnJvbURhdGUpO1xyXG4gICAgICBmb3JtVmFsdWUudG9EYXRlID0gdGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUudG9EYXRlKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBtb2RhbDogZm9ybVZhbHVlLFxyXG4gICAgICAgIHN5c1VzZXJJRDogdGhpcy5jdXJyZW50VXNlcixcclxuICAgICAgICByZXBvcnRQZXJpb2Q6IGAke2Zvcm1hdERhdGUoZnJvbURhdGUpfSAtICR7Zm9ybWF0RGF0ZSh0b0RhdGUpfWAsXHJcbiAgICAgICAgc2VhcmNoQ3JpdGVyaWE6IHNlYXJjaENyaXRlcmlhXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkJyYW5jaCBBY3Rpdml0eSBTZW5kXCIpIHtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5zZWFyY2hGb3JtLnZhbHVlO1xyXG4gICAgICBmb3JtVmFsdWUuZnJvbURhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSk7XHJcbiAgICAgIGZvcm1WYWx1ZS50b0RhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS50b0RhdGUpO1xyXG4gICAgICBjb25zdCBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gICAgICAgIFsnQ2xpZW50OicsIHRoaXMuY2xpZW50czEuZmluZChjID0+IGMuYnVzaW5lc3NQYXJ0bmVyQ29kZSA9PT0gZm9ybVZhbHVlLmNsaWVudCk/LmJ1c2luZXNzUGFydG5lck5hbWUgfHwgJyddLFxyXG4gICAgICAgIFsnVHJhbnNhY3Rpb24gU3RhdHVzOicsIGZvcm1WYWx1ZS50cmFuc2FjdGlvblN0YXR1cy5qb2luKFwiLFwiKV0sXHJcbiAgICAgICAgWydCcmFuY2g6JywgdGhpcy5icmFuY2hlcy5maW5kKGIgPT4gYi5icmFuY2hDb2RlID09PSBmb3JtVmFsdWUuYnJhbmNoKT8uYnVzaW5lc3NQYXJ0bmVyQnJhbmNoIHx8ICcnXSxcclxuICAgICAgICBbJ1Byb2R1Y3Q6JywgZm9ybVZhbHVlLnByb2R1Y3RdLFxyXG4gICAgICAgIFsnRnJvbSBEYXRlOicsIGFuZ3VsYXJDb21tb24uZm9ybWF0RGF0ZSh0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSksICdkZC9NTS95eXl5JywgJ2VuLVVTJyldLFxyXG4gICAgICAgIFsnUmVjZWl2ZSBDdXJyZW5jeTonLCB0aGlzLmN1cnJlbmNpZXMuZmluZChjID0+IGMuY3VycmVuY3lDb2RlID09PSBmb3JtVmFsdWUucmVjZWl2ZUN1cnJlbmN5KT8uY3VycmVuY3kgfHwgJyddLFxyXG4gICAgICAgIFsnVG8gRGF0ZTonLCBhbmd1bGFyQ29tbW9uLmZvcm1hdERhdGUodGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUudG9EYXRlKSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKV0sXHJcbiAgICAgICAgWydTZW5kIENvdW50cnk6JywgdGhpcy5jb3VudHJpZXMuZmluZChjID0+IGMuY291bnRyeUNvZGUgPT09IGZvcm1WYWx1ZS5zZW5kQ291bnRyeSk/LmNvdW50cnkgfHwgJyddLFxyXG4gICAgICAgIFsnUmVjZWl2ZSBDb3VudHJ5OicsIHRoaXMuY291bnRyaWVzLmZpbmQoYyA9PiBjLmNvdW50cnlDb2RlID09PSBmb3JtVmFsdWUucmVjZWl2ZUNvdW50cnkpPy5jb3VudHJ5IHx8ICcnXSxcclxuICAgICAgXTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBtb2RhbDogZm9ybVZhbHVlLFxyXG4gICAgICAgIHN5c1VzZXJJRDogdGhpcy5jdXJyZW50VXNlcixcclxuICAgICAgICBzZWFyY2hDcml0ZXJpYTogc2VhcmNoQ3JpdGVyaWFcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJCcmFuY2ggQWN0aXZpdHkgUmVjZWl2ZVwiKSB7XHJcbiAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuc2VhcmNoRm9ybS52YWx1ZTtcclxuICAgICAgZm9ybVZhbHVlLmZyb21EYXRlID0gdGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUuZnJvbURhdGUpO1xyXG4gICAgICBmb3JtVmFsdWUudG9EYXRlID0gdGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUudG9EYXRlKTtcclxuICAgICAgY29uc3Qgc2VhcmNoQ3JpdGVyaWE6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtcclxuICAgICAgICBbJ0NsaWVudDonLCB0aGlzLmNsaWVudHMxLmZpbmQoYyA9PiBjLmJ1c2luZXNzUGFydG5lckNvZGUgPT09IGZvcm1WYWx1ZS5jbGllbnQpPy5idXNpbmVzc1BhcnRuZXJOYW1lIHx8ICcnXSxcclxuICAgICAgICBbJ1RyYW5zYWN0aW9uIFN0YXR1czonLCBmb3JtVmFsdWUudHJhbnNhY3Rpb25TdGF0dXMuam9pbihcIixcIildLFxyXG4gICAgICAgIFsnQnJhbmNoOicsIHRoaXMuYnJhbmNoZXMuZmluZChiID0+IGIuYnJhbmNoQ29kZSA9PT0gZm9ybVZhbHVlLmJyYW5jaCk/LmJ1c2luZXNzUGFydG5lckJyYW5jaCB8fCAnJ10sXHJcbiAgICAgICAgWydQcm9kdWN0OicsIGZvcm1WYWx1ZS5wcm9kdWN0XSxcclxuICAgICAgICBbJ0Zyb20gRGF0ZTonLCBhbmd1bGFyQ29tbW9uLmZvcm1hdERhdGUodGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUuZnJvbURhdGUpLCAnZGQvTU0veXl5eScsICdlbi1VUycpXSxcclxuICAgICAgICBbJ1JlY2VpdmUgQ3VycmVuY3k6JywgdGhpcy5jdXJyZW5jaWVzLmZpbmQoYyA9PiBjLmN1cnJlbmN5Q29kZSA9PT0gZm9ybVZhbHVlLnJlY2VpdmVDdXJyZW5jeSk/LmN1cnJlbmN5IHx8ICcnXSxcclxuICAgICAgICBbJ1RvIERhdGU6JywgYW5ndWxhckNvbW1vbi5mb3JtYXREYXRlKHRoaXMudG9Jc29Gb3JtYXQoZm9ybVZhbHVlLnRvRGF0ZSksICdkZC9NTS95eXl5JywgJ2VuLVVTJyldLFxyXG4gICAgICAgIFsnU2VuZCBDb3VudHJ5OicsIHRoaXMuY291bnRyaWVzLmZpbmQoYyA9PiBjLmNvdW50cnlDb2RlID09PSBmb3JtVmFsdWUuc2VuZENvdW50cnkpPy5jb3VudHJ5IHx8ICcnXSxcclxuICAgICAgICBbJ1JlY2VpdmUgQ291bnRyeTonLCB0aGlzLmNvdW50cmllcy5maW5kKGMgPT4gYy5jb3VudHJ5Q29kZSA9PT0gZm9ybVZhbHVlLnJlY2VpdmVDb3VudHJ5KT8uY291bnRyeSB8fCAnJ10sXHJcbiAgICAgIF07XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbW9kYWw6IGZvcm1WYWx1ZSxcclxuICAgICAgICBzeXNVc2VySUQ6IHRoaXMuY3VycmVudFVzZXIsXHJcbiAgICAgICAgc2VhcmNoQ3JpdGVyaWE6IHNlYXJjaENyaXRlcmlhXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQ2FuY2VsbGF0aW9uIFRyYW5zYWN0aW9uXCIpIHtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5zZWFyY2hGb3JtLnZhbHVlO1xyXG4gICAgICBmb3JtVmFsdWUuZnJvbURhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSk7XHJcbiAgICAgIGZvcm1WYWx1ZS50b0RhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS50b0RhdGUpO1xyXG4gICAgICBjb25zdCBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gICAgICAgIFsnQ2xpZW50OicsIHRoaXMuY2xpZW50czEuZmluZChjID0+IGMuYnVzaW5lc3NQYXJ0bmVyQ29kZSA9PT0gZm9ybVZhbHVlLmNsaWVudCk/LmJ1c2luZXNzUGFydG5lck5hbWUgfHwgJyddLFxyXG4gICAgICAgIFsnQnJhbmNoOicsIHRoaXMuYnJhbmNoZXMuZmluZChiID0+IGIuYnJhbmNoQ29kZSA9PT0gZm9ybVZhbHVlLmJyYW5jaCk/LmJ1c2luZXNzUGFydG5lckJyYW5jaCB8fCAnJ10sXHJcbiAgICAgICAgWydQcm9kdWN0OicsIGZvcm1WYWx1ZS5wcm9kdWN0XSxcclxuICAgICAgICBbJ0Zyb20gRGF0ZTonLCBhbmd1bGFyQ29tbW9uLmZvcm1hdERhdGUodGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUuZnJvbURhdGUpLCAnZGQvTU0veXl5eScsICdlbi1VUycpXSxcclxuICAgICAgICBbJ1JlY2VpdmUgQ3VycmVuY3k6JywgdGhpcy5jdXJyZW5jaWVzLmZpbmQoYyA9PiBjLmN1cnJlbmN5Q29kZSA9PT0gZm9ybVZhbHVlLnJlY2VpdmVDdXJyZW5jeSk/LmN1cnJlbmN5IHx8ICcnXSxcclxuICAgICAgICBbJ1RvIERhdGU6JywgYW5ndWxhckNvbW1vbi5mb3JtYXREYXRlKHRoaXMudG9Jc29Gb3JtYXQoZm9ybVZhbHVlLnRvRGF0ZSksICdkZC9NTS95eXl5JywgJ2VuLVVTJyldLFxyXG4gICAgICAgIFsnU2VuZCBDb3VudHJ5OicsIHRoaXMuY291bnRyaWVzLmZpbmQoYyA9PiBjLmNvdW50cnlDb2RlID09PSBmb3JtVmFsdWUuc2VuZENvdW50cnkpPy5jb3VudHJ5IHx8ICcnXSxcclxuICAgICAgICBbJ1JlY2VpdmUgQ291bnRyeTonLCB0aGlzLmNvdW50cmllcy5maW5kKGMgPT4gYy5jb3VudHJ5Q29kZSA9PT0gZm9ybVZhbHVlLnJlY2VpdmVDb3VudHJ5KT8uY291bnRyeSB8fCAnJ10sXHJcblxyXG4gICAgICBdO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIG1vZGFsOiBmb3JtVmFsdWUsXHJcbiAgICAgICAgc3lzVXNlcklEOiB0aGlzLmN1cnJlbnRVc2VyLFxyXG4gICAgICAgIHJlcG9ydFBlcmlvZDogYCR7Zm9ybWF0RGF0ZShmcm9tRGF0ZSl9IC0gJHtmb3JtYXREYXRlKHRvRGF0ZSl9YCxcclxuICAgICAgICBzZWFyY2hDcml0ZXJpYTogc2VhcmNoQ3JpdGVyaWFcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09PSBcIlJldmVudWUgUGVyIFRyYW5zYWN0aW9uXCIpIHtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5zZWFyY2hGb3JtLnZhbHVlO1xyXG4gICAgICBmb3JtVmFsdWUuZnJvbURhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSk7XHJcbiAgICAgIGZvcm1WYWx1ZS50b0RhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS50b0RhdGUpO1xyXG4gICAgICBjb25zdCBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gICAgICAgIFsnU2VuZGVyIFBhcnRuZXI6JywgdGhpcy5zZW5kQnVzaW5lc3NQYXJ0bmVyQWdlbnRzLmZpbmQoYyA9PiBjLmlkID09PSBmb3JtVmFsdWUuc2VuZEJ1c2luZXNzUGFydG5lcik/Lm5hbWUgfHwgJyddLFxyXG4gICAgICAgIFsnUmVjZWl2ZSBQYXJ0bmVyOicsIHRoaXMucmVjdkJ1c2luZXNzUGFydG5lckFnZW50cy5maW5kKGMgPT4gYy5pZCA9PT0gZm9ybVZhbHVlLnJlY3ZCdXNpbmVzc1BhcnRuZXIpPy5uYW1lIHx8ICcnXSxcclxuICAgICAgICBbJ1NlbmQgQ291bnRyeTonLCB0aGlzLmNvdW50cmllcy5maW5kKGMgPT4gYy5jb3VudHJ5Q29kZSA9PT0gZm9ybVZhbHVlLnNlbmRDb3VudHJ5KT8uY291bnRyeSB8fCAnJ10sXHJcbiAgICAgICAgWydSZWNlaXZlIENvdW50cnk6JywgdGhpcy5jb3VudHJpZXMuZmluZChjID0+IGMuY291bnRyeUNvZGUgPT09IGZvcm1WYWx1ZS5yZWNlaXZlQ291bnRyeSk/LmNvdW50cnkgfHwgJyddLFxyXG4gICAgICAgIFsnRnJvbSBEYXRlOicsIGFuZ3VsYXJDb21tb24uZm9ybWF0RGF0ZSh0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSksICdkZC9NTS95eXl5JywgJ2VuLVVTJyldLFxyXG4gICAgICAgIFsnVG8gRGF0ZTonLCBhbmd1bGFyQ29tbW9uLmZvcm1hdERhdGUodGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUudG9EYXRlKSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKV0sXHJcbiAgICAgICAgWydUcmFuc2FjdGlvbiBTdGF0dXM6JywgZm9ybVZhbHVlLnRyYW5zYWN0aW9uU3RhdHVzLmpvaW4oXCIsXCIpXSxcclxuICAgICAgXTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBtb2RhbDogZm9ybVZhbHVlLFxyXG4gICAgICAgIHN5c1VzZXJJZDogdGhpcy5jdXJyZW50VXNlcixcclxuICAgICAgICBzZWFyY2hDcml0ZXJpYTogc2VhcmNoQ3JpdGVyaWFcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJTdGF0ZW1lbnQgb2YgQWNjb3VudHNcIikge1xyXG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLnNlYXJjaEZvcm0udmFsdWU7XHJcbiAgICAgIGZvcm1WYWx1ZS5mcm9tRGF0ZSA9IHRoaXMudG9Jc29Gb3JtYXQoZm9ybVZhbHVlLmZyb21EYXRlKTtcclxuICAgICAgZm9ybVZhbHVlLnRvRGF0ZSA9IHRoaXMudG9Jc29Gb3JtYXQoZm9ybVZhbHVlLnRvRGF0ZSk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbW9kYWw6IGZvcm1WYWx1ZSxcclxuICAgICAgICBjbGllbnRUeXBlOiB0aGlzLmNsaWVudFR5cGUsXHJcbiAgICAgICAgc3lzVXNlcklEOiB0aGlzLmN1cnJlbnRVc2VyLFxyXG4gICAgICAgIGNsaWVudE5hbWU6IHRoaXMuY2xpZW50TmFtZSxcclxuICAgICAgICByZXBvcnRQZXJpb2Q6IGAke2Zvcm1hdERhdGUoZnJvbURhdGUpfSAtICR7Zm9ybWF0RGF0ZSh0b0RhdGUpfWAsXHJcbiAgICAgICAgc2VhcmNoQ3JpdGVyaWE6IHNlYXJjaENyaXRlcmlhXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQWNjb3VudGluZ1wiKSB7XHJcbiAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuc2VhcmNoRm9ybS52YWx1ZTtcclxuICAgICAgY29uc3Qgc2VhcmNoQ3JpdGVyaWEgPSBbXHJcbiAgICAgICAgWydDbGllbnQ6JywgdGhpcy5jbGllbnRzMS5maW5kKGMgPT4gYy5idXNpbmVzc1BhcnRuZXJDb2RlID09PSBmb3JtVmFsdWUuY2xpZW50KT8uYnVzaW5lc3NQYXJ0bmVyTmFtZSB8fCAnJ10sXHJcbiAgICAgICAgWydUcmFuc2FjdGlvbiBTdGF0dXM6JywgZm9ybVZhbHVlLnRyYW5zYWN0aW9uU3RhdHVzLmpvaW4oXCIsXCIpXSxcclxuICAgICAgICBbJ0JyYW5jaDonLCB0aGlzLmJyYW5jaGVzLmZpbmQoYiA9PiBiLmJyYW5jaENvZGUgPT09IGZvcm1WYWx1ZS5icmFuY2gpPy5idXNpbmVzc1BhcnRuZXJCcmFuY2ggfHwgJyddLFxyXG4gICAgICAgIFsnUHJvZHVjdDonLCB0aGlzLnRyYW5zYWN0aW9uUHJvZHVjdHMuZmluZCh0ID0+IHQucHJvZHVjdENvZGUgPT09IGZvcm1WYWx1ZS5wcm9kdWN0KT8ubmFtZSB8fCAnJ10sXHJcbiAgICAgICAgWydGcm9tIERhdGU6JywgYW5ndWxhckNvbW1vbi5mb3JtYXREYXRlKHRoaXMudG9Jc29Gb3JtYXQoZm9ybVZhbHVlLmZyb21EYXRlKSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKV0sXHJcbiAgICAgICAgWydTZW5kIEN1cnJlbmN5OicsIHRoaXMuY3VycmVuY2llcy5maW5kKGMgPT4gYy5jdXJyZW5jeUNvZGUgPT09IGZvcm1WYWx1ZS5jdXJyZW5jeSk/LmN1cnJlbmN5IHx8ICcnXSxcclxuICAgICAgICBbJ1RvIERhdGU6JywgYW5ndWxhckNvbW1vbi5mb3JtYXREYXRlKHRoaXMudG9Jc29Gb3JtYXQoZm9ybVZhbHVlLnRvRGF0ZSksICdkZC9NTS95eXl5JywgJ2VuLVVTJyldLFxyXG4gICAgICAgIFsnU2VuZCBDb3VudHJ5OicsIHRoaXMuY291bnRyaWVzLmZpbmQoYyA9PiBjLmNvdW50cnlDb2RlID09PSBmb3JtVmFsdWUuc2VuZENvdW50cnkpPy5jb3VudHJ5IHx8ICcnXSxcclxuICAgICAgICBbJ1JlY2VpdmUgQ291bnRyeTonLCB0aGlzLmNvdW50cmllcy5maW5kKGMgPT4gYy5jb3VudHJ5Q29kZSA9PT0gZm9ybVZhbHVlLnJlY2VpdmVDb3VudHJ5KT8uY291bnRyeSB8fCAnJ10sXHJcbiAgICAgIF07XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbW9kYWw6IHtcclxuICAgICAgICAgIC4uLmZvcm1WYWx1ZSxcclxuICAgICAgICAgIGZyb21EYXRlOiB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSksXHJcbiAgICAgICAgICB0b0RhdGU6IHRoaXMudG9Jc29Gb3JtYXQoZm9ybVZhbHVlLnRvRGF0ZSksXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzeXNVc2VySUQ6IHRoaXMuY3VycmVudFVzZXIsXHJcbiAgICAgICAgc2VhcmNoQ3JpdGVyaWE6IHNlYXJjaENyaXRlcmlhXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PT0gXCJDcmVkaXQgTGltaXQgU3RhdHVzIEVucXVpcnlcIikge1xyXG4gICAgICBjb25zdCBjbGllbnRDb2RlID0gdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzWydjbGllbnQnXS52YWx1ZTtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5zZWFyY2hGb3JtLnZhbHVlO1xyXG4gICAgICBmb3JtVmFsdWUuZnJvbURhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSk7XHJcbiAgICAgIGZvcm1WYWx1ZS50b0RhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS50b0RhdGUpO1xyXG4gICAgICBmb3JtVmFsdWUuY2xpZW50ID0gdGhpcy5jbGllbnRzMS5maW5kKGMgPT4gYy5idXNpbmVzc1BhcnRuZXJDb2RlID09PSBjbGllbnRDb2RlKT8uYnVzaW5lc3NQYXJ0bmVyTmFtZSB8fCAnJztcclxuICAgICAgY29uc3Qgc2VhcmNoQ3JpdGVyaWE6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtcclxuICAgICAgICBbJ0NsaWVudDonLCB0aGlzLmNsaWVudHMxLmZpbmQoYyA9PiBjLmJ1c2luZXNzUGFydG5lckNvZGUgPT09IGNsaWVudENvZGUpPy5idXNpbmVzc1BhcnRuZXJOYW1lIHx8ICcnXSxcclxuICAgICAgICBbJ1RyYW5zYWN0aW9uIHN0YXR1czonLCBmb3JtVmFsdWUudHJhbnNhY3Rpb25TdGF0dXNdLFxyXG4gICAgICAgIFsnRnJvbSBEYXRlOicsIGFuZ3VsYXJDb21tb24uZm9ybWF0RGF0ZSh0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSksICdkZC9NTS95eXl5JywgJ2VuLVVTJyldLFxyXG4gICAgICAgIFsnVG8gRGF0ZTonLCBhbmd1bGFyQ29tbW9uLmZvcm1hdERhdGUodGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUudG9EYXRlKSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKV0sXHJcbiAgICAgIF07XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbW9kYWw6IGZvcm1WYWx1ZSxcclxuICAgICAgICBzeXNVc2VySUQ6IHRoaXMuY3VycmVudFVzZXIsXHJcbiAgICAgICAgc2VhcmNoQ3JpdGVyaWE6IHNlYXJjaENyaXRlcmlhXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJGdW5kaW5nXCIpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBtb2RhbDogZm9ybVZhbHVlLFxyXG4gICAgICAgIHN5c1VzZXJJRDogdGhpcy5jdXJyZW50VXNlcixcclxuICAgICAgICByZXBvcnRQZXJpb2Q6IGAke2Zvcm1hdERhdGUoZnJvbURhdGUpfSAtICR7Zm9ybWF0RGF0ZSh0b0RhdGUpfWAsXHJcbiAgICAgICAgc2VhcmNoQ3JpdGVyaWE6IHNlYXJjaENyaXRlcmlhXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiVHJpYWwgQmFsYW5jZSAtIEFjY291bnRzXCIpIHtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5zZWFyY2hGb3JtLnZhbHVlO1xyXG4gICAgICBjb25zdCBkYXRlUmFuZ2UgPSB0aGlzLnByZXBhcmVGcm9tRGF0ZUFuZFRvRGF0ZUZvclRyaWFsQmFsYW5jZUFjY291bnRSZXBvcnQoKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBtb2RhbDoge1xyXG4gICAgICAgICAgLi4uZm9ybVZhbHVlLFxyXG4gICAgICAgICAgZnJvbURhdGU6IGRhdGVSYW5nZS5mcm9tRGF0ZSxcclxuICAgICAgICAgIHRvRGF0ZTogZGF0ZVJhbmdlLnRvRGF0ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN5c1VzZXJJRDogdGhpcy5jdXJyZW50VXNlclxyXG4gICAgICB9O1xyXG5cclxuICAgIH1cclxuICAgICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkJyYW5jaCBBY3Rpdml0eSBTZW5kIFN1bW1hcnlcIilcclxuIHtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5zZWFyY2hGb3JtLnZhbHVlO1xyXG4gICAgICBmb3JtVmFsdWUuZnJvbURhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSk7XHJcbiAgICAgIGZvcm1WYWx1ZS50b0RhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS50b0RhdGUpO1xyXG4gICAgICBjb25zdCBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gICAgICAgIFsnQ2xpZW50OicsIHRoaXMuY2xpZW50czEuZmluZChjID0+IGMuYnVzaW5lc3NQYXJ0bmVyQ29kZSA9PT0gZm9ybVZhbHVlLmNsaWVudCk/LmJ1c2luZXNzUGFydG5lck5hbWUgfHwgJyddLFxyXG4gICAgICAgIFsnVHJhbnNhY3Rpb24gU3RhdHVzOicsIGZvcm1WYWx1ZS50cmFuc2FjdGlvblN0YXR1cy5qb2luKFwiLFwiKV0sXHJcbiAgICAgICAgWydCcmFuY2g6JywgdGhpcy5icmFuY2hlcy5maW5kKGIgPT4gYi5icmFuY2hDb2RlID09PSBmb3JtVmFsdWUuYnJhbmNoKT8uYnVzaW5lc3NQYXJ0bmVyQnJhbmNoIHx8ICcnXSxcclxuICAgICAgICBbJ1Byb2R1Y3Q6JywgZm9ybVZhbHVlLnByb2R1Y3RdLFxyXG4gICAgICAgIFsnRnJvbSBEYXRlOicsIGFuZ3VsYXJDb21tb24uZm9ybWF0RGF0ZSh0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSksICdkZC9NTS95eXl5JywgJ2VuLVVTJyldLFxyXG4gICAgICAgIFsnUmVjZWl2ZSBDdXJyZW5jeTonLCB0aGlzLmN1cnJlbmNpZXMuZmluZChjID0+IGMuY3VycmVuY3lDb2RlID09PSBmb3JtVmFsdWUucmVjZWl2ZUN1cnJlbmN5KT8uY3VycmVuY3kgfHwgJyddLFxyXG4gICAgICAgIFsnVG8gRGF0ZTonLCBhbmd1bGFyQ29tbW9uLmZvcm1hdERhdGUodGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUudG9EYXRlKSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKV0sXHJcbiAgICAgICAgWydTZW5kIENvdW50cnk6JywgdGhpcy5jb3VudHJpZXMuZmluZChjID0+IGMuY291bnRyeUNvZGUgPT09IGZvcm1WYWx1ZS5zZW5kQ291bnRyeSk/LmNvdW50cnkgfHwgJyddLFxyXG4gICAgICAgIFsnUmVjZWl2ZSBDb3VudHJ5OicsIHRoaXMuY291bnRyaWVzLmZpbmQoYyA9PiBjLmNvdW50cnlDb2RlID09PSBmb3JtVmFsdWUucmVjZWl2ZUNvdW50cnkpPy5jb3VudHJ5IHx8ICcnXSxcclxuICAgICAgICBbJ1N1bW1hcnkgUmVwb3J0OicsIGZvcm1WYWx1ZS5zdW1tYXJ5UmVwb3J0XSwgXHJcbiAgICAgIF07XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbW9kYWw6IGZvcm1WYWx1ZSxcclxuICAgICAgICBzeXNVc2VySUQ6IHRoaXMuY3VycmVudFVzZXIsXHJcbiAgICAgICAgc2VhcmNoQ3JpdGVyaWE6IHNlYXJjaENyaXRlcmlhXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJUcmFuc2FjdGlvbiBNb25pdG9yaW5nXCIpIHtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5zZWFyY2hGb3JtLnZhbHVlO1xyXG4gICAgICAvLyBmb3JtVmFsdWUuZnJvbURhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSk7XHJcbiAgICAgIC8vIGZvcm1WYWx1ZS50b0RhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS50b0RhdGUpO1xyXG4gICAgICBpZiAodGhpcy5pbml0aWFsRmlsdGVycz8uaXNSZWFsdGltZSAmJiAoZm9ybVZhbHVlLmZyb21EYXRlID09ICcnICYmIGZvcm1WYWx1ZS50b0RhdGUgPT0gJycpKSB7XHJcbiAgICAgICAgZm9ybVZhbHVlLmZyb21EYXRlID0gbnVsbDtcclxuICAgICAgICBmb3JtVmFsdWUudG9EYXRlID0gbnVsbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3JtVmFsdWUuZnJvbURhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZyb21EYXRlKTtcclxuICAgICAgICBmb3JtVmFsdWUudG9EYXRlID0gdGhpcy50b0lzb0Zvcm1hdCh0b0RhdGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxGaWx0ZXJzPy5pc1JlYWx0aW1lKSB7XHJcbiAgICAgICAgICB0aGlzLmluaXRpYWxGaWx0ZXJzLmlzUmVhbHRpbWUgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICBcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gICAgICAgIFsnQ2xpZW50OicsIHRoaXMuY2xpZW50czEuZmluZChjID0+IGMuYnVzaW5lc3NQYXJ0bmVyQ29kZSA9PT0gZm9ybVZhbHVlLmNsaWVudCk/LmJ1c2luZXNzUGFydG5lck5hbWUgfHwgJyddLFxyXG4gICAgICAgIFsnVHJhbnNhY3Rpb24gU3RhdHVzOicsIGZvcm1WYWx1ZS50cmFuc2FjdGlvblN0YXR1cy5qb2luKFwiLFwiKV0sXHJcbiAgICAgICAgWydCcmFuY2g6JywgdGhpcy5icmFuY2hlcy5maW5kKGIgPT4gYi5icmFuY2hDb2RlID09PSBmb3JtVmFsdWUuYnJhbmNoKT8uYnVzaW5lc3NQYXJ0bmVyQnJhbmNoIHx8ICcnXSxcclxuICAgICAgICBbJ1Byb2R1Y3Q6JywgZm9ybVZhbHVlLnByb2R1Y3RdLFxyXG4gICAgICAgIFsnRnJvbSBEYXRlOicsIHRoaXMuaW5pdGlhbEZpbHRlcnM/LmlzUmVhbHRpbWUgPyAnJyA6IGFuZ3VsYXJDb21tb24uZm9ybWF0RGF0ZSh0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSksICdkZC9NTS95eXl5JywgJ2VuLVVTJyldLFxyXG4gICAgICAgIFsnUmVjZWl2ZSBDdXJyZW5jeTonLCB0aGlzLmN1cnJlbmNpZXMuZmluZChjID0+IGMuY3VycmVuY3lDb2RlID09PSBmb3JtVmFsdWUucmVjZWl2ZUN1cnJlbmN5KT8uY3VycmVuY3kgfHwgJyddLFxyXG4gICAgICAgIFsnVG8gRGF0ZTonLCB0aGlzLmluaXRpYWxGaWx0ZXJzPy5pc1JlYWx0aW1lID8gJycgOiBhbmd1bGFyQ29tbW9uLmZvcm1hdERhdGUodGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUudG9EYXRlKSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKV0sXHJcbiAgICAgICAgWydTZW5kIENvdW50cnk6JywgdGhpcy5jb3VudHJpZXMuZmluZChjID0+IGMuY291bnRyeUNvZGUgPT09IGZvcm1WYWx1ZS5zZW5kQ291bnRyeSk/LmNvdW50cnkgfHwgJyddLFxyXG4gICAgICAgIFsnUmVjZWl2ZSBDb3VudHJ5OicsIHRoaXMuY291bnRyaWVzLmZpbmQoYyA9PiBjLmNvdW50cnlDb2RlID09PSBmb3JtVmFsdWUucmVjZWl2ZUNvdW50cnkpPy5jb3VudHJ5IHx8ICcnXSxcclxuICAgICAgXTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBtb2RhbDogZm9ybVZhbHVlLFxyXG4gICAgICAgIHN5c1VzZXJJRDogdGhpcy5jdXJyZW50VXNlcixcclxuICAgICAgICBpc1JlYWx0aW1lOiB0aGlzLmluaXRpYWxGaWx0ZXJzPy5pc1JlYWx0aW1lLFxyXG4gICAgICAgIHNlYXJjaENyaXRlcmlhOiBzZWFyY2hDcml0ZXJpYVxyXG4gICAgICB9XHJcbiAgIH1cclxuICB9XHJcblxyXG4gIHRvSXNvRm9ybWF0KGRhdGVJbnB1dDogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcclxuICAgIGlmICghZGF0ZUlucHV0KSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuICAgIC8vIEhhbmRsZSB7IHllYXIsIG1vbnRoLCBkYXkgfVxyXG4gICAgaWYgKFxyXG4gICAgICB0eXBlb2YgZGF0ZUlucHV0ID09PSAnb2JqZWN0JyAmJlxyXG4gICAgICBkYXRlSW5wdXQueWVhciAmJlxyXG4gICAgICBkYXRlSW5wdXQubW9udGggJiZcclxuICAgICAgZGF0ZUlucHV0LmRheVxyXG4gICAgKSB7XHJcbiAgICAgIGNvbnN0IHllYXIgPSBkYXRlSW5wdXQueWVhcjtcclxuICAgICAgY29uc3QgbW9udGggPSBTdHJpbmcoZGF0ZUlucHV0Lm1vbnRoKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgICBjb25zdCBkYXkgPSBTdHJpbmcoZGF0ZUlucHV0LmRheSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fWA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIEpTIERhdGUgb2JqZWN0XHJcbiAgICBpZiAoZGF0ZUlucHV0IGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICBpZiAoaXNOYU4oZGF0ZUlucHV0LmdldFRpbWUoKSkpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgIGNvbnN0IHllYXIgPSBkYXRlSW5wdXQuZ2V0RnVsbFllYXIoKTtcclxuICAgICAgY29uc3QgbW9udGggPSBTdHJpbmcoZGF0ZUlucHV0LmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgICBjb25zdCBkYXkgPSBTdHJpbmcoZGF0ZUlucHV0LmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGh9LSR7ZGF5fWA7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIGRkL01NL3l5eXkgc3RyaW5nXHJcbiAgICBpZiAodHlwZW9mIGRhdGVJbnB1dCA9PT0gJ3N0cmluZycgJiYgZGF0ZUlucHV0LmluY2x1ZGVzKCcvJykpIHtcclxuICAgICAgY29uc3QgcGFydHMgPSBkYXRlSW5wdXQuc3BsaXQoJy8nKTtcclxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xyXG4gICAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHBhcnRzO1xyXG4gICAgICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRoLnBhZFN0YXJ0KDIsICcwJyl9LSR7ZGF5LnBhZFN0YXJ0KDIsICcwJyl9YDtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIEhhbmRsZSBJU08gc3RyaW5nICh5eXl5LU1NLWRkIG9yIHl5eXktTU0tZGRUSEg6bW06c3Muc3NzWilcclxuICAgIGlmICh0eXBlb2YgZGF0ZUlucHV0ID09PSAnc3RyaW5nJyAmJiAvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9Ly50ZXN0KGRhdGVJbnB1dCkpIHtcclxuICAgICAgLy8gVXNlIG9ubHkgZGF0ZSBwYXJ0IGlmIGZ1bGwgSVNPIHN0cmluZ1xyXG4gICAgICByZXR1cm4gZGF0ZUlucHV0LnN1YnN0cmluZygwLCAxMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIG9uT3BlbigpIHtcclxuICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcclxuICB9XHJcbiAgb25DbG9zZSgpIHtcclxuICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0IGVycm9yTWVzc2FnZSgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Vycm9yTWVzc2FnZTtcclxuICB9XHJcblxyXG4gIHNldCBlcnJvck1lc3NhZ2UodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fZXJyb3JNZXNzYWdlID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNMb2FkaW5nKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZGluZ1N0YXRlID09PSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZztcclxuICB9XHJcblxyXG4gIGdldCBpc0Vycm9yKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMubG9hZGluZ1N0YXRlID09PSBDb21wb25lbnRMb2FkaW5nU3RhdGUuRXJyb3I7XHJcbiAgfVxyXG5cclxuICBjdXJyZW5jeVNlYXJjaCA9ICh0ZXJtOiBzdHJpbmcsIGl0ZW06IGFueSkgPT4ge1xyXG4gICAgdGVybSA9IHRlcm0udG9Mb3dlckNhc2UoKTtcclxuICAgIHJldHVybiAoXHJcbiAgICAgIGl0ZW0uY3VycmVuY3lDb2RlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSlcclxuICAgICk7XHJcbiAgfTtcclxuXHJcbiAgdG9OZ2JEYXRlU3RydWN0KGZyb21EYXRlOiBEYXRlKTogTmdiRGF0ZVN0cnVjdCB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICB5ZWFyOiBmcm9tRGF0ZS5nZXRGdWxsWWVhcigpLFxyXG4gICAgICBtb250aDogZnJvbURhdGUuZ2V0TW9udGgoKSArIDEsXHJcbiAgICAgIGRheTogZnJvbURhdGUuZ2V0RGF0ZSgpXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgdHJhbnNhY3Rpb25TdGF0dXNTdWJzY3JpYmUoKSB7XHJcbiAgICB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0cmFuc2FjdGlvblN0YXR1cycpLnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKHZhbCkgPT4ge1xyXG4gICAgICBjb25zdCBhbGxTdGF0dXMgPSB0aGlzLnRyYW5zYWN0aW9uU3RhdHVzZXNcclxuICAgICAgICAubWFwKChzdGF0dXMpID0+IHN0YXR1cy50cmFuc2FjdGlvblN0YXR1cyk7XHJcblxyXG4gICAgICBpZiAodmFsLmluY2x1ZGVzKCdBbGwnKSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzU2VsZWN0QWxsQ2hlY2tlZCkge1xyXG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRTdGF0dXMgPSB2YWwuZmlsdGVyKHMgPT4gcyAhPT0gJ0FsbCcpO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLmdldCgndHJhbnNhY3Rpb25TdGF0dXMnKVxyXG4gICAgICAgICAgICAuc2V0VmFsdWUoZmlsdGVyZWRTdGF0dXMsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgIHRoaXMuaXNTZWxlY3RBbGxDaGVja2VkID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RyYW5zYWN0aW9uU3RhdHVzJylcclxuICAgICAgICAgICAgLnNldFZhbHVlKFsnQWxsJ10sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgICAgICAgIHRoaXMuaXNTZWxlY3RBbGxDaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgaGFuZGxlRGF0ZUNoYW5nZSgpIHtcclxuICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21EYXRlJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoZnJvbURhdGVTdHIgPT4ge1xyXG4gICAgICBjb25zdCB0b0RhdGVDb250cm9sID0gdGhpcy5zZWFyY2hGb3JtLmdldCgndG9EYXRlJyk7XHJcbiAgICAgIGNvbnN0IHRvRGF0ZVN0ciA9IHRvRGF0ZUNvbnRyb2w/LnZhbHVlO1xyXG4gICAgICBpZiAoIWZyb21EYXRlU3RyIHx8ICF0b0RhdGVTdHIpIHJldHVybjtcclxuICAgICAgY29uc3QgZnJvbURhdGUgPSBuZXcgRGF0ZShmcm9tRGF0ZVN0cik7XHJcbiAgICAgIHRoaXMuZGlzYWJsZWREYXRlID0gdGhpcy50b05nYkRhdGVTdHJ1Y3QoZnJvbURhdGUpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gKiogIGZvciB0cmlhbCBiYWxhbmNlIGFjY291bnRpbmcgcmVwb3J0IC0gXHJcblxyXG4gIG9uU2VsZWN0RnJvbU1vbnRoKCkge1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZztcclxuICAgIGNvbnN0IHllYXIgPSArdGhpcy5zZWFyY2hGb3JtLmdldCgnZmluYW5jaWFsWWVhcicpPy52YWx1ZTtcclxuICAgIGNvbnN0IGZyb21Nb250aCA9ICt0aGlzLnNlYXJjaEZvcm0uZ2V0KCdmcm9tTW9udGgnKT8udmFsdWU7XHJcblxyXG4gICAgaWYgKCF5ZWFyIHx8ICFmcm9tTW9udGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucmVwb3J0U2VydmljZS5HZXRUb01vbnRoc0ZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KHllYXIsIGZyb21Nb250aClcclxuICAgICAgLnBpcGUoY2F0Y2hFcnJvcihlcnIgPT4gb2YoW10pKSlcclxuICAgICAgLnN1YnNjcmliZSgodG9Nb250aHMpID0+IHtcclxuICAgICAgICB0aGlzLnRvTW9udGhzID0gdG9Nb250aHM7XHJcblxyXG4gICAgICAgIC8vIHVwZGF0ZSBcInRvTW9udGhcIiBmb3JtIGNvbnRyb2wgd2l0aCBkZWZhdWx0IChmaXJzdCBvcHRpb24pXHJcbiAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgdG9Nb250aDogdGhpcy50b01vbnRoc1swXT8ucE1vbnRoID8/IFwiXCJcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgLy8gb24gc2VsZWN0IGZyb21Nb250aCBnb2VzIGNhbGwgdG8gZnJvbURheVxyXG5cclxuICAgIGNvbnN0IGZpbmFuY2lhbFllYXIgPSArdGhpcy5zZWFyY2hGb3JtLmdldCgnZmluYW5jaWFsWWVhcicpPy52YWx1ZTtcclxuICAgIGNvbnN0IHNlbGVjdGVkUE1vbnRoID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnZnJvbU1vbnRoJyk/LnZhbHVlO1xyXG4gICAgY29uc3QgZnJvbU1vbnRoT2JqID0gdGhpcy5mcm9tTW9udGhzLmZpbmQobSA9PiBtLnBPcmRlciA9PT0gc2VsZWN0ZWRQTW9udGgpO1xyXG4gICAgY29uc3QgZnJvbU1vbnRoTGFiZWwgPSBmcm9tTW9udGhPYmo/LnBlcmlvZDtcclxuICAgIHRoaXMucmVwb3J0U2VydmljZS5HZXRGcm9tRGF0ZXNGb3JUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydChmaW5hbmNpYWxZZWFyLCBmcm9tTW9udGhMYWJlbClcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAoZnJvbURheXMpID0+IHtcclxuICAgICAgICAgIHRoaXMuZnJvbURheXMgPSBmcm9tRGF5cztcclxuICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgZnJvbURheTogdW5kZWZpbmVkIH0pXHJcbiAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IHRvRGF5OiBcIlwiIH0pXHJcbiAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0b0RheScpPy5kaXNhYmxlKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGZldGNoaW5nIFRvIERheXM6JywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgfVxyXG5cclxuICBvblNlbGVjdEZyb21EYXkoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nO1xyXG4gICAgY29uc3QgY3VycmVudFRvRGF5VmFsdWUgPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0b0RheScpPy52YWx1ZTtcclxuICAgIGNvbnN0IGN1cnJlbnRUb0RheU9iamVjdCA9IHRoaXMudG9EYXlzLmZpbmQoZCA9PiBkLmluZGl2aWR1YWxEYXRlID09PSBjdXJyZW50VG9EYXlWYWx1ZSlcclxuXHJcbiAgICBjb25zdCBmaW5hbmNpYWxZZWFyID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnZmluYW5jaWFsWWVhcicpPy52YWx1ZTtcclxuICAgIGNvbnN0IGZyb21Nb250aCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21Nb250aCcpPy52YWx1ZTtcclxuICAgIGNvbnN0IHRvTW9udGggPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0b01vbnRoJyk/LnZhbHVlO1xyXG4gICAgY29uc3QgZnJvbURheSA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21EYXknKT8udmFsdWU7XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdFBheWxvYWQgPSB7XHJcbiAgICAgIFllYXI6IGZpbmFuY2lhbFllYXIsXHJcbiAgICAgIEZyb21Nb250aDogZnJvbU1vbnRoLFxyXG4gICAgICBUb01vbnRoOiB0b01vbnRoLFxyXG4gICAgICBGcm9tRGF0ZTogZnJvbURheVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnJlcG9ydFNlcnZpY2UuR2V0VG9EYXRlc0ZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KHJlcXVlc3RQYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRvRGF5cykgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b0RheXMgPSB0b0RheXM7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21Nb250aCcpPy52YWx1ZSAhPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0b01vbnRoJyk/LnZhbHVlICYmIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RvRGF5Jyk/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRUb0RheU9iamVjdCA9IHRoaXMudG9EYXlzLmZpbmQoZCA9PiBkLnBEYXRlID09PSBjdXJyZW50VG9EYXlPYmplY3QucERhdGUpO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgICAgdG9EYXk6IG1hdGNoZWRUb0RheU9iamVjdC5pbmRpdmlkdWFsRGF0ZSA/PyBcIlwiXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICAgIHRvRGF5OiB0aGlzLnRvRGF5c1swXT8uaW5kaXZpZHVhbERhdGUgPz8gXCJcIlxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RvRGF5Jyk/LmVuYWJsZSgpO1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgVG8gRGF5czonLCBlcnJvcik7XHJcbiAgICAgICAgICB3aW5kb3cuYWxlcnQoJ0Vycm9yIGZldGNoaW5nIFRvIERheXMnKTtcclxuICAgICAgICAgIHRoaXMudG9EYXlzID0gW107XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0b0RheScpPy5wYXRjaFZhbHVlKFwiXCIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcblxyXG4gIG9uU2VsZWN0VG9Nb250aCgpIHtcclxuICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcblxyXG4gICAgY29uc3QgY3VycmVudFRvRGF5VmFsdWUgPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0b0RheScpPy52YWx1ZTtcclxuXHJcbiAgICBjb25zdCBmaW5hbmNpYWxZZWFyID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnZmluYW5jaWFsWWVhcicpPy52YWx1ZTtcclxuICAgIGNvbnN0IGZyb21Nb250aCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21Nb250aCcpPy52YWx1ZTtcclxuICAgIGNvbnN0IHRvTW9udGggPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0b01vbnRoJyk/LnZhbHVlO1xyXG4gICAgY29uc3QgZnJvbURheSA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21EYXknKT8udmFsdWU7XHJcblxyXG4gICAgaWYgKCFmaW5hbmNpYWxZZWFyIHx8ICFmcm9tTW9udGggfHwgIXRvTW9udGggfHwgIWZyb21EYXkpIHtcclxuICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCByZXF1ZXN0UGF5bG9hZCA9IHtcclxuICAgICAgWWVhcjogZmluYW5jaWFsWWVhcixcclxuICAgICAgRnJvbU1vbnRoOiBmcm9tTW9udGgsXHJcbiAgICAgIFRvTW9udGg6IHRvTW9udGgsXHJcbiAgICAgIEZyb21EYXRlOiBmcm9tRGF5XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucmVwb3J0U2VydmljZS5HZXRUb0RhdGVzRm9yVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQocmVxdWVzdFBheWxvYWQpXHJcbiAgICAgIC5zdWJzY3JpYmUoXHJcbiAgICAgICAgKHRvRGF5cykgPT4ge1xyXG4gICAgICAgICAgdGhpcy50b0RheXMgPSB0b0RheXM7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21Nb250aCcpPy52YWx1ZSA9PT0gdGhpcy5zZWFyY2hGb3JtLmdldCgndG9Nb250aCcpPy52YWx1ZSkge1xyXG4gICAgICAgICAgICBjb25zdCBmcm9tRGF5ID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnZnJvbURheScpPy52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgZnJvbURheU9iamVjdCA9IHRoaXMuZnJvbURheXMuZmluZChkID0+IGQuaW5kaXZpZHVhbERhdGUgPT09IGZyb21EYXkpO1xyXG4gICAgICAgICAgICBjb25zdCB0b0RheU9iamVjdCA9IHRoaXMudG9EYXlzLmZpbmQoZCA9PiBkLnBEYXRlID09PSBmcm9tRGF5T2JqZWN0Py5pbmRpdmlkdWFsRGF5KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgICB0b0RheTogdG9EYXlPYmplY3Q/LmluZGl2aWR1YWxEYXRlID8/IFwiXCJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgICAgdG9EYXk6IHRoaXMudG9EYXlzWzBdLmluZGl2aWR1YWxEYXRlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgVG8gRGF5czonLCBlcnJvcik7XHJcbiAgICAgICAgICB3aW5kb3cuYWxlcnQoJ0Vycm9yIGZldGNoaW5nIFRvIERheXM6Jyk7XHJcbiAgICAgICAgICB0aGlzLnRvRGF5cyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLmdldCgndG9EYXknKT8ucGF0Y2hWYWx1ZShcIlwiKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0RmluYW5jaWFsWWVhcigpIHtcclxuICAgIC8vIG9uIGZpbmFuY2lhbFllYXIgY2hhbmdlIGZyb21kYXkgYW5kIHRvZGF5IHNob3VsZCBjaGFuZ2UgdG8gZGVmYXVsdCB2YWx1ZXMgYWNvY3JkaW5nIHRvIHllYXIgYW5kIGZyb21tb250aCx0b21vbnRoIC1cclxuXHJcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nO1xyXG5cclxuICAgIC8vIGNhbGwgZnJvbURheXNcclxuXHJcbiAgICBjb25zdCBmaW5hbmNpYWxZZWFyID0gK3RoaXMuc2VhcmNoRm9ybS5nZXQoJ2ZpbmFuY2lhbFllYXInKT8udmFsdWU7XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRQTW9udGggPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCdmcm9tTW9udGgnKT8udmFsdWU7XHJcbiAgICBjb25zdCBmcm9tTW9udGhPYmogPSB0aGlzLmZyb21Nb250aHMuZmluZChtID0+IG0ucE9yZGVyID09PSBzZWxlY3RlZFBNb250aCk7XHJcbiAgICBjb25zdCBmcm9tTW9udGhMYWJlbCA9IGZyb21Nb250aE9iaj8ucGVyaW9kO1xyXG5cclxuICAgIHRoaXMucmVwb3J0U2VydmljZS5HZXRGcm9tRGF0ZXNGb3JUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydChmaW5hbmNpYWxZZWFyLCBmcm9tTW9udGhMYWJlbClcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAoZnJvbURheXMpID0+IHtcclxuICAgICAgICAgIHRoaXMuZnJvbURheXMgPSBmcm9tRGF5cztcclxuICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgZnJvbURheTogdW5kZWZpbmVkIH0pXHJcbiAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IHRvRGF5OiBcIlwiIH0pXHJcbiAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0b0RheScpPy5kaXNhYmxlKCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoZXJyb3IpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIHdoaWxlIGZldGNoaW5nIFRvIERheXM6JywgZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuXHJcbiAgICBjb25zdCBmcm9tTW9udGggPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCdmcm9tTW9udGgnKT8udmFsdWU7XHJcbiAgICBjb25zdCB0b01vbnRoID0gdGhpcy5zZWFyY2hGb3JtLmdldCgndG9Nb250aCcpPy52YWx1ZTtcclxuICAgIGNvbnN0IGZyb21EYXkgPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCdmcm9tRGF5Jyk/LnZhbHVlO1xyXG5cclxuICAgIGNvbnN0IHJlcXVlc3RQYXlsb2FkID0ge1xyXG4gICAgICBZZWFyOiBmaW5hbmNpYWxZZWFyLFxyXG4gICAgICBGcm9tTW9udGg6IGZyb21Nb250aCxcclxuICAgICAgVG9Nb250aDogdG9Nb250aCxcclxuICAgICAgRnJvbURhdGU6IGZyb21EYXlcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5yZXBvcnRTZXJ2aWNlLkdldFRvRGF0ZXNGb3JUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydChyZXF1ZXN0UGF5bG9hZClcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAodG9EYXlzKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvRGF5cyA9IHRvRGF5cztcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hGb3JtLmdldCgnZnJvbU1vbnRoJyk/LnZhbHVlID09PSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0b01vbnRoJyk/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZyb21EYXkgPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCdmcm9tRGF5Jyk/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBmcm9tRGF5T2JqZWN0ID0gdGhpcy5mcm9tRGF5cy5maW5kKGQgPT4gZC5pbmRpdmlkdWFsRGF0ZSA9PT0gZnJvbURheSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvRGF5T2JqZWN0ID0gdGhpcy50b0RheXMuZmluZChkID0+IGQucERhdGUgPT09IGZyb21EYXlPYmplY3Q/LmluZGl2aWR1YWxEYXkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICAgIHRvRGF5OiB0b0RheU9iamVjdD8uaW5kaXZpZHVhbERhdGUgPz8gXCJcIlxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgICB0b0RheTogXCJcIlxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLmdldCgndG9EYXknKT8uZGlzYWJsZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcblxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgZmV0Y2hpbmcgVG8gRGF5czonLCBlcnJvcik7XHJcbiAgICAgICAgICB3aW5kb3cuYWxlcnQoJ0Vycm9yIGZldGNoaW5nIFRvIERheXM6Jyk7XHJcbiAgICAgICAgICB0aGlzLnRvRGF5cyA9IFtdO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLmdldCgndG9EYXknKT8ucGF0Y2hWYWx1ZShcIlwiKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgcHJlcGFyZUZyb21EYXRlQW5kVG9EYXRlRm9yVHJpYWxCYWxhbmNlQWNjb3VudFJlcG9ydCgpIHtcclxuICAgIGNvbnN0IGZpbmFuY2lhbFllYXIgPSArdGhpcy5zZWFyY2hGb3JtLmdldCgnZmluYW5jaWFsWWVhcicpPy52YWx1ZTtcclxuICAgIGNvbnN0IGZyb21Nb250aCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21Nb250aCcpPy52YWx1ZTtcclxuICAgIGNvbnN0IHRvTW9udGggPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0b01vbnRoJyk/LnZhbHVlO1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkRnJvbURheSA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21EYXknKT8udmFsdWU7XHJcbiAgICBjb25zdCBmcm9tRGF5T2JqID0gdGhpcy5mcm9tRGF5cy5maW5kKG0gPT4gbS5pbmRpdmlkdWFsRGF0ZSA9PT0gc2VsZWN0ZWRGcm9tRGF5KTtcclxuICAgIGNvbnN0IGZyb21EYXkgPSBmcm9tRGF5T2JqPy5pbmRpdmlkdWFsRGF5O1xyXG5cclxuICAgIGNvbnN0IHNlbGVjdGVkVG9EYXkgPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0b0RheScpPy52YWx1ZTtcclxuICAgIGNvbnN0IHRvRGF5T2JqID0gdGhpcy50b0RheXMuZmluZChtID0+IG0uaW5kaXZpZHVhbERhdGUgPT09IHNlbGVjdGVkVG9EYXkpO1xyXG4gICAgY29uc3QgdG9EYXkgPSB0b0RheU9iaj8ucERhdGU7XHJcblxyXG4gICAgY29uc3QgZnJvbURhdGUgPSBuZXcgRGF0ZShmaW5hbmNpYWxZZWFyLCArZnJvbU1vbnRoIC0gMSwgK2Zyb21EYXkpOyAvLyBKUyBtb250aCBpcyAwLWJhc2VkXHJcbiAgICBjb25zdCB0b0RhdGUgPSBuZXcgRGF0ZShmaW5hbmNpYWxZZWFyLCArdG9Nb250aCAtIDEsICt0b0RheSk7XHJcblxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgZnJvbURhdGU6IGZyb21EYXRlLFxyXG4gICAgICB0b0RhdGU6IHRvRGF0ZVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tIEltcHJvdmVkIHNlYXJjaCBjcml0ZXJpYSBoZWxwZXJzIChoYW5kbGVzIHByb2R1Y3QpIC0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIHByaXZhdGUgZmllbGRMYWJlbE1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgIGNsaWVudDogJ0NsaWVudDonLFxyXG4gICAgYnJhbmNoOiAnQnJhbmNoOicsXHJcbiAgICBmcm9tRGF0ZTogJ0Zyb20gRGF0ZTonLFxyXG4gICAgdG9EYXRlOiAnVG8gRGF0ZTonLFxyXG4gICAgcHJvZHVjdDogJ1Byb2R1Y3Q6JyxcclxuICAgIHRyYW5zYWN0aW9uUHJvZHVjdDogJ1Byb2R1Y3Q6JyxcclxuICAgIHVzZXJJZDogJ1VzZXI6JyxcclxuICAgIGN1cnJlbmN5OiAnQ3VycmVuY3k6JyxcclxuICAgIHNlbmRDdXJyZW5jeTogJ1NlbmQgQ3VycmVuY3k6JyxcclxuICAgIHJlY2VpdmVDdXJyZW5jeTogJ1JlY2VpdmUgQ3VycmVuY3k6JyxcclxuICAgIHRyYW5zYWN0aW9uU3RhdHVzOiAnVHhuLiBTdGF0dXM6JyxcclxuICAgIHRyYW5zYWN0aW9uU3RhdHVzU2luZ2xlU2VsZWN0OiAnVHhuLiBTdGF0dXM6JyxcclxuICAgIHRyYW5zYWN0aW9uTm86ICdUeG4uIE51bWJlcjonLFxyXG4gICAgZGF0ZTogJ0RhdGU6JyxcclxuICAgIGRhdGVUeXBlOiAnRGF0ZSBUeXBlOicsXHJcbiAgICB2YWx1ZURhdGU6ICdWYWx1ZSBEYXRlOicsXHJcbiAgICBzZW5kQ291bnRyeTogJ1NlbmQgQ291bnRyeTonLFxyXG4gICAgcmVjZWl2ZUNvdW50cnk6ICdSZWNlaXZlIENvdW50cnk6JyxcclxuICAgIHNlbmRCdXNpbmVzc1BhcnRuZXI6ICdTZW5kZXIgUGFydG5lcjonLFxyXG4gICAgcmVjdkJ1c2luZXNzUGFydG5lcjogJ1JlY2VpdmVyIFBhcnRuZXI6JyxcclxuICAgIGJ1c2luZXNzVW5pdDogJ0J1c2luZXNzIFVuaXQ6JyxcclxuICAgIGZpbmFuY2lhbFllYXI6ICdGaW5hbmNpYWwgWWVhcjonLFxyXG4gICAgZnJvbU1vbnRoOiAnRnJvbSBNb250aDonLFxyXG4gICAgdG9Nb250aDogJ1RvIE1vbnRoOicsXHJcbiAgICBmcm9tRGF5OiAnRnJvbSBEYXk6JyxcclxuICAgIHRvRGF5OiAnVG8gRGF5OicsXHJcbiAgICBhY2NvdW50U3RhdHVzOiAnQWNjb3VudCBTdGF0dXM6JyxcclxuICAgIC8vIGFkZCBtb3JlIG1hcHBpbmdzIGFzIG5lZWRlZFxyXG4gIH07XHJcblxyXG4gIC8vIG1hcCB2aXNpYmxlIGZpZWxkIG5hbWUgLT4gYWN0dWFsIGZvcm0gY29udHJvbCBuYW1lICh3aGVuIHRoZXkgZGlmZmVyKVxyXG4gIHByaXZhdGUgZmllbGRUb0NvbnRyb2xNYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XHJcbiAgICB0cmFuc2FjdGlvblN0YXR1c1NpbmdsZVNlbGVjdDogJ3RyYW5zYWN0aW9uU3RhdHVzJyxcclxuICAgIHRyYW5zYWN0aW9uUHJvZHVjdDogJ3Byb2R1Y3QnLCAvLyBpbXBvcnRhbnQ6IHRyYW5zYWN0aW9uUHJvZHVjdCBVSSB1c2VzIGZvcm0gY29udHJvbCBuYW1lZCAncHJvZHVjdCdcclxuICAgIC8vIGFkZCBvdGhlciBtYXBwaW5ncyBpZiB2aXNpYmxlRmllbGQgbmFtZSBkaWZmZXJzIGZyb20gdGhlIGZvcm0gY29udHJvbCBuYW1lXHJcbiAgfTtcclxuXHJcbiAgLy8gbWFwcyB0byB1c2UgYmluZExhYmVsIC8gYmluZFZhbHVlIGZvciBsb29rdXBzXHJcbiAgcHJpdmF0ZSBmaWVsZEJpbmRMYWJlbE1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgIGNsaWVudDogJ2J1c2luZXNzUGFydG5lck5hbWUnLFxyXG4gICAgYnJhbmNoOiAnYnVzaW5lc3NQYXJ0bmVyQnJhbmNoJyxcclxuICAgIHByb2R1Y3Q6ICdwcm9kdWN0Q29kZScsXHJcbiAgICB0cmFuc2FjdGlvblByb2R1Y3Q6ICdwcm9kdWN0Q29kZScsXHJcbiAgICB0cmFuc2FjdGlvblN0YXR1czogJ3RyYW5zYWN0aW9uU3RhdHVzJyxcclxuICAgIHRyYW5zYWN0aW9uU3RhdHVzU2luZ2xlU2VsZWN0OiAndHJhbnNhY3Rpb25TdGF0dXMnLFxyXG4gICAgdXNlcklkOiAndXNlck5hbWUnLFxyXG4gICAgY3VycmVuY3k6ICdjdXJyZW5jeScsXHJcbiAgICBzZW5kQ3VycmVuY3k6ICdjdXJyZW5jeScsXHJcbiAgICByZWNlaXZlQ3VycmVuY3k6ICdjdXJyZW5jeScsXHJcbiAgICBzZW5kQnVzaW5lc3NQYXJ0bmVyOiAnbmFtZScsXHJcbiAgICByZWN2QnVzaW5lc3NQYXJ0bmVyOiAnbmFtZScsXHJcbiAgICBidXNpbmVzc1VuaXQ6ICdidXNpbmVzc1VuaXQnLFxyXG4gICAgZmluYW5jaWFsWWVhcjogJ2ZpbmFuY2lhbFllYXInLFxyXG4gICAgZnJvbU1vbnRoOiAncGVyaW9kJyxcclxuICAgIHRvTW9udGg6ICdwTW9udGhOYW1lJyxcclxuICAgIGZyb21EYXk6ICdpbmRpdmlkdWFsRGF5JyxcclxuICAgIHRvRGF5OiAncERhdGUnLFxyXG4gICAgYWNjb3VudFN0YXR1czogJ3N0YXR1c05hbWUnXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBmaWVsZEJpbmRWYWx1ZU1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgIGNsaWVudDogJ2J1c2luZXNzUGFydG5lckNvZGUnLFxyXG4gICAgYnJhbmNoOiAnYnJhbmNoQ29kZScsXHJcbiAgICBwcm9kdWN0OiAncHJvZHVjdENvZGUnLFxyXG4gICAgdHJhbnNhY3Rpb25Qcm9kdWN0OiAncHJvZHVjdENvZGUnLFxyXG4gICAgdHJhbnNhY3Rpb25TdGF0dXM6ICd0cmFuc2FjdGlvblN0YXR1cycsXHJcbiAgICB0cmFuc2FjdGlvblN0YXR1c1NpbmdsZVNlbGVjdDogJ3RyYW5zYWN0aW9uU3RhdHVzJyxcclxuICAgIHVzZXJJZDogJ3VzZXJJZCcsXHJcbiAgICBjdXJyZW5jeTogJ2N1cnJlbmN5Q29kZScsXHJcbiAgICBzZW5kQ3VycmVuY3k6ICdjdXJyZW5jeUNvZGUnLFxyXG4gICAgcmVjZWl2ZUN1cnJlbmN5OiAnY3VycmVuY3lDb2RlJyxcclxuICAgIHNlbmRCdXNpbmVzc1BhcnRuZXI6ICdpZCcsXHJcbiAgICByZWN2QnVzaW5lc3NQYXJ0bmVyOiAnaWQnLFxyXG4gICAgYnVzaW5lc3NVbml0OiAnYnVzaW5lc3NVbml0JyxcclxuICAgIGZpbmFuY2lhbFllYXI6ICdmaW5hbmNpYWxZZWFyJyxcclxuICAgIGZyb21Nb250aDogJ3BPcmRlcicsXHJcbiAgICB0b01vbnRoOiAncE1vbnRoJyxcclxuICAgIGZyb21EYXk6ICdpbmRpdmlkdWFsRGF0ZScsXHJcbiAgICB0b0RheTogJ2luZGl2aWR1YWxEYXRlJyxcclxuICAgIGFjY291bnRTdGF0dXM6ICdzdGF0dXNDb2RlJ1xyXG4gIH07XHJcblxyXG4gIHByaXZhdGUgZm9ybWF0RGF0ZVRvRERNTVlZWVkoZDogc3RyaW5nIHwgRGF0ZSB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xyXG4gICAgaWYgKCFkKSByZXR1cm4gJyc7XHJcbiAgICBjb25zdCBkYXRlID0gKHR5cGVvZiBkID09PSAnc3RyaW5nJyAmJiBkLmxlbmd0aCkgPyBuZXcgRGF0ZShkKSA6IChkIGluc3RhbmNlb2YgRGF0ZSA/IGQgOiBuZXcgRGF0ZShkKSk7XHJcbiAgICBpZiAoaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSByZXR1cm4gJyc7XHJcbiAgICBjb25zdCBkYXkgPSBTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICBjb25zdCBtb250aCA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTtcclxuICAgIHJldHVybiBgJHtkYXl9LyR7bW9udGh9LyR7eWVhcn1gO1xyXG4gIH1cclxuXHJcbiAgLyoqIGhlbHBlciB0byBmaW5kIGl0ZW0gaW4gdGhlIGtub3duIGxpc3RzIGJ5IGJpbmRWYWx1ZSBhbmQgcmV0dXJuIGl0cyBiaW5kTGFiZWxcclxuICAgKiAgaW1wcm92ZWQ6IHRyaWVzIG11bHRpcGxlIGZhbGxiYWNrIHZhbHVlIGtleXMgc28gcHJvZHVjdCBsb29rdXAgaXMgcm9idXN0ICovXHJcbiAgcHJpdmF0ZSBsb29rdXBGcm9tTGlzdEJ5RmllbGQoZmllbGQ6IHN0cmluZywgc2NhbGFyVmFsdWU6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBiaW5kTGFiZWwgPSB0aGlzLmZpZWxkQmluZExhYmVsTWFwW2ZpZWxkXTtcclxuICAgIGNvbnN0IGJpbmRWYWx1ZSA9IHRoaXMuZmllbGRCaW5kVmFsdWVNYXBbZmllbGRdO1xyXG5cclxuICAgIC8vIGNob29zZSBjYW5kaWRhdGUgbGlzdCBiYXNlZCBvbiBmaWVsZFxyXG4gICAgbGV0IGxpc3Q6IGFueVtdIHwgdW5kZWZpbmVkO1xyXG4gICAgc3dpdGNoIChmaWVsZCkge1xyXG4gICAgICBjYXNlICdjbGllbnQnOiBsaXN0ID0gdGhpcy5jbGllbnRzMTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2JyYW5jaCc6IGxpc3QgPSB0aGlzLmJyYW5jaGVzOyBicmVhaztcclxuICAgICAgY2FzZSAncHJvZHVjdCc6IGxpc3QgPSB0aGlzLnByb2R1Y3RzOyBicmVhaztcclxuICAgICAgY2FzZSAndHJhbnNhY3Rpb25Qcm9kdWN0JzogbGlzdCA9IHRoaXMudHJhbnNhY3Rpb25Qcm9kdWN0czsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3RyYW5zYWN0aW9uU3RhdHVzJzpcclxuICAgICAgY2FzZSAndHJhbnNhY3Rpb25TdGF0dXNTaW5nbGVTZWxlY3QnOiBsaXN0ID0gdGhpcy50cmFuc2FjdGlvblN0YXR1c2VzOyBicmVhaztcclxuICAgICAgY2FzZSAndXNlcklkJzogbGlzdCA9IHRoaXMudXNlcnM7IGJyZWFrO1xyXG4gICAgICBjYXNlICdzZW5kQnVzaW5lc3NQYXJ0bmVyJzogbGlzdCA9IHRoaXMuc2VuZEJ1c2luZXNzUGFydG5lckFnZW50czsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3JlY3ZCdXNpbmVzc1BhcnRuZXInOiBsaXN0ID0gdGhpcy5yZWN2QnVzaW5lc3NQYXJ0bmVyQWdlbnRzOyBicmVhaztcclxuICAgICAgY2FzZSAnYnVzaW5lc3NVbml0JzogbGlzdCA9IHRoaXMuYnVzaW5lc3NVbml0czsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2ZpbmFuY2lhbFllYXInOiBsaXN0ID0gdGhpcy5maW5hbmNpYWxZZWFyczsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Zyb21Nb250aCc6IGxpc3QgPSB0aGlzLmZyb21Nb250aHM7IGJyZWFrO1xyXG4gICAgICBjYXNlICd0b01vbnRoJzogbGlzdCA9IHRoaXMudG9Nb250aHM7IGJyZWFrO1xyXG4gICAgICBjYXNlICdmcm9tRGF5JzogbGlzdCA9IHRoaXMuZnJvbURheXM7IGJyZWFrO1xyXG4gICAgICBjYXNlICd0b0RheSc6IGxpc3QgPSB0aGlzLnRvRGF5czsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2FjY291bnRTdGF0dXMnOiBsaXN0ID0gdGhpcy5hY2NvdW50U3RhdHVzZXM7IGJyZWFrO1xyXG4gICAgICBjYXNlICdzZW5kQ291bnRyeSc6XHJcbiAgICAgIGNhc2UgJ3JlY2VpdmVDb3VudHJ5JzogbGlzdCA9IHRoaXMuY291bnRyaWVzOyBicmVhaztcclxuICAgICAgY2FzZSAnY3VycmVuY3knOlxyXG4gICAgICBjYXNlICdzZW5kQ3VycmVuY3knOlxyXG4gICAgICBjYXNlICdyZWNlaXZlQ3VycmVuY3knOiBsaXN0ID0gdGhpcy5jdXJyZW5jaWVzOyBicmVhaztcclxuICAgICAgZGVmYXVsdDogbGlzdCA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBoYW5kbGUgY29tbW9uICdBbGwnIHNlbnRpbmVsXHJcbiAgICBpZiAoc2NhbGFyVmFsdWUgPT09ICdBbGwnIHx8IHNjYWxhclZhbHVlID09PSAnJyB8fCBzY2FsYXJWYWx1ZSA9PT0gbnVsbCB8fCBzY2FsYXJWYWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gU3RyaW5nKHNjYWxhclZhbHVlIHx8ICcnKTtcclxuXHJcbiAgICBpZiAobGlzdCAmJiBsaXN0Lmxlbmd0aCkge1xyXG4gICAgICAvLyB0cnkgdGhlIGNvbmZpZ3VyZWQgYmluZFZhbHVlIGtleSBmaXJzdFxyXG4gICAgICBpZiAoYmluZFZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgZm91bmQgPSBsaXN0LmZpbmQoKHg6IGFueSkgPT4gU3RyaW5nKHhbYmluZFZhbHVlXSkgPT09IFN0cmluZyhzY2FsYXJWYWx1ZSkpO1xyXG4gICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgaWYgKGJpbmRMYWJlbCAmJiBmb3VuZFtiaW5kTGFiZWxdKSByZXR1cm4gZm91bmRbYmluZExhYmVsXTtcclxuICAgICAgICAgIHJldHVybiBmb3VuZC50cmFuc2FjdGlvblN0YXR1c0xhYmVsIHx8IGZvdW5kLnRyYW5zYWN0aW9uU3RhdHVzIHx8IGZvdW5kLm5hbWUgfHwgZm91bmQucHJvZHVjdE5hbWUgfHwgZm91bmQuYnVzaW5lc3NQYXJ0bmVyTmFtZSB8fCBTdHJpbmcoc2NhbGFyVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gZmFsbGJhY2s6IHRyeSBtYXRjaGluZyBvbiBjb21tb24ga2V5cyBpbiBjYXNlIHNoYXBlcyBkaWZmZXJcclxuICAgICAgY29uc3QgY29tbW9uS2V5cyA9IFsncHJvZHVjdENvZGUnLCAnY29kZScsICdpZCcsICd2YWx1ZScsICdjdXJyZW5jeUNvZGUnLCAnc3RhdHVzQ29kZSddO1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBjb21tb25LZXlzKSB7XHJcbiAgICAgICAgY29uc3QgZm91bmQyID0gbGlzdC5maW5kKCh4OiBhbnkpID0+IHggJiYgeFtrZXldICE9PSB1bmRlZmluZWQgJiYgU3RyaW5nKHhba2V5XSkgPT09IFN0cmluZyhzY2FsYXJWYWx1ZSkpO1xyXG4gICAgICAgIGlmIChmb3VuZDIpIHtcclxuICAgICAgICAgIGNvbnN0IGxhYmVsQ2FuZGlkYXRlID0gYmluZExhYmVsICYmIGZvdW5kMltiaW5kTGFiZWxdID8gZm91bmQyW2JpbmRMYWJlbF0gOiAoZm91bmQyLnByb2R1Y3ROYW1lIHx8IGZvdW5kMi5uYW1lIHx8IGZvdW5kMi50cmFuc2FjdGlvblN0YXR1c0xhYmVsIHx8IGZvdW5kMi5idXNpbmVzc1BhcnRuZXJOYW1lKTtcclxuICAgICAgICAgIHJldHVybiBsYWJlbENhbmRpZGF0ZSB8fCBTdHJpbmcoc2NhbGFyVmFsdWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gbGFzdCBhdHRlbXB0OiBpZiBzY2FsYXJWYWx1ZSBlcXVhbHMgYSBsYWJlbCBpbiB0aGUgbGlzdCwgcmV0dXJuIGl0XHJcbiAgICAgIGlmIChiaW5kTGFiZWwpIHtcclxuICAgICAgICBjb25zdCBmb3VuZDMgPSBsaXN0LmZpbmQoKHg6IGFueSkgPT4gU3RyaW5nKHhbYmluZExhYmVsXSkgPT09IFN0cmluZyhzY2FsYXJWYWx1ZSkpO1xyXG4gICAgICAgIGlmIChmb3VuZDMpIHJldHVybiBTdHJpbmcoZm91bmQzW2JpbmRMYWJlbF0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gbm90IGZvdW5kIOKAlCByZXR1cm4gc2NhbGFyIGFzIHN0cmluZ1xyXG4gICAgcmV0dXJuIFN0cmluZyhzY2FsYXJWYWx1ZSk7XHJcbiAgfVxyXG5cclxuICAvLyAtLS0gbG9va3VwIHRoYXQgcHJlZmVycyBiaW5kTGFiZWwgd2hlbiBwb3NzaWJsZSAtLS1cclxuICBwcml2YXRlIGdldExvb2t1cERpc3BsYXlWYWx1ZShmaWVsZDogc3RyaW5nLCB2YWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykgcmV0dXJuICcnO1xyXG5cclxuICAgIC8vIERhdGUgaGFuZGxpbmdcclxuICAgIGlmIChmaWVsZCA9PT0gJ2Zyb21EYXRlJyB8fCBmaWVsZCA9PT0gJ3RvRGF0ZScgfHwgZmllbGQgPT09ICdkYXRlJyB8fCBmaWVsZCA9PT0gJ3ZhbHVlRGF0ZScpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0RGF0ZVRvRERNTVlZWVkodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEN1cnJlbmNpZXM6IHNob3cgXCJDT0RFIC0gTmFtZVwiXHJcbiAgICBpZiAoWydjdXJyZW5jeScsICdzZW5kQ3VycmVuY3knLCAncmVjZWl2ZUN1cnJlbmN5J10uaW5jbHVkZXMoZmllbGQpKSB7XHJcbiAgICAgIGlmICh2YWx1ZSA9PT0gJ0FsbCcpIHJldHVybiAnQWxsJztcclxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICBjb25zdCBjb2RlID0gdmFsdWUuY3VycmVuY3lDb2RlIHx8IHZhbHVlLmN1cnJlbmN5IHx8ICcnO1xyXG4gICAgICAgIGNvbnN0IG5hbWUgPSB2YWx1ZS5jdXJyZW5jeSB8fCAnJztcclxuICAgICAgICByZXR1cm4gY29kZSA/IGAke2NvZGV9IC0gJHtuYW1lfWAgOiBTdHJpbmcodmFsdWUpO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGN1ciA9IHRoaXMuY3VycmVuY2llcz8uZmluZCgoeDogYW55KSA9PiB4LmN1cnJlbmN5Q29kZSA9PT0gdmFsdWUpO1xyXG4gICAgICByZXR1cm4gY3VyID8gYCR7Y3VyLmN1cnJlbmN5Q29kZX0gLSAke2N1ci5jdXJyZW5jeX1gIDogU3RyaW5nKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiBpdCdzIGFuIGFycmF5IChtdWx0aS1zZWxlY3QpLCBtYXAgZWFjaCBpdGVtXHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgY29uc3QgbWFwcGVkID0gdmFsdWUubWFwKHYgPT4ge1xyXG4gICAgICAgIGlmICh0eXBlb2YgdiA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgICAgIGNvbnN0IGJpbmRMYWJlbCA9IHRoaXMuZmllbGRCaW5kTGFiZWxNYXBbZmllbGRdO1xyXG4gICAgICAgICAgcmV0dXJuIGJpbmRMYWJlbCAmJiB2W2JpbmRMYWJlbF0gPyB2W2JpbmRMYWJlbF0gOiAodi50cmFuc2FjdGlvblN0YXR1c0xhYmVsIHx8IHYuc3RhdHVzTmFtZSB8fCB2LnByb2R1Y3ROYW1lIHx8IHYubmFtZSB8fCBKU09OLnN0cmluZ2lmeSh2KSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmxvb2t1cEZyb21MaXN0QnlGaWVsZChmaWVsZCwgdik7XHJcbiAgICAgIH0pO1xyXG4gICAgICBpZiAobWFwcGVkLmxlbmd0aCA9PT0gMSAmJiAobWFwcGVkWzBdID09PSAnQWxsJyB8fCBtYXBwZWRbMF0gPT09ICcnKSkgcmV0dXJuICdBbGwnO1xyXG4gICAgICByZXR1cm4gbWFwcGVkLmpvaW4oJywgJyk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSWYgdmFsdWUgaXMgYW4gb2JqZWN0IChzaW5nbGUgc2VsZWN0IHJldHVybmVkIG9iamVjdClcclxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XHJcbiAgICAgIC8vIHByb2R1Y3Qgc3BlY2lhbC1jYXNlOiBwcm9kdWN0IG9iamVjdCBtaWdodCBoYXZlIHByb2R1Y3ROYW1lL3Byb2R1Y3RDb2RlXHJcbiAgICAgIGlmIChmaWVsZCA9PT0gJ3Byb2R1Y3QnIHx8IGZpZWxkID09PSAndHJhbnNhY3Rpb25Qcm9kdWN0Jykge1xyXG4gICAgICAgIGNvbnN0IHBuID0gdmFsdWUucHJvZHVjdE5hbWUgfHwgdmFsdWUubmFtZSB8fCB2YWx1ZS5sYWJlbCB8fCB2YWx1ZS5kaXNwbGF5IHx8IHZhbHVlLnByb2R1Y3QgfHwgdmFsdWUudHJhbnNhY3Rpb25Qcm9kdWN0O1xyXG4gICAgICAgIGlmIChwbikgcmV0dXJuIHBuO1xyXG4gICAgICAgIC8vIHRyeSBjb21tb24ga2V5c1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS5wcm9kdWN0Q29kZSB8fCB2YWx1ZS5jb2RlIHx8IHZhbHVlLmlkID8gU3RyaW5nKHZhbHVlLnByb2R1Y3RDb2RlIHx8IHZhbHVlLmNvZGUgfHwgdmFsdWUuaWQpIDogSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBiaW5kTGFiZWwgPSB0aGlzLmZpZWxkQmluZExhYmVsTWFwW2ZpZWxkXTtcclxuICAgICAgaWYgKGJpbmRMYWJlbCAmJiB2YWx1ZVtiaW5kTGFiZWxdKSByZXR1cm4gdmFsdWVbYmluZExhYmVsXTtcclxuICAgICAgcmV0dXJuIHZhbHVlLnRyYW5zYWN0aW9uU3RhdHVzIHx8IHZhbHVlLm5hbWUgfHwgdmFsdWUuYnVzaW5lc3NQYXJ0bmVyTmFtZSB8fCBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU2NhbGFyIC0+IGxvb2t1cCBpbiBsaXN0cyB1c2luZyBiaW5kVmFsdWUgLT4gcmV0dXJuIGJpbmRMYWJlbFxyXG4gICAgLy8gcHJvZHVjdCBzcGVjaWFsLWNhc2U6IGlmIHZhbHVlID09PSAnQWxsJyB0aGVuIHJldHVybiAnQWxsJ1xyXG4gICAgaWYgKChmaWVsZCA9PT0gJ3Byb2R1Y3QnIHx8IGZpZWxkID09PSAndHJhbnNhY3Rpb25Qcm9kdWN0JykgJiYgU3RyaW5nKHZhbHVlKSA9PT0gJ0FsbCcpIHJldHVybiAnQWxsJztcclxuXHJcbiAgICByZXR1cm4gdGhpcy5sb29rdXBGcm9tTGlzdEJ5RmllbGQoZmllbGQsIHZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgc2VhcmNoIGNyaXRlcmlhIGFycmF5IGZvciB0aGUgY3VycmVudGx5IHZpc2libGUgZmllbGRzLlxyXG4gICAqIE91dHB1dDogWyBbJ0xhYmVsOicsICdWYWx1ZSddLCAuLi4gXVxyXG4gICAqL1xyXG4gIHB1YmxpYyBnZXRTZWFyY2hDcml0ZXJpYUFycmF5KCk6IFtzdHJpbmcsIHN0cmluZ11bXSB7XHJcbiAgICBpZiAoIXRoaXMuc2VhcmNoRm9ybSkgcmV0dXJuIFtdO1xyXG5cclxuICAgIGNvbnN0IGNyaXRlcmlhOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXTtcclxuICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuc2VhcmNoRm9ybS52YWx1ZTtcclxuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMudmlzaWJsZUZpZWxkczsgLy8gdXNlcyB5b3VyIGdldHRlclxyXG5cclxuICAgIGZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcclxuICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmZpZWxkTGFiZWxNYXBbZmllbGRdIHx8IChmaWVsZCArICc6Jyk7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2xOYW1lID0gdGhpcy5maWVsZFRvQ29udHJvbE1hcFtmaWVsZF0gfHwgZmllbGQ7XHJcbiAgICAgIGNvbnN0IHZhbHVlID0gZm9ybVZhbHVlW2NvbnRyb2xOYW1lXTtcclxuXHJcbiAgICAgIC8vIGRhdGVzXHJcbiAgICAgIGlmIChjb250cm9sTmFtZSA9PT0gJ2Zyb21EYXRlJyB8fCBjb250cm9sTmFtZSA9PT0gJ3RvRGF0ZScgfHwgY29udHJvbE5hbWUgPT09ICdkYXRlJyB8fCBjb250cm9sTmFtZSA9PT0gJ3ZhbHVlRGF0ZScpIHtcclxuICAgICAgICBjcml0ZXJpYS5wdXNoKFtsYWJlbCwgdGhpcy5mb3JtYXREYXRlVG9ERE1NWVlZWSh2YWx1ZSkgfHwgJyddKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIFVzZSBnZXRMb29rdXBEaXNwbGF5VmFsdWUgdG8gcHJvZHVjZSB0aGUgaHVtYW4tZnJpZW5kbHkgc3RyaW5nIChoYW5kbGVzIGFycmF5cy9vYmplY3RzL3NjYWxhcnMpXHJcbiAgICAgIGNvbnN0IGRpc3BsYXkgPSB0aGlzLmdldExvb2t1cERpc3BsYXlWYWx1ZShmaWVsZCwgdmFsdWUpO1xyXG5cclxuICAgICAgY3JpdGVyaWEucHVzaChbbGFiZWwsIGRpc3BsYXkgfHwgJyddKTtcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiBjcml0ZXJpYTtcclxuICB9XHJcblxyXG5cclxuXHJcbn1cclxuIiwiPGg2IGNsYXNzPVwiQnJlYWRjcnVtYlwiPlxyXG4gIDxhIGNsYXNzPVwiQnJlYWRDcnVtYkxpbmtcIiBbcm91dGVyTGlua109XCJbJy9yZXBvcnRzJ11cIj5cclxuICAgIDxoMT5SZXBvcnRzPC9oMT5cclxuICA8L2E+XHJcbiAgPGEgaHJlZj1cIkJyZWFkQ3J1bWJMaW5rXCI+PC9hPlxyXG4gIDxzcGFuIGNsYXNzPVwiQnJlYWRDcnVtYkFycm93XCI+PC9zcGFuPlxyXG4gIDxhIGNsYXNzPVwiQnJlYWRDcnVtYkxpbmtcIj5cclxuICAgIDxoMj57eyBSZXBvcnROYW1lIH19PC9oMj5cclxuICA8L2E+XHJcbjwvaDY+XHJcblxyXG48YXBwLWxvYWRlciAqbmdJZj1cImxvYWRpbmdTdGF0ZSA9PT0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmdcIj48L2FwcC1sb2FkZXI+XHJcbjxzZWN0aW9uPlxyXG4gIDxmb3JtIFtmb3JtR3JvdXBdPVwic2VhcmNoRm9ybVwiIChuZ1N1Ym1pdCk9XCJvblNlYXJjaCgpXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJjb2wtY3VzdG9tLTEwLTVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmlsdGVyLWdyaWRcIj5cclxuXHJcbiAgICAgICAgICA8IS0tIER5bmFtaWNhbGx5IHJlbmRlciBmaWx0ZXJzIGluIG9yZGVyIC0tPlxyXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgZmllbGQgb2YgdmlzaWJsZUZpZWxkc1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJmaWVsZFwiPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIENsaWVudCAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCInY2xpZW50J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+Q2xpZW50PHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJjbGllbnRzMVwiIGJpbmRMYWJlbD1cImJ1c2luZXNzUGFydG5lck5hbWVcIiBiaW5kVmFsdWU9XCJidXNpbmVzc1BhcnRuZXJDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IENsaWVudFwiIFtjbGVhcmFibGVdPVwiZmFsc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJjbGllbnRcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpbnZhbGlkLXNlbGVjdCc6IHNlYXJjaEZvcm0uZ2V0KCdjbGllbnQnKT8uaW52YWxpZCAmJiAoc2VhcmNoRm9ybS5nZXQoJ2NsaWVudCcpPy50b3VjaGVkIHx8IGZvcm1WYWxpZGF0aW9uRXJyb3IpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uQ2xpZW50Q2hhbmdlKClcIiAob3Blbik9XCJvbk9wZW4oKVwiIChjbG9zZSk9XCJvbkNsb3NlKClcIiBbc2VhcmNoYWJsZV09XCJpc09wZW5cIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW3RpdGxlXT1cIml0ZW0uYnVzaW5lc3NQYXJ0bmVyTmFtZVwiPnt7IGl0ZW0uYnVzaW5lc3NQYXJ0bmVyTmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEJyYW5jaCAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCInYnJhbmNoJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+QnJhbmNoPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJicmFuY2hlc1wiIGJpbmRMYWJlbD1cImJ1c2luZXNzUGFydG5lckJyYW5jaFwiIGJpbmRWYWx1ZT1cImJyYW5jaENvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQnJhbmNoXCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cImJyYW5jaFwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQtc2VsZWN0Jzogc2VhcmNoRm9ybS5nZXQoJ2JyYW5jaCcpPy5pbnZhbGlkICYmIChzZWFyY2hGb3JtLmdldCgnYnJhbmNoJyk/LnRvdWNoZWQgfHwgZm9ybVZhbGlkYXRpb25FcnJvcil9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25CcmFuY2hDaGFuZ2UoKVwiIChvcGVuKT1cIm9uT3BlbigpXCIgKGNsb3NlKT1cIm9uQ2xvc2UoKVwiIFtzZWFyY2hhYmxlXT1cImlzT3BlblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFt0aXRsZV09XCJpdGVtLmJ1c2luZXNzUGFydG5lckJyYW5jaFwiPnt7IGl0ZW0uYnVzaW5lc3NQYXJ0bmVyQnJhbmNoIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gRnJvbSBEYXRlIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidmcm9tRGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPkZyb20gRGF0ZTxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGRhdGUtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBkcGlja2VyXCIgcGxhY2Vob2xkZXI9XCJkZC9tbS95eXl5XCIgbmdiRGF0ZXBpY2tlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAjZnJvbURhdGVJbnB1dD1cIm5nYkRhdGVwaWNrZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJmcm9tRGF0ZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaW52YWxpZC1kYXRlJzpzZWFyY2hGb3JtLmdldCgnZnJvbURhdGUnKT8uaW52YWxpZCAmJiAoc2VhcmNoRm9ybS5nZXQoJ2Zyb21EYXRlJyk/LnRvdWNoZWQgfHwgZm9ybVZhbGlkYXRpb25FcnJvcil9XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpbnB1dC1ncm91cC1idXR0b24gY2FsXCIgKGNsaWNrKT1cImZyb21EYXRlSW5wdXQudG9nZ2xlKClcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBUbyBEYXRlIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIid0b0RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5UbyBEYXRlPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgZGF0ZS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGRwaWNrZXJcIiBwbGFjZWhvbGRlcj1cImRkL21tL3l5eXlcIiBuZ2JEYXRlcGlja2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICN0b0RhdGVJbnB1dD1cIm5nYkRhdGVwaWNrZXJcIiBmb3JtQ29udHJvbE5hbWU9XCJ0b0RhdGVcIiBbbWluRGF0ZV09XCJkaXNhYmxlZERhdGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQtZGF0ZSc6c2VhcmNoRm9ybS5nZXQoJ3RvRGF0ZScpPy5pbnZhbGlkICYmIChzZWFyY2hGb3JtLmdldCgndG9EYXRlJyk/LnRvdWNoZWQgfHwgZm9ybVZhbGlkYXRpb25FcnJvcil9XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpbnB1dC1ncm91cC1idXR0b24gY2FsXCIgKGNsaWNrKT1cInRvRGF0ZUlucHV0LnRvZ2dsZSgpXCIgdHlwZT1cImJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gUHJvZHVjdCAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCIncHJvZHVjdCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPlByb2R1Y3Q8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cInByb2R1Y3RzXCIgYmluZExhYmVsPVwicHJvZHVjdE5hbWVcIiBiaW5kVmFsdWU9XCJwcm9kdWN0Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBQcm9kdWN0XCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cInByb2R1Y3RcIiAob3Blbik9XCJvbk9wZW4oKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xvc2UpPVwib25DbG9zZSgpXCIgW3NlYXJjaGFibGVdPVwiaXNPcGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gVXNlciAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCIndXNlcklkJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+VXNlcjxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwidXNlcnNcIiBiaW5kTGFiZWw9XCJ1c2VyTmFtZVwiIGJpbmRWYWx1ZT1cInVzZXJJZFwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFVzZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cInVzZXJJZFwiIHJlcXVpcmVkIChvcGVuKT1cIm9uT3BlbigpXCIgKGNsb3NlKT1cIm9uQ2xvc2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoYWJsZV09XCJpc09wZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpbnZhbGlkLXNlbGVjdCc6IHNlYXJjaEZvcm0uZ2V0KCd1c2VySWQnKT8uaW52YWxpZCAmJiAoc2VhcmNoRm9ybS5nZXQoJ3VzZXJJZCcpPy50b3VjaGVkIHx8IGZvcm1WYWxpZGF0aW9uRXJyb3IpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEN1cnJlbmN5IC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidjdXJyZW5jeSdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPkN1cnJlbmN5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJjdXJyZW5jaWVzXCIgYmluZFZhbHVlPVwiY3VycmVuY3lDb2RlXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQ3VycmVuY3lcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cImN1cnJlbmN5XCIgW3NlYXJjaGFibGVdPVwidHJ1ZVwiIFtzZWFyY2hGbl09XCJjdXJyZW5jeVNlYXJjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAob3Blbik9XCJvbk9wZW4oKVwiIChjbG9zZSk9XCJvbkNsb3NlKClcIiBbc2VhcmNoYWJsZV09XCJpc09wZW5cIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRlbXBsYXRlIGZvciBkcm9wZG93biBvcHRpb25zIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXRlbS5jdXJyZW5jeUNvZGUgPT09ICdBbGwnID8gJ0FsbCcgOiAoaXRlbS5jdXJyZW5jeUNvZGUgKyAnIC0gJyArIGl0ZW0uY3VycmVuY3kpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5jdXJyZW5jeUNvZGUgPT09ICdBbGwnID8gJ0FsbCcgOiAoaXRlbS5jdXJyZW5jeUNvZGUgKyAnIC0gJyArIGl0ZW0uY3VycmVuY3kpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRlbXBsYXRlIGZvciBzZWxlY3RlZCB2YWx1ZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1sYWJlbC10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXRlbS5jdXJyZW5jeUNvZGUgPT09ICdBbGwnID8gJ0FsbCcgOiAoaXRlbS5jdXJyZW5jeUNvZGUgKyAnIC0gJyArIGl0ZW0uY3VycmVuY3kpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5jdXJyZW5jeUNvZGUgPT09ICdBbGwnID8gJ0FsbCcgOiAoaXRlbS5jdXJyZW5jeUNvZGUgKyAnIC0gJyArIGl0ZW0uY3VycmVuY3kpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS1TZW5kIEN1cnJlbmN5IC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidzZW5kQ3VycmVuY3knXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5TZW5kIEN1cnJlbmN5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJjdXJyZW5jaWVzXCIgYmluZFZhbHVlPVwiY3VycmVuY3lDb2RlXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQ3VycmVuY3lcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cImN1cnJlbmN5XCIgW3NlYXJjaGFibGVdPVwidHJ1ZVwiIFtzZWFyY2hGbl09XCJjdXJyZW5jeVNlYXJjaFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAob3Blbik9XCJvbk9wZW4oKVwiIChjbG9zZSk9XCJvbkNsb3NlKClcIiBbc2VhcmNoYWJsZV09XCJpc09wZW5cIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRlbXBsYXRlIGZvciBkcm9wZG93biBvcHRpb25zIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXRlbS5jdXJyZW5jeUNvZGUgPT09ICdBbGwnID8gJ0FsbCcgOiAoaXRlbS5jdXJyZW5jeUNvZGUgKyAnIC0gJyArIGl0ZW0uY3VycmVuY3kpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5jdXJyZW5jeUNvZGUgPT09ICdBbGwnID8gJ0FsbCcgOiAoaXRlbS5jdXJyZW5jeUNvZGUgKyAnIC0gJyArIGl0ZW0uY3VycmVuY3kpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIFRlbXBsYXRlIGZvciBzZWxlY3RlZCB2YWx1ZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1sYWJlbC10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXRlbS5jdXJyZW5jeUNvZGUgPT09ICdBbGwnID8gJ0FsbCcgOiAoaXRlbS5jdXJyZW5jeUNvZGUgKyAnIC0gJyArIGl0ZW0uY3VycmVuY3kpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5jdXJyZW5jeUNvZGUgPT09ICdBbGwnID8gJ0FsbCcgOiAoaXRlbS5jdXJyZW5jeUNvZGUgKyAnIC0gJyArIGl0ZW0uY3VycmVuY3kpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gVHJhbnNhY3Rpb24gU3RhdHVzIChNdWx0aS1zZWxlY3QpIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIid0cmFuc2FjdGlvblN0YXR1cydcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPlR4bi4gU3RhdHVzPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IGNsYXNzPVwidHJhbnNhY3Rpb24tc3RhdHVzLXNlbGVjdFwiIFtpdGVtc109XCJ0cmFuc2FjdGlvblN0YXR1c2VzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cInRyYW5zYWN0aW9uU3RhdHVzXCIgYmluZFZhbHVlPVwidHJhbnNhY3Rpb25TdGF0dXNcIiBbbXVsdGlwbGVdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBUcmFuc2FjdGlvbiBTdGF0dXNcIiBmb3JtQ29udHJvbE5hbWU9XCJ0cmFuc2FjdGlvblN0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xvc2VPblNlbGVjdF09XCJmYWxzZVwiIFtjbGVhcmFibGVdPVwiZmFsc2VcIiBbc2VhcmNoYWJsZV09XCJmYWxzZVwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQtc2VsZWN0Jzogc2VhcmNoRm9ybS5nZXQoJ3RyYW5zYWN0aW9uU3RhdHVzJyk/LmludmFsaWQgJiYgKHNlYXJjaEZvcm0uZ2V0KCd0cmFuc2FjdGlvblN0YXR1cycpPy50b3VjaGVkIHx8IGZvcm1WYWxpZGF0aW9uRXJyb3IpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWl0ZW0kPVwiaXRlbSRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cIml0ZW0kLnNlbGVjdGVkXCIgLz4ge3sgaXRlbS50cmFuc2FjdGlvblN0YXR1cyB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBUcmFuc2FjdGlvbiBObyAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCIndHJhbnNhY3Rpb25ObydcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPlR4bi4gTnVtYmVyPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZHBpY2tlclwiIGZvcm1Db250cm9sTmFtZT1cInRyYW5zYWN0aW9uTm9cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJFbnRlciB0cmFuc2FjdGlvbiBudW1iZXJcIiAvPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFZhbHVlIERhdGUgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ3ZhbHVlRGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtM1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPlZhbHVlIERhdGU8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC05XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZHBpY2tlclwiIHBsYWNlaG9sZGVyPVwiZGQvbW0veXl5eVwiIG5nYkRhdGVwaWNrZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgI3RvRGF0ZUlucHV0PVwibmdiRGF0ZXBpY2tlclwiIGZvcm1Db250cm9sTmFtZT1cInRvRGF0ZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaW52YWxpZC1kYXRlJzpzZWFyY2hGb3JtLmdldCgnZGF0ZScpPy5pbnZhbGlkICYmIChzZWFyY2hGb3JtLmdldCgnZGF0ZScpPy50b3VjaGVkIHx8IGZvcm1WYWxpZGF0aW9uRXJyb3IpfVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwidG9EYXRlSW5wdXQudG9nZ2xlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhclwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFNlbmQgQ291bnRyeSAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCInc2VuZENvdW50cnknXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5TZW5kIENvdW50cnk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cImNvdW50cmllc1wiIGJpbmRMYWJlbD1cImNvdW50cnlcIiBiaW5kVmFsdWU9XCJjb3VudHJ5Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBQcm9kdWN0XCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cInNlbmRDb3VudHJ5XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFt0aXRsZV09XCJpdGVtLmNvdW50cnlcIj57eyBpdGVtLmNvdW50cnkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBSZWNlaXZlIENvdW50cnkgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ3JlY2VpdmVDb3VudHJ5J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+UmVjZWl2ZSBDb3VudHJ5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJjb3VudHJpZXNcIiBiaW5kTGFiZWw9XCJjb3VudHJ5XCIgYmluZFZhbHVlPVwiY291bnRyeUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgUHJvZHVjdFwiIFtjbGVhcmFibGVdPVwiZmFsc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJyZWNlaXZlQ291bnRyeVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwiaXRlbS5jb3VudHJ5XCI+e3sgaXRlbS5jb3VudHJ5IH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS1UcmFuc2FjdGlvbiBQcm9kdWN0IC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIid0cmFuc2FjdGlvblByb2R1Y3QnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5Qcm9kdWN0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJ0cmFuc2FjdGlvblByb2R1Y3RzXCIgYmluZExhYmVsPVwibmFtZVwiIGJpbmRWYWx1ZT1cInByb2R1Y3RDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFByb2R1Y3RcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwicHJvZHVjdFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIERhdGUgVHlwZSAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCInZGF0ZVR5cGUnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5EYXRlIFR5cGU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgcGxhY2Vob2xkZXI9XCItIFBsZWFzZSBzZWxlY3QgLVwiIGZvcm1Db250cm9sTmFtZT1cImRhdGVUeXBlXCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIHJlcXVpcmVkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLW9wdGlvbiBbdmFsdWVdPVwiMVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSBEYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy1vcHRpb24gW3ZhbHVlXT1cIjJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgUG9zdGluZyBEYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLW9wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBEYXRlIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+RGF0ZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlucHV0LWdyb3VwIGRhdGUtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBkcGlja2VyXCIgcGxhY2Vob2xkZXI9XCJkZC9tbS95eXl5XCIgbmdiRGF0ZXBpY2tlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAjZGF0ZUlucHV0PVwibmdiRGF0ZXBpY2tlclwiIGZvcm1Db250cm9sTmFtZT1cImRhdGVcIiBhdXRvY29tcGxldGU9XCJvZmZcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQtZGF0ZSc6IHNlYXJjaEZvcm0uZ2V0KCdkYXRlJyk/LmludmFsaWQgJiYgKHNlYXJjaEZvcm0uZ2V0KCdkYXRlJyk/LnRvdWNoZWQgfHwgZm9ybVZhbGlkYXRpb25FcnJvcil9XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJpbnB1dC1ncm91cC1idXR0b24gY2FsXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJkYXRlSW5wdXQudG9nZ2xlKClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIHJlY2VpdmVDdXJyZW5jeSAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCIncmVjZWl2ZUN1cnJlbmN5J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+UmVjZWl2ZSBDdXJyZW5jeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwiY3VycmVuY2llc1wiIGJpbmRWYWx1ZT1cImN1cnJlbmN5Q29kZVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFJlY2VpdmUgQ3VycmVuY3lcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsZWFyYWJsZV09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cInJlY2VpdmVDdXJyZW5jeVwiIHJlcXVpcmVkIChjaGFuZ2UpPVwib25CcmFuY2hDaGFuZ2UoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbc2VhcmNoYWJsZV09XCJ0cnVlXCIgW3NlYXJjaEZuXT1cImN1cnJlbmN5U2VhcmNoXCIgKG9wZW4pPVwib25PcGVuKClcIiAoY2xvc2UpPVwib25DbG9zZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hhYmxlXT1cImlzT3BlblwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRHJvcGRvd24gb3B0aW9ucyAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW3RpdGxlXT1cIml0ZW0uY3VycmVuY3lDb2RlID09PSAnQWxsJyA/ICdBbGwnIDogKGl0ZW0uY3VycmVuY3lDb2RlICsgJyAtICcgKyBpdGVtLmN1cnJlbmN5KVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGl0ZW0uY3VycmVuY3lDb2RlID09PSAnQWxsJyA/ICdBbGwnIDogKGl0ZW0uY3VycmVuY3lDb2RlICsgJyAtICcgKyBpdGVtLmN1cnJlbmN5KSB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZWxlY3RlZCB2YWx1ZSAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1sYWJlbC10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXRlbS5jdXJyZW5jeUNvZGUgPT09ICdBbGwnID8gJ0FsbCcgOiAoaXRlbS5jdXJyZW5jeUNvZGUgKyAnIC0gJyArIGl0ZW0uY3VycmVuY3kpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5jdXJyZW5jeUNvZGUgPT09ICdBbGwnID8gJ0FsbCcgOiAoaXRlbS5jdXJyZW5jeUNvZGUgKyAnIC0gJyArIGl0ZW0uY3VycmVuY3kpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gU2VuZCBCdXNpbmVzc1BhcnRuZXIgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ3NlbmRCdXNpbmVzc1BhcnRuZXInXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5TZW5kIENsaWVudDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwic2VuZEJ1c2luZXNzUGFydG5lckFnZW50c1wiIGJpbmRMYWJlbD1cIm5hbWVcIiBiaW5kVmFsdWU9XCJpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBTZW5kIFBhcnRuZXJcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwic2VuZEJ1c2luZXNzUGFydG5lclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQtc2VsZWN0Jzogc2VhcmNoRm9ybS5nZXQoJ3NlbmRCdXNpbmVzc1BhcnRuZXInKT8uaW52YWxpZCAmJiAoc2VhcmNoRm9ybS5nZXQoJ3NlbmRCdXNpbmVzc1BhcnRuZXInKT8udG91Y2hlZCB8fCBmb3JtVmFsaWRhdGlvbkVycm9yKX1cIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW3RpdGxlXT1cIml0ZW0ubmFtZVwiPnt7IGl0ZW0ubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFJlY3YgQnVzaW5lc3NQYXJ0bmVyIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidyZWN2QnVzaW5lc3NQYXJ0bmVyJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+UmVjdiBDbGllbnQ8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cInJlY3ZCdXNpbmVzc1BhcnRuZXJBZ2VudHNcIiBiaW5kTGFiZWw9XCJuYW1lXCIgYmluZFZhbHVlPVwiaWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgUmVjdiBQYXJ0bmVyXCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cInJlY3ZCdXNpbmVzc1BhcnRuZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpbnZhbGlkLXNlbGVjdCc6IHNlYXJjaEZvcm0uZ2V0KCdyZWN2QnVzaW5lc3NQYXJ0bmVyJyk/LmludmFsaWQgJiYgKHNlYXJjaEZvcm0uZ2V0KCdyZWN2QnVzaW5lc3NQYXJ0bmVyJyk/LnRvdWNoZWQgfHwgZm9ybVZhbGlkYXRpb25FcnJvcil9XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFt0aXRsZV09XCJpdGVtLm5hbWVcIj57eyBpdGVtLm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBUcmFuc2FjdGlvbiBTdGF0dXMgKFNpbmdsZS1zZWxlY3QpIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIid0cmFuc2FjdGlvblN0YXR1c1NpbmdsZVNlbGVjdCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPlR4bi4gU3RhdHVzPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJ0cmFuc2FjdGlvblN0YXR1c2VzXCIgYmluZExhYmVsPVwidHJhbnNhY3Rpb25TdGF0dXNcIiBiaW5kVmFsdWU9XCJ0cmFuc2FjdGlvblN0YXR1c1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBTdGF0dXNcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwidHJhbnNhY3Rpb25TdGF0dXNcIiByZXF1aXJlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpbnZhbGlkLXNlbGVjdCc6IHNlYXJjaEZvcm0uZ2V0KCd0cmFuc2FjdGlvblN0YXR1cycpPy5pbnZhbGlkICYmIChzZWFyY2hGb3JtLmdldCgndHJhbnNhY3Rpb25TdGF0dXMnKT8udG91Y2hlZCB8fCBmb3JtVmFsaWRhdGlvbkVycm9yKX1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBGb3IgVHJpYWwgQmFsYW5jZSAtIEFjY291bnRzIFJlcG9ydCAtLT5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBCdXNpbmVzcyBVbml0IC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIididXNpbmVzc1VuaXQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5CdXNpbmVzcyBVbml0PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJidXNpbmVzc1VuaXRzXCIgYmluZExhYmVsPVwiY29tcGFueUZ1bGxOYW1lXCIgYmluZFZhbHVlPVwiY29tcGFueUNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQnVzaW5lc3MgVW5pdFwiIFtjbGVhcmFibGVdPVwiZmFsc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJidXNpbmVzc1VuaXRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpbnZhbGlkLXNlbGVjdCc6IHNlYXJjaEZvcm0uZ2V0KCdidXNpbmVzc1VuaXQnKT8uaW52YWxpZCAmJiAoc2VhcmNoRm9ybS5nZXQoJ2J1c2luZXNzVW5pdCcpPy50b3VjaGVkIHx8IGZvcm1WYWxpZGF0aW9uRXJyb3IpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFllYXIgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbmFuY2lhbFllYXInXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5GaW5hbmNpYWwgWWVhcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwiZmluYW5jaWFsWWVhcnNcIiBiaW5kTGFiZWw9XCJmaW5hbmNpYWxZZWFyXCIgYmluZFZhbHVlPVwiZmluYW5jaWFsWWVhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBZZWFyXCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cImZpbmFuY2lhbFllYXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpbnZhbGlkLXNlbGVjdCc6IHNlYXJjaEZvcm0uZ2V0KCdmaW5hbmNpYWxZZWFyJyk/LmludmFsaWQgJiYgKHNlYXJjaEZvcm0uZ2V0KCdmaW5hbmNpYWxZZWFyJyk/LnRvdWNoZWQgfHwgZm9ybVZhbGlkYXRpb25FcnJvcil9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3RGaW5hbmNpYWxZZWFyKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBGcm9tIE1vbnRoIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidmcm9tTW9udGgnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5Gcm9tIE1vbnRoPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJmcm9tTW9udGhzXCIgYmluZExhYmVsPVwicGVyaW9kXCIgYmluZFZhbHVlPVwicE9yZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IEZyb20gTW9udGhcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZnJvbU1vbnRoXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaW52YWxpZC1zZWxlY3QnOiBzZWFyY2hGb3JtLmdldCgnZnJvbU1vbnRoJyk/LmludmFsaWQgJiYgKHNlYXJjaEZvcm0uZ2V0KCdmcm9tTW9udGgnKT8udG91Y2hlZHx8IGZvcm1WYWxpZGF0aW9uRXJyb3IpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0RnJvbU1vbnRoKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBUbyBNb250aCAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCIndG9Nb250aCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPlRvIE1vbnRoPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJ0b01vbnRoc1wiIGJpbmRMYWJlbD1cInBNb250aE5hbWVcIiBiaW5kVmFsdWU9XCJwTW9udGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgVG8gTW9udGhcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwidG9Nb250aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQtc2VsZWN0Jzogc2VhcmNoRm9ybS5nZXQoJ3RvTW9udGgnKT8uaW52YWxpZCAmJiAoc2VhcmNoRm9ybS5nZXQoJ3RvTW9udGgnKT8udG91Y2hlZHx8IGZvcm1WYWxpZGF0aW9uRXJyb3IpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0VG9Nb250aCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gRnJvbSBEYXkgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2Zyb21EYXknXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5Gcm9tIERheSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cImZyb21EYXlzXCIgYmluZExhYmVsPVwiaW5kaXZpZHVhbERheVwiIGJpbmRWYWx1ZT1cImluZGl2aWR1YWxEYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IEZyb20gRGF5XCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cImZyb21EYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpbnZhbGlkLXNlbGVjdCc6IHNlYXJjaEZvcm0uZ2V0KCdmcm9tRGF5Jyk/LmludmFsaWQgJiYgKHNlYXJjaEZvcm0uZ2V0KCdmcm9tRGF5Jyk/LnRvdWNoZWR8fCBmb3JtVmFsaWRhdGlvbkVycm9yKX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblNlbGVjdEZyb21EYXkoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFRvIERheSAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCIndG9EYXknXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5UbyBEYXk8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJ0b0RheXNcIiBiaW5kTGFiZWw9XCJwRGF0ZVwiIGJpbmRWYWx1ZT1cImluZGl2aWR1YWxEYXRlXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgVG8gRGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbGVhcmFibGVdPVwiZmFsc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJ0b0RheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQtc2VsZWN0Jzogc2VhcmNoRm9ybS5nZXQoJ3RvRGF5Jyk/LmludmFsaWQgJiYgKHNlYXJjaEZvcm0uZ2V0KCd0b0RheScpPy50b3VjaGVkfHwgZm9ybVZhbGlkYXRpb25FcnJvcil9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gRGF0ZSBUeXBlIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlVHlwZUZvclRyaWFsQmFsYW5jZUFjY291bnRzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+RGF0ZSBUeXBlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJkYXRlVHlwZXNcIiBiaW5kTGFiZWw9XCJkYXRlVHlwZUxhYmVsXCIgYmluZFZhbHVlPVwiZGF0ZVR5cGVDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IERhdGUgVHlwZVwiIGZvcm1Db250cm9sTmFtZT1cImRhdGVUeXBlXCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQtc2VsZWN0Jzogc2VhcmNoRm9ybS5nZXQoJ2RhdGVUeXBlJyk/LmludmFsaWQgJiYgKHNlYXJjaEZvcm0uZ2V0KCdkYXRlVHlwZScpPy50b3VjaGVkfHwgZm9ybVZhbGlkYXRpb25FcnJvcil9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEFjY291bnQgU3RhdHVzIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidhY2NvdW50U3RhdHVzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+QWNjb3VudCBTdGF0dXM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgY2xhc3M9XCJ0cmFuc2FjdGlvbi1zdGF0dXMtc2VsZWN0XCIgW2l0ZW1zXT1cImFjY291bnRTdGF0dXNlc1wiIGJpbmRMYWJlbD1cInN0YXR1c05hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwic3RhdHVzQ29kZVwiIFttdWx0aXBsZV09XCJ0cnVlXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQWNjb3VudCBTdGF0dXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWNjb3VudFN0YXR1c1wiIFtjbG9zZU9uU2VsZWN0XT1cImZhbHNlXCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIFtzZWFyY2hhYmxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQtc2VsZWN0Jzogc2VhcmNoRm9ybS5nZXQoJ2FjY291bnRTdGF0dXMnKT8uaW52YWxpZCAmJiAoc2VhcmNoRm9ybS5nZXQoJ2FjY291bnRTdGF0dXMnKT8udG91Y2hlZHx8IGZvcm1WYWxpZGF0aW9uRXJyb3IpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWl0ZW0kPVwiaXRlbSRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cIml0ZW0kLnNlbGVjdGVkXCIgLz4ge3sgaXRlbS5zdGF0dXNOYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwhLS1TdW1tYXJ5IFJlcG9ydC0tPlxyXG4gICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ3N1bW1hcnlSZXBvcnQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5TdW1tYXJ5IFJlcG9ydDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwic3VtbWFyeVJlcG9ydFR5cGVzXCIgYmluZExhYmVsPVwibGFiZWxcIiBiaW5kVmFsdWU9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtjbGVhcmFibGVdPVwiZmFsc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJzdW1tYXJ5UmVwb3J0XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFt0aXRsZV09XCJpdGVtLmxhYmVsXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWN1c3RvbS0xLTVcIj5cclxuICAgICAgICA8IS0tIFZpZXcgUmVwb3J0IEJ1dHRvbiAoQWx3YXlzIGF0IFRvcC1SaWdodCkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQgdmlldy1yZXBvcnQtYnRuXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcmVwb3J0XCI+VmlldzwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZm9ybT5cclxuPC9zZWN0aW9uPlxyXG48aHI+XHJcbjwhLS0gRXJyb3IgTWVzc2FnZXMgLS0+XHJcbjxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgbXQtM1wiICpuZ0lmPVwiZm9ybVZhbGlkYXRpb25FcnJvciAmJiBoYXNTZWFyY2hlZFwiPlxyXG4gIFBsZWFzZSBmaWxsIGFsbCBtYW5kYXRvcnkgZmllbGRzXHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBtdC0zXCIgKm5nSWY9XCJlcnJvck1lc3NhZ2UgJiYgbG9hZGluZ1N0YXRlID09PSBDb21wb25lbnRMb2FkaW5nU3RhdGUuRXJyb3JcIj5cclxuICB7eyBlcnJvck1lc3NhZ2UgfX1cclxuPC9kaXY+Il19
|
|
2147
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yZXBvcnRzLWxpYi9zcmMvbGliL3NoYXJlZC9zZWFyY2gtZmlsdGVyL3NlYXJjaC1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmVwb3J0cy1saWIvc3JjL2xpYi9zaGFyZWQvc2VhcmNoLWZpbHRlci9zZWFyY2gtZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBcUIsTUFBTSxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUM3RyxPQUFPLEVBQTBCLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxxQkFBcUIsRUFBOEQsTUFBTSxtRUFBbUUsQ0FBQztBQUN0SyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN0RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJM0MsT0FBTyxLQUFLLGFBQWEsTUFBTSxpQkFBaUIsQ0FBQzs7Ozs7Ozs7OztBQVFqRCxNQUFNLE9BQU8scUJBQXFCO0lBcUZoQyxZQUNVLGFBQTRCLEVBQzVCLEVBQWUsRUFDZixNQUFxQixFQUNyQixFQUFxQjtRQUhyQixrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBQ2YsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixPQUFFLEdBQUYsRUFBRSxDQUFtQjtRQXZGckIs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LElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUM7WUFDekQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQztZQUMzRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUM7WUFFckMsUUFBUTtZQUNSLElBQUksV0FBVyxLQUFLLFVBQVUsSUFBSSxXQUFXLEtBQUssUUFBUSxJQUFJLFdBQVcsS0FBSyxNQUFNLElBQUksV0FBVyxLQUFLLFdBQVcsRUFBRTtnQkFDbkgsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDL0QsT0FBTzthQUNSO1lBRUQsa0dBQWtHO1lBQ2xHLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFFekQsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7O2tIQTcwRVUscUJBQXFCO3NHQUFyQixxQkFBcUIsc01DbEJsQyxnNWdDQXdsQk07MkZEdGtCTyxxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0UsbUJBQW1COzBMQU1wQixVQUFVO3NCQUFsQixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFFRSxjQUFjO3NCQUF0QixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkluaXQsIE9uRGVzdHJveSwgT3V0cHV0LCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRMb2FkaW5nU3RhdGUsIENsaWVudCwgQnJhbmNoLCBDdXJyZW5jeSwgUHJvZHVjdCwgVHJhbnNhY3Rpb25TdGF0dXMsIFVzZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvdHJhbnNhY3Rpb24tZW5xdWlyeS1yZXBvcnQvdHJhbnNhY3Rpb24tZW5xdWlyeS5tb2RlbCc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZm9ya0pvaW4sIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbmFsaXplLCBtYXAsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBSZXBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcmVwb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maWdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOZ2JEYXRlU3RydWN0IH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xyXG5pbXBvcnQgKiBhcyBhbmd1bGFyQ29tbW9uIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1zZWFyY2gtZmlsdGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VhcmNoLWZpbHRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vc2VhcmNoLWZpbHRlci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgU2VhcmNoRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBJbnB1dCgpIFJlcG9ydE5hbWUhOiBzdHJpbmc7XHJcbiAgQE91dHB1dCgpIHNlYXJjaENsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgZm9ybVZhbGlkID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xyXG4gIHNlYXJjaEZvcm0hOiBGb3JtR3JvdXA7XHJcbiAgQElucHV0KCkgaW5pdGlhbEZpbHRlcnM6IGFueTtcclxuICBmb3JtVmFsaWRhdGlvbkVycm9yOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIGxvYWRpbmdTdGF0ZTogQ29tcG9uZW50TG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gIENvbXBvbmVudExvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZTtcclxuICBoYXNTZWFyY2hlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX2Vycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XHJcblxyXG4gIGN1cnJlbnRVc2VyOiBzdHJpbmcgPSAnJztcclxuICB1c2VybmFtZU1pc3Npbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICB0b2tlbiA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oJ2FjY2Vzc190b2tlbicpO1xyXG4gIGFwcGxpY2F0aW9uVHlwZSA9ICdlenJlbWl0JztcclxuICBjb21wYW55Q29kZSA9ICdCSCc7XHJcbiAgc2VydmljZVVybDogc3RyaW5nO1xyXG4gIHB1YmxpYyBpc09wZW4gPSBmYWxzZTtcclxuXHJcbiAgY2xpZW50czE6IENsaWVudFtdID0gW107XHJcbiAgYnJhbmNoZXM6IEJyYW5jaFtdID0gW107XHJcbiAgdXNlcnM6IFVzZXJbXSA9IFtdO1xyXG4gIGN1cnJlbmNpZXM6IEN1cnJlbmN5W10gPSBbXTtcclxuICBwcm9kdWN0czogUHJvZHVjdFtdID0gW107XHJcbiAgdHJhbnNhY3Rpb25TdGF0dXNlczogVHJhbnNhY3Rpb25TdGF0dXNbXSA9IFtdO1xyXG4gIHN1bW1hcnlSZXBvcnRUeXBlczogYW55W10gPSBbXTtcclxuICBzZWxlY3RlZFN0YXR1c2VzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIHNob3dTdGF0dXNEcm9wZG93bjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHZpc2libGVGaWVsZEtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgcGFyYW1zOiBhbnk7XHJcbiAgY291bnRyaWVzOiBhbnlbXSA9IFtdO1xyXG4gIHRyYW5zYWN0aW9uUHJvZHVjdHM6IGFueVtdID0gW107XHJcbiAgZGF0ZVR5cGU6IGFueSA9IDE7XHJcbiAgZGF0ZTogYW55O1xyXG4gIHNlbmRCdXNpbmVzc1BhcnRuZXJBZ2VudHM6IGFueVtdID0gW107XHJcbiAgcmVjdkJ1c2luZXNzUGFydG5lckFnZW50czogYW55W10gPSBbXTtcclxuICBjbGllbnROYW1lOiBzdHJpbmc7XHJcbiAgY2xpZW50VHlwZTogc3RyaW5nO1xyXG4gIGRpc2FibGVkRGF0ZTogTmdiRGF0ZVN0cnVjdDtcclxuICBpc1NlbGVjdEFsbENoZWNrZWQgPSB0cnVlO1xyXG4gIGVycm9NZXNzYWdlOiBzdHJpbmcgPSAnRXJyb3IgaW4gTG9hZGluZyBEYXRhJztcclxuXHJcbiAgLy8gZm9yIFRyaWFsIEJhbGFuY2UgLSBBY2NvdW50cyBSZXBvcnRcclxuICBidXNpbmVzc0xpbmVzOiBhbnlbXSA9IFtdO1xyXG4gIGFjY291bnRTdGF0dXNlczogYW55W10gPSBbXTtcclxuICBjdXJyZW5jeTogYW55W10gPSBbXTtcclxuICBmaW5hbmNpYWxZZWFyczogYW55W10gPSBbXTtcclxuICBmcm9tTW9udGhzOiBhbnlbXSA9IFtdO1xyXG4gIHRvTW9udGhzOiBhbnlbXSA9IFtdO1xyXG4gIGRhdGVUeXBlczogYW55W10gPSBbXTtcclxuICBmcm9tRGF5czogYW55W10gPSBbXTtcclxuICB0b0RheXM6IGFueVtdID0gW107XHJcbiAgcGFyYW1EYXRlRGVmYXVsdDogYW55W10gPSBbXTtcclxuXHJcbiAgLy8gRmllbGQgdmlzaWJpbGl0eSBtYXAsICdmcm9tRGF0ZScsICd0b0RhdGUnLCdwcm9kdWN0JywndXNlcklkJywnY3VycmVuY3knLCd0cmFuc2FjdGlvblN0YXR1cycsJ3RyYW5zYWN0aW9uTm8nXHJcbiAgdmlzaWJsZUZpZWxkc01hcDogeyBbcmVwb3J0OiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge1xyXG4gICAgJ1RyYW5zYWN0aW9uIEVucXVpcnknOiBbJ2NsaWVudCcsICdmcm9tRGF0ZScsICd0b0RhdGUnLCAnYnJhbmNoJywgJ3Byb2R1Y3QnLCAnY3VycmVuY3knLCAndHJhbnNhY3Rpb25TdGF0dXMnLCAndHJhbnNhY3Rpb25ObyddLFxyXG4gICAgJ0ZDIExlZGdlcic6IFsnY2xpZW50JywgJ2Zyb21EYXRlJywgJ3RvRGF0ZScsICdjdXJyZW5jeScsICdwcm9kdWN0J10sXHJcbiAgICAnQnJhbmNoIEFjdGl2aXR5IFNlbmQnOiBbJ2NsaWVudCcsICdmcm9tRGF0ZScsICd0b0RhdGUnLCAnYnJhbmNoJywgJ3RyYW5zYWN0aW9uUHJvZHVjdCcsICdyZWNlaXZlQ3VycmVuY3knLCAndHJhbnNhY3Rpb25TdGF0dXMnLCAnc2VuZENvdW50cnknLCAncmVjZWl2ZUNvdW50cnknXSxcclxuICAgICdBQ0MgR0wgRGV0YWlscyBFbnF1aXJ5JzogWydkYXRlVHlwZScsICdkYXRlJ10sXHJcbiAgICAnQnJhbmNoIEFjdGl2aXR5IFJlY2VpdmUnOiBbJ2NsaWVudCcsICdmcm9tRGF0ZScsICd0b0RhdGUnLCAnYnJhbmNoJywgJ3RyYW5zYWN0aW9uUHJvZHVjdCcsICdyZWNlaXZlQ3VycmVuY3knLCAndHJhbnNhY3Rpb25TdGF0dXMnLCAnc2VuZENvdW50cnknLCAncmVjZWl2ZUNvdW50cnknXSxcclxuICAgICdDYW5jZWxsYXRpb24gVHJhbnNhY3Rpb24nOiBbJ2NsaWVudCcsICdmcm9tRGF0ZScsICd0b0RhdGUnLCAnYnJhbmNoJywgJ3NlbmRDb3VudHJ5JywgJ3JlY2VpdmVDb3VudHJ5JywgJ3Byb2R1Y3QnLCAncmVjZWl2ZUN1cnJlbmN5J10sXHJcbiAgICAnUmV2ZW51ZSBQZXIgVHJhbnNhY3Rpb24nOiBbJ3NlbmRCdXNpbmVzc1BhcnRuZXInLCAnZnJvbURhdGUnLCAndG9EYXRlJywgJ3JlY3ZCdXNpbmVzc1BhcnRuZXInLCAnc2VuZENvdW50cnknLCAncmVjZWl2ZUNvdW50cnknLCAndHJhbnNhY3Rpb25TdGF0dXMnXSxcclxuICAgICdTdGF0ZW1lbnQgb2YgQWNjb3VudHMnOiBbJ2NsaWVudCcsICdmcm9tRGF0ZScsICd0b0RhdGUnXSxcclxuICAgICdBY2NvdW50aW5nJzogWydjbGllbnQnLCAnZnJvbURhdGUnLCAndG9EYXRlJywgJ2JyYW5jaCcsICd0cmFuc2FjdGlvblByb2R1Y3QnLCAnc2VuZEN1cnJlbmN5JywgJ3RyYW5zYWN0aW9uU3RhdHVzJywgJ3NlbmRDb3VudHJ5JywgJ3JlY2VpdmVDb3VudHJ5J10sXHJcbiAgICAnQ3JlZGl0IExpbWl0IFN0YXR1cyBFbnF1aXJ5JzogWydjbGllbnQnLCAnZnJvbURhdGUnLCAndG9EYXRlJywgJ3RyYW5zYWN0aW9uU3RhdHVzU2luZ2xlU2VsZWN0J10sXHJcbiAgICAnRnVuZGluZyc6IFsnZnJvbURhdGUnLCAndG9EYXRlJ10sXHJcbiAgICAnVHJpYWwgQmFsYW5jZSAtIEFjY291bnRzJzogWydidXNpbmVzc0xpbmUnLCAnYWNjb3VudFN0YXR1cycsICdjdXJyZW5jeScsICdmaW5hbmNpYWxZZWFyJywgJ2Zyb21Nb250aCcsICd0b01vbnRoJywgJ2RhdGVUeXBlRm9yVHJpYWxCYWxhbmNlQWNjb3VudHMnLCAnZnJvbURheScsICd0b0RheSddLFxyXG4gICAgJ0JyYW5jaCBBY3Rpdml0eSBTZW5kIFN1bW1hcnknOiBbJ2NsaWVudCcsICdmcm9tRGF0ZScsICd0b0RhdGUnLCAnYnJhbmNoJywgJ3RyYW5zYWN0aW9uUHJvZHVjdCcsICdyZWNlaXZlQ3VycmVuY3knLCAndHJhbnNhY3Rpb25TdGF0dXMnLCAnc2VuZENvdW50cnknLCAncmVjZWl2ZUNvdW50cnknLCAnc3VtbWFyeVJlcG9ydCddLFxyXG5cclxuICAgICdUcmFuc2FjdGlvbiBNb25pdG9yaW5nJzogWydjbGllbnQnLCAnZnJvbURhdGUnLCAndG9EYXRlJywgJ2JyYW5jaCcsICd0cmFuc2FjdGlvblByb2R1Y3QnLCAncmVjZWl2ZUN1cnJlbmN5JywgJ3RyYW5zYWN0aW9uU3RhdHVzJywgJ3NlbmRDb3VudHJ5JywgJ3JlY2VpdmVDb3VudHJ5J10sXHJcbiAgICAvLyBBZGQgbW9yZSByZXBvcnQgdHlwZXMgaGVyZVxyXG4gIH07XHJcblxyXG4gIGdldCB2aXNpYmxlRmllbGRzKCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLnZpc2libGVGaWVsZHNNYXBbdGhpcy5SZXBvcnROYW1lXSB8fCBbXTtcclxuICB9XHJcblxyXG4gIGlzRmllbGRWaXNpYmxlKGZpZWxkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnZpc2libGVGaWVsZHMuaW5jbHVkZXMoZmllbGQpO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIHJlcG9ydFNlcnZpY2U6IFJlcG9ydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZiOiBGb3JtQnVpbGRlcixcclxuICAgIHByaXZhdGUgY29uZmlnOiBDb25maWdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjZDogQ2hhbmdlRGV0ZWN0b3JSZWZcclxuICApIHtcclxuICAgIHRoaXMuc2VydmljZVVybCA9IHRoaXMuY29uZmlnLmdldC5zZXJ2aWNlVXJsO1xyXG4gICAgbGV0IGZvc3NpbFVzZXIgPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKCdmb3NzaWx1c2VybmFtZScpO1xyXG4gICAgbGV0IGV6cmVtaXRVc2VyID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSgnZXpyZW1pdHVzZXJuYW1lJyk7XHJcblxyXG4gICAgaWYgKGZvc3NpbFVzZXIpIHRoaXMuY3VycmVudFVzZXIgPSBmb3NzaWxVc2VyO1xyXG4gICAgZWxzZSBpZiAoZXpyZW1pdFVzZXIpIHRoaXMuY3VycmVudFVzZXIgPSBlenJlbWl0VXNlcjtcclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnVzZXJuYW1lTWlzc2luZyA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLmN1cnJlbnRVc2VyID0gdGhpcy5jdXJyZW50VXNlci5yZXBsYWNlKC9eW1wiJ10oLiopW1wiJ10kLywgJyQxJyk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgIHRoaXMuZGlzYWJsZWREYXRlID0ge1xyXG4gICAgICB5ZWFyOiB0b2RheS5nZXRGdWxsWWVhcigpLFxyXG4gICAgICBtb250aDogdG9kYXkuZ2V0TW9udGgoKSArIDEsXHJcbiAgICAgIGRheTogdG9kYXkuZ2V0RGF0ZSgpXHJcbiAgICB9O1xyXG4gICAgdGhpcy5jaGVja1JlcG9ydCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgY2hlY2tSZXBvcnQoKSB7XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiVHJhbnNhY3Rpb24gRW5xdWlyeVwiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcclxuICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGVDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhKCk7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25TdGF0dXNTdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJCcmFuY2ggQWN0aXZpdHkgU2VuZFwiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcclxuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGEoKTtcclxuICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGVDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25TdGF0dXNTdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJBQ0MgR0wgRGV0YWlscyBFbnF1aXJ5XCIpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkNhbmNlbGxhdGlvbiBUcmFuc2FjdGlvblwiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcclxuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGEoKTtcclxuICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGVDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09PSBcIkJyYW5jaCBBY3Rpdml0eSBSZWNlaXZlXCIpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xyXG4gICAgICB0aGlzLmxvYWRJbml0aWFsRGF0YSgpO1xyXG4gICAgICB0aGlzLnN1YnNjcmliZVRvRGF0ZUNoYW5nZXMoKTtcclxuICAgICAgdGhpcy50cmFuc2FjdGlvblN0YXR1c1N1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PT0gXCJSZXZlbnVlIFBlciBUcmFuc2FjdGlvblwiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKVxyXG4gICAgICB0aGlzLmxvYWRJbml0aWFsRGF0YSgpO1xyXG4gICAgICB0aGlzLnN1YnNjcmliZVRvRGF0ZUNoYW5nZXMoKTtcclxuICAgICAgdGhpcy50cmFuc2FjdGlvblN0YXR1c1N1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIlN0YXRlbWVudCBvZiBBY2NvdW50c1wiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcclxuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGEoKTtcclxuICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGVDaGFuZ2VzKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQWNjb3VudGluZ1wiKSB7XHJcbiAgICAgIHRoaXMuaW5pdGlhbGl6ZUZvcm0oKTtcclxuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGEoKTtcclxuICAgICAgdGhpcy5zdWJzY3JpYmVUb0RhdGVDaGFuZ2VzKCk7XHJcbiAgICAgIHRoaXMudHJhbnNhY3Rpb25TdGF0dXNTdWJzY3JpYmUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT09IFwiQ3JlZGl0IExpbWl0IFN0YXR1cyBFbnF1aXJ5XCIpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xyXG4gICAgICB0aGlzLmxvYWRJbml0aWFsRGF0YSgpO1xyXG4gICAgICB0aGlzLnN1YnNjcmliZVRvRGF0ZUNoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJGdW5kaW5nXCIpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xyXG4gICAgICB0aGlzLnN1YnNjcmliZVRvRGF0ZUNoYW5nZXMoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJUcmlhbCBCYWxhbmNlIC0gQWNjb3VudHNcIikge1xyXG4gICAgICB0aGlzLmluaXRpYWxpemVGb3JtKCk7XHJcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhKCk7XHJcbiAgICB9XHJcbiAgICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJCcmFuY2ggQWN0aXZpdHkgU2VuZCBTdW1tYXJ5XCIpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xyXG4gICAgICB0aGlzLmxvYWRJbml0aWFsRGF0YSgpO1xyXG4gICAgICB0aGlzLnN1YnNjcmliZVRvRGF0ZUNoYW5nZXMoKTtcclxuICAgICAgdGhpcy50cmFuc2FjdGlvblN0YXR1c1N1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJUcmFuc2FjdGlvbiBNb25pdG9yaW5nXCIpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplRm9ybSgpO1xyXG4gICAgICB0aGlzLmxvYWRJbml0aWFsRGF0YSgpO1xyXG4gICAgICB0aGlzLnN1YnNjcmliZVRvRGF0ZUNoYW5nZXMoKTtcclxuICAgICAgdGhpcy50cmFuc2FjdGlvblN0YXR1c1N1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZEluaXRpYWxEYXRhKCkge1xyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSAnVHJhbnNhY3Rpb24gRW5xdWlyeScpIHtcclxuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGFmb3J0eG5FbnF1aXJ5KCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkJyYW5jaCBBY3Rpdml0eSBTZW5kXCIpIHtcclxuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGFmb3JCcmFuY2hBY3Rpdml0eVNlbmQoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09PSBcIkJyYW5jaCBBY3Rpdml0eSBSZWNlaXZlXCIpIHtcclxuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGFmb3JCcmFuY2hBY3Rpdml0eVJlY2VpdmUoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJDYW5jZWxsYXRpb24gVHJhbnNhY3Rpb25cIikge1xyXG4gICAgICB0aGlzLmxvYWRJbml0aWFsRGF0YUZvckNhbmNlbGxhdGlvblJlcG9ydCgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PT0gXCJSZXZlbnVlIFBlciBUcmFuc2FjdGlvblwiKSB7XHJcbiAgICAgIHRoaXMubG9hZERhdGFGb3JSZXZlbnVlUGVyVHJhbnNhY3Rpb25SZXBvcnQoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJTdGF0ZW1lbnQgb2YgQWNjb3VudHNcIikge1xyXG4gICAgICB0aGlzLmxvYWRJbml0aWFsRGF0YUZvclN0YXRlbWVudE9mQWNjb3VudHMoKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJBY2NvdW50aW5nXCIpIHtcclxuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGFmb3JBY2NvdW50aW5nKCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiVHJpYWwgQmFsYW5jZSAtIEFjY291bnRzXCIpIHtcclxuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGFGb3JUcmlhbEJhbGFuY2VBY2NvdW50cygpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT09IFwiQ3JlZGl0IExpbWl0IFN0YXR1cyBFbnF1aXJ5XCIpIHtcclxuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGFGb3JDcmVkaXRMaW1pdFN0YXR1c0VucXVpcnkoKTtcclxuICAgIH1cclxuICAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQnJhbmNoIEFjdGl2aXR5IFNlbmQgU3VtbWFyeVwiKSB7XHJcbiAgICAgIHRoaXMubG9hZEluaXRpYWxEYXRhZm9yQnJhbmNoQWN0aXZpdHlTZW5kU3VtbWFyeSgpO1xyXG4gICAgfVxyXG4gIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJUcmFuc2FjdGlvbiBNb25pdG9yaW5nXCIpIHtcclxuICAgICAgdGhpcy5sb2FkSW5pdGlhbERhdGFmb3JUcmFuc2FjdGlvbk1vbml0b3JpbmcoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gbG9hZEluaXRpYWxEYXRhZm9yQnJhbmNoQWN0aXZpdHlTZW5kU3VtbWFyeSgpIHtcclxuICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICBmb3JrSm9pbih7XHJcbiAgICAgIHBhcmFtczogdGhpcy5yZXBvcnRTZXJ2aWNlLmdldFBhcmFtc0ZvclNlbmRTdW1tYXJ5UmVwb3J0KCkucGlwZShcclxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHBhcmFtcycsIGVycik7XHJcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKSxcclxuICAgICAgY2xpZW50czogdGhpcy5yZXBvcnRTZXJ2aWNlLmdldFBheUluQWdlbnRmb3JTZW5kU3VtbWFyeVJlcG9ydCgpLnBpcGUoXHJcbiAgICAgICAgbWFwKChjbGllbnRzOiBhbnlbXSk6IENsaWVudFtdID0+XHJcbiAgICAgICAgICBjbGllbnRzLm1hcCgoY2xpZW50LCBpbmRleCkgPT4gKHtcclxuICAgICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyTmFtZTogY2xpZW50LmFnZW50LFxyXG4gICAgICAgICAgICBidXNpbmVzc1BhcnRuZXJDb2RlOiBjbGllbnQuY29kZSxcclxuICAgICAgICAgICAgZGlzcGxheU9yZGVyOiBpbmRleCxcclxuICAgICAgICAgICAgY2xpZW50VHlwZTogXCJcIlxyXG4gICAgICAgICAgfSkpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGNsaWVudHMnLCBlcnIpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9KS5zdWJzY3JpYmUoXHJcbiAgICAgIHtcclxuICAgICAgICBuZXh0OiAoeyBwYXJhbXMsIGNsaWVudHMgfSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudHMxID0gY2xpZW50cztcclxuICAgICAgICAgIHRoaXMuY291bnRyaWVzID0gWy4uLnBhcmFtcz8uY291bnRyaWVzXVxyXG4gICAgICAgICAgdGhpcy5jdXJyZW5jaWVzID0gWy4uLnBhcmFtcz8uY3VycmVuY2llc107XHJcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uU3RhdHVzZXMgPSBbLi4ucGFyYW1zPy50cmFuc2FjdGlvblN0YXR1c1R5cGVzXTtcclxuICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Qcm9kdWN0cyA9IFsuLi5wYXJhbXM/LnRyYW5zYWN0aW9uUHJvZHVjdFR5cGVzXTtcclxuICAgICAgICAgIHRoaXMuc3VtbWFyeVJlcG9ydFR5cGVzID0gW1xyXG4gICAgICAgICAgICB7IGxhYmVsOiAnRGF0ZS1XaXNlIFN1bW1hcnknLCB2YWx1ZTogJ0RhdGUtV2lzZSBTdW1tYXJ5JyB9LFxyXG4gICAgICAgICAgICB7IGxhYmVsOiAnVG90YWwgU3VtbWFyeScsIHZhbHVlOiAnVG90YWwgU3VtbWFyeScgfVxyXG4gICAgICAgICAgXTtcclxuXHJcbiAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGNsaWVudDogdGhpcy5jbGllbnRzMVswXS5idXNpbmVzc1BhcnRuZXJDb2RlIH0pO1xyXG4gICAgICAgICAgdGhpcy5vbkNsaWVudENoYW5nZSgpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmV4cGVjdGVkIGZvcmtKb2luIGVycm9yJywgZXJyKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcbiAgICBcclxuICBsb2FkSW5pdGlhbERhdGFmb3JUcmFuc2FjdGlvbk1vbml0b3JpbmcoKSB7XHJcbiAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICBmb3JrSm9pbih7XHJcbiAgICAgIHBhcmFtczogdGhpcy5yZXBvcnRTZXJ2aWNlLmdldFBhcmFtc0ZvclRyYW5zYWN0aW9uTW9uaXRvcmluZ1JlcG9ydCgpLnBpcGUoXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBwYXJhbXMnLCBlcnIpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICksXHJcbiAgICAgIGNsaWVudHM6IHRoaXMucmVwb3J0U2VydmljZS5nZXRQYXlJbkFnZW50Zm9yVHJhbnNhY3Rpb25Nb25pdG9yaW5nUmVwb3J0KCkucGlwZShcclxuICAgICAgICBtYXAoKGNsaWVudHM6IGFueVtdKTogQ2xpZW50W10gPT5cclxuICAgICAgICAgIGNsaWVudHMubWFwKChjbGllbnQsIGluZGV4KSA9PiAoe1xyXG4gICAgICAgICAgICBidXNpbmVzc1BhcnRuZXJOYW1lOiBjbGllbnQuYWdlbnQsXHJcbiAgICAgICAgICAgIGJ1c2luZXNzUGFydG5lckNvZGU6IGNsaWVudC5jb2RlLFxyXG4gICAgICAgICAgICBkaXNwbGF5T3JkZXI6IGluZGV4LFxyXG4gICAgICAgICAgICBjbGllbnRUeXBlOiBcIlwiXHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICApLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgY2xpZW50cycsIGVycik7XHJcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgIH0pLnN1YnNjcmliZShcclxuICAgICAge1xyXG4gICAgICAgIG5leHQ6ICh7IHBhcmFtcywgY2xpZW50cyB9KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcclxuICAgICAgICAgIHRoaXMuY2xpZW50czEgPSBjbGllbnRzO1xyXG4gICAgICAgICAgdGhpcy5jb3VudHJpZXMgPSBbLi4ucGFyYW1zPy5jb3VudHJpZXNdXHJcbiAgICAgICAgICB0aGlzLmN1cnJlbmNpZXMgPSBbLi4ucGFyYW1zPy5jdXJyZW5jaWVzXTtcclxuICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25TdGF0dXNlcyA9IFsuLi5wYXJhbXM/LnRyYW5zYWN0aW9uU3RhdHVzVHlwZXNdO1xyXG4gICAgICAgICAgdGhpcy50cmFuc2FjdGlvblByb2R1Y3RzID0gWy4uLnBhcmFtcz8udHJhbnNhY3Rpb25Qcm9kdWN0VHlwZXNdO1xyXG5cclxuICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBjbGllbnQ6IHRoaXMuY2xpZW50czFbMF0uYnVzaW5lc3NQYXJ0bmVyQ29kZSB9KTtcclxuICAgICAgICAgIGlmICh0aGlzLmluaXRpYWxGaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgIC8vcGF0Y2ggZGF0YVxyXG4gICAgICAgICAgICB0aGlzLmFwcGx5SW5pdGlhbEZpbHRlcnMoKTtcclxuICAgICAgICAgIH1cclxuXHJcblxyXG4gICAgICAgICAgdGhpcy5vbkNsaWVudENoYW5nZSgpO1xyXG4gICAgICAgICAgLy8gIEFVVE8gTE9BRCBPTkxZIGZvciByb3V0ZWQgY2FzZVxyXG4gICAgICAgICAgaWYgKHRoaXMuaW5pdGlhbEZpbHRlcnMpIHtcclxuICAgICAgICAgICAgdGhpcy5vblNlYXJjaCgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmV4cGVjdGVkIGZvcmtKb2luIGVycm9yJywgZXJyKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwbHlJbml0aWFsRmlsdGVycygpIHtcclxuICAgIGlmICghdGhpcy5pbml0aWFsRmlsdGVycykgcmV0dXJuO1xyXG4gICAgY29uc3QgcGF0Y2g6IGFueSA9IHt9O1xyXG4gICAgLy8gVHJhbnNhY3Rpb24gU3RhdHVzIChTVFJJTkcg4oaSIEFSUkFZKVxyXG4gICAgaWYgKHRoaXMuaW5pdGlhbEZpbHRlcnMudHJhbnNhY3Rpb25TdGF0dXMpIHtcclxuICAgICAgcGF0Y2gudHJhbnNhY3Rpb25TdGF0dXMgPSBbdGhpcy5pbml0aWFsRmlsdGVycy50cmFuc2FjdGlvblN0YXR1c107XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVjZWl2ZSBDb3VudHJ5XHJcbiAgICBpZiAodGhpcy5pbml0aWFsRmlsdGVycy5yZWNlaXZlQ291bnRyeSkge1xyXG4gICAgICBwYXRjaC5yZWNlaXZlQ291bnRyeSA9IHRoaXMuaW5pdGlhbEZpbHRlcnMucmVjZWl2ZUNvdW50cnk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUmVhbHRpbWUgaGFuZGxpbmdcclxuICAgIGlmICh0aGlzLmluaXRpYWxGaWx0ZXJzLmlzUmVhbHRpbWUpIHtcclxuXHJcbiAgICAgIHBhdGNoLmZyb21EYXRlID0gJyc7XHJcbiAgICAgIHBhdGNoLnRvRGF0ZSA9ICcnO1xyXG4gICAgICAvL2NsZWFyXHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21EYXRlJyk/LmNsZWFyVmFsaWRhdG9ycygpO1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0b0RhdGUnKT8uY2xlYXJWYWxpZGF0b3JzKCk7XHJcblxyXG4gICAgfSBlbHNlIHtcclxuXHJcbiAgICAgIC8vIE9ubHkgb3ZlcnJpZGUgaWYgdmFsdWVzIGV4aXN0IChWRVJZIElNUE9SVEFOVClcclxuICAgICAgaWYgKHRoaXMuaW5pdGlhbEZpbHRlcnMudG9EYXRlKSB7XHJcbiAgICAgICAgcGF0Y2gudG9EYXRlID0gdGhpcy5pbml0aWFsRmlsdGVycy50b0RhdGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMuaW5pdGlhbEZpbHRlcnMuZnJvbURhdGUpIHtcclxuICAgICAgICBwYXRjaC5mcm9tRGF0ZSA9IHRoaXMuaW5pdGlhbEZpbHRlcnMuZnJvbURhdGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21EYXRlJyk/LnNldFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RvRGF0ZScpPy5zZXRWYWxpZGF0b3JzKFZhbGlkYXRvcnMucmVxdWlyZWQpO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvLyBTaW5nbGUgcGF0Y2ggY2FsbCAoYXZvaWRzIG11bHRpcGxlIHRyaWdnZXJzKVxyXG4gICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUocGF0Y2gsIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcclxuICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21EYXRlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgdGhpcy5zZWFyY2hGb3JtLmdldCgndG9EYXRlJyk/LnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUZvcm0oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiVHJhbnNhY3Rpb24gRW5xdWlyeVwiKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybSA9IHRoaXMuZmIuZ3JvdXAoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY2xpZW50OiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBmcm9tRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgdG9EYXRlOiBbbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBicmFuY2g6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHByb2R1Y3Q6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIGN1cnJlbmN5OiBbJ0FsbCddLFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25TdGF0dXM6IFtbJ0FsbCddLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uTm86IFsnJ11cclxuICAgICAgICB9LFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJBQ0MgR0wgRGV0YWlscyBFbnF1aXJ5XCIpIHtcclxuICAgICAgdGhpcy5zZWFyY2hGb3JtID0gdGhpcy5mYi5ncm91cChcclxuICAgICAgICB7XHJcbiAgICAgICAgICBkYXRlOiBbbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBkYXRlVHlwZTogWzEsIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkJyYW5jaCBBY3Rpdml0eSBTZW5kXCIpIHtcclxuICAgICAgdGhpcy5zZWFyY2hGb3JtID0gdGhpcy5mYi5ncm91cChcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjbGllbnQ6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIGZyb21EYXRlOiBbbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICB0b0RhdGU6IFtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIGJyYW5jaDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgcmVjZWl2ZUN1cnJlbmN5OiBbJ0FsbCddLFxyXG4gICAgICAgICAgcHJvZHVjdDogWydBbGwnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHRyYW5zYWN0aW9uU3RhdHVzOiBbWydBbGwnXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBzZW5kQ291bnRyeTogWydBbGwnXSxcclxuICAgICAgICAgIHJlY2VpdmVDb3VudHJ5OiBbJ0FsbCddXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJCcmFuY2ggQWN0aXZpdHkgUmVjZWl2ZVwiKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybSA9IHRoaXMuZmIuZ3JvdXAoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY2xpZW50OiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBmcm9tRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgdG9EYXRlOiBbbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBicmFuY2g6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHJlY2VpdmVDdXJyZW5jeTogWydBbGwnXSxcclxuICAgICAgICAgIHByb2R1Y3Q6IFsnQWxsJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICB0cmFuc2FjdGlvblN0YXR1czogW1snQWxsJ10sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgc2VuZENvdW50cnk6IFsnQWxsJ10sXHJcbiAgICAgICAgICByZWNlaXZlQ291bnRyeTogWydBbGwnXVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQ2FuY2VsbGF0aW9uIFRyYW5zYWN0aW9uXCIpIHtcclxuICAgICAgdGhpcy5zZWFyY2hGb3JtID0gdGhpcy5mYi5ncm91cChcclxuICAgICAgICB7XHJcbiAgICAgICAgICBjbGllbnQ6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIGZyb21EYXRlOiBbbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICB0b0RhdGU6IFtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIGJyYW5jaDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgc2VuZENvdW50cnk6IFtudWxsXSxcclxuICAgICAgICAgIHJlY2VpdmVDb3VudHJ5OiBbbnVsbF0sXHJcbiAgICAgICAgICBwcm9kdWN0OiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICByZWNlaXZlQ3VycmVuY3k6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PT0gXCJSZXZlbnVlIFBlciBUcmFuc2FjdGlvblwiKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybSA9IHRoaXMuZmIuZ3JvdXAoe1xyXG4gICAgICAgIHNlbmRCdXNpbmVzc1BhcnRuZXI6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICBmcm9tRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIHRvRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIHJlY3ZCdXNpbmVzc1BhcnRuZXI6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICB0cmFuc2FjdGlvblN0YXR1czogW1snQWxsJ10sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIHNlbmRDb3VudHJ5OiBbJ0FsbCddLFxyXG4gICAgICAgIHJlY2VpdmVDb3VudHJ5OiBbJ0FsbCddXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIlN0YXRlbWVudCBvZiBBY2NvdW50c1wiKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybSA9IHRoaXMuZmIuZ3JvdXAoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY2xpZW50OiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBmcm9tRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgdG9EYXRlOiBbbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF1cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkFjY291bnRpbmdcIikge1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm0gPSB0aGlzLmZiLmdyb3VwKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNsaWVudDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgZnJvbURhdGU6IFtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHRvRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgYnJhbmNoOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBjdXJyZW5jeTogWydBbGwnXSxcclxuICAgICAgICAgIHByb2R1Y3Q6IFsnQWxsJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICB0cmFuc2FjdGlvblN0YXR1czogW1snQWxsJ10sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgc2VuZENvdW50cnk6IFsnQWxsJ10sXHJcbiAgICAgICAgICByZWNlaXZlQ291bnRyeTogWydBbGwnXVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09PSBcIkNyZWRpdCBMaW1pdCBTdGF0dXMgRW5xdWlyeVwiKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybSA9IHRoaXMuZmIuZ3JvdXAoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY2xpZW50OiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBmcm9tRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgdG9EYXRlOiBbbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICB0cmFuc2FjdGlvblN0YXR1czogWydBbGwnLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiRnVuZGluZ1wiKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybSA9IHRoaXMuZmIuZ3JvdXAoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgZnJvbURhdGU6IFtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHRvRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdXHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIlRyaWFsIEJhbGFuY2UgLSBBY2NvdW50c1wiKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybSA9IHRoaXMuZmIuZ3JvdXAoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgLy8gQWRkZWQgZmllbGRzXHJcbiAgICAgICAgICBidXNpbmVzc0xpbmU6IFsnQWxsJ10sXHJcbiAgICAgICAgICBhY2NvdW50U3RhdHVzOiBbWydBY3RpdmUnXV0sXHJcbiAgICAgICAgICBmaW5hbmNpYWxZZWFyOiBbbmV3IERhdGUoKS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCldLCAgIC8vIGRlZmF1bHQgdG8gY3VycmVudCB5ZWFyXHJcbiAgICAgICAgICBmcm9tTW9udGg6IFsnJ10sXHJcbiAgICAgICAgICB0b01vbnRoOiBbJyddLFxyXG4gICAgICAgICAgZGF0ZVR5cGU6IFsnVkQnXSwgICAgICAgICAgICAgIC8vIGV4YW1wbGUgZGVmYXVsdFxyXG4gICAgICAgICAgZnJvbURheTogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgdG9EYXk6IFt7IHZhbHVlOiBudWxsLCBkaXNhYmxlZDogdHJ1ZSB9LCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIGN1cnJlbmN5OiBbJ0FsbCddLFxyXG5cclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcblxyXG4gICAgICB0aGlzLnJlcG9ydFNlcnZpY2UuR2V0UGFyYW1EYXRlRGVmYXVsdEZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KCkuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIGxldCBmaW5hbmNpYWxNb250aDogc3RyaW5nID0gcmVzcG9uc2VbMF0uZmluYW5jaWFsTW9udGg7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhgZmluYW5jaWFsTW9udGggaW4gaW5pdCBmb3JtIG9mIFRyaWFsIEJhbGFuY2UgLSBBY2NvdW50czogJHtmaW5hbmNpYWxNb250aH1gKTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgZnJvbU1vbnRoOiBmaW5hbmNpYWxNb250aCxcclxuICAgICAgICAgICAgdG9Nb250aDogZmluYW5jaWFsTW9udGhcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sIGVycm9yOiAoZXJyKSA9PiB7IGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIGRhdGE6JywgZXJyKTsgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkJyYW5jaCBBY3Rpdml0eSBTZW5kIFN1bW1hcnlcIikge1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm0gPSB0aGlzLmZiLmdyb3VwKFxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGNsaWVudDogW251bGwsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgZnJvbURhdGU6IFtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHRvRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgYnJhbmNoOiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICByZWNlaXZlQ3VycmVuY3k6IFsnQWxsJ10sXHJcbiAgICAgICAgICBwcm9kdWN0OiBbJ0FsbCcsIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgdHJhbnNhY3Rpb25TdGF0dXM6IFtbJ0FsbCddLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHNlbmRDb3VudHJ5OiBbJ0FsbCddLFxyXG4gICAgICAgICAgcmVjZWl2ZUNvdW50cnk6IFsnQWxsJ10sXHJcbiAgICAgICAgICBzdW1tYXJ5UmVwb3J0OiBbJ0RhdGUtV2lzZSBTdW1tYXJ5J11cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiVHJhbnNhY3Rpb24gTW9uaXRvcmluZ1wiKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybSA9IHRoaXMuZmIuZ3JvdXAoXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgY2xpZW50OiBbbnVsbCwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBmcm9tRGF0ZTogW25ldyBEYXRlKCkudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgdG9EYXRlOiBbbmV3IERhdGUoKS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSwgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICBicmFuY2g6IFtudWxsLCBWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHJlY2VpdmVDdXJyZW5jeTogWydBbGwnXSxcclxuICAgICAgICAgIHByb2R1Y3Q6IFsnQWxsJywgVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICB0cmFuc2FjdGlvblN0YXR1czogW1snQWxsJ10sIFZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgc2VuZENvdW50cnk6IFsnQWxsJ10sXHJcbiAgICAgICAgICByZWNlaXZlQ291bnRyeTogWydBbGwnXVxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGxvYWRJbml0aWFsRGF0YWZvckJyYW5jaEFjdGl2aXR5U2VuZCgpIHtcclxuICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICBmb3JrSm9pbih7XHJcbiAgICAgIHBhcmFtczogdGhpcy5yZXBvcnRTZXJ2aWNlLmdldFBhcmFtcygpLnBpcGUoXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBwYXJhbXMnLCBlcnIpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKG51bGwpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICksXHJcbiAgICAgIGNsaWVudHM6IHRoaXMucmVwb3J0U2VydmljZS5nZXRQYXlJbkFnZW50cygpLnBpcGUoXHJcbiAgICAgICAgbWFwKChjbGllbnRzOiBhbnlbXSk6IENsaWVudFtdID0+XHJcbiAgICAgICAgICBjbGllbnRzLm1hcCgoY2xpZW50LCBpbmRleCkgPT4gKHtcclxuICAgICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyTmFtZTogY2xpZW50LmFnZW50LFxyXG4gICAgICAgICAgICBidXNpbmVzc1BhcnRuZXJDb2RlOiBjbGllbnQuY29kZSxcclxuICAgICAgICAgICAgZGlzcGxheU9yZGVyOiBpbmRleCxcclxuICAgICAgICAgICAgY2xpZW50VHlwZTogXCJcIlxyXG4gICAgICAgICAgfSkpXHJcbiAgICAgICAgKSxcclxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGNsaWVudHMnLCBlcnIpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9KS5zdWJzY3JpYmUoXHJcbiAgICAgIHtcclxuICAgICAgICBuZXh0OiAoeyBwYXJhbXMsIGNsaWVudHMgfSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wYXJhbXMgPSBwYXJhbXM7XHJcbiAgICAgICAgICB0aGlzLmNsaWVudHMxID0gY2xpZW50cztcclxuICAgICAgICAgIHRoaXMuY291bnRyaWVzID0gWy4uLnBhcmFtcz8uY291bnRyaWVzXVxyXG4gICAgICAgICAgdGhpcy5jdXJyZW5jaWVzID0gWy4uLnBhcmFtcz8uY3VycmVuY2llc107XHJcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uU3RhdHVzZXMgPSBbLi4ucGFyYW1zPy50cmFuc2FjdGlvblN0YXR1c1R5cGVzXTtcclxuICAgICAgICAgIHRoaXMudHJhbnNhY3Rpb25Qcm9kdWN0cyA9IFsuLi5wYXJhbXM/LnRyYW5zYWN0aW9uUHJvZHVjdFR5cGVzXTtcclxuXHJcbiAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGNsaWVudDogdGhpcy5jbGllbnRzMVswXS5idXNpbmVzc1BhcnRuZXJDb2RlfSk7XHJcbiAgICAgICAgICB0aGlzLm9uQ2xpZW50Q2hhbmdlKCk7XHJcblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdVbmV4cGVjdGVkIGZvcmtKb2luIGVycm9yJywgZXJyKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgbG9hZEluaXRpYWxEYXRhZm9ydHhuRW5xdWlyeSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMucmVwb3J0U2VydmljZVxyXG4gICAgICAgIC5nZXRQYWdlTG9hZERhdGEoKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgICBpZiAoZGF0YSkge1xyXG4gICAgICAgIHRoaXMuY2xpZW50czEgPSBkYXRhLmNsaWVudHMgfHwgW107XHJcbiAgICAgICAgdGhpcy5jdXJyZW5jaWVzID0gZGF0YS5jdXJyZW5jaWVzIHx8IFtdO1xyXG4gICAgICAgIHRoaXMucHJvZHVjdHMgPSBkYXRhLnByb2R1Y3RzIHx8IFtdO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25TdGF0dXNlcyA9IChkYXRhLnRyYW5zYWN0aW9uU3RhdHVzZXMgfHwgW10pLmZpbHRlcihcclxuICAgICAgICAgIHRzID0+IHRzLnRyYW5zYWN0aW9uU3RhdHVzICE9PSAnJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgIXRoaXMudHJhbnNhY3Rpb25TdGF0dXNlcy5zb21lKFxyXG4gICAgICAgICAgICBzID0+IHMudHJhbnNhY3Rpb25TdGF0dXMgPT09ICdBbGwnXHJcbiAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zYWN0aW9uU3RhdHVzZXMudW5zaGlmdCh7XHJcbiAgICAgICAgICAgIHRyYW5zYWN0aW9uU3RhdHVzOiAnQWxsJyxcclxuICAgICAgICAgIH0gYXMgVHJhbnNhY3Rpb25TdGF0dXMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IHByb2R1Y3Q6ICdBbGwnIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGNsaWVudDogdGhpcy5jbGllbnRzMVswXS5idXNpbmVzc1BhcnRuZXJDb2RlfSk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5vbkNsaWVudENoYW5nZSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJ0ZhaWxlZCB0byBsb2FkIGluaXRpYWwgZGF0YSc7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkVycm9yO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbG9hZEluaXRpYWxEYXRhZm9yQnJhbmNoQWN0aXZpdHlSZWNlaXZlKCkge1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZztcclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgcGFyYW1zOiB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0QnJhbmNoQWN0aXZpdHlSZWNlaXZlUGFyYW1zKClcclxuICAgICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHBhcmFtcycsIGVycik7XHJcbiAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICApLFxyXG4gICAgICBwYXlvdXRBZ2VudHM6IHRoaXMucmVwb3J0U2VydmljZS5nZXRBbGxQYXlPdXRBZ2VudHMoKVxyXG4gICAgICAgIC5waXBlKG1hcCgoY2xpZW50czogYW55W10pOiBDbGllbnRbXSA9PlxyXG4gICAgICAgICAgY2xpZW50cy5tYXAoKGNsaWVudCwgaW5kZXgpID0+ICh7XHJcbiAgICAgICAgICAgIGJ1c2luZXNzUGFydG5lck5hbWU6IGNsaWVudC5hZ2VudCxcclxuICAgICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyQ29kZTogY2xpZW50LmNvZGUsXHJcbiAgICAgICAgICAgIGRpc3BsYXlPcmRlcjogY2xpZW50Lm51bWJlcixcclxuICAgICAgICAgICAgY2xpZW50VHlwZTogXCJcIlxyXG4gICAgICAgICAgfSkpXHJcbiAgICAgICAgKSwgY2F0Y2hFcnJvcihlcnIgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgICB9KSlcclxuICAgIH0pLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6ICh7IHBhcmFtcywgcGF5b3V0QWdlbnRzIH0pID0+IHtcclxuICAgICAgICB0aGlzLnBhcmFtcyA9IHBhcmFtcztcclxuICAgICAgICB0aGlzLmNsaWVudHMxID0gcGF5b3V0QWdlbnRzO1xyXG4gICAgICAgIHRoaXMuY291bnRyaWVzID0gWy4uLnBhcmFtcz8uY291bnRyaWVzXVxyXG4gICAgICAgIHRoaXMuY3VycmVuY2llcyA9IFsuLi5wYXJhbXM/LmN1cnJlbmNpZXNdO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25TdGF0dXNlcyA9IFsuLi5wYXJhbXM/LnRyYW5zYWN0aW9uU3RhdHVzVHlwZXNdO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25Qcm9kdWN0cyA9IFsuLi5wYXJhbXM/LnRyYW5zYWN0aW9uUHJvZHVjdFR5cGVzXTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBjbGllbnQ6IHRoaXMuY2xpZW50czFbMF0uYnVzaW5lc3NQYXJ0bmVyQ29kZX0pO1xyXG4gICAgICAgIHRoaXMub25DbGllbnRDaGFuZ2UoKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVW5leHBlY3RlZCBmb3JrSm9pbiBlcnJvcicsIGVycik7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG4gIHByaXZhdGUgYXN5bmMgbG9hZEluaXRpYWxEYXRhRm9yQ2FuY2VsbGF0aW9uUmVwb3J0KCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZztcclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHRoaXMucmVwb3J0U2VydmljZVxyXG4gICAgICAgIC5sb2FkRGF0YWZvckNhbmNhbGxhdGlvbigpXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC50b1Byb21pc2UoKTtcclxuXHJcbiAgICAgIGlmIChkYXRhKSB7XHJcbiAgICAgICAgdGhpcy5jb3VudHJpZXMgPSBkYXRhLmNvdW50cmllcyA/PyBbXTtcclxuICAgICAgICB0aGlzLmNsaWVudHMxID0gKGRhdGEucGF5SW5BZ2VudHMgPz8gW10pLm1hcCgoYWdlbnQpID0+ICh7XHJcbiAgICAgICAgICBidXNpbmVzc1BhcnRuZXJOYW1lOiBhZ2VudC5hZ2VudCxcclxuICAgICAgICAgIGJ1c2luZXNzUGFydG5lckNvZGU6IGFnZW50LmNvZGVcclxuICAgICAgICB9KSk7XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0cyA9IChkYXRhLnByb2R1Y3RUeXBlcyA/PyBbXSkubWFwKChwdCkgPT4gKHtcclxuICAgICAgICAgIHByb2R1Y3RDb2RlOiBwdC5wcm9kdWN0Q29kZSxcclxuICAgICAgICAgIHByb2R1Y3ROYW1lOiBwdC5uYW1lXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICAgIHRoaXMuY3VycmVuY2llcyA9IGRhdGEuY3VycmVuY2llcyA/PyBbXTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgcHJvZHVjdDogdGhpcy5wcm9kdWN0c1swXT8ucHJvZHVjdENvZGUsXHJcbiAgICAgICAgICByZWNlaXZlQ291bnRyeTogdGhpcy5jb3VudHJpZXNbMF0/LmNvdW50cnksXHJcbiAgICAgICAgICBzZW5kQ291bnRyeTogdGhpcy5jb3VudHJpZXNbMF0/LmNvdW50cnksXHJcbiAgICAgICAgICByZWNlaXZlQ3VycmVuY3k6IHRoaXMuY3VycmVuY2llc1swXT8uY3VycmVuY3lDb2RlXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgY2xpZW50OiB0aGlzLmNsaWVudHMxWzBdLmJ1c2luZXNzUGFydG5lckNvZGV9KTtcclxuICAgICAgICBhd2FpdCB0aGlzLm9uQ2xpZW50Q2hhbmdlKCk7XHJcbiAgICAgICAgXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8gTm8gZGF0YSBjYXNlXHJcbiAgICAgICAgdGhpcy5jb3VudHJpZXMgPSBbXTtcclxuICAgICAgICB0aGlzLmNsaWVudHMxID0gW107XHJcbiAgICAgICAgdGhpcy5wcm9kdWN0cyA9IFtdO1xyXG4gICAgICAgIHRoaXMuY3VycmVuY2llcyA9IFtdO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIGNhbmNlbGxhdGlvbiByZXBvcnQgZGF0YScsIGVycm9yKTtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRmFpbGVkIHRvIGxvYWQgY2FuY2VsbGF0aW9uIHJlcG9ydCBkYXRhJztcclxuICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuRXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBsb2FkRGF0YUZvclJldmVudWVQZXJUcmFuc2FjdGlvblJlcG9ydCgpIHtcclxuICAgIGNvbnN0ICRhZ2VudHMgPSB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0QWdlbnRzRm9yUmV2ZW51ZVBlclRyYW5zYWN0aW9uKCk7XHJcbiAgICBjb25zdCAkcGFyYW1zID0gdGhpcy5yZXBvcnRTZXJ2aWNlLmdldFJldmVudWVQZXJUcmFuc2FjdGlvblJlcG9ydFBhcmFtcygpO1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZztcclxuICAgIGZvcmtKb2luKFskYWdlbnRzLCAkcGFyYW1zXSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKFthZ2VudHMsIHBhcmFtc10pID0+IHtcclxuICAgICAgICB0aGlzLnNlbmRCdXNpbmVzc1BhcnRuZXJBZ2VudHMgPSBhZ2VudHMuZmlsdGVyKGFnZW50ID0+IGFnZW50LnRyYW5zYWN0aW9uTGVnID09PSBcIlBheUluXCIpO1xyXG4gICAgICAgIHRoaXMucmVjdkJ1c2luZXNzUGFydG5lckFnZW50cyA9IGFnZW50cy5maWx0ZXIoYWdlbnQgPT4gYWdlbnQudHJhbnNhY3Rpb25MZWcgPT09IFwiUGF5T3V0XCIpO1xyXG4gICAgICAgIHRoaXMudHJhbnNhY3Rpb25TdGF0dXNlcyA9IHBhcmFtcy50cmFuc2FjdGlvblN0YXR1c1R5cGVzXHJcbiAgICAgICAgdGhpcy5jb3VudHJpZXMgPSBwYXJhbXMuY291bnRyaWVzO1xyXG5cclxuICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgc2VuZEJ1c2luZXNzUGFydG5lcjogdGhpcy5zZW5kQnVzaW5lc3NQYXJ0bmVyQWdlbnRzWzBdLmlkLFxyXG4gICAgICAgIHJlY3ZCdXNpbmVzc1BhcnRuZXI6IHRoaXMucmVjdkJ1c2luZXNzUGFydG5lckFnZW50c1swXS5pZFxyXG4gICAgICB9KTtcclxuXHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgIH1cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuXHJcbiAgbG9hZEluaXRpYWxEYXRhZm9yQWNjb3VudGluZygpIHtcclxuICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcblxyXG4gICAgZm9ya0pvaW4oe1xyXG4gICAgICBjbGllbnRzOiB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0Q2xpZW50c0ZvckFjY291bnRpbmdSZXBvcnQodGhpcy5jdXJyZW50VXNlcikucGlwZShcclxuICAgICAgICBtYXAoKGNsaWVudHM6IGFueVtdKTogQ2xpZW50W10gPT5cclxuICAgICAgICAgIGNsaWVudHMubWFwKChjbGllbnQsIGluZGV4KSA9PiAoe1xyXG4gICAgICAgICAgICBidXNpbmVzc1BhcnRuZXJOYW1lOiBjbGllbnQuYWdlbnQsXHJcbiAgICAgICAgICAgIGJ1c2luZXNzUGFydG5lckNvZGU6IGNsaWVudC5jb3JyZWxhdGlvbklkLFxyXG4gICAgICAgICAgICBkaXNwbGF5T3JkZXI6IGluZGV4LFxyXG4gICAgICAgICAgICBjbGllbnRUeXBlOiBcIlwiXHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICApLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgY2xpZW50cycsIGVycik7XHJcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICksXHJcbiAgICAgIHByb2R1Y3RzOiB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0VHJhbnNhY3Rpb25UeXBlc0ZvckFjY291bnRpbmdSZXBvcnQoKS5waXBlKFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgdHJhbnNhY3Rpb24gdHlwZXMnLCBlcnIpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgICB9KVxyXG4gICAgICApLFxyXG4gICAgICBjdXJyZW5jaWVzOiB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0QWxsQ3VycmVuY2llc0ZvckFjY291bnRpbmdSZXBvcnQoKS5waXBlKFxyXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGxvYWRpbmcgY3VycmVuY2llcycsIGVycik7XHJcbiAgICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICksXHJcbiAgICAgIHN0YXR1c2VzOiB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0QWxsVHJhbnNhY3Rpb25TdGF0dXNGb3JBY2NvdW50aW5nUmVwb3J0KCkucGlwZShcclxuICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBsb2FkaW5nIHN0YXR1c2VzJywgZXJyKTtcclxuICAgICAgICAgIHJldHVybiBvZihbXSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKSxcclxuICAgICAgY291bnRyaWVzOiB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0QWxsQ291bnRyaWVzRm9yQWNjb3VudGluZ1JlcG9ydCgpLnBpcGUoXHJcbiAgICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBjb3VudHJpZXMnLCBlcnIpO1xyXG4gICAgICAgICAgcmV0dXJuIG9mKFtdKTtcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICB9KS5zdWJzY3JpYmUoe1xyXG4gICAgICBuZXh0OiAoeyBjbGllbnRzLCBwcm9kdWN0cywgY3VycmVuY2llcywgc3RhdHVzZXMsIGNvdW50cmllcyB9KSA9PiB7XHJcbiAgICAgICAgdGhpcy5jbGllbnRzMSA9IGNsaWVudHM7XHJcbiAgICAgICAgdGhpcy50cmFuc2FjdGlvblByb2R1Y3RzID0gcHJvZHVjdHM7XHJcbiAgICAgICAgdGhpcy5jdXJyZW5jaWVzID0gY3VycmVuY2llcztcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uU3RhdHVzZXMgPSBzdGF0dXNlcztcclxuICAgICAgICB0aGlzLmNvdW50cmllcyA9IGNvdW50cmllcztcclxuXHJcbiAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBjbGllbnQ6IHRoaXMuY2xpZW50czFbMF0uYnVzaW5lc3NQYXJ0bmVyQ29kZX0pO1xyXG4gICAgICAgIHRoaXMub25DbGllbnRDaGFuZ2UoKTtcclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IGVyciA9PiB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVW5leHBlY3RlZCBmb3JrSm9pbiBlcnJvciBpbiBBY2NvdW50aW5nIGluaXQnLCBlcnIpO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkVycm9yO1xyXG4gICAgICB9LFxyXG4gICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgfVxyXG5cclxuICBsb2FkSW5pdGlhbERhdGFGb3JDcmVkaXRMaW1pdFN0YXR1c0VucXVpcnkoKSB7XHJcbiAgICBjb25zdCAkYWdlbnRzID0gdGhpcy5yZXBvcnRTZXJ2aWNlLmdldENsaWVudHNGb3JDcmVkaXRMaW1pdFN0YXR1c0VucXVpcnlSZXBvcnQoKTtcclxuICAgIGNvbnN0ICRzdGF0dXMgPSB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0VHJhbnNhY3Rpb25UeXBlc0ZvckNyZWRpdExpbWl0U3RhdHVzRW5xdWlyeVJlcG9ydCgpO1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZztcclxuICAgIGZvcmtKb2luKHtcclxuICAgICAgYWdlbnRzOiAkYWdlbnRzLnBpcGUoXHJcbiAgICAgICAgbWFwKChjbGllbnRzOiBhbnlbXSk6IENsaWVudFtdID0+XHJcbiAgICAgICAgICBjbGllbnRzLm1hcCgoY2xpZW50LCBpbmRleCkgPT4gKHtcclxuICAgICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyTmFtZTogY2xpZW50Lm5hbWUsXHJcbiAgICAgICAgICAgIGJ1c2luZXNzUGFydG5lckNvZGU6IGNsaWVudC5jb2RlLFxyXG4gICAgICAgICAgICBkaXNwbGF5T3JkZXI6IGluZGV4LFxyXG4gICAgICAgICAgICBjbGllbnRUeXBlOiBcIlwiXHJcbiAgICAgICAgICB9KSlcclxuICAgICAgICApXHJcbiAgICAgICksXHJcbiAgICAgIHN0YXR1czogJHN0YXR1c1xyXG4gICAgfSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHsgYWdlbnRzLCBzdGF0dXMgfSkgPT4ge1xyXG4gICAgICAgIHRoaXMuY2xpZW50czEgPSBhZ2VudHM7XHJcbiAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBjbGllbnQ6IHRoaXMuY2xpZW50czFbMF0uYnVzaW5lc3NQYXJ0bmVyQ29kZSB9KTtcclxuICAgICAgICB0aGlzLnRyYW5zYWN0aW9uU3RhdHVzZXMgPSBzdGF0dXM7XHJcbiAgICAgIH0sXHJcbiAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignVW5leHBlY3RlZCBmb3JrSm9pbiBlcnJvcicsIGVycik7XHJcbiAgICAgIH0sXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9KVxyXG4gIH1cclxuICBsb2FkSW5pdGlhbERhdGFGb3JUcmlhbEJhbGFuY2VBY2NvdW50cygpIHtcclxuICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcblxyXG4gICAgZm9ya0pvaW4oe1xyXG4gICAgICBidXNpbmVzc0xpbmVzOiB0aGlzLnJlcG9ydFNlcnZpY2UuR2V0QnVzaW5lc3NMaW5lRm9yVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQoKVxyXG4gICAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IG9mKFtdKSkpLFxyXG4gICAgICBhY2NvdW50U3RhdHVzZXM6IHRoaXMucmVwb3J0U2VydmljZS5HZXRBY2NvdW50U3RhdHVzRm9yVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQoKVxyXG4gICAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IG9mKFtdKSkpLFxyXG4gICAgICBkYXRlVHlwZXM6IHRoaXMucmVwb3J0U2VydmljZS5HZXREYXRlVHlwZUZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KClcclxuICAgICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiBvZihbXSkpKSxcclxuICAgICAgZmluYW5jaWFsWWVhcnM6IHRoaXMucmVwb3J0U2VydmljZS5HZXRZZWFyRm9yVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQoKVxyXG4gICAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IG9mKFtdKSkpLFxyXG4gICAgICBmcm9tTW9udGhzOiB0aGlzLnJlcG9ydFNlcnZpY2UuR2V0RnJvbU1vbnRoc0ZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KClcclxuICAgICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiBvZihbXSkpKSxcclxuICAgICAgY3VycmVuY3k6IHRoaXMucmVwb3J0U2VydmljZS5HZXRDdXJyZW5jaWVzRm9yVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQoKVxyXG4gICAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IG9mKFtdKSkpLFxyXG4gICAgICBwYXJhbURhdGVEZWZhdWx0OiB0aGlzLnJlcG9ydFNlcnZpY2UuR2V0UGFyYW1EYXRlRGVmYXVsdEZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KClcclxuICAgICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiBvZihbXSkpKVxyXG4gICAgfSlcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKHJlc3VsdHMgPT4ge1xyXG4gICAgICAgICAgLy8gYXNzaWduIGJhc2UgcmVzdWx0c1xyXG4gICAgICAgICAgdGhpcy5idXNpbmVzc0xpbmVzID0gcmVzdWx0cy5idXNpbmVzc0xpbmVzLmZpbHRlcihiID0+IGIuYnVzaW5lc3NMaW5lPy50cmltKCkgIT09ICcnKTtcclxuICAgICAgICAgIHRoaXMuYWNjb3VudFN0YXR1c2VzID0gcmVzdWx0cy5hY2NvdW50U3RhdHVzZXM7XHJcbiAgICAgICAgICB0aGlzLmRhdGVUeXBlcyA9IHJlc3VsdHMuZGF0ZVR5cGVzO1xyXG4gICAgICAgICAgdGhpcy5maW5hbmNpYWxZZWFycyA9IHJlc3VsdHMuZmluYW5jaWFsWWVhcnNcclxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IE51bWJlcihhLmZpbmFuY2lhbFllYXIpIC0gTnVtYmVyKGIuZmluYW5jaWFsWWVhcikpO1xyXG4gICAgICAgICAgdGhpcy5mcm9tTW9udGhzID0gcmVzdWx0cy5mcm9tTW9udGhzO1xyXG4gICAgICAgICAgdGhpcy5jdXJyZW5jaWVzID0gcmVzdWx0cy5jdXJyZW5jeTtcclxuICAgICAgICAgIHRoaXMucGFyYW1EYXRlRGVmYXVsdCA9IHJlc3VsdHMucGFyYW1EYXRlRGVmYXVsdDtcclxuXHJcbiAgICAgICAgICAvLyByZXNvbHZlIHllYXIvbW9udGggZm9yIGZyb21EYXlzICYgdG9Nb250aHNcclxuICAgICAgICAgIGNvbnN0IHllYXIgPSArKG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSk7XHJcbiAgICAgICAgICBjb25zdCBtb250aCA9IHRoaXMucGFyYW1EYXRlRGVmYXVsdFswXS5maW5hbmNpYWxNb250aDtcclxuXHJcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZFBNb250aCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21Nb250aCcpPy52YWx1ZTtcclxuICAgICAgICAgIGNvbnN0IGZyb21Nb250aE9iaiA9IHRoaXMuZnJvbU1vbnRocy5maW5kKG0gPT4gbS5wT3JkZXIgPT09IHNlbGVjdGVkUE1vbnRoKTtcclxuICAgICAgICAgIGNvbnN0IGZyb21Nb250aExhYmVsID0gZnJvbU1vbnRoT2JqPy5wZXJpb2Q7XHJcblxyXG4gICAgICAgICAgLy8gZmlyc3QgY2FsbCBmcm9tRGF5cyB3aXRoIHllYXIvbW9udGhcclxuICAgICAgICAgIHJldHVybiB0aGlzLnJlcG9ydFNlcnZpY2UuR2V0RnJvbURhdGVzRm9yVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQoXHJcbiAgICAgICAgICAgIHllYXIsIGZyb21Nb250aExhYmVsXHJcbiAgICAgICAgICApLnBpcGUoXHJcbiAgICAgICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IG9mKFtdKSksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcChmcm9tRGF5cyA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mcm9tRGF5cyA9IGZyb21EYXlzO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgICAgIGZyb21EYXk6IHRoaXMucGFyYW1EYXRlRGVmYXVsdFswXT8udERhdGUsXHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGZpbmFuY2lhbFllYXIgPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCdmaW5hbmNpYWxZZWFyJyk/LnZhbHVlO1xyXG4gICAgICAgICAgICAgIGNvbnN0IGZyb21Nb250aCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21Nb250aCcpPy52YWx1ZTtcclxuICAgICAgICAgICAgICBjb25zdCB0b01vbnRoID0gdGhpcy5zZWFyY2hGb3JtLmdldCgndG9Nb250aCcpPy52YWx1ZTtcclxuICAgICAgICAgICAgICBjb25zdCBmcm9tRGF5ID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnZnJvbURheScpPy52YWx1ZTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdFBheWxvYWQgPSB7XHJcbiAgICAgICAgICAgICAgICBZZWFyOiBmaW5hbmNpYWxZZWFyLFxyXG4gICAgICAgICAgICAgICAgRnJvbU1vbnRoOiBmcm9tTW9udGgsXHJcbiAgICAgICAgICAgICAgICBUb01vbnRoOiB0b01vbnRoLFxyXG4gICAgICAgICAgICAgICAgRnJvbURhdGU6IGZyb21EYXkgLy8gYXNzdW1pbmcgZnJvbURheSBpcyBhbHJlYWR5IGEgRGF0ZSBvciBJU08gc3RyaW5nXHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgLy8gbm93IGNoYWluIHRvOiB0b0RheXMgKyB0b01vbnRoc1xyXG4gICAgICAgICAgICAgIHJldHVybiBmb3JrSm9pbih7XHJcbiAgICAgICAgICAgICAgICB0b0RheXM6IHRoaXMucmVwb3J0U2VydmljZS5HZXRUb0RhdGVzRm9yVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQocmVxdWVzdFBheWxvYWQpXHJcbiAgICAgICAgICAgICAgICAgIC5waXBlKGNhdGNoRXJyb3IoZXJyID0+IG9mKFtdKSkpLFxyXG4gICAgICAgICAgICAgICAgdG9Nb250aHM6IHRoaXMucmVwb3J0U2VydmljZS5HZXRUb01vbnRoc0ZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KHllYXIsIG1vbnRoKVxyXG4gICAgICAgICAgICAgICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiBvZihbXSkpKVxyXG4gICAgICAgICAgICAgIH0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgICBtYXAoZXh0cmEgPT4gKHsgLi4ucmVzdWx0cywgZnJvbURheXMsIC4uLmV4dHJhIH0pKVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogKGFsbFJlc3VsdHMpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9EYXlzID0gYWxsUmVzdWx0cy50b0RheXM7XHJcbiAgICAgICAgICB0aGlzLnRvTW9udGhzID0gYWxsUmVzdWx0cy50b01vbnRocztcclxuXHJcbiAgICAgICAgICAvLyBwYXRjaCBmb3JtIGRlZmF1bHRzXHJcbiAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgIGJ1c2luZXNzTGluZTogdGhpcy5idXNpbmVzc0xpbmVzWzBdPy5idXNpbmVzc0xpbmUgPz8gbnVsbCxcclxuICAgICAgICAgICAgYWNjb3VudFN0YXR1czogdGhpcy5hY2NvdW50U3RhdHVzZXMubGVuZ3RoID8gW3RoaXMuYWNjb3VudFN0YXR1c2VzWzBdLnN0YXR1c0NvZGVdIDogW10sXHJcbiAgICAgICAgICAgIGZpbmFuY2lhbFllYXI6IHRoaXMucGFyYW1EYXRlRGVmYXVsdFswXT8uZmluYW5jaWFsWWVhciA/PyBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgZnJvbU1vbnRoOiB0aGlzLnBhcmFtRGF0ZURlZmF1bHRbMF0/LmZpbmFuY2lhbE1vbnRoLFxyXG4gICAgICAgICAgICB0b01vbnRoOiB0aGlzLnBhcmFtRGF0ZURlZmF1bHRbMF0/LmZpbmFuY2lhbE1vbnRoLFxyXG4gICAgICAgICAgICBkYXRlVHlwZTogdGhpcy5kYXRlVHlwZXNbMF0/LmRhdGVUeXBlQ29kZSA/PyAnVkQnLFxyXG4gICAgICAgICAgICBmcm9tRGF5OiB0aGlzLmZyb21EYXlzWzBdPy50RGF0ZSxcclxuICAgICAgICAgICAgdG9EYXk6IHRoaXMudG9EYXlzLmZpbmQoZCA9PiBkLmlzVG9kYXkpPy52YWx1ZSA/PyBuZXcgRGF0ZSgpLmdldERhdGUoKSxcclxuICAgICAgICAgICAgY3VycmVuY3k6IHRoaXMuY3VycmVuY3lbMF0/LmN1cnJlbmN5Q29kZSA/PyAnQWxsJ1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGxvYWQgVHJpYWwgQmFsYW5jZSBkcm9wZG93biBkYXRhJywgZXJyKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkVycm9yO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuIHByaXZhdGUgc3Vic2NyaWJlVG9EYXRlQ2hhbmdlcygpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21EYXRlJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoZnJvbURhdGVTdHIgPT4ge1xyXG4gICAgICBjb25zdCB0b0RhdGVDb250cm9sID0gdGhpcy5zZWFyY2hGb3JtLmdldCgndG9EYXRlJyk7XHJcbiAgICAgIGNvbnN0IHRvRGF0ZVN0ciA9IHRvRGF0ZUNvbnRyb2w/LnZhbHVlO1xyXG4gICAgICBpZiAoIWZyb21EYXRlU3RyKSByZXR1cm47XHJcbiAgICAgIGNvbnN0IGZyb21EYXRlID0gbmV3IERhdGUoZnJvbURhdGVTdHIpO1xyXG4gICAgICBcclxuICAgICAgLy8gSWYgVG9EYXRlIGlzIGVtcHR5IOKGkiBzZXQgZGVmYXVsdFxyXG4gICAgICBpZiAoIXRvRGF0ZUNvbnRyb2w/LnZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgbWF4VG9EYXRlID0gbmV3IERhdGUoZnJvbURhdGUpO1xyXG4gICAgICAgIG1heFRvRGF0ZS5zZXREYXRlKGZyb21EYXRlLmdldERhdGUoKSArIDMwKTtcclxuICAgICAgICB0b0RhdGVDb250cm9sLnBhdGNoVmFsdWUobWF4VG9EYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IHRvRGF0ZSA9IG5ldyBEYXRlKHRvRGF0ZVN0cik7XHJcbiAgICAgIGNvbnN0IG1heFRvRGF0ZSA9IG5ldyBEYXRlKGZyb21EYXRlKTtcclxuICAgICAgbWF4VG9EYXRlPy5zZXREYXRlKGZyb21EYXRlLmdldERhdGUoKSArIDMwKTtcclxuICAgICAgaWYgKHRvRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKSA+IG1heFRvRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKSB8fCB0b0RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCkgPCBmcm9tRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKSkge1xyXG4gICAgICAgIG1heFRvRGF0ZS5zZXRIb3VycygxMiwgMCwgMCwgMCk7XHJcbiAgICAgICAgdG9EYXRlQ29udHJvbD8ucGF0Y2hWYWx1ZShtYXhUb0RhdGUudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0pO1xyXG4gICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4gdG9EYXRlQ29udHJvbD8ucGF0Y2hWYWx1ZShtYXhUb0RhdGUudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF0pKTtcclxuICAgICAgICB0aGlzLmNkLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmRpc2FibGVkRGF0ZSA9IHRoaXMudG9OZ2JEYXRlU3RydWN0KGZyb21EYXRlKTtcclxuICAgICAgLy8gc2V0VGltZW91dCgoKSA9PiB0aGlzLmRpc2FibGVkRGF0ZSA9IHRoaXMudG9OZ2JEYXRlU3RydWN0KGZyb21EYXRlKSk7XHJcblxyXG4gICAgfSk7XHJcbiAgIFxyXG4gICAgdGhpcy5zZWFyY2hGb3JtLmdldCgndG9EYXRlJyk/LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUodG9EYXRlU3RyID0+IHtcclxuICAgICAgXHJcbiAgICAgIGNvbnN0IGZyb21EYXRlQ29udHJvbCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21EYXRlJyk7XHJcbiAgICAgIGNvbnN0IGZyb21EYXRlU3RyID0gZnJvbURhdGVDb250cm9sPy52YWx1ZTtcclxuICAgICAgaWYgKCF0b0RhdGVTdHIpIHJldHVybjtcclxuICAgICAgY29uc3QgdG9EYXRlID0gbmV3IERhdGUodG9EYXRlU3RyKTtcclxuXHJcbiAgICAgIC8vIElmIEZyb21EYXRlIGlzIGVtcHR5IOKGkiBzZXQgZGVmYXVsdFxyXG4gICAgICBpZiAoIWZyb21EYXRlQ29udHJvbD8udmFsdWUpIHtcclxuICAgICAgICBjb25zdCBtaW5Gcm9tRGF0ZSA9IG5ldyBEYXRlKHRvRGF0ZSk7XHJcbiAgICAgICAgbWluRnJvbURhdGUuc2V0RGF0ZSh0b0RhdGUuZ2V0RGF0ZSgpIC0gMzApO1xyXG4gICAgICAgIGZyb21EYXRlQ29udHJvbC5wYXRjaFZhbHVlKG1pbkZyb21EYXRlLnRvSVNPU3RyaW5nKCkuc3BsaXQoXCJUXCIpWzBdKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZnJvbURhdGUgPSBuZXcgRGF0ZShmcm9tRGF0ZVN0cik7XHJcbiAgICAgIHRoaXMuZGlzYWJsZWREYXRlID0gdGhpcy50b05nYkRhdGVTdHJ1Y3QoZnJvbURhdGUpO1xyXG4gICAgICBjb25zdCBtaW5Gcm9tRGF0ZSA9IG5ldyBEYXRlKHRvRGF0ZSk7XHJcbiAgICAgIG1pbkZyb21EYXRlPy5zZXREYXRlKHRvRGF0ZS5nZXREYXRlKCkgLSAzMCk7XHJcbiAgICAgIGlmIChmcm9tRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKSA8IG1pbkZyb21EYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApKSB7XHJcbiAgICAgICAgbWluRnJvbURhdGUuc2V0SG91cnMoMTIsIDAsIDAsIDApO1xyXG4gICAgICAgIGZyb21EYXRlQ29udHJvbD8ucGF0Y2hWYWx1ZShtaW5Gcm9tRGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSk7XHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmcm9tRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKSA+IHRvRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKSkge1xyXG4gICAgICAgIGZyb21EYXRlQ29udHJvbD8ucGF0Y2hWYWx1ZShtaW5Gcm9tRGF0ZS50b0lTT1N0cmluZygpLnNwbGl0KFwiVFwiKVswXSk7XHJcbiAgICAgICAgdGhpcy5jZC5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2FkSW5pdGlhbERhdGFGb3JTdGF0ZW1lbnRPZkFjY291bnRzKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZztcclxuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgY2xpZW50cyA9IGF3YWl0IHRoaXMucmVwb3J0U2VydmljZVxyXG4gICAgICAgIC5sb2FkQ2xpZW50c0ZvclN0YXRlbWVudE9mQWNjb3VudHMoKVxyXG4gICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgICAudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgICBpZiAoY2xpZW50cyAmJiBjbGllbnRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICB0aGlzLmNsaWVudHMxID0gY2xpZW50cy5tYXAoKGMsIGluZGV4KSA9PiAoe1xyXG4gICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyQ29kZTogYy5hZ2VudElELFxyXG4gICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyTmFtZTogYy5hZ2VudE5hbWUsXHJcbiAgICAgICAgICBkaXNwbGF5T3JkZXI6IGluZGV4LFxyXG4gICAgICAgICAgY2xpZW50VHlwZTogYy5jbGllbnRUeXBlXHJcbiAgICAgICAgfSkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuY2xpZW50czEgPSBbXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAodGhpcy5jbGllbnRzMS5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICBjbGllbnQ6IHRoaXMuY2xpZW50czFbMF0uYnVzaW5lc3NQYXJ0bmVyQ29kZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF3YWl0IHRoaXMub25DbGllbnRDaGFuZ2UoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcblxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcignRXJyb3IgbG9hZGluZyBTdGF0ZW1lbnQgb2YgQWNjb3VudHMgY2xpZW50cycsIGVycm9yKTtcclxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRmFpbGVkIHRvIGxvYWQgY2xpZW50cyBmb3IgU3RhdGVtZW50IG9mIEFjY291bnRzJztcclxuICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuRXJyb3I7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBvbkNsaWVudENoYW5nZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiVHJhbnNhY3Rpb24gRW5xdWlyeVwiKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2xpZW50ID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnY2xpZW50Jyk/LnZhbHVlO1xyXG4gICAgICBpZiAoIXNlbGVjdGVkQ2xpZW50KSByZXR1cm47XHJcbiAgICAgIHRoaXMuYnJhbmNoZXMgPSBbXTtcclxuICAgICAgaWYgKHNlbGVjdGVkQ2xpZW50ID09PSAnQWxsJykge1xyXG4gICAgICAgIHRoaXMuYnJhbmNoZXMgPSBbe1xyXG4gICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyQnJhbmNoOiAnQWxsJyxcclxuICAgICAgICAgIGJ1c2luZXNzUGFydG5lckJyYW5jaF9Db3JyZWxhdGlvbklkOiAnQWxsJyxcclxuICAgICAgICAgIGJyYW5jaENvZGU6ICdBbGwnLFxyXG4gICAgICAgICAgYmFuazogJ0FsbCcsXHJcbiAgICAgICAgICBudW1iZXI6IDFcclxuICAgICAgICB9XTtcclxuICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGJyYW5jaDogdGhpcy5icmFuY2hlc1swXS5icmFuY2hDb2RlIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRCcmFuY2hlc0J5QWdlbnQoc2VsZWN0ZWRDbGllbnQpXHJcbiAgICAgICAgICBdKTtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRmFpbGVkIHRvIGxvYWQgYnJhbmNoJztcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJCcmFuY2ggQWN0aXZpdHkgU2VuZFwiKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2xpZW50ID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnY2xpZW50Jyk/LnZhbHVlO1xyXG4gICAgICBpZiAoIXNlbGVjdGVkQ2xpZW50KSByZXR1cm47XHJcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICAgIHRoaXMuYnJhbmNoZXMgPSBbXTtcclxuICAgICAgaWYgKHNlbGVjdGVkQ2xpZW50ID09PSAnQWxsJykge1xyXG4gICAgICAgIHRoaXMuYnJhbmNoZXMgPSBbe1xyXG4gICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyQnJhbmNoOiAnQWxsJyxcclxuICAgICAgICAgIGJ1c2luZXNzUGFydG5lckJyYW5jaF9Db3JyZWxhdGlvbklkOiAnQWxsJyxcclxuICAgICAgICAgIGJyYW5jaENvZGU6ICdBbGwnLFxyXG4gICAgICAgICAgYmFuazogJ0FsbCcsXHJcbiAgICAgICAgICBudW1iZXI6IDFcclxuICAgICAgICB9XTtcclxuICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGJyYW5jaDogdGhpcy5icmFuY2hlc1swXS5icmFuY2hDb2RlIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0QnJhbmNoQnlBZ2VudChzZWxlY3RlZENsaWVudCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYnJhbmNoZXMgPSBkYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGJyYW5jaDogdGhpcy5icmFuY2hlc1swXS5icmFuY2hDb2RlIH0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PT0gXCJCcmFuY2ggQWN0aXZpdHkgUmVjZWl2ZVwiKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2xpZW50ID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnY2xpZW50Jyk/LnZhbHVlO1xyXG4gICAgICBpZiAoIXNlbGVjdGVkQ2xpZW50KSByZXR1cm47XHJcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICAgIHRoaXMuYnJhbmNoZXMgPSBbXTtcclxuICAgICAgaWYgKHNlbGVjdGVkQ2xpZW50ID09PSAnQWxsJykge1xyXG4gICAgICAgIHRoaXMuYnJhbmNoZXMgPSBbe1xyXG4gICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyQnJhbmNoOiAnQWxsJyxcclxuICAgICAgICAgIGJ1c2luZXNzUGFydG5lckJyYW5jaF9Db3JyZWxhdGlvbklkOiAnQWxsJyxcclxuICAgICAgICAgIGJyYW5jaENvZGU6ICdBbGwnLFxyXG4gICAgICAgICAgYmFuazogJ0FsbCcsXHJcbiAgICAgICAgICBudW1iZXI6IDFcclxuICAgICAgICB9XTtcclxuICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGJyYW5jaDogdGhpcy5icmFuY2hlc1swXS5icmFuY2hDb2RlIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0QnJhbmNoQWN0aXZpdHlSZWNlaXZlUGF5b3V0QWdlbnRCcmFuY2goc2VsZWN0ZWRDbGllbnQpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJyYW5jaGVzID0gZGF0YTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBicmFuY2g6IHRoaXMuYnJhbmNoZXNbMF0uYnJhbmNoQ29kZSB9KTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJDYW5jZWxsYXRpb24gVHJhbnNhY3Rpb25cIikge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nO1xyXG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xyXG4gICAgICBjb25zdCBzZWxlY3RlZENsaWVudCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2NsaWVudCcpPy52YWx1ZTtcclxuICAgICAgdGhpcy5icmFuY2hlcyA9IFtdO1xyXG4gICAgICBpZiAoc2VsZWN0ZWRDbGllbnQgPT09ICdBbGwnKSB7XHJcbiAgICAgICAgdGhpcy5icmFuY2hlcyA9IFt7XHJcbiAgICAgICAgICBidXNpbmVzc1BhcnRuZXJCcmFuY2g6ICdBbGwnLFxyXG4gICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyQnJhbmNoX0NvcnJlbGF0aW9uSWQ6ICdBbGwnLFxyXG4gICAgICAgICAgYnJhbmNoQ29kZTogJ0FsbCcsXHJcbiAgICAgICAgICBiYW5rOiAnQWxsJyxcclxuICAgICAgICAgIG51bWJlcjogMVxyXG4gICAgICAgIH1dO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgYnJhbmNoOiB0aGlzLmJyYW5jaGVzWzBdLmJyYW5jaENvZGUgfSk7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5yZXBvcnRTZXJ2aWNlXHJcbiAgICAgICAgICAgIC5nZXRCcmFuY2hlcyhzZWxlY3RlZENsaWVudClcclxuICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgICAgICAudG9Qcm9taXNlKCk7XHJcblxyXG4gICAgICAgICAgaWYgKGRhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5icmFuY2hlcyA9IGRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgYnJhbmNoOiB0aGlzLmJyYW5jaGVzWzBdLmJyYW5jaENvZGUgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuXHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBsb2FkIGJyYW5jaGVzJywgZXJyb3IpO1xyXG4gICAgICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnRmFpbGVkIHRvIGxvYWQgYnJhbmNoIGRhdGEnO1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuRXJyb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIlN0YXRlbWVudCBvZiBBY2NvdW50c1wiKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gJyc7XHJcbiAgICAgIGNvbnN0IENsaWVudElkID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnY2xpZW50Jyk/LnZhbHVlO1xyXG4gICAgICBjb25zdCBzZWxlY3RlZENsaWVudCA9IHRoaXMuY2xpZW50czEuZmluZChjID0+IGMuYnVzaW5lc3NQYXJ0bmVyQ29kZSA9PT0gQ2xpZW50SWQpO1xyXG4gICAgICB0aGlzLmNsaWVudE5hbWUgPSBzZWxlY3RlZENsaWVudD8uYnVzaW5lc3NQYXJ0bmVyTmFtZSB8fCAnJztcclxuICAgICAgdGhpcy5jbGllbnRUeXBlID0gc2VsZWN0ZWRDbGllbnQ/LmNsaWVudFR5cGUgfHwgJyc7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGFjY291bnRpbmcgcmVwb3J0XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQWNjb3VudGluZ1wiKSB7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2xpZW50ID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnY2xpZW50Jyk/LnZhbHVlO1xyXG4gICAgICBpZiAoIXNlbGVjdGVkQ2xpZW50KSByZXR1cm47XHJcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcblxyXG4gICAgICB0aGlzLmJyYW5jaGVzID0gW107XHJcbiAgICAgIGlmIChzZWxlY3RlZENsaWVudCA9PT0gJ0FsbCcpIHtcclxuICAgICAgICB0aGlzLmJyYW5jaGVzID0gW3tcclxuICAgICAgICAgIGJ1c2luZXNzUGFydG5lckJyYW5jaDogJ0FsbCcsXHJcbiAgICAgICAgICBidXNpbmVzc1BhcnRuZXJCcmFuY2hfQ29ycmVsYXRpb25JZDogJ0FsbCcsXHJcbiAgICAgICAgICBicmFuY2hDb2RlOiAnQWxsJyxcclxuICAgICAgICAgIGJhbms6ICdBbGwnLFxyXG4gICAgICAgICAgbnVtYmVyOiAxXHJcbiAgICAgICAgfV07XHJcbiAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBicmFuY2g6IHRoaXMuYnJhbmNoZXNbMF0uYnJhbmNoQ29kZSB9KTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRTZXJ2aWNlLmdldEJyYW5jaEJ5QWdlbnRGb3JBY2NvdW50aW5nUmVwb3J0KHRoaXMuY3VycmVudFVzZXIsIHNlbGVjdGVkQ2xpZW50KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5icmFuY2hlcyA9IGRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgYnJhbmNoOiB0aGlzLmJyYW5jaGVzWzBdLmJyYW5jaENvZGUgfSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQnJhbmNoIEFjdGl2aXR5IFNlbmRcIikge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nO1xyXG4gICAgICBjb25zdCBzZWxlY3RlZENsaWVudCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2NsaWVudCcpPy52YWx1ZTtcclxuICAgICAgdGhpcy5icmFuY2hlcyA9IFtdO1xyXG4gICAgICBpZiAoc2VsZWN0ZWRDbGllbnQgPT09ICdBbGwnKSB7XHJcbiAgICAgICAgdGhpcy5icmFuY2hlcyA9IFt7XHJcbiAgICAgICAgICBidXNpbmVzc1BhcnRuZXJCcmFuY2g6ICdBbGwnLFxyXG4gICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyQnJhbmNoX0NvcnJlbGF0aW9uSWQ6ICdBbGwnLFxyXG4gICAgICAgICAgYnJhbmNoQ29kZTogJ0FsbCcsXHJcbiAgICAgICAgICBiYW5rOiAnQWxsJyxcclxuICAgICAgICAgIG51bWJlcjogMVxyXG4gICAgICAgIH1dO1xyXG4gICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgYnJhbmNoOiB0aGlzLmJyYW5jaGVzWzBdLmJyYW5jaENvZGUgfSk7XHJcbiAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHRoaXMucmVwb3J0U2VydmljZS5nZXRCcmFuY2hCeUFnZW50KHNlbGVjdGVkQ2xpZW50KS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5icmFuY2hlcyA9IGRhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgYnJhbmNoOiB0aGlzLmJyYW5jaGVzWzBdLmJyYW5jaENvZGUgfSk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiVHJhbnNhY3Rpb24gTW9uaXRvcmluZ1wiKSB7XHJcbiAgICAgICAgICBjb25zdCBzZWxlY3RlZENsaWVudCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2NsaWVudCcpPy52YWx1ZTtcclxuICAgICAgICAgIGlmICghc2VsZWN0ZWRDbGllbnQpIHJldHVybjtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICAgICAgICB0aGlzLmJyYW5jaGVzID0gW107XHJcbiAgICAgICAgICBpZiAoc2VsZWN0ZWRDbGllbnQgPT09ICdBbGwnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYnJhbmNoZXMgPSBbe1xyXG4gICAgICAgICAgICAgIGJ1c2luZXNzUGFydG5lckJyYW5jaDogJ0FsbCcsXHJcbiAgICAgICAgICAgICAgYnVzaW5lc3NQYXJ0bmVyQnJhbmNoX0NvcnJlbGF0aW9uSWQ6ICdBbGwnLFxyXG4gICAgICAgICAgICAgIGJyYW5jaENvZGU6ICdBbGwnLFxyXG4gICAgICAgICAgICAgIGJhbms6ICdBbGwnLFxyXG4gICAgICAgICAgICAgIG51bWJlcjogMVxyXG4gICAgICAgICAgICB9XTtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBicmFuY2g6IHRoaXMuYnJhbmNoZXNbMF0uYnJhbmNoQ29kZSB9KTtcclxuICAgICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJlcG9ydFNlcnZpY2UuZ2V0QnJhbmNoQnlBZ2VudEZvclRyYW5zYWN0aW9uTW9uaXRvcmluZ1JlcG9ydChzZWxlY3RlZENsaWVudCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICBuZXh0OiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5icmFuY2hlcyA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGJyYW5jaDogdGhpcy5icmFuY2hlc1swXS5icmFuY2hDb2RlIH0pO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQnJhbmNoIEFjdGl2aXR5IFNlbmQgU3VtbWFyeVwiKSB7XHJcbiAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICAgIGNvbnN0IHNlbGVjdGVkQ2xpZW50ID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnY2xpZW50Jyk/LnZhbHVlO1xyXG4gICAgICB0aGlzLmJyYW5jaGVzID0gW107XHJcbiAgICAgIGlmIChzZWxlY3RlZENsaWVudCA9PT0gJ0FsbCcpIHtcclxuICAgICAgICB0aGlzLmJyYW5jaGVzID0gW3tcclxuICAgICAgICAgIGJ1c2luZXNzUGFydG5lckJyYW5jaDogJ0FsbCcsXHJcbiAgICAgICAgICBidXNpbmVzc1BhcnRuZXJCcmFuY2hfQ29ycmVsYXRpb25JZDogJ0FsbCcsXHJcbiAgICAgICAgICBicmFuY2hDb2RlOiAnQWxsJyxcclxuICAgICAgICAgIGJhbms6ICdBbGwnLFxyXG4gICAgICAgICAgbnVtYmVyOiAxXHJcbiAgICAgICAgfV07XHJcbiAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBicmFuY2g6IHRoaXMuYnJhbmNoZXNbMF0uYnJhbmNoQ29kZSB9KTtcclxuICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXBvcnRTZXJ2aWNlLmdldEJyYW5jaEJ5QWdlbnRGb3JTZW5kU3VtbWFyeVJlcG9ydChzZWxlY3RlZENsaWVudCkuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYnJhbmNoZXMgPSBkYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGJyYW5jaDogdGhpcy5icmFuY2hlc1swXS5icmFuY2hDb2RlIH0pO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIHRocm93IGVycjtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuICBcclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBsb2FkQnJhbmNoZXNCeUFnZW50KGFnZW50Q29kZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBjb25zdCBicmFuY2hlcyA9IGF3YWl0IHRoaXMucmVwb3J0U2VydmljZVxyXG4gICAgICAuZ2V0QnJhbmNoZXNCeUFnZW50KGFnZW50Q29kZSlcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAudG9Qcm9taXNlKCk7XHJcbiAgICB0aGlzLmJyYW5jaGVzID0gYnJhbmNoZXMgfHwgW107XHJcblxyXG4gICAgaWYgKHRoaXMuYnJhbmNoZXMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgYnJhbmNoOiB0aGlzLmJyYW5jaGVzWzBdLmJyYW5jaENvZGUgfSk7XHJcbiAgICAgIC8vIGF3YWl0IHRoaXMubG9hZFVzZXJzQnlCcmFuY2goYWdlbnRDb2RlLCB0aGlzLmJyYW5jaGVzWzBdLmJyYW5jaENvZGUpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmJyYW5jaGVzLnNvbWUoYiA9PiBiLmJyYW5jaENvZGUgPT09ICdBbGwnKSkge1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGJyYW5jaDogJ0FsbCcgfSk7XHJcbiAgICAgIC8vIGF3YWl0IHRoaXMubG9hZFVzZXJzQnlCcmFuY2goYWdlbnRDb2RlLCAnQWxsJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7IGJyYW5jaDogJycgfSk7XHJcbiAgICAgIHRoaXMudXNlcnMgPSBbXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIG9uQnJhbmNoQ2hhbmdlKCk6IFByb21pc2U8dm9pZD4ge1xyXG5cclxuICB9XHJcblxyXG4gIG9uU2VhcmNoKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIlRyYW5zYWN0aW9uIEVucXVpcnlcIikge1xyXG4gICAgICB0aGlzLmhhc1NlYXJjaGVkID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ2xpY2tlZC5lbWl0KHRoaXMuYnVpbGRTZWFyY2hDcml0ZXJpYSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQnJhbmNoIEFjdGl2aXR5IFNlbmRcIikge1xyXG4gICAgICB0aGlzLmhhc1NlYXJjaGVkID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ2xpY2tlZC5lbWl0KHRoaXMuYnVpbGRTZWFyY2hDcml0ZXJpYSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQUNDIEdMIERldGFpbHMgRW5xdWlyeVwiKSB7XHJcbiAgICAgIHRoaXMuaGFzU2VhcmNoZWQgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hGb3JtLmludmFsaWQpIHtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSBmYWxzZTtcclxuICAgICAgY29uc3QgbW9kYWwgPSB7XHJcbiAgICAgICAgc2VsZWN0ZWREYXRlVHlwZTogdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzW1wiZGF0ZVR5cGVcIl0/LnZhbHVlLFxyXG4gICAgICAgIHNlbGVjdGVkRGF0ZTogdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzW1wiZGF0ZVwiXT8udmFsdWVcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KHRydWUpO1xyXG4gICAgICB0aGlzLnNlYXJjaENsaWNrZWQuZW1pdChtb2RhbCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PT0gXCJCcmFuY2ggQWN0aXZpdHkgUmVjZWl2ZVwiKSB7XHJcbiAgICAgIHRoaXMuaGFzU2VhcmNoZWQgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hGb3JtLmludmFsaWQpIHtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSBmYWxzZTtcclxuICAgICAgdGhpcy5mb3JtVmFsaWQuZW1pdCh0cnVlKTtcclxuICAgICAgdGhpcy5zZWFyY2hDbGlja2VkLmVtaXQodGhpcy5idWlsZFNlYXJjaENyaXRlcmlhKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJDYW5jZWxsYXRpb24gVHJhbnNhY3Rpb25cIikge1xyXG4gICAgICB0aGlzLmhhc1NlYXJjaGVkID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ2xpY2tlZC5lbWl0KHRoaXMuYnVpbGRTZWFyY2hDcml0ZXJpYSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09PSBcIlJldmVudWUgUGVyIFRyYW5zYWN0aW9uXCIpIHtcclxuICAgICAgdGhpcy5oYXNTZWFyY2hlZCA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLnNlYXJjaEZvcm0uaW52YWxpZCkge1xyXG4gICAgICAgIHRoaXMuZm9ybVZhbGlkYXRpb25FcnJvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5mb3JtVmFsaWQuZW1pdChmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybVZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KHRydWUpO1xyXG4gICAgICB0aGlzLnNlYXJjaENsaWNrZWQuZW1pdCh0aGlzLmJ1aWxkU2VhcmNoQ3JpdGVyaWEoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIlN0YXRlbWVudCBvZiBBY2NvdW50c1wiKSB7XHJcbiAgICAgIHRoaXMuaGFzU2VhcmNoZWQgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hGb3JtLmludmFsaWQpIHtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSBmYWxzZTtcclxuICAgICAgdGhpcy5mb3JtVmFsaWQuZW1pdCh0cnVlKTtcclxuICAgICAgdGhpcy5zZWFyY2hDbGlja2VkLmVtaXQodGhpcy5idWlsZFNlYXJjaENyaXRlcmlhKCkpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQWNjb3VudGluZ1wiKSB7XHJcbiAgICAgIHRoaXMuaGFzU2VhcmNoZWQgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hGb3JtLmludmFsaWQpIHtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIC8vIHRoaXMubWFya0Zvcm1Hcm91cFRvdWNoZWQodGhpcy5zZWFyY2hGb3JtKTtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ2xpY2tlZC5lbWl0KHRoaXMuYnVpbGRTZWFyY2hDcml0ZXJpYSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09PSBcIkNyZWRpdCBMaW1pdCBTdGF0dXMgRW5xdWlyeVwiKSB7XHJcbiAgICAgIHRoaXMuaGFzU2VhcmNoZWQgPSB0cnVlO1xyXG4gICAgICBpZiAodGhpcy5zZWFyY2hGb3JtLmludmFsaWQpIHtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQoZmFsc2UpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmZvcm1WYWxpZGF0aW9uRXJyb3IgPSBmYWxzZTtcclxuICAgICAgdGhpcy5mb3JtVmFsaWQuZW1pdCh0cnVlKTtcclxuICAgICAgdGhpcy5zZWFyY2hDbGlja2VkLmVtaXQodGhpcy5idWlsZFNlYXJjaENyaXRlcmlhKCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkZ1bmRpbmdcIikge1xyXG4gICAgICB0aGlzLmhhc1NlYXJjaGVkID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ2xpY2tlZC5lbWl0KHRoaXMuYnVpbGRTZWFyY2hDcml0ZXJpYSgpKTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJUcmlhbCBCYWxhbmNlIC0gQWNjb3VudHNcIikge1xyXG4gICAgICB0aGlzLmhhc1NlYXJjaGVkID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ2xpY2tlZC5lbWl0KHRoaXMuYnVpbGRTZWFyY2hDcml0ZXJpYSgpKTtcclxuICAgIH1cclxuICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkJyYW5jaCBBY3Rpdml0eSBTZW5kIFN1bW1hcnlcIilcclxuIHtcclxuICAgICAgdGhpcy5oYXNTZWFyY2hlZCA9IHRydWU7XHJcbiAgICAgIGlmICh0aGlzLnNlYXJjaEZvcm0uaW52YWxpZCkge1xyXG4gICAgICAgIHRoaXMuZm9ybVZhbGlkYXRpb25FcnJvciA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5mb3JtVmFsaWQuZW1pdChmYWxzZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZm9ybVZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KHRydWUpO1xyXG4gICAgICB0aGlzLnNlYXJjaENsaWNrZWQuZW1pdCh0aGlzLmJ1aWxkU2VhcmNoQ3JpdGVyaWEoKSk7XHJcbiAgICB9XHJcbiAgICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIlRyYW5zYWN0aW9uIE1vbml0b3JpbmdcIikge1xyXG4gICAgICB0aGlzLmhhc1NlYXJjaGVkID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMuc2VhcmNoRm9ybS5pbnZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmZvcm1WYWxpZC5lbWl0KGZhbHNlKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5mb3JtVmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZm9ybVZhbGlkLmVtaXQodHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2VhcmNoQ2xpY2tlZC5lbWl0KHRoaXMuYnVpbGRTZWFyY2hDcml0ZXJpYSgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYnVpbGRTZWFyY2hDcml0ZXJpYSgpOiBhbnkge1xyXG5cclxuICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuc2VhcmNoRm9ybS52YWx1ZTtcclxuICAgIGNvbnN0IGZyb21EYXRlID0gbmV3IERhdGUoZm9ybVZhbHVlLmZyb21EYXRlKTtcclxuICAgIGNvbnN0IHRvRGF0ZSA9IG5ldyBEYXRlKGZvcm1WYWx1ZS50b0RhdGUpO1xyXG5cclxuICAgIGNvbnN0IGZvcm1hdERhdGUgPSAoZDogRGF0ZSkgPT4ge1xyXG4gICAgICBjb25zdCBkYXkgPSBTdHJpbmcoZC5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsIFwiMFwiKTtcclxuICAgICAgY29uc3QgbW9udGggPSBTdHJpbmcoZC5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgXCIwXCIpO1xyXG4gICAgICBjb25zdCB5ZWFyID0gZC5nZXRGdWxsWWVhcigpO1xyXG4gICAgICByZXR1cm4gYCR7ZGF5fS8ke21vbnRofS8ke3llYXJ9YDtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgc2VhcmNoQ3JpdGVyaWEgPSB0aGlzLmdldFNlYXJjaENyaXRlcmlhQXJyYXkoKTtcclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiVHJhbnNhY3Rpb24gRW5xdWlyeVwiKSB7XHJcbiAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuc2VhcmNoRm9ybS52YWx1ZTtcclxuICAgICAgZm9ybVZhbHVlLmZyb21EYXRlID0gdGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUuZnJvbURhdGUpO1xyXG4gICAgICBmb3JtVmFsdWUudG9EYXRlID0gdGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUudG9EYXRlKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBtb2RhbDogZm9ybVZhbHVlLFxyXG4gICAgICAgIHN5c1VzZXJJRDogdGhpcy5jdXJyZW50VXNlcixcclxuICAgICAgICByZXBvcnRQZXJpb2Q6IGAke2Zvcm1hdERhdGUoZnJvbURhdGUpfSAtICR7Zm9ybWF0RGF0ZSh0b0RhdGUpfWAsXHJcbiAgICAgICAgc2VhcmNoQ3JpdGVyaWE6IHNlYXJjaENyaXRlcmlhXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkJyYW5jaCBBY3Rpdml0eSBTZW5kXCIpIHtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5zZWFyY2hGb3JtLnZhbHVlO1xyXG4gICAgICBmb3JtVmFsdWUuZnJvbURhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSk7XHJcbiAgICAgIGZvcm1WYWx1ZS50b0RhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS50b0RhdGUpO1xyXG4gICAgICBjb25zdCBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gICAgICAgIFsnQ2xpZW50OicsIHRoaXMuY2xpZW50czEuZmluZChjID0+IGMuYnVzaW5lc3NQYXJ0bmVyQ29kZSA9PT0gZm9ybVZhbHVlLmNsaWVudCk/LmJ1c2luZXNzUGFydG5lck5hbWUgfHwgJyddLFxyXG4gICAgICAgIFsnVHJhbnNhY3Rpb24gU3RhdHVzOicsIGZvcm1WYWx1ZS50cmFuc2FjdGlvblN0YXR1cy5qb2luKFwiLFwiKV0sXHJcbiAgICAgICAgWydCcmFuY2g6JywgdGhpcy5icmFuY2hlcy5maW5kKGIgPT4gYi5icmFuY2hDb2RlID09PSBmb3JtVmFsdWUuYnJhbmNoKT8uYnVzaW5lc3NQYXJ0bmVyQnJhbmNoIHx8ICcnXSxcclxuICAgICAgICBbJ1Byb2R1Y3Q6JywgZm9ybVZhbHVlLnByb2R1Y3RdLFxyXG4gICAgICAgIFsnRnJvbSBEYXRlOicsIGFuZ3VsYXJDb21tb24uZm9ybWF0RGF0ZSh0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSksICdkZC9NTS95eXl5JywgJ2VuLVVTJyldLFxyXG4gICAgICAgIFsnUmVjZWl2ZSBDdXJyZW5jeTonLCB0aGlzLmN1cnJlbmNpZXMuZmluZChjID0+IGMuY3VycmVuY3lDb2RlID09PSBmb3JtVmFsdWUucmVjZWl2ZUN1cnJlbmN5KT8uY3VycmVuY3kgfHwgJyddLFxyXG4gICAgICAgIFsnVG8gRGF0ZTonLCBhbmd1bGFyQ29tbW9uLmZvcm1hdERhdGUodGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUudG9EYXRlKSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKV0sXHJcbiAgICAgICAgWydTZW5kIENvdW50cnk6JywgdGhpcy5jb3VudHJpZXMuZmluZChjID0+IGMuY291bnRyeUNvZGUgPT09IGZvcm1WYWx1ZS5zZW5kQ291bnRyeSk/LmNvdW50cnkgfHwgJyddLFxyXG4gICAgICAgIFsnUmVjZWl2ZSBDb3VudHJ5OicsIHRoaXMuY291bnRyaWVzLmZpbmQoYyA9PiBjLmNvdW50cnlDb2RlID09PSBmb3JtVmFsdWUucmVjZWl2ZUNvdW50cnkpPy5jb3VudHJ5IHx8ICcnXSxcclxuICAgICAgXTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBtb2RhbDogZm9ybVZhbHVlLFxyXG4gICAgICAgIHN5c1VzZXJJRDogdGhpcy5jdXJyZW50VXNlcixcclxuICAgICAgICBzZWFyY2hDcml0ZXJpYTogc2VhcmNoQ3JpdGVyaWFcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJCcmFuY2ggQWN0aXZpdHkgUmVjZWl2ZVwiKSB7XHJcbiAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuc2VhcmNoRm9ybS52YWx1ZTtcclxuICAgICAgZm9ybVZhbHVlLmZyb21EYXRlID0gdGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUuZnJvbURhdGUpO1xyXG4gICAgICBmb3JtVmFsdWUudG9EYXRlID0gdGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUudG9EYXRlKTtcclxuICAgICAgY29uc3Qgc2VhcmNoQ3JpdGVyaWE6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtcclxuICAgICAgICBbJ0NsaWVudDonLCB0aGlzLmNsaWVudHMxLmZpbmQoYyA9PiBjLmJ1c2luZXNzUGFydG5lckNvZGUgPT09IGZvcm1WYWx1ZS5jbGllbnQpPy5idXNpbmVzc1BhcnRuZXJOYW1lIHx8ICcnXSxcclxuICAgICAgICBbJ1RyYW5zYWN0aW9uIFN0YXR1czonLCBmb3JtVmFsdWUudHJhbnNhY3Rpb25TdGF0dXMuam9pbihcIixcIildLFxyXG4gICAgICAgIFsnQnJhbmNoOicsIHRoaXMuYnJhbmNoZXMuZmluZChiID0+IGIuYnJhbmNoQ29kZSA9PT0gZm9ybVZhbHVlLmJyYW5jaCk/LmJ1c2luZXNzUGFydG5lckJyYW5jaCB8fCAnJ10sXHJcbiAgICAgICAgWydQcm9kdWN0OicsIGZvcm1WYWx1ZS5wcm9kdWN0XSxcclxuICAgICAgICBbJ0Zyb20gRGF0ZTonLCBhbmd1bGFyQ29tbW9uLmZvcm1hdERhdGUodGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUuZnJvbURhdGUpLCAnZGQvTU0veXl5eScsICdlbi1VUycpXSxcclxuICAgICAgICBbJ1JlY2VpdmUgQ3VycmVuY3k6JywgdGhpcy5jdXJyZW5jaWVzLmZpbmQoYyA9PiBjLmN1cnJlbmN5Q29kZSA9PT0gZm9ybVZhbHVlLnJlY2VpdmVDdXJyZW5jeSk/LmN1cnJlbmN5IHx8ICcnXSxcclxuICAgICAgICBbJ1RvIERhdGU6JywgYW5ndWxhckNvbW1vbi5mb3JtYXREYXRlKHRoaXMudG9Jc29Gb3JtYXQoZm9ybVZhbHVlLnRvRGF0ZSksICdkZC9NTS95eXl5JywgJ2VuLVVTJyldLFxyXG4gICAgICAgIFsnU2VuZCBDb3VudHJ5OicsIHRoaXMuY291bnRyaWVzLmZpbmQoYyA9PiBjLmNvdW50cnlDb2RlID09PSBmb3JtVmFsdWUuc2VuZENvdW50cnkpPy5jb3VudHJ5IHx8ICcnXSxcclxuICAgICAgICBbJ1JlY2VpdmUgQ291bnRyeTonLCB0aGlzLmNvdW50cmllcy5maW5kKGMgPT4gYy5jb3VudHJ5Q29kZSA9PT0gZm9ybVZhbHVlLnJlY2VpdmVDb3VudHJ5KT8uY291bnRyeSB8fCAnJ10sXHJcbiAgICAgIF07XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbW9kYWw6IGZvcm1WYWx1ZSxcclxuICAgICAgICBzeXNVc2VySUQ6IHRoaXMuY3VycmVudFVzZXIsXHJcbiAgICAgICAgc2VhcmNoQ3JpdGVyaWE6IHNlYXJjaENyaXRlcmlhXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQ2FuY2VsbGF0aW9uIFRyYW5zYWN0aW9uXCIpIHtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5zZWFyY2hGb3JtLnZhbHVlO1xyXG4gICAgICBmb3JtVmFsdWUuZnJvbURhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSk7XHJcbiAgICAgIGZvcm1WYWx1ZS50b0RhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS50b0RhdGUpO1xyXG4gICAgICBjb25zdCBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gICAgICAgIFsnQ2xpZW50OicsIHRoaXMuY2xpZW50czEuZmluZChjID0+IGMuYnVzaW5lc3NQYXJ0bmVyQ29kZSA9PT0gZm9ybVZhbHVlLmNsaWVudCk/LmJ1c2luZXNzUGFydG5lck5hbWUgfHwgJyddLFxyXG4gICAgICAgIFsnQnJhbmNoOicsIHRoaXMuYnJhbmNoZXMuZmluZChiID0+IGIuYnJhbmNoQ29kZSA9PT0gZm9ybVZhbHVlLmJyYW5jaCk/LmJ1c2luZXNzUGFydG5lckJyYW5jaCB8fCAnJ10sXHJcbiAgICAgICAgWydQcm9kdWN0OicsIGZvcm1WYWx1ZS5wcm9kdWN0XSxcclxuICAgICAgICBbJ0Zyb20gRGF0ZTonLCBhbmd1bGFyQ29tbW9uLmZvcm1hdERhdGUodGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUuZnJvbURhdGUpLCAnZGQvTU0veXl5eScsICdlbi1VUycpXSxcclxuICAgICAgICBbJ1JlY2VpdmUgQ3VycmVuY3k6JywgdGhpcy5jdXJyZW5jaWVzLmZpbmQoYyA9PiBjLmN1cnJlbmN5Q29kZSA9PT0gZm9ybVZhbHVlLnJlY2VpdmVDdXJyZW5jeSk/LmN1cnJlbmN5IHx8ICcnXSxcclxuICAgICAgICBbJ1RvIERhdGU6JywgYW5ndWxhckNvbW1vbi5mb3JtYXREYXRlKHRoaXMudG9Jc29Gb3JtYXQoZm9ybVZhbHVlLnRvRGF0ZSksICdkZC9NTS95eXl5JywgJ2VuLVVTJyldLFxyXG4gICAgICAgIFsnU2VuZCBDb3VudHJ5OicsIHRoaXMuY291bnRyaWVzLmZpbmQoYyA9PiBjLmNvdW50cnlDb2RlID09PSBmb3JtVmFsdWUuc2VuZENvdW50cnkpPy5jb3VudHJ5IHx8ICcnXSxcclxuICAgICAgICBbJ1JlY2VpdmUgQ291bnRyeTonLCB0aGlzLmNvdW50cmllcy5maW5kKGMgPT4gYy5jb3VudHJ5Q29kZSA9PT0gZm9ybVZhbHVlLnJlY2VpdmVDb3VudHJ5KT8uY291bnRyeSB8fCAnJ10sXHJcblxyXG4gICAgICBdO1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIG1vZGFsOiBmb3JtVmFsdWUsXHJcbiAgICAgICAgc3lzVXNlcklEOiB0aGlzLmN1cnJlbnRVc2VyLFxyXG4gICAgICAgIHJlcG9ydFBlcmlvZDogYCR7Zm9ybWF0RGF0ZShmcm9tRGF0ZSl9IC0gJHtmb3JtYXREYXRlKHRvRGF0ZSl9YCxcclxuICAgICAgICBzZWFyY2hDcml0ZXJpYTogc2VhcmNoQ3JpdGVyaWFcclxuICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09PSBcIlJldmVudWUgUGVyIFRyYW5zYWN0aW9uXCIpIHtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5zZWFyY2hGb3JtLnZhbHVlO1xyXG4gICAgICBmb3JtVmFsdWUuZnJvbURhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSk7XHJcbiAgICAgIGZvcm1WYWx1ZS50b0RhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS50b0RhdGUpO1xyXG4gICAgICBjb25zdCBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gICAgICAgIFsnU2VuZGVyIFBhcnRuZXI6JywgdGhpcy5zZW5kQnVzaW5lc3NQYXJ0bmVyQWdlbnRzLmZpbmQoYyA9PiBjLmlkID09PSBmb3JtVmFsdWUuc2VuZEJ1c2luZXNzUGFydG5lcik/Lm5hbWUgfHwgJyddLFxyXG4gICAgICAgIFsnUmVjZWl2ZSBQYXJ0bmVyOicsIHRoaXMucmVjdkJ1c2luZXNzUGFydG5lckFnZW50cy5maW5kKGMgPT4gYy5pZCA9PT0gZm9ybVZhbHVlLnJlY3ZCdXNpbmVzc1BhcnRuZXIpPy5uYW1lIHx8ICcnXSxcclxuICAgICAgICBbJ1NlbmQgQ291bnRyeTonLCB0aGlzLmNvdW50cmllcy5maW5kKGMgPT4gYy5jb3VudHJ5Q29kZSA9PT0gZm9ybVZhbHVlLnNlbmRDb3VudHJ5KT8uY291bnRyeSB8fCAnJ10sXHJcbiAgICAgICAgWydSZWNlaXZlIENvdW50cnk6JywgdGhpcy5jb3VudHJpZXMuZmluZChjID0+IGMuY291bnRyeUNvZGUgPT09IGZvcm1WYWx1ZS5yZWNlaXZlQ291bnRyeSk/LmNvdW50cnkgfHwgJyddLFxyXG4gICAgICAgIFsnRnJvbSBEYXRlOicsIGFuZ3VsYXJDb21tb24uZm9ybWF0RGF0ZSh0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSksICdkZC9NTS95eXl5JywgJ2VuLVVTJyldLFxyXG4gICAgICAgIFsnVG8gRGF0ZTonLCBhbmd1bGFyQ29tbW9uLmZvcm1hdERhdGUodGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUudG9EYXRlKSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKV0sXHJcbiAgICAgICAgWydUcmFuc2FjdGlvbiBTdGF0dXM6JywgZm9ybVZhbHVlLnRyYW5zYWN0aW9uU3RhdHVzLmpvaW4oXCIsXCIpXSxcclxuICAgICAgXTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBtb2RhbDogZm9ybVZhbHVlLFxyXG4gICAgICAgIHN5c1VzZXJJZDogdGhpcy5jdXJyZW50VXNlcixcclxuICAgICAgICBzZWFyY2hDcml0ZXJpYTogc2VhcmNoQ3JpdGVyaWFcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJTdGF0ZW1lbnQgb2YgQWNjb3VudHNcIikge1xyXG4gICAgICBjb25zdCBmb3JtVmFsdWUgPSB0aGlzLnNlYXJjaEZvcm0udmFsdWU7XHJcbiAgICAgIGZvcm1WYWx1ZS5mcm9tRGF0ZSA9IHRoaXMudG9Jc29Gb3JtYXQoZm9ybVZhbHVlLmZyb21EYXRlKTtcclxuICAgICAgZm9ybVZhbHVlLnRvRGF0ZSA9IHRoaXMudG9Jc29Gb3JtYXQoZm9ybVZhbHVlLnRvRGF0ZSk7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbW9kYWw6IGZvcm1WYWx1ZSxcclxuICAgICAgICBjbGllbnRUeXBlOiB0aGlzLmNsaWVudFR5cGUsXHJcbiAgICAgICAgc3lzVXNlcklEOiB0aGlzLmN1cnJlbnRVc2VyLFxyXG4gICAgICAgIGNsaWVudE5hbWU6IHRoaXMuY2xpZW50TmFtZSxcclxuICAgICAgICByZXBvcnRQZXJpb2Q6IGAke2Zvcm1hdERhdGUoZnJvbURhdGUpfSAtICR7Zm9ybWF0RGF0ZSh0b0RhdGUpfWAsXHJcbiAgICAgICAgc2VhcmNoQ3JpdGVyaWE6IHNlYXJjaENyaXRlcmlhXHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiQWNjb3VudGluZ1wiKSB7XHJcbiAgICAgIGNvbnN0IGZvcm1WYWx1ZSA9IHRoaXMuc2VhcmNoRm9ybS52YWx1ZTtcclxuICAgICAgY29uc3Qgc2VhcmNoQ3JpdGVyaWEgPSBbXHJcbiAgICAgICAgWydDbGllbnQ6JywgdGhpcy5jbGllbnRzMS5maW5kKGMgPT4gYy5idXNpbmVzc1BhcnRuZXJDb2RlID09PSBmb3JtVmFsdWUuY2xpZW50KT8uYnVzaW5lc3NQYXJ0bmVyTmFtZSB8fCAnJ10sXHJcbiAgICAgICAgWydUcmFuc2FjdGlvbiBTdGF0dXM6JywgZm9ybVZhbHVlLnRyYW5zYWN0aW9uU3RhdHVzLmpvaW4oXCIsXCIpXSxcclxuICAgICAgICBbJ0JyYW5jaDonLCB0aGlzLmJyYW5jaGVzLmZpbmQoYiA9PiBiLmJyYW5jaENvZGUgPT09IGZvcm1WYWx1ZS5icmFuY2gpPy5idXNpbmVzc1BhcnRuZXJCcmFuY2ggfHwgJyddLFxyXG4gICAgICAgIFsnUHJvZHVjdDonLCB0aGlzLnRyYW5zYWN0aW9uUHJvZHVjdHMuZmluZCh0ID0+IHQucHJvZHVjdENvZGUgPT09IGZvcm1WYWx1ZS5wcm9kdWN0KT8ubmFtZSB8fCAnJ10sXHJcbiAgICAgICAgWydGcm9tIERhdGU6JywgYW5ndWxhckNvbW1vbi5mb3JtYXREYXRlKHRoaXMudG9Jc29Gb3JtYXQoZm9ybVZhbHVlLmZyb21EYXRlKSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKV0sXHJcbiAgICAgICAgWydTZW5kIEN1cnJlbmN5OicsIHRoaXMuY3VycmVuY2llcy5maW5kKGMgPT4gYy5jdXJyZW5jeUNvZGUgPT09IGZvcm1WYWx1ZS5jdXJyZW5jeSk/LmN1cnJlbmN5IHx8ICcnXSxcclxuICAgICAgICBbJ1RvIERhdGU6JywgYW5ndWxhckNvbW1vbi5mb3JtYXREYXRlKHRoaXMudG9Jc29Gb3JtYXQoZm9ybVZhbHVlLnRvRGF0ZSksICdkZC9NTS95eXl5JywgJ2VuLVVTJyldLFxyXG4gICAgICAgIFsnU2VuZCBDb3VudHJ5OicsIHRoaXMuY291bnRyaWVzLmZpbmQoYyA9PiBjLmNvdW50cnlDb2RlID09PSBmb3JtVmFsdWUuc2VuZENvdW50cnkpPy5jb3VudHJ5IHx8ICcnXSxcclxuICAgICAgICBbJ1JlY2VpdmUgQ291bnRyeTonLCB0aGlzLmNvdW50cmllcy5maW5kKGMgPT4gYy5jb3VudHJ5Q29kZSA9PT0gZm9ybVZhbHVlLnJlY2VpdmVDb3VudHJ5KT8uY291bnRyeSB8fCAnJ10sXHJcbiAgICAgIF07XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbW9kYWw6IHtcclxuICAgICAgICAgIC4uLmZvcm1WYWx1ZSxcclxuICAgICAgICAgIGZyb21EYXRlOiB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSksXHJcbiAgICAgICAgICB0b0RhdGU6IHRoaXMudG9Jc29Gb3JtYXQoZm9ybVZhbHVlLnRvRGF0ZSksXHJcbiAgICAgICAgfSxcclxuICAgICAgICBzeXNVc2VySUQ6IHRoaXMuY3VycmVudFVzZXIsXHJcbiAgICAgICAgc2VhcmNoQ3JpdGVyaWE6IHNlYXJjaENyaXRlcmlhXHJcbiAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PT0gXCJDcmVkaXQgTGltaXQgU3RhdHVzIEVucXVpcnlcIikge1xyXG4gICAgICBjb25zdCBjbGllbnRDb2RlID0gdGhpcy5zZWFyY2hGb3JtLmNvbnRyb2xzWydjbGllbnQnXS52YWx1ZTtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5zZWFyY2hGb3JtLnZhbHVlO1xyXG4gICAgICBmb3JtVmFsdWUuZnJvbURhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSk7XHJcbiAgICAgIGZvcm1WYWx1ZS50b0RhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS50b0RhdGUpO1xyXG4gICAgICBmb3JtVmFsdWUuY2xpZW50ID0gdGhpcy5jbGllbnRzMS5maW5kKGMgPT4gYy5idXNpbmVzc1BhcnRuZXJDb2RlID09PSBjbGllbnRDb2RlKT8uYnVzaW5lc3NQYXJ0bmVyTmFtZSB8fCAnJztcclxuICAgICAgY29uc3Qgc2VhcmNoQ3JpdGVyaWE6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtcclxuICAgICAgICBbJ0NsaWVudDonLCB0aGlzLmNsaWVudHMxLmZpbmQoYyA9PiBjLmJ1c2luZXNzUGFydG5lckNvZGUgPT09IGNsaWVudENvZGUpPy5idXNpbmVzc1BhcnRuZXJOYW1lIHx8ICcnXSxcclxuICAgICAgICBbJ1RyYW5zYWN0aW9uIHN0YXR1czonLCBmb3JtVmFsdWUudHJhbnNhY3Rpb25TdGF0dXNdLFxyXG4gICAgICAgIFsnRnJvbSBEYXRlOicsIGFuZ3VsYXJDb21tb24uZm9ybWF0RGF0ZSh0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSksICdkZC9NTS95eXl5JywgJ2VuLVVTJyldLFxyXG4gICAgICAgIFsnVG8gRGF0ZTonLCBhbmd1bGFyQ29tbW9uLmZvcm1hdERhdGUodGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUudG9EYXRlKSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKV0sXHJcbiAgICAgIF07XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbW9kYWw6IGZvcm1WYWx1ZSxcclxuICAgICAgICBzeXNVc2VySUQ6IHRoaXMuY3VycmVudFVzZXIsXHJcbiAgICAgICAgc2VhcmNoQ3JpdGVyaWE6IHNlYXJjaENyaXRlcmlhXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJGdW5kaW5nXCIpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBtb2RhbDogZm9ybVZhbHVlLFxyXG4gICAgICAgIHN5c1VzZXJJRDogdGhpcy5jdXJyZW50VXNlcixcclxuICAgICAgICByZXBvcnRQZXJpb2Q6IGAke2Zvcm1hdERhdGUoZnJvbURhdGUpfSAtICR7Zm9ybWF0RGF0ZSh0b0RhdGUpfWAsXHJcbiAgICAgICAgc2VhcmNoQ3JpdGVyaWE6IHNlYXJjaENyaXRlcmlhXHJcbiAgICAgIH07XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5SZXBvcnROYW1lID09IFwiVHJpYWwgQmFsYW5jZSAtIEFjY291bnRzXCIpIHtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5zZWFyY2hGb3JtLnZhbHVlO1xyXG4gICAgICBjb25zdCBkYXRlUmFuZ2UgPSB0aGlzLnByZXBhcmVGcm9tRGF0ZUFuZFRvRGF0ZUZvclRyaWFsQmFsYW5jZUFjY291bnRSZXBvcnQoKTtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBtb2RhbDoge1xyXG4gICAgICAgICAgLi4uZm9ybVZhbHVlLFxyXG4gICAgICAgICAgZnJvbURhdGU6IGRhdGVSYW5nZS5mcm9tRGF0ZSxcclxuICAgICAgICAgIHRvRGF0ZTogZGF0ZVJhbmdlLnRvRGF0ZSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN5c1VzZXJJRDogdGhpcy5jdXJyZW50VXNlclxyXG4gICAgICB9O1xyXG5cclxuICAgIH1cclxuICAgICAgaWYgKHRoaXMuUmVwb3J0TmFtZSA9PSBcIkJyYW5jaCBBY3Rpdml0eSBTZW5kIFN1bW1hcnlcIilcclxuIHtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5zZWFyY2hGb3JtLnZhbHVlO1xyXG4gICAgICBmb3JtVmFsdWUuZnJvbURhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSk7XHJcbiAgICAgIGZvcm1WYWx1ZS50b0RhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS50b0RhdGUpO1xyXG4gICAgICBjb25zdCBzZWFyY2hDcml0ZXJpYTogW3N0cmluZywgc3RyaW5nXVtdID0gW1xyXG4gICAgICAgIFsnQ2xpZW50OicsIHRoaXMuY2xpZW50czEuZmluZChjID0+IGMuYnVzaW5lc3NQYXJ0bmVyQ29kZSA9PT0gZm9ybVZhbHVlLmNsaWVudCk/LmJ1c2luZXNzUGFydG5lck5hbWUgfHwgJyddLFxyXG4gICAgICAgIFsnVHJhbnNhY3Rpb24gU3RhdHVzOicsIGZvcm1WYWx1ZS50cmFuc2FjdGlvblN0YXR1cy5qb2luKFwiLFwiKV0sXHJcbiAgICAgICAgWydCcmFuY2g6JywgdGhpcy5icmFuY2hlcy5maW5kKGIgPT4gYi5icmFuY2hDb2RlID09PSBmb3JtVmFsdWUuYnJhbmNoKT8uYnVzaW5lc3NQYXJ0bmVyQnJhbmNoIHx8ICcnXSxcclxuICAgICAgICBbJ1Byb2R1Y3Q6JywgZm9ybVZhbHVlLnByb2R1Y3RdLFxyXG4gICAgICAgIFsnRnJvbSBEYXRlOicsIGFuZ3VsYXJDb21tb24uZm9ybWF0RGF0ZSh0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSksICdkZC9NTS95eXl5JywgJ2VuLVVTJyldLFxyXG4gICAgICAgIFsnUmVjZWl2ZSBDdXJyZW5jeTonLCB0aGlzLmN1cnJlbmNpZXMuZmluZChjID0+IGMuY3VycmVuY3lDb2RlID09PSBmb3JtVmFsdWUucmVjZWl2ZUN1cnJlbmN5KT8uY3VycmVuY3kgfHwgJyddLFxyXG4gICAgICAgIFsnVG8gRGF0ZTonLCBhbmd1bGFyQ29tbW9uLmZvcm1hdERhdGUodGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUudG9EYXRlKSwgJ2RkL01NL3l5eXknLCAnZW4tVVMnKV0sXHJcbiAgICAgICAgWydTZW5kIENvdW50cnk6JywgdGhpcy5jb3VudHJpZXMuZmluZChjID0+IGMuY291bnRyeUNvZGUgPT09IGZvcm1WYWx1ZS5zZW5kQ291bnRyeSk/LmNvdW50cnkgfHwgJyddLFxyXG4gICAgICAgIFsnUmVjZWl2ZSBDb3VudHJ5OicsIHRoaXMuY291bnRyaWVzLmZpbmQoYyA9PiBjLmNvdW50cnlDb2RlID09PSBmb3JtVmFsdWUucmVjZWl2ZUNvdW50cnkpPy5jb3VudHJ5IHx8ICcnXSxcclxuICAgICAgICBbJ1N1bW1hcnkgUmVwb3J0OicsIGZvcm1WYWx1ZS5zdW1tYXJ5UmVwb3J0XSwgXHJcbiAgICAgIF07XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbW9kYWw6IGZvcm1WYWx1ZSxcclxuICAgICAgICBzeXNVc2VySUQ6IHRoaXMuY3VycmVudFVzZXIsXHJcbiAgICAgICAgc2VhcmNoQ3JpdGVyaWE6IHNlYXJjaENyaXRlcmlhXHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLlJlcG9ydE5hbWUgPT0gXCJUcmFuc2FjdGlvbiBNb25pdG9yaW5nXCIpIHtcclxuICAgICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5zZWFyY2hGb3JtLnZhbHVlO1xyXG4gICAgICAvLyBmb3JtVmFsdWUuZnJvbURhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS5mcm9tRGF0ZSk7XHJcbiAgICAgIC8vIGZvcm1WYWx1ZS50b0RhdGUgPSB0aGlzLnRvSXNvRm9ybWF0KGZvcm1WYWx1ZS50b0RhdGUpO1xyXG4gICAgICBpZiAodGhpcy5pbml0aWFsRmlsdGVycz8uaXNSZWFsdGltZSAmJighZm9ybVZhbHVlLmZyb21EYXRlICYmICFmb3JtVmFsdWUudG9EYXRlKSkge1xyXG4gICAgICAgIGZvcm1WYWx1ZS5mcm9tRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgZm9ybVZhbHVlLnRvRGF0ZSA9IG51bGw7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZm9ybVZhbHVlLmZyb21EYXRlID0gdGhpcy50b0lzb0Zvcm1hdChmcm9tRGF0ZSk7XHJcbiAgICAgICAgZm9ybVZhbHVlLnRvRGF0ZSA9IHRoaXMudG9Jc29Gb3JtYXQodG9EYXRlKTtcclxuICAgICAgICBpZiAodGhpcy5pbml0aWFsRmlsdGVycz8uaXNSZWFsdGltZSkge1xyXG4gICAgICAgICAgdGhpcy5pbml0aWFsRmlsdGVycy5pc1JlYWx0aW1lID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgXHJcbiAgICAgIH1cclxuICAgICAgY29uc3Qgc2VhcmNoQ3JpdGVyaWE6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtcclxuICAgICAgICBbJ0NsaWVudDonLCB0aGlzLmNsaWVudHMxLmZpbmQoYyA9PiBjLmJ1c2luZXNzUGFydG5lckNvZGUgPT09IGZvcm1WYWx1ZS5jbGllbnQpPy5idXNpbmVzc1BhcnRuZXJOYW1lIHx8ICcnXSxcclxuICAgICAgICBbJ1RyYW5zYWN0aW9uIFN0YXR1czonLCBmb3JtVmFsdWUudHJhbnNhY3Rpb25TdGF0dXMuam9pbihcIixcIildLFxyXG4gICAgICAgIFsnQnJhbmNoOicsIHRoaXMuYnJhbmNoZXMuZmluZChiID0+IGIuYnJhbmNoQ29kZSA9PT0gZm9ybVZhbHVlLmJyYW5jaCk/LmJ1c2luZXNzUGFydG5lckJyYW5jaCB8fCAnJ10sXHJcbiAgICAgICAgWydQcm9kdWN0OicsIGZvcm1WYWx1ZS5wcm9kdWN0XSxcclxuICAgICAgICBbJ0Zyb20gRGF0ZTonLCB0aGlzLmluaXRpYWxGaWx0ZXJzPy5pc1JlYWx0aW1lID8gJycgOiBhbmd1bGFyQ29tbW9uLmZvcm1hdERhdGUodGhpcy50b0lzb0Zvcm1hdChmb3JtVmFsdWUuZnJvbURhdGUpLCAnZGQvTU0veXl5eScsICdlbi1VUycpXSxcclxuICAgICAgICBbJ1JlY2VpdmUgQ3VycmVuY3k6JywgdGhpcy5jdXJyZW5jaWVzLmZpbmQoYyA9PiBjLmN1cnJlbmN5Q29kZSA9PT0gZm9ybVZhbHVlLnJlY2VpdmVDdXJyZW5jeSk/LmN1cnJlbmN5IHx8ICcnXSxcclxuICAgICAgICBbJ1RvIERhdGU6JywgdGhpcy5pbml0aWFsRmlsdGVycz8uaXNSZWFsdGltZSA/ICcnIDogYW5ndWxhckNvbW1vbi5mb3JtYXREYXRlKHRoaXMudG9Jc29Gb3JtYXQoZm9ybVZhbHVlLnRvRGF0ZSksICdkZC9NTS95eXl5JywgJ2VuLVVTJyldLFxyXG4gICAgICAgIFsnU2VuZCBDb3VudHJ5OicsIHRoaXMuY291bnRyaWVzLmZpbmQoYyA9PiBjLmNvdW50cnlDb2RlID09PSBmb3JtVmFsdWUuc2VuZENvdW50cnkpPy5jb3VudHJ5IHx8ICcnXSxcclxuICAgICAgICBbJ1JlY2VpdmUgQ291bnRyeTonLCB0aGlzLmNvdW50cmllcy5maW5kKGMgPT4gYy5jb3VudHJ5Q29kZSA9PT0gZm9ybVZhbHVlLnJlY2VpdmVDb3VudHJ5KT8uY291bnRyeSB8fCAnJ10sXHJcbiAgICAgIF07XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgbW9kYWw6IGZvcm1WYWx1ZSxcclxuICAgICAgICBzeXNVc2VySUQ6IHRoaXMuY3VycmVudFVzZXIsXHJcbiAgICAgICAgc2VhcmNoQ3JpdGVyaWE6IHNlYXJjaENyaXRlcmlhXHJcbiAgICAgIH1cclxuICAgfVxyXG4gIH1cclxuXHJcbiAgdG9Jc29Gb3JtYXQoZGF0ZUlucHV0OiBhbnkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKCFkYXRlSW5wdXQpIHJldHVybiB1bmRlZmluZWQ7XHJcblxyXG4gICAgLy8gSGFuZGxlIHsgeWVhciwgbW9udGgsIGRheSB9XHJcbiAgICBpZiAoXHJcbiAgICAgIHR5cGVvZiBkYXRlSW5wdXQgPT09ICdvYmplY3QnICYmXHJcbiAgICAgIGRhdGVJbnB1dC55ZWFyICYmXHJcbiAgICAgIGRhdGVJbnB1dC5tb250aCAmJlxyXG4gICAgICBkYXRlSW5wdXQuZGF5XHJcbiAgICApIHtcclxuICAgICAgY29uc3QgeWVhciA9IGRhdGVJbnB1dC55ZWFyO1xyXG4gICAgICBjb25zdCBtb250aCA9IFN0cmluZyhkYXRlSW5wdXQubW9udGgpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICAgIGNvbnN0IGRheSA9IFN0cmluZyhkYXRlSW5wdXQuZGF5KS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBIYW5kbGUgSlMgRGF0ZSBvYmplY3RcclxuICAgIGlmIChkYXRlSW5wdXQgaW5zdGFuY2VvZiBEYXRlKSB7XHJcbiAgICAgIGlmIChpc05hTihkYXRlSW5wdXQuZ2V0VGltZSgpKSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgICAgY29uc3QgeWVhciA9IGRhdGVJbnB1dC5nZXRGdWxsWWVhcigpO1xyXG4gICAgICBjb25zdCBtb250aCA9IFN0cmluZyhkYXRlSW5wdXQuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICAgIGNvbnN0IGRheSA9IFN0cmluZyhkYXRlSW5wdXQuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpO1xyXG4gICAgICByZXR1cm4gYCR7eWVhcn0tJHttb250aH0tJHtkYXl9YDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBIYW5kbGUgZGQvTU0veXl5eSBzdHJpbmdcclxuICAgIGlmICh0eXBlb2YgZGF0ZUlucHV0ID09PSAnc3RyaW5nJyAmJiBkYXRlSW5wdXQuaW5jbHVkZXMoJy8nKSkge1xyXG4gICAgICBjb25zdCBwYXJ0cyA9IGRhdGVJbnB1dC5zcGxpdCgnLycpO1xyXG4gICAgICBpZiAocGFydHMubGVuZ3RoID09PSAzKSB7XHJcbiAgICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gcGFydHM7XHJcbiAgICAgICAgcmV0dXJuIGAke3llYXJ9LSR7bW9udGgucGFkU3RhcnQoMiwgJzAnKX0tJHtkYXkucGFkU3RhcnQoMiwgJzAnKX1gO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gSGFuZGxlIElTTyBzdHJpbmcgKHl5eXktTU0tZGQgb3IgeXl5eS1NTS1kZFRISDptbTpzcy5zc3NaKVxyXG4gICAgaWYgKHR5cGVvZiBkYXRlSW5wdXQgPT09ICdzdHJpbmcnICYmIC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0vLnRlc3QoZGF0ZUlucHV0KSkge1xyXG4gICAgICAvLyBVc2Ugb25seSBkYXRlIHBhcnQgaWYgZnVsbCBJU08gc3RyaW5nXHJcbiAgICAgIHJldHVybiBkYXRlSW5wdXQuc3Vic3RyaW5nKDAsIDEwKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgb25PcGVuKCkge1xyXG4gICAgdGhpcy5pc09wZW4gPSB0cnVlO1xyXG4gIH1cclxuICBvbkNsb3NlKCkge1xyXG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcclxuICB9XHJcblxyXG5cclxuICBnZXQgZXJyb3JNZXNzYWdlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5fZXJyb3JNZXNzYWdlO1xyXG4gIH1cclxuXHJcbiAgc2V0IGVycm9yTWVzc2FnZSh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9lcnJvck1lc3NhZ2UgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIGdldCBpc0xvYWRpbmcoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nU3RhdGUgPT09IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzRXJyb3IoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5sb2FkaW5nU3RhdGUgPT09IENvbXBvbmVudExvYWRpbmdTdGF0ZS5FcnJvcjtcclxuICB9XHJcblxyXG4gIGN1cnJlbmN5U2VhcmNoID0gKHRlcm06IHN0cmluZywgaXRlbTogYW55KSA9PiB7XHJcbiAgICB0ZXJtID0gdGVybS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgaXRlbS5jdXJyZW5jeUNvZGUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKVxyXG4gICAgKTtcclxuICB9O1xyXG5cclxuICB0b05nYkRhdGVTdHJ1Y3QoZnJvbURhdGU6IERhdGUpOiBOZ2JEYXRlU3RydWN0IHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHllYXI6IGZyb21EYXRlLmdldEZ1bGxZZWFyKCksXHJcbiAgICAgIG1vbnRoOiBmcm9tRGF0ZS5nZXRNb250aCgpICsgMSxcclxuICAgICAgZGF5OiBmcm9tRGF0ZS5nZXREYXRlKClcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICB0cmFuc2FjdGlvblN0YXR1c1N1YnNjcmliZSgpIHtcclxuICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RyYW5zYWN0aW9uU3RhdHVzJykudmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgodmFsKSA9PiB7XHJcbiAgICAgIGNvbnN0IGFsbFN0YXR1cyA9IHRoaXMudHJhbnNhY3Rpb25TdGF0dXNlc1xyXG4gICAgICAgIC5tYXAoKHN0YXR1cykgPT4gc3RhdHVzLnRyYW5zYWN0aW9uU3RhdHVzKTtcclxuXHJcbiAgICAgIGlmICh2YWwuaW5jbHVkZXMoJ0FsbCcpKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RBbGxDaGVja2VkKSB7XHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXJlZFN0YXR1cyA9IHZhbC5maWx0ZXIocyA9PiBzICE9PSAnQWxsJyk7XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0cmFuc2FjdGlvblN0YXR1cycpXHJcbiAgICAgICAgICAgIC5zZXRWYWx1ZShmaWx0ZXJlZFN0YXR1cywgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgdGhpcy5pc1NlbGVjdEFsbENoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLmdldCgndHJhbnNhY3Rpb25TdGF0dXMnKVxyXG4gICAgICAgICAgICAuc2V0VmFsdWUoWydBbGwnXSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgdGhpcy5pc1NlbGVjdEFsbENoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBoYW5kbGVEYXRlQ2hhbmdlKCkge1xyXG4gICAgdGhpcy5zZWFyY2hGb3JtLmdldCgnZnJvbURhdGUnKT8udmFsdWVDaGFuZ2VzLnN1YnNjcmliZShmcm9tRGF0ZVN0ciA9PiB7XHJcbiAgICAgIGNvbnN0IHRvRGF0ZUNvbnRyb2wgPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0b0RhdGUnKTtcclxuICAgICAgY29uc3QgdG9EYXRlU3RyID0gdG9EYXRlQ29udHJvbD8udmFsdWU7XHJcbiAgICAgIGlmICghZnJvbURhdGVTdHIgfHwgIXRvRGF0ZVN0cikgcmV0dXJuO1xyXG4gICAgICBjb25zdCBmcm9tRGF0ZSA9IG5ldyBEYXRlKGZyb21EYXRlU3RyKTtcclxuICAgICAgdGhpcy5kaXNhYmxlZERhdGUgPSB0aGlzLnRvTmdiRGF0ZVN0cnVjdChmcm9tRGF0ZSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICAvLyAqKiAgZm9yIHRyaWFsIGJhbGFuY2UgYWNjb3VudGluZyByZXBvcnQgLSBcclxuXHJcbiAgb25TZWxlY3RGcm9tTW9udGgoKSB7XHJcbiAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Mb2FkaW5nO1xyXG4gICAgY29uc3QgeWVhciA9ICt0aGlzLnNlYXJjaEZvcm0uZ2V0KCdmaW5hbmNpYWxZZWFyJyk/LnZhbHVlO1xyXG4gICAgY29uc3QgZnJvbU1vbnRoID0gK3RoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21Nb250aCcpPy52YWx1ZTtcclxuXHJcbiAgICBpZiAoIXllYXIgfHwgIWZyb21Nb250aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5yZXBvcnRTZXJ2aWNlLkdldFRvTW9udGhzRm9yVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQoeWVhciwgZnJvbU1vbnRoKVxyXG4gICAgICAucGlwZShjYXRjaEVycm9yKGVyciA9PiBvZihbXSkpKVxyXG4gICAgICAuc3Vic2NyaWJlKCh0b01vbnRocykgPT4ge1xyXG4gICAgICAgIHRoaXMudG9Nb250aHMgPSB0b01vbnRocztcclxuXHJcbiAgICAgICAgLy8gdXBkYXRlIFwidG9Nb250aFwiIGZvcm0gY29udHJvbCB3aXRoIGRlZmF1bHQgKGZpcnN0IG9wdGlvbilcclxuICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICB0b01vbnRoOiB0aGlzLnRvTW9udGhzWzBdPy5wTW9udGggPz8gXCJcIlxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICAvLyBvbiBzZWxlY3QgZnJvbU1vbnRoIGdvZXMgY2FsbCB0byBmcm9tRGF5XHJcblxyXG4gICAgY29uc3QgZmluYW5jaWFsWWVhciA9ICt0aGlzLnNlYXJjaEZvcm0uZ2V0KCdmaW5hbmNpYWxZZWFyJyk/LnZhbHVlO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRQTW9udGggPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCdmcm9tTW9udGgnKT8udmFsdWU7XHJcbiAgICBjb25zdCBmcm9tTW9udGhPYmogPSB0aGlzLmZyb21Nb250aHMuZmluZChtID0+IG0ucE9yZGVyID09PSBzZWxlY3RlZFBNb250aCk7XHJcbiAgICBjb25zdCBmcm9tTW9udGhMYWJlbCA9IGZyb21Nb250aE9iaj8ucGVyaW9kO1xyXG4gICAgdGhpcy5yZXBvcnRTZXJ2aWNlLkdldEZyb21EYXRlc0ZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KGZpbmFuY2lhbFllYXIsIGZyb21Nb250aExhYmVsKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIChmcm9tRGF5cykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5mcm9tRGF5cyA9IGZyb21EYXlzO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBmcm9tRGF5OiB1bmRlZmluZWQgfSlcclxuICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgdG9EYXk6IFwiXCIgfSlcclxuICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RvRGF5Jyk/LmRpc2FibGUoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgZmV0Y2hpbmcgVG8gRGF5czonLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICB9XHJcblxyXG4gIG9uU2VsZWN0RnJvbURheSgpIHtcclxuICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcbiAgICBjb25zdCBjdXJyZW50VG9EYXlWYWx1ZSA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RvRGF5Jyk/LnZhbHVlO1xyXG4gICAgY29uc3QgY3VycmVudFRvRGF5T2JqZWN0ID0gdGhpcy50b0RheXMuZmluZChkID0+IGQuaW5kaXZpZHVhbERhdGUgPT09IGN1cnJlbnRUb0RheVZhbHVlKVxyXG5cclxuICAgIGNvbnN0IGZpbmFuY2lhbFllYXIgPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCdmaW5hbmNpYWxZZWFyJyk/LnZhbHVlO1xyXG4gICAgY29uc3QgZnJvbU1vbnRoID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnZnJvbU1vbnRoJyk/LnZhbHVlO1xyXG4gICAgY29uc3QgdG9Nb250aCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RvTW9udGgnKT8udmFsdWU7XHJcbiAgICBjb25zdCBmcm9tRGF5ID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnZnJvbURheScpPy52YWx1ZTtcclxuXHJcbiAgICBjb25zdCByZXF1ZXN0UGF5bG9hZCA9IHtcclxuICAgICAgWWVhcjogZmluYW5jaWFsWWVhcixcclxuICAgICAgRnJvbU1vbnRoOiBmcm9tTW9udGgsXHJcbiAgICAgIFRvTW9udGg6IHRvTW9udGgsXHJcbiAgICAgIEZyb21EYXRlOiBmcm9tRGF5XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMucmVwb3J0U2VydmljZS5HZXRUb0RhdGVzRm9yVHJpYWxCYWxhbmNlQWNjb3VudHNSZXBvcnQocmVxdWVzdFBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIGZpbmFsaXplKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkNvbXBsZXRlO1xyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAodG9EYXlzKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvRGF5cyA9IHRvRGF5cztcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hGb3JtLmdldCgnZnJvbU1vbnRoJyk/LnZhbHVlICE9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RvTW9udGgnKT8udmFsdWUgJiYgdGhpcy5zZWFyY2hGb3JtLmdldCgndG9EYXknKT8udmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZFRvRGF5T2JqZWN0ID0gdGhpcy50b0RheXMuZmluZChkID0+IGQucERhdGUgPT09IGN1cnJlbnRUb0RheU9iamVjdC5wRGF0ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgICB0b0RheTogbWF0Y2hlZFRvRGF5T2JqZWN0LmluZGl2aWR1YWxEYXRlID8/IFwiXCJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgICAgdG9EYXk6IHRoaXMudG9EYXlzWzBdPy5pbmRpdmlkdWFsRGF0ZSA/PyBcIlwiXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLmdldCgndG9EYXknKT8uZW5hYmxlKCk7XHJcblxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBUbyBEYXlzOicsIGVycm9yKTtcclxuICAgICAgICAgIHdpbmRvdy5hbGVydCgnRXJyb3IgZmV0Y2hpbmcgVG8gRGF5cycpO1xyXG4gICAgICAgICAgdGhpcy50b0RheXMgPSBbXTtcclxuICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RvRGF5Jyk/LnBhdGNoVmFsdWUoXCJcIik7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25TZWxlY3RUb01vbnRoKCkge1xyXG4gICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZztcclxuXHJcbiAgICBjb25zdCBjdXJyZW50VG9EYXlWYWx1ZSA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RvRGF5Jyk/LnZhbHVlO1xyXG5cclxuICAgIGNvbnN0IGZpbmFuY2lhbFllYXIgPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCdmaW5hbmNpYWxZZWFyJyk/LnZhbHVlO1xyXG4gICAgY29uc3QgZnJvbU1vbnRoID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnZnJvbU1vbnRoJyk/LnZhbHVlO1xyXG4gICAgY29uc3QgdG9Nb250aCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RvTW9udGgnKT8udmFsdWU7XHJcbiAgICBjb25zdCBmcm9tRGF5ID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnZnJvbURheScpPy52YWx1ZTtcclxuXHJcbiAgICBpZiAoIWZpbmFuY2lhbFllYXIgfHwgIWZyb21Nb250aCB8fCAhdG9Nb250aCB8fCAhZnJvbURheSkge1xyXG4gICAgICB0aGlzLmxvYWRpbmdTdGF0ZSA9IENvbXBvbmVudExvYWRpbmdTdGF0ZS5Db21wbGV0ZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJlcXVlc3RQYXlsb2FkID0ge1xyXG4gICAgICBZZWFyOiBmaW5hbmNpYWxZZWFyLFxyXG4gICAgICBGcm9tTW9udGg6IGZyb21Nb250aCxcclxuICAgICAgVG9Nb250aDogdG9Nb250aCxcclxuICAgICAgRnJvbURhdGU6IGZyb21EYXlcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5yZXBvcnRTZXJ2aWNlLkdldFRvRGF0ZXNGb3JUcmlhbEJhbGFuY2VBY2NvdW50c1JlcG9ydChyZXF1ZXN0UGF5bG9hZClcclxuICAgICAgLnN1YnNjcmliZShcclxuICAgICAgICAodG9EYXlzKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnRvRGF5cyA9IHRvRGF5cztcclxuXHJcbiAgICAgICAgICBpZiAodGhpcy5zZWFyY2hGb3JtLmdldCgnZnJvbU1vbnRoJyk/LnZhbHVlID09PSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0b01vbnRoJyk/LnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGZyb21EYXkgPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCdmcm9tRGF5Jyk/LnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBmcm9tRGF5T2JqZWN0ID0gdGhpcy5mcm9tRGF5cy5maW5kKGQgPT4gZC5pbmRpdmlkdWFsRGF0ZSA9PT0gZnJvbURheSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvRGF5T2JqZWN0ID0gdGhpcy50b0RheXMuZmluZChkID0+IGQucERhdGUgPT09IGZyb21EYXlPYmplY3Q/LmluZGl2aWR1YWxEYXkpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICAgIHRvRGF5OiB0b0RheU9iamVjdD8uaW5kaXZpZHVhbERhdGUgPz8gXCJcIlxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHtcclxuICAgICAgICAgICAgICB0b0RheTogdGhpcy50b0RheXNbMF0uaW5kaXZpZHVhbERhdGVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBUbyBEYXlzOicsIGVycm9yKTtcclxuICAgICAgICAgIHdpbmRvdy5hbGVydCgnRXJyb3IgZmV0Y2hpbmcgVG8gRGF5czonKTtcclxuICAgICAgICAgIHRoaXMudG9EYXlzID0gW107XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0b0RheScpPy5wYXRjaFZhbHVlKFwiXCIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RGaW5hbmNpYWxZZWFyKCkge1xyXG4gICAgLy8gb24gZmluYW5jaWFsWWVhciBjaGFuZ2UgZnJvbWRheSBhbmQgdG9kYXkgc2hvdWxkIGNoYW5nZSB0byBkZWZhdWx0IHZhbHVlcyBhY29jcmRpbmcgdG8geWVhciBhbmQgZnJvbW1vbnRoLHRvbW9udGggLVxyXG5cclxuICAgIHRoaXMubG9hZGluZ1N0YXRlID0gQ29tcG9uZW50TG9hZGluZ1N0YXRlLkxvYWRpbmc7XHJcblxyXG4gICAgLy8gY2FsbCBmcm9tRGF5c1xyXG5cclxuICAgIGNvbnN0IGZpbmFuY2lhbFllYXIgPSArdGhpcy5zZWFyY2hGb3JtLmdldCgnZmluYW5jaWFsWWVhcicpPy52YWx1ZTtcclxuXHJcbiAgICBjb25zdCBzZWxlY3RlZFBNb250aCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21Nb250aCcpPy52YWx1ZTtcclxuICAgIGNvbnN0IGZyb21Nb250aE9iaiA9IHRoaXMuZnJvbU1vbnRocy5maW5kKG0gPT4gbS5wT3JkZXIgPT09IHNlbGVjdGVkUE1vbnRoKTtcclxuICAgIGNvbnN0IGZyb21Nb250aExhYmVsID0gZnJvbU1vbnRoT2JqPy5wZXJpb2Q7XHJcblxyXG4gICAgdGhpcy5yZXBvcnRTZXJ2aWNlLkdldEZyb21EYXRlc0ZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KGZpbmFuY2lhbFllYXIsIGZyb21Nb250aExhYmVsKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgIChmcm9tRGF5cykgPT4ge1xyXG4gICAgICAgICAgdGhpcy5mcm9tRGF5cyA9IGZyb21EYXlzO1xyXG4gICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoeyBmcm9tRGF5OiB1bmRlZmluZWQgfSlcclxuICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5wYXRjaFZhbHVlKHsgdG9EYXk6IFwiXCIgfSlcclxuICAgICAgICAgIHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RvRGF5Jyk/LmRpc2FibGUoKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igd2hpbGUgZmV0Y2hpbmcgVG8gRGF5czonLCBlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG5cclxuICAgIGNvbnN0IGZyb21Nb250aCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21Nb250aCcpPy52YWx1ZTtcclxuICAgIGNvbnN0IHRvTW9udGggPSB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0b01vbnRoJyk/LnZhbHVlO1xyXG4gICAgY29uc3QgZnJvbURheSA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21EYXknKT8udmFsdWU7XHJcblxyXG4gICAgY29uc3QgcmVxdWVzdFBheWxvYWQgPSB7XHJcbiAgICAgIFllYXI6IGZpbmFuY2lhbFllYXIsXHJcbiAgICAgIEZyb21Nb250aDogZnJvbU1vbnRoLFxyXG4gICAgICBUb01vbnRoOiB0b01vbnRoLFxyXG4gICAgICBGcm9tRGF0ZTogZnJvbURheVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnJlcG9ydFNlcnZpY2UuR2V0VG9EYXRlc0ZvclRyaWFsQmFsYW5jZUFjY291bnRzUmVwb3J0KHJlcXVlc3RQYXlsb2FkKVxyXG4gICAgICAuc3Vic2NyaWJlKFxyXG4gICAgICAgICh0b0RheXMpID0+IHtcclxuICAgICAgICAgIHRoaXMudG9EYXlzID0gdG9EYXlzO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLnNlYXJjaEZvcm0uZ2V0KCdmcm9tTW9udGgnKT8udmFsdWUgPT09IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RvTW9udGgnKT8udmFsdWUpIHtcclxuICAgICAgICAgICAgY29uc3QgZnJvbURheSA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ2Zyb21EYXknKT8udmFsdWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGZyb21EYXlPYmplY3QgPSB0aGlzLmZyb21EYXlzLmZpbmQoZCA9PiBkLmluZGl2aWR1YWxEYXRlID09PSBmcm9tRGF5KTtcclxuICAgICAgICAgICAgY29uc3QgdG9EYXlPYmplY3QgPSB0aGlzLnRvRGF5cy5maW5kKGQgPT4gZC5wRGF0ZSA9PT0gZnJvbURheU9iamVjdD8uaW5kaXZpZHVhbERheSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0ucGF0Y2hWYWx1ZSh7XHJcbiAgICAgICAgICAgICAgdG9EYXk6IHRvRGF5T2JqZWN0Py5pbmRpdmlkdWFsRGF0ZSA/PyBcIlwiXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZWFyY2hGb3JtLnBhdGNoVmFsdWUoe1xyXG4gICAgICAgICAgICAgIHRvRGF5OiBcIlwiXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0b0RheScpPy5kaXNhYmxlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuXHJcbiAgICAgICAgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvciBmZXRjaGluZyBUbyBEYXlzOicsIGVycm9yKTtcclxuICAgICAgICAgIHdpbmRvdy5hbGVydCgnRXJyb3IgZmV0Y2hpbmcgVG8gRGF5czonKTtcclxuICAgICAgICAgIHRoaXMudG9EYXlzID0gW107XHJcbiAgICAgICAgICB0aGlzLnNlYXJjaEZvcm0uZ2V0KCd0b0RheScpPy5wYXRjaFZhbHVlKFwiXCIpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgKCkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb2FkaW5nU3RhdGUgPSBDb21wb25lbnRMb2FkaW5nU3RhdGUuQ29tcGxldGU7XHJcbiAgICAgICAgfVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcblxyXG5cclxuICBwcmVwYXJlRnJvbURhdGVBbmRUb0RhdGVGb3JUcmlhbEJhbGFuY2VBY2NvdW50UmVwb3J0KCkge1xyXG4gICAgY29uc3QgZmluYW5jaWFsWWVhciA9ICt0aGlzLnNlYXJjaEZvcm0uZ2V0KCdmaW5hbmNpYWxZZWFyJyk/LnZhbHVlO1xyXG4gICAgY29uc3QgZnJvbU1vbnRoID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnZnJvbU1vbnRoJyk/LnZhbHVlO1xyXG4gICAgY29uc3QgdG9Nb250aCA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RvTW9udGgnKT8udmFsdWU7XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRGcm9tRGF5ID0gdGhpcy5zZWFyY2hGb3JtLmdldCgnZnJvbURheScpPy52YWx1ZTtcclxuICAgIGNvbnN0IGZyb21EYXlPYmogPSB0aGlzLmZyb21EYXlzLmZpbmQobSA9PiBtLmluZGl2aWR1YWxEYXRlID09PSBzZWxlY3RlZEZyb21EYXkpO1xyXG4gICAgY29uc3QgZnJvbURheSA9IGZyb21EYXlPYmo/LmluZGl2aWR1YWxEYXk7XHJcblxyXG4gICAgY29uc3Qgc2VsZWN0ZWRUb0RheSA9IHRoaXMuc2VhcmNoRm9ybS5nZXQoJ3RvRGF5Jyk/LnZhbHVlO1xyXG4gICAgY29uc3QgdG9EYXlPYmogPSB0aGlzLnRvRGF5cy5maW5kKG0gPT4gbS5pbmRpdmlkdWFsRGF0ZSA9PT0gc2VsZWN0ZWRUb0RheSk7XHJcbiAgICBjb25zdCB0b0RheSA9IHRvRGF5T2JqPy5wRGF0ZTtcclxuXHJcbiAgICBjb25zdCBmcm9tRGF0ZSA9IG5ldyBEYXRlKGZpbmFuY2lhbFllYXIsICtmcm9tTW9udGggLSAxLCArZnJvbURheSk7IC8vIEpTIG1vbnRoIGlzIDAtYmFzZWRcclxuICAgIGNvbnN0IHRvRGF0ZSA9IG5ldyBEYXRlKGZpbmFuY2lhbFllYXIsICt0b01vbnRoIC0gMSwgK3RvRGF5KTtcclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBmcm9tRGF0ZTogZnJvbURhdGUsXHJcbiAgICAgIHRvRGF0ZTogdG9EYXRlXHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0gSW1wcm92ZWQgc2VhcmNoIGNyaXRlcmlhIGhlbHBlcnMgKGhhbmRsZXMgcHJvZHVjdCkgLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbiAgcHJpdmF0ZSBmaWVsZExhYmVsTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgY2xpZW50OiAnQ2xpZW50OicsXHJcbiAgICBicmFuY2g6ICdCcmFuY2g6JyxcclxuICAgIGZyb21EYXRlOiAnRnJvbSBEYXRlOicsXHJcbiAgICB0b0RhdGU6ICdUbyBEYXRlOicsXHJcbiAgICBwcm9kdWN0OiAnUHJvZHVjdDonLFxyXG4gICAgdHJhbnNhY3Rpb25Qcm9kdWN0OiAnUHJvZHVjdDonLFxyXG4gICAgdXNlcklkOiAnVXNlcjonLFxyXG4gICAgY3VycmVuY3k6ICdDdXJyZW5jeTonLFxyXG4gICAgc2VuZEN1cnJlbmN5OiAnU2VuZCBDdXJyZW5jeTonLFxyXG4gICAgcmVjZWl2ZUN1cnJlbmN5OiAnUmVjZWl2ZSBDdXJyZW5jeTonLFxyXG4gICAgdHJhbnNhY3Rpb25TdGF0dXM6ICdUeG4uIFN0YXR1czonLFxyXG4gICAgdHJhbnNhY3Rpb25TdGF0dXNTaW5nbGVTZWxlY3Q6ICdUeG4uIFN0YXR1czonLFxyXG4gICAgdHJhbnNhY3Rpb25ObzogJ1R4bi4gTnVtYmVyOicsXHJcbiAgICBkYXRlOiAnRGF0ZTonLFxyXG4gICAgZGF0ZVR5cGU6ICdEYXRlIFR5cGU6JyxcclxuICAgIHZhbHVlRGF0ZTogJ1ZhbHVlIERhdGU6JyxcclxuICAgIHNlbmRDb3VudHJ5OiAnU2VuZCBDb3VudHJ5OicsXHJcbiAgICByZWNlaXZlQ291bnRyeTogJ1JlY2VpdmUgQ291bnRyeTonLFxyXG4gICAgc2VuZEJ1c2luZXNzUGFydG5lcjogJ1NlbmRlciBQYXJ0bmVyOicsXHJcbiAgICByZWN2QnVzaW5lc3NQYXJ0bmVyOiAnUmVjZWl2ZXIgUGFydG5lcjonLFxyXG4gICAgYnVzaW5lc3NMaW5lOiAnQnVzaW5lc3MgTGluZTonLFxyXG4gICAgZmluYW5jaWFsWWVhcjogJ0ZpbmFuY2lhbCBZZWFyOicsXHJcbiAgICBmcm9tTW9udGg6ICdGcm9tIE1vbnRoOicsXHJcbiAgICB0b01vbnRoOiAnVG8gTW9udGg6JyxcclxuICAgIGZyb21EYXk6ICdGcm9tIERheTonLFxyXG4gICAgdG9EYXk6ICdUbyBEYXk6JyxcclxuICAgIGFjY291bnRTdGF0dXM6ICdBY2NvdW50IFN0YXR1czonLFxyXG4gICAgLy8gYWRkIG1vcmUgbWFwcGluZ3MgYXMgbmVlZGVkXHJcbiAgfTtcclxuXHJcbiAgLy8gbWFwIHZpc2libGUgZmllbGQgbmFtZSAtPiBhY3R1YWwgZm9ybSBjb250cm9sIG5hbWUgKHdoZW4gdGhleSBkaWZmZXIpXHJcbiAgcHJpdmF0ZSBmaWVsZFRvQ29udHJvbE1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcclxuICAgIHRyYW5zYWN0aW9uU3RhdHVzU2luZ2xlU2VsZWN0OiAndHJhbnNhY3Rpb25TdGF0dXMnLFxyXG4gICAgdHJhbnNhY3Rpb25Qcm9kdWN0OiAncHJvZHVjdCcsIC8vIGltcG9ydGFudDogdHJhbnNhY3Rpb25Qcm9kdWN0IFVJIHVzZXMgZm9ybSBjb250cm9sIG5hbWVkICdwcm9kdWN0J1xyXG4gICAgLy8gYWRkIG90aGVyIG1hcHBpbmdzIGlmIHZpc2libGVGaWVsZCBuYW1lIGRpZmZlcnMgZnJvbSB0aGUgZm9ybSBjb250cm9sIG5hbWVcclxuICB9O1xyXG5cclxuICAvLyBtYXBzIHRvIHVzZSBiaW5kTGFiZWwgLyBiaW5kVmFsdWUgZm9yIGxvb2t1cHNcclxuICBwcml2YXRlIGZpZWxkQmluZExhYmVsTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgY2xpZW50OiAnYnVzaW5lc3NQYXJ0bmVyTmFtZScsXHJcbiAgICBicmFuY2g6ICdidXNpbmVzc1BhcnRuZXJCcmFuY2gnLFxyXG4gICAgcHJvZHVjdDogJ3Byb2R1Y3RDb2RlJyxcclxuICAgIHRyYW5zYWN0aW9uUHJvZHVjdDogJ3Byb2R1Y3RDb2RlJyxcclxuICAgIHRyYW5zYWN0aW9uU3RhdHVzOiAndHJhbnNhY3Rpb25TdGF0dXMnLFxyXG4gICAgdHJhbnNhY3Rpb25TdGF0dXNTaW5nbGVTZWxlY3Q6ICd0cmFuc2FjdGlvblN0YXR1cycsXHJcbiAgICB1c2VySWQ6ICd1c2VyTmFtZScsXHJcbiAgICBjdXJyZW5jeTogJ2N1cnJlbmN5JyxcclxuICAgIHNlbmRDdXJyZW5jeTogJ2N1cnJlbmN5JyxcclxuICAgIHJlY2VpdmVDdXJyZW5jeTogJ2N1cnJlbmN5JyxcclxuICAgIHNlbmRCdXNpbmVzc1BhcnRuZXI6ICduYW1lJyxcclxuICAgIHJlY3ZCdXNpbmVzc1BhcnRuZXI6ICduYW1lJyxcclxuICAgIGJ1c2luZXNzTGluZTogJ2J1c2luZXNzTGluZScsXHJcbiAgICBmaW5hbmNpYWxZZWFyOiAnZmluYW5jaWFsWWVhcicsXHJcbiAgICBmcm9tTW9udGg6ICdwZXJpb2QnLFxyXG4gICAgdG9Nb250aDogJ3BNb250aE5hbWUnLFxyXG4gICAgZnJvbURheTogJ2luZGl2aWR1YWxEYXknLFxyXG4gICAgdG9EYXk6ICdwRGF0ZScsXHJcbiAgICBhY2NvdW50U3RhdHVzOiAnc3RhdHVzTmFtZSdcclxuICB9O1xyXG5cclxuICBwcml2YXRlIGZpZWxkQmluZFZhbHVlTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xyXG4gICAgY2xpZW50OiAnYnVzaW5lc3NQYXJ0bmVyQ29kZScsXHJcbiAgICBicmFuY2g6ICdicmFuY2hDb2RlJyxcclxuICAgIHByb2R1Y3Q6ICdwcm9kdWN0Q29kZScsXHJcbiAgICB0cmFuc2FjdGlvblByb2R1Y3Q6ICdwcm9kdWN0Q29kZScsXHJcbiAgICB0cmFuc2FjdGlvblN0YXR1czogJ3RyYW5zYWN0aW9uU3RhdHVzJyxcclxuICAgIHRyYW5zYWN0aW9uU3RhdHVzU2luZ2xlU2VsZWN0OiAndHJhbnNhY3Rpb25TdGF0dXMnLFxyXG4gICAgdXNlcklkOiAndXNlcklkJyxcclxuICAgIGN1cnJlbmN5OiAnY3VycmVuY3lDb2RlJyxcclxuICAgIHNlbmRDdXJyZW5jeTogJ2N1cnJlbmN5Q29kZScsXHJcbiAgICByZWNlaXZlQ3VycmVuY3k6ICdjdXJyZW5jeUNvZGUnLFxyXG4gICAgc2VuZEJ1c2luZXNzUGFydG5lcjogJ2lkJyxcclxuICAgIHJlY3ZCdXNpbmVzc1BhcnRuZXI6ICdpZCcsXHJcbiAgICBidXNpbmVzc0xpbmU6ICdidXNpbmVzc0xpbmUnLFxyXG4gICAgZmluYW5jaWFsWWVhcjogJ2ZpbmFuY2lhbFllYXInLFxyXG4gICAgZnJvbU1vbnRoOiAncE9yZGVyJyxcclxuICAgIHRvTW9udGg6ICdwTW9udGgnLFxyXG4gICAgZnJvbURheTogJ2luZGl2aWR1YWxEYXRlJyxcclxuICAgIHRvRGF5OiAnaW5kaXZpZHVhbERhdGUnLFxyXG4gICAgYWNjb3VudFN0YXR1czogJ3N0YXR1c0NvZGUnXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBmb3JtYXREYXRlVG9ERE1NWVlZWShkOiBzdHJpbmcgfCBEYXRlIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XHJcbiAgICBpZiAoIWQpIHJldHVybiAnJztcclxuICAgIGNvbnN0IGRhdGUgPSAodHlwZW9mIGQgPT09ICdzdHJpbmcnICYmIGQubGVuZ3RoKSA/IG5ldyBEYXRlKGQpIDogKGQgaW5zdGFuY2VvZiBEYXRlID8gZCA6IG5ldyBEYXRlKGQpKTtcclxuICAgIGlmIChpc05hTihkYXRlLmdldFRpbWUoKSkpIHJldHVybiAnJztcclxuICAgIGNvbnN0IGRheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcclxuICAgIGNvbnN0IG1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyk7XHJcbiAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpO1xyXG4gICAgcmV0dXJuIGAke2RheX0vJHttb250aH0vJHt5ZWFyfWA7XHJcbiAgfVxyXG5cclxuICAvKiogaGVscGVyIHRvIGZpbmQgaXRlbSBpbiB0aGUga25vd24gbGlzdHMgYnkgYmluZFZhbHVlIGFuZCByZXR1cm4gaXRzIGJpbmRMYWJlbFxyXG4gICAqICBpbXByb3ZlZDogdHJpZXMgbXVsdGlwbGUgZmFsbGJhY2sgdmFsdWUga2V5cyBzbyBwcm9kdWN0IGxvb2t1cCBpcyByb2J1c3QgKi9cclxuICBwcml2YXRlIGxvb2t1cEZyb21MaXN0QnlGaWVsZChmaWVsZDogc3RyaW5nLCBzY2FsYXJWYWx1ZTogYW55KTogc3RyaW5nIHtcclxuICAgIGNvbnN0IGJpbmRMYWJlbCA9IHRoaXMuZmllbGRCaW5kTGFiZWxNYXBbZmllbGRdO1xyXG4gICAgY29uc3QgYmluZFZhbHVlID0gdGhpcy5maWVsZEJpbmRWYWx1ZU1hcFtmaWVsZF07XHJcblxyXG4gICAgLy8gY2hvb3NlIGNhbmRpZGF0ZSBsaXN0IGJhc2VkIG9uIGZpZWxkXHJcbiAgICBsZXQgbGlzdDogYW55W10gfCB1bmRlZmluZWQ7XHJcbiAgICBzd2l0Y2ggKGZpZWxkKSB7XHJcbiAgICAgIGNhc2UgJ2NsaWVudCc6IGxpc3QgPSB0aGlzLmNsaWVudHMxOyBicmVhaztcclxuICAgICAgY2FzZSAnYnJhbmNoJzogbGlzdCA9IHRoaXMuYnJhbmNoZXM7IGJyZWFrO1xyXG4gICAgICBjYXNlICdwcm9kdWN0JzogbGlzdCA9IHRoaXMucHJvZHVjdHM7IGJyZWFrO1xyXG4gICAgICBjYXNlICd0cmFuc2FjdGlvblByb2R1Y3QnOiBsaXN0ID0gdGhpcy50cmFuc2FjdGlvblByb2R1Y3RzOyBicmVhaztcclxuICAgICAgY2FzZSAndHJhbnNhY3Rpb25TdGF0dXMnOlxyXG4gICAgICBjYXNlICd0cmFuc2FjdGlvblN0YXR1c1NpbmdsZVNlbGVjdCc6IGxpc3QgPSB0aGlzLnRyYW5zYWN0aW9uU3RhdHVzZXM7IGJyZWFrO1xyXG4gICAgICBjYXNlICd1c2VySWQnOiBsaXN0ID0gdGhpcy51c2VyczsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3NlbmRCdXNpbmVzc1BhcnRuZXInOiBsaXN0ID0gdGhpcy5zZW5kQnVzaW5lc3NQYXJ0bmVyQWdlbnRzOyBicmVhaztcclxuICAgICAgY2FzZSAncmVjdkJ1c2luZXNzUGFydG5lcic6IGxpc3QgPSB0aGlzLnJlY3ZCdXNpbmVzc1BhcnRuZXJBZ2VudHM7IGJyZWFrO1xyXG4gICAgICBjYXNlICdidXNpbmVzc0xpbmUnOiBsaXN0ID0gdGhpcy5idXNpbmVzc0xpbmVzOyBicmVhaztcclxuICAgICAgY2FzZSAnZmluYW5jaWFsWWVhcic6IGxpc3QgPSB0aGlzLmZpbmFuY2lhbFllYXJzOyBicmVhaztcclxuICAgICAgY2FzZSAnZnJvbU1vbnRoJzogbGlzdCA9IHRoaXMuZnJvbU1vbnRoczsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3RvTW9udGgnOiBsaXN0ID0gdGhpcy50b01vbnRoczsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2Zyb21EYXknOiBsaXN0ID0gdGhpcy5mcm9tRGF5czsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3RvRGF5JzogbGlzdCA9IHRoaXMudG9EYXlzOyBicmVhaztcclxuICAgICAgY2FzZSAnYWNjb3VudFN0YXR1cyc6IGxpc3QgPSB0aGlzLmFjY291bnRTdGF0dXNlczsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ3NlbmRDb3VudHJ5JzpcclxuICAgICAgY2FzZSAncmVjZWl2ZUNvdW50cnknOiBsaXN0ID0gdGhpcy5jb3VudHJpZXM7IGJyZWFrO1xyXG4gICAgICBjYXNlICdjdXJyZW5jeSc6XHJcbiAgICAgIGNhc2UgJ3NlbmRDdXJyZW5jeSc6XHJcbiAgICAgIGNhc2UgJ3JlY2VpdmVDdXJyZW5jeSc6IGxpc3QgPSB0aGlzLmN1cnJlbmNpZXM7IGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OiBsaXN0ID0gdW5kZWZpbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGhhbmRsZSBjb21tb24gJ0FsbCcgc2VudGluZWxcclxuICAgIGlmIChzY2FsYXJWYWx1ZSA9PT0gJ0FsbCcgfHwgc2NhbGFyVmFsdWUgPT09ICcnIHx8IHNjYWxhclZhbHVlID09PSBudWxsIHx8IHNjYWxhclZhbHVlID09PSB1bmRlZmluZWQpIHJldHVybiBTdHJpbmcoc2NhbGFyVmFsdWUgfHwgJycpO1xyXG5cclxuICAgIGlmIChsaXN0ICYmIGxpc3QubGVuZ3RoKSB7XHJcbiAgICAgIC8vIHRyeSB0aGUgY29uZmlndXJlZCBiaW5kVmFsdWUga2V5IGZpcnN0XHJcbiAgICAgIGlmIChiaW5kVmFsdWUpIHtcclxuICAgICAgICBjb25zdCBmb3VuZCA9IGxpc3QuZmluZCgoeDogYW55KSA9PiBTdHJpbmcoeFtiaW5kVmFsdWVdKSA9PT0gU3RyaW5nKHNjYWxhclZhbHVlKSk7XHJcbiAgICAgICAgaWYgKGZvdW5kKSB7XHJcbiAgICAgICAgICBpZiAoYmluZExhYmVsICYmIGZvdW5kW2JpbmRMYWJlbF0pIHJldHVybiBmb3VuZFtiaW5kTGFiZWxdO1xyXG4gICAgICAgICAgcmV0dXJuIGZvdW5kLnRyYW5zYWN0aW9uU3RhdHVzTGFiZWwgfHwgZm91bmQudHJhbnNhY3Rpb25TdGF0dXMgfHwgZm91bmQubmFtZSB8fCBmb3VuZC5wcm9kdWN0TmFtZSB8fCBmb3VuZC5idXNpbmVzc1BhcnRuZXJOYW1lIHx8IFN0cmluZyhzY2FsYXJWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBmYWxsYmFjazogdHJ5IG1hdGNoaW5nIG9uIGNvbW1vbiBrZXlzIGluIGNhc2Ugc2hhcGVzIGRpZmZlclxyXG4gICAgICBjb25zdCBjb21tb25LZXlzID0gWydwcm9kdWN0Q29kZScsICdjb2RlJywgJ2lkJywgJ3ZhbHVlJywgJ2N1cnJlbmN5Q29kZScsICdzdGF0dXNDb2RlJ107XHJcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGNvbW1vbktleXMpIHtcclxuICAgICAgICBjb25zdCBmb3VuZDIgPSBsaXN0LmZpbmQoKHg6IGFueSkgPT4geCAmJiB4W2tleV0gIT09IHVuZGVmaW5lZCAmJiBTdHJpbmcoeFtrZXldKSA9PT0gU3RyaW5nKHNjYWxhclZhbHVlKSk7XHJcbiAgICAgICAgaWYgKGZvdW5kMikge1xyXG4gICAgICAgICAgY29uc3QgbGFiZWxDYW5kaWRhdGUgPSBiaW5kTGFiZWwgJiYgZm91bmQyW2JpbmRMYWJlbF0gPyBmb3VuZDJbYmluZExhYmVsXSA6IChmb3VuZDIucHJvZHVjdE5hbWUgfHwgZm91bmQyLm5hbWUgfHwgZm91bmQyLnRyYW5zYWN0aW9uU3RhdHVzTGFiZWwgfHwgZm91bmQyLmJ1c2luZXNzUGFydG5lck5hbWUpO1xyXG4gICAgICAgICAgcmV0dXJuIGxhYmVsQ2FuZGlkYXRlIHx8IFN0cmluZyhzY2FsYXJWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBsYXN0IGF0dGVtcHQ6IGlmIHNjYWxhclZhbHVlIGVxdWFscyBhIGxhYmVsIGluIHRoZSBsaXN0LCByZXR1cm4gaXRcclxuICAgICAgaWYgKGJpbmRMYWJlbCkge1xyXG4gICAgICAgIGNvbnN0IGZvdW5kMyA9IGxpc3QuZmluZCgoeDogYW55KSA9PiBTdHJpbmcoeFtiaW5kTGFiZWxdKSA9PT0gU3RyaW5nKHNjYWxhclZhbHVlKSk7XHJcbiAgICAgICAgaWYgKGZvdW5kMykgcmV0dXJuIFN0cmluZyhmb3VuZDNbYmluZExhYmVsXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyBub3QgZm91bmQg4oCUIHJldHVybiBzY2FsYXIgYXMgc3RyaW5nXHJcbiAgICByZXR1cm4gU3RyaW5nKHNjYWxhclZhbHVlKTtcclxuICB9XHJcblxyXG4gIC8vIC0tLSBsb29rdXAgdGhhdCBwcmVmZXJzIGJpbmRMYWJlbCB3aGVuIHBvc3NpYmxlIC0tLVxyXG4gIHByaXZhdGUgZ2V0TG9va3VwRGlzcGxheVZhbHVlKGZpZWxkOiBzdHJpbmcsIHZhbHVlOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSByZXR1cm4gJyc7XHJcblxyXG4gICAgLy8gRGF0ZSBoYW5kbGluZ1xyXG4gICAgaWYgKGZpZWxkID09PSAnZnJvbURhdGUnIHx8IGZpZWxkID09PSAndG9EYXRlJyB8fCBmaWVsZCA9PT0gJ2RhdGUnIHx8IGZpZWxkID09PSAndmFsdWVEYXRlJykge1xyXG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXREYXRlVG9ERE1NWVlZWSh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ3VycmVuY2llczogc2hvdyBcIkNPREUgLSBOYW1lXCJcclxuICAgIGlmIChbJ2N1cnJlbmN5JywgJ3NlbmRDdXJyZW5jeScsICdyZWNlaXZlQ3VycmVuY3knXS5pbmNsdWRlcyhmaWVsZCkpIHtcclxuICAgICAgaWYgKHZhbHVlID09PSAnQWxsJykgcmV0dXJuICdBbGwnO1xyXG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgIGNvbnN0IGNvZGUgPSB2YWx1ZS5jdXJyZW5jeUNvZGUgfHwgdmFsdWUuY3VycmVuY3kgfHwgJyc7XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IHZhbHVlLmN1cnJlbmN5IHx8ICcnO1xyXG4gICAgICAgIHJldHVybiBjb2RlID8gYCR7Y29kZX0gLSAke25hbWV9YCA6IFN0cmluZyh2YWx1ZSk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgY3VyID0gdGhpcy5jdXJyZW5jaWVzPy5maW5kKCh4OiBhbnkpID0+IHguY3VycmVuY3lDb2RlID09PSB2YWx1ZSk7XHJcbiAgICAgIHJldHVybiBjdXIgPyBgJHtjdXIuY3VycmVuY3lDb2RlfSAtICR7Y3VyLmN1cnJlbmN5fWAgOiBTdHJpbmcodmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIGl0J3MgYW4gYXJyYXkgKG11bHRpLXNlbGVjdCksIG1hcCBlYWNoIGl0ZW1cclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICBjb25zdCBtYXBwZWQgPSB2YWx1ZS5tYXAodiA9PiB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2ID09PSAnb2JqZWN0Jykge1xyXG4gICAgICAgICAgY29uc3QgYmluZExhYmVsID0gdGhpcy5maWVsZEJpbmRMYWJlbE1hcFtmaWVsZF07XHJcbiAgICAgICAgICByZXR1cm4gYmluZExhYmVsICYmIHZbYmluZExhYmVsXSA/IHZbYmluZExhYmVsXSA6ICh2LnRyYW5zYWN0aW9uU3RhdHVzTGFiZWwgfHwgdi5zdGF0dXNOYW1lIHx8IHYucHJvZHVjdE5hbWUgfHwgdi5uYW1lIHx8IEpTT04uc3RyaW5naWZ5KHYpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9va3VwRnJvbUxpc3RCeUZpZWxkKGZpZWxkLCB2KTtcclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChtYXBwZWQubGVuZ3RoID09PSAxICYmIChtYXBwZWRbMF0gPT09ICdBbGwnIHx8IG1hcHBlZFswXSA9PT0gJycpKSByZXR1cm4gJ0FsbCc7XHJcbiAgICAgIHJldHVybiBtYXBwZWQuam9pbignLCAnKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBJZiB2YWx1ZSBpcyBhbiBvYmplY3QgKHNpbmdsZSBzZWxlY3QgcmV0dXJuZWQgb2JqZWN0KVxyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcclxuICAgICAgLy8gcHJvZHVjdCBzcGVjaWFsLWNhc2U6IHByb2R1Y3Qgb2JqZWN0IG1pZ2h0IGhhdmUgcHJvZHVjdE5hbWUvcHJvZHVjdENvZGVcclxuICAgICAgaWYgKGZpZWxkID09PSAncHJvZHVjdCcgfHwgZmllbGQgPT09ICd0cmFuc2FjdGlvblByb2R1Y3QnKSB7XHJcbiAgICAgICAgY29uc3QgcG4gPSB2YWx1ZS5wcm9kdWN0TmFtZSB8fCB2YWx1ZS5uYW1lIHx8IHZhbHVlLmxhYmVsIHx8IHZhbHVlLmRpc3BsYXkgfHwgdmFsdWUucHJvZHVjdCB8fCB2YWx1ZS50cmFuc2FjdGlvblByb2R1Y3Q7XHJcbiAgICAgICAgaWYgKHBuKSByZXR1cm4gcG47XHJcbiAgICAgICAgLy8gdHJ5IGNvbW1vbiBrZXlzXHJcbiAgICAgICAgcmV0dXJuIHZhbHVlLnByb2R1Y3RDb2RlIHx8IHZhbHVlLmNvZGUgfHwgdmFsdWUuaWQgPyBTdHJpbmcodmFsdWUucHJvZHVjdENvZGUgfHwgdmFsdWUuY29kZSB8fCB2YWx1ZS5pZCkgOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGJpbmRMYWJlbCA9IHRoaXMuZmllbGRCaW5kTGFiZWxNYXBbZmllbGRdO1xyXG4gICAgICBpZiAoYmluZExhYmVsICYmIHZhbHVlW2JpbmRMYWJlbF0pIHJldHVybiB2YWx1ZVtiaW5kTGFiZWxdO1xyXG4gICAgICByZXR1cm4gdmFsdWUudHJhbnNhY3Rpb25TdGF0dXMgfHwgdmFsdWUubmFtZSB8fCB2YWx1ZS5idXNpbmVzc1BhcnRuZXJOYW1lIHx8IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTY2FsYXIgLT4gbG9va3VwIGluIGxpc3RzIHVzaW5nIGJpbmRWYWx1ZSAtPiByZXR1cm4gYmluZExhYmVsXHJcbiAgICAvLyBwcm9kdWN0IHNwZWNpYWwtY2FzZTogaWYgdmFsdWUgPT09ICdBbGwnIHRoZW4gcmV0dXJuICdBbGwnXHJcbiAgICBpZiAoKGZpZWxkID09PSAncHJvZHVjdCcgfHwgZmllbGQgPT09ICd0cmFuc2FjdGlvblByb2R1Y3QnKSAmJiBTdHJpbmcodmFsdWUpID09PSAnQWxsJykgcmV0dXJuICdBbGwnO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmxvb2t1cEZyb21MaXN0QnlGaWVsZChmaWVsZCwgdmFsdWUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBzZWFyY2ggY3JpdGVyaWEgYXJyYXkgZm9yIHRoZSBjdXJyZW50bHkgdmlzaWJsZSBmaWVsZHMuXHJcbiAgICogT3V0cHV0OiBbIFsnTGFiZWw6JywgJ1ZhbHVlJ10sIC4uLiBdXHJcbiAgICovXHJcbiAgcHVibGljIGdldFNlYXJjaENyaXRlcmlhQXJyYXkoKTogW3N0cmluZywgc3RyaW5nXVtdIHtcclxuICAgIGlmICghdGhpcy5zZWFyY2hGb3JtKSByZXR1cm4gW107XHJcblxyXG4gICAgY29uc3QgY3JpdGVyaWE6IFtzdHJpbmcsIHN0cmluZ11bXSA9IFtdO1xyXG4gICAgY29uc3QgZm9ybVZhbHVlID0gdGhpcy5zZWFyY2hGb3JtLnZhbHVlO1xyXG4gICAgY29uc3QgZmllbGRzID0gdGhpcy52aXNpYmxlRmllbGRzOyAvLyB1c2VzIHlvdXIgZ2V0dGVyXHJcblxyXG4gICAgZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xyXG4gICAgICBjb25zdCBsYWJlbCA9IHRoaXMuZmllbGRMYWJlbE1hcFtmaWVsZF0gfHwgKGZpZWxkICsgJzonKTtcclxuICAgICAgY29uc3QgY29udHJvbE5hbWUgPSB0aGlzLmZpZWxkVG9Db250cm9sTWFwW2ZpZWxkXSB8fCBmaWVsZDtcclxuICAgICAgY29uc3QgdmFsdWUgPSBmb3JtVmFsdWVbY29udHJvbE5hbWVdO1xyXG5cclxuICAgICAgLy8gZGF0ZXNcclxuICAgICAgaWYgKGNvbnRyb2xOYW1lID09PSAnZnJvbURhdGUnIHx8IGNvbnRyb2xOYW1lID09PSAndG9EYXRlJyB8fCBjb250cm9sTmFtZSA9PT0gJ2RhdGUnIHx8IGNvbnRyb2xOYW1lID09PSAndmFsdWVEYXRlJykge1xyXG4gICAgICAgIGNyaXRlcmlhLnB1c2goW2xhYmVsLCB0aGlzLmZvcm1hdERhdGVUb0RETU1ZWVlZKHZhbHVlKSB8fCAnJ10pO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gVXNlIGdldExvb2t1cERpc3BsYXlWYWx1ZSB0byBwcm9kdWNlIHRoZSBodW1hbi1mcmllbmRseSBzdHJpbmcgKGhhbmRsZXMgYXJyYXlzL29iamVjdHMvc2NhbGFycylcclxuICAgICAgY29uc3QgZGlzcGxheSA9IHRoaXMuZ2V0TG9va3VwRGlzcGxheVZhbHVlKGZpZWxkLCB2YWx1ZSk7XHJcblxyXG4gICAgICBjcml0ZXJpYS5wdXNoKFtsYWJlbCwgZGlzcGxheSB8fCAnJ10pO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIGNyaXRlcmlhO1xyXG4gIH1cclxuXHJcblxyXG5cclxufVxyXG4iLCI8aDYgY2xhc3M9XCJCcmVhZGNydW1iXCI+XHJcbiAgPGEgY2xhc3M9XCJCcmVhZENydW1iTGlua1wiIFtyb3V0ZXJMaW5rXT1cIlsnL3JlcG9ydHMnXVwiPlxyXG4gICAgPGgxPlJlcG9ydHM8L2gxPlxyXG4gIDwvYT5cclxuICA8YSBocmVmPVwiQnJlYWRDcnVtYkxpbmtcIj48L2E+XHJcbiAgPHNwYW4gY2xhc3M9XCJCcmVhZENydW1iQXJyb3dcIj48L3NwYW4+XHJcbiAgPGEgY2xhc3M9XCJCcmVhZENydW1iTGlua1wiPlxyXG4gICAgPGgyPnt7IFJlcG9ydE5hbWUgfX08L2gyPlxyXG4gIDwvYT5cclxuPC9oNj5cclxuXHJcbjxhcHAtbG9hZGVyICpuZ0lmPVwibG9hZGluZ1N0YXRlID09PSBDb21wb25lbnRMb2FkaW5nU3RhdGUuTG9hZGluZ1wiPjwvYXBwLWxvYWRlcj5cclxuPHNlY3Rpb24+XHJcbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJzZWFyY2hGb3JtXCIgKG5nU3VibWl0KT1cIm9uU2VhcmNoKClcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImNvbC1jdXN0b20tMTAtNVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWx0ZXItZ3JpZFwiPlxyXG5cclxuICAgICAgICAgIDwhLS0gRHluYW1pY2FsbHkgcmVuZGVyIGZpbHRlcnMgaW4gb3JkZXIgLS0+XHJcbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBmaWVsZCBvZiB2aXNpYmxlRmllbGRzXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImZpZWxkXCI+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gQ2xpZW50IC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidjbGllbnQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5DbGllbnQ8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cImNsaWVudHMxXCIgYmluZExhYmVsPVwiYnVzaW5lc3NQYXJ0bmVyTmFtZVwiIGJpbmRWYWx1ZT1cImJ1c2luZXNzUGFydG5lckNvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQ2xpZW50XCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cImNsaWVudFwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQtc2VsZWN0Jzogc2VhcmNoRm9ybS5nZXQoJ2NsaWVudCcpPy5pbnZhbGlkICYmIChzZWFyY2hGb3JtLmdldCgnY2xpZW50Jyk/LnRvdWNoZWQgfHwgZm9ybVZhbGlkYXRpb25FcnJvcil9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25DbGllbnRDaGFuZ2UoKVwiIChvcGVuKT1cIm9uT3BlbigpXCIgKGNsb3NlKT1cIm9uQ2xvc2UoKVwiIFtzZWFyY2hhYmxlXT1cImlzT3BlblwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwiaXRlbS5idXNpbmVzc1BhcnRuZXJOYW1lXCI+e3sgaXRlbS5idXNpbmVzc1BhcnRuZXJOYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gQnJhbmNoIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidicmFuY2gnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5CcmFuY2g8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cImJyYW5jaGVzXCIgYmluZExhYmVsPVwiYnVzaW5lc3NQYXJ0bmVyQnJhbmNoXCIgYmluZFZhbHVlPVwiYnJhbmNoQ29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBCcmFuY2hcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwiYnJhbmNoXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaW52YWxpZC1zZWxlY3QnOiBzZWFyY2hGb3JtLmdldCgnYnJhbmNoJyk/LmludmFsaWQgJiYgKHNlYXJjaEZvcm0uZ2V0KCdicmFuY2gnKT8udG91Y2hlZCB8fCBmb3JtVmFsaWRhdGlvbkVycm9yKX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkJyYW5jaENoYW5nZSgpXCIgKG9wZW4pPVwib25PcGVuKClcIiAoY2xvc2UpPVwib25DbG9zZSgpXCIgW3NlYXJjaGFibGVdPVwiaXNPcGVuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW3RpdGxlXT1cIml0ZW0uYnVzaW5lc3NQYXJ0bmVyQnJhbmNoXCI+e3sgaXRlbS5idXNpbmVzc1BhcnRuZXJCcmFuY2ggfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBGcm9tIERhdGUgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2Zyb21EYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+RnJvbSBEYXRlPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgZGF0ZS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGRwaWNrZXJcIiBwbGFjZWhvbGRlcj1cImRkL21tL3l5eXlcIiBuZ2JEYXRlcGlja2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICNmcm9tRGF0ZUlucHV0PVwibmdiRGF0ZXBpY2tlclwiIGZvcm1Db250cm9sTmFtZT1cImZyb21EYXRlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpbnZhbGlkLWRhdGUnOnNlYXJjaEZvcm0uZ2V0KCdmcm9tRGF0ZScpPy5pbnZhbGlkICYmIChzZWFyY2hGb3JtLmdldCgnZnJvbURhdGUnKT8udG91Y2hlZCB8fCBmb3JtVmFsaWRhdGlvbkVycm9yKX1cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImlucHV0LWdyb3VwLWJ1dHRvbiBjYWxcIiAoY2xpY2spPVwiZnJvbURhdGVJbnB1dC50b2dnbGUoKVwiIHR5cGU9XCJidXR0b25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJmYSBmYS1jYWxlbmRhclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFRvIERhdGUgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ3RvRGF0ZSdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPlRvIERhdGU8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbnB1dC1ncm91cCBkYXRlLWdyb3VwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZHBpY2tlclwiIHBsYWNlaG9sZGVyPVwiZGQvbW0veXl5eVwiIG5nYkRhdGVwaWNrZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgI3RvRGF0ZUlucHV0PVwibmdiRGF0ZXBpY2tlclwiIGZvcm1Db250cm9sTmFtZT1cInRvRGF0ZVwiIFttaW5EYXRlXT1cImRpc2FibGVkRGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaW52YWxpZC1kYXRlJzpzZWFyY2hGb3JtLmdldCgndG9EYXRlJyk/LmludmFsaWQgJiYgKHNlYXJjaEZvcm0uZ2V0KCd0b0RhdGUnKT8udG91Y2hlZCB8fCBmb3JtVmFsaWRhdGlvbkVycm9yKX1cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImlucHV0LWdyb3VwLWJ1dHRvbiBjYWxcIiAoY2xpY2spPVwidG9EYXRlSW5wdXQudG9nZ2xlKClcIiB0eXBlPVwiYnV0dG9uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEgZmEtY2FsZW5kYXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBQcm9kdWN0IC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidwcm9kdWN0J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+UHJvZHVjdDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwicHJvZHVjdHNcIiBiaW5kTGFiZWw9XCJwcm9kdWN0TmFtZVwiIGJpbmRWYWx1ZT1cInByb2R1Y3RDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFByb2R1Y3RcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwicHJvZHVjdFwiIChvcGVuKT1cIm9uT3BlbigpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjbG9zZSk9XCJvbkNsb3NlKClcIiBbc2VhcmNoYWJsZV09XCJpc09wZW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBVc2VyIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIid1c2VySWQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5Vc2VyPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJ1c2Vyc1wiIGJpbmRMYWJlbD1cInVzZXJOYW1lXCIgYmluZFZhbHVlPVwidXNlcklkXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgVXNlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwidXNlcklkXCIgcmVxdWlyZWQgKG9wZW4pPVwib25PcGVuKClcIiAoY2xvc2UpPVwib25DbG9zZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hhYmxlXT1cImlzT3BlblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQtc2VsZWN0Jzogc2VhcmNoRm9ybS5nZXQoJ3VzZXJJZCcpPy5pbnZhbGlkICYmIChzZWFyY2hGb3JtLmdldCgndXNlcklkJyk/LnRvdWNoZWQgfHwgZm9ybVZhbGlkYXRpb25FcnJvcil9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gQ3VycmVuY3kgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2N1cnJlbmN5J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+Q3VycmVuY3k8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cImN1cnJlbmNpZXNcIiBiaW5kVmFsdWU9XCJjdXJyZW5jeUNvZGVcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBDdXJyZW5jeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwiY3VycmVuY3lcIiBbc2VhcmNoYWJsZV09XCJ0cnVlXCIgW3NlYXJjaEZuXT1cImN1cnJlbmN5U2VhcmNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChvcGVuKT1cIm9uT3BlbigpXCIgKGNsb3NlKT1cIm9uQ2xvc2UoKVwiIFtzZWFyY2hhYmxlXT1cImlzT3BlblwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIGRyb3Bkb3duIG9wdGlvbnMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpdGVtLmN1cnJlbmN5Q29kZSA9PT0gJ0FsbCcgPyAnQWxsJyA6IChpdGVtLmN1cnJlbmN5Q29kZSArICcgLSAnICsgaXRlbS5jdXJyZW5jeSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmN1cnJlbmN5Q29kZSA9PT0gJ0FsbCcgPyAnQWxsJyA6IChpdGVtLmN1cnJlbmN5Q29kZSArICcgLSAnICsgaXRlbS5jdXJyZW5jeSkgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIHNlbGVjdGVkIHZhbHVlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLWxhYmVsLXRtcCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpdGVtLmN1cnJlbmN5Q29kZSA9PT0gJ0FsbCcgPyAnQWxsJyA6IChpdGVtLmN1cnJlbmN5Q29kZSArICcgLSAnICsgaXRlbS5jdXJyZW5jeSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmN1cnJlbmN5Q29kZSA9PT0gJ0FsbCcgPyAnQWxsJyA6IChpdGVtLmN1cnJlbmN5Q29kZSArICcgLSAnICsgaXRlbS5jdXJyZW5jeSkgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLVNlbmQgQ3VycmVuY3kgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ3NlbmRDdXJyZW5jeSdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPlNlbmQgQ3VycmVuY3k8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cImN1cnJlbmNpZXNcIiBiaW5kVmFsdWU9XCJjdXJyZW5jeUNvZGVcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBDdXJyZW5jeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwiY3VycmVuY3lcIiBbc2VhcmNoYWJsZV09XCJ0cnVlXCIgW3NlYXJjaEZuXT1cImN1cnJlbmN5U2VhcmNoXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChvcGVuKT1cIm9uT3BlbigpXCIgKGNsb3NlKT1cIm9uQ2xvc2UoKVwiIFtzZWFyY2hhYmxlXT1cImlzT3BlblwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIGRyb3Bkb3duIG9wdGlvbnMgLS0+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpdGVtLmN1cnJlbmN5Q29kZSA9PT0gJ0FsbCcgPyAnQWxsJyA6IChpdGVtLmN1cnJlbmN5Q29kZSArICcgLSAnICsgaXRlbS5jdXJyZW5jeSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmN1cnJlbmN5Q29kZSA9PT0gJ0FsbCcgPyAnQWxsJyA6IChpdGVtLmN1cnJlbmN5Q29kZSArICcgLSAnICsgaXRlbS5jdXJyZW5jeSkgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVGVtcGxhdGUgZm9yIHNlbGVjdGVkIHZhbHVlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLWxhYmVsLXRtcCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpdGVtLmN1cnJlbmN5Q29kZSA9PT0gJ0FsbCcgPyAnQWxsJyA6IChpdGVtLmN1cnJlbmN5Q29kZSArICcgLSAnICsgaXRlbS5jdXJyZW5jeSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmN1cnJlbmN5Q29kZSA9PT0gJ0FsbCcgPyAnQWxsJyA6IChpdGVtLmN1cnJlbmN5Q29kZSArICcgLSAnICsgaXRlbS5jdXJyZW5jeSkgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBUcmFuc2FjdGlvbiBTdGF0dXMgKE11bHRpLXNlbGVjdCkgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ3RyYW5zYWN0aW9uU3RhdHVzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+VHhuLiBTdGF0dXM8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgY2xhc3M9XCJ0cmFuc2FjdGlvbi1zdGF0dXMtc2VsZWN0XCIgW2l0ZW1zXT1cInRyYW5zYWN0aW9uU3RhdHVzZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwidHJhbnNhY3Rpb25TdGF0dXNcIiBiaW5kVmFsdWU9XCJ0cmFuc2FjdGlvblN0YXR1c1wiIFttdWx0aXBsZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFRyYW5zYWN0aW9uIFN0YXR1c1wiIGZvcm1Db250cm9sTmFtZT1cInRyYW5zYWN0aW9uU3RhdHVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbG9zZU9uU2VsZWN0XT1cImZhbHNlXCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIFtzZWFyY2hhYmxlXT1cImZhbHNlXCIgcmVxdWlyZWRcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaW52YWxpZC1zZWxlY3QnOiBzZWFyY2hGb3JtLmdldCgndHJhbnNhY3Rpb25TdGF0dXMnKT8uaW52YWxpZCAmJiAoc2VhcmNoRm9ybS5nZXQoJ3RyYW5zYWN0aW9uU3RhdHVzJyk/LnRvdWNoZWQgfHwgZm9ybVZhbGlkYXRpb25FcnJvcil9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIiBsZXQtaXRlbSQ9XCJpdGVtJFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgW2NoZWNrZWRdPVwiaXRlbSQuc2VsZWN0ZWRcIiAvPiB7eyBpdGVtLnRyYW5zYWN0aW9uU3RhdHVzIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFRyYW5zYWN0aW9uIE5vIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIid0cmFuc2FjdGlvbk5vJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+VHhuLiBOdW1iZXI8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBkcGlja2VyXCIgZm9ybUNvbnRyb2xOYW1lPVwidHJhbnNhY3Rpb25Ob1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkVudGVyIHRyYW5zYWN0aW9uIG51bWJlclwiIC8+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gVmFsdWUgRGF0ZSAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCIndmFsdWVEYXRlJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0zXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+VmFsdWUgRGF0ZTxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTlcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBkcGlja2VyXCIgcGxhY2Vob2xkZXI9XCJkZC9tbS95eXl5XCIgbmdiRGF0ZXBpY2tlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAjdG9EYXRlSW5wdXQ9XCJuZ2JEYXRlcGlja2VyXCIgZm9ybUNvbnRyb2xOYW1lPVwidG9EYXRlXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpbnZhbGlkLWRhdGUnOnNlYXJjaEZvcm0uZ2V0KCdkYXRlJyk/LmludmFsaWQgJiYgKHNlYXJjaEZvcm0uZ2V0KCdkYXRlJyk/LnRvdWNoZWQgfHwgZm9ybVZhbGlkYXRpb25FcnJvcil9XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJ0b0RhdGVJbnB1dC50b2dnbGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gU2VuZCBDb3VudHJ5IC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidzZW5kQ291bnRyeSdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPlNlbmQgQ291bnRyeTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwiY291bnRyaWVzXCIgYmluZExhYmVsPVwiY291bnRyeVwiIGJpbmRWYWx1ZT1cImNvdW50cnlDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFByb2R1Y3RcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwic2VuZENvdW50cnlcIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW3RpdGxlXT1cIml0ZW0uY291bnRyeVwiPnt7IGl0ZW0uY291bnRyeSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFJlY2VpdmUgQ291bnRyeSAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCIncmVjZWl2ZUNvdW50cnknXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5SZWNlaXZlIENvdW50cnk8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cImNvdW50cmllc1wiIGJpbmRMYWJlbD1cImNvdW50cnlcIiBiaW5kVmFsdWU9XCJjb3VudHJ5Q29kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBQcm9kdWN0XCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cInJlY2VpdmVDb3VudHJ5XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFt0aXRsZV09XCJpdGVtLmNvdW50cnlcIj57eyBpdGVtLmNvdW50cnkgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLVRyYW5zYWN0aW9uIFByb2R1Y3QgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ3RyYW5zYWN0aW9uUHJvZHVjdCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPlByb2R1Y3Q8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cInRyYW5zYWN0aW9uUHJvZHVjdHNcIiBiaW5kTGFiZWw9XCJuYW1lXCIgYmluZFZhbHVlPVwicHJvZHVjdENvZGVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgUHJvZHVjdFwiIFtjbGVhcmFibGVdPVwiZmFsc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJwcm9kdWN0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gRGF0ZSBUeXBlIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlVHlwZSdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPkRhdGUgVHlwZTwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBwbGFjZWhvbGRlcj1cIi0gUGxlYXNlIHNlbGVjdCAtXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGF0ZVR5cGVcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCIgcmVxdWlyZWQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctb3B0aW9uIFt2YWx1ZV09XCIxXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlIERhdGVcclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLW9wdGlvbiBbdmFsdWVdPVwiMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBQb3N0aW5nIERhdGVcclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctb3B0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIERhdGUgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2RhdGUnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5EYXRlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5wdXQtZ3JvdXAgZGF0ZS1ncm91cFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPVwiZm9ybS1jb250cm9sIGRwaWNrZXJcIiBwbGFjZWhvbGRlcj1cImRkL21tL3l5eXlcIiBuZ2JEYXRlcGlja2VyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICNkYXRlSW5wdXQ9XCJuZ2JEYXRlcGlja2VyXCIgZm9ybUNvbnRyb2xOYW1lPVwiZGF0ZVwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaW52YWxpZC1kYXRlJzogc2VhcmNoRm9ybS5nZXQoJ2RhdGUnKT8uaW52YWxpZCAmJiAoc2VhcmNoRm9ybS5nZXQoJ2RhdGUnKT8udG91Y2hlZCB8fCBmb3JtVmFsaWRhdGlvbkVycm9yKX1cIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImlucHV0LWdyb3VwLWJ1dHRvbiBjYWxcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImRhdGVJbnB1dC50b2dnbGUoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhIGZhLWNhbGVuZGFyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gcmVjZWl2ZUN1cnJlbmN5IC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidyZWNlaXZlQ3VycmVuY3knXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5SZWNlaXZlIEN1cnJlbmN5PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJjdXJyZW5jaWVzXCIgYmluZFZhbHVlPVwiY3VycmVuY3lDb2RlXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgUmVjZWl2ZSBDdXJyZW5jeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwicmVjZWl2ZUN1cnJlbmN5XCIgcmVxdWlyZWQgKGNoYW5nZSk9XCJvbkJyYW5jaENoYW5nZSgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hhYmxlXT1cInRydWVcIiBbc2VhcmNoRm5dPVwiY3VycmVuY3lTZWFyY2hcIiAob3Blbik9XCJvbk9wZW4oKVwiIChjbG9zZSk9XCJvbkNsb3NlKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaGFibGVdPVwiaXNPcGVuXCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPCEtLSBEcm9wZG93biBvcHRpb25zIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiaXRlbS5jdXJyZW5jeUNvZGUgPT09ICdBbGwnID8gJ0FsbCcgOiAoaXRlbS5jdXJyZW5jeUNvZGUgKyAnIC0gJyArIGl0ZW0uY3VycmVuY3kpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgaXRlbS5jdXJyZW5jeUNvZGUgPT09ICdBbGwnID8gJ0FsbCcgOiAoaXRlbS5jdXJyZW5jeUNvZGUgKyAnIC0gJyArIGl0ZW0uY3VycmVuY3kpIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8IS0tIFNlbGVjdGVkIHZhbHVlIC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLWxhYmVsLXRtcCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJpdGVtLmN1cnJlbmN5Q29kZSA9PT0gJ0FsbCcgPyAnQWxsJyA6IChpdGVtLmN1cnJlbmN5Q29kZSArICcgLSAnICsgaXRlbS5jdXJyZW5jeSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBpdGVtLmN1cnJlbmN5Q29kZSA9PT0gJ0FsbCcgPyAnQWxsJyA6IChpdGVtLmN1cnJlbmN5Q29kZSArICcgLSAnICsgaXRlbS5jdXJyZW5jeSkgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBTZW5kIEJ1c2luZXNzUGFydG5lciAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCInc2VuZEJ1c2luZXNzUGFydG5lcidcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPlNlbmQgQ2xpZW50PHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJzZW5kQnVzaW5lc3NQYXJ0bmVyQWdlbnRzXCIgYmluZExhYmVsPVwibmFtZVwiIGJpbmRWYWx1ZT1cImlkXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFNlbmQgUGFydG5lclwiIFtjbGVhcmFibGVdPVwiZmFsc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJzZW5kQnVzaW5lc3NQYXJ0bmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaW52YWxpZC1zZWxlY3QnOiBzZWFyY2hGb3JtLmdldCgnc2VuZEJ1c2luZXNzUGFydG5lcicpPy5pbnZhbGlkICYmIChzZWFyY2hGb3JtLmdldCgnc2VuZEJ1c2luZXNzUGFydG5lcicpPy50b3VjaGVkIHx8IGZvcm1WYWxpZGF0aW9uRXJyb3IpfVwiPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBuZy1vcHRpb24tdG1wIGxldC1pdGVtPVwiaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbdGl0bGVdPVwiaXRlbS5uYW1lXCI+e3sgaXRlbS5uYW1lIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gUmVjdiBCdXNpbmVzc1BhcnRuZXIgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ3JlY3ZCdXNpbmVzc1BhcnRuZXInXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5SZWN2IENsaWVudDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXJcIj4qPC9zcGFuPjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwicmVjdkJ1c2luZXNzUGFydG5lckFnZW50c1wiIGJpbmRMYWJlbD1cIm5hbWVcIiBiaW5kVmFsdWU9XCJpZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBSZWN2IFBhcnRuZXJcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwicmVjdkJ1c2luZXNzUGFydG5lclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQtc2VsZWN0Jzogc2VhcmNoRm9ybS5nZXQoJ3JlY3ZCdXNpbmVzc1BhcnRuZXInKT8uaW52YWxpZCAmJiAoc2VhcmNoRm9ybS5nZXQoJ3JlY3ZCdXNpbmVzc1BhcnRuZXInKT8udG91Y2hlZCB8fCBmb3JtVmFsaWRhdGlvbkVycm9yKX1cIj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgbmctb3B0aW9uLXRtcCBsZXQtaXRlbT1cIml0ZW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW3RpdGxlXT1cIml0ZW0ubmFtZVwiPnt7IGl0ZW0ubmFtZSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFRyYW5zYWN0aW9uIFN0YXR1cyAoU2luZ2xlLXNlbGVjdCkgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ3RyYW5zYWN0aW9uU3RhdHVzU2luZ2xlU2VsZWN0J1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+VHhuLiBTdGF0dXM8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cInRyYW5zYWN0aW9uU3RhdHVzZXNcIiBiaW5kTGFiZWw9XCJ0cmFuc2FjdGlvblN0YXR1c1wiIGJpbmRWYWx1ZT1cInRyYW5zYWN0aW9uU3RhdHVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IFN0YXR1c1wiIFtjbGVhcmFibGVdPVwiZmFsc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJ0cmFuc2FjdGlvblN0YXR1c1wiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQtc2VsZWN0Jzogc2VhcmNoRm9ybS5nZXQoJ3RyYW5zYWN0aW9uU3RhdHVzJyk/LmludmFsaWQgJiYgKHNlYXJjaEZvcm0uZ2V0KCd0cmFuc2FjdGlvblN0YXR1cycpPy50b3VjaGVkIHx8IGZvcm1WYWxpZGF0aW9uRXJyb3IpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEZvciBUcmlhbCBCYWxhbmNlIC0gQWNjb3VudHMgUmVwb3J0IC0tPlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEJ1c2luZXNzIExpbmUgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2J1c2luZXNzTGluZSdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPkJ1c2luZXNzIExpbmU8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cImJ1c2luZXNzTGluZXNcIiBiaW5kTGFiZWw9XCJidXNpbmVzc0xpbmVcIiBiaW5kVmFsdWU9XCJidXNpbmVzc0xpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQnVzaW5lc3MgTGluZVwiIFtjbGVhcmFibGVdPVwiZmFsc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJidXNpbmVzc0xpbmVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpbnZhbGlkLXNlbGVjdCc6IHNlYXJjaEZvcm0uZ2V0KCdidXNpbmVzc0xpbmUnKT8uaW52YWxpZCAmJiAoc2VhcmNoRm9ybS5nZXQoJ2J1c2luZXNzTGluZScpPy50b3VjaGVkIHx8IGZvcm1WYWxpZGF0aW9uRXJyb3IpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFllYXIgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2ZpbmFuY2lhbFllYXInXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5GaW5hbmNpYWwgWWVhcjwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwiZmluYW5jaWFsWWVhcnNcIiBiaW5kTGFiZWw9XCJmaW5hbmNpYWxZZWFyXCIgYmluZFZhbHVlPVwiZmluYW5jaWFsWWVhclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlbGVjdCBZZWFyXCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cImZpbmFuY2lhbFllYXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpbnZhbGlkLXNlbGVjdCc6IHNlYXJjaEZvcm0uZ2V0KCdmaW5hbmNpYWxZZWFyJyk/LmludmFsaWQgJiYgKHNlYXJjaEZvcm0uZ2V0KCdmaW5hbmNpYWxZZWFyJyk/LnRvdWNoZWQgfHwgZm9ybVZhbGlkYXRpb25FcnJvcil9XCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25TZWxlY3RGaW5hbmNpYWxZZWFyKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBGcm9tIE1vbnRoIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidmcm9tTW9udGgnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5Gcm9tIE1vbnRoPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJmcm9tTW9udGhzXCIgYmluZExhYmVsPVwicGVyaW9kXCIgYmluZFZhbHVlPVwicE9yZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IEZyb20gTW9udGhcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwiZnJvbU1vbnRoXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsnaW52YWxpZC1zZWxlY3QnOiBzZWFyY2hGb3JtLmdldCgnZnJvbU1vbnRoJyk/LmludmFsaWQgJiYgKHNlYXJjaEZvcm0uZ2V0KCdmcm9tTW9udGgnKT8udG91Y2hlZHx8IGZvcm1WYWxpZGF0aW9uRXJyb3IpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0RnJvbU1vbnRoKClcIj5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLXNlbGVjdD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgPCEtLSBUbyBNb250aCAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCIndG9Nb250aCdcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgYWxpZ24taXRlbXMtY2VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tbGFiZWwgbGFiZWwtZGF0YVwiPlRvIE1vbnRoPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJ0b01vbnRoc1wiIGJpbmRMYWJlbD1cInBNb250aE5hbWVcIiBiaW5kVmFsdWU9XCJwTW9udGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgVG8gTW9udGhcIiBbY2xlYXJhYmxlXT1cImZhbHNlXCIgZm9ybUNvbnRyb2xOYW1lPVwidG9Nb250aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQtc2VsZWN0Jzogc2VhcmNoRm9ybS5nZXQoJ3RvTW9udGgnKT8uaW52YWxpZCAmJiAoc2VhcmNoRm9ybS5nZXQoJ3RvTW9udGgnKT8udG91Y2hlZHx8IGZvcm1WYWxpZGF0aW9uRXJyb3IpfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uU2VsZWN0VG9Nb250aCgpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gRnJvbSBEYXkgLS0+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ2Zyb21EYXknXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5Gcm9tIERheSA8c3BhbiBjbGFzcz1cInRleHQtZGFuZ2VyXCI+Kjwvc3Bhbj48L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgW2l0ZW1zXT1cImZyb21EYXlzXCIgYmluZExhYmVsPVwiaW5kaXZpZHVhbERheVwiIGJpbmRWYWx1ZT1cImluZGl2aWR1YWxEYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IEZyb20gRGF5XCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIGZvcm1Db250cm9sTmFtZT1cImZyb21EYXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpbnZhbGlkLXNlbGVjdCc6IHNlYXJjaEZvcm0uZ2V0KCdmcm9tRGF5Jyk/LmludmFsaWQgJiYgKHNlYXJjaEZvcm0uZ2V0KCdmcm9tRGF5Jyk/LnRvdWNoZWR8fCBmb3JtVmFsaWRhdGlvbkVycm9yKX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvblNlbGVjdEZyb21EYXkoKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICA8IS0tIFRvIERheSAtLT5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9ybS1maWVsZFwiICpuZ1N3aXRjaENhc2U9XCIndG9EYXknXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5UbyBEYXk8c3BhbiBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAxcHg7XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWRhbmdlclwiPio8L3NwYW4+PC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJ0b0RheXNcIiBiaW5kTGFiZWw9XCJwRGF0ZVwiIGJpbmRWYWx1ZT1cImluZGl2aWR1YWxEYXRlXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgVG8gRGF5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbGVhcmFibGVdPVwiZmFsc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJ0b0RheVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQtc2VsZWN0Jzogc2VhcmNoRm9ybS5nZXQoJ3RvRGF5Jyk/LmludmFsaWQgJiYgKHNlYXJjaEZvcm0uZ2V0KCd0b0RheScpPy50b3VjaGVkfHwgZm9ybVZhbGlkYXRpb25FcnJvcil9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgIDwhLS0gRGF0ZSBUeXBlIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidkYXRlVHlwZUZvclRyaWFsQmFsYW5jZUFjY291bnRzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+RGF0ZSBUeXBlPC9sYWJlbD5cclxuICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtMTBcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bmctc2VsZWN0IFtpdGVtc109XCJkYXRlVHlwZXNcIiBiaW5kTGFiZWw9XCJkYXRlVHlwZUxhYmVsXCIgYmluZFZhbHVlPVwiZGF0ZVR5cGVDb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IERhdGUgVHlwZVwiIGZvcm1Db250cm9sTmFtZT1cImRhdGVUeXBlXCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQtc2VsZWN0Jzogc2VhcmNoRm9ybS5nZXQoJ2RhdGVUeXBlJyk/LmludmFsaWQgJiYgKHNlYXJjaEZvcm0uZ2V0KCdkYXRlVHlwZScpPy50b3VjaGVkfHwgZm9ybVZhbGlkYXRpb25FcnJvcil9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy1zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG5cclxuICAgICAgICAgICAgICA8IS0tIEFjY291bnQgU3RhdHVzIC0tPlxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb3JtLWZpZWxkXCIgKm5nU3dpdGNoQ2FzZT1cIidhY2NvdW50U3RhdHVzJ1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBhbGlnbi1pdGVtcy1jZW50ZXJcIj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1sYWJlbCBsYWJlbC1kYXRhXCI+QWNjb3VudCBTdGF0dXM8L2xhYmVsPlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC0xMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1zZWxlY3QgY2xhc3M9XCJ0cmFuc2FjdGlvbi1zdGF0dXMtc2VsZWN0XCIgW2l0ZW1zXT1cImFjY291bnRTdGF0dXNlc1wiIGJpbmRMYWJlbD1cInN0YXR1c05hbWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgYmluZFZhbHVlPVwic3RhdHVzQ29kZVwiIFttdWx0aXBsZV09XCJ0cnVlXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgQWNjb3VudCBTdGF0dXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiYWNjb3VudFN0YXR1c1wiIFtjbG9zZU9uU2VsZWN0XT1cImZhbHNlXCIgW2NsZWFyYWJsZV09XCJmYWxzZVwiIFtzZWFyY2hhYmxlXT1cImZhbHNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2ludmFsaWQtc2VsZWN0Jzogc2VhcmNoRm9ybS5nZXQoJ2FjY291bnRTdGF0dXMnKT8uaW52YWxpZCAmJiAoc2VhcmNoRm9ybS5nZXQoJ2FjY291bnRTdGF0dXMnKT8udG91Y2hlZHx8IGZvcm1WYWxpZGF0aW9uRXJyb3IpfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCIgbGV0LWl0ZW0kPVwiaXRlbSRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIFtjaGVja2VkXT1cIml0ZW0kLnNlbGVjdGVkXCIgLz4ge3sgaXRlbS5zdGF0dXNOYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwhLS1TdW1tYXJ5IFJlcG9ydC0tPlxyXG4gICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGRcIiAqbmdTd2l0Y2hDYXNlPVwiJ3N1bW1hcnlSZXBvcnQnXCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93IGFsaWduLWl0ZW1zLWNlbnRlclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJmb3JtLWxhYmVsIGxhYmVsLWRhdGFcIj5TdW1tYXJ5IFJlcG9ydDwvbGFiZWw+XHJcbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLTEwXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXNlbGVjdCBbaXRlbXNdPVwic3VtbWFyeVJlcG9ydFR5cGVzXCIgYmluZExhYmVsPVwibGFiZWxcIiBiaW5kVmFsdWU9XCJ2YWx1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgIFtjbGVhcmFibGVdPVwiZmFsc2VcIiBmb3JtQ29udHJvbE5hbWU9XCJzdW1tYXJ5UmVwb3J0XCI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIG5nLW9wdGlvbi10bXAgbGV0LWl0ZW09XCJpdGVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFt0aXRsZV09XCJpdGVtLmxhYmVsXCI+e3sgaXRlbS5sYWJlbCB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctc2VsZWN0PlxyXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2IGNsYXNzPVwiY29sLWN1c3RvbS0xLTVcIj5cclxuICAgICAgICA8IS0tIFZpZXcgUmVwb3J0IEJ1dHRvbiAoQWx3YXlzIGF0IFRvcC1SaWdodCkgLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZvcm0tZmllbGQgdmlldy1yZXBvcnQtYnRuXCI+XHJcbiAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJzdWJtaXRcIiBjbGFzcz1cImJ0biBidG4tcmVwb3J0XCI+VmlldzwvYnV0dG9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZm9ybT5cclxuPC9zZWN0aW9uPlxyXG48aHI+XHJcbjwhLS0gRXJyb3IgTWVzc2FnZXMgLS0+XHJcbjxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXIgbXQtM1wiICpuZ0lmPVwiZm9ybVZhbGlkYXRpb25FcnJvciAmJiBoYXNTZWFyY2hlZFwiPlxyXG4gIFBsZWFzZSBmaWxsIGFsbCBtYW5kYXRvcnkgZmllbGRzXHJcbjwvZGl2PlxyXG5cclxuPGRpdiBjbGFzcz1cImFsZXJ0IGFsZXJ0LWRhbmdlciBtdC0zXCIgKm5nSWY9XCJlcnJvck1lc3NhZ2UgJiYgbG9hZGluZ1N0YXRlID09PSBDb21wb25lbnRMb2FkaW5nU3RhdGUuRXJyb3JcIj5cclxuICB7eyBlcnJvck1lc3NhZ2UgfX1cclxuPC9kaXY+Il19
|